@dbx-tools/cli-service 0.9.70 → 0.9.72

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/index.ts CHANGED
@@ -3,7 +3,7 @@
3
3
  // Hand edits are overwritten on the next watch; this file is read-only.
4
4
 
5
5
  export const PACKAGE_IDENTIFIER = "@dbx-tools/cli-service";
6
- export const PACKAGE_VERSION = "0.9.70";
6
+ export const PACKAGE_VERSION = "0.9.72";
7
7
  export * as cli from "./src/cli.ts";
8
8
  export * as definition from "./src/definition.ts";
9
9
  export * as icon from "./src/icon.ts";
package/lib/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  export declare const PACKAGE_IDENTIFIER = "@dbx-tools/cli-service";
2
- export declare const PACKAGE_VERSION = "0.9.70";
2
+ export declare const PACKAGE_VERSION = "0.9.72";
3
3
  export * as cli from "./src/cli.ts";
4
4
  export * as definition from "./src/definition.ts";
5
5
  export * as icon from "./src/icon.ts";
package/lib/index.js CHANGED
@@ -2,7 +2,7 @@
2
2
  // Regenerated from the exporting modules in ./src.
3
3
  // Hand edits are overwritten on the next watch; this file is read-only.
4
4
  export const PACKAGE_IDENTIFIER = "@dbx-tools/cli-service";
5
- export const PACKAGE_VERSION = "0.9.70";
5
+ export const PACKAGE_VERSION = "0.9.72";
6
6
  export * as cli from "./src/cli.js";
7
7
  export * as definition from "./src/definition.js";
8
8
  export * as icon from "./src/icon.js";
@@ -10,4 +10,4 @@ export * as service from "./src/service.js";
10
10
  export { CliServiceInstallOptionsSchema } from "./src/cli.js";
11
11
  export { CliServiceCommandSchema, CliServiceMenuItemSchema, CliServicePythonPackageSchema, CliServiceDefinitionSchema } from "./src/definition.js";
12
12
  export { CliService } from "./src/service.js";
13
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwyQ0FBMkM7QUFDM0MsbURBQW1EO0FBQ25ELHdFQUF3RTtBQUV4RSxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyx3QkFBd0IsQ0FBQztBQUMzRCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsUUFBUSxDQUFDO0FBQ3hDLE9BQU8sS0FBSyxHQUFHLE1BQU0sY0FBYyxDQUFDO0FBQ3BDLE9BQU8sS0FBSyxVQUFVLE1BQU0scUJBQXFCLENBQUM7QUFDbEQsT0FBTyxLQUFLLElBQUksTUFBTSxlQUFlLENBQUM7QUFDdEMsT0FBTyxLQUFLLE9BQU8sTUFBTSxrQkFBa0IsQ0FBQztBQUM1QyxPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFOUQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLHdCQUF3QixFQUFFLDZCQUE2QixFQUFFLDBCQUEwQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFbkosT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGtCQUFrQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gR0VORVJBVEVEIGJ5IHByb2plbiB3YXRjaCAtIERPIE5PVCBFRElULlxuLy8gUmVnZW5lcmF0ZWQgZnJvbSB0aGUgZXhwb3J0aW5nIG1vZHVsZXMgaW4gLi9zcmMuXG4vLyBIYW5kIGVkaXRzIGFyZSBvdmVyd3JpdHRlbiBvbiB0aGUgbmV4dCB3YXRjaDsgdGhpcyBmaWxlIGlzIHJlYWQtb25seS5cblxuZXhwb3J0IGNvbnN0IFBBQ0tBR0VfSURFTlRJRklFUiA9IFwiQGRieC10b29scy9jbGktc2VydmljZVwiO1xuZXhwb3J0IGNvbnN0IFBBQ0tBR0VfVkVSU0lPTiA9IFwiMC45LjcwXCI7XG5leHBvcnQgKiBhcyBjbGkgZnJvbSBcIi4vc3JjL2NsaS50c1wiO1xuZXhwb3J0ICogYXMgZGVmaW5pdGlvbiBmcm9tIFwiLi9zcmMvZGVmaW5pdGlvbi50c1wiO1xuZXhwb3J0ICogYXMgaWNvbiBmcm9tIFwiLi9zcmMvaWNvbi50c1wiO1xuZXhwb3J0ICogYXMgc2VydmljZSBmcm9tIFwiLi9zcmMvc2VydmljZS50c1wiO1xuZXhwb3J0IHsgQ2xpU2VydmljZUluc3RhbGxPcHRpb25zU2NoZW1hIH0gZnJvbSBcIi4vc3JjL2NsaS50c1wiO1xuZXhwb3J0IHR5cGUgeyBDbGlTZXJ2aWNlRGVmaW5pdGlvblNvdXJjZSwgQ2xpU2VydmljZUNsaURlcGVuZGVuY2llcyB9IGZyb20gXCIuL3NyYy9jbGkudHNcIjtcbmV4cG9ydCB7IENsaVNlcnZpY2VDb21tYW5kU2NoZW1hLCBDbGlTZXJ2aWNlTWVudUl0ZW1TY2hlbWEsIENsaVNlcnZpY2VQeXRob25QYWNrYWdlU2NoZW1hLCBDbGlTZXJ2aWNlRGVmaW5pdGlvblNjaGVtYSB9IGZyb20gXCIuL3NyYy9kZWZpbml0aW9uLnRzXCI7XG5leHBvcnQgdHlwZSB7IENsaVNlcnZpY2VDb21tYW5kLCBDbGlTZXJ2aWNlQ29tbWFuZElucHV0LCBDbGlTZXJ2aWNlTWVudUl0ZW0sIENsaVNlcnZpY2VQeXRob25QYWNrYWdlLCBDbGlTZXJ2aWNlUHl0aG9uUGFja2FnZUlucHV0LCBDbGlTZXJ2aWNlRGVmaW5pdGlvbiwgQ2xpU2VydmljZURlZmluaXRpb25PcHRpb25zIH0gZnJvbSBcIi4vc3JjL2RlZmluaXRpb24udHNcIjtcbmV4cG9ydCB7IENsaVNlcnZpY2UgfSBmcm9tIFwiLi9zcmMvc2VydmljZS50c1wiO1xuZXhwb3J0IHR5cGUgeyBDbGlTZXJ2aWNlQ29tcGlsZXIsIENsaVNlcnZpY2VSdW50aW1lSW5zdGFsbGVyLCBDbGlTZXJ2aWNlUHl0aG9uSW5zdGFsbGVyLCBDbGlTZXJ2aWNlUnVudGltZU9wdGlvbnMsIENsaVNlcnZpY2VTdGF0dXMsIENsaVNlcnZpY2VMaWZlY3ljbGUgfSBmcm9tIFwiLi9zcmMvc2VydmljZS50c1wiO1xuIl19
13
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwyQ0FBMkM7QUFDM0MsbURBQW1EO0FBQ25ELHdFQUF3RTtBQUV4RSxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyx3QkFBd0IsQ0FBQztBQUMzRCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsUUFBUSxDQUFDO0FBQ3hDLE9BQU8sS0FBSyxHQUFHLE1BQU0sY0FBYyxDQUFDO0FBQ3BDLE9BQU8sS0FBSyxVQUFVLE1BQU0scUJBQXFCLENBQUM7QUFDbEQsT0FBTyxLQUFLLElBQUksTUFBTSxlQUFlLENBQUM7QUFDdEMsT0FBTyxLQUFLLE9BQU8sTUFBTSxrQkFBa0IsQ0FBQztBQUM1QyxPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFOUQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLHdCQUF3QixFQUFFLDZCQUE2QixFQUFFLDBCQUEwQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFbkosT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGtCQUFrQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gR0VORVJBVEVEIGJ5IHByb2plbiB3YXRjaCAtIERPIE5PVCBFRElULlxuLy8gUmVnZW5lcmF0ZWQgZnJvbSB0aGUgZXhwb3J0aW5nIG1vZHVsZXMgaW4gLi9zcmMuXG4vLyBIYW5kIGVkaXRzIGFyZSBvdmVyd3JpdHRlbiBvbiB0aGUgbmV4dCB3YXRjaDsgdGhpcyBmaWxlIGlzIHJlYWQtb25seS5cblxuZXhwb3J0IGNvbnN0IFBBQ0tBR0VfSURFTlRJRklFUiA9IFwiQGRieC10b29scy9jbGktc2VydmljZVwiO1xuZXhwb3J0IGNvbnN0IFBBQ0tBR0VfVkVSU0lPTiA9IFwiMC45LjcyXCI7XG5leHBvcnQgKiBhcyBjbGkgZnJvbSBcIi4vc3JjL2NsaS50c1wiO1xuZXhwb3J0ICogYXMgZGVmaW5pdGlvbiBmcm9tIFwiLi9zcmMvZGVmaW5pdGlvbi50c1wiO1xuZXhwb3J0ICogYXMgaWNvbiBmcm9tIFwiLi9zcmMvaWNvbi50c1wiO1xuZXhwb3J0ICogYXMgc2VydmljZSBmcm9tIFwiLi9zcmMvc2VydmljZS50c1wiO1xuZXhwb3J0IHsgQ2xpU2VydmljZUluc3RhbGxPcHRpb25zU2NoZW1hIH0gZnJvbSBcIi4vc3JjL2NsaS50c1wiO1xuZXhwb3J0IHR5cGUgeyBDbGlTZXJ2aWNlRGVmaW5pdGlvblNvdXJjZSwgQ2xpU2VydmljZUNsaURlcGVuZGVuY2llcyB9IGZyb20gXCIuL3NyYy9jbGkudHNcIjtcbmV4cG9ydCB7IENsaVNlcnZpY2VDb21tYW5kU2NoZW1hLCBDbGlTZXJ2aWNlTWVudUl0ZW1TY2hlbWEsIENsaVNlcnZpY2VQeXRob25QYWNrYWdlU2NoZW1hLCBDbGlTZXJ2aWNlRGVmaW5pdGlvblNjaGVtYSB9IGZyb20gXCIuL3NyYy9kZWZpbml0aW9uLnRzXCI7XG5leHBvcnQgdHlwZSB7IENsaVNlcnZpY2VDb21tYW5kLCBDbGlTZXJ2aWNlQ29tbWFuZElucHV0LCBDbGlTZXJ2aWNlTWVudUl0ZW0sIENsaVNlcnZpY2VQeXRob25QYWNrYWdlLCBDbGlTZXJ2aWNlUHl0aG9uUGFja2FnZUlucHV0LCBDbGlTZXJ2aWNlRGVmaW5pdGlvbiwgQ2xpU2VydmljZURlZmluaXRpb25PcHRpb25zIH0gZnJvbSBcIi4vc3JjL2RlZmluaXRpb24udHNcIjtcbmV4cG9ydCB7IENsaVNlcnZpY2UgfSBmcm9tIFwiLi9zcmMvc2VydmljZS50c1wiO1xuZXhwb3J0IHR5cGUgeyBDbGlTZXJ2aWNlQ29tcGlsZXIsIENsaVNlcnZpY2VSdW50aW1lSW5zdGFsbGVyLCBDbGlTZXJ2aWNlUHl0aG9uSW5zdGFsbGVyLCBDbGlTZXJ2aWNlUnVudGltZU9wdGlvbnMsIENsaVNlcnZpY2VTdGF0dXMsIENsaVNlcnZpY2VMaWZlY3ljbGUgfSBmcm9tIFwiLi9zcmMvc2VydmljZS50c1wiO1xuIl19
@@ -65,14 +65,7 @@ function localManifest(reference) {
65
65
  }
66
66
  }
67
67
  function installedManifest(name) {
68
- try {
69
- return createRequire(import.meta.url).resolve(`${name}/package.json`);
70
- }
71
- catch (error) {
72
- if (error.code === "MODULE_NOT_FOUND")
73
- return undefined;
74
- throw error;
75
- }
68
+ return packageManifest(createRequire(import.meta.url), name);
76
69
  }
77
70
  function servicePackage(manifestPath, expectedName) {
78
71
  const manifest = readRecord(manifestPath);
@@ -99,7 +92,9 @@ function servicePackage(manifestPath, expectedName) {
99
92
  : [];
100
93
  const require = createRequire(manifestPath);
101
94
  return Object.fromEntries(dependencies.map((dependency) => {
102
- const path = require.resolve(`${dependency}/package.json`);
95
+ const path = packageManifest(require, dependency);
96
+ if (!path)
97
+ throw new Error(`could not resolve dependency package: ${dependency}`);
103
98
  const resolved = readRecord(path);
104
99
  if (typeof resolved.version !== "string" || !resolved.version) {
105
100
  throw new Error(`dependency has no version: ${path}`);
@@ -109,6 +104,41 @@ function servicePackage(manifestPath, expectedName) {
109
104
  },
110
105
  };
111
106
  }
107
+ /** Resolve a package manifest without requiring its unexported `package.json` subpath. */
108
+ function packageManifest(require, name) {
109
+ for (const specifier of [name, `${name}/package.json`]) {
110
+ try {
111
+ const entry = require.resolve(specifier);
112
+ const manifest = namedManifest(entry, name);
113
+ if (manifest)
114
+ return manifest;
115
+ }
116
+ catch (error) {
117
+ const code = error.code;
118
+ if (code !== "MODULE_NOT_FOUND" && code !== "ERR_PACKAGE_PATH_NOT_EXPORTED")
119
+ throw error;
120
+ }
121
+ }
122
+ for (const directory of require.resolve.paths(name) ?? []) {
123
+ const manifest = join(directory, name, "package.json");
124
+ if (existsSync(manifest) && readRecord(manifest).name === name)
125
+ return manifest;
126
+ }
127
+ return undefined;
128
+ }
129
+ /** Walk from a resolved package entry to the nearest manifest with the expected name. */
130
+ function namedManifest(path, name) {
131
+ let current = dirname(path);
132
+ while (true) {
133
+ const manifest = join(current, "package.json");
134
+ if (existsSync(manifest) && readRecord(manifest).name === name)
135
+ return manifest;
136
+ const parent = dirname(current);
137
+ if (parent === current)
138
+ return undefined;
139
+ current = parent;
140
+ }
141
+ }
112
142
  function resolveBin(directory, value, name) {
113
143
  if (typeof value === "string") {
114
144
  if (name)
@@ -135,4 +165,4 @@ function readRecord(path) {
135
165
  throw new Error(`package manifest is not an object: ${path}`);
136
166
  return value;
137
167
  }
138
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiX3BhY2thZ2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvX3BhY2thZ2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDbkQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUM1QyxPQUFPLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQy9ELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFFekMsT0FBTyxLQUFLLFlBQVksTUFBTSwrQkFBK0IsQ0FBQztBQUM5RCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFVaEQsTUFBTSxVQUFVLHFCQUFxQixDQUNuQyxTQUFpQixFQUNqQixNQUFjLE9BQU8sQ0FBQyxHQUFHLEVBQUU7SUFFM0IsTUFBTSxLQUFLLEdBQUcsYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3ZDLElBQUksS0FBSztRQUFFLE9BQU8sY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRXhDLE1BQU0sSUFBSSxHQUFHLFNBQVMsQ0FBQztJQUN2QixNQUFNLFNBQVMsR0FBRyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMxQyxJQUFJLFNBQVM7UUFBRSxPQUFPLGNBQWMsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFFdEQsTUFBTSxJQUFJLEdBQUcsWUFBWSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNwQyxJQUFJLENBQUMsSUFBSTtRQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsOEJBQThCLElBQUksRUFBRSxDQUFDLENBQUM7SUFDakUsTUFBTSxRQUFRLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsY0FBYyxDQUFDLENBQUMsQ0FBQztJQUN4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Q0FBQyxDQUFDO0lBQzNGLE9BQU8sS0FBSyxDQUFDO0FBQ2YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGV4aXN0c1N5bmMsIHJlYWRGaWxlU3luYyB9IGZyb20gXCJub2RlOmZzXCI7XG5pbXBvcnQgeyBjcmVhdGVSZXF1aXJlIH0gZnJvbSBcIm5vZGU6bW9kdWxlXCI7XG5pbXBvcnQgeyBkaXJuYW1lLCBpc0Fic29sdXRlLCBqb2luLCByZXNvbHZlIH0gZnJvbSBcIm5vZGU6cGF0aFwiO1xuaW1wb3J0IHsgZmlsZVVSTFRvUGF0aCB9IGZyb20gXCJub2RlOnVybFwiO1xuXG5pbXBvcnQgKiBhcyBwcm9qZWN0VXRpbHMgZnJvbSBcIkBkYngtdG9vbHMvY29yZS9wcm9qZWN0LXV0aWxzXCI7XG5pbXBvcnQgeyBvYmplY3QgfSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtY29yZVwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFNlcnZpY2VQYWNrYWdlIHtcbiAgcmVhZG9ubHkgZGlyZWN0b3J5OiBzdHJpbmc7XG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcbiAgcmVhZG9ubHkgdmVyc2lvbjogc3RyaW5nO1xuICBiaW4obmFtZT86IHN0cmluZyk6IHN0cmluZztcbiAgZGVwZW5kZW5jaWVzKCk6IFJlYWRvbmx5PFJlY29yZDxzdHJpbmcsIHN0cmluZz4+O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZVNlcnZpY2VQYWNrYWdlKFxuICByZWZlcmVuY2U6IHN0cmluZyxcbiAgY3dkOiBzdHJpbmcgPSBwcm9jZXNzLmN3ZCgpLFxuKTogU2VydmljZVBhY2thZ2Uge1xuICBjb25zdCBsb2NhbCA9IGxvY2FsTWFuaWZlc3QocmVmZXJlbmNlKTtcbiAgaWYgKGxvY2FsKSByZXR1cm4gc2VydmljZVBhY2thZ2UobG9jYWwpO1xuXG4gIGNvbnN0IG5hbWUgPSByZWZlcmVuY2U7XG4gIGNvbnN0IGluc3RhbGxlZCA9IGluc3RhbGxlZE1hbmlmZXN0KG5hbWUpO1xuICBpZiAoaW5zdGFsbGVkKSByZXR1cm4gc2VydmljZVBhY2thZ2UoaW5zdGFsbGVkLCBuYW1lKTtcblxuICBjb25zdCByb290ID0gcHJvamVjdFV0aWxzLnJvb3QoY3dkKTtcbiAgaWYgKCFyb290KSB0aHJvdyBuZXcgRXJyb3IoYGNvdWxkIG5vdCByZXNvbHZlIHBhY2thZ2U6ICR7bmFtZX1gKTtcbiAgY29uc3QgbWFuaWZlc3QgPSByZWFkUmVjb3JkKGpvaW4ocm9vdCwgXCJwYWNrYWdlLmpzb25cIikpO1xuICBjb25zdCB3b3Jrc3BhY2VzID0gQXJyYXkuaXNBcnJheShtYW5pZmVzdC53b3Jrc3BhY2VzKSA/IG1hbmlmZXN0LndvcmtzcGFjZXMgOiBbXTtcbiAgZm9yIChjb25zdCBtZW1iZXIgb2Ygd29ya3NwYWNlcykge1xuICAgIGlmICh0eXBlb2YgbWVtYmVyICE9PSBcInN0cmluZ1wiIHx8IC9bKj9bXFxde31dLy50ZXN0KG1lbWJlcikpIGNvbnRpbnVlO1xuICAgIGNvbnN0IHBhdGggPSBqb2luKHJvb3QsIG1lbWJlciwgXCJwYWNrYWdlLmpzb25cIik7XG4gICAgaWYgKCFleGlzdHNTeW5jKHBhdGgpKSBjb250aW51ZTtcbiAgICBjb25zdCBjYW5kaWRhdGUgPSByZWFkUmVjb3JkKHBhdGgpO1xuICAgIGlmIChjYW5kaWRhdGUubmFtZSA9PT0gbmFtZSkgcmV0dXJuIHNlcnZpY2VQYWNrYWdlKHBhdGgsIG5hbWUpO1xuICB9XG4gIHRocm93IG5ldyBFcnJvcihgY291bGQgbm90IHJlc29sdmUgaW5zdGFsbGVkIG9yIHdvcmtzcGFjZSBwYWNrYWdlOiAke25hbWV9YCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXJ2aWNlUGFja2FnZURlZmF1bHRzKHBrZzogU2VydmljZVBhY2thZ2UpOiB7XG4gIGlkOiBzdHJpbmc7XG4gIG5hbWU6IHN0cmluZztcbn0ge1xuICBjb25zdCBzZWdtZW50cyA9IHBrZy5uYW1lLnJlcGxhY2UoL15ALywgXCJcIikuc3BsaXQoXCIvXCIpO1xuICBjb25zdCByYXdOYW1lID0gc2VnbWVudHMuYXQoLTEpITtcbiAgY29uc3QgcmF3U2NvcGUgPSBzZWdtZW50cy5sZW5ndGggPiAxID8gc2VnbWVudHNbMF0hLnNwbGl0KFwiLVwiKVswXSEgOiBcIlwiO1xuICBjb25zdCBuYW1lID0gcmF3TmFtZS5yZXBsYWNlKC9eY2xpLS8sIFwiXCIpLnJlcGxhY2VBbGwoXCItXCIsIFwiIFwiKTtcbiAgcmV0dXJuIHtcbiAgICBpZDogcGtnLm5hbWVcbiAgICAgIC5yZXBsYWNlKC9eQC8sIFwiXCIpXG4gICAgICAucmVwbGFjZUFsbChcIi9cIiwgXCIuXCIpXG4gICAgICAucmVwbGFjZSgvW15hLXowLTkuXy1dKy9naSwgXCItXCIpLFxuICAgIG5hbWU6IFtyYXdTY29wZSwgbmFtZV0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oXCIgXCIpLFxuICB9O1xufVxuXG5mdW5jdGlvbiBsb2NhbE1hbmlmZXN0KHJlZmVyZW5jZTogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgbGV0IHBhdGg6IHN0cmluZztcbiAgaWYgKHJlZmVyZW5jZS5zdGFydHNXaXRoKFwiZmlsZTpcIikpIHtcbiAgICBwYXRoID0gZmlsZVVSTFRvUGF0aChyZWZlcmVuY2UpO1xuICB9IGVsc2UgaWYgKGlzQWJzb2x1dGUocmVmZXJlbmNlKSkge1xuICAgIHBhdGggPSByZWZlcmVuY2U7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBsZXQgY3VycmVudCA9IGV4aXN0c1N5bmMocGF0aCkgPyBkaXJuYW1lKHBhdGgpIDogcGF0aDtcbiAgd2hpbGUgKHRydWUpIHtcbiAgICBjb25zdCBtYW5pZmVzdCA9IGpvaW4oY3VycmVudCwgXCJwYWNrYWdlLmpzb25cIik7XG4gICAgaWYgKGV4aXN0c1N5bmMobWFuaWZlc3QpKSByZXR1cm4gbWFuaWZlc3Q7XG4gICAgY29uc3QgcGFyZW50ID0gZGlybmFtZShjdXJyZW50KTtcbiAgICBpZiAocGFyZW50ID09PSBjdXJyZW50KSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIGN1cnJlbnQgPSBwYXJlbnQ7XG4gIH1cbn1cblxuZnVuY3Rpb24gaW5zdGFsbGVkTWFuaWZlc3QobmFtZTogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gY3JlYXRlUmVxdWlyZShpbXBvcnQubWV0YS51cmwpLnJlc29sdmUoYCR7bmFtZX0vcGFja2FnZS5qc29uYCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaWYgKChlcnJvciBhcyBOb2RlSlMuRXJybm9FeGNlcHRpb24pLmNvZGUgPT09IFwiTU9EVUxFX05PVF9GT1VORFwiKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIHRocm93IGVycm9yO1xuICB9XG59XG5cbmZ1bmN0aW9uIHNlcnZpY2VQYWNrYWdlKG1hbmlmZXN0UGF0aDogc3RyaW5nLCBleHBlY3RlZE5hbWU/OiBzdHJpbmcpOiBTZXJ2aWNlUGFja2FnZSB7XG4gIGNvbnN0IG1hbmlmZXN0ID0gcmVhZFJlY29yZChtYW5pZmVzdFBhdGgpO1xuICBpZiAodHlwZW9mIG1hbmlmZXN0Lm5hbWUgIT09IFwic3RyaW5nXCIgfHwgIW1hbmlmZXN0Lm5hbWUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYHBhY2thZ2UgaGFzIG5vIG5hbWU6ICR7bWFuaWZlc3RQYXRofWApO1xuICB9XG4gIGlmIChleHBlY3RlZE5hbWUgJiYgbWFuaWZlc3QubmFtZSAhPT0gZXhwZWN0ZWROYW1lKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGByZXNvbHZlZCBwYWNrYWdlIG5hbWUgZG9lcyBub3QgbWF0Y2ggJHtleHBlY3RlZE5hbWV9OiAke21hbmlmZXN0UGF0aH1gKTtcbiAgfVxuICBpZiAodHlwZW9mIG1hbmlmZXN0LnZlcnNpb24gIT09IFwic3RyaW5nXCIgfHwgIW1hbmlmZXN0LnZlcnNpb24pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYHBhY2thZ2UgaGFzIG5vIHZlcnNpb246ICR7bWFuaWZlc3RQYXRofWApO1xuICB9XG4gIGNvbnN0IGRpcmVjdG9yeSA9IGRpcm5hbWUobWFuaWZlc3RQYXRoKTtcbiAgcmV0dXJuIHtcbiAgICBkaXJlY3RvcnksXG4gICAgbmFtZTogbWFuaWZlc3QubmFtZSxcbiAgICB2ZXJzaW9uOiBtYW5pZmVzdC52ZXJzaW9uLFxuICAgIGJpbihuYW1lKSB7XG4gICAgICByZXR1cm4gcmVzb2x2ZUJpbihkaXJlY3RvcnksIG1hbmlmZXN0LmJpbiwgbmFtZSk7XG4gICAgfSxcbiAgICBkZXBlbmRlbmNpZXMoKSB7XG4gICAgICBjb25zdCBkZXBlbmRlbmNpZXMgPSBvYmplY3QuaXNSZWNvcmQobWFuaWZlc3QuZGVwZW5kZW5jaWVzKVxuICAgICAgICA/IE9iamVjdC5rZXlzKG1hbmlmZXN0LmRlcGVuZGVuY2llcylcbiAgICAgICAgOiBbXTtcbiAgICAgIGNvbnN0IHJlcXVpcmUgPSBjcmVhdGVSZXF1aXJlKG1hbmlmZXN0UGF0aCk7XG4gICAgICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgICAgICBkZXBlbmRlbmNpZXMubWFwKChkZXBlbmRlbmN5KSA9PiB7XG4gICAgICAgICAgY29uc3QgcGF0aCA9IHJlcXVpcmUucmVzb2x2ZShgJHtkZXBlbmRlbmN5fS9wYWNrYWdlLmpzb25gKTtcbiAgICAgICAgICBjb25zdCByZXNvbHZlZCA9IHJlYWRSZWNvcmQocGF0aCk7XG4gICAgICAgICAgaWYgKHR5cGVvZiByZXNvbHZlZC52ZXJzaW9uICE9PSBcInN0cmluZ1wiIHx8ICFyZXNvbHZlZC52ZXJzaW9uKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGRlcGVuZGVuY3kgaGFzIG5vIHZlcnNpb246ICR7cGF0aH1gKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIFtkZXBlbmRlbmN5LCByZXNvbHZlZC52ZXJzaW9uXTtcbiAgICAgICAgfSksXG4gICAgICApO1xuICAgIH0sXG4gIH07XG59XG5cbmZ1bmN0aW9uIHJlc29sdmVCaW4oZGlyZWN0b3J5OiBzdHJpbmcsIHZhbHVlOiB1bmtub3duLCBuYW1lPzogc3RyaW5nKTogc3RyaW5nIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIikge1xuICAgIGlmIChuYW1lKSB0aHJvdyBuZXcgRXJyb3IoYHBhY2thZ2UgZXhwb3NlcyBvbmUgdW5uYW1lZCBiaW4sIG5vdCAke25hbWV9YCk7XG4gICAgcmV0dXJuIHJlc29sdmUoZGlyZWN0b3J5LCB2YWx1ZSk7XG4gIH1cbiAgaWYgKCFvYmplY3QuaXNSZWNvcmQodmFsdWUpKSB0aHJvdyBuZXcgRXJyb3IoXCJwYWNrYWdlIGhhcyBubyBiaW5cIik7XG4gIGlmIChuYW1lKSB7XG4gICAgY29uc3QgdGFyZ2V0ID0gdmFsdWVbbmFtZV07XG4gICAgaWYgKHR5cGVvZiB0YXJnZXQgIT09IFwic3RyaW5nXCIpIHRocm93IG5ldyBFcnJvcihgcGFja2FnZSBoYXMgbm8gYmluIG5hbWVkICR7bmFtZX1gKTtcbiAgICByZXR1cm4gcmVzb2x2ZShkaXJlY3RvcnksIHRhcmdldCk7XG4gIH1cbiAgY29uc3QgdGFyZ2V0cyA9IE9iamVjdC52YWx1ZXModmFsdWUpLmZpbHRlcihcbiAgICAodGFyZ2V0KTogdGFyZ2V0IGlzIHN0cmluZyA9PiB0eXBlb2YgdGFyZ2V0ID09PSBcInN0cmluZ1wiLFxuICApO1xuICBpZiAodGFyZ2V0cy5sZW5ndGggIT09IDEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJwYWNrYWdlIGhhcyBtdWx0aXBsZSBiaW5zOyBjb21tYW5kLmJpbk5hbWUgaXMgcmVxdWlyZWRcIik7XG4gIH1cbiAgcmV0dXJuIHJlc29sdmUoZGlyZWN0b3J5LCB0YXJnZXRzWzBdISk7XG59XG5cbmZ1bmN0aW9uIHJlYWRSZWNvcmQocGF0aDogc3RyaW5nKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICBjb25zdCB2YWx1ZTogdW5rbm93biA9IEpTT04ucGFyc2UocmVhZEZpbGVTeW5jKHBhdGgsIFwidXRmOFwiKSk7XG4gIGlmICghb2JqZWN0LmlzUmVjb3JkKHZhbHVlKSkgdGhyb3cgbmV3IEVycm9yKGBwYWNrYWdlIG1hbmlmZXN0IGlzIG5vdCBhbiBvYmplY3Q6ICR7cGF0aH1gKTtcbiAgcmV0dXJuIHZhbHVlO1xufVxuIl19
168
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiX3BhY2thZ2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvX3BhY2thZ2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDbkQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUM1QyxPQUFPLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQy9ELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFFekMsT0FBTyxLQUFLLFlBQVksTUFBTSwrQkFBK0IsQ0FBQztBQUM5RCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFVaEQsTUFBTSxVQUFVLHFCQUFxQixDQUNuQyxTQUFpQixFQUNqQixNQUFjLE9BQU8sQ0FBQyxHQUFHLEVBQUU7SUFFM0IsTUFBTSxLQUFLLEdBQUcsYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3ZDLElBQUksS0FBSztRQUFFLE9BQU8sY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRXhDLE1BQU0sSUFBSSxHQUFHLFNBQVMsQ0FBQztJQUN2QixNQUFNLFNBQVMsR0FBRyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMxQyxJQUFJLFNBQVM7UUFBRSxPQUFPLGNBQWMsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFFdEQsTUFBTSxJQUFJLEdBQUcsWUFBWSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNwQyxJQUFJLENBQUMsSUFBSTtRQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsOEJBQThCLElBQUksRUFBRSxDQUFDLENBQUM7SUFDakUsTUFBTSxRQUFRLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsY0FBYyxDQUFDLENBQUMsQ0FBQztJQUN4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QUM5QixNQUFNLEtBQUssR0FBWSxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUM5RCxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUM7UUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLHNDQUFzQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQzNGLE9BQU8sS0FBSyxDQUFDO0FBQ2YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGV4aXN0c1N5bmMsIHJlYWRGaWxlU3luYyB9IGZyb20gXCJub2RlOmZzXCI7XG5pbXBvcnQgeyBjcmVhdGVSZXF1aXJlIH0gZnJvbSBcIm5vZGU6bW9kdWxlXCI7XG5pbXBvcnQgeyBkaXJuYW1lLCBpc0Fic29sdXRlLCBqb2luLCByZXNvbHZlIH0gZnJvbSBcIm5vZGU6cGF0aFwiO1xuaW1wb3J0IHsgZmlsZVVSTFRvUGF0aCB9IGZyb20gXCJub2RlOnVybFwiO1xuXG5pbXBvcnQgKiBhcyBwcm9qZWN0VXRpbHMgZnJvbSBcIkBkYngtdG9vbHMvY29yZS9wcm9qZWN0LXV0aWxzXCI7XG5pbXBvcnQgeyBvYmplY3QgfSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtY29yZVwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFNlcnZpY2VQYWNrYWdlIHtcbiAgcmVhZG9ubHkgZGlyZWN0b3J5OiBzdHJpbmc7XG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcbiAgcmVhZG9ubHkgdmVyc2lvbjogc3RyaW5nO1xuICBiaW4obmFtZT86IHN0cmluZyk6IHN0cmluZztcbiAgZGVwZW5kZW5jaWVzKCk6IFJlYWRvbmx5PFJlY29yZDxzdHJpbmcsIHN0cmluZz4+O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZVNlcnZpY2VQYWNrYWdlKFxuICByZWZlcmVuY2U6IHN0cmluZyxcbiAgY3dkOiBzdHJpbmcgPSBwcm9jZXNzLmN3ZCgpLFxuKTogU2VydmljZVBhY2thZ2Uge1xuICBjb25zdCBsb2NhbCA9IGxvY2FsTWFuaWZlc3QocmVmZXJlbmNlKTtcbiAgaWYgKGxvY2FsKSByZXR1cm4gc2VydmljZVBhY2thZ2UobG9jYWwpO1xuXG4gIGNvbnN0IG5hbWUgPSByZWZlcmVuY2U7XG4gIGNvbnN0IGluc3RhbGxlZCA9IGluc3RhbGxlZE1hbmlmZXN0KG5hbWUpO1xuICBpZiAoaW5zdGFsbGVkKSByZXR1cm4gc2VydmljZVBhY2thZ2UoaW5zdGFsbGVkLCBuYW1lKTtcblxuICBjb25zdCByb290ID0gcHJvamVjdFV0aWxzLnJvb3QoY3dkKTtcbiAgaWYgKCFyb290KSB0aHJvdyBuZXcgRXJyb3IoYGNvdWxkIG5vdCByZXNvbHZlIHBhY2thZ2U6ICR7bmFtZX1gKTtcbiAgY29uc3QgbWFuaWZlc3QgPSByZWFkUmVjb3JkKGpvaW4ocm9vdCwgXCJwYWNrYWdlLmpzb25cIikpO1xuICBjb25zdCB3b3Jrc3BhY2VzID0gQXJyYXkuaXNBcnJheShtYW5pZmVzdC53b3Jrc3BhY2VzKSA/IG1hbmlmZXN0LndvcmtzcGFjZXMgOiBbXTtcbiAgZm9yIChjb25zdCBtZW1iZXIgb2Ygd29ya3NwYWNlcykge1xuICAgIGlmICh0eXBlb2YgbWVtYmVyICE9PSBcInN0cmluZ1wiIHx8IC9bKj9bXFxde31dLy50ZXN0KG1lbWJlcikpIGNvbnRpbnVlO1xuICAgIGNvbnN0IHBhdGggPSBqb2luKHJvb3QsIG1lbWJlciwgXCJwYWNrYWdlLmpzb25cIik7XG4gICAgaWYgKCFleGlzdHNTeW5jKHBhdGgpKSBjb250aW51ZTtcbiAgICBjb25zdCBjYW5kaWRhdGUgPSByZWFkUmVjb3JkKHBhdGgpO1xuICAgIGlmIChjYW5kaWRhdGUubmFtZSA9PT0gbmFtZSkgcmV0dXJuIHNlcnZpY2VQYWNrYWdlKHBhdGgsIG5hbWUpO1xuICB9XG4gIHRocm93IG5ldyBFcnJvcihgY291bGQgbm90IHJlc29sdmUgaW5zdGFsbGVkIG9yIHdvcmtzcGFjZSBwYWNrYWdlOiAke25hbWV9YCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXJ2aWNlUGFja2FnZURlZmF1bHRzKHBrZzogU2VydmljZVBhY2thZ2UpOiB7XG4gIGlkOiBzdHJpbmc7XG4gIG5hbWU6IHN0cmluZztcbn0ge1xuICBjb25zdCBzZWdtZW50cyA9IHBrZy5uYW1lLnJlcGxhY2UoL15ALywgXCJcIikuc3BsaXQoXCIvXCIpO1xuICBjb25zdCByYXdOYW1lID0gc2VnbWVudHMuYXQoLTEpITtcbiAgY29uc3QgcmF3U2NvcGUgPSBzZWdtZW50cy5sZW5ndGggPiAxID8gc2VnbWVudHNbMF0hLnNwbGl0KFwiLVwiKVswXSEgOiBcIlwiO1xuICBjb25zdCBuYW1lID0gcmF3TmFtZS5yZXBsYWNlKC9eY2xpLS8sIFwiXCIpLnJlcGxhY2VBbGwoXCItXCIsIFwiIFwiKTtcbiAgcmV0dXJuIHtcbiAgICBpZDogcGtnLm5hbWVcbiAgICAgIC5yZXBsYWNlKC9eQC8sIFwiXCIpXG4gICAgICAucmVwbGFjZUFsbChcIi9cIiwgXCIuXCIpXG4gICAgICAucmVwbGFjZSgvW15hLXowLTkuXy1dKy9naSwgXCItXCIpLFxuICAgIG5hbWU6IFtyYXdTY29wZSwgbmFtZV0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oXCIgXCIpLFxuICB9O1xufVxuXG5mdW5jdGlvbiBsb2NhbE1hbmlmZXN0KHJlZmVyZW5jZTogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgbGV0IHBhdGg6IHN0cmluZztcbiAgaWYgKHJlZmVyZW5jZS5zdGFydHNXaXRoKFwiZmlsZTpcIikpIHtcbiAgICBwYXRoID0gZmlsZVVSTFRvUGF0aChyZWZlcmVuY2UpO1xuICB9IGVsc2UgaWYgKGlzQWJzb2x1dGUocmVmZXJlbmNlKSkge1xuICAgIHBhdGggPSByZWZlcmVuY2U7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBsZXQgY3VycmVudCA9IGV4aXN0c1N5bmMocGF0aCkgPyBkaXJuYW1lKHBhdGgpIDogcGF0aDtcbiAgd2hpbGUgKHRydWUpIHtcbiAgICBjb25zdCBtYW5pZmVzdCA9IGpvaW4oY3VycmVudCwgXCJwYWNrYWdlLmpzb25cIik7XG4gICAgaWYgKGV4aXN0c1N5bmMobWFuaWZlc3QpKSByZXR1cm4gbWFuaWZlc3Q7XG4gICAgY29uc3QgcGFyZW50ID0gZGlybmFtZShjdXJyZW50KTtcbiAgICBpZiAocGFyZW50ID09PSBjdXJyZW50KSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIGN1cnJlbnQgPSBwYXJlbnQ7XG4gIH1cbn1cblxuZnVuY3Rpb24gaW5zdGFsbGVkTWFuaWZlc3QobmFtZTogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIHBhY2thZ2VNYW5pZmVzdChjcmVhdGVSZXF1aXJlKGltcG9ydC5tZXRhLnVybCksIG5hbWUpO1xufVxuXG5mdW5jdGlvbiBzZXJ2aWNlUGFja2FnZShtYW5pZmVzdFBhdGg6IHN0cmluZywgZXhwZWN0ZWROYW1lPzogc3RyaW5nKTogU2VydmljZVBhY2thZ2Uge1xuICBjb25zdCBtYW5pZmVzdCA9IHJlYWRSZWNvcmQobWFuaWZlc3RQYXRoKTtcbiAgaWYgKHR5cGVvZiBtYW5pZmVzdC5uYW1lICE9PSBcInN0cmluZ1wiIHx8ICFtYW5pZmVzdC5uYW1lKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBwYWNrYWdlIGhhcyBubyBuYW1lOiAke21hbmlmZXN0UGF0aH1gKTtcbiAgfVxuICBpZiAoZXhwZWN0ZWROYW1lICYmIG1hbmlmZXN0Lm5hbWUgIT09IGV4cGVjdGVkTmFtZSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgcmVzb2x2ZWQgcGFja2FnZSBuYW1lIGRvZXMgbm90IG1hdGNoICR7ZXhwZWN0ZWROYW1lfTogJHttYW5pZmVzdFBhdGh9YCk7XG4gIH1cbiAgaWYgKHR5cGVvZiBtYW5pZmVzdC52ZXJzaW9uICE9PSBcInN0cmluZ1wiIHx8ICFtYW5pZmVzdC52ZXJzaW9uKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBwYWNrYWdlIGhhcyBubyB2ZXJzaW9uOiAke21hbmlmZXN0UGF0aH1gKTtcbiAgfVxuICBjb25zdCBkaXJlY3RvcnkgPSBkaXJuYW1lKG1hbmlmZXN0UGF0aCk7XG4gIHJldHVybiB7XG4gICAgZGlyZWN0b3J5LFxuICAgIG5hbWU6IG1hbmlmZXN0Lm5hbWUsXG4gICAgdmVyc2lvbjogbWFuaWZlc3QudmVyc2lvbixcbiAgICBiaW4obmFtZSkge1xuICAgICAgcmV0dXJuIHJlc29sdmVCaW4oZGlyZWN0b3J5LCBtYW5pZmVzdC5iaW4sIG5hbWUpO1xuICAgIH0sXG4gICAgZGVwZW5kZW5jaWVzKCkge1xuICAgICAgY29uc3QgZGVwZW5kZW5jaWVzID0gb2JqZWN0LmlzUmVjb3JkKG1hbmlmZXN0LmRlcGVuZGVuY2llcylcbiAgICAgICAgPyBPYmplY3Qua2V5cyhtYW5pZmVzdC5kZXBlbmRlbmNpZXMpXG4gICAgICAgIDogW107XG4gICAgICBjb25zdCByZXF1aXJlID0gY3JlYXRlUmVxdWlyZShtYW5pZmVzdFBhdGgpO1xuICAgICAgcmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhcbiAgICAgICAgZGVwZW5kZW5jaWVzLm1hcCgoZGVwZW5kZW5jeSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHBhdGggPSBwYWNrYWdlTWFuaWZlc3QocmVxdWlyZSwgZGVwZW5kZW5jeSk7XG4gICAgICAgICAgaWYgKCFwYXRoKSB0aHJvdyBuZXcgRXJyb3IoYGNvdWxkIG5vdCByZXNvbHZlIGRlcGVuZGVuY3kgcGFja2FnZTogJHtkZXBlbmRlbmN5fWApO1xuICAgICAgICAgIGNvbnN0IHJlc29sdmVkID0gcmVhZFJlY29yZChwYXRoKTtcbiAgICAgICAgICBpZiAodHlwZW9mIHJlc29sdmVkLnZlcnNpb24gIT09IFwic3RyaW5nXCIgfHwgIXJlc29sdmVkLnZlcnNpb24pIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgZGVwZW5kZW5jeSBoYXMgbm8gdmVyc2lvbjogJHtwYXRofWApO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gW2RlcGVuZGVuY3ksIHJlc29sdmVkLnZlcnNpb25dO1xuICAgICAgICB9KSxcbiAgICAgICk7XG4gICAgfSxcbiAgfTtcbn1cblxuLyoqIFJlc29sdmUgYSBwYWNrYWdlIG1hbmlmZXN0IHdpdGhvdXQgcmVxdWlyaW5nIGl0cyB1bmV4cG9ydGVkIGBwYWNrYWdlLmpzb25gIHN1YnBhdGguICovXG5mdW5jdGlvbiBwYWNrYWdlTWFuaWZlc3QocmVxdWlyZTogTm9kZUpTLlJlcXVpcmUsIG5hbWU6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGZvciAoY29uc3Qgc3BlY2lmaWVyIG9mIFtuYW1lLCBgJHtuYW1lfS9wYWNrYWdlLmpzb25gXSkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBlbnRyeSA9IHJlcXVpcmUucmVzb2x2ZShzcGVjaWZpZXIpO1xuICAgICAgY29uc3QgbWFuaWZlc3QgPSBuYW1lZE1hbmlmZXN0KGVudHJ5LCBuYW1lKTtcbiAgICAgIGlmIChtYW5pZmVzdCkgcmV0dXJuIG1hbmlmZXN0O1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zdCBjb2RlID0gKGVycm9yIGFzIE5vZGVKUy5FcnJub0V4Y2VwdGlvbikuY29kZTtcbiAgICAgIGlmIChjb2RlICE9PSBcIk1PRFVMRV9OT1RfRk9VTkRcIiAmJiBjb2RlICE9PSBcIkVSUl9QQUNLQUdFX1BBVEhfTk9UX0VYUE9SVEVEXCIpIHRocm93IGVycm9yO1xuICAgIH1cbiAgfVxuICBmb3IgKGNvbnN0IGRpcmVjdG9yeSBvZiByZXF1aXJlLnJlc29sdmUucGF0aHMobmFtZSkgPz8gW10pIHtcbiAgICBjb25zdCBtYW5pZmVzdCA9IGpvaW4oZGlyZWN0b3J5LCBuYW1lLCBcInBhY2thZ2UuanNvblwiKTtcbiAgICBpZiAoZXhpc3RzU3luYyhtYW5pZmVzdCkgJiYgcmVhZFJlY29yZChtYW5pZmVzdCkubmFtZSA9PT0gbmFtZSkgcmV0dXJuIG1hbmlmZXN0O1xuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKiBXYWxrIGZyb20gYSByZXNvbHZlZCBwYWNrYWdlIGVudHJ5IHRvIHRoZSBuZWFyZXN0IG1hbmlmZXN0IHdpdGggdGhlIGV4cGVjdGVkIG5hbWUuICovXG5mdW5jdGlvbiBuYW1lZE1hbmlmZXN0KHBhdGg6IHN0cmluZywgbmFtZTogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgbGV0IGN1cnJlbnQgPSBkaXJuYW1lKHBhdGgpO1xuICB3aGlsZSAodHJ1ZSkge1xuICAgIGNvbnN0IG1hbmlmZXN0ID0gam9pbihjdXJyZW50LCBcInBhY2thZ2UuanNvblwiKTtcbiAgICBpZiAoZXhpc3RzU3luYyhtYW5pZmVzdCkgJiYgcmVhZFJlY29yZChtYW5pZmVzdCkubmFtZSA9PT0gbmFtZSkgcmV0dXJuIG1hbmlmZXN0O1xuICAgIGNvbnN0IHBhcmVudCA9IGRpcm5hbWUoY3VycmVudCk7XG4gICAgaWYgKHBhcmVudCA9PT0gY3VycmVudCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICBjdXJyZW50ID0gcGFyZW50O1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlc29sdmVCaW4oZGlyZWN0b3J5OiBzdHJpbmcsIHZhbHVlOiB1bmtub3duLCBuYW1lPzogc3RyaW5nKTogc3RyaW5nIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIikge1xuICAgIGlmIChuYW1lKSB0aHJvdyBuZXcgRXJyb3IoYHBhY2thZ2UgZXhwb3NlcyBvbmUgdW5uYW1lZCBiaW4sIG5vdCAke25hbWV9YCk7XG4gICAgcmV0dXJuIHJlc29sdmUoZGlyZWN0b3J5LCB2YWx1ZSk7XG4gIH1cbiAgaWYgKCFvYmplY3QuaXNSZWNvcmQodmFsdWUpKSB0aHJvdyBuZXcgRXJyb3IoXCJwYWNrYWdlIGhhcyBubyBiaW5cIik7XG4gIGlmIChuYW1lKSB7XG4gICAgY29uc3QgdGFyZ2V0ID0gdmFsdWVbbmFtZV07XG4gICAgaWYgKHR5cGVvZiB0YXJnZXQgIT09IFwic3RyaW5nXCIpIHRocm93IG5ldyBFcnJvcihgcGFja2FnZSBoYXMgbm8gYmluIG5hbWVkICR7bmFtZX1gKTtcbiAgICByZXR1cm4gcmVzb2x2ZShkaXJlY3RvcnksIHRhcmdldCk7XG4gIH1cbiAgY29uc3QgdGFyZ2V0cyA9IE9iamVjdC52YWx1ZXModmFsdWUpLmZpbHRlcihcbiAgICAodGFyZ2V0KTogdGFyZ2V0IGlzIHN0cmluZyA9PiB0eXBlb2YgdGFyZ2V0ID09PSBcInN0cmluZ1wiLFxuICApO1xuICBpZiAodGFyZ2V0cy5sZW5ndGggIT09IDEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJwYWNrYWdlIGhhcyBtdWx0aXBsZSBiaW5zOyBjb21tYW5kLmJpbk5hbWUgaXMgcmVxdWlyZWRcIik7XG4gIH1cbiAgcmV0dXJuIHJlc29sdmUoZGlyZWN0b3J5LCB0YXJnZXRzWzBdISk7XG59XG5cbmZ1bmN0aW9uIHJlYWRSZWNvcmQocGF0aDogc3RyaW5nKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICBjb25zdCB2YWx1ZTogdW5rbm93biA9IEpTT04ucGFyc2UocmVhZEZpbGVTeW5jKHBhdGgsIFwidXRmOFwiKSk7XG4gIGlmICghb2JqZWN0LmlzUmVjb3JkKHZhbHVlKSkgdGhyb3cgbmV3IEVycm9yKGBwYWNrYWdlIG1hbmlmZXN0IGlzIG5vdCBhbiBvYmplY3Q6ICR7cGF0aH1gKTtcbiAgcmV0dXJuIHZhbHVlO1xufVxuIl19
package/package.json CHANGED
@@ -23,8 +23,8 @@
23
23
  "typescript": "^5.9.3"
24
24
  },
25
25
  "dependencies": {
26
- "@dbx-tools/core": "^0.9.70",
27
- "@dbx-tools/shared-core": "^0.9.70",
26
+ "@dbx-tools/core": "^0.9.72",
27
+ "@dbx-tools/shared-core": "^0.9.72",
28
28
  "bun": "1.3.14",
29
29
  "commander": "^15.0.0",
30
30
  "systray2": "^2.1.4",
@@ -60,7 +60,7 @@
60
60
  "./package.json": "./package.json"
61
61
  }
62
62
  },
63
- "version": "0.9.70",
63
+ "version": "0.9.72",
64
64
  "types": "./lib/index.d.ts",
65
65
  "dbxToolsConfig": {
66
66
  "tags": [
package/src/_package.ts CHANGED
@@ -76,12 +76,7 @@ function localManifest(reference: string): string | undefined {
76
76
  }
77
77
 
78
78
  function installedManifest(name: string): string | undefined {
79
- try {
80
- return createRequire(import.meta.url).resolve(`${name}/package.json`);
81
- } catch (error) {
82
- if ((error as NodeJS.ErrnoException).code === "MODULE_NOT_FOUND") return undefined;
83
- throw error;
84
- }
79
+ return packageManifest(createRequire(import.meta.url), name);
85
80
  }
86
81
 
87
82
  function servicePackage(manifestPath: string, expectedName?: string): ServicePackage {
@@ -110,7 +105,8 @@ function servicePackage(manifestPath: string, expectedName?: string): ServicePac
110
105
  const require = createRequire(manifestPath);
111
106
  return Object.fromEntries(
112
107
  dependencies.map((dependency) => {
113
- const path = require.resolve(`${dependency}/package.json`);
108
+ const path = packageManifest(require, dependency);
109
+ if (!path) throw new Error(`could not resolve dependency package: ${dependency}`);
114
110
  const resolved = readRecord(path);
115
111
  if (typeof resolved.version !== "string" || !resolved.version) {
116
112
  throw new Error(`dependency has no version: ${path}`);
@@ -122,6 +118,37 @@ function servicePackage(manifestPath: string, expectedName?: string): ServicePac
122
118
  };
123
119
  }
124
120
 
121
+ /** Resolve a package manifest without requiring its unexported `package.json` subpath. */
122
+ function packageManifest(require: NodeJS.Require, name: string): string | undefined {
123
+ for (const specifier of [name, `${name}/package.json`]) {
124
+ try {
125
+ const entry = require.resolve(specifier);
126
+ const manifest = namedManifest(entry, name);
127
+ if (manifest) return manifest;
128
+ } catch (error) {
129
+ const code = (error as NodeJS.ErrnoException).code;
130
+ if (code !== "MODULE_NOT_FOUND" && code !== "ERR_PACKAGE_PATH_NOT_EXPORTED") throw error;
131
+ }
132
+ }
133
+ for (const directory of require.resolve.paths(name) ?? []) {
134
+ const manifest = join(directory, name, "package.json");
135
+ if (existsSync(manifest) && readRecord(manifest).name === name) return manifest;
136
+ }
137
+ return undefined;
138
+ }
139
+
140
+ /** Walk from a resolved package entry to the nearest manifest with the expected name. */
141
+ function namedManifest(path: string, name: string): string | undefined {
142
+ let current = dirname(path);
143
+ while (true) {
144
+ const manifest = join(current, "package.json");
145
+ if (existsSync(manifest) && readRecord(manifest).name === name) return manifest;
146
+ const parent = dirname(current);
147
+ if (parent === current) return undefined;
148
+ current = parent;
149
+ }
150
+ }
151
+
125
152
  function resolveBin(directory: string, value: unknown, name?: string): string {
126
153
  if (typeof value === "string") {
127
154
  if (name) throw new Error(`package exposes one unnamed bin, not ${name}`);