@dollhousemcp/mcp-server 2.0.40 → 2.0.41
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/CHANGELOG.md +8 -0
- package/dist/di/Container.d.ts.map +1 -1
- package/dist/di/Container.js +10 -7
- package/dist/elements/agents/AgentManager.d.ts +25 -6
- package/dist/elements/agents/AgentManager.d.ts.map +1 -1
- package/dist/elements/agents/AgentManager.js +127 -21
- package/dist/elements/base/BaseElementManager.d.ts +18 -2
- package/dist/elements/base/BaseElementManager.d.ts.map +1 -1
- package/dist/elements/base/BaseElementManager.js +36 -3
- package/dist/generated/version.d.ts +2 -2
- package/dist/generated/version.js +3 -3
- package/dist/handlers/ElementCRUDHandler.d.ts +36 -8
- package/dist/handlers/ElementCRUDHandler.d.ts.map +1 -1
- package/dist/handlers/ElementCRUDHandler.js +227 -96
- package/dist/handlers/mcp-aql/MCPAQLHandler.d.ts.map +1 -1
- package/dist/handlers/mcp-aql/MCPAQLHandler.js +3 -3
- package/dist/handlers/strategies/AgentActivationStrategy.d.ts.map +1 -1
- package/dist/handlers/strategies/AgentActivationStrategy.js +5 -2
- package/dist/handlers/strategies/ElementActivationStrategy.d.ts +2 -0
- package/dist/handlers/strategies/ElementActivationStrategy.d.ts.map +1 -1
- package/dist/handlers/strategies/ElementActivationStrategy.js +1 -1
- package/dist/index.d.ts +7 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/services/ActivationStore.d.ts +5 -4
- package/dist/services/ActivationStore.d.ts.map +1 -1
- package/dist/services/ActivationStore.js +35 -9
- package/dist/services/PolicyExportService.d.ts +8 -2
- package/dist/services/PolicyExportService.d.ts.map +1 -1
- package/dist/services/PolicyExportService.js +37 -6
- package/dist/storage/ElementStorageLayer.d.ts +3 -3
- package/dist/storage/ElementStorageLayer.d.ts.map +1 -1
- package/dist/storage/ElementStorageLayer.js +33 -7
- package/dist/storage/IStorageLayer.d.ts +8 -1
- package/dist/storage/IStorageLayer.d.ts.map +1 -1
- package/dist/storage/IStorageLayer.js +1 -1
- package/dist/storage/MemoryStorageLayer.d.ts +4 -3
- package/dist/storage/MemoryStorageLayer.d.ts.map +1 -1
- package/dist/storage/MemoryStorageLayer.js +43 -13
- package/dist/storage/types.d.ts +7 -0
- package/dist/storage/types.d.ts.map +1 -1
- package/dist/storage/types.js +17 -2
- package/oauth-helper.mjs +19 -26
- package/package.json +1 -1
- package/server.json +2 -2
|
@@ -18,8 +18,11 @@ export interface PolicyExportDeps {
|
|
|
18
18
|
getServerVersion: () => string;
|
|
19
19
|
}
|
|
20
20
|
export declare class PolicyExportService {
|
|
21
|
-
private deps;
|
|
22
|
-
|
|
21
|
+
private readonly deps;
|
|
22
|
+
private readonly policyDir;
|
|
23
|
+
private exportInFlight?;
|
|
24
|
+
private exportQueued;
|
|
25
|
+
constructor(deps: PolicyExportDeps, policyDir?: string);
|
|
23
26
|
/**
|
|
24
27
|
* Export current policy state to the bridge imports folder.
|
|
25
28
|
*
|
|
@@ -29,6 +32,9 @@ export declare class PolicyExportService {
|
|
|
29
32
|
* Skips silently if the bridge imports directory doesn't exist.
|
|
30
33
|
*/
|
|
31
34
|
exportPolicies(): Promise<void>;
|
|
35
|
+
private runExportLoop;
|
|
36
|
+
private drainExports;
|
|
37
|
+
private performExport;
|
|
32
38
|
private buildElementPolicies;
|
|
33
39
|
}
|
|
34
40
|
//# sourceMappingURL=PolicyExportService.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PolicyExportService.d.ts","sourceRoot":"","sources":["../../src/services/PolicyExportService.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAYH,MAAM,WAAW,gBAAgB;IAC/B,0BAA0B,EAAE,MAAM,OAAO,CAAC,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,CAAC,CAAC,CAAC;IACpH,gBAAgB,EAAE,MAAM,MAAM,CAAC;CAChC;AAUD,qBAAa,mBAAmB;
|
|
1
|
+
{"version":3,"file":"PolicyExportService.d.ts","sourceRoot":"","sources":["../../src/services/PolicyExportService.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAYH,MAAM,WAAW,gBAAgB;IAC/B,0BAA0B,EAAE,MAAM,OAAO,CAAC,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,CAAC,CAAC,CAAC;IACpH,gBAAgB,EAAE,MAAM,MAAM,CAAC;CAChC;AAUD,qBAAa,mBAAmB;IAK5B,OAAO,CAAC,QAAQ,CAAC,IAAI;IACrB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAL5B,OAAO,CAAC,cAAc,CAAC,CAAgB;IACvC,OAAO,CAAC,YAAY,CAAS;gBAGV,IAAI,EAAE,gBAAgB,EACtB,SAAS,GAAE,MAAmB;IAGjD;;;;;;;OAOG;IACH,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC;YAWjB,aAAa;YAiBb,YAAY;YAOZ,aAAa;IA8C3B,OAAO,CAAC,oBAAoB;CA+C7B"}
|
|
@@ -19,8 +19,12 @@ const POLICY_DIR = join(homedir(), '.dollhouse', 'bridge', 'imports', 'policies'
|
|
|
19
19
|
const POLICY_FILENAME = 'dollhousemcp-crude-policies.json';
|
|
20
20
|
export class PolicyExportService {
|
|
21
21
|
deps;
|
|
22
|
-
|
|
22
|
+
policyDir;
|
|
23
|
+
exportInFlight;
|
|
24
|
+
exportQueued = false;
|
|
25
|
+
constructor(deps, policyDir = POLICY_DIR) {
|
|
23
26
|
this.deps = deps;
|
|
27
|
+
this.policyDir = policyDir;
|
|
24
28
|
}
|
|
25
29
|
/**
|
|
26
30
|
* Export current policy state to the bridge imports folder.
|
|
@@ -30,13 +34,40 @@ export class PolicyExportService {
|
|
|
30
34
|
*
|
|
31
35
|
* Skips silently if the bridge imports directory doesn't exist.
|
|
32
36
|
*/
|
|
33
|
-
|
|
37
|
+
exportPolicies() {
|
|
34
38
|
if (!env.DOLLHOUSE_POLICY_EXPORT_ENABLED) {
|
|
35
|
-
return;
|
|
39
|
+
return Promise.resolve();
|
|
36
40
|
}
|
|
41
|
+
this.exportQueued = true;
|
|
42
|
+
this.exportInFlight ??= this.runExportLoop();
|
|
43
|
+
return this.exportInFlight;
|
|
44
|
+
}
|
|
45
|
+
async runExportLoop() {
|
|
46
|
+
try {
|
|
47
|
+
await this.drainExports();
|
|
48
|
+
}
|
|
49
|
+
finally {
|
|
50
|
+
this.exportInFlight = undefined;
|
|
51
|
+
// A request can arrive after drainExports() settles but before this
|
|
52
|
+
// continuation runs. Chain that trailing drain into the current promise
|
|
53
|
+
// so the request that queued it cannot resolve before its write finishes.
|
|
54
|
+
if (this.exportQueued) {
|
|
55
|
+
const trailing = this.runExportLoop();
|
|
56
|
+
this.exportInFlight = trailing;
|
|
57
|
+
await trailing;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
async drainExports() {
|
|
62
|
+
while (this.exportQueued) {
|
|
63
|
+
this.exportQueued = false;
|
|
64
|
+
await this.performExport();
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
async performExport() {
|
|
37
68
|
try {
|
|
38
69
|
// Check if bridge imports directory exists — skip if not
|
|
39
|
-
await access(
|
|
70
|
+
await access(this.policyDir);
|
|
40
71
|
}
|
|
41
72
|
catch {
|
|
42
73
|
// Bridge not installed or imports dir not created — skip silently
|
|
@@ -67,7 +98,7 @@ export class PolicyExportService {
|
|
|
67
98
|
element_policies: elementPolicies,
|
|
68
99
|
risk_scores: staticRules.risk_scores,
|
|
69
100
|
};
|
|
70
|
-
const filePath = join(
|
|
101
|
+
const filePath = join(this.policyDir, POLICY_FILENAME);
|
|
71
102
|
await writeFile(filePath, JSON.stringify(policy, null, 2), 'utf-8');
|
|
72
103
|
logger.info('[PolicyExportService] Policies exported', { filePath, elementCount: elementPolicies.active_element_count });
|
|
73
104
|
}
|
|
@@ -118,4 +149,4 @@ export class PolicyExportService {
|
|
|
118
149
|
};
|
|
119
150
|
}
|
|
120
151
|
}
|
|
121
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUG9saWN5RXhwb3J0U2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZXJ2aWNlcy9Qb2xpY3lFeHBvcnRTZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7O0dBVUc7QUFFSCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDakMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUNsQyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxvREFBb0QsQ0FBQztBQUN6RixPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDNUMsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRXZDLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxVQUFVLENBQUMsQ0FBQztBQUNsRixNQUFNLGVBQWUsR0FBRyxrQ0FBa0MsQ0FBQztBQWUzRCxNQUFNLE9BQU8sbUJBQW1CO0lBQ3RCLElBQUksQ0FBbUI7SUFFL0IsWUFBWSxJQUFzQjtRQUNoQyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztJQUNuQixDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNILEtBQUssQ0FBQyxjQUFjO1FBQ2xCLElBQUksQ0FBQyxHQUFHLENBQUMsK0JBQStCLEVBQUUsQ0FBQztZQUN6QyxPQUFPO1FBQ1QsQ0FBQztRQUVELElBQUksQ0FBQztZQUNILHlEQUF5RDtZQUN6RCxNQUFNLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUMzQixDQUFDO1FBQUMsTUFBTSxDQUFDO1lBQ1Asa0VBQWtFO1lBQ2xFLE9BQU87UUFDVCxDQUFDO1FBRUQsSUFBSSxDQUFDO1lBQ0gsTUFBTSxX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QUFZLENBQUMsQ0FBQztTQUNuRCxDQUFDO0lBQ0osQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBQb2xpY3lFeHBvcnRTZXJ2aWNlIC0gRXhwb3J0cyB0b29sIGNsYXNzaWZpY2F0aW9uIHBvbGljaWVzIGZvciBicmlkZ2UgY29uc3VtcHRpb25cbiAqXG4gKiBXcml0ZXMgYSBKU09OIHBvbGljeSBmaWxlIHRvIH4vLmRvbGxob3VzZS9icmlkZ2UvaW1wb3J0cy9wb2xpY2llcy8gc28gdGhlXG4gKiBEb2xsaG91c2VCcmlkZ2UgcGVybWlzc2lvbi1wcm9tcHQgc2VydmVyIGNhbiBldmFsdWF0ZSBwZXJtaXNzaW9ucyBsb2NhbGx5LlxuICpcbiAqIFdyaXRlLW9ubHk6IHB1Ymxpc2hlcyBhbmQgZm9yZ2V0cy4gU2tpcHMgc2lsZW50bHkgaWYgdGhlIGJyaWRnZSBmb2xkZXJcbiAqIGRvZXNuJ3QgZXhpc3QgKGJyaWRnZSBtYXkgbm90IGJlIGluc3RhbGxlZCkuXG4gKlxuICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vRG9sbGhvdXNlTUNQL21jcC1zZXJ2ZXItdjItcmVmYWN0b3IvaXNzdWVzLzc2MlxuICovXG5cbmltcG9ydCB7IHdyaXRlRmlsZSwgYWNjZXNzIH0gZnJvbSAnbm9kZTpmcy9wcm9taXNlcyc7XG5pbXBvcnQgeyBqb2luIH0gZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCB7IGhvbWVkaXIgfSBmcm9tICdub2RlOm9zJztcbmltcG9ydCB7IGdldFN0YXRpY1BvbGljeURhdGEgfSBmcm9tICcuLi9oYW5kbGVycy9tY3AtYXFsL3BvbGljaWVzL1Rvb2xDbGFzc2lmaWNhdGlvbi5qcyc7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICcuLi91dGlscy9sb2dnZXIuanMnO1xuaW1wb3J0IHsgZW52IH0gZnJvbSAnLi4vY29uZmlnL2Vudi5qcyc7XG5cbmNvbnN0IFBPTElDWV9ESVIgPSBqb2luKGhvbWVkaXIoKSwgJy5kb2xsaG91c2UnLCAnYnJpZGdlJywgJ2ltcG9ydHMnLCAncG9saWNpZXMnKTtcbmNvbnN0IFBPTElDWV9GSUxFTkFNRSA9ICdkb2xsaG91c2VtY3AtY3J1ZGUtcG9saWNpZXMuanNvbic7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUG9saWN5RXhwb3J0RGVwcyB7XG4gIGdldEFjdGl2ZUVsZW1lbnRzRm9yUG9saWN5OiAoKSA9PiBQcm9taXNlPEFycmF5PHsgdHlwZTogc3RyaW5nOyBuYW1lOiBzdHJpbmc7IG1ldGFkYXRhOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB9Pj47XG4gIGdldFNlcnZlclZlcnNpb246ICgpID0+IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIEVsZW1lbnRQb2xpY3lFbnRyeSB7XG4gIHR5cGU6IHN0cmluZztcbiAgbmFtZTogc3RyaW5nO1xuICBhbGxvd19wYXR0ZXJuczogc3RyaW5nW107XG4gIGNvbmZpcm1fcGF0dGVybnM6IHN0cmluZ1tdO1xuICBkZW55X3BhdHRlcm5zOiBzdHJpbmdbXTtcbn1cblxuZXhwb3J0IGNsYXNzIFBvbGljeUV4cG9ydFNlcnZpY2Uge1xuICBwcml2YXRlIGRlcHM6IFBvbGljeUV4cG9ydERlcHM7XG5cbiAgY29uc3RydWN0b3IoZGVwczogUG9saWN5RXhwb3J0RGVwcykge1xuICAgIHRoaXMuZGVwcyA9IGRlcHM7XG4gIH1cblxuICAvKipcbiAgICogRXhwb3J0IGN1cnJlbnQgcG9saWN5IHN0YXRlIHRvIHRoZSBicmlkZ2UgaW1wb3J0cyBmb2xkZXIuXG4gICAqXG4gICAqIEdhdGhlcnMgc3RhdGljIGNsYXNzaWZpY2F0aW9uIHJ1bGVzIGFuZCBhY3RpdmUgZWxlbWVudCBwb2xpY2llcyxcbiAgICogd3JpdGVzIGEgc2luZ2xlIEpTT04gZmlsZSBjb25mb3JtaW5nIHRvIGJyaWRnZSBwb2xpY3kgc2NoZW1hIHYxLjAuXG4gICAqXG4gICAqIFNraXBzIHNpbGVudGx5IGlmIHRoZSBicmlkZ2UgaW1wb3J0cyBkaXJlY3RvcnkgZG9lc24ndCBleGlzdC5cbiAgICovXG4gIGFzeW5jIGV4cG9ydFBvbGljaWVzKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghZW52LkRPTExIT1VTRV9QT0xJQ1lfRVhQT1JUX0VOQUJMRUQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgLy8gQ2hlY2sgaWYgYnJpZGdlIGltcG9ydHMgZGlyZWN0b3J5IGV4aXN0cyDigJQgc2tpcCBpZiBub3RcbiAgICAgIGF3YWl0IGFjY2VzcyhQT0xJQ1lfRElSKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIEJyaWRnZSBub3QgaW5zdGFsbGVkIG9yIGltcG9ydHMgZGlyIG5vdCBjcmVhdGVkIOKAlCBza2lwIHNpbGVudGx5XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHN0YXRpY1J1bGVzID0gZ2V0U3RhdGljUG9saWN5RGF0YSgpO1xuICAgICAgY29uc3QgYWN0aXZlRWxlbWVudHMgPSBhd2FpdCB0aGlzLmRlcHMuZ2V0QWN0aXZlRWxlbWVudHNGb3JQb2xpY3koKTtcbiAgICAgIGNvbnN0IHZlcnNpb24gPSB0aGlzLmRlcHMuZ2V0U2VydmVyVmVyc2lvbigpO1xuXG4gICAgICBjb25zdCBlbGVtZW50UG9saWNpZXMgPSB0aGlzLmJ1aWxkRWxlbWVudFBvbGljaWVzKGFjdGl2ZUVsZW1lbnRzKTtcblxuICAgICAgY29uc3QgcG9saWN5ID0ge1xuICAgICAgICBzY2hlbWFfdmVyc2lvbjogJzEuMCcsXG4gICAgICAgIHNlcnZlcjoge1xuICAgICAgICAgIG5hbWU6ICdEb2xsaG91c2VNQ1AtVjItUmVmYWN0b3IgQ1JVREUnLFxuICAgICAgICAgIHZlcnNpb24sXG4gICAgICAgIH0sXG4gICAgICAgIGV4cG9ydGVkX2F0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICAgIHN0YXRpY19ydWxlczoge1xuICAgICAgICAgIHNhZmVfdG9vbHM6IHN0YXRpY1J1bGVzLnNhZmVfdG9vbHMsXG4gICAgICAgICAgc2FmZV9iYXNoX3BhdHRlcm5zOiBzdGF0aWNSdWxlcy5zYWZlX2Jhc2hfcGF0dGVybnMsXG4gICAgICAgICAgZGFuZ2Vyb3VzX2Jhc2hfcGF0dGVybnM6IHN0YXRpY1J1bGVzLmRhbmdlcm91c19iYXNoX3BhdHRlcm5zLFxuICAgICAgICAgIGJsb2NrZWRfYmFzaF9wYXR0ZXJuczogc3RhdGljUnVsZXMuYmxvY2tlZF9iYXNoX3BhdHRlcm5zLFxuICAgICAgICAgIGlycmV2ZXJzaWJsZV9wYXR0ZXJuczogc3RhdGljUnVsZXMuaXJyZXZlcnNpYmxlX3BhdHRlcm5zLFxuICAgICAgICAgIHNlbnNpdGl2ZV9wYXRoX3ByZWZpeGVzOiBzdGF0aWNSdWxlcy5zZW5zaXRpdmVfcGF0aF9wcmVmaXhlcyxcbiAgICAgICAgICBnYXRla2VlcGVyX2Vzc2VudGlhbF9vcGVyYXRpb25zOiBzdGF0aWNSdWxlcy5nYXRla2VlcGVyX2Vzc2VudGlhbF9vcGVyYXRpb25zLFxuICAgICAgICAgIHNhZmVfbWNwX29wZXJhdGlvbnM6IHN0YXRpY1J1bGVzLnNhZmVfbWNwX29wZXJhdGlvbnMsXG4gICAgICAgIH0sXG4gICAgICAgIGVsZW1lbnRfcG9saWNpZXM6IGVsZW1lbnRQb2xpY2llcyxcbiAgICAgICAgcmlza19zY29yZXM6IHN0YXRpY1J1bGVzLnJpc2tfc2NvcmVzLFxuICAgICAgfTtcblxuICAgICAgY29uc3QgZmlsZVBhdGggPSBqb2luKFBPTElDWV9ESVIsIFBPTElDWV9GSUxFTkFNRSk7XG4gICAgICBhd2FpdCB3cml0ZUZpbGUoZmlsZVBhdGgsIEpTT04uc3RyaW5naWZ5KHBvbGljeSwgbnVsbCwgMiksICd1dGYtOCcpO1xuICAgICAgbG9nZ2VyLmluZm8oJ1tQb2xpY3lFeHBvcnRTZXJ2aWNlXSBQb2xpY2llcyBleHBvcnRlZCcsIHsgZmlsZVBhdGgsIGVsZW1lbnRDb3VudDogZWxlbWVudFBvbGljaWVzLmFjdGl2ZV9lbGVtZW50X2NvdW50IH0pO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgLy8gTm9uLWZhdGFsOiBsb2cgYW5kIGNvbnRpbnVlXG4gICAgICBsb2dnZXIud2FybignW1BvbGljeUV4cG9ydFNlcnZpY2VdIEZhaWxlZCB0byBleHBvcnQgcG9saWNpZXMnLCB7IGVycm9yOiAoZXJyIGFzIEVycm9yKS5tZXNzYWdlIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRFbGVtZW50UG9saWNpZXMoYWN0aXZlRWxlbWVudHM6IEFycmF5PHsgdHlwZTogc3RyaW5nOyBuYW1lOiBzdHJpbmc7IG1ldGFkYXRhOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB9Pikge1xuICAgIGNvbnN0IGVsZW1lbnRzOiBFbGVtZW50UG9saWN5RW50cnlbXSA9IFtdO1xuICAgIGNvbnN0IGNvbWJpbmVkQWxsb3c6IHN0cmluZ1tdID0gW107XG4gICAgY29uc3QgY29tYmluZWRDb25maXJtOiBzdHJpbmdbXSA9IFtdO1xuICAgIGNvbnN0IGNvbWJpbmVkRGVueTogc3RyaW5nW10gPSBbXTtcbiAgICBsZXQgZW5zZW1ibGVOYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgYWN0aXZlRWxlbWVudHMpIHtcbiAgICAgIGlmIChlbGVtZW50LnR5cGUgPT09ICdlbnNlbWJsZScpIHtcbiAgICAgICAgZW5zZW1ibGVOYW1lID0gZWxlbWVudC5uYW1lO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBnYXRla2VlcGVyID0gZWxlbWVudC5tZXRhZGF0YT8uZ2F0ZWtlZXBlciBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZDtcbiAgICAgIGNvbnN0IGV4dGVybmFsID0gZ2F0ZWtlZXBlcj8uZXh0ZXJuYWxSZXN0cmljdGlvbnMgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmRlZmluZWQ7XG5cbiAgICAgIGNvbnN0IGFsbG93UGF0dGVybnMgPSBBcnJheS5pc0FycmF5KGV4dGVybmFsPy5hbGxvd1BhdHRlcm5zKVxuICAgICAgICA/IChleHRlcm5hbC5hbGxvd1BhdHRlcm5zIGFzIHVua25vd25bXSkuZmlsdGVyKChwKTogcCBpcyBzdHJpbmcgPT4gdHlwZW9mIHAgPT09ICdzdHJpbmcnKVxuICAgICAgICA6IFtdO1xuICAgICAgY29uc3QgY29uZmlybVBhdHRlcm5zID0gQXJyYXkuaXNBcnJheShleHRlcm5hbD8uY29uZmlybVBhdHRlcm5zKVxuICAgICAgICA/IChleHRlcm5hbC5jb25maXJtUGF0dGVybnMgYXMgdW5rbm93bltdKS5maWx0ZXIoKHApOiBwIGlzIHN0cmluZyA9PiB0eXBlb2YgcCA9PT0gJ3N0cmluZycpXG4gICAgICAgIDogW107XG4gICAgICBjb25zdCBkZW55UGF0dGVybnMgPSBBcnJheS5pc0FycmF5KGV4dGVybmFsPy5kZW55UGF0dGVybnMpXG4gICAgICAgID8gKGV4dGVybmFsLmRlbnlQYXR0ZXJucyBhcyB1bmtub3duW10pLmZpbHRlcigocCk6IHAgaXMgc3RyaW5nID0+IHR5cGVvZiBwID09PSAnc3RyaW5nJylcbiAgICAgICAgOiBbXTtcblxuICAgICAgZWxlbWVudHMucHVzaCh7XG4gICAgICAgIHR5cGU6IGVsZW1lbnQudHlwZSxcbiAgICAgICAgbmFtZTogZWxlbWVudC5uYW1lLFxuICAgICAgICBhbGxvd19wYXR0ZXJuczogYWxsb3dQYXR0ZXJucyxcbiAgICAgICAgY29uZmlybV9wYXR0ZXJuczogY29uZmlybVBhdHRlcm5zLFxuICAgICAgICBkZW55X3BhdHRlcm5zOiBkZW55UGF0dGVybnMsXG4gICAgICB9KTtcblxuICAgICAgY29tYmluZWRBbGxvdy5wdXNoKC4uLmFsbG93UGF0dGVybnMpO1xuICAgICAgY29tYmluZWRDb25maXJtLnB1c2goLi4uY29uZmlybVBhdHRlcm5zKTtcbiAgICAgIGNvbWJpbmVkRGVueS5wdXNoKC4uLmRlbnlQYXR0ZXJucyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGFjdGl2ZV9lbGVtZW50X2NvdW50OiBlbGVtZW50cy5sZW5ndGgsXG4gICAgICAuLi4oZW5zZW1ibGVOYW1lID8geyBlbnNlbWJsZV9uYW1lOiBlbnNlbWJsZU5hbWUgfSA6IHt9KSxcbiAgICAgIGVsZW1lbnRzLFxuICAgICAgY29tYmluZWRfYWxsb3dfcGF0dGVybnM6IFsuLi5uZXcgU2V0KGNvbWJpbmVkQWxsb3cpXSxcbiAgICAgIGNvbWJpbmVkX2NvbmZpcm1fcGF0dGVybnM6IFsuLi5uZXcgU2V0KGNvbWJpbmVkQ29uZmlybSldLFxuICAgICAgY29tYmluZWRfZGVueV9wYXR0ZXJuczogWy4uLm5ldyBTZXQoY29tYmluZWREZW55KV0sXG4gICAgfTtcbiAgfVxufVxuIl19
|
|
152
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUG9saWN5RXhwb3J0U2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZXJ2aWNlcy9Qb2xpY3lFeHBvcnRTZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7O0dBVUc7QUFFSCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDakMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUNsQyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxvREFBb0QsQ0FBQztBQUN6RixPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDNUMsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRXZDLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxVQUFVLENBQUMsQ0FBQztBQUNsRixNQUFNLGVBQWUsR0FBRyxrQ0FBa0MsQ0FBQztBQWUzRCxNQUFNLE9BQU8sbUJBQW1CO0lBS1g7SUFDQTtJQUxYLGNBQWMsQ0FBaUI7SUFDL0IsWUFBWSxHQUFHLEtBQUssQ0FBQztJQUU3QixZQUNtQixJQUFzQixFQUN0QixZQUFvQixVQUFVO1FBRDlCLFNBQUksR0FBSixJQUFJLENBQWtCO1FBQ3RCLGNBQVMsR0FBVCxTQUFTLENBQXFCO0lBQzlDLENBQUM7SUFFSjs7Ozs7OztPQU9HO0lBQ0gsY0FBYztRQUNaLElBQUksQ0FBQyxHQUFHLENBQUMsK0JBQStCLEVBQUUsQ0FBQztZQUN6QyxPQUFPLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUMzQixDQUFDO1FBRUQsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7UUFDekIsSUFBSSxDQUFDLGNBQWMsS0FBSyxJ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O2dCQUN4RCxDQUFDLENBQUUsUUFBUSxDQUFDLFlBQTBCLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFlLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxRQUFRLENBQUM7Z0JBQ3hGLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFFUCxRQUFRLENBQUMsSUFBSSxDQUFDO2dCQUNaLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSTtnQkFDbEIsSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJO2dCQUNsQixjQUFjLEVBQUUsYUFBYTtnQkFDN0IsZ0JBQWdCLEVBQUUsZUFBZTtnQkFDakMsYUFBYSxFQUFFLFlBQVk7YUFDNUIsQ0FBQyxDQUFDO1lBRUgsYUFBYSxDQUFDLElBQUksQ0FBQyxHQUFHLGFBQWEsQ0FBQyxDQUFDO1lBQ3JDLGVBQWUsQ0FBQyxJQUFJLENBQUMsR0FBRyxlQUFlLENBQUMsQ0FBQztZQUN6QyxZQUFZLENBQUMsSUFBSSxDQUFDLEdBQUcsWUFBWSxDQUFDLENBQUM7UUFDckMsQ0FBQztRQUVELE9BQU87WUFDTCxvQkFBb0IsRUFBRSxRQUFRLENBQUMsTUFBTTtZQUNyQyxHQUFHLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ3hELFFBQVE7WUFDUix1QkFBdUIsRUFBRSxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDcEQseUJBQXlCLEVBQUUsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLGVBQWUsQ0FBQyxDQUFDO1lBQ3hELHNCQUFzQixFQUFFLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQztTQUNuRCxDQUFDO0lBQ0osQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBQb2xpY3lFeHBvcnRTZXJ2aWNlIC0gRXhwb3J0cyB0b29sIGNsYXNzaWZpY2F0aW9uIHBvbGljaWVzIGZvciBicmlkZ2UgY29uc3VtcHRpb25cbiAqXG4gKiBXcml0ZXMgYSBKU09OIHBvbGljeSBmaWxlIHRvIH4vLmRvbGxob3VzZS9icmlkZ2UvaW1wb3J0cy9wb2xpY2llcy8gc28gdGhlXG4gKiBEb2xsaG91c2VCcmlkZ2UgcGVybWlzc2lvbi1wcm9tcHQgc2VydmVyIGNhbiBldmFsdWF0ZSBwZXJtaXNzaW9ucyBsb2NhbGx5LlxuICpcbiAqIFdyaXRlLW9ubHk6IHB1Ymxpc2hlcyBhbmQgZm9yZ2V0cy4gU2tpcHMgc2lsZW50bHkgaWYgdGhlIGJyaWRnZSBmb2xkZXJcbiAqIGRvZXNuJ3QgZXhpc3QgKGJyaWRnZSBtYXkgbm90IGJlIGluc3RhbGxlZCkuXG4gKlxuICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vRG9sbGhvdXNlTUNQL21jcC1zZXJ2ZXItdjItcmVmYWN0b3IvaXNzdWVzLzc2MlxuICovXG5cbmltcG9ydCB7IHdyaXRlRmlsZSwgYWNjZXNzIH0gZnJvbSAnbm9kZTpmcy9wcm9taXNlcyc7XG5pbXBvcnQgeyBqb2luIH0gZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCB7IGhvbWVkaXIgfSBmcm9tICdub2RlOm9zJztcbmltcG9ydCB7IGdldFN0YXRpY1BvbGljeURhdGEgfSBmcm9tICcuLi9oYW5kbGVycy9tY3AtYXFsL3BvbGljaWVzL1Rvb2xDbGFzc2lmaWNhdGlvbi5qcyc7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICcuLi91dGlscy9sb2dnZXIuanMnO1xuaW1wb3J0IHsgZW52IH0gZnJvbSAnLi4vY29uZmlnL2Vudi5qcyc7XG5cbmNvbnN0IFBPTElDWV9ESVIgPSBqb2luKGhvbWVkaXIoKSwgJy5kb2xsaG91c2UnLCAnYnJpZGdlJywgJ2ltcG9ydHMnLCAncG9saWNpZXMnKTtcbmNvbnN0IFBPTElDWV9GSUxFTkFNRSA9ICdkb2xsaG91c2VtY3AtY3J1ZGUtcG9saWNpZXMuanNvbic7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUG9saWN5RXhwb3J0RGVwcyB7XG4gIGdldEFjdGl2ZUVsZW1lbnRzRm9yUG9saWN5OiAoKSA9PiBQcm9taXNlPEFycmF5PHsgdHlwZTogc3RyaW5nOyBuYW1lOiBzdHJpbmc7IG1ldGFkYXRhOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB9Pj47XG4gIGdldFNlcnZlclZlcnNpb246ICgpID0+IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIEVsZW1lbnRQb2xpY3lFbnRyeSB7XG4gIHR5cGU6IHN0cmluZztcbiAgbmFtZTogc3RyaW5nO1xuICBhbGxvd19wYXR0ZXJuczogc3RyaW5nW107XG4gIGNvbmZpcm1fcGF0dGVybnM6IHN0cmluZ1tdO1xuICBkZW55X3BhdHRlcm5zOiBzdHJpbmdbXTtcbn1cblxuZXhwb3J0IGNsYXNzIFBvbGljeUV4cG9ydFNlcnZpY2Uge1xuICBwcml2YXRlIGV4cG9ydEluRmxpZ2h0PzogUHJvbWlzZTx2b2lkPjtcbiAgcHJpdmF0ZSBleHBvcnRRdWV1ZWQgPSBmYWxzZTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRlcHM6IFBvbGljeUV4cG9ydERlcHMsXG4gICAgcHJpdmF0ZSByZWFkb25seSBwb2xpY3lEaXI6IHN0cmluZyA9IFBPTElDWV9ESVIsXG4gICkge31cblxuICAvKipcbiAgICogRXhwb3J0IGN1cnJlbnQgcG9saWN5IHN0YXRlIHRvIHRoZSBicmlkZ2UgaW1wb3J0cyBmb2xkZXIuXG4gICAqXG4gICAqIEdhdGhlcnMgc3RhdGljIGNsYXNzaWZpY2F0aW9uIHJ1bGVzIGFuZCBhY3RpdmUgZWxlbWVudCBwb2xpY2llcyxcbiAgICogd3JpdGVzIGEgc2luZ2xlIEpTT04gZmlsZSBjb25mb3JtaW5nIHRvIGJyaWRnZSBwb2xpY3kgc2NoZW1hIHYxLjAuXG4gICAqXG4gICAqIFNraXBzIHNpbGVudGx5IGlmIHRoZSBicmlkZ2UgaW1wb3J0cyBkaXJlY3RvcnkgZG9lc24ndCBleGlzdC5cbiAgICovXG4gIGV4cG9ydFBvbGljaWVzKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghZW52LkRPTExIT1VTRV9QT0xJQ1lfRVhQT1JUX0VOQUJMRUQpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICB9XG5cbiAgICB0aGlzLmV4cG9ydFF1ZXVlZCA9IHRydWU7XG4gICAgdGhpcy5leHBvcnRJbkZsaWdodCA/Pz0gdGhpcy5ydW5FeHBvcnRMb29wKCk7XG5cbiAgICByZXR1cm4gdGhpcy5leHBvcnRJbkZsaWdodDtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcnVuRXhwb3J0TG9vcCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5kcmFpbkV4cG9ydHMoKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy5leHBvcnRJbkZsaWdodCA9IHVuZGVmaW5lZDtcblxuICAgICAgLy8gQSByZXF1ZXN0IGNhbiBhcnJpdmUgYWZ0ZXIgZHJhaW5FeHBvcnRzKCkgc2V0dGxlcyBidXQgYmVmb3JlIHRoaXNcbiAgICAgIC8vIGNvbnRpbnVhdGlvbiBydW5zLiBDaGFpbiB0aGF0IHRyYWlsaW5nIGRyYWluIGludG8gdGhlIGN1cnJlbnQgcHJvbWlzZVxuICAgICAgLy8gc28gdGhlIHJlcXVlc3QgdGhhdCBxdWV1ZWQgaXQgY2Fubm90IHJlc29sdmUgYmVmb3JlIGl0cyB3cml0ZSBmaW5pc2hlcy5cbiAgICAgIGlmICh0aGlzLmV4cG9ydFF1ZXVlZCkge1xuICAgICAgICBjb25zdCB0cmFpbGluZyA9IHRoaXMucnVuRXhwb3J0TG9vcCgpO1xuICAgICAgICB0aGlzLmV4cG9ydEluRmxpZ2h0ID0gdHJhaWxpbmc7XG4gICAgICAgIGF3YWl0IHRyYWlsaW5nO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZHJhaW5FeHBvcnRzKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHdoaWxlICh0aGlzLmV4cG9ydFF1ZXVlZCkge1xuICAgICAgdGhpcy5leHBvcnRRdWV1ZWQgPSBmYWxzZTtcbiAgICAgIGF3YWl0IHRoaXMucGVyZm9ybUV4cG9ydCgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcGVyZm9ybUV4cG9ydCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgLy8gQ2hlY2sgaWYgYnJpZGdlIGltcG9ydHMgZGlyZWN0b3J5IGV4aXN0cyDigJQgc2tpcCBpZiBub3RcbiAgICAgIGF3YWl0IGFjY2Vzcyh0aGlzLnBvbGljeURpcik7XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyBCcmlkZ2Ugbm90IGluc3RhbGxlZCBvciBpbXBvcnRzIGRpciBub3QgY3JlYXRlZCDigJQgc2tpcCBzaWxlbnRseVxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBzdGF0aWNSdWxlcyA9IGdldFN0YXRpY1BvbGljeURhdGEoKTtcbiAgICAgIGNvbnN0IGFjdGl2ZUVsZW1lbnRzID0gYXdhaXQgdGhpcy5kZXBzLmdldEFjdGl2ZUVsZW1lbnRzRm9yUG9saWN5KCk7XG4gICAgICBjb25zdCB2ZXJzaW9uID0gdGhpcy5kZXBzLmdldFNlcnZlclZlcnNpb24oKTtcblxuICAgICAgY29uc3QgZWxlbWVudFBvbGljaWVzID0gdGhpcy5idWlsZEVsZW1lbnRQb2xpY2llcyhhY3RpdmVFbGVtZW50cyk7XG5cbiAgICAgIGNvbnN0IHBvbGljeSA9IHtcbiAgICAgICAgc2NoZW1hX3ZlcnNpb246ICcxLjAnLFxuICAgICAgICBzZXJ2ZXI6IHtcbiAgICAgICAgICBuYW1lOiAnRG9sbGhvdXNlTUNQLVYyLVJlZmFjdG9yIENSVURFJyxcbiAgICAgICAgICB2ZXJzaW9uLFxuICAgICAgICB9LFxuICAgICAgICBleHBvcnRlZF9hdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgICBzdGF0aWNfcnVsZXM6IHtcbiAgICAgICAgICBzYWZlX3Rvb2xzOiBzdGF0aWNSdWxlcy5zYWZlX3Rvb2xzLFxuICAgICAgICAgIHNhZmVfYmFzaF9wYXR0ZXJuczogc3RhdGljUnVsZXMuc2FmZV9iYXNoX3BhdHRlcm5zLFxuICAgICAgICAgIGRhbmdlcm91c19iYXNoX3BhdHRlcm5zOiBzdGF0aWNSdWxlcy5kYW5nZXJvdXNfYmFzaF9wYXR0ZXJucyxcbiAgICAgICAgICBibG9ja2VkX2Jhc2hfcGF0dGVybnM6IHN0YXRpY1J1bGVzLmJsb2NrZWRfYmFzaF9wYXR0ZXJucyxcbiAgICAgICAgICBpcnJldmVyc2libGVfcGF0dGVybnM6IHN0YXRpY1J1bGVzLmlycmV2ZXJzaWJsZV9wYXR0ZXJucyxcbiAgICAgICAgICBzZW5zaXRpdmVfcGF0aF9wcmVmaXhlczogc3RhdGljUnVsZXMuc2Vuc2l0aXZlX3BhdGhfcHJlZml4ZXMsXG4gICAgICAgICAgZ2F0ZWtlZXBlcl9lc3NlbnRpYWxfb3BlcmF0aW9uczogc3RhdGljUnVsZXMuZ2F0ZWtlZXBlcl9lc3NlbnRpYWxfb3BlcmF0aW9ucyxcbiAgICAgICAgICBzYWZlX21jcF9vcGVyYXRpb25zOiBzdGF0aWNSdWxlcy5zYWZlX21jcF9vcGVyYXRpb25zLFxuICAgICAgICB9LFxuICAgICAgICBlbGVtZW50X3BvbGljaWVzOiBlbGVtZW50UG9saWNpZXMsXG4gICAgICAgIHJpc2tfc2NvcmVzOiBzdGF0aWNSdWxlcy5yaXNrX3Njb3JlcyxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IGZpbGVQYXRoID0gam9pbih0aGlzLnBvbGljeURpciwgUE9MSUNZX0ZJTEVOQU1FKTtcbiAgICAgIGF3YWl0IHdyaXRlRmlsZShmaWxlUGF0aCwgSlNPTi5zdHJpbmdpZnkocG9saWN5LCBudWxsLCAyKSwgJ3V0Zi04Jyk7XG4gICAgICBsb2dnZXIuaW5mbygnW1BvbGljeUV4cG9ydFNlcnZpY2VdIFBvbGljaWVzIGV4cG9ydGVkJywgeyBmaWxlUGF0aCwgZWxlbWVudENvdW50OiBlbGVtZW50UG9saWNpZXMuYWN0aXZlX2VsZW1lbnRfY291bnQgfSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAvLyBOb24tZmF0YWw6IGxvZyBhbmQgY29udGludWVcbiAgICAgIGxvZ2dlci53YXJuKCdbUG9saWN5RXhwb3J0U2VydmljZV0gRmFpbGVkIHRvIGV4cG9ydCBwb2xpY2llcycsIHsgZXJyb3I6IChlcnIgYXMgRXJyb3IpLm1lc3NhZ2UgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBidWlsZEVsZW1lbnRQb2xpY2llcyhhY3RpdmVFbGVtZW50czogQXJyYXk8eyB0eXBlOiBzdHJpbmc7IG5hbWU6IHN0cmluZzsgbWV0YWRhdGE6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IH0+KSB7XG4gICAgY29uc3QgZWxlbWVudHM6IEVsZW1lbnRQb2xpY3lFbnRyeVtdID0gW107XG4gICAgY29uc3QgY29tYmluZWRBbGxvdzogc3RyaW5nW10gPSBbXTtcbiAgICBjb25zdCBjb21iaW5lZENvbmZpcm06IHN0cmluZ1tdID0gW107XG4gICAgY29uc3QgY29tYmluZWREZW55OiBzdHJpbmdbXSA9IFtdO1xuICAgIGxldCBlbnNlbWJsZU5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiBhY3RpdmVFbGVtZW50cykge1xuICAgICAgaWYgKGVsZW1lbnQudHlwZSA9PT0gJ2Vuc2VtYmxlJykge1xuICAgICAgICBlbnNlbWJsZU5hbWUgPSBlbGVtZW50Lm5hbWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGdhdGVrZWVwZXIgPSBlbGVtZW50Lm1ldGFkYXRhPy5nYXRla2VlcGVyIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkO1xuICAgICAgY29uc3QgZXh0ZXJuYWwgPSBnYXRla2VlcGVyPy5leHRlcm5hbFJlc3RyaWN0aW9ucyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZDtcblxuICAgICAgY29uc3QgYWxsb3dQYXR0ZXJucyA9IEFycmF5LmlzQXJyYXkoZXh0ZXJuYWw/LmFsbG93UGF0dGVybnMpXG4gICAgICAgID8gKGV4dGVybmFsLmFsbG93UGF0dGVybnMgYXMgdW5rbm93bltdKS5maWx0ZXIoKHApOiBwIGlzIHN0cmluZyA9PiB0eXBlb2YgcCA9PT0gJ3N0cmluZycpXG4gICAgICAgIDogW107XG4gICAgICBjb25zdCBjb25maXJtUGF0dGVybnMgPSBBcnJheS5pc0FycmF5KGV4dGVybmFsPy5jb25maXJtUGF0dGVybnMpXG4gICAgICAgID8gKGV4dGVybmFsLmNvbmZpcm1QYXR0ZXJucyBhcyB1bmtub3duW10pLmZpbHRlcigocCk6IHAgaXMgc3RyaW5nID0+IHR5cGVvZiBwID09PSAnc3RyaW5nJylcbiAgICAgICAgOiBbXTtcbiAgICAgIGNvbnN0IGRlbnlQYXR0ZXJucyA9IEFycmF5LmlzQXJyYXkoZXh0ZXJuYWw/LmRlbnlQYXR0ZXJucylcbiAgICAgICAgPyAoZXh0ZXJuYWwuZGVueVBhdHRlcm5zIGFzIHVua25vd25bXSkuZmlsdGVyKChwKTogcCBpcyBzdHJpbmcgPT4gdHlwZW9mIHAgPT09ICdzdHJpbmcnKVxuICAgICAgICA6IFtdO1xuXG4gICAgICBlbGVtZW50cy5wdXNoKHtcbiAgICAgICAgdHlwZTogZWxlbWVudC50eXBlLFxuICAgICAgICBuYW1lOiBlbGVtZW50Lm5hbWUsXG4gICAgICAgIGFsbG93X3BhdHRlcm5zOiBhbGxvd1BhdHRlcm5zLFxuICAgICAgICBjb25maXJtX3BhdHRlcm5zOiBjb25maXJtUGF0dGVybnMsXG4gICAgICAgIGRlbnlfcGF0dGVybnM6IGRlbnlQYXR0ZXJucyxcbiAgICAgIH0pO1xuXG4gICAgICBjb21iaW5lZEFsbG93LnB1c2goLi4uYWxsb3dQYXR0ZXJucyk7XG4gICAgICBjb21iaW5lZENvbmZpcm0ucHVzaCguLi5jb25maXJtUGF0dGVybnMpO1xuICAgICAgY29tYmluZWREZW55LnB1c2goLi4uZGVueVBhdHRlcm5zKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgYWN0aXZlX2VsZW1lbnRfY291bnQ6IGVsZW1lbnRzLmxlbmd0aCxcbiAgICAgIC4uLihlbnNlbWJsZU5hbWUgPyB7IGVuc2VtYmxlX25hbWU6IGVuc2VtYmxlTmFtZSB9IDoge30pLFxuICAgICAgZWxlbWVudHMsXG4gICAgICBjb21iaW5lZF9hbGxvd19wYXR0ZXJuczogWy4uLm5ldyBTZXQoY29tYmluZWRBbGxvdyldLFxuICAgICAgY29tYmluZWRfY29uZmlybV9wYXR0ZXJuczogWy4uLm5ldyBTZXQoY29tYmluZWRDb25maXJtKV0sXG4gICAgICBjb21iaW5lZF9kZW55X3BhdHRlcm5zOiBbLi4ubmV3IFNldChjb21iaW5lZERlbnkpXSxcbiAgICB9O1xuICB9XG59XG4iXX0=
|
|
@@ -5,8 +5,8 @@
|
|
|
5
5
|
* diff-based incremental index updates, and notifications from save/delete.
|
|
6
6
|
*/
|
|
7
7
|
import type { IStorageBackend } from './IStorageBackend.js';
|
|
8
|
-
import type { IStorageLayer } from './IStorageLayer.js';
|
|
9
|
-
import type
|
|
8
|
+
import type { IStorageLayer, StorageScanOptions } from './IStorageLayer.js';
|
|
9
|
+
import { type ElementIndexEntry, type ManifestDiffResult } from './types.js';
|
|
10
10
|
import type { FileOperationsService } from '../services/FileOperationsService.js';
|
|
11
11
|
export interface ElementStorageLayerOptions {
|
|
12
12
|
/** Absolute path to the element directory */
|
|
@@ -34,7 +34,7 @@ export declare class ElementStorageLayer implements IStorageLayer {
|
|
|
34
34
|
* - Deduplicates concurrent calls (returns same promise)
|
|
35
35
|
* - Updates index and manifest based on diff
|
|
36
36
|
*/
|
|
37
|
-
scan(): Promise<ManifestDiffResult>;
|
|
37
|
+
scan(options?: StorageScanOptions): Promise<ManifestDiffResult>;
|
|
38
38
|
/**
|
|
39
39
|
* Trigger scan and return all index entries.
|
|
40
40
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ElementStorageLayer.d.ts","sourceRoot":"","sources":["../../src/storage/ElementStorageLayer.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"ElementStorageLayer.d.ts","sourceRoot":"","sources":["../../src/storage/ElementStorageLayer.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,KAAK,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAC5E,OAAO,EAA4B,KAAK,iBAAiB,EAAE,KAAK,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAKvG,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,sCAAsC,CAAC;AAGlF,MAAM,WAAW,0BAA0B;IACzC,6CAA6C;IAC7C,UAAU,EAAE,MAAM,CAAC;IACnB,4CAA4C;IAC5C,aAAa,EAAE,MAAM,CAAC;IACtB,8DAA8D;IAC9D,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,wDAAwD;IACxD,cAAc,CAAC,EAAE,eAAe,CAAC;CAClC;AAID,qBAAa,mBAAoB,YAAW,aAAa;IACvD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAkB;IAC1C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAyB;IAClD,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAuB;IAC7C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAS;IACvC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAS;IAExC,OAAO,CAAC,iBAAiB,CAAK;IAC9B,OAAO,CAAC,cAAc,CAA4C;gBAGhE,qBAAqB,EAAE,qBAAqB,EAC5C,OAAO,EAAE,0BAA0B;IAarC;;;;;OAKG;IACG,IAAI,CAAC,OAAO,GAAE,kBAAuB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IA8CzE;;OAEG;IACG,aAAa,IAAI,OAAO,CAAC,iBAAiB,EAAE,CAAC;IAKnD;;OAEG;IACG,eAAe,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAK1C;;OAEG;IACH,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAK/C;;OAEG;IACH,gBAAgB,IAAI,OAAO;IAI3B;;;OAGG;IACG,WAAW,CAAC,YAAY,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA0B5E;;;OAGG;IACH,aAAa,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI;IAKzC;;OAEG;IACH,UAAU,IAAI,IAAI;IAIlB;;OAEG;IACH,KAAK,IAAI,IAAI;YAQC,WAAW;CA0E1B"}
|
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
*/
|
|
7
7
|
import * as path from 'path';
|
|
8
8
|
import { logger } from '../utils/logger.js';
|
|
9
|
+
import { mergeManifestDiffResults } from './types.js';
|
|
9
10
|
import { StorageManifest } from './StorageManifest.js';
|
|
10
11
|
import { MetadataIndex } from './MetadataIndex.js';
|
|
11
12
|
import { FrontmatterParser } from './FrontmatterParser.js';
|
|
@@ -38,22 +39,47 @@ export class ElementStorageLayer {
|
|
|
38
39
|
* - Deduplicates concurrent calls (returns same promise)
|
|
39
40
|
* - Updates index and manifest based on diff
|
|
40
41
|
*/
|
|
41
|
-
async scan() {
|
|
42
|
+
async scan(options = {}) {
|
|
43
|
+
let drainedDiff;
|
|
44
|
+
const existingScan = this.scanInProgress;
|
|
45
|
+
if (existingScan) {
|
|
46
|
+
if (!options.freshAfterInFlight) {
|
|
47
|
+
return existingScan;
|
|
48
|
+
}
|
|
49
|
+
// A security-sensitive caller must not inherit a directory snapshot that
|
|
50
|
+
// began before the caller. Drain it, then force a trailing disk scan.
|
|
51
|
+
try {
|
|
52
|
+
drainedDiff = await existingScan;
|
|
53
|
+
}
|
|
54
|
+
catch {
|
|
55
|
+
// The trailing scan gets an independent chance to recover.
|
|
56
|
+
}
|
|
57
|
+
if (this.scanInProgress === existingScan) {
|
|
58
|
+
this.scanInProgress = null;
|
|
59
|
+
}
|
|
60
|
+
this.invalidate();
|
|
61
|
+
}
|
|
42
62
|
const now = Date.now();
|
|
43
63
|
if (now - this.lastScanTimestamp < this.scanCooldownMs) {
|
|
44
64
|
logger.debug(`ElementStorageLayer.scan: COOLDOWN ACTIVE for ${path.basename(this.elementDir)} — skipping disk I/O (${this.scanCooldownMs - (now - this.lastScanTimestamp)}ms remaining)`);
|
|
45
65
|
return EMPTY_DIFF;
|
|
46
66
|
}
|
|
47
|
-
// Deduplicate
|
|
67
|
+
// Deduplicate a scan that started after the freshness wait above. Such a
|
|
68
|
+
// scan is new enough for this caller and can safely be shared.
|
|
48
69
|
if (this.scanInProgress) {
|
|
49
|
-
|
|
70
|
+
const result = await this.scanInProgress;
|
|
71
|
+
return drainedDiff ? mergeManifestDiffResults(drainedDiff, result) : result;
|
|
50
72
|
}
|
|
51
|
-
|
|
73
|
+
const scan = this.performScan();
|
|
74
|
+
this.scanInProgress = scan;
|
|
52
75
|
try {
|
|
53
|
-
|
|
76
|
+
const result = await scan;
|
|
77
|
+
return drainedDiff ? mergeManifestDiffResults(drainedDiff, result) : result;
|
|
54
78
|
}
|
|
55
79
|
finally {
|
|
56
|
-
this.scanInProgress
|
|
80
|
+
if (this.scanInProgress === scan) {
|
|
81
|
+
this.scanInProgress = null;
|
|
82
|
+
}
|
|
57
83
|
}
|
|
58
84
|
}
|
|
59
85
|
/**
|
|
@@ -202,4 +228,4 @@ export class ElementStorageLayer {
|
|
|
202
228
|
}
|
|
203
229
|
}
|
|
204
230
|
}
|
|
205
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRWxlbWVudFN0b3JhZ2VMYXllci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zdG9yYWdlL0VsZW1lbnRTdG9yYWdlTGF5ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7O0dBS0c7QUFFSCxPQUFPLEtBQUssSUFBSSxNQUFNLE1BQU0sQ0FBQztBQUM3QixPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFJNUMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNuRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUMzRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUU3RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQWE5RSxNQUFNLFVBQVUsR0FBdUIsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFLENBQUM7QUFFL0YsTUFBTSxPQUFPLG1CQUFtQjtJQUNiLE9BQU8sQ0FBa0I7SUFDekIsUUFBUSxHQUFHLElBQUksZUFBZSxFQUFFLENBQUM7SUFDakMsS0FBSyxHQUFHLElBQUksYUFBYSxFQUFFLENBQUM7SUFDNUIsVUFBVSxDQUFTO0lBQ25CLGFBQWEsQ0FBUztJQUN0QixjQUFjLENBQVM7SUFFaEMsaUJBQWlCLEdBQUcsQ0FBQyxDQUFDO0lBQ3RCLGNBQWMsR0FBdUMsSUFBSSxDQUFDO0lBRWxFLFlBQ0UscUJBQTRDLEVBQzVDLE9BQW1DO1FBRW5DLElBQUksQ0FBQyxVQUFVLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQztRQUNyQyxJQUFJLENBQUMsYUFBYSxHQUFHLE9BQU8sQ0FBQyxhQUFhLENBQUM7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O2dCQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7b0JBQ2YsK0NBQStDO29CQUMvQyxNQUFNLENBQUMsS0FBSyxDQUFDLHdDQUF3QyxPQUFPLEVBQUUsRUFBRTt3QkFDOUQsS0FBSyxFQUFFLEtBQUssWUFBWSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7cUJBQzlELENBQUMsQ0FBQztnQkFDTCxDQUFDO1lBQ0gsQ0FBQyxDQUFDLENBQ0gsQ0FBQztZQUVGLG9DQUFvQztZQUNwQyxLQUFLLE1BQU0sT0FBTyxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFDbkMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDN0IsQ0FBQztZQUVELG1DQUFtQztZQUNuQyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM1QixJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBRXBDLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixNQUFNLENBQUMsS0FBSyxDQUFDLHdDQUF3QyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQzlELElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyx1QkFBdUI7WUFDNUQsT0FBTyxVQUFVLENBQUM7UUFDcEIsQ0FBQztJQUNILENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogRWxlbWVudFN0b3JhZ2VMYXllciAtIENvb3JkaW5hdGVzIGluZGV4LCBtYW5pZmVzdCwgYW5kIGJhY2tlbmQgZm9yIGNhY2hlLWF3YXJlIGxpc3RpbmcuXG4gKlxuICogT3ducyB0aGUgc2NhbiBsaWZlY3ljbGU6IGNvb2xkb3duIGVuZm9yY2VtZW50LCBjb25jdXJyZW50IGNhbGwgZGVkdXBsaWNhdGlvbixcbiAqIGRpZmYtYmFzZWQgaW5jcmVtZW50YWwgaW5kZXggdXBkYXRlcywgYW5kIG5vdGlmaWNhdGlvbnMgZnJvbSBzYXZlL2RlbGV0ZS5cbiAqL1xuXG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnLi4vdXRpbHMvbG9nZ2VyLmpzJztcbmltcG9ydCB0eXBlIHsgSVN0b3JhZ2VCYWNrZW5kIH0gZnJvbSAnLi9JU3RvcmFnZUJhY2tlbmQuanMnO1xuaW1wb3J0IHR5cGUgeyBJU3RvcmFnZUxheWVyIH0gZnJvbSAnLi9JU3RvcmFnZUxheWVyLmpzJztcbmltcG9ydCB0eXBlIHsgRWxlbWVudEluZGV4RW50cnksIE1hbmlmZXN0RGlmZlJlc3VsdCB9IGZyb20gJy4vdHlwZXMuanMnO1xuaW1wb3J0IHsgU3RvcmFnZU1hbmlmZXN0IH0gZnJvbSAnLi9TdG9yYWdlTWFuaWZlc3QuanMnO1xuaW1wb3J0IHsgTWV0YWRhdGFJbmRleCB9IGZyb20gJy4vTWV0YWRhdGFJbmRleC5qcyc7XG5pbXBvcnQgeyBGcm9udG1hdHRlclBhcnNlciB9IGZyb20gJy4vRnJvbnRtYXR0ZXJQYXJzZXIuanMnO1xuaW1wb3J0IHsgRmlsZVN0b3JhZ2VCYWNrZW5kIH0gZnJvbSAnLi9GaWxlU3RvcmFnZUJhY2tlbmQuanMnO1xuaW1wb3J0IHR5cGUgeyBGaWxlT3BlcmF0aW9uc1NlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9GaWxlT3BlcmF0aW9uc1NlcnZpY2UuanMnO1xuaW1wb3J0IHsgVW5pY29kZVZhbGlkYXRvciB9IGZyb20gJy4uL3NlY3VyaXR5L3ZhbGlkYXRvcnMvdW5pY29kZVZhbGlkYXRvci5qcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRWxlbWVudFN0b3JhZ2VMYXllck9wdGlvbnMge1xuICAvKiogQWJzb2x1dGUgcGF0aCB0byB0aGUgZWxlbWVudCBkaXJlY3RvcnkgKi9cbiAgZWxlbWVudERpcjogc3RyaW5nO1xuICAvKiogRmlsZSBleHRlbnNpb24gdG8gZmlsdGVyIChlLmcuICcubWQnKSAqL1xuICBmaWxlRXh0ZW5zaW9uOiBzdHJpbmc7XG4gIC8qKiBNaW5pbXVtIG1pbGxpc2Vjb25kcyBiZXR3ZWVuIGZ1bGwgc2NhbnMgKGRlZmF1bHQ6IDEwMDApICovXG4gIHNjYW5Db29sZG93bk1zPzogbnVtYmVyO1xuICAvKiogT3ZlcnJpZGUgdGhlIHN0b3JhZ2UgYmFja2VuZCAodXNlZnVsIGZvciB0ZXN0aW5nKSAqL1xuICBzdG9yYWdlQmFja2VuZD86IElTdG9yYWdlQmFja2VuZDtcbn1cblxuY29uc3QgRU1QVFlfRElGRjogTWFuaWZlc3REaWZmUmVzdWx0ID0geyBhZGRlZDogW10sIG1vZGlmaWVkOiBbXSwgcmVtb3ZlZDogW10sIHVuY2hhbmdlZDogW10gfTtcblxuZXhwb3J0IGNsYXNzIEVsZW1lbnRTdG9yYWdlTGF5ZXIgaW1wbGVtZW50cyBJU3RvcmFnZUxheWVyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBiYWNrZW5kOiBJU3RvcmFnZUJhY2tlbmQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgbWFuaWZlc3QgPSBuZXcgU3RvcmFnZU1hbmlmZXN0KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgaW5kZXggPSBuZXcgTWV0YWRhdGFJbmRleCgpO1xuICBwcml2YXRlIHJlYWRvbmx5IGVsZW1lbnREaXI6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBmaWxlRXh0ZW5zaW9uOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgc2NhbkNvb2xkb3duTXM6IG51bWJlcjtcblxuICBwcml2YXRlIGxhc3RTY2FuVGltZXN0YW1wID0gMDtcbiAgcHJpdmF0ZSBzY2FuSW5Qcm9ncmVzczogUHJvbWlzZTxNYW5pZmVzdERpZmZSZXN1bHQ+IHwgbnVsbCA9IG51bGw7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgZmlsZU9wZXJhdGlvbnNTZXJ2aWNlOiBGaWxlT3BlcmF0aW9uc1NlcnZpY2UsXG4gICAgb3B0aW9uczogRWxlbWVudFN0b3JhZ2VMYXllck9wdGlvbnNcbiAgKSB7XG4gICAgdGhpcy5lbGVtZW50RGlyID0gb3B0aW9ucy5lbGVtZW50RGlyO1xuICAgIHRoaXMuZmlsZUV4dGVuc2lvbiA9IG9wdGlvbnMuZmlsZUV4dGVuc2lvbjtcbiAgICB0aGlzLnNjYW5Db29sZG93bk1zID0gb3B0aW9ucy5zY2FuQ29vbGRvd25NcyA/PyAxMDAwO1xuXG4gICAgaWYgKG9wdGlvbnMuc3RvcmFnZUJhY2tlbmQpIHtcbiAgICAgIHRoaXMuYmFja2VuZCA9IG9wdGlvbnMuc3RvcmFnZUJhY2tlbmQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYmFja2VuZCA9IG5ldyBGaWxlU3RvcmFnZUJhY2tlbmQoZmlsZU9wZXJhdGlvbnNTZXJ2aWNlKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2NhbiB0aGUgZWxlbWVudCBkaXJlY3RvcnkgZm9yIGNoYW5nZXMuXG4gICAqIC0gTm8tb3AgaWYgd2l0aGluIGNvb2xkb3duIHBlcmlvZCAocmV0dXJucyBlbXB0eSBkaWZmKVxuICAgKiAtIERlZHVwbGljYXRlcyBjb25jdXJyZW50IGNhbGxzIChyZXR1cm5zIHNhbWUgcHJvbWlzZSlcbiAgICogLSBVcGRhdGVzIGluZGV4IGFuZCBtYW5pZmVzdCBiYXNlZCBvbiBkaWZmXG4gICAqL1xuICBhc3luYyBzY2FuKCk6IFByb21pc2U8TWFuaWZlc3REaWZmUmVzdWx0PiB7XG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICBpZiAobm93IC0gdGhpcy5sYXN0U2NhblRpbWVzdGFtcCA8IHRoaXMuc2NhbkNvb2xkb3duTXMpIHtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhgRWxlbWVudFN0b3JhZ2VMYXllci5zY2FuOiBDT09MRE9XTiBBQ1RJVkUgZm9yICR7cGF0aC5iYXNlbmFtZSh0aGlzLmVsZW1lbnREaXIpfSDigJQgc2tpcHBpbmcgZGlzayBJL08gKCR7dGhpcy5zY2FuQ29vbGRvd25NcyAtIChub3cgLSB0aGlzLmxhc3RTY2FuVGltZXN0YW1wKX1tcyByZW1haW5pbmcpYCk7XG4gICAgICByZXR1cm4gRU1QVFlfRElGRjtcbiAgICB9XG5cbiAgICAvLyBEZWR1cGxpY2F0ZSBjb25jdXJyZW50IHNjYW5zXG4gICAgaWYgKHRoaXMuc2NhbkluUHJvZ3Jlc3MpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjYW5JblByb2dyZXNzO1xuICAgIH1cblxuICAgIHRoaXMuc2NhbkluUHJvZ3Jlc3MgPSB0aGlzLnBlcmZvcm1TY2FuKCk7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLnNjYW5JblByb2dyZXNzO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLnNjYW5JblByb2dyZXNzID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVHJpZ2dlciBzY2FuIGFuZCByZXR1cm4gYWxsIGluZGV4IGVudHJpZXMuXG4gICAqL1xuICBhc3luYyBsaXN0U3VtbWFyaWVzKCk6IFByb21pc2U8RWxlbWVudEluZGV4RW50cnlbXT4ge1xuICAgIGF3YWl0IHRoaXMuc2NhbigpO1xuICAgIHJldHVybiB0aGlzLmluZGV4LmdldEFsbCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRyaWdnZXIgc2NhbiBhbmQgcmV0dXJuIGFsbCBpbmRleGVkIGZpbGUgcGF0aHMuXG4gICAqL1xuICBhc3luYyBnZXRJbmRleGVkUGF0aHMoKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICAgIGF3YWl0IHRoaXMuc2NhbigpO1xuICAgIHJldHVybiB0aGlzLmluZGV4LmdldFBhdGhzKCk7XG4gIH1cblxuICAvKipcbiAgICogTygxKSBuYW1lLXRvLXBhdGggbG9va3VwIGZyb20gdGhlIGluZGV4LiBEb2VzIG5vdCB0cmlnZ2VyIGEgc2Nhbi5cbiAgICovXG4gIGdldFBhdGhCeU5hbWUobmFtZTogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBub3JtYWxpemVkTmFtZSA9IFVuaWNvZGVWYWxpZGF0b3Iubm9ybWFsaXplKG5hbWUpLm5vcm1hbGl6ZWRDb250ZW50O1xuICAgIHJldHVybiB0aGlzLmluZGV4LmdldFBhdGhCeU5hbWUobm9ybWFsaXplZE5hbWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdHJ1ZSBpZiBhdCBsZWFzdCBvbmUgc2NhbiBoYXMgY29tcGxldGVkIChpbmRleCBpcyBhdXRob3JpdGF0aXZlKS5cbiAgICovXG4gIGhhc0NvbXBsZXRlZFNjYW4oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMubGFzdFNjYW5UaW1lc3RhbXAgPiAwO1xuICB9XG5cbiAgLyoqXG4gICAqIE5vdGlmeSB0aGUgc3RvcmFnZSBsYXllciB0aGF0IGEgZmlsZSB3YXMgc2F2ZWQuXG4gICAqIFJlLXN0YXRzIGFuZCByZS1wYXJzZXMgdGhlIGZpbGUgdG8gdXBkYXRlIGluZGV4L21hbmlmZXN0LlxuICAgKi9cbiAgYXN5bmMgbm90aWZ5U2F2ZWQocmVsYXRpdmVQYXRoOiBzdHJpbmcsIGFic29sdXRlUGF0aDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IG1ldGEgPSBhd2FpdCB0aGlzLmJhY2tlbmQuc3RhdChhYnNvbHV0ZVBhdGgpO1xuICAgICAgY29uc3QgY29udGVudCA9IGF3YWl0IHRoaXMuYmFja2VuZC5yZWFkRmlsZShhYnNvbHV0ZVBhdGgpO1xuICAgICAgY29uc3QgZm0gPSBGcm9udG1hdHRlclBhcnNlci5leHRyYWN0TWV0YWRhdGEoY29udGVudCk7XG5cbiAgICAgIHRoaXMuaW5kZXguc2V0KHtcbiAgICAgICAgZmlsZVBhdGg6IHJlbGF0aXZlUGF0aCxcbiAgICAgICAgbmFtZTogZm0ubmFtZSxcbiAgICAgICAgZGVzY3JpcHRpb246IGZtLmRlc2NyaXB0aW9uLFxuICAgICAgICB2ZXJzaW9uOiBmbS52ZXJzaW9uLFxuICAgICAgICBhdXRob3I6IGZtLmF1dGhvcixcbiAgICAgICAgdGFnczogZm0udGFncyxcbiAgICAgICAgbXRpbWVNczogbWV0YS5tdGltZU1zLFxuICAgICAgICBzaXplQnl0ZXM6IG1ldGEuc2l6ZUJ5dGVzLFxuICAgICAgfSk7XG4gICAgICB0aGlzLm1hbmlmZXN0LnNldChyZWxhdGl2ZVBhdGgsIG1ldGEubXRpbWVNcyk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci5kZWJ1ZygnRWxlbWVudFN0b3JhZ2VMYXllci5ub3RpZnlTYXZlZCBmYWlsZWQsIGludmFsaWRhdGluZycsIHtcbiAgICAgICAgcmVsYXRpdmVQYXRoLFxuICAgICAgICBlcnJvcjogZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpLFxuICAgICAgfSk7XG4gICAgICB0aGlzLmludmFsaWRhdGUoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTm90aWZ5IHRoZSBzdG9yYWdlIGxheWVyIHRoYXQgYSBmaWxlIHdhcyBkZWxldGVkLlxuICAgKiBSZW1vdmVzIHRoZSBlbnRyeSBmcm9tIGluZGV4IGFuZCBtYW5pZmVzdC5cbiAgICovXG4gIG5vdGlmeURlbGV0ZWQocmVsYXRpdmVQYXRoOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLmluZGV4LnJlbW92ZShyZWxhdGl2ZVBhdGgpO1xuICAgIHRoaXMubWFuaWZlc3QucmVtb3ZlKHJlbGF0aXZlUGF0aCk7XG4gIH1cblxuICAvKipcbiAgICogRm9yY2UgdGhlIG5leHQgc2NhbigpIHRvIGhpdCBkaXNrIGJ5IHJlc2V0dGluZyB0aGUgY29vbGRvd24gdGltZXIuXG4gICAqL1xuICBpbnZhbGlkYXRlKCk6IHZvaWQge1xuICAgIHRoaXMubGFzdFNjYW5UaW1lc3RhbXAgPSAwO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc2V0IGFsbCBzdGF0ZSAoaW5kZXgsIG1hbmlmZXN0LCBjb29sZG93bikuXG4gICAqL1xuICBjbGVhcigpOiB2b2lkIHtcbiAgICB0aGlzLmluZGV4LmNsZWFyKCk7XG4gICAgdGhpcy5tYW5pZmVzdC5jbGVhcigpO1xuICAgIHRoaXMubGFzdFNjYW5UaW1lc3RhbXAgPSAwO1xuICB9XG5cbiAgLy8gLS0tLSBwcml2YXRlIC0tLS1cblxuICBwcml2YXRlIGFzeW5jIHBlcmZvcm1TY2FuKCk6IFByb21pc2U8TWFuaWZlc3REaWZmUmVzdWx0PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGV4aXN0cyA9IGF3YWl0IHRoaXMuYmFja2VuZC5kaXJlY3RvcnlFeGlzdHModGhpcy5lbGVtZW50RGlyKTtcbiAgICAgIGlmICghZXhpc3RzKSB7XG4gICAgICAgIC8vIERpcmVjdG9yeSBkb2Vzbid0IGV4aXN0IOKAlCBjbGVhciBldmVyeXRoaW5nIGFuZCByZXR1cm5cbiAgICAgICAgY29uc3QgcmVtb3ZlZFBhdGhzID0gdGhpcy5pbmRleC5nZXRQYXRocygpO1xuICAgICAgICB0aGlzLmluZGV4LmNsZWFyKCk7XG4gICAgICAgIHRoaXMubWFuaWZlc3QuY2xlYXIoKTtcbiAgICAgICAgdGhpcy5sYXN0U2NhblRpbWVzdGFtcCA9IERhdGUubm93KCk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgYWRkZWQ6IFtdLFxuICAgICAgICAgIG1vZGlmaWVkOiBbXSxcbiAgICAgICAgICByZW1vdmVkOiByZW1vdmVkUGF0aHMsXG4gICAgICAgICAgdW5jaGFuZ2VkOiBbXSxcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgLy8gMS4gTGlzdCArIHN0YXRcbiAgICAgIGNvbnN0IGZpbGVzID0gYXdhaXQgdGhpcy5iYWNrZW5kLmxpc3RGaWxlcyh0aGlzLmVsZW1lbnREaXIsIHRoaXMuZmlsZUV4dGVuc2lvbik7XG4gICAgICBjb25zdCBzdGF0cyA9IGF3YWl0IHRoaXMuYmFja2VuZC5zdGF0TWFueSh0aGlzLmVsZW1lbnREaXIsIGZpbGVzKTtcblxuICAgICAgLy8gMi4gRGlmZiBhZ2FpbnN0IG1hbmlmZXN0XG4gICAgICBjb25zdCBkaWZmID0gdGhpcy5tYW5pZmVzdC5kaWZmKHN0YXRzKTtcblxuICAgICAgY29uc3QgaGFzQ2hhbmdlcyA9IGRpZmYuYWRkZWQubGVuZ3RoID4gMCB8fCBkaWZmLm1vZGlmaWVkLmxlbmd0aCA+IDAgfHwgZGlmZi5yZW1vdmVkLmxlbmd0aCA+IDA7XG4gICAgICBpZiAoaGFzQ2hhbmdlcykge1xuICAgICAgICBsb2dnZXIuZGVidWcoYEVsZW1lbnRTdG9yYWdlTGF5ZXIuc2NhbjogRElTSyBTQ0FOIGZvciAke3BhdGguYmFzZW5hbWUodGhpcy5lbGVtZW50RGlyKX0g4oCUICR7ZmlsZXMubGVuZ3RofSBmaWxlcywgJHtkaWZmLmFkZGVkLmxlbmd0aH0gYWRkZWQsICR7ZGlmZi5tb2RpZmllZC5sZW5ndGh9IG1vZGlmaWVkLCAke2RpZmYucmVtb3ZlZC5sZW5ndGh9IHJlbW92ZWRgKTtcbiAgICAgIH1cblxuICAgICAgLy8gMy4gRm9yIGFkZGVkL21vZGlmaWVkOiByZWFkIGZyb250bWF0dGVyLCB1cGRhdGUgaW5kZXhcbiAgICAgIGNvbnN0IHRvSW5kZXggPSBbLi4uZGlmZi5hZGRlZCwgLi4uZGlmZi5tb2RpZmllZF07XG4gICAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgdG9JbmRleC5tYXAoYXN5bmMgKHJlbFBhdGgpID0+IHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgYWJzUGF0aCA9IHBhdGguam9pbih0aGlzLmVsZW1lbnREaXIsIHJlbFBhdGgpO1xuICAgICAgICAgICAgY29uc3QgY29udGVudCA9IGF3YWl0IHRoaXMuYmFja2VuZC5yZWFkRmlsZShhYnNQYXRoKTtcbiAgICAgICAgICAgIGNvbnN0IGZtID0gRnJvbnRtYXR0ZXJQYXJzZXIuZXh0cmFjdE1ldGFkYXRhKGNvbnRlbnQpO1xuICAgICAgICAgICAgY29uc3QgbWV0YSA9IHN0YXRzLmdldChyZWxQYXRoKTtcblxuICAgICAgICAgICAgdGhpcy5pbmRleC5zZXQoe1xuICAgICAgICAgICAgICBmaWxlUGF0aDogcmVsUGF0aCxcbiAgICAgICAgICAgICAgbmFtZTogZm0ubmFtZSxcbiAgICAgICAgICAgICAgZGVzY3JpcHRpb246IGZtLmRlc2NyaXB0aW9uLFxuICAgICAgICAgICAgICB2ZXJzaW9uOiBmbS52ZXJzaW9uLFxuICAgICAgICAgICAgICBhdXRob3I6IGZtLmF1dGhvcixcbiAgICAgICAgICAgICAgdGFnczogZm0udGFncyxcbiAgICAgICAgICAgICAgbXRpbWVNczogbWV0YT8ubXRpbWVNcyA/PyAwLFxuICAgICAgICAgICAgICBzaXplQnl0ZXM6IG1ldGE/LnNpemVCeXRlcyA/PyAwLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIC8vIFBhcnNlIGZhaWx1cmUgaXMgbm9uLWZhdGFsIOKAlCBza2lwIHRoaXMgZW50cnlcbiAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZyhgRWxlbWVudFN0b3JhZ2VMYXllcjogZmFpbGVkIHRvIGluZGV4ICR7cmVsUGF0aH1gLCB7XG4gICAgICAgICAgICAgIGVycm9yOiBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvciksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICApO1xuXG4gICAgICAvLyA0LiBGb3IgcmVtb3ZlZDogcmVtb3ZlIGZyb20gaW5kZXhcbiAgICAgIGZvciAoY29uc3QgcmVsUGF0aCBvZiBkaWZmLnJlbW92ZWQpIHtcbiAgICAgICAgdGhpcy5pbmRleC5yZW1vdmUocmVsUGF0aCk7XG4gICAgICB9XG5cbiAgICAgIC8vIDUuIFVwZGF0ZSBtYW5pZmVzdCBhbmQgdGltZXN0YW1wXG4gICAgICB0aGlzLm1hbmlmZXN0LnVwZGF0ZShzdGF0cyk7XG4gICAgICB0aGlzLmxhc3RTY2FuVGltZXN0YW1wID0gRGF0ZS5ub3coKTtcblxuICAgICAgcmV0dXJuIGRpZmY7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci5lcnJvcignRWxlbWVudFN0b3JhZ2VMYXllci5wZXJmb3JtU2NhbiBmYWlsZWQnLCBlcnJvcik7XG4gICAgICB0aGlzLmxhc3RTY2FuVGltZXN0YW1wID0gRGF0ZS5ub3coKTsgLy8gUHJldmVudCByZXRyeSBzdG9ybXNcbiAgICAgIHJldHVybiBFTVBUWV9ESUZGO1xuICAgIH1cbiAgfVxufVxuIl19
|
|
231
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRWxlbWVudFN0b3JhZ2VMYXllci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zdG9yYWdlL0VsZW1lbnRTdG9yYWdlTGF5ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7O0dBS0c7QUFFSCxPQUFPLEtBQUssSUFBSSxNQUFNLE1BQU0sQ0FBQztBQUM3QixPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFHNUMsT0FBTyxFQUFFLHdCQUF3QixFQUFtRCxNQUFNLFlBQVksQ0FBQztBQUN2RyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzNELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRTdELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBYTlFLE1BQU0sVUFBVSxHQUF1QixFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUUvRixNQUFNLE9BQU8sbUJBQW1CO0lBQ2IsT0FBTyxDQUFrQjtJQUN6QixRQUFRLEdBQUcsSUFBSSxlQUFlLEVBQUUsQ0FBQztJQUNqQyxLQUFLLEdBQUcsSUFBSSxhQUFhLEVBQUUsQ0FBQztJQUM1QixVQUFVLENBQVM7SUFDbkIsYUFBYSxDQUFTO0lBQ3RCLGNBQWMsQ0FBUztJQUVoQyxpQkFBaUIsR0FBRyxDQUFDLENBQUM7SUFDdEIsY0FBYyxHQUF1QyxJQUFJLENBQUM7SUFFbEUsWUFDRSxxQkFBNEMsRUFDNUMsT0FBbUM7UUFFbkMsSUFBSSxDQUFDLFVBQVUsR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDO1FB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QUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztxQkFDOUQsQ0FBQyxDQUFDO2dCQUNMLENBQUM7WUFDSCxDQUFDLENBQUMsQ0FDSCxDQUFDO1lBRUYsb0NBQW9DO1lBQ3BDLEtBQUssTUFBTSxPQUFPLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUNuQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUM3QixDQUFDO1lBRUQsbUNBQW1DO1lBQ25DLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzVCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7WUFFcEMsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLE1BQU0sQ0FBQyxLQUFLLENBQUMsd0NBQXdDLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDOUQsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLHVCQUF1QjtZQUM1RCxPQUFPLFVBQVUsQ0FBQztRQUNwQixDQUFDO0lBQ0gsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBFbGVtZW50U3RvcmFnZUxheWVyIC0gQ29vcmRpbmF0ZXMgaW5kZXgsIG1hbmlmZXN0LCBhbmQgYmFja2VuZCBmb3IgY2FjaGUtYXdhcmUgbGlzdGluZy5cbiAqXG4gKiBPd25zIHRoZSBzY2FuIGxpZmVjeWNsZTogY29vbGRvd24gZW5mb3JjZW1lbnQsIGNvbmN1cnJlbnQgY2FsbCBkZWR1cGxpY2F0aW9uLFxuICogZGlmZi1iYXNlZCBpbmNyZW1lbnRhbCBpbmRleCB1cGRhdGVzLCBhbmQgbm90aWZpY2F0aW9ucyBmcm9tIHNhdmUvZGVsZXRlLlxuICovXG5cbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICcuLi91dGlscy9sb2dnZXIuanMnO1xuaW1wb3J0IHR5cGUgeyBJU3RvcmFnZUJhY2tlbmQgfSBmcm9tICcuL0lTdG9yYWdlQmFja2VuZC5qcyc7XG5pbXBvcnQgdHlwZSB7IElTdG9yYWdlTGF5ZXIsIFN0b3JhZ2VTY2FuT3B0aW9ucyB9IGZyb20gJy4vSVN0b3JhZ2VMYXllci5qcyc7XG5pbXBvcnQgeyBtZXJnZU1hbmlmZXN0RGlmZlJlc3VsdHMsIHR5cGUgRWxlbWVudEluZGV4RW50cnksIHR5cGUgTWFuaWZlc3REaWZmUmVzdWx0IH0gZnJvbSAnLi90eXBlcy5qcyc7XG5pbXBvcnQgeyBTdG9yYWdlTWFuaWZlc3QgfSBmcm9tICcuL1N0b3JhZ2VNYW5pZmVzdC5qcyc7XG5pbXBvcnQgeyBNZXRhZGF0YUluZGV4IH0gZnJvbSAnLi9NZXRhZGF0YUluZGV4LmpzJztcbmltcG9ydCB7IEZyb250bWF0dGVyUGFyc2VyIH0gZnJvbSAnLi9Gcm9udG1hdHRlclBhcnNlci5qcyc7XG5pbXBvcnQgeyBGaWxlU3RvcmFnZUJhY2tlbmQgfSBmcm9tICcuL0ZpbGVTdG9yYWdlQmFja2VuZC5qcyc7XG5pbXBvcnQgdHlwZSB7IEZpbGVPcGVyYXRpb25zU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL0ZpbGVPcGVyYXRpb25zU2VydmljZS5qcyc7XG5pbXBvcnQgeyBVbmljb2RlVmFsaWRhdG9yIH0gZnJvbSAnLi4vc2VjdXJpdHkvdmFsaWRhdG9ycy91bmljb2RlVmFsaWRhdG9yLmpzJztcblxuZXhwb3J0IGludGVyZmFjZSBFbGVtZW50U3RvcmFnZUxheWVyT3B0aW9ucyB7XG4gIC8qKiBBYnNvbHV0ZSBwYXRoIHRvIHRoZSBlbGVtZW50IGRpcmVjdG9yeSAqL1xuICBlbGVtZW50RGlyOiBzdHJpbmc7XG4gIC8qKiBGaWxlIGV4dGVuc2lvbiB0byBmaWx0ZXIgKGUuZy4gJy5tZCcpICovXG4gIGZpbGVFeHRlbnNpb246IHN0cmluZztcbiAgLyoqIE1pbmltdW0gbWlsbGlzZWNvbmRzIGJldHdlZW4gZnVsbCBzY2FucyAoZGVmYXVsdDogMTAwMCkgKi9cbiAgc2NhbkNvb2xkb3duTXM/OiBudW1iZXI7XG4gIC8qKiBPdmVycmlkZSB0aGUgc3RvcmFnZSBiYWNrZW5kICh1c2VmdWwgZm9yIHRlc3RpbmcpICovXG4gIHN0b3JhZ2VCYWNrZW5kPzogSVN0b3JhZ2VCYWNrZW5kO1xufVxuXG5jb25zdCBFTVBUWV9ESUZGOiBNYW5pZmVzdERpZmZSZXN1bHQgPSB7IGFkZGVkOiBbXSwgbW9kaWZpZWQ6IFtdLCByZW1vdmVkOiBbXSwgdW5jaGFuZ2VkOiBbXSB9O1xuXG5leHBvcnQgY2xhc3MgRWxlbWVudFN0b3JhZ2VMYXllciBpbXBsZW1lbnRzIElTdG9yYWdlTGF5ZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IGJhY2tlbmQ6IElTdG9yYWdlQmFja2VuZDtcbiAgcHJpdmF0ZSByZWFkb25seSBtYW5pZmVzdCA9IG5ldyBTdG9yYWdlTWFuaWZlc3QoKTtcbiAgcHJpdmF0ZSByZWFkb25seSBpbmRleCA9IG5ldyBNZXRhZGF0YUluZGV4KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgZWxlbWVudERpcjogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IGZpbGVFeHRlbnNpb246IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBzY2FuQ29vbGRvd25NczogbnVtYmVyO1xuXG4gIHByaXZhdGUgbGFzdFNjYW5UaW1lc3RhbXAgPSAwO1xuICBwcml2YXRlIHNjYW5JblByb2dyZXNzOiBQcm9taXNlPE1hbmlmZXN0RGlmZlJlc3VsdD4gfCBudWxsID0gbnVsbDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBmaWxlT3BlcmF0aW9uc1NlcnZpY2U6IEZpbGVPcGVyYXRpb25zU2VydmljZSxcbiAgICBvcHRpb25zOiBFbGVtZW50U3RvcmFnZUxheWVyT3B0aW9uc1xuICApIHtcbiAgICB0aGlzLmVsZW1lbnREaXIgPSBvcHRpb25zLmVsZW1lbnREaXI7XG4gICAgdGhpcy5maWxlRXh0ZW5zaW9uID0gb3B0aW9ucy5maWxlRXh0ZW5zaW9uO1xuICAgIHRoaXMuc2NhbkNvb2xkb3duTXMgPSBvcHRpb25zLnNjYW5Db29sZG93bk1zID8/IDEwMDA7XG5cbiAgICBpZiAob3B0aW9ucy5zdG9yYWdlQmFja2VuZCkge1xuICAgICAgdGhpcy5iYWNrZW5kID0gb3B0aW9ucy5zdG9yYWdlQmFja2VuZDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5iYWNrZW5kID0gbmV3IEZpbGVTdG9yYWdlQmFja2VuZChmaWxlT3BlcmF0aW9uc1NlcnZpY2UpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTY2FuIHRoZSBlbGVtZW50IGRpcmVjdG9yeSBmb3IgY2hhbmdlcy5cbiAgICogLSBOby1vcCBpZiB3aXRoaW4gY29vbGRvd24gcGVyaW9kIChyZXR1cm5zIGVtcHR5IGRpZmYpXG4gICAqIC0gRGVkdXBsaWNhdGVzIGNvbmN1cnJlbnQgY2FsbHMgKHJldHVybnMgc2FtZSBwcm9taXNlKVxuICAgKiAtIFVwZGF0ZXMgaW5kZXggYW5kIG1hbmlmZXN0IGJhc2VkIG9uIGRpZmZcbiAgICovXG4gIGFzeW5jIHNjYW4ob3B0aW9uczogU3RvcmFnZVNjYW5PcHRpb25zID0ge30pOiBQcm9taXNlPE1hbmlmZXN0RGlmZlJlc3VsdD4ge1xuICAgIGxldCBkcmFpbmVkRGlmZjogTWFuaWZlc3REaWZmUmVzdWx0IHwgdW5kZWZpbmVkO1xuICAgIGNvbnN0IGV4aXN0aW5nU2NhbiA9IHRoaXMuc2NhbkluUHJvZ3Jlc3M7XG4gICAgaWYgKGV4aXN0aW5nU2Nhbikge1xuICAgICAgaWYgKCFvcHRpb25zLmZyZXNoQWZ0ZXJJbkZsaWdodCkge1xuICAgICAgICByZXR1cm4gZXhpc3RpbmdTY2FuO1xuICAgICAgfVxuXG4gICAgICAvLyBBIHNlY3VyaXR5LXNlbnNpdGl2ZSBjYWxsZXIgbXVzdCBub3QgaW5oZXJpdCBhIGRpcmVjdG9yeSBzbmFwc2hvdCB0aGF0XG4gICAgICAvLyBiZWdhbiBiZWZvcmUgdGhlIGNhbGxlci4gRHJhaW4gaXQsIHRoZW4gZm9yY2UgYSB0cmFpbGluZyBkaXNrIHNjYW4uXG4gICAgICB0cnkge1xuICAgICAgICBkcmFpbmVkRGlmZiA9IGF3YWl0IGV4aXN0aW5nU2NhbjtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICAvLyBUaGUgdHJhaWxpbmcgc2NhbiBnZXRzIGFuIGluZGVwZW5kZW50IGNoYW5jZSB0byByZWNvdmVyLlxuICAgICAgfVxuICAgICAgaWYgKHRoaXMuc2NhbkluUHJvZ3Jlc3MgPT09IGV4aXN0aW5nU2Nhbikge1xuICAgICAgICB0aGlzLnNjYW5JblByb2dyZXNzID0gbnVsbDtcbiAgICAgIH1cbiAgICAgIHRoaXMuaW52YWxpZGF0ZSgpO1xuICAgIH1cblxuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgaWYgKG5vdyAtIHRoaXMubGFzdFNjYW5UaW1lc3RhbXAgPCB0aGlzLnNjYW5Db29sZG93bk1zKSB7XG4gICAgICBsb2dnZXIuZGVidWcoYEVsZW1lbnRTdG9yYWdlTGF5ZXIuc2NhbjogQ09PTERPV04gQUNUSVZFIGZvciAke3BhdGguYmFzZW5hbWUodGhpcy5lbGVtZW50RGlyKX0g4oCUIHNraXBwaW5nIGRpc2sgSS9PICgke3RoaXMuc2NhbkNvb2xkb3duTXMgLSAobm93IC0gdGhpcy5sYXN0U2NhblRpbWVzdGFtcCl9bXMgcmVtYWluaW5nKWApO1xuICAgICAgcmV0dXJuIEVNUFRZX0RJRkY7XG4gICAgfVxuXG4gICAgLy8gRGVkdXBsaWNhdGUgYSBzY2FuIHRoYXQgc3RhcnRlZCBhZnRlciB0aGUgZnJlc2huZXNzIHdhaXQgYWJvdmUuIFN1Y2ggYVxuICAgIC8vIHNjYW4gaXMgbmV3IGVub3VnaCBmb3IgdGhpcyBjYWxsZXIgYW5kIGNhbiBzYWZlbHkgYmUgc2hhcmVkLlxuICAgIGlmICh0aGlzLnNjYW5JblByb2dyZXNzKSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLnNjYW5JblByb2dyZXNzO1xuICAgICAgcmV0dXJuIGRyYWluZWREaWZmID8gbWVyZ2VNYW5pZmVzdERpZmZSZXN1bHRzKGRyYWluZWREaWZmLCByZXN1bHQpIDogcmVzdWx0O1xuICAgIH1cblxuICAgIGNvbnN0IHNjYW4gPSB0aGlzLnBlcmZvcm1TY2FuKCk7XG4gICAgdGhpcy5zY2FuSW5Qcm9ncmVzcyA9IHNjYW47XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHNjYW47XG4gICAgICByZXR1cm4gZHJhaW5lZERpZmYgPyBtZXJnZU1hbmlmZXN0RGlmZlJlc3VsdHMoZHJhaW5lZERpZmYsIHJlc3VsdCkgOiByZXN1bHQ7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGlmICh0aGlzLnNjYW5JblByb2dyZXNzID09PSBzY2FuKSB7XG4gICAgICAgIHRoaXMuc2NhbkluUHJvZ3Jlc3MgPSBudWxsO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBUcmlnZ2VyIHNjYW4gYW5kIHJldHVybiBhbGwgaW5kZXggZW50cmllcy5cbiAgICovXG4gIGFzeW5jIGxpc3RTdW1tYXJpZXMoKTogUHJvbWlzZTxFbGVtZW50SW5kZXhFbnRyeVtdPiB7XG4gICAgYXdhaXQgdGhpcy5zY2FuKCk7XG4gICAgcmV0dXJuIHRoaXMuaW5kZXguZ2V0QWxsKCk7XG4gIH1cblxuICAvKipcbiAgICogVHJpZ2dlciBzY2FuIGFuZCByZXR1cm4gYWxsIGluZGV4ZWQgZmlsZSBwYXRocy5cbiAgICovXG4gIGFzeW5jIGdldEluZGV4ZWRQYXRocygpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gICAgYXdhaXQgdGhpcy5zY2FuKCk7XG4gICAgcmV0dXJuIHRoaXMuaW5kZXguZ2V0UGF0aHMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBPKDEpIG5hbWUtdG8tcGF0aCBsb29rdXAgZnJvbSB0aGUgaW5kZXguIERvZXMgbm90IHRyaWdnZXIgYSBzY2FuLlxuICAgKi9cbiAgZ2V0UGF0aEJ5TmFtZShuYW1lOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IG5vcm1hbGl6ZWROYW1lID0gVW5pY29kZVZhbGlkYXRvci5ub3JtYWxpemUobmFtZSkubm9ybWFsaXplZENvbnRlbnQ7XG4gICAgcmV0dXJuIHRoaXMuaW5kZXguZ2V0UGF0aEJ5TmFtZShub3JtYWxpemVkTmFtZSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0cnVlIGlmIGF0IGxlYXN0IG9uZSBzY2FuIGhhcyBjb21wbGV0ZWQgKGluZGV4IGlzIGF1dGhvcml0YXRpdmUpLlxuICAgKi9cbiAgaGFzQ29tcGxldGVkU2NhbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5sYXN0U2NhblRpbWVzdGFtcCA+IDA7XG4gIH1cblxuICAvKipcbiAgICogTm90aWZ5IHRoZSBzdG9yYWdlIGxheWVyIHRoYXQgYSBmaWxlIHdhcyBzYXZlZC5cbiAgICogUmUtc3RhdHMgYW5kIHJlLXBhcnNlcyB0aGUgZmlsZSB0byB1cGRhdGUgaW5kZXgvbWFuaWZlc3QuXG4gICAqL1xuICBhc3luYyBub3RpZnlTYXZlZChyZWxhdGl2ZVBhdGg6IHN0cmluZywgYWJzb2x1dGVQYXRoOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgbWV0YSA9IGF3YWl0IHRoaXMuYmFja2VuZC5zdGF0KGFic29sdXRlUGF0aCk7XG4gICAgICBjb25zdCBjb250ZW50ID0gYXdhaXQgdGhpcy5iYWNrZW5kLnJlYWRGaWxlKGFic29sdXRlUGF0aCk7XG4gICAgICBjb25zdCBmbSA9IEZyb250bWF0dGVyUGFyc2VyLmV4dHJhY3RNZXRhZGF0YShjb250ZW50KTtcblxuICAgICAgdGhpcy5pbmRleC5zZXQoe1xuICAgICAgICBmaWxlUGF0aDogcmVsYXRpdmVQYXRoLFxuICAgICAgICBuYW1lOiBmbS5uYW1lLFxuICAgICAgICBkZXNjcmlwdGlvbjogZm0uZGVzY3JpcHRpb24sXG4gICAgICAgIHZlcnNpb246IGZtLnZlcnNpb24sXG4gICAgICAgIGF1dGhvcjogZm0uYXV0aG9yLFxuICAgICAgICB0YWdzOiBmbS50YWdzLFxuICAgICAgICBtdGltZU1zOiBtZXRhLm10aW1lTXMsXG4gICAgICAgIHNpemVCeXRlczogbWV0YS5zaXplQnl0ZXMsXG4gICAgICB9KTtcbiAgICAgIHRoaXMubWFuaWZlc3Quc2V0KHJlbGF0aXZlUGF0aCwgbWV0YS5tdGltZU1zKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nZ2VyLmRlYnVnKCdFbGVtZW50U3RvcmFnZUxheWVyLm5vdGlmeVNhdmVkIGZhaWxlZCwgaW52YWxpZGF0aW5nJywge1xuICAgICAgICByZWxhdGl2ZVBhdGgsXG4gICAgICAgIGVycm9yOiBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvciksXG4gICAgICB9KTtcbiAgICAgIHRoaXMuaW52YWxpZGF0ZSgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBOb3RpZnkgdGhlIHN0b3JhZ2UgbGF5ZXIgdGhhdCBhIGZpbGUgd2FzIGRlbGV0ZWQuXG4gICAqIFJlbW92ZXMgdGhlIGVudHJ5IGZyb20gaW5kZXggYW5kIG1hbmlmZXN0LlxuICAgKi9cbiAgbm90aWZ5RGVsZXRlZChyZWxhdGl2ZVBhdGg6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuaW5kZXgucmVtb3ZlKHJlbGF0aXZlUGF0aCk7XG4gICAgdGhpcy5tYW5pZmVzdC5yZW1vdmUocmVsYXRpdmVQYXRoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGb3JjZSB0aGUgbmV4dCBzY2FuKCkgdG8gaGl0IGRpc2sgYnkgcmVzZXR0aW5nIHRoZSBjb29sZG93biB0aW1lci5cbiAgICovXG4gIGludmFsaWRhdGUoKTogdm9pZCB7XG4gICAgdGhpcy5sYXN0U2NhblRpbWVzdGFtcCA9IDA7XG4gIH1cblxuICAvKipcbiAgICogUmVzZXQgYWxsIHN0YXRlIChpbmRleCwgbWFuaWZlc3QsIGNvb2xkb3duKS5cbiAgICovXG4gIGNsZWFyKCk6IHZvaWQge1xuICAgIHRoaXMuaW5kZXguY2xlYXIoKTtcbiAgICB0aGlzLm1hbmlmZXN0LmNsZWFyKCk7XG4gICAgdGhpcy5sYXN0U2NhblRpbWVzdGFtcCA9IDA7XG4gIH1cblxuICAvLyAtLS0tIHByaXZhdGUgLS0tLVxuXG4gIHByaXZhdGUgYXN5bmMgcGVyZm9ybVNjYW4oKTogUHJvbWlzZTxNYW5pZmVzdERpZmZSZXN1bHQ+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgZXhpc3RzID0gYXdhaXQgdGhpcy5iYWNrZW5kLmRpcmVjdG9yeUV4aXN0cyh0aGlzLmVsZW1lbnREaXIpO1xuICAgICAgaWYgKCFleGlzdHMpIHtcbiAgICAgICAgLy8gRGlyZWN0b3J5IGRvZXNuJ3QgZXhpc3Qg4oCUIGNsZWFyIGV2ZXJ5dGhpbmcgYW5kIHJldHVyblxuICAgICAgICBjb25zdCByZW1vdmVkUGF0aHMgPSB0aGlzLmluZGV4LmdldFBhdGhzKCk7XG4gICAgICAgIHRoaXMuaW5kZXguY2xlYXIoKTtcbiAgICAgICAgdGhpcy5tYW5pZmVzdC5jbGVhcigpO1xuICAgICAgICB0aGlzLmxhc3RTY2FuVGltZXN0YW1wID0gRGF0ZS5ub3coKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBhZGRlZDogW10sXG4gICAgICAgICAgbW9kaWZpZWQ6IFtdLFxuICAgICAgICAgIHJlbW92ZWQ6IHJlbW92ZWRQYXRocyxcbiAgICAgICAgICB1bmNoYW5nZWQ6IFtdLFxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICAvLyAxLiBMaXN0ICsgc3RhdFxuICAgICAgY29uc3QgZmlsZXMgPSBhd2FpdCB0aGlzLmJhY2tlbmQubGlzdEZpbGVzKHRoaXMuZWxlbWVudERpciwgdGhpcy5maWxlRXh0ZW5zaW9uKTtcbiAgICAgIGNvbnN0IHN0YXRzID0gYXdhaXQgdGhpcy5iYWNrZW5kLnN0YXRNYW55KHRoaXMuZWxlbWVudERpciwgZmlsZXMpO1xuXG4gICAgICAvLyAyLiBEaWZmIGFnYWluc3QgbWFuaWZlc3RcbiAgICAgIGNvbnN0IGRpZmYgPSB0aGlzLm1hbmlmZXN0LmRpZmYoc3RhdHMpO1xuXG4gICAgICBjb25zdCBoYXNDaGFuZ2VzID0gZGlmZi5hZGRlZC5sZW5ndGggPiAwIHx8IGRpZmYubW9kaWZpZWQubGVuZ3RoID4gMCB8fCBkaWZmLnJlbW92ZWQubGVuZ3RoID4gMDtcbiAgICAgIGlmIChoYXNDaGFuZ2VzKSB7XG4gICAgICAgIGxvZ2dlci5kZWJ1ZyhgRWxlbWVudFN0b3JhZ2VMYXllci5zY2FuOiBESVNLIFNDQU4gZm9yICR7cGF0aC5iYXNlbmFtZSh0aGlzLmVsZW1lbnREaXIpfSDigJQgJHtmaWxlcy5sZW5ndGh9IGZpbGVzLCAke2RpZmYuYWRkZWQubGVuZ3RofSBhZGRlZCwgJHtkaWZmLm1vZGlmaWVkLmxlbmd0aH0gbW9kaWZpZWQsICR7ZGlmZi5yZW1vdmVkLmxlbmd0aH0gcmVtb3ZlZGApO1xuICAgICAgfVxuXG4gICAgICAvLyAzLiBGb3IgYWRkZWQvbW9kaWZpZWQ6IHJlYWQgZnJvbnRtYXR0ZXIsIHVwZGF0ZSBpbmRleFxuICAgICAgY29uc3QgdG9JbmRleCA9IFsuLi5kaWZmLmFkZGVkLCAuLi5kaWZmLm1vZGlmaWVkXTtcbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICB0b0luZGV4Lm1hcChhc3luYyAocmVsUGF0aCkgPT4ge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBhYnNQYXRoID0gcGF0aC5qb2luKHRoaXMuZWxlbWVudERpciwgcmVsUGF0aCk7XG4gICAgICAgICAgICBjb25zdCBjb250ZW50ID0gYXdhaXQgdGhpcy5iYWNrZW5kLnJlYWRGaWxlKGFic1BhdGgpO1xuICAgICAgICAgICAgY29uc3QgZm0gPSBGcm9udG1hdHRlclBhcnNlci5leHRyYWN0TWV0YWRhdGEoY29udGVudCk7XG4gICAgICAgICAgICBjb25zdCBtZXRhID0gc3RhdHMuZ2V0KHJlbFBhdGgpO1xuXG4gICAgICAgICAgICB0aGlzLmluZGV4LnNldCh7XG4gICAgICAgICAgICAgIGZpbGVQYXRoOiByZWxQYXRoLFxuICAgICAgICAgICAgICBuYW1lOiBmbS5uYW1lLFxuICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogZm0uZGVzY3JpcHRpb24sXG4gICAgICAgICAgICAgIHZlcnNpb246IGZtLnZlcnNpb24sXG4gICAgICAgICAgICAgIGF1dGhvcjogZm0uYXV0aG9yLFxuICAgICAgICAgICAgICB0YWdzOiBmbS50YWdzLFxuICAgICAgICAgICAgICBtdGltZU1zOiBtZXRhPy5tdGltZU1zID8/IDAsXG4gICAgICAgICAgICAgIHNpemVCeXRlczogbWV0YT8uc2l6ZUJ5dGVzID8/IDAsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgLy8gUGFyc2UgZmFpbHVyZSBpcyBub24tZmF0YWwg4oCUIHNraXAgdGhpcyBlbnRyeVxuICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKGBFbGVtZW50U3RvcmFnZUxheWVyOiBmYWlsZWQgdG8gaW5kZXggJHtyZWxQYXRofWAsIHtcbiAgICAgICAgICAgICAgZXJyb3I6IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICk7XG5cbiAgICAgIC8vIDQuIEZvciByZW1vdmVkOiByZW1vdmUgZnJvbSBpbmRleFxuICAgICAgZm9yIChjb25zdCByZWxQYXRoIG9mIGRpZmYucmVtb3ZlZCkge1xuICAgICAgICB0aGlzLmluZGV4LnJlbW92ZShyZWxQYXRoKTtcbiAgICAgIH1cblxuICAgICAgLy8gNS4gVXBkYXRlIG1hbmlmZXN0IGFuZCB0aW1lc3RhbXBcbiAgICAgIHRoaXMubWFuaWZlc3QudXBkYXRlKHN0YXRzKTtcbiAgICAgIHRoaXMubGFzdFNjYW5UaW1lc3RhbXAgPSBEYXRlLm5vdygpO1xuXG4gICAgICByZXR1cm4gZGlmZjtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nZ2VyLmVycm9yKCdFbGVtZW50U3RvcmFnZUxheWVyLnBlcmZvcm1TY2FuIGZhaWxlZCcsIGVycm9yKTtcbiAgICAgIHRoaXMubGFzdFNjYW5UaW1lc3RhbXAgPSBEYXRlLm5vdygpOyAvLyBQcmV2ZW50IHJldHJ5IHN0b3Jtc1xuICAgICAgcmV0dXJuIEVNUFRZX0RJRkY7XG4gICAgfVxuICB9XG59XG4iXX0=
|
|
@@ -6,12 +6,19 @@
|
|
|
6
6
|
* MemoryStorageLayer (Phase 2, .yaml memories) to share the same contract.
|
|
7
7
|
*/
|
|
8
8
|
import type { ElementIndexEntry, ManifestDiffResult } from './types.js';
|
|
9
|
+
export interface StorageScanOptions {
|
|
10
|
+
/**
|
|
11
|
+
* If a scan was already running when this call began, wait for it and then
|
|
12
|
+
* force a trailing disk scan instead of reusing its potentially older view.
|
|
13
|
+
*/
|
|
14
|
+
freshAfterInFlight?: boolean;
|
|
15
|
+
}
|
|
9
16
|
export interface IStorageLayer {
|
|
10
17
|
/**
|
|
11
18
|
* Scan the filesystem for changes relative to the last snapshot.
|
|
12
19
|
* Implementations should enforce cooldown and deduplicate concurrent calls.
|
|
13
20
|
*/
|
|
14
|
-
scan(): Promise<ManifestDiffResult>;
|
|
21
|
+
scan(options?: StorageScanOptions): Promise<ManifestDiffResult>;
|
|
15
22
|
/**
|
|
16
23
|
* Trigger scan and return all indexed entries.
|
|
17
24
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IStorageLayer.d.ts","sourceRoot":"","sources":["../../src/storage/IStorageLayer.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAExE,MAAM,WAAW,aAAa;IAC5B;;;OAGG;IACH,IAAI,
|
|
1
|
+
{"version":3,"file":"IStorageLayer.d.ts","sourceRoot":"","sources":["../../src/storage/IStorageLayer.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAExE,MAAM,WAAW,kBAAkB;IACjC;;;OAGG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED,MAAM,WAAW,aAAa;IAC5B;;;OAGG;IACH,IAAI,CAAC,OAAO,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAEhE;;OAEG;IACH,aAAa,IAAI,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAAC;IAE9C;;OAEG;IACH,eAAe,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAErC;;OAEG;IACH,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;IAEhD;;;;OAIG;IACH,gBAAgB,IAAI,OAAO,CAAC;IAE5B;;;OAGG;IACH,WAAW,CAAC,YAAY,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEvE;;;OAGG;IACH,aAAa,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAE1C;;OAEG;IACH,UAAU,IAAI,IAAI,CAAC;IAEnB;;OAEG;IACH,KAAK,IAAI,IAAI,CAAC;CACf"}
|
|
@@ -6,4 +6,4 @@
|
|
|
6
6
|
* MemoryStorageLayer (Phase 2, .yaml memories) to share the same contract.
|
|
7
7
|
*/
|
|
8
8
|
export {};
|
|
9
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
9
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSVN0b3JhZ2VMYXllci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zdG9yYWdlL0lTdG9yYWdlTGF5ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBJbnRlcmZhY2UgZm9yIHN0b3JhZ2UgbGF5ZXIgaW1wbGVtZW50YXRpb25zLlxuICpcbiAqIERlY291cGxlcyBCYXNlRWxlbWVudE1hbmFnZXIgZnJvbSBhIGNvbmNyZXRlIHN0b3JhZ2Ugc3RyYXRlZ3ksXG4gKiBhbGxvd2luZyBFbGVtZW50U3RvcmFnZUxheWVyIChQaGFzZSAxLCAubWQgZmlsZXMpIGFuZFxuICogTWVtb3J5U3RvcmFnZUxheWVyIChQaGFzZSAyLCAueWFtbCBtZW1vcmllcykgdG8gc2hhcmUgdGhlIHNhbWUgY29udHJhY3QuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBFbGVtZW50SW5kZXhFbnRyeSwgTWFuaWZlc3REaWZmUmVzdWx0IH0gZnJvbSAnLi90eXBlcy5qcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3RvcmFnZVNjYW5PcHRpb25zIHtcbiAgLyoqXG4gICAqIElmIGEgc2NhbiB3YXMgYWxyZWFkeSBydW5uaW5nIHdoZW4gdGhpcyBjYWxsIGJlZ2FuLCB3YWl0IGZvciBpdCBhbmQgdGhlblxuICAgKiBmb3JjZSBhIHRyYWlsaW5nIGRpc2sgc2NhbiBpbnN0ZWFkIG9mIHJldXNpbmcgaXRzIHBvdGVudGlhbGx5IG9sZGVyIHZpZXcuXG4gICAqL1xuICBmcmVzaEFmdGVySW5GbGlnaHQ/OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElTdG9yYWdlTGF5ZXIge1xuICAvKipcbiAgICogU2NhbiB0aGUgZmlsZXN5c3RlbSBmb3IgY2hhbmdlcyByZWxhdGl2ZSB0byB0aGUgbGFzdCBzbmFwc2hvdC5cbiAgICogSW1wbGVtZW50YXRpb25zIHNob3VsZCBlbmZvcmNlIGNvb2xkb3duIGFuZCBkZWR1cGxpY2F0ZSBjb25jdXJyZW50IGNhbGxzLlxuICAgKi9cbiAgc2NhbihvcHRpb25zPzogU3RvcmFnZVNjYW5PcHRpb25zKTogUHJvbWlzZTxNYW5pZmVzdERpZmZSZXN1bHQ+O1xuXG4gIC8qKlxuICAgKiBUcmlnZ2VyIHNjYW4gYW5kIHJldHVybiBhbGwgaW5kZXhlZCBlbnRyaWVzLlxuICAgKi9cbiAgbGlzdFN1bW1hcmllcygpOiBQcm9taXNlPEVsZW1lbnRJbmRleEVudHJ5W10+O1xuXG4gIC8qKlxuICAgKiBUcmlnZ2VyIHNjYW4gYW5kIHJldHVybiBhbGwgaW5kZXhlZCBmaWxlIHBhdGhzLlxuICAgKi9cbiAgZ2V0SW5kZXhlZFBhdGhzKCk6IFByb21pc2U8c3RyaW5nW10+O1xuXG4gIC8qKlxuICAgKiBPKDEpIG5hbWUtdG8tcGF0aCBsb29rdXAgZnJvbSB0aGUgaW5kZXguIERvZXMgbm90IHRyaWdnZXIgYSBzY2FuLlxuICAgKi9cbiAgZ2V0UGF0aEJ5TmFtZShuYW1lOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdHJ1ZSBpZiBhdCBsZWFzdCBvbmUgc2NhbiBoYXMgY29tcGxldGVkLCBtZWFuaW5nIHRoZSBpbmRleFxuICAgKiBpcyBwb3B1bGF0ZWQgYW5kIG5hbWUgbG9va3VwcyBhcmUgYXV0aG9yaXRhdGl2ZSAoYSBtaXNzIG1lYW5zIHRoZVxuICAgKiBlbGVtZW50IGdlbnVpbmVseSBkb2VzIG5vdCBleGlzdCBvbiBkaXNrKS5cbiAgICovXG4gIGhhc0NvbXBsZXRlZFNjYW4oKTogYm9vbGVhbjtcblxuICAvKipcbiAgICogTm90aWZ5IHRoZSBzdG9yYWdlIGxheWVyIHRoYXQgYSBmaWxlIHdhcyBzYXZlZC5cbiAgICogUmUtc3RhdHMgYW5kIHJlLXBhcnNlcyB0aGUgZmlsZSB0byB1cGRhdGUgaW5kZXgvbWFuaWZlc3QuXG4gICAqL1xuICBub3RpZnlTYXZlZChyZWxhdGl2ZVBhdGg6IHN0cmluZywgYWJzb2x1dGVQYXRoOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+O1xuXG4gIC8qKlxuICAgKiBOb3RpZnkgdGhlIHN0b3JhZ2UgbGF5ZXIgdGhhdCBhIGZpbGUgd2FzIGRlbGV0ZWQuXG4gICAqIFJlbW92ZXMgdGhlIGVudHJ5IGZyb20gaW5kZXggYW5kIG1hbmlmZXN0LlxuICAgKi9cbiAgbm90aWZ5RGVsZXRlZChyZWxhdGl2ZVBhdGg6IHN0cmluZyk6IHZvaWQ7XG5cbiAgLyoqXG4gICAqIEZvcmNlIHRoZSBuZXh0IHNjYW4oKSB0byBoaXQgZGlzayBieSByZXNldHRpbmcgdGhlIGNvb2xkb3duIHRpbWVyLlxuICAgKi9cbiAgaW52YWxpZGF0ZSgpOiB2b2lkO1xuXG4gIC8qKlxuICAgKiBSZXNldCBhbGwgc3RhdGUgKGluZGV4LCBtYW5pZmVzdCwgY29vbGRvd24pLlxuICAgKi9cbiAgY2xlYXIoKTogdm9pZDtcbn1cbiJdfQ==
|
|
@@ -11,9 +11,9 @@
|
|
|
11
11
|
* StorageManifest, FileStorageBackend) but with fundamentally different scan
|
|
12
12
|
* logic: multi-directory enumeration + _index.json cold-start persistence.
|
|
13
13
|
*/
|
|
14
|
-
import type { IStorageLayer } from './IStorageLayer.js';
|
|
14
|
+
import type { IStorageLayer, StorageScanOptions } from './IStorageLayer.js';
|
|
15
15
|
import type { IStorageBackend } from './IStorageBackend.js';
|
|
16
|
-
import type
|
|
16
|
+
import { type ElementIndexEntry, type ManifestDiffResult } from './types.js';
|
|
17
17
|
import type { FileOperationsService } from '../services/FileOperationsService.js';
|
|
18
18
|
export interface MemoryStorageLayerOptions {
|
|
19
19
|
/** Absolute path to the memories directory */
|
|
@@ -40,7 +40,8 @@ export declare class MemoryStorageLayer implements IStorageLayer {
|
|
|
40
40
|
private scanInProgress;
|
|
41
41
|
private coldStartDone;
|
|
42
42
|
constructor(fileOps: FileOperationsService, options: MemoryStorageLayerOptions);
|
|
43
|
-
scan(): Promise<ManifestDiffResult>;
|
|
43
|
+
scan(options?: StorageScanOptions): Promise<ManifestDiffResult>;
|
|
44
|
+
private drainInFlightScan;
|
|
44
45
|
listSummaries(): Promise<ElementIndexEntry[]>;
|
|
45
46
|
getIndexedPaths(): Promise<string[]>;
|
|
46
47
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MemoryStorageLayer.d.ts","sourceRoot":"","sources":["../../src/storage/MemoryStorageLayer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAIH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"MemoryStorageLayer.d.ts","sourceRoot":"","sources":["../../src/storage/MemoryStorageLayer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAIH,OAAO,KAAK,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAC5E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAA4B,KAAK,iBAAiB,EAAE,KAAK,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAMvG,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,sCAAsC,CAAC;AAGlF,MAAM,WAAW,yBAAyB;IACxC,8CAA8C;IAC9C,WAAW,EAAE,MAAM,CAAC;IACpB,8DAA8D;IAC9D,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,wDAAwD;IACxD,cAAc,CAAC,EAAE,eAAe,CAAC;IACjC,+DAA+D;IAC/D,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,yDAAyD;IACzD,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC;CAC5C;AAKD,qBAAa,kBAAmB,YAAW,aAAa;IAcpD,OAAO,CAAC,QAAQ,CAAC,OAAO;IAb1B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAkB;IAC1C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAyB;IAClD,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAuB;IAC7C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAkB;IAC5C,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAS;IACxC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAgC;IAE5D,OAAO,CAAC,iBAAiB,CAAK;IAC9B,OAAO,CAAC,cAAc,CAA4C;IAClE,OAAO,CAAC,aAAa,CAAS;gBAGX,OAAO,EAAE,qBAAqB,EAC/C,OAAO,EAAE,yBAAyB;IAoB9B,IAAI,CAAC,OAAO,GAAE,kBAAuB,GAAG,OAAO,CAAC,kBAAkB,CAAC;YA0C3D,iBAAiB;IAezB,aAAa,IAAI,OAAO,CAAC,iBAAiB,EAAE,CAAC;IAK7C,eAAe,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAM1C;;;;;;;OAOG;IACH,OAAO,CAAC,iBAAiB;IAYzB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAK/C,gBAAgB,IAAI,OAAO;IAIrB,WAAW,CAAC,YAAY,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAiC5E,aAAa,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI;IAMzC,UAAU,IAAI,IAAI;IAIlB,KAAK,IAAI,IAAI;IASb;;;OAGG;IACH,kBAAkB,IAAI,iBAAiB,EAAE;IAMzC;;OAEG;IACG,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAWnC;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAO9B;;;OAGG;YACW,SAAS;IA0BvB;;;OAGG;YACW,sBAAsB;IAkCpC;;OAEG;YACW,WAAW;CAoH1B"}
|