ember-repl 6.0.0 → 7.0.1

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 (146) hide show
  1. package/LICENSE.md +1 -1
  2. package/README.md +2 -404
  3. package/config/.try.mjs +87 -0
  4. package/config/addon-main.cjs +7 -0
  5. package/config/attw.json +7 -0
  6. package/config/babel.publish.config.cjs +29 -0
  7. package/config/ember-cli-update.json +21 -0
  8. package/config/rollup.config.mjs +44 -0
  9. package/config/testem.cjs +35 -0
  10. package/config/tsconfig.publish.json +15 -0
  11. package/config/vite.config.mjs +36 -0
  12. package/declarations/compile/Compiled.d.ts +7 -0
  13. package/declarations/compile/Compiled.d.ts.map +1 -0
  14. package/declarations/compile/compile.d.ts +17 -0
  15. package/declarations/compile/compile.d.ts.map +1 -0
  16. package/declarations/compile/state.d.ts +43 -0
  17. package/declarations/compile/state.d.ts.map +1 -0
  18. package/declarations/compile/types.d.ts +5 -12
  19. package/declarations/compile/types.d.ts.map +1 -1
  20. package/declarations/index.d.ts +6 -2
  21. package/declarations/index.d.ts.map +1 -1
  22. package/declarations/services/compiler.d.ts +94 -0
  23. package/declarations/services/compiler.d.ts.map +1 -0
  24. package/declarations/services/known-modules.d.ts +7 -0
  25. package/declarations/services/known-modules.d.ts.map +1 -0
  26. package/declarations/setup.d.ts +7 -0
  27. package/declarations/setup.d.ts.map +1 -0
  28. package/declarations/test-support.d.ts +20 -0
  29. package/declarations/test-support.d.ts.map +1 -0
  30. package/dist/_commonjsHelpers-BAGoDD49.js +37 -0
  31. package/dist/_commonjsHelpers-BAGoDD49.js.map +1 -0
  32. package/dist/babel-8wMrbxkT.js +110427 -0
  33. package/dist/babel-8wMrbxkT.js.map +1 -0
  34. package/dist/blank-line-Bzg2Qt4K.js +482 -0
  35. package/dist/blank-line-Bzg2Qt4K.js.map +1 -0
  36. package/dist/compile/Compiled.js +26 -0
  37. package/dist/compile/Compiled.js.map +1 -0
  38. package/dist/compile/compile.js +62 -0
  39. package/dist/compile/compile.js.map +1 -0
  40. package/dist/compile/state.js +75 -0
  41. package/dist/compile/state.js.map +1 -0
  42. package/dist/compile/utils.js +213 -2
  43. package/dist/compile/utils.js.map +1 -1
  44. package/dist/default-CoqAuVeH.js +4 -0
  45. package/dist/default-CoqAuVeH.js.map +1 -0
  46. package/dist/index-BTx1k6gT.js +323 -0
  47. package/dist/index-BTx1k6gT.js.map +1 -0
  48. package/dist/index-Bxzjtr16.js +87 -0
  49. package/dist/index-Bxzjtr16.js.map +1 -0
  50. package/dist/index-C371bO_b.js +1553 -0
  51. package/dist/index-C371bO_b.js.map +1 -0
  52. package/dist/index-C4AyeeIa.js +5721 -0
  53. package/dist/index-C4AyeeIa.js.map +1 -0
  54. package/dist/index-C8S2G0FH.js +1953 -0
  55. package/dist/index-C8S2G0FH.js.map +1 -0
  56. package/dist/index-CCcIVEUK.js +409 -0
  57. package/dist/index-CCcIVEUK.js.map +1 -0
  58. package/dist/index-CDSIcg03.js +9070 -0
  59. package/dist/index-CDSIcg03.js.map +1 -0
  60. package/dist/index-D8szzCn3.js +2 -0
  61. package/dist/index-D8szzCn3.js.map +1 -0
  62. package/dist/index-DBBNT106.js +2644 -0
  63. package/dist/index-DBBNT106.js.map +1 -0
  64. package/dist/index-DP_Su7Zc.js +362 -0
  65. package/dist/index-DP_Su7Zc.js.map +1 -0
  66. package/dist/index-DejgrVqh.js +11299 -0
  67. package/dist/index-DejgrVqh.js.map +1 -0
  68. package/dist/index-Dr5iYoKt.js +1551 -0
  69. package/dist/index-Dr5iYoKt.js.map +1 -0
  70. package/dist/index-DxolpiGq.js +3336 -0
  71. package/dist/index-DxolpiGq.js.map +1 -0
  72. package/dist/index-ZyJlPFQY.js +249 -0
  73. package/dist/index-ZyJlPFQY.js.map +1 -0
  74. package/dist/index-k6CfLgeq.js +26 -0
  75. package/dist/index-k6CfLgeq.js.map +1 -0
  76. package/dist/index.js +4 -1
  77. package/dist/index.js.map +1 -1
  78. package/dist/services/compiler.js +329 -0
  79. package/dist/services/compiler.js.map +1 -0
  80. package/dist/services/known-modules.js +123 -0
  81. package/dist/services/known-modules.js.map +1 -0
  82. package/dist/setup.js +15 -0
  83. package/dist/setup.js.map +1 -0
  84. package/dist/test-support.js +33 -0
  85. package/dist/test-support.js.map +1 -0
  86. package/package.json +117 -138
  87. package/src/compile/Compiled.ts +45 -0
  88. package/src/compile/compile.ts +89 -0
  89. package/src/compile/state.ts +88 -0
  90. package/src/compile/types.ts +14 -13
  91. package/src/index.ts +6 -2
  92. package/src/services/compiler.ts +401 -0
  93. package/src/services/known-modules.ts +130 -0
  94. package/src/setup.ts +26 -0
  95. package/src/test-support.ts +64 -0
  96. package/addon-main.cjs +0 -5
  97. package/declarations/__PRIVATE__.d.ts +0 -2
  98. package/declarations/__PRIVATE__.d.ts.map +0 -1
  99. package/declarations/compile/formats/gjs/babel.d.ts +0 -7
  100. package/declarations/compile/formats/gjs/babel.d.ts.map +0 -1
  101. package/declarations/compile/formats/gjs/eval.d.ts +0 -8
  102. package/declarations/compile/formats/gjs/eval.d.ts.map +0 -1
  103. package/declarations/compile/formats/gjs/index.d.ts +0 -24
  104. package/declarations/compile/formats/gjs/index.d.ts.map +0 -1
  105. package/declarations/compile/formats/gjs/known-modules.d.ts +0 -48
  106. package/declarations/compile/formats/gjs/known-modules.d.ts.map +0 -1
  107. package/declarations/compile/formats/hbs.d.ts +0 -17
  108. package/declarations/compile/formats/hbs.d.ts.map +0 -1
  109. package/declarations/compile/formats/markdown.d.ts +0 -22
  110. package/declarations/compile/formats/markdown.d.ts.map +0 -1
  111. package/declarations/compile/formats.d.ts +0 -17
  112. package/declarations/compile/formats.d.ts.map +0 -1
  113. package/declarations/compile/index.d.ts +0 -80
  114. package/declarations/compile/index.d.ts.map +0 -1
  115. package/declarations/test-support/index.d.ts +0 -2
  116. package/declarations/test-support/index.d.ts.map +0 -1
  117. package/dist/__PRIVATE__.js +0 -2
  118. package/dist/__PRIVATE__.js.map +0 -1
  119. package/dist/compile/formats/gjs/babel.js +0 -2
  120. package/dist/compile/formats/gjs/babel.js.map +0 -1
  121. package/dist/compile/formats/gjs/eval.js +0 -19
  122. package/dist/compile/formats/gjs/eval.js.map +0 -1
  123. package/dist/compile/formats/gjs/index.js +0 -122
  124. package/dist/compile/formats/gjs/index.js.map +0 -1
  125. package/dist/compile/formats/gjs/known-modules.js +0 -52
  126. package/dist/compile/formats/gjs/known-modules.js.map +0 -1
  127. package/dist/compile/formats/hbs.js +0 -93
  128. package/dist/compile/formats/hbs.js.map +0 -1
  129. package/dist/compile/formats/markdown.js +0 -266
  130. package/dist/compile/formats/markdown.js.map +0 -1
  131. package/dist/compile/formats.js +0 -173
  132. package/dist/compile/formats.js.map +0 -1
  133. package/dist/compile/index.js +0 -113
  134. package/dist/compile/index.js.map +0 -1
  135. package/dist/test-support/index.js +0 -8
  136. package/dist/test-support/index.js.map +0 -1
  137. package/src/__PRIVATE__.ts +0 -1
  138. package/src/compile/formats/gjs/babel.ts +0 -7
  139. package/src/compile/formats/gjs/eval.ts +0 -29
  140. package/src/compile/formats/gjs/index.ts +0 -153
  141. package/src/compile/formats/gjs/known-modules.ts +0 -49
  142. package/src/compile/formats/hbs.ts +0 -100
  143. package/src/compile/formats/markdown.ts +0 -345
  144. package/src/compile/formats.ts +0 -178
  145. package/src/compile/index.ts +0 -219
  146. package/src/test-support/index.ts +0 -5
@@ -0,0 +1,323 @@
1
+ import { g as getDefaultExportFromCjs } from './_commonjsHelpers-BAGoDD49.js';
2
+
3
+ function _mergeNamespaces(n, m) {
4
+ m.forEach(function (e) {
5
+ e && typeof e !== 'string' && !Array.isArray(e) && Object.keys(e).forEach(function (k) {
6
+ if (k !== 'default' && !(k in n)) {
7
+ var d = Object.getOwnPropertyDescriptor(e, k);
8
+ Object.defineProperty(n, k, d.get ? d : {
9
+ enumerable: true,
10
+ get: function () { return e[k]; }
11
+ });
12
+ }
13
+ });
14
+ });
15
+ return Object.freeze(n);
16
+ }
17
+
18
+ var src = {};
19
+
20
+ var sanitize = {};
21
+
22
+ var hasRequiredSanitize;
23
+
24
+ function requireSanitize () {
25
+ if (hasRequiredSanitize) return sanitize;
26
+ hasRequiredSanitize = 1;
27
+
28
+ // make a name into a valid javascript identifier, as pleasantly as possible.
29
+ Object.defineProperty(sanitize, "__esModule", {
30
+ value: true
31
+ });
32
+ sanitize.sanitize = void 0;
33
+ function sanitize$1(identifier) {
34
+ // first we opportunistically do camelization when an illegal character is not
35
+ // the first character and is followed by a lowercase letter, in an effort to
36
+ // aid readability of the output.
37
+ let cleaned = identifier.replace(new RegExp(`(?<!^)(?:${illegalChar.source})([a-z])`, 'g'), (_m, letter) => letter.toUpperCase());
38
+ // then we unliterally strip all remaining illegal characters.
39
+ cleaned = cleaned.replace(new RegExp(illegalChar.source, 'g'), '');
40
+ return cleaned;
41
+ }
42
+ sanitize.sanitize = sanitize$1;
43
+ const illegalChar = /^[^a-zA-Z_$]|(?<=.)[^a-zA-Z_$0-9]/;
44
+ return sanitize;
45
+ }
46
+
47
+ var hasRequiredSrc;
48
+
49
+ function requireSrc () {
50
+ if (hasRequiredSrc) return src;
51
+ hasRequiredSrc = 1;
52
+
53
+ Object.defineProperty(src, "__esModule", {
54
+ value: true
55
+ });
56
+ src.ImportUtil = void 0;
57
+ const sanitize_1 = requireSanitize();
58
+ class ImportUtil {
59
+ constructor(babel, program) {
60
+ this.babel = babel;
61
+ this.program = program;
62
+ this.t = babel.types;
63
+ }
64
+ // remove one imported binding. If this is the last thing imported from the
65
+ // given moduleSpecifier, the whole statement will also be removed.
66
+ removeImport(moduleSpecifier, exportedName) {
67
+ for (let topLevelPath of this.program.get('body')) {
68
+ if (!matchModule(topLevelPath, moduleSpecifier)) {
69
+ continue;
70
+ }
71
+ let importSpecifierPath = topLevelPath.get('specifiers').find(specifierPath => matchSpecifier(specifierPath, exportedName));
72
+ if (importSpecifierPath) {
73
+ if (topLevelPath.node.specifiers.length === 1) {
74
+ topLevelPath.remove();
75
+ } else {
76
+ importSpecifierPath.remove();
77
+ }
78
+ }
79
+ }
80
+ }
81
+ // remove all imports from the given moduleSpecifier
82
+ removeAllImports(moduleSpecifier) {
83
+ for (let topLevelPath of this.program.get('body')) {
84
+ if (matchModule(topLevelPath, moduleSpecifier)) {
85
+ topLevelPath.remove();
86
+ }
87
+ }
88
+ }
89
+ // Import the given value (if needed) and return an Identifier representing
90
+ // it.
91
+ //
92
+ // This method is trickier to use safely than our higher-level methods
93
+ // (`insertAfter`, `insertBefore`, `replaceWith`, `mutate`) because after you
94
+ // insert the identifier into the AST, it's up to you to ensure that babel's
95
+ // scope system is aware of the new reference. The other methods do that for
96
+ // you automatically.
97
+ import(
98
+ // the spot at which you will insert the Identifier we return to you
99
+ target,
100
+ // the path to the module you're importing from
101
+ moduleSpecifier,
102
+ // the name you're importing from that module. Use "default" for the default
103
+ // export. Use "*" for the namespace.
104
+ exportedName,
105
+ // Optional hint for helping us pick a name for the imported binding
106
+ nameHint) {
107
+ return this.unreferencedImport(target, moduleSpecifier, exportedName, desiredName(nameHint, exportedName, defaultNameHint(target)));
108
+ }
109
+ // Import the given value (if needed) and return an Identifier representing
110
+ // it.
111
+ unreferencedImport(
112
+ // the spot at which you will insert the Identifier we return to you
113
+ target,
114
+ // the path to the module you're importing from
115
+ moduleSpecifier,
116
+ // the name you're importing from that module. Use "default" for the default
117
+ // export. Use "*" for the namespace.
118
+ exportedName,
119
+ // the preferred name you want, if we neeed to create a new binding. You
120
+ // might get something similar instead, to avoid collisions.
121
+ preferredName) {
122
+ var _a;
123
+ let isNamespaceImport = exportedName === '*';
124
+ let isDefaultImport = exportedName === 'default';
125
+ let isNamedImport = !isDefaultImport && !isNamespaceImport;
126
+ let declaration = this.findImportFrom(moduleSpecifier);
127
+ let hasNamespaceSpecifier = declaration === null || declaration === void 0 ? void 0 : declaration.node.specifiers.find(s => s.type === 'ImportNamespaceSpecifier');
128
+ let hasNamedSpecifiers = declaration === null || declaration === void 0 ? void 0 : declaration.node.specifiers.find(s => s.type === 'ImportSpecifier');
129
+ /**
130
+ * the file has a preexisting non-namespace import and a transform tries to add a namespace import, so they don't get combined
131
+ * the file has a preexisting namespace import and a transform tries to add a non-namespace import, so they don't get combined
132
+ * the file has a preexisting namespace import and a transform tries to add a namespace import, so they don't get combined
133
+ */
134
+ let cannotUseExistingDeclaration = hasNamedSpecifiers && isNamespaceImport || hasNamespaceSpecifier && isNamedImport || hasNamespaceSpecifier && isNamespaceImport;
135
+ if (!cannotUseExistingDeclaration && declaration) {
136
+ let specifier = declaration.get('specifiers').find(spec => matchSpecifier(spec, exportedName));
137
+ if (specifier && ((_a = target.scope.getBinding(specifier.node.local.name)) === null || _a === void 0 ? void 0 : _a.kind) === 'module') {
138
+ return this.t.identifier(specifier.node.local.name);
139
+ } else {
140
+ return this.addSpecifier(target, declaration, exportedName, preferredName);
141
+ }
142
+ } else {
143
+ let declaration = this.insertAfterExistingImports(this.t.importDeclaration([], this.t.stringLiteral(moduleSpecifier)));
144
+ return this.addSpecifier(target, declaration, exportedName, preferredName);
145
+ }
146
+ }
147
+ importForSideEffect(moduleSpecifier) {
148
+ let declaration = this.findImportFrom(moduleSpecifier);
149
+ if (!declaration) {
150
+ this.insertAfterExistingImports(this.t.importDeclaration([], this.t.stringLiteral(moduleSpecifier)));
151
+ }
152
+ }
153
+ replaceWith(target, fn) {
154
+ return this.mutate(i => {
155
+ target.replaceWith(fn(i));
156
+ // the return value of replaceWith is not a reliable way to get the
157
+ // updated path, at least in the case where the user replaced an
158
+ // expression with a statement. Instead we will rely on the fact that path
159
+ // replacement also mutates its argument, so `target` now points at the
160
+ // newly replaced path.
161
+ return target;
162
+ }, defaultNameHint(target));
163
+ }
164
+ insertAfter(target, fn) {
165
+ return this.mutate(i => target.insertAfter(fn(i))[0], defaultNameHint(target));
166
+ }
167
+ insertBefore(target, fn) {
168
+ return this.mutate(i => target.insertBefore(fn(i))[0], defaultNameHint(target));
169
+ }
170
+ // Low-level method for when you don't want to use our higher-level methods
171
+ // (replaceWith, insertBefore, insertAfter)
172
+ mutate(fn, defaultNameHint) {
173
+ let symbols = new Map();
174
+ const importer = {
175
+ import: (moduleSpecifier, exportedName, nameHint) => {
176
+ let identifier = this.t.identifier('__babel_import_util_placeholder__');
177
+ symbols.set(identifier, {
178
+ moduleSpecifier,
179
+ exportedName,
180
+ nameHint
181
+ });
182
+ return identifier;
183
+ }
184
+ };
185
+ const updateReference = path => {
186
+ if (!path.isIdentifier()) {
187
+ return;
188
+ }
189
+ let hit = symbols.get(path.node);
190
+ if (hit) {
191
+ let newIdentifier = this.unreferencedImport(path, hit.moduleSpecifier, hit.exportedName, desiredName(hit.nameHint, hit.exportedName, defaultNameHint));
192
+ path.replaceWith(newIdentifier);
193
+ let binding = path.scope.getBinding(newIdentifier.name);
194
+ if (!binding) {
195
+ // we create the binding at the point where we add the import, so this
196
+ // would indicate broken behavior
197
+ throw new Error(`bug: this is supposed to never happen`);
198
+ }
199
+ binding.reference(path);
200
+ }
201
+ };
202
+ let result = fn(importer);
203
+ updateReference(result);
204
+ this.babel.traverse(result.node, {
205
+ ReferencedIdentifier: path => {
206
+ updateReference(path);
207
+ }
208
+ }, result.scope, {}, result);
209
+ return result;
210
+ }
211
+ addSpecifier(target, declaration, exportedName, preferredName) {
212
+ let local = this.t.identifier(unusedNameLike(target, preferredName));
213
+ let specifier = this.buildSpecifier(exportedName, local);
214
+ let added;
215
+ if (specifier.type === 'ImportDefaultSpecifier') {
216
+ declaration.node.specifiers.unshift(specifier);
217
+ added = declaration.get(`specifiers.0`);
218
+ } else {
219
+ declaration.node.specifiers.push(specifier);
220
+ added = declaration.get(`specifiers.${declaration.node.specifiers.length - 1}`);
221
+ }
222
+ declaration.scope.registerBinding('module', added);
223
+ return local;
224
+ }
225
+ buildSpecifier(exportedName, localName) {
226
+ switch (exportedName) {
227
+ case 'default':
228
+ return this.t.importDefaultSpecifier(localName);
229
+ case '*':
230
+ return this.t.importNamespaceSpecifier(localName);
231
+ default:
232
+ return this.t.importSpecifier(localName, this.t.identifier(exportedName));
233
+ }
234
+ }
235
+ findImportFrom(moduleSpecifier) {
236
+ for (let path of this.program.get('body')) {
237
+ if (path.isImportDeclaration() && path.node.source.value === moduleSpecifier && path.node.importKind !== 'type') {
238
+ return path;
239
+ }
240
+ }
241
+ return undefined;
242
+ }
243
+ insertAfterExistingImports(statement) {
244
+ let lastIndex;
245
+ for (let [index, node] of this.program.node.body.entries()) {
246
+ if (node.type === 'ImportDeclaration') {
247
+ lastIndex = index;
248
+ }
249
+ }
250
+ if (lastIndex == null) {
251
+ // we are intentionally not using babel's container-aware methods, because
252
+ // while in theory it's nice that they schedule other plugins to run on
253
+ // our nodes, in practice those nodes might get mutated or removed by some
254
+ // other plugin in the intervening time causing failures.
255
+ this.program.node.body.unshift(statement);
256
+ return this.program.get('body.0');
257
+ } else {
258
+ this.program.node.body.splice(lastIndex + 1, 0, statement);
259
+ return this.program.get(`body.${lastIndex + 1}`);
260
+ }
261
+ }
262
+ }
263
+ src.ImportUtil = ImportUtil;
264
+ function unusedNameLike(path, name) {
265
+ let candidate = name;
266
+ let counter = 0;
267
+ while (path.scope.hasBinding(candidate)) {
268
+ candidate = `${name}${counter++}`;
269
+ }
270
+ return candidate;
271
+ }
272
+ function name(node) {
273
+ if (node.type === 'StringLiteral') {
274
+ return node.value;
275
+ } else {
276
+ return node.name;
277
+ }
278
+ }
279
+ function desiredName(nameHint, exportedName, defaultNameHint) {
280
+ if (nameHint) {
281
+ return (0, sanitize_1.sanitize)(nameHint);
282
+ }
283
+ if (exportedName === 'default' || exportedName === '*') {
284
+ return defaultNameHint !== null && defaultNameHint !== void 0 ? defaultNameHint : 'a';
285
+ } else {
286
+ return exportedName;
287
+ }
288
+ }
289
+ function defaultNameHint(target) {
290
+ if (target === null || target === void 0 ? void 0 : target.isIdentifier()) {
291
+ return target.node.name;
292
+ } else if (target) {
293
+ return target.scope.generateUidIdentifierBasedOnNode(target.node).name;
294
+ } else {
295
+ return undefined;
296
+ }
297
+ }
298
+ function matchSpecifier(spec, exportedName) {
299
+ switch (exportedName) {
300
+ case 'default':
301
+ return spec.isImportDefaultSpecifier();
302
+ case '*':
303
+ return spec.isImportNamespaceSpecifier();
304
+ default:
305
+ return spec.isImportSpecifier() && name(spec.node.imported) === exportedName;
306
+ }
307
+ }
308
+ function matchModule(path, moduleSpecifier) {
309
+ return path.isImportDeclaration() && path.get('source').node.value === moduleSpecifier;
310
+ }
311
+ return src;
312
+ }
313
+
314
+ var srcExports = requireSrc();
315
+ var index = /*@__PURE__*/getDefaultExportFromCjs(srcExports);
316
+
317
+ var index$1 = /*#__PURE__*/_mergeNamespaces({
318
+ __proto__: null,
319
+ default: index
320
+ }, [srcExports]);
321
+
322
+ export { index$1 as i };
323
+ //# sourceMappingURL=index-BTx1k6gT.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-BTx1k6gT.js","sources":["../../../node_modules/.pnpm/babel-import-util@3.0.1/node_modules/babel-import-util/src/sanitize.js","../../../node_modules/.pnpm/babel-import-util@3.0.1/node_modules/babel-import-util/src/index.js"],"sourcesContent":["\"use strict\";\n// make a name into a valid javascript identifier, as pleasantly as possible.\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.sanitize = void 0;\nfunction sanitize(identifier) {\n // first we opportunistically do camelization when an illegal character is not\n // the first character and is followed by a lowercase letter, in an effort to\n // aid readability of the output.\n let cleaned = identifier.replace(new RegExp(`(?<!^)(?:${illegalChar.source})([a-z])`, 'g'), (_m, letter) => letter.toUpperCase());\n // then we unliterally strip all remaining illegal characters.\n cleaned = cleaned.replace(new RegExp(illegalChar.source, 'g'), '');\n return cleaned;\n}\nexports.sanitize = sanitize;\nconst illegalChar = /^[^a-zA-Z_$]|(?<=.)[^a-zA-Z_$0-9]/;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2FuaXRpemUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJzYW5pdGl6ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsNkVBQTZFOzs7QUFFN0UsU0FBZ0IsUUFBUSxDQUFDLFVBQWtCO0lBQ3pDLDhFQUE4RTtJQUM5RSw2RUFBNkU7SUFDN0UsaUNBQWlDO0lBQ2pDLElBQUksT0FBTyxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQzlCLElBQUksTUFBTSxDQUFDLFlBQVksV0FBVyxDQUFDLE1BQU0sVUFBVSxFQUFFLEdBQUcsQ0FBQyxFQUN6RCxDQUFDLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsQ0FDckMsQ0FBQztJQUNGLDhEQUE4RDtJQUM5RCxPQUFPLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLE1BQU0sQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ25FLE9BQU8sT0FBTyxDQUFDO0FBQ2pCLENBQUM7QUFYRCw0QkFXQztBQUVELE1BQU0sV0FBVyxHQUFHLG1DQUFtQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gbWFrZSBhIG5hbWUgaW50byBhIHZhbGlkIGphdmFzY3JpcHQgaWRlbnRpZmllciwgYXMgcGxlYXNhbnRseSBhcyBwb3NzaWJsZS5cblxuZXhwb3J0IGZ1bmN0aW9uIHNhbml0aXplKGlkZW50aWZpZXI6IHN0cmluZyk6IHN0cmluZyB7XG4gIC8vIGZpcnN0IHdlIG9wcG9ydHVuaXN0aWNhbGx5IGRvIGNhbWVsaXphdGlvbiB3aGVuIGFuIGlsbGVnYWwgY2hhcmFjdGVyIGlzIG5vdFxuICAvLyB0aGUgZmlyc3QgY2hhcmFjdGVyIGFuZCBpcyBmb2xsb3dlZCBieSBhIGxvd2VyY2FzZSBsZXR0ZXIsIGluIGFuIGVmZm9ydCB0b1xuICAvLyBhaWQgcmVhZGFiaWxpdHkgb2YgdGhlIG91dHB1dC5cbiAgbGV0IGNsZWFuZWQgPSBpZGVudGlmaWVyLnJlcGxhY2UoXG4gICAgbmV3IFJlZ0V4cChgKD88IV4pKD86JHtpbGxlZ2FsQ2hhci5zb3VyY2V9KShbYS16XSlgLCAnZycpLFxuICAgIChfbSwgbGV0dGVyKSA9PiBsZXR0ZXIudG9VcHBlckNhc2UoKVxuICApO1xuICAvLyB0aGVuIHdlIHVubGl0ZXJhbGx5IHN0cmlwIGFsbCByZW1haW5pbmcgaWxsZWdhbCBjaGFyYWN0ZXJzLlxuICBjbGVhbmVkID0gY2xlYW5lZC5yZXBsYWNlKG5ldyBSZWdFeHAoaWxsZWdhbENoYXIuc291cmNlLCAnZycpLCAnJyk7XG4gIHJldHVybiBjbGVhbmVkO1xufVxuXG5jb25zdCBpbGxlZ2FsQ2hhciA9IC9eW15hLXpBLVpfJF18KD88PS4pW15hLXpBLVpfJDAtOV0vO1xuIl19","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ImportUtil = void 0;\nconst sanitize_1 = require(\"./sanitize\");\nclass ImportUtil {\n constructor(babel, program) {\n this.babel = babel;\n this.program = program;\n this.t = babel.types;\n }\n // remove one imported binding. If this is the last thing imported from the\n // given moduleSpecifier, the whole statement will also be removed.\n removeImport(moduleSpecifier, exportedName) {\n for (let topLevelPath of this.program.get('body')) {\n if (!matchModule(topLevelPath, moduleSpecifier)) {\n continue;\n }\n let importSpecifierPath = topLevelPath\n .get('specifiers')\n .find((specifierPath) => matchSpecifier(specifierPath, exportedName));\n if (importSpecifierPath) {\n if (topLevelPath.node.specifiers.length === 1) {\n topLevelPath.remove();\n }\n else {\n importSpecifierPath.remove();\n }\n }\n }\n }\n // remove all imports from the given moduleSpecifier\n removeAllImports(moduleSpecifier) {\n for (let topLevelPath of this.program.get('body')) {\n if (matchModule(topLevelPath, moduleSpecifier)) {\n topLevelPath.remove();\n }\n }\n }\n // Import the given value (if needed) and return an Identifier representing\n // it.\n //\n // This method is trickier to use safely than our higher-level methods\n // (`insertAfter`, `insertBefore`, `replaceWith`, `mutate`) because after you\n // insert the identifier into the AST, it's up to you to ensure that babel's\n // scope system is aware of the new reference. The other methods do that for\n // you automatically.\n import(\n // the spot at which you will insert the Identifier we return to you\n target, \n // the path to the module you're importing from\n moduleSpecifier, \n // the name you're importing from that module. Use \"default\" for the default\n // export. Use \"*\" for the namespace.\n exportedName, \n // Optional hint for helping us pick a name for the imported binding\n nameHint) {\n return this.unreferencedImport(target, moduleSpecifier, exportedName, desiredName(nameHint, exportedName, defaultNameHint(target)));\n }\n // Import the given value (if needed) and return an Identifier representing\n // it.\n unreferencedImport(\n // the spot at which you will insert the Identifier we return to you\n target, \n // the path to the module you're importing from\n moduleSpecifier, \n // the name you're importing from that module. Use \"default\" for the default\n // export. Use \"*\" for the namespace.\n exportedName, \n // the preferred name you want, if we neeed to create a new binding. You\n // might get something similar instead, to avoid collisions.\n preferredName) {\n var _a;\n let isNamespaceImport = exportedName === '*';\n let isDefaultImport = exportedName === 'default';\n let isNamedImport = !isDefaultImport && !isNamespaceImport;\n let declaration = this.findImportFrom(moduleSpecifier);\n let hasNamespaceSpecifier = declaration === null || declaration === void 0 ? void 0 : declaration.node.specifiers.find((s) => s.type === 'ImportNamespaceSpecifier');\n let hasNamedSpecifiers = declaration === null || declaration === void 0 ? void 0 : declaration.node.specifiers.find((s) => s.type === 'ImportSpecifier');\n /**\n * the file has a preexisting non-namespace import and a transform tries to add a namespace import, so they don't get combined\n * the file has a preexisting namespace import and a transform tries to add a non-namespace import, so they don't get combined\n * the file has a preexisting namespace import and a transform tries to add a namespace import, so they don't get combined\n */\n let cannotUseExistingDeclaration = (hasNamedSpecifiers && isNamespaceImport) ||\n (hasNamespaceSpecifier && isNamedImport) ||\n (hasNamespaceSpecifier && isNamespaceImport);\n if (!cannotUseExistingDeclaration && declaration) {\n let specifier = declaration\n .get('specifiers')\n .find((spec) => matchSpecifier(spec, exportedName));\n if (specifier && ((_a = target.scope.getBinding(specifier.node.local.name)) === null || _a === void 0 ? void 0 : _a.kind) === 'module') {\n return this.t.identifier(specifier.node.local.name);\n }\n else {\n return this.addSpecifier(target, declaration, exportedName, preferredName);\n }\n }\n else {\n let declaration = this.insertAfterExistingImports(this.t.importDeclaration([], this.t.stringLiteral(moduleSpecifier)));\n return this.addSpecifier(target, declaration, exportedName, preferredName);\n }\n }\n importForSideEffect(moduleSpecifier) {\n let declaration = this.findImportFrom(moduleSpecifier);\n if (!declaration) {\n this.insertAfterExistingImports(this.t.importDeclaration([], this.t.stringLiteral(moduleSpecifier)));\n }\n }\n replaceWith(target, fn) {\n return this.mutate((i) => {\n target.replaceWith(fn(i));\n // the return value of replaceWith is not a reliable way to get the\n // updated path, at least in the case where the user replaced an\n // expression with a statement. Instead we will rely on the fact that path\n // replacement also mutates its argument, so `target` now points at the\n // newly replaced path.\n return target;\n }, defaultNameHint(target));\n }\n insertAfter(target, fn) {\n return this.mutate((i) => target.insertAfter(fn(i))[0], defaultNameHint(target));\n }\n insertBefore(target, fn) {\n return this.mutate((i) => target.insertBefore(fn(i))[0], defaultNameHint(target));\n }\n // Low-level method for when you don't want to use our higher-level methods\n // (replaceWith, insertBefore, insertAfter)\n mutate(fn, defaultNameHint) {\n let symbols = new Map();\n const importer = {\n import: (moduleSpecifier, exportedName, nameHint) => {\n let identifier = this.t.identifier('__babel_import_util_placeholder__');\n symbols.set(identifier, { moduleSpecifier, exportedName, nameHint });\n return identifier;\n },\n };\n const updateReference = (path) => {\n if (!path.isIdentifier()) {\n return;\n }\n let hit = symbols.get(path.node);\n if (hit) {\n let newIdentifier = this.unreferencedImport(path, hit.moduleSpecifier, hit.exportedName, desiredName(hit.nameHint, hit.exportedName, defaultNameHint));\n path.replaceWith(newIdentifier);\n let binding = path.scope.getBinding(newIdentifier.name);\n if (!binding) {\n // we create the binding at the point where we add the import, so this\n // would indicate broken behavior\n throw new Error(`bug: this is supposed to never happen`);\n }\n binding.reference(path);\n }\n };\n let result = fn(importer);\n updateReference(result);\n this.babel.traverse(result.node, {\n ReferencedIdentifier: (path) => {\n updateReference(path);\n },\n }, result.scope, {}, result);\n return result;\n }\n addSpecifier(target, declaration, exportedName, preferredName) {\n let local = this.t.identifier(unusedNameLike(target, preferredName));\n let specifier = this.buildSpecifier(exportedName, local);\n let added;\n if (specifier.type === 'ImportDefaultSpecifier') {\n declaration.node.specifiers.unshift(specifier);\n added = declaration.get(`specifiers.0`);\n }\n else {\n declaration.node.specifiers.push(specifier);\n added = declaration.get(`specifiers.${declaration.node.specifiers.length - 1}`);\n }\n declaration.scope.registerBinding('module', added);\n return local;\n }\n buildSpecifier(exportedName, localName) {\n switch (exportedName) {\n case 'default':\n return this.t.importDefaultSpecifier(localName);\n case '*':\n return this.t.importNamespaceSpecifier(localName);\n default:\n return this.t.importSpecifier(localName, this.t.identifier(exportedName));\n }\n }\n findImportFrom(moduleSpecifier) {\n for (let path of this.program.get('body')) {\n if (path.isImportDeclaration() &&\n path.node.source.value === moduleSpecifier &&\n path.node.importKind !== 'type') {\n return path;\n }\n }\n return undefined;\n }\n insertAfterExistingImports(statement) {\n let lastIndex;\n for (let [index, node] of this.program.node.body.entries()) {\n if (node.type === 'ImportDeclaration') {\n lastIndex = index;\n }\n }\n if (lastIndex == null) {\n // we are intentionally not using babel's container-aware methods, because\n // while in theory it's nice that they schedule other plugins to run on\n // our nodes, in practice those nodes might get mutated or removed by some\n // other plugin in the intervening time causing failures.\n this.program.node.body.unshift(statement);\n return this.program.get('body.0');\n }\n else {\n this.program.node.body.splice(lastIndex + 1, 0, statement);\n return this.program.get(`body.${lastIndex + 1}`);\n }\n }\n}\nexports.ImportUtil = ImportUtil;\nfunction unusedNameLike(path, name) {\n let candidate = name;\n let counter = 0;\n while (path.scope.hasBinding(candidate)) {\n candidate = `${name}${counter++}`;\n }\n return candidate;\n}\nfunction name(node) {\n if (node.type === 'StringLiteral') {\n return node.value;\n }\n else {\n return node.name;\n }\n}\nfunction desiredName(nameHint, exportedName, defaultNameHint) {\n if (nameHint) {\n return (0, sanitize_1.sanitize)(nameHint);\n }\n if (exportedName === 'default' || exportedName === '*') {\n return defaultNameHint !== null && defaultNameHint !== void 0 ? defaultNameHint : 'a';\n }\n else {\n return exportedName;\n }\n}\nfunction defaultNameHint(target) {\n if (target === null || target === void 0 ? void 0 : target.isIdentifier()) {\n return target.node.name;\n }\n else if (target) {\n return target.scope.generateUidIdentifierBasedOnNode(target.node).name;\n }\n else {\n return undefined;\n }\n}\nfunction matchSpecifier(spec, exportedName) {\n switch (exportedName) {\n case 'default':\n return spec.isImportDefaultSpecifier();\n case '*':\n return spec.isImportNamespaceSpecifier();\n default:\n return spec.isImportSpecifier() && name(spec.node.imported) === exportedName;\n }\n}\nfunction matchModule(path, moduleSpecifier) {\n return path.isImportDeclaration() && path.get('source').node.value === moduleSpecifier;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFFQSx5Q0FBc0M7QUFFdEMsTUFBYSxVQUFVO0lBR3JCLFlBQW9CLEtBQW1CLEVBQVUsT0FBNEI7UUFBekQsVUFBSyxHQUFMLEtBQUssQ0FBYztRQUFVLFlBQU8sR0FBUCxPQUFPLENBQXFCO1FBQzNFLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQztJQUN2QixDQUFDO0lBRUQsMkVBQTJFO0lBQzNFLG1FQUFtRTtJQUNuRSxZQUFZLENBQUMsZUFBdUIsRUFBRSxZQUFvQjtRQUN4RCxLQUFLLElBQUksWUFBWSxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQ2pELElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxFQUFFLGVBQWUsQ0FBQyxFQUFFO2dCQUMvQyxTQUFTO2FBQ1Y7WUFFRCxJQUFJLG1CQUFtQixHQUFHLFlBQVk7aUJBQ25DLEdBQUcsQ0FBQyxZQUFZLENBQUM7aUJBQ2pCLElBQUksQ0FBQyxDQUFDLGFBQWEsRUFBRSxFQUFFLENBQUMsY0FBYyxDQUFDLGFBQWEsRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDO1lBQ3hFLElBQUksbUJBQW1CLEVBQUU7Z0JBQ3ZCLElBQUksWUFBWSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtvQkFDN0MsWUFBWSxDQUFDLE1BQU0sRUFBRSxDQUFDO2lCQUN2QjtxQkFBTTtvQkFDTCxtQkFBbUIsQ0FBQyxNQUFNLEVBQUUsQ0FBQztpQkFDOUI7YUFDRjtTQUNGO0lBQ0gsQ0FBQztJQUVELG9EQUFvRDtJQUNwRCxnQkFBZ0IsQ0FBQyxlQUF1QjtRQUN0QyxLQUFLLElBQUksWUFBWSxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQ2pELElB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SUFBSSxDQUFDLDBCQUEwQixFQUFFLENBQUM7UUFDM0M7WUFDRSxPQUFPLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLFlBQVksQ0FBQztLQUNoRjtBQUNILENBQUM7QUFFRCxTQUFTLFdBQVcsQ0FDbEIsSUFBbUIsRUFDbkIsZUFBdUI7SUFFdkIsT0FBTyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEtBQUssZUFBZSxDQUFDO0FBQ3pGLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSAqIGFzIEJhYmVsIGZyb20gJ0BiYWJlbC9jb3JlJztcbmltcG9ydCB0eXBlIHsgdHlwZXMgYXMgdCwgTm9kZVBhdGggfSBmcm9tICdAYmFiZWwvY29yZSc7XG5pbXBvcnQgeyBzYW5pdGl6ZSB9IGZyb20gJy4vc2FuaXRpemUnO1xuXG5leHBvcnQgY2xhc3MgSW1wb3J0VXRpbCB7XG4gIHByaXZhdGUgdDogdHlwZW9mIEJhYmVsLnR5cGVzO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgYmFiZWw6IHR5cGVvZiBCYWJlbCwgcHJpdmF0ZSBwcm9ncmFtOiBOb2RlUGF0aDx0LlByb2dyYW0+KSB7XG4gICAgdGhpcy50ID0gYmFiZWwudHlwZXM7XG4gIH1cblxuICAvLyByZW1vdmUgb25lIGltcG9ydGVkIGJpbmRpbmcuIElmIHRoaXMgaXMgdGhlIGxhc3QgdGhpbmcgaW1wb3J0ZWQgZnJvbSB0aGVcbiAgLy8gZ2l2ZW4gbW9kdWxlU3BlY2lmaWVyLCB0aGUgd2hvbGUgc3RhdGVtZW50IHdpbGwgYWxzbyBiZSByZW1vdmVkLlxuICByZW1vdmVJbXBvcnQobW9kdWxlU3BlY2lmaWVyOiBzdHJpbmcsIGV4cG9ydGVkTmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgZm9yIChsZXQgdG9wTGV2ZWxQYXRoIG9mIHRoaXMucHJvZ3JhbS5nZXQoJ2JvZHknKSkge1xuICAgICAgaWYgKCFtYXRjaE1vZHVsZSh0b3BMZXZlbFBhdGgsIG1vZHVsZVNwZWNpZmllcikpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGxldCBpbXBvcnRTcGVjaWZpZXJQYXRoID0gdG9wTGV2ZWxQYXRoXG4gICAgICAgIC5nZXQoJ3NwZWNpZmllcnMnKVxuICAgICAgICAuZmluZCgoc3BlY2lmaWVyUGF0aCkgPT4gbWF0Y2hTcGVjaWZpZXIoc3BlY2lmaWVyUGF0aCwgZXhwb3J0ZWROYW1lKSk7XG4gICAgICBpZiAoaW1wb3J0U3BlY2lmaWVyUGF0aCkge1xuICAgICAgICBpZiAodG9wTGV2ZWxQYXRoLm5vZGUuc3BlY2lmaWVycy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICB0b3BMZXZlbFBhdGgucmVtb3ZlKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaW1wb3J0U3BlY2lmaWVyUGF0aC5yZW1vdmUoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIHJlbW92ZSBhbGwgaW1wb3J0cyBmcm9tIHRoZSBnaXZlbiBtb2R1bGVTcGVjaWZpZXJcbiAgcmVtb3ZlQWxsSW1wb3J0cyhtb2R1bGVTcGVjaWZpZXI6IHN0cmluZyk6IHZvaWQge1xuICAgIGZvciAobGV0IHRvcExldmVsUGF0aCBvZiB0aGlzLnByb2dyYW0uZ2V0KCdib2R5JykpIHtcbiAgICAgIGlmIChtYXRjaE1vZHVsZSh0b3BMZXZlbFBhdGgsIG1vZHVsZVNwZWNpZmllcikpIHtcbiAgICAgICAgdG9wTGV2ZWxQYXRoLnJlbW92ZSgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIEltcG9ydCB0aGUgZ2l2ZW4gdmFsdWUgKGlmIG5lZWRlZCkgYW5kIHJldHVybiBhbiBJZGVudGlmaWVyIHJlcHJlc2VudGluZ1xuICAvLyBpdC5cbiAgLy9cbiAgLy8gVGhpcyBtZXRob2QgaXMgdHJpY2tpZXIgdG8gdXNlIHNhZmVseSB0aGFuIG91ciBoaWdoZXItbGV2ZWwgbWV0aG9kc1xuICAvLyAoYGluc2VydEFmdGVyYCwgYGluc2VydEJlZm9yZWAsIGByZXBsYWNlV2l0aGAsIGBtdXRhdGVgKSBiZWNhdXNlIGFmdGVyIHlvdVxuICAvLyBpbnNlcnQgdGhlIGlkZW50aWZpZXIgaW50byB0aGUgQVNULCBpdCdzIHVwIHRvIHlvdSB0byBlbnN1cmUgdGhhdCBiYWJlbCdzXG4gIC8vIHNjb3BlIHN5c3RlbSBpcyBhd2FyZSBvZiB0aGUgbmV3IHJlZmVyZW5jZS4gVGhlIG90aGVyIG1ldGhvZHMgZG8gdGhhdCBmb3JcbiAgLy8geW91IGF1dG9tYXRpY2FsbHkuXG4gIGltcG9ydChcbiAgICAvLyB0aGUgc3BvdCBhdCB3aGljaCB5b3Ugd2lsbCBpbnNlcnQgdGhlIElkZW50aWZpZXIgd2UgcmV0dXJuIHRvIHlvdVxuICAgIHRhcmdldDogTm9kZVBhdGg8dC5Ob2RlPixcblxuICAgIC8vIHRoZSBwYXRoIHRvIHRoZSBtb2R1bGUgeW91J3JlIGltcG9ydGluZyBmcm9tXG4gICAgbW9kdWxlU3BlY2lmaWVyOiBzdHJpbmcsXG5cbiAgICAvLyB0aGUgbmFtZSB5b3UncmUgaW1wb3J0aW5nIGZyb20gdGhhdCBtb2R1bGUuIFVzZSBcImRlZmF1bHRcIiBmb3IgdGhlIGRlZmF1bHRcbiAgICAvLyBleHBvcnQuIFVzZSBcIipcIiBmb3IgdGhlIG5hbWVzcGFjZS5cbiAgICBleHBvcnRlZE5hbWU6IHN0cmluZyxcblxuICAgIC8vIE9wdGlvbmFsIGhpbnQgZm9yIGhlbHBpbmcgdXMgcGljayBhIG5hbWUgZm9yIHRoZSBpbXBvcnRlZCBiaW5kaW5nXG4gICAgbmFtZUhpbnQ/OiBzdHJpbmdcbiAgKTogdC5JZGVudGlmaWVyIHtcbiAgICByZXR1cm4gdGhpcy51bnJlZmVyZW5jZWRJbXBvcnQoXG4gICAgICB0YXJnZXQsXG4gICAgICBtb2R1bGVTcGVjaWZpZXIsXG4gICAgICBleHBvcnRlZE5hbWUsXG4gICAgICBkZXNpcmVkTmFtZShuYW1lSGludCwgZXhwb3J0ZWROYW1lLCBkZWZhdWx0TmFtZUhpbnQodGFyZ2V0KSlcbiAgICApO1xuICB9XG5cbiAgLy8gSW1wb3J0IHRoZSBnaXZlbiB2YWx1ZSAoaWYgbmVlZGVkKSBhbmQgcmV0dXJuIGFuIElkZW50aWZpZXIgcmVwcmVzZW50aW5nXG4gIC8vIGl0LlxuICBwcml2YXRlIHVucmVmZXJlbmNlZEltcG9ydChcbiAgICAvLyB0aGUgc3BvdCBhdCB3aGljaCB5b3Ugd2lsbCBpbnNlcnQgdGhlIElkZW50aWZpZXIgd2UgcmV0dXJuIHRvIHlvdVxuICAgIHRhcmdldDogTm9kZVBhdGg8dC5Ob2RlPixcblxuICAgIC8vIHRoZSBwYXRoIHRvIHRoZSBtb2R1bGUgeW91J3JlIGltcG9ydGluZyBmcm9tXG4gICAgbW9kdWxlU3BlY2lmaWVyOiBzdHJpbmcsXG5cbiAgICAvLyB0aGUgbmFtZSB5b3UncmUgaW1wb3J0aW5nIGZyb20gdGhhdCBtb2R1bGUuIFVzZSBcImRlZmF1bHRcIiBmb3IgdGhlIGRlZmF1bHRcbiAgICAvLyBleHBvcnQuIFVzZSBcIipcIiBmb3IgdGhlIG5hbWVzcGFjZS5cbiAgICBleHBvcnRlZE5hbWU6IHN0cmluZyxcblxuICAgIC8vIHRoZSBwcmVmZXJyZWQgbmFtZSB5b3Ugd2FudCwgaWYgd2UgbmVlZWQgdG8gY3JlYXRlIGEgbmV3IGJpbmRpbmcuIFlvdVxuICAgIC8vIG1pZ2h0IGdldCBzb21ldGhpbmcgc2ltaWxhciBpbnN0ZWFkLCB0byBhdm9pZCBjb2xsaXNpb25zLlxuICAgIHByZWZlcnJlZE5hbWU6IHN0cmluZ1xuICApOiB0LklkZW50aWZpZXIge1xuICAgIGxldCBpc05hbWVzcGFjZUltcG9ydCA9IGV4cG9ydGVkTmFtZSA9PT0gJyonO1xuICAgIGxldCBpc0RlZmF1bHRJbXBvcnQgPSBleHBvcnRlZE5hbWUgPT09ICdkZWZhdWx0JztcbiAgICBsZXQgaXNOYW1lZEltcG9ydCA9ICFpc0RlZmF1bHRJbXBvcnQgJiYgIWlzTmFtZXNwYWNlSW1wb3J0O1xuICAgIGxldCBkZWNsYXJhdGlvbiA9IHRoaXMuZmluZEltcG9ydEZyb20obW9kdWxlU3BlY2lmaWVyKTtcbiAgICBsZXQgaGFzTmFtZXNwYWNlU3BlY2lmaWVyID0gZGVjbGFyYXRpb24/Lm5vZGUuc3BlY2lmaWVycy5maW5kKFxuICAgICAgKHMpID0+IHMudHlwZSA9PT0gJ0ltcG9ydE5hbWVzcGFjZVNwZWNpZmllcidcbiAgICApO1xuICAgIGxldCBoYXNOYW1lZFNwZWNpZmllcnMgPSBkZWNsYXJhdGlvbj8ubm9kZS5zcGVjaWZpZXJzLmZpbmQoKHMpID0+IHMudHlwZSA9PT0gJ0ltcG9ydFNwZWNpZmllcicpO1xuXG4gICAgLyoqXG4gICAgICogdGhlIGZpbGUgaGFzIGEgcHJlZXhpc3Rpbmcgbm9uLW5hbWVzcGFjZSBpbXBvcnQgYW5kIGEgdHJhbnNmb3JtIHRyaWVzIHRvIGFkZCBhIG5hbWVzcGFjZSBpbXBvcnQsIHNvIHRoZXkgZG9uJ3QgZ2V0IGNvbWJpbmVkXG4gICAgICogdGhlIGZpbGUgaGFzIGEgcHJlZXhpc3RpbmcgbmFtZXNwYWNlIGltcG9ydCBhbmQgYSB0cmFuc2Zvcm0gdHJpZXMgdG8gYWRkIGEgbm9uLW5hbWVzcGFjZSBpbXBvcnQsIHNvIHRoZXkgZG9uJ3QgZ2V0IGNvbWJpbmVkXG4gICAgICogdGhlIGZpbGUgaGFzIGEgcHJlZXhpc3RpbmcgbmFtZXNwYWNlIGltcG9ydCBhbmQgYSB0cmFuc2Zvcm0gdHJpZXMgdG8gYWRkIGEgbmFtZXNwYWNlIGltcG9ydCwgc28gdGhleSBkb24ndCBnZXQgY29tYmluZWRcbiAgICAgKi9cbiAgICBsZXQgY2Fubm90VXNlRXhpc3RpbmdEZWNsYXJhdGlvbiA9XG4gICAgICAoaGFzTmFtZWRTcGVjaWZpZXJzICYmIGlzTmFtZXNwYWNlSW1wb3J0KSB8fFxuICAgICAgKGhhc05hbWVzcGFjZVNwZWNpZmllciAmJiBpc05hbWVkSW1wb3J0KSB8fFxuICAgICAgKGhhc05hbWVzcGFjZVNwZWNpZmllciAmJiBpc05hbWVzcGFjZUltcG9ydCk7XG5cbiAgICBpZiAoIWNhbm5vdFVzZUV4aXN0aW5nRGVjbGFyYXRpb24gJiYgZGVjbGFyYXRpb24pIHtcbiAgICAgIGxldCBzcGVjaWZpZXIgPSBkZWNsYXJhdGlvblxuICAgICAgICAuZ2V0KCdzcGVjaWZpZXJzJylcbiAgICAgICAgLmZpbmQoKHNwZWMpID0+IG1hdGNoU3BlY2lmaWVyKHNwZWMsIGV4cG9ydGVkTmFtZSkpO1xuICAgICAgaWYgKHNwZWNpZmllciAmJiB0YXJnZXQuc2NvcGUuZ2V0QmluZGluZyhzcGVjaWZpZXIubm9kZS5sb2NhbC5uYW1lKT8ua2luZCA9PT0gJ21vZHVsZScpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudC5pZGVudGlmaWVyKHNwZWNpZmllci5ub2RlLmxvY2FsLm5hbWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWRkU3BlY2lmaWVyKHRhcmdldCwgZGVjbGFyYXRpb24sIGV4cG9ydGVkTmFtZSwgcHJlZmVycmVkTmFtZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCBkZWNsYXJhdGlvbiA9IHRoaXMuaW5zZXJ0QWZ0ZXJFeGlzdGluZ0ltcG9ydHMoXG4gICAgICAgIHRoaXMudC5pbXBvcnREZWNsYXJhdGlvbihbXSwgdGhpcy50LnN0cmluZ0xpdGVyYWwobW9kdWxlU3BlY2lmaWVyKSlcbiAgICAgICk7XG4gICAgICByZXR1cm4gdGhpcy5hZGRTcGVjaWZpZXIodGFyZ2V0LCBkZWNsYXJhdGlvbiwgZXhwb3J0ZWROYW1lLCBwcmVmZXJyZWROYW1lKTtcbiAgICB9XG4gIH1cblxuICBpbXBvcnRGb3JTaWRlRWZmZWN0KG1vZHVsZVNwZWNpZmllcjogc3RyaW5nKTogdm9pZCB7XG4gICAgbGV0IGRlY2xhcmF0aW9uID0gdGhpcy5maW5kSW1wb3J0RnJvbShtb2R1bGVTcGVjaWZpZXIpO1xuICAgIGlmICghZGVjbGFyYXRpb24pIHtcbiAgICAgIHRoaXMuaW5zZXJ0QWZ0ZXJFeGlzdGluZ0ltcG9ydHMoXG4gICAgICAgIHRoaXMudC5pbXBvcnREZWNsYXJhdGlvbihbXSwgdGhpcy50LnN0cmluZ0xpdGVyYWwobW9kdWxlU3BlY2lmaWVyKSlcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcmVwbGFjZVdpdGg8VCBleHRlbmRzIHQuTm9kZSwgUiBleHRlbmRzIHQuTm9kZT4oXG4gICAgdGFyZ2V0OiBOb2RlUGF0aDxUPixcbiAgICBmbjogKGk6IEltcG9ydGVyKSA9PiBSXG4gICk6IE5vZGVQYXRoPFI+IHtcbiAgICByZXR1cm4gdGhpcy5tdXRhdGUoKGkpID0+IHtcbiAgICAgIHRhcmdldC5yZXBsYWNlV2l0aChmbihpKSk7XG4gICAgICAvLyB0aGUgcmV0dXJuIHZhbHVlIG9mIHJlcGxhY2VXaXRoIGlzIG5vdCBhIHJlbGlhYmxlIHdheSB0byBnZXQgdGhlXG4gICAgICAvLyB1cGRhdGVkIHBhdGgsIGF0IGxlYXN0IGluIHRoZSBjYXNlIHdoZXJlIHRoZSB1c2VyIHJlcGxhY2VkIGFuXG4gICAgICAvLyBleHByZXNzaW9uIHdpdGggYSBzdGF0ZW1lbnQuIEluc3RlYWQgd2Ugd2lsbCByZWx5IG9uIHRoZSBmYWN0IHRoYXQgcGF0aFxuICAgICAgLy8gcmVwbGFjZW1lbnQgYWxzbyBtdXRhdGVzIGl0cyBhcmd1bWVudCwgc28gYHRhcmdldGAgbm93IHBvaW50cyBhdCB0aGVcbiAgICAgIC8vIG5ld2x5IHJlcGxhY2VkIHBhdGguXG4gICAgICByZXR1cm4gdGFyZ2V0IGFzIHVua25vd24gYXMgTm9kZVBhdGg8Uj47XG4gICAgfSwgZGVmYXVsdE5hbWVIaW50KHRhcmdldCkpO1xuICB9XG5cbiAgaW5zZXJ0QWZ0ZXI8VCBleHRlbmRzIHQuTm9kZSwgUiBleHRlbmRzIHQuTm9kZT4oXG4gICAgdGFyZ2V0OiBOb2RlUGF0aDxUPixcbiAgICBmbjogKGk6IEltcG9ydGVyKSA9PiBSXG4gICk6IE5vZGVQYXRoPFI+IHtcbiAgICByZXR1cm4gdGhpcy5tdXRhdGUoKGkpID0+IHRhcmdldC5pbnNlcnRBZnRlcihmbihpKSlbMF0gYXMgTm9kZVBhdGg8Uj4sIGRlZmF1bHROYW1lSGludCh0YXJnZXQpKTtcbiAgfVxuXG4gIGluc2VydEJlZm9yZTxUIGV4dGVuZHMgdC5Ob2RlLCBSIGV4dGVuZHMgdC5Ob2RlPihcbiAgICB0YXJnZXQ6IE5vZGVQYXRoPFQ+LFxuICAgIGZuOiAoaTogSW1wb3J0ZXIpID0+IFJcbiAgKTogTm9kZVBhdGg8Uj4ge1xuICAgIHJldHVybiB0aGlzLm11dGF0ZShcbiAgICAgIChpKSA9PiB0YXJnZXQuaW5zZXJ0QmVmb3JlKGZuKGkpKVswXSBhcyBOb2RlUGF0aDxSPixcbiAgICAgIGRlZmF1bHROYW1lSGludCh0YXJnZXQpXG4gICAgKTtcbiAgfVxuXG4gIC8vIExvdy1sZXZlbCBtZXRob2QgZm9yIHdoZW4geW91IGRvbid0IHdhbnQgdG8gdXNlIG91ciBoaWdoZXItbGV2ZWwgbWV0aG9kc1xuICAvLyAocmVwbGFjZVdpdGgsIGluc2VydEJlZm9yZSwgaW5zZXJ0QWZ0ZXIpXG4gIG11dGF0ZTxSZXBsYWNlbWVudCBleHRlbmRzIHQuTm9kZT4oXG4gICAgZm46IChpbXBvcnRlcjogSW1wb3J0ZXIpID0+IE5vZGVQYXRoPFJlcGxhY2VtZW50PixcbiAgICBkZWZhdWx0TmFtZUhpbnQ/OiBzdHJpbmdcbiAgKTogTm9kZVBhdGg8UmVwbGFjZW1lbnQ+IHtcbiAgICBsZXQgc3ltYm9sczogTWFwPFxuICAgICAgdC5JZGVudGlmaWVyLFxuICAgICAgeyBtb2R1bGVTcGVjaWZpZXI6IHN0cmluZzsgZXhwb3J0ZWROYW1lOiBzdHJpbmc7IG5hbWVIaW50OiBzdHJpbmcgfCB1bmRlZmluZWQgfVxuICAgID4gPSBuZXcgTWFwKCk7XG4gICAgY29uc3QgaW1wb3J0ZXI6IEltcG9ydGVyID0ge1xuICAgICAgaW1wb3J0OiAobW9kdWxlU3BlY2lmaWVyOiBzdHJpbmcsIGV4cG9ydGVkTmFtZTogc3RyaW5nLCBuYW1lSGludD86IHN0cmluZykgPT4ge1xuICAgICAgICBsZXQgaWRlbnRpZmllciA9IHRoaXMudC5pZGVudGlmaWVyKCdfX2JhYmVsX2ltcG9ydF91dGlsX3BsYWNlaG9sZGVyX18nKTtcbiAgICAgICAgc3ltYm9scy5zZXQoaWRlbnRpZmllciwgeyBtb2R1bGVTcGVjaWZpZXIsIGV4cG9ydGVkTmFtZSwgbmFtZUhpbnQgfSk7XG4gICAgICAgIHJldHVybiBpZGVudGlmaWVyO1xuICAgICAgfSxcbiAgICB9O1xuXG4gICAgY29uc3QgdXBkYXRlUmVmZXJlbmNlID0gKHBhdGg6IE5vZGVQYXRoKSA9PiB7XG4gICAgICBpZiAoIXBhdGguaXNJZGVudGlmaWVyKCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgbGV0IGhpdCA9IHN5bWJvbHMuZ2V0KHBhdGgubm9kZSk7XG4gICAgICBpZiAoaGl0KSB7XG4gICAgICAgIGxldCBuZXdJZGVudGlmaWVyID0gdGhpcy51bnJlZmVyZW5jZWRJbXBvcnQoXG4gICAgICAgICAgcGF0aCxcbiAgICAgICAgICBoaXQubW9kdWxlU3BlY2lmaWVyLFxuICAgICAgICAgIGhpdC5leHBvcnRlZE5hbWUsXG4gICAgICAgICAgZGVzaXJlZE5hbWUoaGl0Lm5hbWVIaW50LCBoaXQuZXhwb3J0ZWROYW1lLCBkZWZhdWx0TmFtZUhpbnQpXG4gICAgICAgICk7XG4gICAgICAgIHBhdGgucmVwbGFjZVdpdGgobmV3SWRlbnRpZmllcik7XG4gICAgICAgIGxldCBiaW5kaW5nID0gcGF0aC5zY29wZS5nZXRCaW5kaW5nKG5ld0lkZW50aWZpZXIubmFtZSk7XG4gICAgICAgIGlmICghYmluZGluZykge1xuICAgICAgICAgIC8vIHdlIGNyZWF0ZSB0aGUgYmluZGluZyBhdCB0aGUgcG9pbnQgd2hlcmUgd2UgYWRkIHRoZSBpbXBvcnQsIHNvIHRoaXNcbiAgICAgICAgICAvLyB3b3VsZCBpbmRpY2F0ZSBicm9rZW4gYmVoYXZpb3JcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGJ1ZzogdGhpcyBpcyBzdXBwb3NlZCB0byBuZXZlciBoYXBwZW5gKTtcbiAgICAgICAgfVxuICAgICAgICBiaW5kaW5nLnJlZmVyZW5jZShwYXRoKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgbGV0IHJlc3VsdCA9IGZuKGltcG9ydGVyKTtcbiAgICB1cGRhdGVSZWZlcmVuY2UocmVzdWx0KTtcbiAgICB0aGlzLmJhYmVsLnRyYXZlcnNlKFxuICAgICAgcmVzdWx0Lm5vZGUsXG4gICAgICB7XG4gICAgICAgIFJlZmVyZW5jZWRJZGVudGlmaWVyOiAocGF0aCkgPT4ge1xuICAgICAgICAgIHVwZGF0ZVJlZmVyZW5jZShwYXRoKTtcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICByZXN1bHQuc2NvcGUsXG4gICAgICB7fSxcbiAgICAgIHJlc3VsdFxuICAgICk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHByaXZhdGUgYWRkU3BlY2lmaWVyKFxuICAgIHRhcmdldDogTm9kZVBhdGg8dC5Ob2RlPixcbiAgICBkZWNsYXJhdGlvbjogTm9kZVBhdGg8dC5JbXBvcnREZWNsYXJhdGlvbj4sXG4gICAgZXhwb3J0ZWROYW1lOiBzdHJpbmcsXG4gICAgcHJlZmVycmVkTmFtZTogc3RyaW5nXG4gICk6IHQuSWRlbnRpZmllciB7XG4gICAgbGV0IGxvY2FsID0gdGhpcy50LmlkZW50aWZpZXIodW51c2VkTmFtZUxpa2UodGFyZ2V0LCBwcmVmZXJyZWROYW1lKSk7XG4gICAgbGV0IHNwZWNpZmllciA9IHRoaXMuYnVpbGRTcGVjaWZpZXIoZXhwb3J0ZWROYW1lLCBsb2NhbCk7XG4gICAgbGV0IGFkZGVkOiBOb2RlUGF0aDtcbiAgICBpZiAoc3BlY2lmaWVyLnR5cGUgPT09ICdJbXBvcnREZWZhdWx0U3BlY2lmaWVyJykge1xuICAgICAgZGVjbGFyYXRpb24ubm9kZS5zcGVjaWZpZXJzLnVuc2hpZnQoc3BlY2lmaWVyKTtcbiAgICAgIGFkZGVkID0gZGVjbGFyYXRpb24uZ2V0KGBzcGVjaWZpZXJzLjBgKSBhcyBOb2RlUGF0aDtcbiAgICB9IGVsc2Uge1xuICAgICAgZGVjbGFyYXRpb24ubm9kZS5zcGVjaWZpZXJzLnB1c2goc3BlY2lmaWVyKTtcbiAgICAgIGFkZGVkID0gZGVjbGFyYXRpb24uZ2V0KGBzcGVjaWZpZXJzLiR7ZGVjbGFyYXRpb24ubm9kZS5zcGVjaWZpZXJzLmxlbmd0aCAtIDF9YCkgYXMgTm9kZVBhdGg7XG4gICAgfVxuICAgIGRlY2xhcmF0aW9uLnNjb3BlLnJlZ2lzdGVyQmluZGluZygnbW9kdWxlJywgYWRkZWQpO1xuICAgIHJldHVybiBsb2NhbDtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRTcGVjaWZpZXIoZXhwb3J0ZWROYW1lOiBzdHJpbmcsIGxvY2FsTmFtZTogdC5JZGVudGlmaWVyKSB7XG4gICAgc3dpdGNoIChleHBvcnRlZE5hbWUpIHtcbiAgICAgIGNhc2UgJ2RlZmF1bHQnOlxuICAgICAgICByZXR1cm4gdGhpcy50LmltcG9ydERlZmF1bHRTcGVjaWZpZXIobG9jYWxOYW1lKTtcbiAgICAgIGNhc2UgJyonOlxuICAgICAgICByZXR1cm4gdGhpcy50LmltcG9ydE5hbWVzcGFjZVNwZWNpZmllcihsb2NhbE5hbWUpO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIHRoaXMudC5pbXBvcnRTcGVjaWZpZXIobG9jYWxOYW1lLCB0aGlzLnQuaWRlbnRpZmllcihleHBvcnRlZE5hbWUpKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGZpbmRJbXBvcnRGcm9tKG1vZHVsZVNwZWNpZmllcjogc3RyaW5nKTogTm9kZVBhdGg8dC5JbXBvcnREZWNsYXJhdGlvbj4gfCB1bmRlZmluZWQge1xuICAgIGZvciAobGV0IHBhdGggb2YgdGhpcy5wcm9ncmFtLmdldCgnYm9keScpKSB7XG4gICAgICBpZiAoXG4gICAgICAgIHBhdGguaXNJbXBvcnREZWNsYXJhdGlvbigpICYmXG4gICAgICAgIHBhdGgubm9kZS5zb3VyY2UudmFsdWUgPT09IG1vZHVsZVNwZWNpZmllciAmJlxuICAgICAgICBwYXRoLm5vZGUuaW1wb3J0S2luZCAhPT0gJ3R5cGUnXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIHBhdGg7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBwcml2YXRlIGluc2VydEFmdGVyRXhpc3RpbmdJbXBvcnRzPFMgZXh0ZW5kcyB0LlN0YXRlbWVudD4oc3RhdGVtZW50OiBTKTogTm9kZVBhdGg8Uz4ge1xuICAgIGxldCBsYXN0SW5kZXg6IG51bWJlciB8IHVuZGVmaW5lZDtcbiAgICBmb3IgKGxldCBbaW5kZXgsIG5vZGVdIG9mIHRoaXMucHJvZ3JhbS5ub2RlLmJvZHkuZW50cmllcygpKSB7XG4gICAgICBpZiAobm9kZS50eXBlID09PSAnSW1wb3J0RGVjbGFyYXRpb24nKSB7XG4gICAgICAgIGxhc3RJbmRleCA9IGluZGV4O1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAobGFzdEluZGV4ID09IG51bGwpIHtcbiAgICAgIC8vIHdlIGFyZSBpbnRlbnRpb25hbGx5IG5vdCB1c2luZyBiYWJlbCdzIGNvbnRhaW5lci1hd2FyZSBtZXRob2RzLCBiZWNhdXNlXG4gICAgICAvLyB3aGlsZSBpbiB0aGVvcnkgaXQncyBuaWNlIHRoYXQgdGhleSBzY2hlZHVsZSBvdGhlciBwbHVnaW5zIHRvIHJ1biBvblxuICAgICAgLy8gb3VyIG5vZGVzLCBpbiBwcmFjdGljZSB0aG9zZSBub2RlcyBtaWdodCBnZXQgbXV0YXRlZCBvciByZW1vdmVkIGJ5IHNvbWVcbiAgICAgIC8vIG90aGVyIHBsdWdpbiBpbiB0aGUgaW50ZXJ2ZW5pbmcgdGltZSBjYXVzaW5nIGZhaWx1cmVzLlxuICAgICAgdGhpcy5wcm9ncmFtLm5vZGUuYm9keS51bnNoaWZ0KHN0YXRlbWVudCk7XG4gICAgICByZXR1cm4gdGhpcy5wcm9ncmFtLmdldCgnYm9keS4wJykgYXMgTm9kZVBhdGg8Uz47XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucHJvZ3JhbS5ub2RlLmJvZHkuc3BsaWNlKGxhc3RJbmRleCArIDEsIDAsIHN0YXRlbWVudCk7XG4gICAgICByZXR1cm4gdGhpcy5wcm9ncmFtLmdldChgYm9keS4ke2xhc3RJbmRleCArIDF9YCkgYXMgTm9kZVBhdGg8Uz47XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHVudXNlZE5hbWVMaWtlKHBhdGg6IE5vZGVQYXRoPHQuTm9kZT4sIG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIGxldCBjYW5kaWRhdGUgPSBuYW1lO1xuICBsZXQgY291bnRlciA9IDA7XG4gIHdoaWxlIChwYXRoLnNjb3BlLmhhc0JpbmRpbmcoY2FuZGlkYXRlKSkge1xuICAgIGNhbmRpZGF0ZSA9IGAke25hbWV9JHtjb3VudGVyKyt9YDtcbiAgfVxuICByZXR1cm4gY2FuZGlkYXRlO1xufVxuXG5mdW5jdGlvbiBuYW1lKG5vZGU6IHQuU3RyaW5nTGl0ZXJhbCB8IHQuSWRlbnRpZmllcik6IHN0cmluZyB7XG4gIGlmIChub2RlLnR5cGUgPT09ICdTdHJpbmdMaXRlcmFsJykge1xuICAgIHJldHVybiBub2RlLnZhbHVlO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBub2RlLm5hbWU7XG4gIH1cbn1cblxuZnVuY3Rpb24gZGVzaXJlZE5hbWUoXG4gIG5hbWVIaW50OiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gIGV4cG9ydGVkTmFtZTogc3RyaW5nLFxuICBkZWZhdWx0TmFtZUhpbnQ6IHN0cmluZyB8IHVuZGVmaW5lZFxuKSB7XG4gIGlmIChuYW1lSGludCkge1xuICAgIHJldHVybiBzYW5pdGl6ZShuYW1lSGludCk7XG4gIH1cbiAgaWYgKGV4cG9ydGVkTmFtZSA9PT0gJ2RlZmF1bHQnIHx8IGV4cG9ydGVkTmFtZSA9PT0gJyonKSB7XG4gICAgcmV0dXJuIGRlZmF1bHROYW1lSGludCA/PyAnYSc7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGV4cG9ydGVkTmFtZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBkZWZhdWx0TmFtZUhpbnQodGFyZ2V0OiBOb2RlUGF0aCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGlmICh0YXJnZXQ/LmlzSWRlbnRpZmllcigpKSB7XG4gICAgcmV0dXJuIHRhcmdldC5ub2RlLm5hbWU7XG4gIH0gZWxzZSBpZiAodGFyZ2V0KSB7XG4gICAgcmV0dXJuIHRhcmdldC5zY29wZS5nZW5lcmF0ZVVpZElkZW50aWZpZXJCYXNlZE9uTm9kZSh0YXJnZXQubm9kZSkubmFtZTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG59XG5cbmZ1bmN0aW9uIG1hdGNoU3BlY2lmaWVyKHNwZWM6IE5vZGVQYXRoPGFueT4sIGV4cG9ydGVkTmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHN3aXRjaCAoZXhwb3J0ZWROYW1lKSB7XG4gICAgY2FzZSAnZGVmYXVsdCc6XG4gICAgICByZXR1cm4gc3BlYy5pc0ltcG9ydERlZmF1bHRTcGVjaWZpZXIoKTtcbiAgICBjYXNlICcqJzpcbiAgICAgIHJldHVybiBzcGVjLmlzSW1wb3J0TmFtZXNwYWNlU3BlY2lmaWVyKCk7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBzcGVjLmlzSW1wb3J0U3BlY2lmaWVyKCkgJiYgbmFtZShzcGVjLm5vZGUuaW1wb3J0ZWQpID09PSBleHBvcnRlZE5hbWU7XG4gIH1cbn1cblxuZnVuY3Rpb24gbWF0Y2hNb2R1bGUoXG4gIHBhdGg6IE5vZGVQYXRoPGFueT4sXG4gIG1vZHVsZVNwZWNpZmllcjogc3RyaW5nXG4pOiBwYXRoIGlzIE5vZGVQYXRoPHQuSW1wb3J0RGVjbGFyYXRpb24+IHtcbiAgcmV0dXJuIHBhdGguaXNJbXBvcnREZWNsYXJhdGlvbigpICYmIHBhdGguZ2V0KCdzb3VyY2UnKS5ub2RlLnZhbHVlID09PSBtb2R1bGVTcGVjaWZpZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSW1wb3J0ZXIge1xuICAvLyBJbXBvcnQgdGhlIGdpdmVuIHZhbHVlIChpZiBuZWVkZWQpIGFuZCByZXR1cm4gYW4gSWRlbnRpZmllciByZXByZXNlbnRpbmdcbiAgLy8gaXQuXG4gIGltcG9ydChcbiAgICAvLyB0aGUgcGF0aCB0byB0aGUgbW9kdWxlIHlvdSdyZSBpbXBvcnRpbmcgZnJvbVxuICAgIG1vZHVsZVNwZWNpZmllcjogc3RyaW5nLFxuXG4gICAgLy8gdGhlIG5hbWUgeW91J3JlIGltcG9ydGluZyBmcm9tIHRoYXQgbW9kdWxlLiBVc2UgXCJkZWZhdWx0XCIgZm9yIHRoZSBkZWZhdWx0XG4gICAgLy8gZXhwb3J0LiBVc2UgXCIqXCIgZm9yIHRoZSBuYW1lc3BhY2UuXG4gICAgZXhwb3J0ZWROYW1lOiBzdHJpbmcsXG5cbiAgICAvLyBPcHRpb25hbCBoaW50IGZvciBoZWxwaW5nIHVzIHBpY2sgYSBuYW1lIGZvciB0aGUgaW1wb3J0ZWQgYmluZGluZ1xuICAgIG5hbWVIaW50Pzogc3RyaW5nXG4gICk6IHQuSWRlbnRpZmllcjtcbn1cbiJdfQ=="],"names":["sanitize","identifier","cleaned","replace","RegExp","illegalChar","source","_m","letter","toUpperCase","exports","sanitize_1","require","ImportUtil","constructor","babel","program","t","types","removeImport","moduleSpecifier","exportedName","topLevelPath","get","matchModule","importSpecifierPath","find","specifierPath","matchSpecifier","node","specifiers","length","remove","removeAllImports","import","target","nameHint","unreferencedImport","desiredName","defaultNameHint","preferredName","isNamespaceImport","isDefaultImport","isNamedImport","declaration","findImportFrom","hasNamespaceSpecifier","s","type","hasNamedSpecifiers","cannotUseExistingDeclaration","specifier","spec","_a","scope","getBinding","local","name","kind","addSpecifier","insertAfterExistingImports","importDeclaration","stringLiteral","importForSideEffect","replaceWith","fn","mutate","i","insertAfter","insertBefore","symbols","Map","importer","set","updateReference","path","isIdentifier","hit","newIdentifier","binding","Error","reference","result","traverse","ReferencedIdentifier","unusedNameLike","buildSpecifier","added","unshift","push","registerBinding","localName","importDefaultSpecifier","importNamespaceSpecifier","importSpecifier","isImportDeclaration","value","importKind","undefined","statement","lastIndex","index","body","entries","splice","candidate","counter","hasBinding","generateUidIdentifierBasedOnNode","isImportDefaultSpecifier","isImportNamespaceSpecifier","isImportSpecifier","imported"],"mappings":"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","x_google_ignoreList":[0,1]}
@@ -0,0 +1,87 @@
1
+ /**
2
+ * @typedef {import('unist').Node} Node
3
+ * @typedef {import('unist').Point} Point
4
+ * @typedef {import('unist').Position} Position
5
+ */
6
+
7
+ /**
8
+ * @typedef NodeLike
9
+ * @property {string} type
10
+ * @property {PositionLike | null | undefined} [position]
11
+ *
12
+ * @typedef PointLike
13
+ * @property {number | null | undefined} [line]
14
+ * @property {number | null | undefined} [column]
15
+ * @property {number | null | undefined} [offset]
16
+ *
17
+ * @typedef PositionLike
18
+ * @property {PointLike | null | undefined} [start]
19
+ * @property {PointLike | null | undefined} [end]
20
+ */
21
+
22
+ /**
23
+ * Serialize the positional info of a point, position (start and end points),
24
+ * or node.
25
+ *
26
+ * @param {Node | NodeLike | Point | PointLike | Position | PositionLike | null | undefined} [value]
27
+ * Node, position, or point.
28
+ * @returns {string}
29
+ * Pretty printed positional info of a node (`string`).
30
+ *
31
+ * In the format of a range `ls:cs-le:ce` (when given `node` or `position`)
32
+ * or a point `l:c` (when given `point`), where `l` stands for line, `c` for
33
+ * column, `s` for `start`, and `e` for end.
34
+ * An empty string (`''`) is returned if the given value is neither `node`,
35
+ * `position`, nor `point`.
36
+ */
37
+ function stringifyPosition(value) {
38
+ // Nothing.
39
+ if (!value || typeof value !== 'object') {
40
+ return '';
41
+ }
42
+
43
+ // Node.
44
+ if ('position' in value || 'type' in value) {
45
+ return position(value.position);
46
+ }
47
+
48
+ // Position.
49
+ if ('start' in value || 'end' in value) {
50
+ return position(value);
51
+ }
52
+
53
+ // Point.
54
+ if ('line' in value || 'column' in value) {
55
+ return point(value);
56
+ }
57
+
58
+ // ?
59
+ return '';
60
+ }
61
+
62
+ /**
63
+ * @param {Point | PointLike | null | undefined} point
64
+ * @returns {string}
65
+ */
66
+ function point(point) {
67
+ return index(point && point.line) + ':' + index(point && point.column);
68
+ }
69
+
70
+ /**
71
+ * @param {Position | PositionLike | null | undefined} pos
72
+ * @returns {string}
73
+ */
74
+ function position(pos) {
75
+ return point(pos && pos.start) + '-' + point(pos && pos.end);
76
+ }
77
+
78
+ /**
79
+ * @param {number | null | undefined} value
80
+ * @returns {number}
81
+ */
82
+ function index(value) {
83
+ return value && typeof value === 'number' ? value : 1;
84
+ }
85
+
86
+ export { stringifyPosition as s };
87
+ //# sourceMappingURL=index-Bxzjtr16.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-Bxzjtr16.js","sources":["../../../node_modules/.pnpm/unist-util-stringify-position@4.0.0/node_modules/unist-util-stringify-position/lib/index.js"],"sourcesContent":["/**\n * @typedef {import('unist').Node} Node\n * @typedef {import('unist').Point} Point\n * @typedef {import('unist').Position} Position\n */\n\n/**\n * @typedef NodeLike\n * @property {string} type\n * @property {PositionLike | null | undefined} [position]\n *\n * @typedef PointLike\n * @property {number | null | undefined} [line]\n * @property {number | null | undefined} [column]\n * @property {number | null | undefined} [offset]\n *\n * @typedef PositionLike\n * @property {PointLike | null | undefined} [start]\n * @property {PointLike | null | undefined} [end]\n */\n\n/**\n * Serialize the positional info of a point, position (start and end points),\n * or node.\n *\n * @param {Node | NodeLike | Point | PointLike | Position | PositionLike | null | undefined} [value]\n * Node, position, or point.\n * @returns {string}\n * Pretty printed positional info of a node (`string`).\n *\n * In the format of a range `ls:cs-le:ce` (when given `node` or `position`)\n * or a point `l:c` (when given `point`), where `l` stands for line, `c` for\n * column, `s` for `start`, and `e` for end.\n * An empty string (`''`) is returned if the given value is neither `node`,\n * `position`, nor `point`.\n */\nexport function stringifyPosition(value) {\n // Nothing.\n if (!value || typeof value !== 'object') {\n return ''\n }\n\n // Node.\n if ('position' in value || 'type' in value) {\n return position(value.position)\n }\n\n // Position.\n if ('start' in value || 'end' in value) {\n return position(value)\n }\n\n // Point.\n if ('line' in value || 'column' in value) {\n return point(value)\n }\n\n // ?\n return ''\n}\n\n/**\n * @param {Point | PointLike | null | undefined} point\n * @returns {string}\n */\nfunction point(point) {\n return index(point && point.line) + ':' + index(point && point.column)\n}\n\n/**\n * @param {Position | PositionLike | null | undefined} pos\n * @returns {string}\n */\nfunction position(pos) {\n return point(pos && pos.start) + '-' + point(pos && pos.end)\n}\n\n/**\n * @param {number | null | undefined} value\n * @returns {number}\n */\nfunction index(value) {\n return value && typeof value === 'number' ? value : 1\n}\n"],"names":["stringifyPosition","value","position","point","index","line","column","pos","start","end"],"mappings":"AAAA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASA,iBAAiBA,CAACC,KAAK,EAAE;AACvC;AACA,EAAA,IAAI,CAACA,KAAK,IAAI,OAAOA,KAAK,KAAK,QAAQ,EAAE;AACvC,IAAA,OAAO,EAAE;AACX,EAAA;;AAEA;AACA,EAAA,IAAI,UAAU,IAAIA,KAAK,IAAI,MAAM,IAAIA,KAAK,EAAE;AAC1C,IAAA,OAAOC,QAAQ,CAACD,KAAK,CAACC,QAAQ,CAAC;AACjC,EAAA;;AAEA;AACA,EAAA,IAAI,OAAO,IAAID,KAAK,IAAI,KAAK,IAAIA,KAAK,EAAE;IACtC,OAAOC,QAAQ,CAACD,KAAK,CAAC;AACxB,EAAA;;AAEA;AACA,EAAA,IAAI,MAAM,IAAIA,KAAK,IAAI,QAAQ,IAAIA,KAAK,EAAE;IACxC,OAAOE,KAAK,CAACF,KAAK,CAAC;AACrB,EAAA;;AAEA;AACA,EAAA,OAAO,EAAE;AACX;;AAEA;AACA;AACA;AACA;AACA,SAASE,KAAKA,CAACA,KAAK,EAAE;AACpB,EAAA,OAAOC,KAAK,CAACD,KAAK,IAAIA,KAAK,CAACE,IAAI,CAAC,GAAG,GAAG,GAAGD,KAAK,CAACD,KAAK,IAAIA,KAAK,CAACG,MAAM,CAAC;AACxE;;AAEA;AACA;AACA;AACA;AACA,SAASJ,QAAQA,CAACK,GAAG,EAAE;AACrB,EAAA,OAAOJ,KAAK,CAACI,GAAG,IAAIA,GAAG,CAACC,KAAK,CAAC,GAAG,GAAG,GAAGL,KAAK,CAACI,GAAG,IAAIA,GAAG,CAACE,GAAG,CAAC;AAC9D;;AAEA;AACA;AACA;AACA;AACA,SAASL,KAAKA,CAACH,KAAK,EAAE;EACpB,OAAOA,KAAK,IAAI,OAAOA,KAAK,KAAK,QAAQ,GAAGA,KAAK,GAAG,CAAC;AACvD;;;;","x_google_ignoreList":[0]}