vite-node 0.7.13 → 0.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -7,7 +7,7 @@ Vite as Node runtime. The engine powers [Vitest](https://github.com/vitest-dev/v
7
7
  ## Features
8
8
 
9
9
  - Out-of-box ESM & TypeScript support (possible for more with plugins)
10
- - Top-level await
10
+ - Top-level `await`
11
11
  - Vite plugins, resolve, aliasing
12
12
  - Respect `vite.config.ts`
13
13
  - Shims for `__dirname` and `__filename` in ESM
@@ -29,7 +29,7 @@ npx vite-node -h
29
29
 
30
30
  ## Programmatic Usage
31
31
 
32
- In Vite Node, the server and runner (client) are separated, so you can integrate them in different contexts (workers, cross-process, or remote) if needed. The demo below shows a simple example of having the server and running in the same context
32
+ In Vite Node, the server and runner (client) are separated, so you can integrate them in different contexts (workers, cross-process, or remote) if needed. The demo below shows a simple example of having both (server and runner) running in the same context
33
33
 
34
34
  ```ts
35
35
  import { createServer } from 'vite'
File without changes
package/dist/client.cjs CHANGED
@@ -78,8 +78,9 @@ class ModuleCacheMap extends Map {
78
78
  class ViteNodeRunner {
79
79
  constructor(options) {
80
80
  this.options = options;
81
- this.root = options.root || process.cwd();
82
- this.moduleCache = options.moduleCache || new ModuleCacheMap();
81
+ this.root = options.root ?? process.cwd();
82
+ this.moduleCache = options.moduleCache ?? new ModuleCacheMap();
83
+ this.debug = options.debug ?? (typeof process !== "undefined" ? !!process.env.VITE_NODE_DEBUG : false);
83
84
  }
84
85
  async executeFile(file) {
85
86
  return await this.cachedRequest(`/@fs/${utils.slash(pathe.resolve(file))}`, []);
@@ -97,23 +98,36 @@ class ViteNodeRunner {
97
98
  this.moduleCache.set(fsPath, { promise });
98
99
  return await promise;
99
100
  }
100
- async directRequest(id, fsPath, callstack) {
101
- callstack = [...callstack, utils.normalizeModuleId(id)];
101
+ async directRequest(id, fsPath, _callstack) {
102
+ const callstack = [..._callstack, utils.normalizeModuleId(id)];
102
103
  const request = async (dep) => {
103
104
  var _a, _b;
105
+ const getStack = () => {
106
+ return `stack:
107
+ ${[...callstack, dep].reverse().map((p) => `- ${p}`).join("\n")}`;
108
+ };
104
109
  if (this.options.resolveId && this.shouldResolveId(dep)) {
105
110
  const resolvedDep = await this.options.resolveId(dep, id);
106
111
  dep = ((_a = resolvedDep == null ? void 0 : resolvedDep.id) == null ? void 0 : _a.replace(this.root, "")) || dep;
107
112
  }
108
- if (callstack.includes(utils.normalizeModuleId(dep))) {
109
- const depExports = (_b = this.moduleCache.get(dep)) == null ? void 0 : _b.exports;
110
- if (depExports)
111
- return depExports;
112
- throw new Error(`[vite-node] Circular dependency detected
113
- Stack:
114
- ${[...callstack, dep].reverse().map((p) => `- ${p}`).join("\n")}`);
113
+ let debugTimer;
114
+ if (this.debug)
115
+ debugTimer = setTimeout(() => this.debugLog(() => `module ${dep} takes over 2s to load.
116
+ ${getStack()}`), 2e3);
117
+ try {
118
+ if (callstack.includes(utils.normalizeModuleId(dep))) {
119
+ this.debugLog(() => `circular dependency, ${getStack()}`);
120
+ const depExports = (_b = this.moduleCache.get(dep)) == null ? void 0 : _b.exports;
121
+ if (depExports)
122
+ return depExports;
123
+ throw new Error(`[vite-node] Failed to resolve circular dependency, ${getStack()}`);
124
+ }
125
+ const mod = await this.cachedRequest(dep, callstack);
126
+ return mod;
127
+ } finally {
128
+ if (debugTimer)
129
+ clearTimeout(debugTimer);
115
130
  }
116
- return this.cachedRequest(dep, callstack);
117
131
  };
118
132
  const requestStubs = this.options.requestStubs || DEFAULT_REQUEST_STUBS;
119
133
  if (id in requestStubs)
@@ -189,6 +203,10 @@ ${[...callstack, dep].reverse().map((p) => `- ${p}`).join("\n")}`);
189
203
  hasNestedDefault(target) {
190
204
  return "__esModule" in target && target.__esModule && "default" in target.default;
191
205
  }
206
+ debugLog(msg) {
207
+ if (this.debug)
208
+ console.log(`[vite-node] ${msg()}`);
209
+ }
192
210
  }
193
211
  function proxyMethod(name, tryDefault) {
194
212
  return function(target, key, ...args) {
@@ -220,4 +238,4 @@ function exportAll(exports, sourceModule) {
220
238
  exports.DEFAULT_REQUEST_STUBS = DEFAULT_REQUEST_STUBS;
221
239
  exports.ModuleCacheMap = ModuleCacheMap;
222
240
  exports.ViteNodeRunner = ViteNodeRunner;
223
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpZW50LmNqcyIsInNvdXJjZXMiOlsiLi4vc3JjL2NsaWVudC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjcmVhdGVSZXF1aXJlIH0gZnJvbSAnbW9kdWxlJ1xuaW1wb3J0IHsgZmlsZVVSTFRvUGF0aCwgcGF0aFRvRmlsZVVSTCB9IGZyb20gJ3VybCdcbmltcG9ydCB2bSBmcm9tICd2bSdcbmltcG9ydCB7IGRpcm5hbWUsIGV4dG5hbWUsIGlzQWJzb2x1dGUsIHJlc29sdmUgfSBmcm9tICdwYXRoZSdcbmltcG9ydCB7IGlzTm9kZUJ1aWx0aW4gfSBmcm9tICdtbGx5J1xuaW1wb3J0IHsgaXNQcmltaXRpdmUsIG5vcm1hbGl6ZU1vZHVsZUlkLCBub3JtYWxpemVSZXF1ZXN0SWQsIHNsYXNoLCB0b0ZpbGVQYXRoIH0gZnJvbSAnLi91dGlscydcbmltcG9ydCB0eXBlIHsgTW9kdWxlQ2FjaGUsIFZpdGVOb2RlUnVubmVyT3B0aW9ucyB9IGZyb20gJy4vdHlwZXMnXG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX1JFUVVFU1RfU1RVQlMgPSB7XG4gICcvQHZpdGUvY2xpZW50Jzoge1xuICAgIGluamVjdFF1ZXJ5OiAoaWQ6IHN0cmluZykgPT4gaWQsXG4gICAgY3JlYXRlSG90Q29udGV4dCgpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGFjY2VwdDogKCkgPT4ge30sXG4gICAgICAgIHBydW5lOiAoKSA9PiB7fSxcbiAgICAgICAgZGlzcG9zZTogKCkgPT4ge30sXG4gICAgICAgIGRlY2xpbmU6ICgpID0+IHt9LFxuICAgICAgICBpbnZhbGlkYXRlOiAoKSA9PiB7fSxcbiAgICAgICAgb246ICgpID0+IHt9LFxuICAgICAgfVxuICAgIH0sXG4gICAgdXBkYXRlU3R5bGUoKSB7fSxcbiAgfSxcbn1cblxuZXhwb3J0IGNsYXNzIE1vZHVsZUNhY2hlTWFwIGV4dGVuZHMgTWFwPHN0cmluZywgTW9kdWxlQ2FjaGU+IHtcbiAgbm9ybWFsaXplUGF0aChmc1BhdGg6IHN0cmluZykge1xuICAgIHJldHVybiBub3JtYWxpemVNb2R1bGVJZChmc1BhdGgpXG4gIH1cblxuICBzZXQoZnNQYXRoOiBzdHJpbmcsIG1vZDogUGFydGlhbDxNb2R1bGVDYWNoZT4pIHtcbiAgICBmc1BhdGggPSB0aGlzLm5vcm1hbGl6ZVBhdGgoZnNQYXRoKVxuICAgIGlmICghc3VwZXIuaGFzKGZzUGF0aCkpXG4gICAgICBzdXBlci5zZXQoZnNQYXRoLCBtb2QpXG4gICAgZWxzZVxuICAgICAgT2JqZWN0LmFzc2lnbihzdXBlci5nZXQoZnNQYXRoKSwgbW9kKVxuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICBnZXQoZnNQYXRoOiBzdHJpbmcpIHtcbiAgICBmc1BhdGggPSB0aGlzLm5vcm1hbGl6ZVBhdGgoZnNQYXRoKVxuICAgIHJldHVybiBzdXBlci5nZXQoZnNQYXRoKVxuICB9XG5cbiAgZGVsZXRlKGZzUGF0aDogc3RyaW5nKSB7XG4gICAgZnNQYXRoID0gdGhpcy5ub3JtYWxpemVQYXRoKGZzUGF0aClcbiAgICByZXR1cm4gc3VwZXIuZGVsZXRlKGZzUGF0aClcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgVml0ZU5vZGVSdW5uZXIge1xuICByb290OiBzdHJpbmdcblxuICAvKipcbiAgICogSG9sZHMgdGhlIGNhY2hlIG9mIG1vZHVsZXNcbiAgICogS2V5cyBvZiB0aGUgbWFwIGFyZSBmaWxlcGF0aHMsIG9yIHBsYWluIHBhY2thZ2UgbmFtZXNcbiAgICovXG4gIG1vZHVsZUNhY2hlOiBNb2R1bGVDYWNoZU1hcFxuXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBvcHRpb25zOiBWaXRlTm9kZVJ1bm5lck9wdGlvbnMpIHtcbiAgICB0aGlzLnJvb3QgPSBvcHRpb25zLnJvb3QgfHwgcHJvY2Vzcy5jd2QoKVxuICAgIHRoaXMubW9kdWxlQ2FjaGUgPSBvcHRpb25zLm1vZHVsZUNhY2hlIHx8IG5ldyBNb2R1bGVDYWNoZU1hcCgpXG4gIH1cblxuICBhc3luYyBleGVjdXRlRmlsZShmaWxlOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5jYWNoZWRSZXF1ZXN0KGAvQGZzLyR7c2xhc2gocmVzb2x2ZShmaWxlKSl9YCwgW10pXG4gIH1cblxuICBhc3luYyBleGVjdXRlSWQoaWQ6IHN0cmluZykge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmNhY2hlZFJlcXVlc3QoaWQsIFtdKVxuICB9XG5cbiAgLyoqIEBpbnRlcm5hbCAqL1xuICBhc3luYyBjYWNoZWRSZXF1ZXN0KHJhd0lkOiBzdHJpbmcsIGNhbGxzdGFjazogc3RyaW5nW10pIHtcbiAgICBjb25zdCBpZCA9IG5vcm1hbGl6ZVJlcXVlc3RJZChyYXdJZCwgdGhpcy5vcHRpb25zLmJhc2UpXG4gICAgY29uc3QgZnNQYXRoID0gdG9GaWxlUGF0aChpZCwgdGhpcy5yb290KVxuXG4gICAgaWYgKHRoaXMubW9kdWxlQ2FjaGUuZ2V0KGZzUGF0aCk/LnByb21pc2UpXG4gICAgICByZXR1cm4gdGhpcy5tb2R1bGVDYWNoZS5nZXQoZnNQYXRoKT8ucHJvbWlzZVxuXG4gICAgY29uc3QgcHJvbWlzZSA9IHRoaXMuZGlyZWN0UmVxdWVzdChpZCwgZnNQYXRoLCBjYWxsc3RhY2spXG4gICAgdGhpcy5tb2R1bGVDYWNoZS5zZXQoZnNQYXRoLCB7IHByb21pc2UgfSlcblxuICAgIHJldHVybiBhd2FpdCBwcm9taXNlXG4gIH1cblxuICAvKiogQGludGVybmFsICovXG4gIGFzeW5jIGRpcmVjdFJlcXVlc3QoaWQ6IHN0cmluZywgZnNQYXRoOiBzdHJpbmcsIGNhbGxzdGFjazogc3RyaW5nW10pIHtcbiAgICBjYWxsc3RhY2sgPSBbLi4uY2FsbHN0YWNrLCBub3JtYWxpemVNb2R1bGVJZChpZCldXG4gICAgY29uc3QgcmVxdWVzdCA9IGFzeW5jKGRlcDogc3RyaW5nKSA9PiB7XG4gICAgICAvLyBwcm9iYWJseSBtZWFucyBpdCB3YXMgcGFzc2VkIGFzIHZhcmlhYmxlXG4gICAgICAvLyBhbmQgd2Fzbid0IHRyYW5zZm9ybWVkIGJ5IFZpdGVcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMucmVzb2x2ZUlkICYmIHRoaXMuc2hvdWxkUmVzb2x2ZUlkKGRlcCkpIHtcbiAgICAgICAgY29uc3QgcmVzb2x2ZWREZXAgPSBhd2FpdCB0aGlzLm9wdGlvbnMucmVzb2x2ZUlkKGRlcCwgaWQpXG4gICAgICAgIGRlcCA9IHJlc29sdmVkRGVwPy5pZD8ucmVwbGFjZSh0aGlzLnJvb3QsICcnKSB8fCBkZXBcbiAgICAgIH1cblxuICAgICAgaWYgKGNhbGxzdGFjay5pbmNsdWRlcyhub3JtYWxpemVNb2R1bGVJZChkZXApKSkge1xuICAgICAgICBjb25zdCBkZXBFeHBvcnRzID0gdGhpcy5tb2R1bGVDYWNoZS5nZXQoZGVwKT8uZXhwb3J0c1xuICAgICAgICBpZiAoZGVwRXhwb3J0cylcbiAgICAgICAgICByZXR1cm4gZGVwRXhwb3J0c1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFt2aXRlLW5vZGVdIENpcmN1bGFyIGRlcGVuZGVuY3kgZGV0ZWN0ZWRcXG5TdGFjazpcXG4ke1suLi5jYWxsc3RhY2ssIGRlcF0ucmV2ZXJzZSgpLm1hcChwID0+IGAtICR7cH1gKS5qb2luKCdcXG4nKX1gKVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMuY2FjaGVkUmVxdWVzdChkZXAsIGNhbGxzdGFjaylcbiAgICB9XG5cbiAgICBjb25zdCByZXF1ZXN0U3R1YnMgPSB0aGlzLm9wdGlvbnMucmVxdWVzdFN0dWJzIHx8IERFRkFVTFRfUkVRVUVTVF9TVFVCU1xuICAgIGlmIChpZCBpbiByZXF1ZXN0U3R1YnMpXG4gICAgICByZXR1cm4gcmVxdWVzdFN0dWJzW2lkXVxuXG4gICAgY29uc3QgeyBjb2RlOiB0cmFuc2Zvcm1lZCwgZXh0ZXJuYWxpemUgfSA9IGF3YWl0IHRoaXMub3B0aW9ucy5mZXRjaE1vZHVsZShpZClcbiAgICBpZiAoZXh0ZXJuYWxpemUpIHtcbiAgICAgIGNvbnN0IG1vZCA9IGF3YWl0IHRoaXMuaW50ZXJvcGVkSW1wb3J0KGV4dGVybmFsaXplKVxuICAgICAgdGhpcy5tb2R1bGVDYWNoZS5zZXQoZnNQYXRoLCB7IGV4cG9ydHM6IG1vZCB9KVxuICAgICAgcmV0dXJuIG1vZFxuICAgIH1cblxuICAgIGlmICh0cmFuc2Zvcm1lZCA9PSBudWxsKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBbdml0ZS1ub2RlXSBGYWlsZWQgdG8gbG9hZCAke2lkfWApXG5cbiAgICAvLyBkaXNhbWJpZ3VhdGUgdGhlIGA8VU5JVD46L2Agb24gd2luZG93czogc2VlIG5vZGVqcy9ub2RlIzMxNzEwXG4gICAgY29uc3QgdXJsID0gcGF0aFRvRmlsZVVSTChmc1BhdGgpLmhyZWZcbiAgICBjb25zdCBleHBvcnRzOiBhbnkgPSBPYmplY3QuY3JlYXRlKG51bGwpXG4gICAgZXhwb3J0c1tTeW1ib2wudG9TdHJpbmdUYWddID0gJ01vZHVsZSdcblxuICAgIHRoaXMubW9kdWxlQ2FjaGUuc2V0KGlkLCB7IGNvZGU6IHRyYW5zZm9ybWVkLCBleHBvcnRzIH0pXG5cbiAgICBjb25zdCBfX2ZpbGVuYW1lID0gZmlsZVVSTFRvUGF0aCh1cmwpXG4gICAgY29uc3QgbW9kdWxlUHJveHkgPSB7XG4gICAgICBzZXQgZXhwb3J0cyh2YWx1ZSkge1xuICAgICAgICBleHBvcnRBbGwoZXhwb3J0cywgdmFsdWUpXG4gICAgICAgIGV4cG9ydHMuZGVmYXVsdCA9IHZhbHVlXG4gICAgICB9LFxuICAgICAgZ2V0IGV4cG9ydHMoKSB7XG4gICAgICAgIHJldHVybiBleHBvcnRzLmRlZmF1bHRcbiAgICAgIH0sXG4gICAgfVxuXG4gICAgLy8gQmUgY2FyZWZ1bCB3aGVuIGNoYW5naW5nIHRoaXNcbiAgICAvLyBjaGFuZ2luZyBjb250ZXh0IHdpbGwgY2hhbmdlIGFtb3VudCBvZiBjb2RlIGFkZGVkIG9uIGxpbmUgOjExNCAodm0ucnVuSW5UaGlzQ29udGV4dClcbiAgICAvLyB0aGlzIG1lc3NlcyB1cCBzb3VyY2VtYXBzIGZvciBjb3ZlcmFnZVxuICAgIC8vIGFkanVzdCBgb2Zmc2V0YCB2YXJpYWJsZSBpbiBwYWNrYWdlcy92aXRlc3Qvc3JjL2ludGVncmF0aW9ucy9jb3ZlcmFnZS50cyNMMTAwIGlmIHlvdSBkbyBjaGFuZ2UgdGhpc1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLnByZXBhcmVDb250ZXh0KHtcbiAgICAgIC8vIGVzbSB0cmFuc2Zvcm1lZCBieSBWaXRlXG4gICAgICBfX3ZpdGVfc3NyX2ltcG9ydF9fOiByZXF1ZXN0LFxuICAgICAgX192aXRlX3Nzcl9keW5hbWljX2ltcG9ydF9fOiByZXF1ZXN0LFxuICAgICAgX192aXRlX3Nzcl9leHBvcnRzX186IGV4cG9ydHMsXG4gICAgICBfX3ZpdGVfc3NyX2V4cG9ydEFsbF9fOiAob2JqOiBhbnkpID0+IGV4cG9ydEFsbChleHBvcnRzLCBvYmopLFxuICAgICAgX192aXRlX3Nzcl9pbXBvcnRfbWV0YV9fOiB7IHVybCB9LFxuXG4gICAgICAvLyBjanMgY29tcGFjdFxuICAgICAgcmVxdWlyZTogY3JlYXRlUmVxdWlyZSh1cmwpLFxuICAgICAgZXhwb3J0cyxcbiAgICAgIG1vZHVsZTogbW9kdWxlUHJveHksXG4gICAgICBfX2ZpbGVuYW1lLFxuICAgICAgX19kaXJuYW1lOiBkaXJuYW1lKF9fZmlsZW5hbWUpLFxuICAgIH0pXG5cbiAgICAvLyBhZGQgJ3VzZSBzdHJpY3QnIHNpbmNlIEVTTSBlbmFibGVzIGl0IGJ5IGRlZmF1bHRcbiAgICBjb25zdCBmbiA9IHZtLnJ1bkluVGhpc0NvbnRleHQoYCd1c2Ugc3RyaWN0Jzthc3luYyAoJHtPYmplY3Qua2V5cyhjb250ZXh0KS5qb2luKCcsJyl9KT0+e3ske3RyYW5zZm9ybWVkfVxcbn19YCwge1xuICAgICAgZmlsZW5hbWU6IGZzUGF0aCxcbiAgICAgIGxpbmVPZmZzZXQ6IDAsXG4gICAgfSlcblxuICAgIGF3YWl0IGZuKC4uLk9iamVjdC52YWx1ZXMoY29udGV4dCkpXG5cbiAgICByZXR1cm4gZXhwb3J0c1xuICB9XG5cbiAgcHJlcGFyZUNvbnRleHQoY29udGV4dDogUmVjb3JkPHN0cmluZywgYW55Pikge1xuICAgIHJldHVybiBjb250ZXh0XG4gIH1cblxuICBzaG91bGRSZXNvbHZlSWQoZGVwOiBzdHJpbmcpIHtcbiAgICBpZiAoaXNOb2RlQnVpbHRpbihkZXApIHx8IGRlcCBpbiAodGhpcy5vcHRpb25zLnJlcXVlc3RTdHVicyB8fCBERUZBVUxUX1JFUVVFU1RfU1RVQlMpKVxuICAgICAgcmV0dXJuIGZhbHNlXG5cbiAgICByZXR1cm4gIWlzQWJzb2x1dGUoZGVwKSB8fCAhZXh0bmFtZShkZXApXG4gIH1cblxuICAvKipcbiAgICogRGVmaW5lIGlmIGEgbW9kdWxlIHNob3VsZCBiZSBpbnRlcm9wLWVkXG4gICAqIFRoaXMgZnVuY3Rpb24gbW9zdGx5IGZvciB0aGUgYWJpbGl0eSB0byBvdmVycmlkZSBieSBzdWJjbGFzc1xuICAgKi9cbiAgc2hvdWxkSW50ZXJvcChwYXRoOiBzdHJpbmcsIG1vZDogYW55KSB7XG4gICAgaWYgKHRoaXMub3B0aW9ucy5pbnRlcm9wRGVmYXVsdCA9PT0gZmFsc2UpXG4gICAgICByZXR1cm4gZmFsc2VcbiAgICAvLyBuZXZlciBpbnRlcm9wIEVTTSBtb2R1bGVzXG4gICAgLy8gVE9ETzogc2hvdWxkIGFsc28gc2tpcCBmb3IgYC5qc2Agd2l0aCBgdHlwZT1cIm1vZHVsZVwiYFxuICAgIHJldHVybiAhcGF0aC5lbmRzV2l0aCgnLm1qcycpICYmICdkZWZhdWx0JyBpbiBtb2RcbiAgfVxuXG4gIC8qKlxuICAgKiBJbXBvcnQgYSBtb2R1bGUgYW5kIGludGVyb3AgaXRcbiAgICovXG4gIGFzeW5jIGludGVyb3BlZEltcG9ydChwYXRoOiBzdHJpbmcpIHtcbiAgICBjb25zdCBtb2QgPSBhd2FpdCBpbXBvcnQocGF0aClcblxuICAgIGlmICh0aGlzLnNob3VsZEludGVyb3AocGF0aCwgbW9kKSkge1xuICAgICAgY29uc3QgdHJ5RGVmYXVsdCA9IHRoaXMuaGFzTmVzdGVkRGVmYXVsdChtb2QpXG4gICAgICByZXR1cm4gbmV3IFByb3h5KG1vZCwge1xuICAgICAgICBnZXQ6IHByb3h5TWV0aG9kKCdnZXQnLCB0cnlEZWZhdWx0KSxcbiAgICAgICAgc2V0OiBwcm94eU1ldGhvZCgnc2V0JywgdHJ5RGVmYXVsdCksXG4gICAgICAgIGhhczogcHJveHlNZXRob2QoJ2hhcycsIHRyeURlZmF1bHQpLFxuICAgICAgICBkZWxldGVQcm9wZXJ0eTogcHJveHlNZXRob2QoJ2RlbGV0ZVByb3BlcnR5JywgdHJ5RGVmYXVsdCksXG4gICAgICB9KVxuICAgIH1cblxuICAgIHJldHVybiBtb2RcbiAgfVxuXG4gIGhhc05lc3RlZERlZmF1bHQodGFyZ2V0OiBhbnkpIHtcbiAgICByZXR1cm4gJ19fZXNNb2R1bGUnIGluIHRhcmdldCAmJiB0YXJnZXQuX19lc01vZHVsZSAmJiAnZGVmYXVsdCcgaW4gdGFyZ2V0LmRlZmF1bHRcbiAgfVxufVxuXG5mdW5jdGlvbiBwcm94eU1ldGhvZChuYW1lOiAnZ2V0JyB8ICdzZXQnIHwgJ2hhcycgfCAnZGVsZXRlUHJvcGVydHknLCB0cnlEZWZhdWx0OiBib29sZWFuKSB7XG4gIHJldHVybiBmdW5jdGlvbih0YXJnZXQ6IGFueSwga2V5OiBzdHJpbmcgfCBzeW1ib2wsIC4uLmFyZ3M6IFthbnk/LCBhbnk/XSkge1xuICAgIGNvbnN0IHJlc3VsdCA9IFJlZmxlY3RbbmFtZV0odGFyZ2V0LCBrZXksIC4uLmFyZ3MpXG4gICAgaWYgKGlzUHJpbWl0aXZlKHRhcmdldC5kZWZhdWx0KSlcbiAgICAgIHJldHVybiByZXN1bHRcbiAgICBpZiAoKHRyeURlZmF1bHQgJiYga2V5ID09PSAnZGVmYXVsdCcpIHx8IHR5cGVvZiByZXN1bHQgPT09ICd1bmRlZmluZWQnKVxuICAgICAgcmV0dXJuIFJlZmxlY3RbbmFtZV0odGFyZ2V0LmRlZmF1bHQsIGtleSwgLi4uYXJncylcbiAgICByZXR1cm4gcmVzdWx0XG4gIH1cbn1cblxuZnVuY3Rpb24gZXhwb3J0QWxsKGV4cG9ydHM6IGFueSwgc291cmNlTW9kdWxlOiBhbnkpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlc3RyaWN0ZWQtc3ludGF4XG4gIGZvciAoY29uc3Qga2V5IGluIHNvdXJjZU1vZHVsZSkge1xuICAgIGlmIChrZXkgIT09ICdkZWZhdWx0Jykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIGtleSwge1xuICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgIGdldCgpIHsgcmV0dXJuIHNvdXJjZU1vZHVsZVtrZXldIH0sXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICBjYXRjaCAoX2VycikgeyB9XG4gICAgfVxuICB9XG59XG4iXSwibmFtZXMiOlsibm9ybWFsaXplTW9kdWxlSWQiLCJzbGFzaCIsInJlc29sdmUiLCJub3JtYWxpemVSZXF1ZXN0SWQiLCJ0b0ZpbGVQYXRoIiwidXJsIiwicGF0aFRvRmlsZVVSTCIsImZpbGVVUkxUb1BhdGgiLCJjcmVhdGVSZXF1aXJlIiwiZGlybmFtZSIsInZtIiwiaXNOb2RlQnVpbHRpbiIsImlzQWJzb2x1dGUiLCJleHRuYW1lIiwiaXNQcmltaXRpdmUiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVFPLE1BQU0scUJBQXdCLEdBQUE7QUFBQSxFQUNuQyxlQUFpQixFQUFBO0FBQUEsSUFDZixXQUFBLEVBQWEsQ0FBQyxFQUFlLEtBQUEsRUFBQTtBQUFBLElBQzdCLGdCQUFtQixHQUFBO0FBQ2pCLE1BQU8sT0FBQTtBQUFBLFFBQ0wsUUFBUSxNQUFNO0FBQUEsU0FBQztBQUFBLFFBQ2YsT0FBTyxNQUFNO0FBQUEsU0FBQztBQUFBLFFBQ2QsU0FBUyxNQUFNO0FBQUEsU0FBQztBQUFBLFFBQ2hCLFNBQVMsTUFBTTtBQUFBLFNBQUM7QUFBQSxRQUNoQixZQUFZLE1BQU07QUFBQSxTQUFDO0FBQUEsUUFDbkIsSUFBSSxNQUFNO0FBQUEsU0FBQztBQUFBLE9BQ2IsQ0FBQTtBQUFB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
241
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpZW50LmNqcyIsInNvdXJjZXMiOlsiLi4vc3JjL2NsaWVudC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjcmVhdGVSZXF1aXJlIH0gZnJvbSAnbW9kdWxlJ1xuaW1wb3J0IHsgZmlsZVVSTFRvUGF0aCwgcGF0aFRvRmlsZVVSTCB9IGZyb20gJ3VybCdcbmltcG9ydCB2bSBmcm9tICd2bSdcbmltcG9ydCB7IGRpcm5hbWUsIGV4dG5hbWUsIGlzQWJzb2x1dGUsIHJlc29sdmUgfSBmcm9tICdwYXRoZSdcbmltcG9ydCB7IGlzTm9kZUJ1aWx0aW4gfSBmcm9tICdtbGx5J1xuaW1wb3J0IHsgaXNQcmltaXRpdmUsIG5vcm1hbGl6ZU1vZHVsZUlkLCBub3JtYWxpemVSZXF1ZXN0SWQsIHNsYXNoLCB0b0ZpbGVQYXRoIH0gZnJvbSAnLi91dGlscydcbmltcG9ydCB0eXBlIHsgTW9kdWxlQ2FjaGUsIFZpdGVOb2RlUnVubmVyT3B0aW9ucyB9IGZyb20gJy4vdHlwZXMnXG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX1JFUVVFU1RfU1RVQlMgPSB7XG4gICcvQHZpdGUvY2xpZW50Jzoge1xuICAgIGluamVjdFF1ZXJ5OiAoaWQ6IHN0cmluZykgPT4gaWQsXG4gICAgY3JlYXRlSG90Q29udGV4dCgpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGFjY2VwdDogKCkgPT4ge30sXG4gICAgICAgIHBydW5lOiAoKSA9PiB7fSxcbiAgICAgICAgZGlzcG9zZTogKCkgPT4ge30sXG4gICAgICAgIGRlY2xpbmU6ICgpID0+IHt9LFxuICAgICAgICBpbnZhbGlkYXRlOiAoKSA9PiB7fSxcbiAgICAgICAgb246ICgpID0+IHt9LFxuICAgICAgfVxuICAgIH0sXG4gICAgdXBkYXRlU3R5bGUoKSB7fSxcbiAgfSxcbn1cblxuZXhwb3J0IGNsYXNzIE1vZHVsZUNhY2hlTWFwIGV4dGVuZHMgTWFwPHN0cmluZywgTW9kdWxlQ2FjaGU+IHtcbiAgbm9ybWFsaXplUGF0aChmc1BhdGg6IHN0cmluZykge1xuICAgIHJldHVybiBub3JtYWxpemVNb2R1bGVJZChmc1BhdGgpXG4gIH1cblxuICBzZXQoZnNQYXRoOiBzdHJpbmcsIG1vZDogUGFydGlhbDxNb2R1bGVDYWNoZT4pIHtcbiAgICBmc1BhdGggPSB0aGlzLm5vcm1hbGl6ZVBhdGgoZnNQYXRoKVxuICAgIGlmICghc3VwZXIuaGFzKGZzUGF0aCkpXG4gICAgICBzdXBlci5zZXQoZnNQYXRoLCBtb2QpXG4gICAgZWxzZVxuICAgICAgT2JqZWN0LmFzc2lnbihzdXBlci5nZXQoZnNQYXRoKSwgbW9kKVxuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICBnZXQoZnNQYXRoOiBzdHJpbmcpIHtcbiAgICBmc1BhdGggPSB0aGlzLm5vcm1hbGl6ZVBhdGgoZnNQYXRoKVxuICAgIHJldHVybiBzdXBlci5nZXQoZnNQYXRoKVxuICB9XG5cbiAgZGVsZXRlKGZzUGF0aDogc3RyaW5nKSB7XG4gICAgZnNQYXRoID0gdGhpcy5ub3JtYWxpemVQYXRoKGZzUGF0aClcbiAgICByZXR1cm4gc3VwZXIuZGVsZXRlKGZzUGF0aClcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgVml0ZU5vZGVSdW5uZXIge1xuICByb290OiBzdHJpbmdcblxuICBkZWJ1ZzogYm9vbGVhblxuXG4gIC8qKlxuICAgKiBIb2xkcyB0aGUgY2FjaGUgb2YgbW9kdWxlc1xuICAgKiBLZXlzIG9mIHRoZSBtYXAgYXJlIGZpbGVwYXRocywgb3IgcGxhaW4gcGFja2FnZSBuYW1lc1xuICAgKi9cbiAgbW9kdWxlQ2FjaGU6IE1vZHVsZUNhY2hlTWFwXG5cbiAgY29uc3RydWN0b3IocHVibGljIG9wdGlvbnM6IFZpdGVOb2RlUnVubmVyT3B0aW9ucykge1xuICAgIHRoaXMucm9vdCA9IG9wdGlvbnMucm9vdCA/PyBwcm9jZXNzLmN3ZCgpXG4gICAgdGhpcy5tb2R1bGVDYWNoZSA9IG9wdGlvbnMubW9kdWxlQ2FjaGUgPz8gbmV3IE1vZHVsZUNhY2hlTWFwKClcbiAgICB0aGlzLmRlYnVnID0gb3B0aW9ucy5kZWJ1ZyA/PyAodHlwZW9mIHByb2Nlc3MgIT09ICd1bmRlZmluZWQnID8gISFwcm9jZXNzLmVudi5WSVRFX05PREVfREVCVUcgOiBmYWxzZSlcbiAgfVxuXG4gIGFzeW5jIGV4ZWN1dGVGaWxlKGZpbGU6IHN0cmluZykge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmNhY2hlZFJlcXVlc3QoYC9AZnMvJHtzbGFzaChyZXNvbHZlKGZpbGUpKX1gLCBbXSlcbiAgfVxuXG4gIGFzeW5jIGV4ZWN1dGVJZChpZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuY2FjaGVkUmVxdWVzdChpZCwgW10pXG4gIH1cblxuICAvKiogQGludGVybmFsICovXG4gIGFzeW5jIGNhY2hlZFJlcXVlc3QocmF3SWQ6IHN0cmluZywgY2FsbHN0YWNrOiBzdHJpbmdbXSkge1xuICAgIGNvbnN0IGlkID0gbm9ybWFsaXplUmVxdWVzdElkKHJhd0lkLCB0aGlzLm9wdGlvbnMuYmFzZSlcbiAgICBjb25zdCBmc1BhdGggPSB0b0ZpbGVQYXRoKGlkLCB0aGlzLnJvb3QpXG5cbiAgICBpZiAodGhpcy5tb2R1bGVDYWNoZS5nZXQoZnNQYXRoKT8ucHJvbWlzZSlcbiAgICAgIHJldHVybiB0aGlzLm1vZHVsZUNhY2hlLmdldChmc1BhdGgpPy5wcm9taXNlXG5cbiAgICBjb25zdCBwcm9taXNlID0gdGhpcy5kaXJlY3RSZXF1ZXN0KGlkLCBmc1BhdGgsIGNhbGxzdGFjaylcbiAgICB0aGlzLm1vZHVsZUNhY2hlLnNldChmc1BhdGgsIHsgcHJvbWlzZSB9KVxuXG4gICAgcmV0dXJuIGF3YWl0IHByb21pc2VcbiAgfVxuXG4gIC8qKiBAaW50ZXJuYWwgKi9cbiAgYXN5bmMgZGlyZWN0UmVxdWVzdChpZDogc3RyaW5nLCBmc1BhdGg6IHN0cmluZywgX2NhbGxzdGFjazogc3RyaW5nW10pIHtcbiAgICBjb25zdCBjYWxsc3RhY2sgPSBbLi4uX2NhbGxzdGFjaywgbm9ybWFsaXplTW9kdWxlSWQoaWQpXVxuICAgIGNvbnN0IHJlcXVlc3QgPSBhc3luYyhkZXA6IHN0cmluZykgPT4ge1xuICAgICAgY29uc3QgZ2V0U3RhY2sgPSAoKSA9PiB7XG4gICAgICAgIHJldHVybiBgc3RhY2s6XFxuJHtbLi4uY2FsbHN0YWNrLCBkZXBdLnJldmVyc2UoKS5tYXAocCA9PiBgLSAke3B9YCkuam9pbignXFxuJyl9YFxuICAgICAgfVxuXG4gICAgICAvLyBwcm9iYWJseSBtZWFucyBpdCB3YXMgcGFzc2VkIGFzIHZhcmlhYmxlXG4gICAgICAvLyBhbmQgd2Fzbid0IHRyYW5zZm9ybWVkIGJ5IFZpdGVcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMucmVzb2x2ZUlkICYmIHRoaXMuc2hvdWxkUmVzb2x2ZUlkKGRlcCkpIHtcbiAgICAgICAgY29uc3QgcmVzb2x2ZWREZXAgPSBhd2FpdCB0aGlzLm9wdGlvbnMucmVzb2x2ZUlkKGRlcCwgaWQpXG4gICAgICAgIGRlcCA9IHJlc29sdmVkRGVwPy5pZD8ucmVwbGFjZSh0aGlzLnJvb3QsICcnKSB8fCBkZXBcbiAgICAgIH1cblxuICAgICAgbGV0IGRlYnVnVGltZXI6IGFueVxuICAgICAgaWYgKHRoaXMuZGVidWcpXG4gICAgICAgIGRlYnVnVGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHRoaXMuZGVidWdMb2coKCkgPT4gYG1vZHVsZSAke2RlcH0gdGFrZXMgb3ZlciAycyB0byBsb2FkLlxcbiR7Z2V0U3RhY2soKX1gKSwgMjAwMClcblxuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKGNhbGxzdGFjay5pbmNsdWRlcyhub3JtYWxpemVNb2R1bGVJZChkZXApKSkge1xuICAgICAgICAgIHRoaXMuZGVidWdMb2coKCkgPT4gYGNpcmN1bGFyIGRlcGVuZGVuY3ksICR7Z2V0U3RhY2soKX1gKVxuICAgICAgICAgIGNvbnN0IGRlcEV4cG9ydHMgPSB0aGlzLm1vZHVsZUNhY2hlLmdldChkZXApPy5leHBvcnRzXG4gICAgICAgICAgaWYgKGRlcEV4cG9ydHMpXG4gICAgICAgICAgICByZXR1cm4gZGVwRXhwb3J0c1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgW3ZpdGUtbm9kZV0gRmFpbGVkIHRvIHJlc29sdmUgY2lyY3VsYXIgZGVwZW5kZW5jeSwgJHtnZXRTdGFjaygpfWApXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBtb2QgPSBhd2FpdCB0aGlzLmNhY2hlZFJlcXVlc3QoZGVwLCBjYWxsc3RhY2spXG5cbiAgICAgICAgcmV0dXJuIG1vZFxuICAgICAgfVxuICAgICAgZmluYWxseSB7XG4gICAgICAgIGlmIChkZWJ1Z1RpbWVyKVxuICAgICAgICAgIGNsZWFyVGltZW91dChkZWJ1Z1RpbWVyKVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHJlcXVlc3RTdHVicyA9IHRoaXMub3B0aW9ucy5yZXF1ZXN0U3R1YnMgfHwgREVGQVVMVF9SRVFVRVNUX1NUVUJTXG4gICAgaWYgKGlkIGluIHJlcXVlc3RTdHVicylcbiAgICAgIHJldHVybiByZXF1ZXN0U3R1YnNbaWRdXG5cbiAgICBjb25zdCB7IGNvZGU6IHRyYW5zZm9ybWVkLCBleHRlcm5hbGl6ZSB9ID0gYXdhaXQgdGhpcy5vcHRpb25zLmZldGNoTW9kdWxlKGlkKVxuICAgIGlmIChleHRlcm5hbGl6ZSkge1xuICAgICAgY29uc3QgbW9kID0gYXdhaXQgdGhpcy5pbnRlcm9wZWRJbXBvcnQoZXh0ZXJuYWxpemUpXG4gICAgICB0aGlzLm1vZHVsZUNhY2hlLnNldChmc1BhdGgsIHsgZXhwb3J0czogbW9kIH0pXG4gICAgICByZXR1cm4gbW9kXG4gICAgfVxuXG4gICAgaWYgKHRyYW5zZm9ybWVkID09IG51bGwpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFt2aXRlLW5vZGVdIEZhaWxlZCB0byBsb2FkICR7aWR9YClcblxuICAgIC8vIGRpc2FtYmlndWF0ZSB0aGUgYDxVTklUPjovYCBvbiB3aW5kb3dzOiBzZWUgbm9kZWpzL25vZGUjMzE3MTBcbiAgICBjb25zdCB1cmwgPSBwYXRoVG9GaWxlVVJMKGZzUGF0aCkuaHJlZlxuICAgIGNvbnN0IGV4cG9ydHM6IGFueSA9IE9iamVjdC5jcmVhdGUobnVsbClcbiAgICBleHBvcnRzW1N5bWJvbC50b1N0cmluZ1RhZ10gPSAnTW9kdWxlJ1xuXG4gICAgdGhpcy5tb2R1bGVDYWNoZS5zZXQoaWQsIHsgY29kZTogdHJhbnNmb3JtZWQsIGV4cG9ydHMgfSlcblxuICAgIGNvbnN0IF9fZmlsZW5hbWUgPSBmaWxlVVJMVG9QYXRoKHVybClcbiAgICBjb25zdCBtb2R1bGVQcm94eSA9IHtcbiAgICAgIHNldCBleHBvcnRzKHZhbHVlKSB7XG4gICAgICAgIGV4cG9ydEFsbChleHBvcnRzLCB2YWx1ZSlcbiAgICAgICAgZXhwb3J0cy5kZWZhdWx0ID0gdmFsdWVcbiAgICAgIH0sXG4gICAgICBnZXQgZXhwb3J0cygpIHtcbiAgICAgICAgcmV0dXJuIGV4cG9ydHMuZGVmYXVsdFxuICAgICAgfSxcbiAgICB9XG5cbiAgICAvLyBCZSBjYXJlZnVsIHdoZW4gY2hhbmdpbmcgdGhpc1xuICAgIC8vIGNoYW5naW5nIGNvbnRleHQgd2lsbCBjaGFuZ2UgYW1vdW50IG9mIGNvZGUgYWRkZWQgb24gbGluZSA6MTE0ICh2bS5ydW5JblRoaXNDb250ZXh0KVxuICAgIC8vIHRoaXMgbWVzc2VzIHVwIHNvdXJjZW1hcHMgZm9yIGNvdmVyYWdlXG4gICAgLy8gYWRqdXN0IGBvZmZzZXRgIHZhcmlhYmxlIGluIHBhY2thZ2VzL3ZpdGVzdC9zcmMvaW50ZWdyYXRpb25zL2NvdmVyYWdlLnRzI0wxMDAgaWYgeW91IGRvIGNoYW5nZSB0aGlzXG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMucHJlcGFyZUNvbnRleHQoe1xuICAgICAgLy8gZXNtIHRyYW5zZm9ybWVkIGJ5IFZpdGVcbiAgICAgIF9fdml0ZV9zc3JfaW1wb3J0X186IHJlcXVlc3QsXG4gICAgICBfX3ZpdGVfc3NyX2R5bmFtaWNfaW1wb3J0X186IHJlcXVlc3QsXG4gICAgICBfX3ZpdGVfc3NyX2V4cG9ydHNfXzogZXhwb3J0cyxcbiAgICAgIF9fdml0ZV9zc3JfZXhwb3J0QWxsX186IChvYmo6IGFueSkgPT4gZXhwb3J0QWxsKGV4cG9ydHMsIG9iaiksXG4gICAgICBfX3ZpdGVfc3NyX2ltcG9ydF9tZXRhX186IHsgdXJsIH0sXG5cbiAgICAgIC8vIGNqcyBjb21wYWN0XG4gICAgICByZXF1aXJlOiBjcmVhdGVSZXF1aXJlKHVybCksXG4gICAgICBleHBvcnRzLFxuICAgICAgbW9kdWxlOiBtb2R1bGVQcm94eSxcbiAgICAgIF9fZmlsZW5hbWUsXG4gICAgICBfX2Rpcm5hbWU6IGRpcm5hbWUoX19maWxlbmFtZSksXG4gICAgfSlcblxuICAgIC8vIGFkZCAndXNlIHN0cmljdCcgc2luY2UgRVNNIGVuYWJsZXMgaXQgYnkgZGVmYXVsdFxuICAgIGNvbnN0IGZuID0gdm0ucnVuSW5UaGlzQ29udGV4dChgJ3VzZSBzdHJpY3QnO2FzeW5jICgke09iamVjdC5rZXlzKGNvbnRleHQpLmpvaW4oJywnKX0pPT57eyR7dHJhbnNmb3JtZWR9XFxufX1gLCB7XG4gICAgICBmaWxlbmFtZTogZnNQYXRoLFxuICAgICAgbGluZU9mZnNldDogMCxcbiAgICB9KVxuXG4gICAgYXdhaXQgZm4oLi4uT2JqZWN0LnZhbHVlcyhjb250ZXh0KSlcblxuICAgIHJldHVybiBleHBvcnRzXG4gIH1cblxuICBwcmVwYXJlQ29udGV4dChjb250ZXh0OiBSZWNvcmQ8c3RyaW5nLCBhbnk+KSB7XG4gICAgcmV0dXJuIGNvbnRleHRcbiAgfVxuXG4gIHNob3VsZFJlc29sdmVJZChkZXA6IHN0cmluZykge1xuICAgIGlmIChpc05vZGVCdWlsdGluKGRlcCkgfHwgZGVwIGluICh0aGlzLm9wdGlvbnMucmVxdWVzdFN0dWJzIHx8IERFRkFVTFRfUkVRVUVTVF9TVFVCUykpXG4gICAgICByZXR1cm4gZmFsc2VcblxuICAgIHJldHVybiAhaXNBYnNvbHV0ZShkZXApIHx8ICFleHRuYW1lKGRlcClcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWZpbmUgaWYgYSBtb2R1bGUgc2hvdWxkIGJlIGludGVyb3AtZWRcbiAgICogVGhpcyBmdW5jdGlvbiBtb3N0bHkgZm9yIHRoZSBhYmlsaXR5IHRvIG92ZXJyaWRlIGJ5IHN1YmNsYXNzXG4gICAqL1xuICBzaG91bGRJbnRlcm9wKHBhdGg6IHN0cmluZywgbW9kOiBhbnkpIHtcbiAgICBpZiAodGhpcy5vcHRpb25zLmludGVyb3BEZWZhdWx0ID09PSBmYWxzZSlcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIC8vIG5ldmVyIGludGVyb3AgRVNNIG1vZHVsZXNcbiAgICAvLyBUT0RPOiBzaG91bGQgYWxzbyBza2lwIGZvciBgLmpzYCB3aXRoIGB0eXBlPVwibW9kdWxlXCJgXG4gICAgcmV0dXJuICFwYXRoLmVuZHNXaXRoKCcubWpzJykgJiYgJ2RlZmF1bHQnIGluIG1vZFxuICB9XG5cbiAgLyoqXG4gICAqIEltcG9ydCBhIG1vZHVsZSBhbmQgaW50ZXJvcCBpdFxuICAgKi9cbiAgYXN5bmMgaW50ZXJvcGVkSW1wb3J0KHBhdGg6IHN0cmluZykge1xuICAgIGNvbnN0IG1vZCA9IGF3YWl0IGltcG9ydChwYXRoKVxuXG4gICAgaWYgKHRoaXMuc2hvdWxkSW50ZXJvcChwYXRoLCBtb2QpKSB7XG4gICAgICBjb25zdCB0cnlEZWZhdWx0ID0gdGhpcy5oYXNOZXN0ZWREZWZhdWx0KG1vZClcbiAgICAgIHJldHVybiBuZXcgUHJveHkobW9kLCB7XG4gICAgICAgIGdldDogcHJveHlNZXRob2QoJ2dldCcsIHRyeURlZmF1bHQpLFxuICAgICAgICBzZXQ6IHByb3h5TWV0aG9kKCdzZXQnLCB0cnlEZWZhdWx0KSxcbiAgICAgICAgaGFzOiBwcm94eU1ldGhvZCgnaGFzJywgdHJ5RGVmYXVsdCksXG4gICAgICAgIGRlbGV0ZVByb3BlcnR5OiBwcm94eU1ldGhvZCgnZGVsZXRlUHJvcGVydHknLCB0cnlEZWZhdWx0KSxcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgcmV0dXJuIG1vZFxuICB9XG5cbiAgaGFzTmVzdGVkRGVmYXVsdCh0YXJnZXQ6IGFueSkge1xuICAgIHJldHVybiAnX19lc01vZHVsZScgaW4gdGFyZ2V0ICYmIHRhcmdldC5fX2VzTW9kdWxlICYmICdkZWZhdWx0JyBpbiB0YXJnZXQuZGVmYXVsdFxuICB9XG5cbiAgcHJpdmF0ZSBkZWJ1Z0xvZyhtc2c6ICgpID0+IHN0cmluZykge1xuICAgIGlmICh0aGlzLmRlYnVnKVxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgIGNvbnNvbGUubG9nKGBbdml0ZS1ub2RlXSAke21zZygpfWApXG4gIH1cbn1cblxuZnVuY3Rpb24gcHJveHlNZXRob2QobmFtZTogJ2dldCcgfCAnc2V0JyB8ICdoYXMnIHwgJ2RlbGV0ZVByb3BlcnR5JywgdHJ5RGVmYXVsdDogYm9vbGVhbikge1xuICByZXR1cm4gZnVuY3Rpb24odGFyZ2V0OiBhbnksIGtleTogc3RyaW5nIHwgc3ltYm9sLCAuLi5hcmdzOiBbYW55PywgYW55P10pIHtcbiAgICBjb25zdCByZXN1bHQgPSBSZWZsZWN0W25hbWVdKHRhcmdldCwga2V5LCAuLi5hcmdzKVxuICAgIGlmIChpc1ByaW1pdGl2ZSh0YXJnZXQuZGVmYXVsdCkpXG4gICAgICByZXR1cm4gcmVzdWx0XG4gICAgaWYgKCh0cnlEZWZhdWx0ICYmIGtleSA9PT0gJ2RlZmF1bHQnKSB8fCB0eXBlb2YgcmVzdWx0ID09PSAndW5kZWZpbmVkJylcbiAgICAgIHJldHVybiBSZWZsZWN0W25hbWVdKHRhcmdldC5kZWZhdWx0LCBrZXksIC4uLmFyZ3MpXG4gICAgcmV0dXJuIHJlc3VsdFxuICB9XG59XG5cbmZ1bmN0aW9uIGV4cG9ydEFsbChleHBvcnRzOiBhbnksIHNvdXJjZU1vZHVsZTogYW55KSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1yZXN0cmljdGVkLXN5bnRheFxuICBmb3IgKGNvbnN0IGtleSBpbiBzb3VyY2VNb2R1bGUpIHtcbiAgICBpZiAoa2V5ICE9PSAnZGVmYXVsdCcpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBrZXksIHtcbiAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgICBnZXQoKSB7IHJldHVybiBzb3VyY2VNb2R1bGVba2V5XSB9LFxuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgY2F0Y2ggKF9lcnIpIHsgfVxuICAgIH1cbiAgfVxufVxuIl0sIm5hbWVzIjpbIm5vcm1hbGl6ZU1vZHVsZUlkIiwic2xhc2giLCJyZXNvbHZlIiwibm9ybWFsaXplUmVxdWVzdElkIiwidG9GaWxlUGF0aCIsInVybCIsInBhdGhUb0ZpbGVVUkwiLCJmaWxlVVJMVG9QYXRoIiwiY3JlYXRlUmVxdWlyZSIsImRpcm5hbWUiLCJ2bSIsImlzTm9kZUJ1aWx0aW4iLCJpc0Fic29sdXRlIiwiZXh0bmFtZSIsImlzUHJpbWl0aXZlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFRTyxNQUFNLHFCQUF3QixHQUFBO0FBQUEsRUFDbkMsZUFBaUIsRUFBQTtBQUFBLElBQ2YsV0FBQSxFQUFhLENBQUMsRUFBZSxLQUFBLEVBQUE7QUFBQSxJQUM3QixnQkFBbUIsR0FBQTtBQUNqQixNQUFPLE9BQUE7QUFBQSxRQUNMLFFBQVEsTUFBTTtBQUFBLFNBQUM7QUFBQSxRQUNmLE9BQU8sTUFBTTtBQUFBLFNBQUM7QUFBQSxRQUNkLFNBQVMsTUFBTTtBQUFBLFNBQUM7QUFBQSxRQUNoQixTQUFTLE1BQU07QUFBQSxTQUFDO0FBQUEsUUFDaEIsWUFBWSxNQUFNO0FBQUEsU0FBQztBQUFBLFFBQ25CLElBQUksTUFBTTtBQUFBLFNBQUM7QUFBQSxPQUNiLENBQUE7QUFBQSxLQUNGO0FBQUEsSUFDQSxXQUFjLEdBQUE7QUFBQSxLQUFDO0FBQUEsR0FDakI7QUFDRixFQUFBO0FBRU8sTUFBTSx1QkFBdUIsR0FBeUIsQ0FBQTtBQUFBLEVBQzNELGNBQWMsTUFBZ0IsRUFBQTtBQUM1QixJQUFB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
@@ -1 +1 @@
1
- export { f as DEFAULT_REQUEST_STUBS, M as ModuleCacheMap, g as ViteNodeRunner } from './types-3ae135eb.js';
1
+ export { f as DEFAULT_REQUEST_STUBS, M as ModuleCacheMap, g as ViteNodeRunner } from './types-4b326db0.js';
package/dist/client.js CHANGED
@@ -52,8 +52,9 @@ class ModuleCacheMap extends Map {
52
52
  class ViteNodeRunner {
53
53
  constructor(options) {
54
54
  this.options = options;
55
- this.root = options.root || process.cwd();
56
- this.moduleCache = options.moduleCache || new ModuleCacheMap();
55
+ this.root = options.root ?? process.cwd();
56
+ this.moduleCache = options.moduleCache ?? new ModuleCacheMap();
57
+ this.debug = options.debug ?? (typeof process !== "undefined" ? !!process.env.VITE_NODE_DEBUG : false);
57
58
  }
58
59
  async executeFile(file) {
59
60
  return await this.cachedRequest(`/@fs/${slash(resolve(file))}`, []);
@@ -71,23 +72,36 @@ class ViteNodeRunner {
71
72
  this.moduleCache.set(fsPath, { promise });
72
73
  return await promise;
73
74
  }
74
- async directRequest(id, fsPath, callstack) {
75
- callstack = [...callstack, normalizeModuleId(id)];
75
+ async directRequest(id, fsPath, _callstack) {
76
+ const callstack = [..._callstack, normalizeModuleId(id)];
76
77
  const request = async (dep) => {
77
78
  var _a, _b;
79
+ const getStack = () => {
80
+ return `stack:
81
+ ${[...callstack, dep].reverse().map((p) => `- ${p}`).join("\n")}`;
82
+ };
78
83
  if (this.options.resolveId && this.shouldResolveId(dep)) {
79
84
  const resolvedDep = await this.options.resolveId(dep, id);
80
85
  dep = ((_a = resolvedDep == null ? void 0 : resolvedDep.id) == null ? void 0 : _a.replace(this.root, "")) || dep;
81
86
  }
82
- if (callstack.includes(normalizeModuleId(dep))) {
83
- const depExports = (_b = this.moduleCache.get(dep)) == null ? void 0 : _b.exports;
84
- if (depExports)
85
- return depExports;
86
- throw new Error(`[vite-node] Circular dependency detected
87
- Stack:
88
- ${[...callstack, dep].reverse().map((p) => `- ${p}`).join("\n")}`);
87
+ let debugTimer;
88
+ if (this.debug)
89
+ debugTimer = setTimeout(() => this.debugLog(() => `module ${dep} takes over 2s to load.
90
+ ${getStack()}`), 2e3);
91
+ try {
92
+ if (callstack.includes(normalizeModuleId(dep))) {
93
+ this.debugLog(() => `circular dependency, ${getStack()}`);
94
+ const depExports = (_b = this.moduleCache.get(dep)) == null ? void 0 : _b.exports;
95
+ if (depExports)
96
+ return depExports;
97
+ throw new Error(`[vite-node] Failed to resolve circular dependency, ${getStack()}`);
98
+ }
99
+ const mod = await this.cachedRequest(dep, callstack);
100
+ return mod;
101
+ } finally {
102
+ if (debugTimer)
103
+ clearTimeout(debugTimer);
89
104
  }
90
- return this.cachedRequest(dep, callstack);
91
105
  };
92
106
  const requestStubs = this.options.requestStubs || DEFAULT_REQUEST_STUBS;
93
107
  if (id in requestStubs)
@@ -163,6 +177,10 @@ ${[...callstack, dep].reverse().map((p) => `- ${p}`).join("\n")}`);
163
177
  hasNestedDefault(target) {
164
178
  return "__esModule" in target && target.__esModule && "default" in target.default;
165
179
  }
180
+ debugLog(msg) {
181
+ if (this.debug)
182
+ console.log(`[vite-node] ${msg()}`);
183
+ }
166
184
  }
167
185
  function proxyMethod(name, tryDefault) {
168
186
  return function(target, key, ...args) {
@@ -192,4 +210,4 @@ function exportAll(exports, sourceModule) {
192
210
  }
193
211
 
194
212
  export { DEFAULT_REQUEST_STUBS, ModuleCacheMap, ViteNodeRunner };
195
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpZW50LmpzIiwic291cmNlcyI6WyIuLi9zcmMvY2xpZW50LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNyZWF0ZVJlcXVpcmUgfSBmcm9tICdtb2R1bGUnXG5pbXBvcnQgeyBmaWxlVVJMVG9QYXRoLCBwYXRoVG9GaWxlVVJMIH0gZnJvbSAndXJsJ1xuaW1wb3J0IHZtIGZyb20gJ3ZtJ1xuaW1wb3J0IHsgZGlybmFtZSwgZXh0bmFtZSwgaXNBYnNvbHV0ZSwgcmVzb2x2ZSB9IGZyb20gJ3BhdGhlJ1xuaW1wb3J0IHsgaXNOb2RlQnVpbHRpbiB9IGZyb20gJ21sbHknXG5pbXBvcnQgeyBpc1ByaW1pdGl2ZSwgbm9ybWFsaXplTW9kdWxlSWQsIG5vcm1hbGl6ZVJlcXVlc3RJZCwgc2xhc2gsIHRvRmlsZVBhdGggfSBmcm9tICcuL3V0aWxzJ1xuaW1wb3J0IHR5cGUgeyBNb2R1bGVDYWNoZSwgVml0ZU5vZGVSdW5uZXJPcHRpb25zIH0gZnJvbSAnLi90eXBlcydcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfUkVRVUVTVF9TVFVCUyA9IHtcbiAgJy9Adml0ZS9jbGllbnQnOiB7XG4gICAgaW5qZWN0UXVlcnk6IChpZDogc3RyaW5nKSA9PiBpZCxcbiAgICBjcmVhdGVIb3RDb250ZXh0KCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgYWNjZXB0OiAoKSA9PiB7fSxcbiAgICAgICAgcHJ1bmU6ICgpID0+IHt9LFxuICAgICAgICBkaXNwb3NlOiAoKSA9PiB7fSxcbiAgICAgICAgZGVjbGluZTogKCkgPT4ge30sXG4gICAgICAgIGludmFsaWRhdGU6ICgpID0+IHt9LFxuICAgICAgICBvbjogKCkgPT4ge30sXG4gICAgICB9XG4gICAgfSxcbiAgICB1cGRhdGVTdHlsZSgpIHt9LFxuICB9LFxufVxuXG5leHBvcnQgY2xhc3MgTW9kdWxlQ2FjaGVNYXAgZXh0ZW5kcyBNYXA8c3RyaW5nLCBNb2R1bGVDYWNoZT4ge1xuICBub3JtYWxpemVQYXRoKGZzUGF0aDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIG5vcm1hbGl6ZU1vZHVsZUlkKGZzUGF0aClcbiAgfVxuXG4gIHNldChmc1BhdGg6IHN0cmluZywgbW9kOiBQYXJ0aWFsPE1vZHVsZUNhY2hlPikge1xuICAgIGZzUGF0aCA9IHRoaXMubm9ybWFsaXplUGF0aChmc1BhdGgpXG4gICAgaWYgKCFzdXBlci5oYXMoZnNQYXRoKSlcbiAgICAgIHN1cGVyLnNldChmc1BhdGgsIG1vZClcbiAgICBlbHNlXG4gICAgICBPYmplY3QuYXNzaWduKHN1cGVyLmdldChmc1BhdGgpLCBtb2QpXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIGdldChmc1BhdGg6IHN0cmluZykge1xuICAgIGZzUGF0aCA9IHRoaXMubm9ybWFsaXplUGF0aChmc1BhdGgpXG4gICAgcmV0dXJuIHN1cGVyLmdldChmc1BhdGgpXG4gIH1cblxuICBkZWxldGUoZnNQYXRoOiBzdHJpbmcpIHtcbiAgICBmc1BhdGggPSB0aGlzLm5vcm1hbGl6ZVBhdGgoZnNQYXRoKVxuICAgIHJldHVybiBzdXBlci5kZWxldGUoZnNQYXRoKVxuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBWaXRlTm9kZVJ1bm5lciB7XG4gIHJvb3Q6IHN0cmluZ1xuXG4gIC8qKlxuICAgKiBIb2xkcyB0aGUgY2FjaGUgb2YgbW9kdWxlc1xuICAgKiBLZXlzIG9mIHRoZSBtYXAgYXJlIGZpbGVwYXRocywgb3IgcGxhaW4gcGFja2FnZSBuYW1lc1xuICAgKi9cbiAgbW9kdWxlQ2FjaGU6IE1vZHVsZUNhY2hlTWFwXG5cbiAgY29uc3RydWN0b3IocHVibGljIG9wdGlvbnM6IFZpdGVOb2RlUnVubmVyT3B0aW9ucykge1xuICAgIHRoaXMucm9vdCA9IG9wdGlvbnMucm9vdCB8fCBwcm9jZXNzLmN3ZCgpXG4gICAgdGhpcy5tb2R1bGVDYWNoZSA9IG9wdGlvbnMubW9kdWxlQ2FjaGUgfHwgbmV3IE1vZHVsZUNhY2hlTWFwKClcbiAgfVxuXG4gIGFzeW5jIGV4ZWN1dGVGaWxlKGZpbGU6IHN0cmluZykge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmNhY2hlZFJlcXVlc3QoYC9AZnMvJHtzbGFzaChyZXNvbHZlKGZpbGUpKX1gLCBbXSlcbiAgfVxuXG4gIGFzeW5jIGV4ZWN1dGVJZChpZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuY2FjaGVkUmVxdWVzdChpZCwgW10pXG4gIH1cblxuICAvKiogQGludGVybmFsICovXG4gIGFzeW5jIGNhY2hlZFJlcXVlc3QocmF3SWQ6IHN0cmluZywgY2FsbHN0YWNrOiBzdHJpbmdbXSkge1xuICAgIGNvbnN0IGlkID0gbm9ybWFsaXplUmVxdWVzdElkKHJhd0lkLCB0aGlzLm9wdGlvbnMuYmFzZSlcbiAgICBjb25zdCBmc1BhdGggPSB0b0ZpbGVQYXRoKGlkLCB0aGlzLnJvb3QpXG5cbiAgICBpZiAodGhpcy5tb2R1bGVDYWNoZS5nZXQoZnNQYXRoKT8ucHJvbWlzZSlcbiAgICAgIHJldHVybiB0aGlzLm1vZHVsZUNhY2hlLmdldChmc1BhdGgpPy5wcm9taXNlXG5cbiAgICBjb25zdCBwcm9taXNlID0gdGhpcy5kaXJlY3RSZXF1ZXN0KGlkLCBmc1BhdGgsIGNhbGxzdGFjaylcbiAgICB0aGlzLm1vZHVsZUNhY2hlLnNldChmc1BhdGgsIHsgcHJvbWlzZSB9KVxuXG4gICAgcmV0dXJuIGF3YWl0IHByb21pc2VcbiAgfVxuXG4gIC8qKiBAaW50ZXJuYWwgKi9cbiAgYXN5bmMgZGlyZWN0UmVxdWVzdChpZDogc3RyaW5nLCBmc1BhdGg6IHN0cmluZywgY2FsbHN0YWNrOiBzdHJpbmdbXSkge1xuICAgIGNhbGxzdGFjayA9IFsuLi5jYWxsc3RhY2ssIG5vcm1hbGl6ZU1vZHVsZUlkKGlkKV1cbiAgICBjb25zdCByZXF1ZXN0ID0gYXN5bmMoZGVwOiBzdHJpbmcpID0+IHtcbiAgICAgIC8vIHByb2JhYmx5IG1lYW5zIGl0IHdhcyBwYXNzZWQgYXMgdmFyaWFibGVcbiAgICAgIC8vIGFuZCB3YXNuJ3QgdHJhbnNmb3JtZWQgYnkgVml0ZVxuICAgICAgaWYgKHRoaXMub3B0aW9ucy5yZXNvbHZlSWQgJiYgdGhpcy5zaG91bGRSZXNvbHZlSWQoZGVwKSkge1xuICAgICAgICBjb25zdCByZXNvbHZlZERlcCA9IGF3YWl0IHRoaXMub3B0aW9ucy5yZXNvbHZlSWQoZGVwLCBpZClcbiAgICAgICAgZGVwID0gcmVzb2x2ZWREZXA/LmlkPy5yZXBsYWNlKHRoaXMucm9vdCwgJycpIHx8IGRlcFxuICAgICAgfVxuXG4gICAgICBpZiAoY2FsbHN0YWNrLmluY2x1ZGVzKG5vcm1hbGl6ZU1vZHVsZUlkKGRlcCkpKSB7XG4gICAgICAgIGNvbnN0IGRlcEV4cG9ydHMgPSB0aGlzLm1vZHVsZUNhY2hlLmdldChkZXApPy5leHBvcnRzXG4gICAgICAgIGlmIChkZXBFeHBvcnRzKVxuICAgICAgICAgIHJldHVybiBkZXBFeHBvcnRzXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgW3ZpdGUtbm9kZV0gQ2lyY3VsYXIgZGVwZW5kZW5jeSBkZXRlY3RlZFxcblN0YWNrOlxcbiR7Wy4uLmNhbGxzdGFjaywgZGVwXS5yZXZlcnNlKCkubWFwKHAgPT4gYC0gJHtwfWApLmpvaW4oJ1xcbicpfWApXG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5jYWNoZWRSZXF1ZXN0KGRlcCwgY2FsbHN0YWNrKVxuICAgIH1cblxuICAgIGNvbnN0IHJlcXVlc3RTdHVicyA9IHRoaXMub3B0aW9ucy5yZXF1ZXN0U3R1YnMgfHwgREVGQVVMVF9SRVFVRVNUX1NUVUJTXG4gICAgaWYgKGlkIGluIHJlcXVlc3RTdHVicylcbiAgICAgIHJldHVybiByZXF1ZXN0U3R1YnNbaWRdXG5cbiAgICBjb25zdCB7IGNvZGU6IHRyYW5zZm9ybWVkLCBleHRlcm5hbGl6ZSB9ID0gYXdhaXQgdGhpcy5vcHRpb25zLmZldGNoTW9kdWxlKGlkKVxuICAgIGlmIChleHRlcm5hbGl6ZSkge1xuICAgICAgY29uc3QgbW9kID0gYXdhaXQgdGhpcy5pbnRlcm9wZWRJbXBvcnQoZXh0ZXJuYWxpemUpXG4gICAgICB0aGlzLm1vZHVsZUNhY2hlLnNldChmc1BhdGgsIHsgZXhwb3J0czogbW9kIH0pXG4gICAgICByZXR1cm4gbW9kXG4gICAgfVxuXG4gICAgaWYgKHRyYW5zZm9ybWVkID09IG51bGwpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFt2aXRlLW5vZGVdIEZhaWxlZCB0byBsb2FkICR7aWR9YClcblxuICAgIC8vIGRpc2FtYmlndWF0ZSB0aGUgYDxVTklUPjovYCBvbiB3aW5kb3dzOiBzZWUgbm9kZWpzL25vZGUjMzE3MTBcbiAgICBjb25zdCB1cmwgPSBwYXRoVG9GaWxlVVJMKGZzUGF0aCkuaHJlZlxuICAgIGNvbnN0IGV4cG9ydHM6IGFueSA9IE9iamVjdC5jcmVhdGUobnVsbClcbiAgICBleHBvcnRzW1N5bWJvbC50b1N0cmluZ1RhZ10gPSAnTW9kdWxlJ1xuXG4gICAgdGhpcy5tb2R1bGVDYWNoZS5zZXQoaWQsIHsgY29kZTogdHJhbnNmb3JtZWQsIGV4cG9ydHMgfSlcblxuICAgIGNvbnN0IF9fZmlsZW5hbWUgPSBmaWxlVVJMVG9QYXRoKHVybClcbiAgICBjb25zdCBtb2R1bGVQcm94eSA9IHtcbiAgICAgIHNldCBleHBvcnRzKHZhbHVlKSB7XG4gICAgICAgIGV4cG9ydEFsbChleHBvcnRzLCB2YWx1ZSlcbiAgICAgICAgZXhwb3J0cy5kZWZhdWx0ID0gdmFsdWVcbiAgICAgIH0sXG4gICAgICBnZXQgZXhwb3J0cygpIHtcbiAgICAgICAgcmV0dXJuIGV4cG9ydHMuZGVmYXVsdFxuICAgICAgfSxcbiAgICB9XG5cbiAgICAvLyBCZSBjYXJlZnVsIHdoZW4gY2hhbmdpbmcgdGhpc1xuICAgIC8vIGNoYW5naW5nIGNvbnRleHQgd2lsbCBjaGFuZ2UgYW1vdW50IG9mIGNvZGUgYWRkZWQgb24gbGluZSA6MTE0ICh2bS5ydW5JblRoaXNDb250ZXh0KVxuICAgIC8vIHRoaXMgbWVzc2VzIHVwIHNvdXJjZW1hcHMgZm9yIGNvdmVyYWdlXG4gICAgLy8gYWRqdXN0IGBvZmZzZXRgIHZhcmlhYmxlIGluIHBhY2thZ2VzL3ZpdGVzdC9zcmMvaW50ZWdyYXRpb25zL2NvdmVyYWdlLnRzI0wxMDAgaWYgeW91IGRvIGNoYW5nZSB0aGlzXG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMucHJlcGFyZUNvbnRleHQoe1xuICAgICAgLy8gZXNtIHRyYW5zZm9ybWVkIGJ5IFZpdGVcbiAgICAgIF9fdml0ZV9zc3JfaW1wb3J0X186IHJlcXVlc3QsXG4gICAgICBfX3ZpdGVfc3NyX2R5bmFtaWNfaW1wb3J0X186IHJlcXVlc3QsXG4gICAgICBfX3ZpdGVfc3NyX2V4cG9ydHNfXzogZXhwb3J0cyxcbiAgICAgIF9fdml0ZV9zc3JfZXhwb3J0QWxsX186IChvYmo6IGFueSkgPT4gZXhwb3J0QWxsKGV4cG9ydHMsIG9iaiksXG4gICAgICBfX3ZpdGVfc3NyX2ltcG9ydF9tZXRhX186IHsgdXJsIH0sXG5cbiAgICAgIC8vIGNqcyBjb21wYWN0XG4gICAgICByZXF1aXJlOiBjcmVhdGVSZXF1aXJlKHVybCksXG4gICAgICBleHBvcnRzLFxuICAgICAgbW9kdWxlOiBtb2R1bGVQcm94eSxcbiAgICAgIF9fZmlsZW5hbWUsXG4gICAgICBfX2Rpcm5hbWU6IGRpcm5hbWUoX19maWxlbmFtZSksXG4gICAgfSlcblxuICAgIC8vIGFkZCAndXNlIHN0cmljdCcgc2luY2UgRVNNIGVuYWJsZXMgaXQgYnkgZGVmYXVsdFxuICAgIGNvbnN0IGZuID0gdm0ucnVuSW5UaGlzQ29udGV4dChgJ3VzZSBzdHJpY3QnO2FzeW5jICgke09iamVjdC5rZXlzKGNvbnRleHQpLmpvaW4oJywnKX0pPT57eyR7dHJhbnNmb3JtZWR9XFxufX1gLCB7XG4gICAgICBmaWxlbmFtZTogZnNQYXRoLFxuICAgICAgbGluZU9mZnNldDogMCxcbiAgICB9KVxuXG4gICAgYXdhaXQgZm4oLi4uT2JqZWN0LnZhbHVlcyhjb250ZXh0KSlcblxuICAgIHJldHVybiBleHBvcnRzXG4gIH1cblxuICBwcmVwYXJlQ29udGV4dChjb250ZXh0OiBSZWNvcmQ8c3RyaW5nLCBhbnk+KSB7XG4gICAgcmV0dXJuIGNvbnRleHRcbiAgfVxuXG4gIHNob3VsZFJlc29sdmVJZChkZXA6IHN0cmluZykge1xuICAgIGlmIChpc05vZGVCdWlsdGluKGRlcCkgfHwgZGVwIGluICh0aGlzLm9wdGlvbnMucmVxdWVzdFN0dWJzIHx8IERFRkFVTFRfUkVRVUVTVF9TVFVCUykpXG4gICAgICByZXR1cm4gZmFsc2VcblxuICAgIHJldHVybiAhaXNBYnNvbHV0ZShkZXApIHx8ICFleHRuYW1lKGRlcClcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWZpbmUgaWYgYSBtb2R1bGUgc2hvdWxkIGJlIGludGVyb3AtZWRcbiAgICogVGhpcyBmdW5jdGlvbiBtb3N0bHkgZm9yIHRoZSBhYmlsaXR5IHRvIG92ZXJyaWRlIGJ5IHN1YmNsYXNzXG4gICAqL1xuICBzaG91bGRJbnRlcm9wKHBhdGg6IHN0cmluZywgbW9kOiBhbnkpIHtcbiAgICBpZiAodGhpcy5vcHRpb25zLmludGVyb3BEZWZhdWx0ID09PSBmYWxzZSlcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIC8vIG5ldmVyIGludGVyb3AgRVNNIG1vZHVsZXNcbiAgICAvLyBUT0RPOiBzaG91bGQgYWxzbyBza2lwIGZvciBgLmpzYCB3aXRoIGB0eXBlPVwibW9kdWxlXCJgXG4gICAgcmV0dXJuICFwYXRoLmVuZHNXaXRoKCcubWpzJykgJiYgJ2RlZmF1bHQnIGluIG1vZFxuICB9XG5cbiAgLyoqXG4gICAqIEltcG9ydCBhIG1vZHVsZSBhbmQgaW50ZXJvcCBpdFxuICAgKi9cbiAgYXN5bmMgaW50ZXJvcGVkSW1wb3J0KHBhdGg6IHN0cmluZykge1xuICAgIGNvbnN0IG1vZCA9IGF3YWl0IGltcG9ydChwYXRoKVxuXG4gICAgaWYgKHRoaXMuc2hvdWxkSW50ZXJvcChwYXRoLCBtb2QpKSB7XG4gICAgICBjb25zdCB0cnlEZWZhdWx0ID0gdGhpcy5oYXNOZXN0ZWREZWZhdWx0KG1vZClcbiAgICAgIHJldHVybiBuZXcgUHJveHkobW9kLCB7XG4gICAgICAgIGdldDogcHJveHlNZXRob2QoJ2dldCcsIHRyeURlZmF1bHQpLFxuICAgICAgICBzZXQ6IHByb3h5TWV0aG9kKCdzZXQnLCB0cnlEZWZhdWx0KSxcbiAgICAgICAgaGFzOiBwcm94eU1ldGhvZCgnaGFzJywgdHJ5RGVmYXVsdCksXG4gICAgICAgIGRlbGV0ZVByb3BlcnR5OiBwcm94eU1ldGhvZCgnZGVsZXRlUHJvcGVydHknLCB0cnlEZWZhdWx0KSxcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgcmV0dXJuIG1vZFxuICB9XG5cbiAgaGFzTmVzdGVkRGVmYXVsdCh0YXJnZXQ6IGFueSkge1xuICAgIHJldHVybiAnX19lc01vZHVsZScgaW4gdGFyZ2V0ICYmIHRhcmdldC5fX2VzTW9kdWxlICYmICdkZWZhdWx0JyBpbiB0YXJnZXQuZGVmYXVsdFxuICB9XG59XG5cbmZ1bmN0aW9uIHByb3h5TWV0aG9kKG5hbWU6ICdnZXQnIHwgJ3NldCcgfCAnaGFzJyB8ICdkZWxldGVQcm9wZXJ0eScsIHRyeURlZmF1bHQ6IGJvb2xlYW4pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKHRhcmdldDogYW55LCBrZXk6IHN0cmluZyB8IHN5bWJvbCwgLi4uYXJnczogW2FueT8sIGFueT9dKSB7XG4gICAgY29uc3QgcmVzdWx0ID0gUmVmbGVjdFtuYW1lXSh0YXJnZXQsIGtleSwgLi4uYXJncylcbiAgICBpZiAoaXNQcmltaXRpdmUodGFyZ2V0LmRlZmF1bHQpKVxuICAgICAgcmV0dXJuIHJlc3VsdFxuICAgIGlmICgodHJ5RGVmYXVsdCAmJiBrZXkgPT09ICdkZWZhdWx0JykgfHwgdHlwZW9mIHJlc3VsdCA9PT0gJ3VuZGVmaW5lZCcpXG4gICAgICByZXR1cm4gUmVmbGVjdFtuYW1lXSh0YXJnZXQuZGVmYXVsdCwga2V5LCAuLi5hcmdzKVxuICAgIHJldHVybiByZXN1bHRcbiAgfVxufVxuXG5mdW5jdGlvbiBleHBvcnRBbGwoZXhwb3J0czogYW55LCBzb3VyY2VNb2R1bGU6IGFueSkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcmVzdHJpY3RlZC1zeW50YXhcbiAgZm9yIChjb25zdCBrZXkgaW4gc291cmNlTW9kdWxlKSB7XG4gICAgaWYgKGtleSAhPT0gJ2RlZmF1bHQnKSB7XG4gICAgICB0cnkge1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywga2V5LCB7XG4gICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgICAgZ2V0KCkgeyByZXR1cm4gc291cmNlTW9kdWxlW2tleV0gfSxcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIGNhdGNoIChfZXJyKSB7IH1cbiAgICB9XG4gIH1cbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBTVksTUFBQyxxQkFBcUIsR0FBRztBQUNyQyxFQUFFLGVBQWUsRUFBRTtBQUNuQixJQUFJLFdBQVcsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFO0FBQzNCLElBQUksZ0JBQWdCLEdBQUc7QUFDdkIsTUFBTSxPQUFPO0FBQ2IsUUFBUSxNQUFNLEVBQUUsTUFBTTtBQUN0QixTQUFTO0FBQ1QsUUFBUSxLQUFLLEVBQUUsTUFBTTtBQUNyQixTQUFTO0FBQ1QsUUFBUSxPQUFPLEVBQUUsTUFBTTtBQUN2QixTQUFTO0FBQ1QsUUFBUSxPQUFPLEVBQUUsTUFBTTtBQUN2QixTQUFTO0FBQ1QsUUFBUSxVQUFVLEVBQUUsTUFBTTtBQUMxQixTQUFTO0FBQ1QsUUFBUSxFQUFFLEVBQUUsTUFBTTtBQUNsQixTQUFTO0FBQ1QsT0FBTyxDQUFDO0FBQ1IsS0FBSztBQUNMLElBQUksV0FBVyxHQUFHO0FBQ2xCLEtBQUs7QUFDTCxHQUFHO0FBQ0gsRUFBRTtBQUNLLE1BQU0sY0FBYyxTQUFTLEdBQUcsQ0FBQztBQUN4QyxFQUFFLGFBQWEsQ0FBQyxNQUFNLEVBQUU7QUFDeEIsSUFBSSxPQUFPLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3JDLEdBQUc7QUFDSCxFQUFFLEdBQUcsQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFO0FBQ25CLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDeEMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUM7QUFDMUIsTUFBTSxLQUFLLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQztBQUM3QjtBQUNBLE1BQU0sTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQzVDLElBQUksT0FBTyxJQUFJLENBQUM7QUFDaEIsR0FBRztBQUNILEVBQUUsR0FBRyxDQUFDLE1BQU0sRUFBRTtBQUNkLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDeEMsSUFBSSxPQUFPLEtBQUssQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDN0IsR0FBRztBQUNILEVBQUUsTUFBTSxDQUFDLE1BQU0sRUFBRTtBQUNqQixJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3hDLElBQUksT0FBTyxLQUFLLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ2hDLEdBQUc7QUFDSCxDQUFDO0FBQ00sTUFBTSxjQUFjLENBQUM7QUFDNUIsRUFBRSxXQUFXLENBQUMsT0FBTyxFQUFFO0FBQ3ZCLElBQUksSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7QUFDM0IsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQyxJQUFJLElBQUksT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQzlDLElBQUksSUFBSSxDQUFDLFdBQVcsR0FBRyxPQUFPLENBQUMsV0FBVyxJQUFJLElBQUksY0FBYyxFQUFFLENBQUM7QUFDbkUsR0FBRztBQUNILEVBQUUsTUFBTSxXQUFXLENBQUMsSUFBSSxFQUFFO0FBQzFCLElBQUksT0FBTyxNQUFNLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUN4RSxHQUFHO0FBQ0gsRUFBRSxNQUFNLFNBQVMsQ0FBQyxFQUFFLEVBQUU7QUFDdEIsSUFBSSxPQUFPLE1BQU0sSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDNUMsR0FBRztBQUNILEVBQUUsTUFBTSxhQUFhLENBQUMsS0FBSyxFQUFFLFNBQVMsRUFBRTtBQUN4QyxJQUFJLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUNmLElBQUksTUFBTSxFQUFFLEdBQUcsa0JBQWtCLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDNUQsSUFBSSxNQUFNLE1BQU0sR0FBRyxVQUFVLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUM3QyxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssSUFBSSxHQUFHLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxPQUFPO0FBQ3pFLE1BQU0sT0FBTyxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxJQUFJLEdBQUcsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQztBQUMvRSxJQUFJLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsRUFBRSxFQUFFLE1BQU0sRUFBRSxTQUFTLENBQUMsQ0FBQztBQUM5RCxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7QUFDOUMsSUFBSSxPQUFPLE1BQU0sT0FBTyxDQUFDO0FBQ3pCLEdBQUc7QUFDSCxFQUFFLE1BQU0sYUFBYSxDQUFDLEVBQUUsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFO0FBQzdDLElBQUksU0FBUyxHQUFHLENBQUMsR0FBRyxTQUFTLEVBQUUsaUJBQWlCLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUN0RCxJQUFJLE1BQU0sT0FBTyxHQUFHLE9BQU8sR0FBRyxLQUFLO0FBQ25DLE1BQU0sSUFBSSxFQUFFLEVBQUUsRUFBRSxDQUFDO0FBQ2pCLE1BQU0sSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxFQUFFO0FBQy9ELFFBQVEsTUFBTSxXQUFXLEdBQUcsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDbEUsUUFBUSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxXQUFXLElBQUksSUFBSSxHQUFHLEtBQUssQ0FBQyxHQUFHLFdBQVcsQ0FBQyxFQUFFLEtBQUssSUFBSSxHQUFHLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsS0FBSyxHQUFHLENBQUM7QUFDekgsT0FBTztBQUNQLE1BQU0sSUFBSSxTQUFTLENBQUMsUUFBUSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUU7QUFDdEQsUUFBUSxNQUFNLFVBQVUsR0FBRyxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsS0FBSyxJQUFJLEdBQUcsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQztBQUMxRixRQUFRLElBQUksVUFBVTtBQUN0QixVQUFVLE9BQU8sVUFBVSxDQUFDO0FBQzVCLFFBQVEsTUFBTSxJQUFJLEtBQUssQ0FBQyxDQUFDO0FBQ3pCO0FBQ0EsRUFBRSxDQUFDLEdBQUcsU0FBUyxFQUFFLEdBQUcsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ25FLE9BQU87QUFDUCxNQUFNLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLEVBQUUsU0FBUyxDQUFDLENBQUM7QUFDaEQsS0FBSyxDQUFDO0FBQ04sSUFBSSxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksSUFBSSxxQkFBcUIsQ0FBQztBQUM1RSxJQUFJLElBQUksRUFBRSxJQUFJLFlBQVk7QUFDMUIsTUFBTSxPQUFPLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUM5QixJQUFJLE1BQU0sRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxHQUFHLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDbEYsSUFBSSxJQUFJLFdBQVcsRUFBRTtBQUNyQixNQUFNLE1BQU0sR0FBRyxHQUFHLE1BQU0sSUFBSSxDQUFDLGVBQWUsQ0FBQyxXQUFXLENBQUMsQ0FBQztBQUMxRCxNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0FBQ3JELE1BQU0sT0FBTyxHQUFHLENBQUM7QUFDakIsS0FBSztBQUNMLElBQUksSUFBSSxXQUFXLElBQUksSUFBSTtBQUMzQixNQUFNLE1BQU0sSUFBSSxLQUFLLENBQUMsQ0FBQywyQkFBMkIsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUQsSUFBSSxNQUFNLEdBQUcsR0FBRyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDO0FBQzNDLElBQUksTUFBTSxPQUFPLG1CQUFtQixNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3hELElBQUksT0FBTyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0MsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7QUFDN0QsSUFBSSxNQUFNLFVBQVUsR0FBRyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDMUMsSUFBSSxNQUFNLFdBQVcsR0FBRztBQUN4QixNQUFNLElBQUksT0FBTyxDQUFDLEtBQUssRUFBRTtBQUN6QixRQUFRLFNBQVMsQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDbEMsUUFBUSxPQUFPLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztBQUNoQyxPQUFPO0FBQ1AsTUFBTSxJQUFJLE9BQU8sR0FBRztBQUNwQixRQUFRLE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQztBQUMvQixPQUFPO0FBQ1AsS0FBSyxDQUFDO0FBQ04sSUFBSSxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDO0FBQ3hDLE1BQU0sbUJBQW1CLEVBQUUsT0FBTztBQUNsQyxNQUFNLDJCQUEyQixFQUFFLE9BQU87QUFDMUMsTUFBTSxvQkFBb0IsRUFBRSxPQUFPO0FBQ25DLE1BQU0sc0JBQXNCLEVBQUUsQ0FBQyxHQUFHLEtBQUssU0FBUyxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUM7QUFDOUQsTUFBTSx3QkFBd0IsRUFBRSxFQUFFLEdBQUcsRUFBRTtBQUN2QyxNQUFNLE9BQU8sRUFBRSxhQUFhLENBQUMsR0FBRyxDQUFDO0FBQ2pDLE1BQU0sT0FBTztBQUNiLE1BQU0sTUFBTSxFQUFFLFdBQVc7QUFDekIsTUFBTSxVQUFVO0FBQ2hCLE1BQU0sU0FBUyxFQUFFLE9BQU8sQ0FBQyxVQUFVLENBQUM7QUFDcEMsS0FBSyxDQUFDLENBQUM7QUFDUCxJQUFJLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLG9CQUFvQixFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxXQUFXLENBQUM7QUFDNUcsRUFBRSxDQUFDLEVBQUU7QUFDTCxNQUFNLFFBQVEsRUFBRSxNQUFNO0FBQ3RCLE1BQU0sVUFBVSxFQUFFLENBQUM7QUFDbkIsS0FBSyxDQUFDLENBQUM7QUFDUCxJQUFJLE1BQU0sRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0FBQ3hDLElBQUksT0FBTyxPQUFPLENBQUM7QUFDbkIsR0FBRztBQUNILEVBQUUsY0FBYyxDQUFDLE9BQU8sRUFBRTtBQUMxQixJQUFJLE9BQU8sT0FBTyxDQUFDO0FBQ25CLEdBQUc7QUFDSCxFQUFFLGVBQWUsQ0FBQyxHQUFHLEVBQUU7QUFDdkIsSUFBSSxJQUFJLGFBQWEsQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLEtBQUssSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLElBQUkscUJBQXFCLENBQUM7QUFDekYsTUFBTSxPQUFPLEtBQUssQ0FBQztBQUNuQixJQUFJLE9BQU8sQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDN0MsR0FBRztBQUNILEVBQUUsYUFBYSxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUU7QUFDM0IsSUFBSSxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsY0FBYyxLQUFLLEtBQUs7QUFDN0MsTUFBTSxPQUFPLEtBQUssQ0FBQztBQUNuQixJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLFNBQVMsSUFBSSxHQUFHLENBQUM7QUFDdEQsR0FBRztBQUNILEVBQUUsTUFBTSxlQUFlLENBQUMsSUFBSSxFQUFFO0FBQzlCLElBQUksTUFBTSxHQUFHLEdBQUcsTUFBTSxPQUFPLElBQUksQ0FBQyxDQUFDO0FBQ25DLElBQUksSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRTtBQUN2QyxNQUFNLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNwRCxNQUFNLE9BQU8sSUFBSSxLQUFLLENBQUMsR0FBRyxFQUFFO0FBQzVCLFFBQVEsR0FBRyxFQUFFLFdBQVcsQ0FBQyxLQUFLLEVBQUUsVUFBVSxDQUFDO0FBQzNDLFFBQVEsR0FBRyxFQUFFLFdBQVcsQ0FBQyxLQUFLLEVBQUUsVUFBVSxDQUFDO0FBQzNDLFFBQVEsR0FBRyxFQUFFLFdBQVcsQ0FBQyxLQUFLLEVBQUUsVUFBVSxDQUFDO0FBQzNDLFFBQVEsY0FBYyxFQUFFLFdBQVcsQ0FBQyxnQkFBZ0IsRUFBRSxVQUFVLENBQUM7QUFDakUsT0FBTyxDQUFDLENBQUM7QUFDVCxLQUFLO0FBQ0wsSUFBSSxPQUFPLEdBQUcsQ0FBQztBQUNmLEdBQUc7QUFDSCxFQUFFLGdCQUFnQixDQUFDLE1BQU0sRUFBRTtBQUMzQixJQUFJLE9BQU8sWUFBWSxJQUFJLE1BQU0sSUFBSSxNQUFNLENBQUMsVUFBVSxJQUFJLFNBQVMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDO0FBQ3RGLEdBQUc7QUFDSCxDQUFDO0FBQ0QsU0FBUyxXQUFXLENBQUMsSUFBSSxFQUFFLFVBQVUsRUFBRTtBQUN2QyxFQUFFLE9BQU8sU0FBUyxNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSSxFQUFFO0FBQ3hDLElBQUksTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQztBQUN2RCxJQUFJLElBQUksV0FBVyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUM7QUFDbkMsTUFBTSxPQUFPLE1BQU0sQ0FBQztBQUNwQixJQUFJLElBQUksVUFBVSxJQUFJLEdBQUcsS0FBSyxTQUFTLElBQUksT0FBTyxNQUFNLEtBQUssV0FBVztBQUN4RSxNQUFNLE9BQU8sT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUM7QUFDekQsSUFBSSxPQUFPLE1BQU0sQ0FBQztBQUNsQixHQUFHLENBQUM7QUFDSixDQUFDO0FBQ0QsU0FBUyxTQUFTLENBQUMsT0FBTyxFQUFFLFlBQVksRUFBRTtBQUMxQyxFQUFFLEtBQUssTUFBTSxHQUFHLElBQUksWUFBWSxFQUFFO0FBQ2xDLElBQUksSUFBSSxHQUFHLEtBQUssU0FBUyxFQUFFO0FBQzNCLE1BQU0sSUFBSTtBQUNWLFFBQVEsTUFBTSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsR0FBRyxFQUFFO0FBQzVDLFVBQVUsVUFBVSxFQUFFLElBQUk7QUFDMUIsVUFBVSxZQUFZLEVBQUUsSUFBSTtBQUM1QixVQUFVLEdBQUcsR0FBRztBQUNoQixZQUFZLE9BQU8sWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3JDLFdBQVc7QUFDWCxTQUFTLENBQUMsQ0FBQztBQUNYLE9BQU8sQ0FBQyxPQUFPLElBQUksRUFBRTtBQUNyQixPQUFPO0FBQ1AsS0FBSztBQUNMLEdBQUc7QUFDSDs7OzsifQ==
213
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpZW50LmpzIiwic291cmNlcyI6WyIuLi9zcmMvY2xpZW50LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNyZWF0ZVJlcXVpcmUgfSBmcm9tICdtb2R1bGUnXG5pbXBvcnQgeyBmaWxlVVJMVG9QYXRoLCBwYXRoVG9GaWxlVVJMIH0gZnJvbSAndXJsJ1xuaW1wb3J0IHZtIGZyb20gJ3ZtJ1xuaW1wb3J0IHsgZGlybmFtZSwgZXh0bmFtZSwgaXNBYnNvbHV0ZSwgcmVzb2x2ZSB9IGZyb20gJ3BhdGhlJ1xuaW1wb3J0IHsgaXNOb2RlQnVpbHRpbiB9IGZyb20gJ21sbHknXG5pbXBvcnQgeyBpc1ByaW1pdGl2ZSwgbm9ybWFsaXplTW9kdWxlSWQsIG5vcm1hbGl6ZVJlcXVlc3RJZCwgc2xhc2gsIHRvRmlsZVBhdGggfSBmcm9tICcuL3V0aWxzJ1xuaW1wb3J0IHR5cGUgeyBNb2R1bGVDYWNoZSwgVml0ZU5vZGVSdW5uZXJPcHRpb25zIH0gZnJvbSAnLi90eXBlcydcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfUkVRVUVTVF9TVFVCUyA9IHtcbiAgJy9Adml0ZS9jbGllbnQnOiB7XG4gICAgaW5qZWN0UXVlcnk6IChpZDogc3RyaW5nKSA9PiBpZCxcbiAgICBjcmVhdGVIb3RDb250ZXh0KCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgYWNjZXB0OiAoKSA9PiB7fSxcbiAgICAgICAgcHJ1bmU6ICgpID0+IHt9LFxuICAgICAgICBkaXNwb3NlOiAoKSA9PiB7fSxcbiAgICAgICAgZGVjbGluZTogKCkgPT4ge30sXG4gICAgICAgIGludmFsaWRhdGU6ICgpID0+IHt9LFxuICAgICAgICBvbjogKCkgPT4ge30sXG4gICAgICB9XG4gICAgfSxcbiAgICB1cGRhdGVTdHlsZSgpIHt9LFxuICB9LFxufVxuXG5leHBvcnQgY2xhc3MgTW9kdWxlQ2FjaGVNYXAgZXh0ZW5kcyBNYXA8c3RyaW5nLCBNb2R1bGVDYWNoZT4ge1xuICBub3JtYWxpemVQYXRoKGZzUGF0aDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIG5vcm1hbGl6ZU1vZHVsZUlkKGZzUGF0aClcbiAgfVxuXG4gIHNldChmc1BhdGg6IHN0cmluZywgbW9kOiBQYXJ0aWFsPE1vZHVsZUNhY2hlPikge1xuICAgIGZzUGF0aCA9IHRoaXMubm9ybWFsaXplUGF0aChmc1BhdGgpXG4gICAgaWYgKCFzdXBlci5oYXMoZnNQYXRoKSlcbiAgICAgIHN1cGVyLnNldChmc1BhdGgsIG1vZClcbiAgICBlbHNlXG4gICAgICBPYmplY3QuYXNzaWduKHN1cGVyLmdldChmc1BhdGgpLCBtb2QpXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIGdldChmc1BhdGg6IHN0cmluZykge1xuICAgIGZzUGF0aCA9IHRoaXMubm9ybWFsaXplUGF0aChmc1BhdGgpXG4gICAgcmV0dXJuIHN1cGVyLmdldChmc1BhdGgpXG4gIH1cblxuICBkZWxldGUoZnNQYXRoOiBzdHJpbmcpIHtcbiAgICBmc1BhdGggPSB0aGlzLm5vcm1hbGl6ZVBhdGgoZnNQYXRoKVxuICAgIHJldHVybiBzdXBlci5kZWxldGUoZnNQYXRoKVxuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBWaXRlTm9kZVJ1bm5lciB7XG4gIHJvb3Q6IHN0cmluZ1xuXG4gIGRlYnVnOiBib29sZWFuXG5cbiAgLyoqXG4gICAqIEhvbGRzIHRoZSBjYWNoZSBvZiBtb2R1bGVzXG4gICAqIEtleXMgb2YgdGhlIG1hcCBhcmUgZmlsZXBhdGhzLCBvciBwbGFpbiBwYWNrYWdlIG5hbWVzXG4gICAqL1xuICBtb2R1bGVDYWNoZTogTW9kdWxlQ2FjaGVNYXBcblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgb3B0aW9uczogVml0ZU5vZGVSdW5uZXJPcHRpb25zKSB7XG4gICAgdGhpcy5yb290ID0gb3B0aW9ucy5yb290ID8/IHByb2Nlc3MuY3dkKClcbiAgICB0aGlzLm1vZHVsZUNhY2hlID0gb3B0aW9ucy5tb2R1bGVDYWNoZSA/PyBuZXcgTW9kdWxlQ2FjaGVNYXAoKVxuICAgIHRoaXMuZGVidWcgPSBvcHRpb25zLmRlYnVnID8/ICh0eXBlb2YgcHJvY2VzcyAhPT0gJ3VuZGVmaW5lZCcgPyAhIXByb2Nlc3MuZW52LlZJVEVfTk9ERV9ERUJVRyA6IGZhbHNlKVxuICB9XG5cbiAgYXN5bmMgZXhlY3V0ZUZpbGUoZmlsZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuY2FjaGVkUmVxdWVzdChgL0Bmcy8ke3NsYXNoKHJlc29sdmUoZmlsZSkpfWAsIFtdKVxuICB9XG5cbiAgYXN5bmMgZXhlY3V0ZUlkKGlkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5jYWNoZWRSZXF1ZXN0KGlkLCBbXSlcbiAgfVxuXG4gIC8qKiBAaW50ZXJuYWwgKi9cbiAgYXN5bmMgY2FjaGVkUmVxdWVzdChyYXdJZDogc3RyaW5nLCBjYWxsc3RhY2s6IHN0cmluZ1tdKSB7XG4gICAgY29uc3QgaWQgPSBub3JtYWxpemVSZXF1ZXN0SWQocmF3SWQsIHRoaXMub3B0aW9ucy5iYXNlKVxuICAgIGNvbnN0IGZzUGF0aCA9IHRvRmlsZVBhdGgoaWQsIHRoaXMucm9vdClcblxuICAgIGlmICh0aGlzLm1vZHVsZUNhY2hlLmdldChmc1BhdGgpPy5wcm9taXNlKVxuICAgICAgcmV0dXJuIHRoaXMubW9kdWxlQ2FjaGUuZ2V0KGZzUGF0aCk/LnByb21pc2VcblxuICAgIGNvbnN0IHByb21pc2UgPSB0aGlzLmRpcmVjdFJlcXVlc3QoaWQsIGZzUGF0aCwgY2FsbHN0YWNrKVxuICAgIHRoaXMubW9kdWxlQ2FjaGUuc2V0KGZzUGF0aCwgeyBwcm9taXNlIH0pXG5cbiAgICByZXR1cm4gYXdhaXQgcHJvbWlzZVxuICB9XG5cbiAgLyoqIEBpbnRlcm5hbCAqL1xuICBhc3luYyBkaXJlY3RSZXF1ZXN0KGlkOiBzdHJpbmcsIGZzUGF0aDogc3RyaW5nLCBfY2FsbHN0YWNrOiBzdHJpbmdbXSkge1xuICAgIGNvbnN0IGNhbGxzdGFjayA9IFsuLi5fY2FsbHN0YWNrLCBub3JtYWxpemVNb2R1bGVJZChpZCldXG4gICAgY29uc3QgcmVxdWVzdCA9IGFzeW5jKGRlcDogc3RyaW5nKSA9PiB7XG4gICAgICBjb25zdCBnZXRTdGFjayA9ICgpID0+IHtcbiAgICAgICAgcmV0dXJuIGBzdGFjazpcXG4ke1suLi5jYWxsc3RhY2ssIGRlcF0ucmV2ZXJzZSgpLm1hcChwID0+IGAtICR7cH1gKS5qb2luKCdcXG4nKX1gXG4gICAgICB9XG5cbiAgICAgIC8vIHByb2JhYmx5IG1lYW5zIGl0IHdhcyBwYXNzZWQgYXMgdmFyaWFibGVcbiAgICAgIC8vIGFuZCB3YXNuJ3QgdHJhbnNmb3JtZWQgYnkgVml0ZVxuICAgICAgaWYgKHRoaXMub3B0aW9ucy5yZXNvbHZlSWQgJiYgdGhpcy5zaG91bGRSZXNvbHZlSWQoZGVwKSkge1xuICAgICAgICBjb25zdCByZXNvbHZlZERlcCA9IGF3YWl0IHRoaXMub3B0aW9ucy5yZXNvbHZlSWQoZGVwLCBpZClcbiAgICAgICAgZGVwID0gcmVzb2x2ZWREZXA/LmlkPy5yZXBsYWNlKHRoaXMucm9vdCwgJycpIHx8IGRlcFxuICAgICAgfVxuXG4gICAgICBsZXQgZGVidWdUaW1lcjogYW55XG4gICAgICBpZiAodGhpcy5kZWJ1ZylcbiAgICAgICAgZGVidWdUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4gdGhpcy5kZWJ1Z0xvZygoKSA9PiBgbW9kdWxlICR7ZGVwfSB0YWtlcyBvdmVyIDJzIHRvIGxvYWQuXFxuJHtnZXRTdGFjaygpfWApLCAyMDAwKVxuXG4gICAgICB0cnkge1xuICAgICAgICBpZiAoY2FsbHN0YWNrLmluY2x1ZGVzKG5vcm1hbGl6ZU1vZHVsZUlkKGRlcCkpKSB7XG4gICAgICAgICAgdGhpcy5kZWJ1Z0xvZygoKSA9PiBgY2lyY3VsYXIgZGVwZW5kZW5jeSwgJHtnZXRTdGFjaygpfWApXG4gICAgICAgICAgY29uc3QgZGVwRXhwb3J0cyA9IHRoaXMubW9kdWxlQ2FjaGUuZ2V0KGRlcCk/LmV4cG9ydHNcbiAgICAgICAgICBpZiAoZGVwRXhwb3J0cylcbiAgICAgICAgICAgIHJldHVybiBkZXBFeHBvcnRzXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBbdml0ZS1ub2RlXSBGYWlsZWQgdG8gcmVzb2x2ZSBjaXJjdWxhciBkZXBlbmRlbmN5LCAke2dldFN0YWNrKCl9YClcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG1vZCA9IGF3YWl0IHRoaXMuY2FjaGVkUmVxdWVzdChkZXAsIGNhbGxzdGFjaylcblxuICAgICAgICByZXR1cm4gbW9kXG4gICAgICB9XG4gICAgICBmaW5hbGx5IHtcbiAgICAgICAgaWYgKGRlYnVnVGltZXIpXG4gICAgICAgICAgY2xlYXJUaW1lb3V0KGRlYnVnVGltZXIpXG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgcmVxdWVzdFN0dWJzID0gdGhpcy5vcHRpb25zLnJlcXVlc3RTdHVicyB8fCBERUZBVUxUX1JFUVVFU1RfU1RVQlNcbiAgICBpZiAoaWQgaW4gcmVxdWVzdFN0dWJzKVxuICAgICAgcmV0dXJuIHJlcXVlc3RTdHVic1tpZF1cblxuICAgIGNvbnN0IHsgY29kZTogdHJhbnNmb3JtZWQsIGV4dGVybmFsaXplIH0gPSBhd2FpdCB0aGlzLm9wdGlvbnMuZmV0Y2hNb2R1bGUoaWQpXG4gICAgaWYgKGV4dGVybmFsaXplKSB7XG4gICAgICBjb25zdCBtb2QgPSBhd2FpdCB0aGlzLmludGVyb3BlZEltcG9ydChleHRlcm5hbGl6ZSlcbiAgICAgIHRoaXMubW9kdWxlQ2FjaGUuc2V0KGZzUGF0aCwgeyBleHBvcnRzOiBtb2QgfSlcbiAgICAgIHJldHVybiBtb2RcbiAgICB9XG5cbiAgICBpZiAodHJhbnNmb3JtZWQgPT0gbnVsbClcbiAgICAgIHRocm93IG5ldyBFcnJvcihgW3ZpdGUtbm9kZV0gRmFpbGVkIHRvIGxvYWQgJHtpZH1gKVxuXG4gICAgLy8gZGlzYW1iaWd1YXRlIHRoZSBgPFVOSVQ+Oi9gIG9uIHdpbmRvd3M6IHNlZSBub2RlanMvbm9kZSMzMTcxMFxuICAgIGNvbnN0IHVybCA9IHBhdGhUb0ZpbGVVUkwoZnNQYXRoKS5ocmVmXG4gICAgY29uc3QgZXhwb3J0czogYW55ID0gT2JqZWN0LmNyZWF0ZShudWxsKVxuICAgIGV4cG9ydHNbU3ltYm9sLnRvU3RyaW5nVGFnXSA9ICdNb2R1bGUnXG5cbiAgICB0aGlzLm1vZHVsZUNhY2hlLnNldChpZCwgeyBjb2RlOiB0cmFuc2Zvcm1lZCwgZXhwb3J0cyB9KVxuXG4gICAgY29uc3QgX19maWxlbmFtZSA9IGZpbGVVUkxUb1BhdGgodXJsKVxuICAgIGNvbnN0IG1vZHVsZVByb3h5ID0ge1xuICAgICAgc2V0IGV4cG9ydHModmFsdWUpIHtcbiAgICAgICAgZXhwb3J0QWxsKGV4cG9ydHMsIHZhbHVlKVxuICAgICAgICBleHBvcnRzLmRlZmF1bHQgPSB2YWx1ZVxuICAgICAgfSxcbiAgICAgIGdldCBleHBvcnRzKCkge1xuICAgICAgICByZXR1cm4gZXhwb3J0cy5kZWZhdWx0XG4gICAgICB9LFxuICAgIH1cblxuICAgIC8vIEJlIGNhcmVmdWwgd2hlbiBjaGFuZ2luZyB0aGlzXG4gICAgLy8gY2hhbmdpbmcgY29udGV4dCB3aWxsIGNoYW5nZSBhbW91bnQgb2YgY29kZSBhZGRlZCBvbiBsaW5lIDoxMTQgKHZtLnJ1bkluVGhpc0NvbnRleHQpXG4gICAgLy8gdGhpcyBtZXNzZXMgdXAgc291cmNlbWFwcyBmb3IgY292ZXJhZ2VcbiAgICAvLyBhZGp1c3QgYG9mZnNldGAgdmFyaWFibGUgaW4gcGFja2FnZXMvdml0ZXN0L3NyYy9pbnRlZ3JhdGlvbnMvY292ZXJhZ2UudHMjTDEwMCBpZiB5b3UgZG8gY2hhbmdlIHRoaXNcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5wcmVwYXJlQ29udGV4dCh7XG4gICAgICAvLyBlc20gdHJhbnNmb3JtZWQgYnkgVml0ZVxuICAgICAgX192aXRlX3Nzcl9pbXBvcnRfXzogcmVxdWVzdCxcbiAgICAgIF9fdml0ZV9zc3JfZHluYW1pY19pbXBvcnRfXzogcmVxdWVzdCxcbiAgICAgIF9fdml0ZV9zc3JfZXhwb3J0c19fOiBleHBvcnRzLFxuICAgICAgX192aXRlX3Nzcl9leHBvcnRBbGxfXzogKG9iajogYW55KSA9PiBleHBvcnRBbGwoZXhwb3J0cywgb2JqKSxcbiAgICAgIF9fdml0ZV9zc3JfaW1wb3J0X21ldGFfXzogeyB1cmwgfSxcblxuICAgICAgLy8gY2pzIGNvbXBhY3RcbiAgICAgIHJlcXVpcmU6IGNyZWF0ZVJlcXVpcmUodXJsKSxcbiAgICAgIGV4cG9ydHMsXG4gICAgICBtb2R1bGU6IG1vZHVsZVByb3h5LFxuICAgICAgX19maWxlbmFtZSxcbiAgICAgIF9fZGlybmFtZTogZGlybmFtZShfX2ZpbGVuYW1lKSxcbiAgICB9KVxuXG4gICAgLy8gYWRkICd1c2Ugc3RyaWN0JyBzaW5jZSBFU00gZW5hYmxlcyBpdCBieSBkZWZhdWx0XG4gICAgY29uc3QgZm4gPSB2bS5ydW5JblRoaXNDb250ZXh0KGAndXNlIHN0cmljdCc7YXN5bmMgKCR7T2JqZWN0LmtleXMoY29udGV4dCkuam9pbignLCcpfSk9Pnt7JHt0cmFuc2Zvcm1lZH1cXG59fWAsIHtcbiAgICAgIGZpbGVuYW1lOiBmc1BhdGgsXG4gICAgICBsaW5lT2Zmc2V0OiAwLFxuICAgIH0pXG5cbiAgICBhd2FpdCBmbiguLi5PYmplY3QudmFsdWVzKGNvbnRleHQpKVxuXG4gICAgcmV0dXJuIGV4cG9ydHNcbiAgfVxuXG4gIHByZXBhcmVDb250ZXh0KGNvbnRleHQ6IFJlY29yZDxzdHJpbmcsIGFueT4pIHtcbiAgICByZXR1cm4gY29udGV4dFxuICB9XG5cbiAgc2hvdWxkUmVzb2x2ZUlkKGRlcDogc3RyaW5nKSB7XG4gICAgaWYgKGlzTm9kZUJ1aWx0aW4oZGVwKSB8fCBkZXAgaW4gKHRoaXMub3B0aW9ucy5yZXF1ZXN0U3R1YnMgfHwgREVGQVVMVF9SRVFVRVNUX1NUVUJTKSlcbiAgICAgIHJldHVybiBmYWxzZVxuXG4gICAgcmV0dXJuICFpc0Fic29sdXRlKGRlcCkgfHwgIWV4dG5hbWUoZGVwKVxuICB9XG5cbiAgLyoqXG4gICAqIERlZmluZSBpZiBhIG1vZHVsZSBzaG91bGQgYmUgaW50ZXJvcC1lZFxuICAgKiBUaGlzIGZ1bmN0aW9uIG1vc3RseSBmb3IgdGhlIGFiaWxpdHkgdG8gb3ZlcnJpZGUgYnkgc3ViY2xhc3NcbiAgICovXG4gIHNob3VsZEludGVyb3AocGF0aDogc3RyaW5nLCBtb2Q6IGFueSkge1xuICAgIGlmICh0aGlzLm9wdGlvbnMuaW50ZXJvcERlZmF1bHQgPT09IGZhbHNlKVxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgLy8gbmV2ZXIgaW50ZXJvcCBFU00gbW9kdWxlc1xuICAgIC8vIFRPRE86IHNob3VsZCBhbHNvIHNraXAgZm9yIGAuanNgIHdpdGggYHR5cGU9XCJtb2R1bGVcImBcbiAgICByZXR1cm4gIXBhdGguZW5kc1dpdGgoJy5tanMnKSAmJiAnZGVmYXVsdCcgaW4gbW9kXG4gIH1cblxuICAvKipcbiAgICogSW1wb3J0IGEgbW9kdWxlIGFuZCBpbnRlcm9wIGl0XG4gICAqL1xuICBhc3luYyBpbnRlcm9wZWRJbXBvcnQocGF0aDogc3RyaW5nKSB7XG4gICAgY29uc3QgbW9kID0gYXdhaXQgaW1wb3J0KHBhdGgpXG5cbiAgICBpZiAodGhpcy5zaG91bGRJbnRlcm9wKHBhdGgsIG1vZCkpIHtcbiAgICAgIGNvbnN0IHRyeURlZmF1bHQgPSB0aGlzLmhhc05lc3RlZERlZmF1bHQobW9kKVxuICAgICAgcmV0dXJuIG5ldyBQcm94eShtb2QsIHtcbiAgICAgICAgZ2V0OiBwcm94eU1ldGhvZCgnZ2V0JywgdHJ5RGVmYXVsdCksXG4gICAgICAgIHNldDogcHJveHlNZXRob2QoJ3NldCcsIHRyeURlZmF1bHQpLFxuICAgICAgICBoYXM6IHByb3h5TWV0aG9kKCdoYXMnLCB0cnlEZWZhdWx0KSxcbiAgICAgICAgZGVsZXRlUHJvcGVydHk6IHByb3h5TWV0aG9kKCdkZWxldGVQcm9wZXJ0eScsIHRyeURlZmF1bHQpLFxuICAgICAgfSlcbiAgICB9XG5cbiAgICByZXR1cm4gbW9kXG4gIH1cblxuICBoYXNOZXN0ZWREZWZhdWx0KHRhcmdldDogYW55KSB7XG4gICAgcmV0dXJuICdfX2VzTW9kdWxlJyBpbiB0YXJnZXQgJiYgdGFyZ2V0Ll9fZXNNb2R1bGUgJiYgJ2RlZmF1bHQnIGluIHRhcmdldC5kZWZhdWx0XG4gIH1cblxuICBwcml2YXRlIGRlYnVnTG9nKG1zZzogKCkgPT4gc3RyaW5nKSB7XG4gICAgaWYgKHRoaXMuZGVidWcpXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgY29uc29sZS5sb2coYFt2aXRlLW5vZGVdICR7bXNnKCl9YClcbiAgfVxufVxuXG5mdW5jdGlvbiBwcm94eU1ldGhvZChuYW1lOiAnZ2V0JyB8ICdzZXQnIHwgJ2hhcycgfCAnZGVsZXRlUHJvcGVydHknLCB0cnlEZWZhdWx0OiBib29sZWFuKSB7XG4gIHJldHVybiBmdW5jdGlvbih0YXJnZXQ6IGFueSwga2V5OiBzdHJpbmcgfCBzeW1ib2wsIC4uLmFyZ3M6IFthbnk/LCBhbnk/XSkge1xuICAgIGNvbnN0IHJlc3VsdCA9IFJlZmxlY3RbbmFtZV0odGFyZ2V0LCBrZXksIC4uLmFyZ3MpXG4gICAgaWYgKGlzUHJpbWl0aXZlKHRhcmdldC5kZWZhdWx0KSlcbiAgICAgIHJldHVybiByZXN1bHRcbiAgICBpZiAoKHRyeURlZmF1bHQgJiYga2V5ID09PSAnZGVmYXVsdCcpIHx8IHR5cGVvZiByZXN1bHQgPT09ICd1bmRlZmluZWQnKVxuICAgICAgcmV0dXJuIFJlZmxlY3RbbmFtZV0odGFyZ2V0LmRlZmF1bHQsIGtleSwgLi4uYXJncylcbiAgICByZXR1cm4gcmVzdWx0XG4gIH1cbn1cblxuZnVuY3Rpb24gZXhwb3J0QWxsKGV4cG9ydHM6IGFueSwgc291cmNlTW9kdWxlOiBhbnkpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlc3RyaWN0ZWQtc3ludGF4XG4gIGZvciAoY29uc3Qga2V5IGluIHNvdXJjZU1vZHVsZSkge1xuICAgIGlmIChrZXkgIT09ICdkZWZhdWx0Jykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIGtleSwge1xuICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgIGdldCgpIHsgcmV0dXJuIHNvdXJjZU1vZHVsZVtrZXldIH0sXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICBjYXRjaCAoX2VycikgeyB9XG4gICAgfVxuICB9XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQU1ZLE1BQUMscUJBQXFCLEdBQUc7QUFDckMsRUFBRSxlQUFlLEVBQUU7QUFDbkIsSUFBSSxXQUFXLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRTtBQUMzQixJQUFJLGdCQUFnQixHQUFHO0FBQ3ZCLE1BQU0sT0FBTztBQUNiLFFBQVEsTUFBTSxFQUFFLE1BQU07QUFDdEIsU0FBUztBQUNULFFBQVEsS0FBSyxFQUFFLE1BQU07QUFDckIsU0FBUztBQUNULFFBQVEsT0FBTyxFQUFFLE1BQU07QUFDdkIsU0FBUztBQUNULFFBQVEsT0FBTyxFQUFFLE1BQU07QUFDdkIsU0FBUztBQUNULFFBQVEsVUFBVSxFQUFFLE1BQU07QUFDMUIsU0FBUztBQUNULFFBQVEsRUFBRSxFQUFFLE1BQU07QUFDbEIsU0FBUztBQUNULE9BQU8sQ0FBQztBQUNSLEtBQUs7QUFDTCxJQUFJLFdBQVcsR0FBRztBQUNsQixLQUFLO0FBQ0wsR0FBRztBQUNILEVBQUU7QUFDSyxNQUFNLGNBQWMsU0FBUyxHQUFHLENBQUM7QUFDeEMsRUFBRSxhQUFhLENBQUMsTUFBTSxFQUFFO0FBQ3hCLElBQUksT0FBTyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUNyQyxHQUFHO0FBQ0gsRUFBRSxHQUFHLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRTtBQUNuQixJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3hDLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMs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
@@ -1 +1 @@
1
- export { D as DepsHandlingOptions, a as FetchFunction, F as FetchResult, c as ModuleCache, M as ModuleCacheMap, R as RawSourceMap, b as ResolveIdFunction, S as StartOfSourceMap, d as ViteNodeResolveId, V as ViteNodeRunnerOptions, e as ViteNodeServerOptions } from './types-3ae135eb.js';
1
+ export { D as DepsHandlingOptions, a as FetchFunction, F as FetchResult, c as ModuleCache, M as ModuleCacheMap, R as RawSourceMap, b as ResolveIdFunction, S as StartOfSourceMap, d as ViteNodeResolveId, V as ViteNodeRunnerOptions, e as ViteNodeServerOptions } from './types-4b326db0.js';
@@ -1,5 +1,5 @@
1
1
  import { ViteDevServer, TransformResult } from 'vite';
2
- import { D as DepsHandlingOptions, e as ViteNodeServerOptions, F as FetchResult, d as ViteNodeResolveId } from './types-3ae135eb.js';
2
+ import { D as DepsHandlingOptions, e as ViteNodeServerOptions, F as FetchResult, d as ViteNodeResolveId } from './types-4b326db0.js';
3
3
 
4
4
  declare function guessCJSversion(id: string): string | undefined;
5
5
  declare function shouldExternalize(id: string, options?: DepsHandlingOptions, cache?: Map<string, Promise<string | false>>): Promise<string | false>;
@@ -21,6 +21,7 @@ declare class ModuleCacheMap extends Map<string, ModuleCache> {
21
21
  declare class ViteNodeRunner {
22
22
  options: ViteNodeRunnerOptions;
23
23
  root: string;
24
+ debug: boolean;
24
25
  /**
25
26
  * Holds the cache of modules
26
27
  * Keys of the map are filepaths, or plain package names
@@ -32,7 +33,7 @@ declare class ViteNodeRunner {
32
33
  /** @internal */
33
34
  cachedRequest(rawId: string, callstack: string[]): Promise<any>;
34
35
  /** @internal */
35
- directRequest(id: string, fsPath: string, callstack: string[]): Promise<any>;
36
+ directRequest(id: string, fsPath: string, _callstack: string[]): Promise<any>;
36
37
  prepareContext(context: Record<string, any>): Record<string, any>;
37
38
  shouldResolveId(dep: string): boolean;
38
39
  /**
@@ -45,6 +46,7 @@ declare class ViteNodeRunner {
45
46
  */
46
47
  interopedImport(path: string): Promise<any>;
47
48
  hasNestedDefault(target: any): any;
49
+ private debugLog;
48
50
  }
49
51
 
50
52
  interface DepsHandlingOptions {
@@ -87,6 +89,7 @@ interface ViteNodeRunnerOptions {
87
89
  moduleCache?: ModuleCacheMap;
88
90
  interopDefault?: boolean;
89
91
  requestStubs?: Record<string, any>;
92
+ debug?: boolean;
90
93
  }
91
94
  interface ViteNodeResolveId {
92
95
  external?: boolean | 'absolute' | 'relative';
@@ -1 +1 @@
1
- export { D as DepsHandlingOptions, a as FetchFunction, F as FetchResult, c as ModuleCache, M as ModuleCacheMap, R as RawSourceMap, b as ResolveIdFunction, S as StartOfSourceMap, d as ViteNodeResolveId, V as ViteNodeRunnerOptions, e as ViteNodeServerOptions } from './types-3ae135eb.js';
1
+ export { D as DepsHandlingOptions, a as FetchFunction, F as FetchResult, c as ModuleCache, M as ModuleCacheMap, R as RawSourceMap, b as ResolveIdFunction, S as StartOfSourceMap, d as ViteNodeResolveId, V as ViteNodeRunnerOptions, e as ViteNodeServerOptions } from './types-4b326db0.js';
File without changes
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vite-node",
3
- "version": "0.7.13",
3
+ "version": "0.8.0",
4
4
  "description": "Vite as Node.js runtime",
5
5
  "homepage": "https://github.com/vitest-dev/vitest/blob/main/packages/vite-node#readme",
6
6
  "bugs": {
@@ -24,30 +24,38 @@
24
24
  ".": {
25
25
  "import": "./dist/index.js",
26
26
  "require": "./dist/index.cjs",
27
- "types": "./index.d.ts"
27
+ "types": "./dist/index.d.ts"
28
28
  },
29
29
  "./client": {
30
30
  "import": "./dist/client.js",
31
31
  "require": "./dist/client.cjs",
32
- "types": "./client.d.ts"
32
+ "types": "./dist/client.d.ts"
33
33
  },
34
34
  "./server": {
35
35
  "import": "./dist/server.js",
36
36
  "require": "./dist/server.cjs",
37
- "types": "./server.d.ts"
37
+ "types": "./dist/server.d.ts"
38
38
  },
39
39
  "./utils": {
40
40
  "import": "./dist/utils.js",
41
41
  "require": "./dist/utils.cjs",
42
- "types": "./utils.d.ts"
42
+ "types": "./dist/utils.d.ts"
43
43
  }
44
44
  },
45
45
  "main": "./dist/index.js",
46
46
  "module": "./dist/index.js",
47
- "types": "./index.d.ts",
47
+ "types": "./dist/index.d.ts",
48
48
  "bin": {
49
49
  "vite-node": "./vite-node.mjs"
50
50
  },
51
+ "typesVersions": {
52
+ "*": {
53
+ "*": [
54
+ "./dist/*",
55
+ "./dist/index.d.ts"
56
+ ]
57
+ }
58
+ },
51
59
  "dependencies": {
52
60
  "kolorist": "^1.5.1",
53
61
  "minimist": "^1.2.6",
@@ -67,5 +75,5 @@
67
75
  "dev": "rollup -c --watch --watch.include=src/**",
68
76
  "typecheck": "tsc --noEmit"
69
77
  },
70
- "readme": "# vite-node\n\n[![NPM version](https://img.shields.io/npm/v/vite-node?color=a1b858&label=)](https://www.npmjs.com/package/vite-node)\n\nVite as Node runtime. The engine powers [Vitest](https://github.com/vitest-dev/vitest).\n\n## Features\n\n- Out-of-box ESM & TypeScript support (possible for more with plugins)\n- Top-level await\n- Vite plugins, resolve, aliasing\n- Respect `vite.config.ts`\n- Shims for `__dirname` and `__filename` in ESM\n- Access to native node modules like `fs`, `path`, etc.\n\n## CLI Usage\n\nRun JS/TS file on Node.js using Vite's resolvers and transformers.\n\n```bash\nnpx vite-node index.ts\n```\n\nOptions:\n\n```bash\nnpx vite-node -h\n```\n\n## Programmatic Usage\n\nIn Vite Node, the server and runner (client) are separated, so you can integrate them in different contexts (workers, cross-process, or remote) if needed. The demo below shows a simple example of having the server and running in the same context\n\n```ts\nimport { createServer } from 'vite'\nimport { ViteNodeServer } from 'vite-node/server'\nimport { ViteNodeRunner } from 'vite-node/client'\n\n// create vite server\nconst server = await createServer()\n// this is need to initialize the plugins\nawait server.pluginContainer.buildStart({})\n\n// create vite-node server\nconst node = new ViteNodeServer(server)\n\n// create vite-node runner\nconst runner = new ViteNodeRunner({\n root: server.config.root,\n base: server.config.base,\n // when having the server and runner in a different context,\n // you will need to handle the communication between them\n // and pass to this function\n fetchModule(id) {\n return node.fetchModule(id)\n },\n resolveId(id, importer) {\n return node.resolveId(id, importer)\n },\n})\n\n// execute the file\nawait runner.executeFile('./example.ts')\n\n// close the vite server\nawait server.close()\n```\n\n## Credits\n\nBased on [@pi0](https://github.com/pi0)'s brilliant idea of having a Vite server as the on-demand transforming service for [Nuxt's Vite SSR](https://github.com/nuxt/vite/pull/201).\n\nThanks [@brillout](https://github.com/brillout) for kindly sharing this package name.\n\n## Sponsors\n\n<p align=\"center\">\n <a href=\"https://cdn.jsdelivr.net/gh/antfu/static/sponsors.svg\">\n <img src='https://cdn.jsdelivr.net/gh/antfu/static/sponsors.svg'/>\n </a>\n</p>\n\n## License\n\n[MIT](./LICENSE) License © 2021 [Anthony Fu](https://github.com/antfu)\n"
78
+ "readme": "# vite-node\n\n[![NPM version](https://img.shields.io/npm/v/vite-node?color=a1b858&label=)](https://www.npmjs.com/package/vite-node)\n\nVite as Node runtime. The engine powers [Vitest](https://github.com/vitest-dev/vitest).\n\n## Features\n\n- Out-of-box ESM & TypeScript support (possible for more with plugins)\n- Top-level `await`\n- Vite plugins, resolve, aliasing\n- Respect `vite.config.ts`\n- Shims for `__dirname` and `__filename` in ESM\n- Access to native node modules like `fs`, `path`, etc.\n\n## CLI Usage\n\nRun JS/TS file on Node.js using Vite's resolvers and transformers.\n\n```bash\nnpx vite-node index.ts\n```\n\nOptions:\n\n```bash\nnpx vite-node -h\n```\n\n## Programmatic Usage\n\nIn Vite Node, the server and runner (client) are separated, so you can integrate them in different contexts (workers, cross-process, or remote) if needed. The demo below shows a simple example of having both (server and runner) running in the same context\n\n```ts\nimport { createServer } from 'vite'\nimport { ViteNodeServer } from 'vite-node/server'\nimport { ViteNodeRunner } from 'vite-node/client'\n\n// create vite server\nconst server = await createServer()\n// this is need to initialize the plugins\nawait server.pluginContainer.buildStart({})\n\n// create vite-node server\nconst node = new ViteNodeServer(server)\n\n// create vite-node runner\nconst runner = new ViteNodeRunner({\n root: server.config.root,\n base: server.config.base,\n // when having the server and runner in a different context,\n // you will need to handle the communication between them\n // and pass to this function\n fetchModule(id) {\n return node.fetchModule(id)\n },\n resolveId(id, importer) {\n return node.resolveId(id, importer)\n },\n})\n\n// execute the file\nawait runner.executeFile('./example.ts')\n\n// close the vite server\nawait server.close()\n```\n\n## Credits\n\nBased on [@pi0](https://github.com/pi0)'s brilliant idea of having a Vite server as the on-demand transforming service for [Nuxt's Vite SSR](https://github.com/nuxt/vite/pull/201).\n\nThanks [@brillout](https://github.com/brillout) for kindly sharing this package name.\n\n## Sponsors\n\n<p align=\"center\">\n <a href=\"https://cdn.jsdelivr.net/gh/antfu/static/sponsors.svg\">\n <img src='https://cdn.jsdelivr.net/gh/antfu/static/sponsors.svg'/>\n </a>\n</p>\n\n## License\n\n[MIT](./LICENSE) License © 2021 [Anthony Fu](https://github.com/antfu)\n"
71
79
  }
@@ -1,111 +0,0 @@
1
- declare const DEFAULT_REQUEST_STUBS: {
2
- '/@vite/client': {
3
- injectQuery: (id: string) => string;
4
- createHotContext(): {
5
- accept: () => void;
6
- prune: () => void;
7
- };
8
- updateStyle(): void;
9
- };
10
- };
11
- declare class ModuleCacheMap extends Map<string, ModuleCache> {
12
- normalizePath(fsPath: string): string;
13
- set(fsPath: string, mod: Partial<ModuleCache>): this;
14
- get(fsPath: string): ModuleCache | undefined;
15
- delete(fsPath: string): boolean;
16
- }
17
- declare class ViteNodeRunner {
18
- options: ViteNodeRunnerOptions;
19
- root: string;
20
- /**
21
- * Holds the cache of modules
22
- * Keys of the map are filepaths, or plain package names
23
- */
24
- moduleCache: ModuleCacheMap;
25
- constructor(options: ViteNodeRunnerOptions);
26
- executeFile(file: string): Promise<any>;
27
- executeId(id: string): Promise<any>;
28
- cachedRequest(rawId: string, callstack: string[]): Promise<any>;
29
- directRequest(id: string, fsPath: string, callstack: string[]): Promise<any>;
30
- prepareContext(context: Record<string, any>): Record<string, any>;
31
- shouldResolveId(dep: string): boolean;
32
- /**
33
- * Define if a module should be interop-ed
34
- * This function mostly for the ability to override by subclass
35
- */
36
- shouldInterop(path: string, mod: any): boolean;
37
- /**
38
- * Import a module and interop it
39
- */
40
- interopedImport(path: string): Promise<any>;
41
- hasNestedDefault(target: any): any;
42
- }
43
-
44
- interface DepsHandlingOptions {
45
- external?: (string | RegExp)[];
46
- inline?: (string | RegExp)[];
47
- /**
48
- * Try to guess the CJS version of a package when it's invalid ESM
49
- * @default false
50
- */
51
- fallbackCJS?: boolean;
52
- }
53
- interface StartOfSourceMap {
54
- file?: string;
55
- sourceRoot?: string;
56
- }
57
- interface RawSourceMap extends StartOfSourceMap {
58
- version: string;
59
- sources: string[];
60
- names: string[];
61
- sourcesContent?: string[];
62
- mappings: string;
63
- }
64
- interface FetchResult {
65
- code?: string;
66
- externalize?: string;
67
- map?: RawSourceMap;
68
- }
69
- declare type FetchFunction = (id: string) => Promise<FetchResult>;
70
- declare type ResolveIdFunction = (id: string, importer?: string) => Promise<ViteNodeResolveId | null>;
71
- interface ModuleCache {
72
- promise?: Promise<any>;
73
- exports?: any;
74
- code?: string;
75
- }
76
- interface ViteNodeRunnerOptions {
77
- root: string;
78
- fetchModule: FetchFunction;
79
- resolveId?: ResolveIdFunction;
80
- base?: string;
81
- moduleCache?: ModuleCacheMap;
82
- interopDefault?: boolean;
83
- requestStubs?: Record<string, any>;
84
- }
85
- interface ViteNodeResolveId {
86
- external?: boolean | 'absolute' | 'relative';
87
- id: string;
88
- meta?: Record<string, any> | null;
89
- moduleSideEffects?: boolean | 'no-treeshake' | null;
90
- syntheticNamedExports?: boolean | string | null;
91
- }
92
- interface ViteNodeServerOptions {
93
- /**
94
- * Inject inline sourcemap to modules
95
- * @default 'inline'
96
- */
97
- sourcemap?: 'inline' | boolean;
98
- /**
99
- * Deps handling
100
- */
101
- deps?: DepsHandlingOptions;
102
- /**
103
- * Transform method for modules
104
- */
105
- transformMode?: {
106
- ssr?: RegExp[];
107
- web?: RegExp[];
108
- };
109
- }
110
-
111
- export { DepsHandlingOptions as D, FetchResult as F, ModuleCache as M, RawSourceMap as R, StartOfSourceMap as S, ViteNodeRunnerOptions as V, FetchFunction as a, ResolveIdFunction as b, ViteNodeResolveId as c, ViteNodeServerOptions as d, DEFAULT_REQUEST_STUBS as e, ModuleCacheMap as f, ViteNodeRunner as g };
@@ -1,111 +0,0 @@
1
- declare const DEFAULT_REQUEST_STUBS: {
2
- '/@vite/client': {
3
- injectQuery: (id: string) => string;
4
- createHotContext(): {
5
- accept: () => void;
6
- prune: () => void;
7
- };
8
- updateStyle(): void;
9
- };
10
- };
11
- declare class ModuleCacheMap extends Map<string, ModuleCache> {
12
- normalizePath(fsPath: string): string;
13
- set(fsPath: string, mod: Partial<ModuleCache>): this;
14
- get(fsPath: string): ModuleCache | undefined;
15
- delete(fsPath: string): boolean;
16
- }
17
- declare class ViteNodeRunner {
18
- options: ViteNodeRunnerOptions;
19
- root: string;
20
- /**
21
- * Holds the cache of modules
22
- * Keys of the map are filepaths, or plain package names
23
- */
24
- moduleCache: ModuleCacheMap;
25
- constructor(options: ViteNodeRunnerOptions);
26
- executeFile(file: string): Promise<any>;
27
- executeId(id: string): Promise<any>;
28
- cachedRequest(rawId: string, callstack: string[]): Promise<any>;
29
- directRequest(id: string, fsPath: string, callstack: string[]): Promise<any>;
30
- prepareContext(context: Record<string, any>): Record<string, any>;
31
- shouldResolveId(dep: string): boolean;
32
- /**
33
- * Define if a module should be interop-ed
34
- * This function mostly for the ability to override by subclass
35
- */
36
- shouldInterop(path: string, mod: any): boolean;
37
- /**
38
- * Import a module and interop it
39
- */
40
- interopedImport(path: string): Promise<any>;
41
- hasNestedDefault(target: any): any;
42
- }
43
-
44
- interface DepsHandlingOptions {
45
- external?: (string | RegExp)[];
46
- inline?: (string | RegExp)[];
47
- /**
48
- * Try to guess the CJS version of a package when it's invalid ESM
49
- * @default false
50
- */
51
- fallbackCJS?: boolean;
52
- }
53
- interface StartOfSourceMap {
54
- file?: string;
55
- sourceRoot?: string;
56
- }
57
- interface RawSourceMap extends StartOfSourceMap {
58
- version: string;
59
- sources: string[];
60
- names: string[];
61
- sourcesContent?: string[];
62
- mappings: string;
63
- }
64
- interface FetchResult {
65
- code?: string;
66
- externalize?: string;
67
- map?: RawSourceMap;
68
- }
69
- declare type FetchFunction = (id: string) => Promise<FetchResult>;
70
- declare type ResolveIdFunction = (id: string, importer?: string) => Promise<ViteNodeResolveId | null>;
71
- interface ModuleCache {
72
- promise?: Promise<any>;
73
- exports?: any;
74
- code?: string;
75
- }
76
- interface ViteNodeRunnerOptions {
77
- root: string;
78
- fetchModule: FetchFunction;
79
- resolveId?: ResolveIdFunction;
80
- base?: string;
81
- moduleCache?: ModuleCacheMap;
82
- interopDefault?: boolean;
83
- requestStubs?: Record<string, any>;
84
- }
85
- interface ViteNodeResolveId {
86
- external?: boolean | 'absolute' | 'relative';
87
- id: string;
88
- meta?: Record<string, any> | null;
89
- moduleSideEffects?: boolean | 'no-treeshake' | null;
90
- syntheticNamedExports?: boolean | string | null;
91
- }
92
- interface ViteNodeServerOptions {
93
- /**
94
- * Inject inline sourcemap to modules
95
- * @default 'inline'
96
- */
97
- sourcemap?: 'inline' | boolean;
98
- /**
99
- * Deps handling
100
- */
101
- deps?: DepsHandlingOptions;
102
- /**
103
- * Transform method for modules
104
- */
105
- transformMode?: {
106
- ssr?: RegExp[];
107
- web?: RegExp[];
108
- };
109
- }
110
-
111
- export { DepsHandlingOptions as D, FetchResult as F, ModuleCacheMap as M, RawSourceMap as R, StartOfSourceMap as S, ViteNodeRunnerOptions as V, FetchFunction as a, ResolveIdFunction as b, ModuleCache as c, ViteNodeResolveId as d, ViteNodeServerOptions as e, DEFAULT_REQUEST_STUBS as f, ViteNodeRunner as g };
@@ -1,115 +0,0 @@
1
- declare const DEFAULT_REQUEST_STUBS: {
2
- '/@vite/client': {
3
- injectQuery: (id: string) => string;
4
- createHotContext(): {
5
- accept: () => void;
6
- prune: () => void;
7
- dispose: () => void;
8
- decline: () => void;
9
- invalidate: () => void;
10
- on: () => void;
11
- };
12
- updateStyle(): void;
13
- };
14
- };
15
- declare class ModuleCacheMap extends Map<string, ModuleCache> {
16
- normalizePath(fsPath: string): string;
17
- set(fsPath: string, mod: Partial<ModuleCache>): this;
18
- get(fsPath: string): ModuleCache | undefined;
19
- delete(fsPath: string): boolean;
20
- }
21
- declare class ViteNodeRunner {
22
- options: ViteNodeRunnerOptions;
23
- root: string;
24
- /**
25
- * Holds the cache of modules
26
- * Keys of the map are filepaths, or plain package names
27
- */
28
- moduleCache: ModuleCacheMap;
29
- constructor(options: ViteNodeRunnerOptions);
30
- executeFile(file: string): Promise<any>;
31
- executeId(id: string): Promise<any>;
32
- cachedRequest(rawId: string, callstack: string[]): Promise<any>;
33
- directRequest(id: string, fsPath: string, callstack: string[]): Promise<any>;
34
- prepareContext(context: Record<string, any>): Record<string, any>;
35
- shouldResolveId(dep: string): boolean;
36
- /**
37
- * Define if a module should be interop-ed
38
- * This function mostly for the ability to override by subclass
39
- */
40
- shouldInterop(path: string, mod: any): boolean;
41
- /**
42
- * Import a module and interop it
43
- */
44
- interopedImport(path: string): Promise<any>;
45
- hasNestedDefault(target: any): any;
46
- }
47
-
48
- interface DepsHandlingOptions {
49
- external?: (string | RegExp)[];
50
- inline?: (string | RegExp)[];
51
- /**
52
- * Try to guess the CJS version of a package when it's invalid ESM
53
- * @default false
54
- */
55
- fallbackCJS?: boolean;
56
- }
57
- interface StartOfSourceMap {
58
- file?: string;
59
- sourceRoot?: string;
60
- }
61
- interface RawSourceMap extends StartOfSourceMap {
62
- version: string;
63
- sources: string[];
64
- names: string[];
65
- sourcesContent?: string[];
66
- mappings: string;
67
- }
68
- interface FetchResult {
69
- code?: string;
70
- externalize?: string;
71
- map?: RawSourceMap;
72
- }
73
- declare type FetchFunction = (id: string) => Promise<FetchResult>;
74
- declare type ResolveIdFunction = (id: string, importer?: string) => Promise<ViteNodeResolveId | null>;
75
- interface ModuleCache {
76
- promise?: Promise<any>;
77
- exports?: any;
78
- code?: string;
79
- }
80
- interface ViteNodeRunnerOptions {
81
- root: string;
82
- fetchModule: FetchFunction;
83
- resolveId?: ResolveIdFunction;
84
- base?: string;
85
- moduleCache?: ModuleCacheMap;
86
- interopDefault?: boolean;
87
- requestStubs?: Record<string, any>;
88
- }
89
- interface ViteNodeResolveId {
90
- external?: boolean | 'absolute' | 'relative';
91
- id: string;
92
- meta?: Record<string, any> | null;
93
- moduleSideEffects?: boolean | 'no-treeshake' | null;
94
- syntheticNamedExports?: boolean | string | null;
95
- }
96
- interface ViteNodeServerOptions {
97
- /**
98
- * Inject inline sourcemap to modules
99
- * @default 'inline'
100
- */
101
- sourcemap?: 'inline' | boolean;
102
- /**
103
- * Deps handling
104
- */
105
- deps?: DepsHandlingOptions;
106
- /**
107
- * Transform method for modules
108
- */
109
- transformMode?: {
110
- ssr?: RegExp[];
111
- web?: RegExp[];
112
- };
113
- }
114
-
115
- export { DepsHandlingOptions as D, FetchResult as F, ModuleCacheMap as M, RawSourceMap as R, StartOfSourceMap as S, ViteNodeRunnerOptions as V, FetchFunction as a, ResolveIdFunction as b, ModuleCache as c, ViteNodeResolveId as d, ViteNodeServerOptions as e, DEFAULT_REQUEST_STUBS as f, ViteNodeRunner as g };