velocious 1.0.547 → 1.0.548
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -0
- package/build/cli/tenant-database-command-helper.js +38 -3
- package/build/src/cli/tenant-database-command-helper.d.ts +7 -1
- package/build/src/cli/tenant-database-command-helper.d.ts.map +1 -1
- package/build/src/cli/tenant-database-command-helper.js +36 -4
- package/build/src/tenants/tenant-iterator.d.ts.map +1 -1
- package/build/src/tenants/tenant-iterator.js +9 -7
- package/build/tenants/tenant-iterator.js +8 -3
- package/package.json +1 -1
- package/src/cli/tenant-database-command-helper.js +38 -3
- package/src/tenants/tenant-iterator.js +8 -3
package/README.md
CHANGED
|
@@ -2354,6 +2354,8 @@ npx velocious db:tenants:migrate projectTenant
|
|
|
2354
2354
|
npx velocious db:tenants:migrate projectTenant --parallel 20
|
|
2355
2355
|
```
|
|
2356
2356
|
|
|
2357
|
+
Tenant lifecycle commands print start and final counts, report each completed tenant, and emit a heartbeat every 30 seconds with completed and active tenant counts while work is still running.
|
|
2358
|
+
|
|
2357
2359
|
`afterMigrateTenant` hooks run inside the active default and tenant database connection scope for the tenant being migrated.
|
|
2358
2360
|
|
|
2359
2361
|
At runtime, the apartment-style `Tenant` façade (`velocious/build/src/tenants/tenant.js`) is the single entry point: `Tenant.with(tenant, callback)` / `Tenant.current()` to switch into and read a tenant context, `Tenant.each({identifier, callback, parallel?, filter?})` to run a callback within every provider-listed tenant, and `Tenant.drop({identifier, tenant})` (plus the `db:tenants:drop` CLI command) to drop a tenant's database through the provider's `dropDatabase` hook. `Tenant.with` and `Tenant.each` run their callbacks inside `ensureConnections`, so switching into a tenant establishes its database connections (global + tenant) and passes them to the callback — the tenant is immediately queryable without the caller wiring up connections (already-open connections are reused, so nesting does not double-connect). `Tenant.with` is generic over its callback's return type, so a value returned from inside the tenant context comes back to the caller with its type preserved (no cast needed). `Tenant.aggregateAcross({identifier, aggregates, keyColumns, subquery, tenants?, filter?})` runs one aggregate over the same table across many tenant databases and returns the merged result — grouping tenants by server and using a single cross-database `UNION ALL` where the driver supports two-part `` `database`.`table` `` references (MySQL/MariaDB) or one query per tenant otherwise (PostgreSQL/SQLite/MSSQL).
|
|
@@ -2,19 +2,25 @@
|
|
|
2
2
|
|
|
3
3
|
import TenantIterator from "../tenants/tenant-iterator.js"
|
|
4
4
|
|
|
5
|
+
const DEFAULT_HEARTBEAT_INTERVAL_MS = 30_000
|
|
6
|
+
|
|
5
7
|
export default class TenantDatabaseCommandHelper {
|
|
6
8
|
/**
|
|
7
9
|
* Runs constructor.
|
|
8
10
|
* @param {object} args - Options object.
|
|
9
11
|
* @param {import("./base-command.js").default} args.command - CLI command instance.
|
|
12
|
+
* @param {number} [args.heartbeatIntervalMs] - Interval between progress heartbeats.
|
|
10
13
|
* @param {string | undefined} args.identifier - Tenant database identifier.
|
|
14
|
+
* @param {(message: string) => void} [args.output] - Progress output handler.
|
|
11
15
|
*/
|
|
12
|
-
constructor({command, identifier}) {
|
|
16
|
+
constructor({command, heartbeatIntervalMs = DEFAULT_HEARTBEAT_INTERVAL_MS, identifier, output = console.log}) {
|
|
13
17
|
if (!identifier) throw new Error("Missing tenant database identifier argument")
|
|
14
18
|
|
|
15
19
|
this.command = command
|
|
16
20
|
this.configuration = command.getConfiguration()
|
|
21
|
+
this.heartbeatIntervalMs = heartbeatIntervalMs
|
|
17
22
|
this.identifier = identifier
|
|
23
|
+
this.output = output
|
|
18
24
|
this.provider = this.configuration.getTenantDatabaseProvider(identifier)
|
|
19
25
|
}
|
|
20
26
|
|
|
@@ -78,13 +84,42 @@ export default class TenantDatabaseCommandHelper {
|
|
|
78
84
|
*/
|
|
79
85
|
async eachTenant(callback) {
|
|
80
86
|
const tenants = await this.listTenants()
|
|
87
|
+
const commandName = this.command.processArgs?.[0] || "db:tenants"
|
|
88
|
+
const parallelCount = this.parallelCount()
|
|
89
|
+
const progressPrefix = `${commandName} ${this.identifier}`
|
|
90
|
+
let activeTenantCount = 0
|
|
91
|
+
let completedTenantCount = 0
|
|
81
92
|
const iterator = new TenantIterator({
|
|
82
93
|
configuration: this.configuration,
|
|
83
94
|
identifier: this.identifier,
|
|
84
|
-
parallelCount
|
|
95
|
+
parallelCount
|
|
85
96
|
})
|
|
97
|
+
const progressHeartbeat = setInterval(() => {
|
|
98
|
+
this.output(`${progressPrefix}: heartbeat: ${completedTenantCount}/${tenants.length} completed, ${activeTenantCount} active`)
|
|
99
|
+
}, this.heartbeatIntervalMs)
|
|
100
|
+
|
|
101
|
+
progressHeartbeat.unref()
|
|
102
|
+
this.output(`${progressPrefix}: processing ${tenants.length} tenant(s) with parallelism ${parallelCount}`)
|
|
103
|
+
|
|
104
|
+
try {
|
|
105
|
+
const processedTenantCount = await iterator.run(tenants, async (args) => {
|
|
106
|
+
activeTenantCount++
|
|
107
|
+
|
|
108
|
+
try {
|
|
109
|
+
await callback(args)
|
|
110
|
+
completedTenantCount++
|
|
111
|
+
this.output(`${progressPrefix}: completed ${TenantIterator.tenantLabel(args.tenant)} (${completedTenantCount}/${tenants.length})`)
|
|
112
|
+
} finally {
|
|
113
|
+
activeTenantCount--
|
|
114
|
+
}
|
|
115
|
+
})
|
|
86
116
|
|
|
87
|
-
|
|
117
|
+
this.output(`${progressPrefix}: finished ${processedTenantCount}/${tenants.length} tenant(s)`)
|
|
118
|
+
|
|
119
|
+
return processedTenantCount
|
|
120
|
+
} finally {
|
|
121
|
+
clearInterval(progressHeartbeat)
|
|
122
|
+
}
|
|
88
123
|
}
|
|
89
124
|
|
|
90
125
|
/**
|
|
@@ -3,15 +3,21 @@ export default class TenantDatabaseCommandHelper {
|
|
|
3
3
|
* Runs constructor.
|
|
4
4
|
* @param {object} args - Options object.
|
|
5
5
|
* @param {import("./base-command.js").default} args.command - CLI command instance.
|
|
6
|
+
* @param {number} [args.heartbeatIntervalMs] - Interval between progress heartbeats.
|
|
6
7
|
* @param {string | undefined} args.identifier - Tenant database identifier.
|
|
8
|
+
* @param {(message: string) => void} [args.output] - Progress output handler.
|
|
7
9
|
*/
|
|
8
|
-
constructor({ command, identifier }: {
|
|
10
|
+
constructor({ command, heartbeatIntervalMs, identifier, output }: {
|
|
9
11
|
command: import("./base-command.js").default;
|
|
12
|
+
heartbeatIntervalMs?: number | undefined;
|
|
10
13
|
identifier: string | undefined;
|
|
14
|
+
output?: ((message: string) => void) | undefined;
|
|
11
15
|
});
|
|
12
16
|
command: import("./base-command.js").default;
|
|
13
17
|
configuration: import("../configuration.js").default;
|
|
18
|
+
heartbeatIntervalMs: number;
|
|
14
19
|
identifier: string;
|
|
20
|
+
output: (message: string) => void;
|
|
15
21
|
provider: import("../configuration-types.js").TenantDatabaseProviderType;
|
|
16
22
|
/**
|
|
17
23
|
* Runs validate tenant database identifier.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tenant-database-command-helper.d.ts","sourceRoot":"","sources":["../../../src/cli/tenant-database-command-helper.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"tenant-database-command-helper.d.ts","sourceRoot":"","sources":["../../../src/cli/tenant-database-command-helper.js"],"names":[],"mappings":"AAMA;IACE;;;;;;;OAOG;IACH,kEALG;QAAkD,OAAO,EAAjD,OAAO,mBAAmB,EAAE,OAAO;QACrB,mBAAmB;QACR,UAAU,EAAnC,MAAM,GAAG,SAAS;QACe,MAAM,cAA7B,MAAM,KAAK,IAAI;KACnC,EAUA;IANC,6CAAsB;IACtB,qDAA+C;IAC/C,4BAA8C;IAC9C,mBAA4B;IAC5B,kBATmB,MAAM,KAAK,IAAI,CASd;IACpB,yEAAwE;IAG1E;;yBAEqB;IACrB,oCADa,IAAI,CAmBhB;IAED;;;OAGG;IACH,qBAFa,OAAO,CAAC,IAAI,CAAC,CAIzB;IAED;;;OAGG;IACH,eAFa,OAAO,CAAC,KAAK,CAAC,OAAC,CAAC,CAAC,CAkB7B;IAED;;;;OAIG;IACH,qBAHW,CAAS,IAAiG,EAAjG;QAAC,qBAAqB,EAAE,OAAO,2BAA2B,EAAE,yBAAyB,CAAC;QAAC,MAAM,EAAE,OAAC,CAAA;KAAC,KAAI,OAAO,CAAC,IAAI,CAAC,GACzH,OAAO,CAAC,MAAM,CAAC,CAwC3B;IAED;;;OAGG;IACH,iBAFa,MAAM,CA0BlB;CACF"}
|
|
@@ -1,18 +1,23 @@
|
|
|
1
1
|
// @ts-check
|
|
2
2
|
import TenantIterator from "../tenants/tenant-iterator.js";
|
|
3
|
+
const DEFAULT_HEARTBEAT_INTERVAL_MS = 30_000;
|
|
3
4
|
export default class TenantDatabaseCommandHelper {
|
|
4
5
|
/**
|
|
5
6
|
* Runs constructor.
|
|
6
7
|
* @param {object} args - Options object.
|
|
7
8
|
* @param {import("./base-command.js").default} args.command - CLI command instance.
|
|
9
|
+
* @param {number} [args.heartbeatIntervalMs] - Interval between progress heartbeats.
|
|
8
10
|
* @param {string | undefined} args.identifier - Tenant database identifier.
|
|
11
|
+
* @param {(message: string) => void} [args.output] - Progress output handler.
|
|
9
12
|
*/
|
|
10
|
-
constructor({ command, identifier }) {
|
|
13
|
+
constructor({ command, heartbeatIntervalMs = DEFAULT_HEARTBEAT_INTERVAL_MS, identifier, output = console.log }) {
|
|
11
14
|
if (!identifier)
|
|
12
15
|
throw new Error("Missing tenant database identifier argument");
|
|
13
16
|
this.command = command;
|
|
14
17
|
this.configuration = command.getConfiguration();
|
|
18
|
+
this.heartbeatIntervalMs = heartbeatIntervalMs;
|
|
15
19
|
this.identifier = identifier;
|
|
20
|
+
this.output = output;
|
|
16
21
|
this.provider = this.configuration.getTenantDatabaseProvider(identifier);
|
|
17
22
|
}
|
|
18
23
|
/**
|
|
@@ -65,12 +70,39 @@ export default class TenantDatabaseCommandHelper {
|
|
|
65
70
|
*/
|
|
66
71
|
async eachTenant(callback) {
|
|
67
72
|
const tenants = await this.listTenants();
|
|
73
|
+
const commandName = this.command.processArgs?.[0] || "db:tenants";
|
|
74
|
+
const parallelCount = this.parallelCount();
|
|
75
|
+
const progressPrefix = `${commandName} ${this.identifier}`;
|
|
76
|
+
let activeTenantCount = 0;
|
|
77
|
+
let completedTenantCount = 0;
|
|
68
78
|
const iterator = new TenantIterator({
|
|
69
79
|
configuration: this.configuration,
|
|
70
80
|
identifier: this.identifier,
|
|
71
|
-
parallelCount
|
|
81
|
+
parallelCount
|
|
72
82
|
});
|
|
73
|
-
|
|
83
|
+
const progressHeartbeat = setInterval(() => {
|
|
84
|
+
this.output(`${progressPrefix}: heartbeat: ${completedTenantCount}/${tenants.length} completed, ${activeTenantCount} active`);
|
|
85
|
+
}, this.heartbeatIntervalMs);
|
|
86
|
+
progressHeartbeat.unref();
|
|
87
|
+
this.output(`${progressPrefix}: processing ${tenants.length} tenant(s) with parallelism ${parallelCount}`);
|
|
88
|
+
try {
|
|
89
|
+
const processedTenantCount = await iterator.run(tenants, async (args) => {
|
|
90
|
+
activeTenantCount++;
|
|
91
|
+
try {
|
|
92
|
+
await callback(args);
|
|
93
|
+
completedTenantCount++;
|
|
94
|
+
this.output(`${progressPrefix}: completed ${TenantIterator.tenantLabel(args.tenant)} (${completedTenantCount}/${tenants.length})`);
|
|
95
|
+
}
|
|
96
|
+
finally {
|
|
97
|
+
activeTenantCount--;
|
|
98
|
+
}
|
|
99
|
+
});
|
|
100
|
+
this.output(`${progressPrefix}: finished ${processedTenantCount}/${tenants.length} tenant(s)`);
|
|
101
|
+
return processedTenantCount;
|
|
102
|
+
}
|
|
103
|
+
finally {
|
|
104
|
+
clearInterval(progressHeartbeat);
|
|
105
|
+
}
|
|
74
106
|
}
|
|
75
107
|
/**
|
|
76
108
|
* Runs parallel count.
|
|
@@ -97,4 +129,4 @@ export default class TenantDatabaseCommandHelper {
|
|
|
97
129
|
return parallelCount;
|
|
98
130
|
}
|
|
99
131
|
}
|
|
100
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVuYW50LWRhdGFiYXNlLWNvbW1hbmQtaGVscGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NsaS90ZW5hbnQtZGF0YWJhc2UtY29tbWFuZC1oZWxwZXIuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTtBQUVaLE9BQU8sY0FBYyxNQUFNLCtCQUErQixDQUFBO0FBRTFELE1BQU0sQ0FBQyxPQUFPLE9BQU8sMkJBQTJCO0lBQzlDOzs7OztPQUtHO0lBQ0gsWUFBWSxFQUFDLE9BQU8sRUFBRSxVQUFVLEVBQUM7UUFDL0IsSUFBSSxDQUFDLFVBQVU7WUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLDZDQUE2QyxDQUFDLENBQUE7UUFFL0UsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUE7UUFDdEIsSUFBSSxDQUFDLGFBQWEsR0FBRyxPQUFPLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQTtRQUMvQyxJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQTtRQUM1QixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMseUJBQXlCLENBQUMsVUFBVSxDQUFDLENBQUE7SUFDMUUsQ0FBQztJQUVEOzt5QkFFcUI7SUFDckIsZ0NBQWdDO1FBQzlCLE1BQU0scUJBQXFCLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyx3QkFBd0IsRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQTtRQUU1RixJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztZQUMzQixNQUFNLElBQUksS0FBSyxDQUFDLDJDQUEyQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQTtRQUMvRSxDQUFDO1FBRUQsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ3RDLE1BQU0sSUFBSSxLQUFLLENBQUMsdUJBQXVCLElBQUksQ0FBQyxVQUFVLDBDQUEwQyxDQUFDLENBQUE7UUFDbkcsQ0FBQztRQUVELElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyw4QkFBOEIsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztZQUM3RSxNQUFNLElBQUksS0FBSyxDQUFDLDhCQUE4QixJQUFJLENBQUMsVUFBVSx5REFBeUQsQ0FBQyxDQUFBO1FBQ3pILENBQUM7UUFFRCxJQUFJLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLEtBQUssVUFBVSxFQUFFLENBQUM7WUFDcEQsTUFBTSxJQUFJLEtBQUssQ0FBQyxnQ0FBZ0MsSUFBSSxDQUFDLFVBQVUsMEJBQTBCLENBQUMsQ0FBQTtRQUM1RixDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7T0FHRztJQUNILEtBQUssQ0FBQyxpQkFBaUI7UUFDckIsTUFBTSxJQUFJLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxFQUFDLElBQUksRUFBRSxZQUFZLEVBQUMsQ0FBQyxDQUFBO0lBQzNELENBQUM7SUFFRDs7O09BR0c7SUFDSCxLQUFLLENBQUMsV0FBVztRQUNmLElBQUksQ0FBQyxnQ0FBZ0MsRUFBRSxDQUFBO1FBQ3ZDLE1BQU0sSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUE7UUFFOUIsTUFBTSxPQUFPLEdBQUcsTUFBTSxJQUFJLENBQUMsYUFBYSxDQUFDLGlCQUFpQixDQUFDLEVBQUMsSUFBSSxFQUFFLHlCQUF5QixJQUFJLENBQUMsVUFBVSxFQUFFLEVBQUMsRUFBRSxLQUFLLElBQUksRUFBRTtZQUN4SCxPQUFPLE1BQU0sSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUM7Z0JBQ3JDLGFBQWEsRUFBRSxJQUFJLENBQUMsYUFBYTtnQkFDakMsVUFBVSxFQUFFLElBQUksQ0FBQyxVQUFVO2FBQzVCLENBQUMsQ0FBQTtRQUNKLENBQUMsQ0FBQyxDQUFBO1FBRUYsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUM1QixNQUFNLElBQUksS0FBSyxDQUFDLGdDQUFnQyxJQUFJLENBQUMsVUFBVSx3Q0FBd0MsQ0FBQyxDQUFBO1FBQzFHLENBQUM7UUFFRCxPQUFPLE9BQU8sQ0FBQTtJQUNoQixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILEtBQUssQ0FBQyxVQUFVLENBQUMsUUFBUTtRQUN2QixNQUFNLE9BQU8sR0FBRyxNQUFNLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQTtRQUN4QyxNQUFNLFFBQVEsR0FBRyxJQUFJLGNBQWMsQ0FBQztZQUNsQyxhQUFhLEVBQUUsSUFBSSxDQUFDLGFBQWE7WUFDakMsVUFBVSxFQUFFLElBQUksQ0FBQyxVQUFVO1lBQzNCLGFBQWEsRUFBRSxJQUFJLENBQUMsYUFBYSxFQUFFO1NBQ3BDLENBQUMsQ0FBQTtRQUVGLE9BQU8sTUFBTSxRQUFRLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsQ0FBQTtJQUM5QyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsYUFBYTtRQUNYLE1BQU0saUJBQWlCLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsaUJBQWlCLElBQUksRUFBRSxDQUFBO1FBQ3BFLElBQUksV0FBVyxHQUFHLGlCQUFpQixDQUFDLFFBQVEsQ0FBQTtRQUU1QyxJQUFJLFdBQVcsS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUM5QixNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLE9BQU8sQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQTtZQUU5RSxJQUFJLGdCQUFnQixJQUFJLENBQUMsRUFBRSxDQUFDO2dCQUMxQixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxDQUFDLGdCQUFnQixHQUFHLENBQUMsQ0FBQyxDQUFBO2dCQUVoRSxXQUFXLEdBQUcsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUE7WUFDcEUsQ0FBQztRQUNILENBQUM7UUFFRCxJQUFJLFdBQVcsS0FBSyxTQUFTLElBQUksV0FBVyxLQUFLLEtBQUs7WUFBRSxPQUFPLENBQUMsQ0FBQTtRQUNoRSxJQUFJLFdBQVcsS0FBSyxJQUFJO1lBQUUsT0FBTyxFQUFFLENBQUE7UUFFbkMsTUFBTSxhQUFhLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFBO1FBRXpDLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxJQUFJLGFBQWEsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUMxRCxNQUFNLElBQUksS0FBSyxDQUFDLG1FQUFtRSxXQUFXLEVBQUUsQ0FBQyxDQUFBO1FBQ25HLENBQUM7UUFFRCxPQUFPLGFBQWEsQ0FBQTtJQUN0QixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcblxuaW1wb3J0IFRlbmFudEl0ZXJhdG9yIGZyb20gXCIuLi90ZW5hbnRzL3RlbmFudC1pdGVyYXRvci5qc1wiXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRlbmFudERhdGFiYXNlQ29tbWFuZEhlbHBlciB7XG4gIC8qKlxuICAgKiBSdW5zIGNvbnN0cnVjdG9yLlxuICAgKiBAcGFyYW0ge29iamVjdH0gYXJncyAtIE9wdGlvbnMgb2JqZWN0LlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4vYmFzZS1jb21tYW5kLmpzXCIpLmRlZmF1bHR9IGFyZ3MuY29tbWFuZCAtIENMSSBjb21tYW5kIGluc3RhbmNlLlxuICAgKiBAcGFyYW0ge3N0cmluZyB8IHVuZGVmaW5lZH0gYXJncy5pZGVudGlmaWVyIC0gVGVuYW50IGRhdGFiYXNlIGlkZW50aWZpZXIuXG4gICAqL1xuICBjb25zdHJ1Y3Rvcih7Y29tbWFuZCwgaWRlbnRpZmllcn0pIHtcbiAgICBpZiAoIWlkZW50aWZpZXIpIHRocm93IG5ldyBFcnJvcihcIk1pc3NpbmcgdGVuYW50IGRhdGFiYXNlIGlkZW50aWZpZXIgYXJndW1lbnRcIilcblxuICAgIHRoaXMuY29tbWFuZCA9IGNvbW1hbmRcbiAgICB0aGlzLmNvbmZpZ3VyYXRpb24gPSBjb21tYW5kLmdldENvbmZpZ3VyYXRpb24oKVxuICAgIHRoaXMuaWRlbnRpZmllciA9IGlkZW50aWZpZXJcbiAgICB0aGlzLnByb3ZpZGVyID0gdGhpcy5jb25maWd1cmF0aW9uLmdldFRlbmFudERhdGFiYXNlUHJvdmlkZXIoaWRlbnRpZmllcilcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIHZhbGlkYXRlIHRlbmFudCBkYXRhYmFzZSBpZGVudGlmaWVyLlxuICAgKiBAcmV0dXJucyB7dm9pZH0gKi9cbiAgdmFsaWRhdGVUZW5hbnREYXRhYmFzZUlkZW50aWZpZXIoKSB7XG4gICAgY29uc3QgZGF0YWJhc2VDb25maWd1cmF0aW9uID0gdGhpcy5jb25maWd1cmF0aW9uLmdldERhdGFiYXNlQ29uZmlndXJhdGlvbigpW3RoaXMuaWRlbnRpZmllcl1cblxuICAgIGlmICghZGF0YWJhc2VDb25maWd1cmF0aW9uKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIHN1Y2ggZGF0YWJhc2UgaWRlbnRpZmllciBjb25maWd1cmVkOiAke3RoaXMuaWRlbnRpZmllcn1gKVxuICAgIH1cblxuICAgIGlmICghZGF0YWJhc2VDb25maWd1cmF0aW9uLnRlbmFudE9ubHkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRGF0YWJhc2UgaWRlbnRpZmllciAke3RoaXMuaWRlbnRpZmllcn0gaXMgbm90IGNvbmZpZ3VyZWQgd2l0aCB0ZW5hbnRPbmx5OiB0cnVlYClcbiAgICB9XG5cbiAgICBpZiAodGhpcy5jb25maWd1cmF0aW9uLmdldERpc2FibGVkRGF0YWJhc2VJZGVudGlmaWVycygpLmhhcyh0aGlzLmlkZW50aWZpZXIpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFRlbmFudCBkYXRhYmFzZSBpZGVudGlmaWVyICR7dGhpcy5pZGVudGlmaWVyfSBpcyBkaXNhYmxlZCBieSBWRUxPQ0lPVVNfRElTQUJMRURfREFUQUJBU0VfSURFTlRJRklFUlNgKVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgdGhpcy5wcm92aWRlci5saXN0VGVuYW50cyAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFRlbmFudCBkYXRhYmFzZSBwcm92aWRlciBmb3IgJHt0aGlzLmlkZW50aWZpZXJ9IG11c3QgZGVmaW5lIGxpc3RUZW5hbnRzYClcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUnVucyBpbml0aWFsaXplIHJ1bnRpbWUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fSAtIFJlc29sdmVzIHdoZW4gYXBwIHJ1bnRpbWUgaXMgaW5pdGlhbGl6ZWQuXG4gICAqL1xuICBhc3luYyBpbml0aWFsaXplUnVudGltZSgpIHtcbiAgICBhd2FpdCB0aGlzLmNvbmZpZ3VyYXRpb24uaW5pdGlhbGl6ZSh7dHlwZTogXCJkYi10ZW5hbnRzXCJ9KVxuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgbGlzdCB0ZW5hbnRzLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxBcnJheTw/Pj59IC0gVGVuYW50cy5cbiAgICovXG4gIGFzeW5jIGxpc3RUZW5hbnRzKCkge1xuICAgIHRoaXMudmFsaWRhdGVUZW5hbnREYXRhYmFzZUlkZW50aWZpZXIoKVxuICAgIGF3YWl0IHRoaXMuaW5pdGlhbGl6ZVJ1bnRpbWUoKVxuXG4gICAgY29uc3QgdGVuYW50cyA9IGF3YWl0IHRoaXMuY29uZmlndXJhdGlvbi5lbnN1cmVDb25uZWN0aW9ucyh7bmFtZTogYFRlbmFudCBkYXRhYmFzZSBsaXN0OiAke3RoaXMuaWRlbnRpZmllcn1gfSwgYXN5bmMgKCkgPT4ge1xuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMucHJvdmlkZXIubGlzdFRlbmFudHMoe1xuICAgICAgICBjb25maWd1cmF0aW9uOiB0aGlzLmNvbmZpZ3VyYXRpb24sXG4gICAgICAgIGlkZW50aWZpZXI6IHRoaXMuaWRlbnRpZmllclxuICAgICAgfSlcbiAgICB9KVxuXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHRlbmFudHMpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFRlbmFudCBkYXRhYmFzZSBwcm92aWRlciBmb3IgJHt0aGlzLmlkZW50aWZpZXJ9IG11c3QgcmV0dXJuIGFuIGFycmF5IGZyb20gbGlzdFRlbmFudHNgKVxuICAgIH1cblxuICAgIHJldHVybiB0ZW5hbnRzXG4gIH1cblxuICAvKipcbiAgICogUnVucyBlYWNoIHRlbmFudC5cbiAgICogQHBhcmFtIHtmdW5jdGlvbih7ZGF0YWJhc2VDb25maWd1cmF0aW9uOiBpbXBvcnQoXCIuLi9jb25maWd1cmF0aW9uLXR5cGVzLmpzXCIpLkRhdGFiYXNlQ29uZmlndXJhdGlvblR5cGUsIHRlbmFudDogP30pIDogUHJvbWlzZTx2b2lkPn0gY2FsbGJhY2sgLSBDYWxsYmFjay5cbiAgICogQHJldHVybnMge1Byb21pc2U8bnVtYmVyPn0gLSBOdW1iZXIgb2YgdGVuYW50cyBwcm9jZXNzZWQuXG4gICAqL1xuICBhc3luYyBlYWNoVGVuYW50KGNhbGxiYWNrKSB7XG4gICAgY29uc3QgdGVuYW50cyA9IGF3YWl0IHRoaXMubGlzdFRlbmFudHMoKVxuICAgIGNvbnN0IGl0ZXJhdG9yID0gbmV3IFRlbmFudEl0ZXJhdG9yKHtcbiAgICAgIGNvbmZpZ3VyYXRpb246IHRoaXMuY29uZmlndXJhdGlvbixcbiAgICAgIGlkZW50aWZpZXI6IHRoaXMuaWRlbnRpZmllcixcbiAgICAgIHBhcmFsbGVsQ291bnQ6IHRoaXMucGFyYWxsZWxDb3VudCgpXG4gICAgfSlcblxuICAgIHJldHVybiBhd2FpdCBpdGVyYXRvci5ydW4odGVuYW50cywgY2FsbGJhY2spXG4gIH1cblxuICAvKipcbiAgICogUnVucyBwYXJhbGxlbCBjb3VudC5cbiAgICogQHJldHVybnMge251bWJlcn0gLSBOdW1iZXIgb2YgdGVuYW50cyB0byBwcm9jZXNzIGNvbmN1cnJlbnRseS5cbiAgICovXG4gIHBhcmFsbGVsQ291bnQoKSB7XG4gICAgY29uc3QgcGFyc2VkUHJvY2Vzc0FyZ3MgPSB0aGlzLmNvbW1hbmQuYXJncz8ucGFyc2VkUHJvY2Vzc0FyZ3MgfHwge31cbiAgICBsZXQgcGFyYWxsZWxBcmcgPSBwYXJzZWRQcm9jZXNzQXJncy5wYXJhbGxlbFxuXG4gICAgaWYgKHBhcmFsbGVsQXJnID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IHBhcmFsbGVsQXJnSW5kZXggPSB0aGlzLmNvbW1hbmQucHJvY2Vzc0FyZ3M/LmluZGV4T2YoXCItLXBhcmFsbGVsXCIpID8/IC0xXG5cbiAgICAgIGlmIChwYXJhbGxlbEFyZ0luZGV4ID49IDApIHtcbiAgICAgICAgY29uc3QgbmV4dEFyZyA9IHRoaXMuY29tbWFuZC5wcm9jZXNzQXJncz8uW3BhcmFsbGVsQXJnSW5kZXggKyAxXVxuXG4gICAgICAgIHBhcmFsbGVsQXJnID0gbmV4dEFyZyAmJiAhbmV4dEFyZy5zdGFydHNXaXRoKFwiLVwiKSA/IG5leHRBcmcgOiB0cnVlXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHBhcmFsbGVsQXJnID09PSB1bmRlZmluZWQgfHwgcGFyYWxsZWxBcmcgPT09IGZhbHNlKSByZXR1cm4gMVxuICAgIGlmIChwYXJhbGxlbEFyZyA9PT0gdHJ1ZSkgcmV0dXJuIDIwXG5cbiAgICBjb25zdCBwYXJhbGxlbENvdW50ID0gTnVtYmVyKHBhcmFsbGVsQXJnKVxuXG4gICAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKHBhcmFsbGVsQ291bnQpIHx8IHBhcmFsbGVsQ291bnQgPCAxKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYC0tcGFyYWxsZWwgbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXIgd2hlbiBhIHZhbHVlIGlzIHByb3ZpZGVkOiAke3BhcmFsbGVsQXJnfWApXG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcmFsbGVsQ291bnRcbiAgfVxufVxuIl19
|
|
132
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVuYW50LWRhdGFiYXNlLWNvbW1hbmQtaGVscGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NsaS90ZW5hbnQtZGF0YWJhc2UtY29tbWFuZC1oZWxwZXIuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTtBQUVaLE9BQU8sY0FBYyxNQUFNLCtCQUErQixDQUFBO0FBRTFELE1BQU0sNkJBQTZCLEdBQUcsTUFBTSxDQUFBO0FBRTVDLE1BQU0sQ0FBQyxPQUFPLE9BQU8sMkJBQTJCO0lBQzlDOzs7Ozs7O09BT0c7SUFDSCxZQUFZLEVBQUMsT0FBTyxFQUFFLG1CQUFtQixHQUFHLDZCQUE2QixFQUFFLFVBQVUsRUFBRSxNQUFNLEdBQUcsT0FBTyxDQUFDLEdBQUcsRUFBQztRQUMxRyxJQUFJLENBQUMsVUFBVTtZQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsNkNBQTZDLENBQUMsQ0FBQTtRQUUvRSxJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQTtRQUN0QixJQUFJLENBQUMsYUFBYSxHQUFHLE9BQU8sQ0FBQyxnQkFBZ0IsRUFBRSxDQUFBO1FBQy9DLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxtQkFBbUIsQ0FBQTtRQUM5QyxJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQTtRQUM1QixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQTtRQUNwQixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMseUJBQXlCLENBQUMsVUFBVSxDQUFDLENBQUE7SUFDMUUsQ0FBQztJQUVEOzt5QkFFcUI7SUFDckIsZ0NBQWdDO1FBQzlCLE1BQU0scUJBQXFCLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyx3QkFBd0IsRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQTtRQUU1RixJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztZQUMzQixNQUFNLElBQUksS0FBSyxDQUFDLDJDQUEyQyxJ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QUFXLEVBQUUsT0FBTyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFBO1lBRTlFLElBQUksZ0JBQWdCLElBQUksQ0FBQyxFQUFFLENBQUM7Z0JBQzFCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLENBQUMsZ0JBQWdCLEdBQUcsQ0FBQyxDQUFDLENBQUE7Z0JBRWhFLFdBQVcsR0FBRyxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQTtZQUNwRSxDQUFDO1FBQ0gsQ0FBQztRQUVELElBQUksV0FBVyxLQUFLLFNBQVMsSUFBSSxXQUFXLEtBQUssS0FBSztZQUFFLE9BQU8sQ0FBQyxDQUFBO1FBQ2hFLElBQUksV0FBVyxLQUFLLElBQUk7WUFBRSxPQUFPLEVBQUUsQ0FBQTtRQUVuQyxNQUFNLGFBQWEsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUE7UUFFekMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLElBQUksYUFBYSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQzFELE1BQU0sSUFBSSxLQUFLLENBQUMsbUVBQW1FLFdBQVcsRUFBRSxDQUFDLENBQUE7UUFDbkcsQ0FBQztRQUVELE9BQU8sYUFBYSxDQUFBO0lBQ3RCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG5pbXBvcnQgVGVuYW50SXRlcmF0b3IgZnJvbSBcIi4uL3RlbmFudHMvdGVuYW50LWl0ZXJhdG9yLmpzXCJcblxuY29uc3QgREVGQVVMVF9IRUFSVEJFQVRfSU5URVJWQUxfTVMgPSAzMF8wMDBcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGVuYW50RGF0YWJhc2VDb21tYW5kSGVscGVyIHtcbiAgLyoqXG4gICAqIFJ1bnMgY29uc3RydWN0b3IuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gT3B0aW9ucyBvYmplY3QuXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi9iYXNlLWNvbW1hbmQuanNcIikuZGVmYXVsdH0gYXJncy5jb21tYW5kIC0gQ0xJIGNvbW1hbmQgaW5zdGFuY2UuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbYXJncy5oZWFydGJlYXRJbnRlcnZhbE1zXSAtIEludGVydmFsIGJldHdlZW4gcHJvZ3Jlc3MgaGVhcnRiZWF0cy5cbiAgICogQHBhcmFtIHtzdHJpbmcgfCB1bmRlZmluZWR9IGFyZ3MuaWRlbnRpZmllciAtIFRlbmFudCBkYXRhYmFzZSBpZGVudGlmaWVyLlxuICAgKiBAcGFyYW0geyhtZXNzYWdlOiBzdHJpbmcpID0+IHZvaWR9IFthcmdzLm91dHB1dF0gLSBQcm9ncmVzcyBvdXRwdXQgaGFuZGxlci5cbiAgICovXG4gIGNvbnN0cnVjdG9yKHtjb21tYW5kLCBoZWFydGJlYXRJbnRlcnZhbE1zID0gREVGQVVMVF9IRUFSVEJFQVRfSU5URVJWQUxfTVMsIGlkZW50aWZpZXIsIG91dHB1dCA9IGNvbnNvbGUubG9nfSkge1xuICAgIGlmICghaWRlbnRpZmllcikgdGhyb3cgbmV3IEVycm9yKFwiTWlzc2luZyB0ZW5hbnQgZGF0YWJhc2UgaWRlbnRpZmllciBhcmd1bWVudFwiKVxuXG4gICAgdGhpcy5jb21tYW5kID0gY29tbWFuZFxuICAgIHRoaXMuY29uZmlndXJhdGlvbiA9IGNvbW1hbmQuZ2V0Q29uZmlndXJhdGlvbigpXG4gICAgdGhpcy5oZWFydGJlYXRJbnRlcnZhbE1zID0gaGVhcnRiZWF0SW50ZXJ2YWxNc1xuICAgIHRoaXMuaWRlbnRpZmllciA9IGlkZW50aWZpZXJcbiAgICB0aGlzLm91dHB1dCA9IG91dHB1dFxuICAgIHRoaXMucHJvdmlkZXIgPSB0aGlzLmNvbmZpZ3VyYXRpb24uZ2V0VGVuYW50RGF0YWJhc2VQcm92aWRlcihpZGVudGlmaWVyKVxuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgdmFsaWRhdGUgdGVuYW50IGRhdGFiYXNlIGlkZW50aWZpZXIuXG4gICAqIEByZXR1cm5zIHt2b2lkfSAqL1xuICB2YWxpZGF0ZVRlbmFudERhdGFiYXNlSWRlbnRpZmllcigpIHtcbiAgICBjb25zdCBkYXRhYmFzZUNvbmZpZ3VyYXRpb24gPSB0aGlzLmNvbmZpZ3VyYXRpb24uZ2V0RGF0YWJhc2VDb25maWd1cmF0aW9uKClbdGhpcy5pZGVudGlmaWVyXVxuXG4gICAgaWYgKCFkYXRhYmFzZUNvbmZpZ3VyYXRpb24pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgTm8gc3VjaCBkYXRhYmFzZSBpZGVudGlmaWVyIGNvbmZpZ3VyZWQ6ICR7dGhpcy5pZGVudGlmaWVyfWApXG4gICAgfVxuXG4gICAgaWYgKCFkYXRhYmFzZUNvbmZpZ3VyYXRpb24udGVuYW50T25seSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBEYXRhYmFzZSBpZGVudGlmaWVyICR7dGhpcy5pZGVudGlmaWVyfSBpcyBub3QgY29uZmlndXJlZCB3aXRoIHRlbmFudE9ubHk6IHRydWVgKVxuICAgIH1cblxuICAgIGlmICh0aGlzLmNvbmZpZ3VyYXRpb24uZ2V0RGlzYWJsZWREYXRhYmFzZUlkZW50aWZpZXJzKCkuaGFzKHRoaXMuaWRlbnRpZmllcikpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVGVuYW50IGRhdGFiYXNlIGlkZW50aWZpZXIgJHt0aGlzLmlkZW50aWZpZXJ9IGlzIGRpc2FibGVkIGJ5IFZFTE9DSU9VU19ESVNBQkxFRF9EQVRBQkFTRV9JREVOVElGSUVSU2ApXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiB0aGlzLnByb3ZpZGVyLmxpc3RUZW5hbnRzICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVGVuYW50IGRhdGFiYXNlIHByb3ZpZGVyIGZvciAke3RoaXMuaWRlbnRpZmllcn0gbXVzdCBkZWZpbmUgbGlzdFRlbmFudHNgKVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIGluaXRpYWxpemUgcnVudGltZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59IC0gUmVzb2x2ZXMgd2hlbiBhcHAgcnVudGltZSBpcyBpbml0aWFsaXplZC5cbiAgICovXG4gIGFzeW5jIGluaXRpYWxpemVSdW50aW1lKCkge1xuICAgIGF3YWl0IHRoaXMuY29uZmlndXJhdGlvbi5pbml0aWFsaXplKHt0eXBlOiBcImRiLXRlbmFudHNcIn0pXG4gIH1cblxuICAvKipcbiAgICogUnVucyBsaXN0IHRlbmFudHMuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPEFycmF5PD8+Pn0gLSBUZW5hbnRzLlxuICAgKi9cbiAgYXN5bmMgbGlzdFRlbmFudHMoKSB7XG4gICAgdGhpcy52YWxpZGF0ZVRlbmFudERhdGFiYXNlSWRlbnRpZmllcigpXG4gICAgYXdhaXQgdGhpcy5pbml0aWFsaXplUnVudGltZSgpXG5cbiAgICBjb25zdCB0ZW5hbnRzID0gYXdhaXQgdGhpcy5jb25maWd1cmF0aW9uLmVuc3VyZUNvbm5lY3Rpb25zKHtuYW1lOiBgVGVuYW50IGRhdGFiYXNlIGxpc3Q6ICR7dGhpcy5pZGVudGlmaWVyfWB9LCBhc3luYyAoKSA9PiB7XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5wcm92aWRlci5saXN0VGVuYW50cyh7XG4gICAgICAgIGNvbmZpZ3VyYXRpb246IHRoaXMuY29uZmlndXJhdGlvbixcbiAgICAgICAgaWRlbnRpZmllcjogdGhpcy5pZGVudGlmaWVyXG4gICAgICB9KVxuICAgIH0pXG5cbiAgICBpZiAoIUFycmF5LmlzQXJyYXkodGVuYW50cykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVGVuYW50IGRhdGFiYXNlIHByb3ZpZGVyIGZvciAke3RoaXMuaWRlbnRpZmllcn0gbXVzdCByZXR1cm4gYW4gYXJyYXkgZnJvbSBsaXN0VGVuYW50c2ApXG4gICAgfVxuXG4gICAgcmV0dXJuIHRlbmFudHNcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIGVhY2ggdGVuYW50LlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKHtkYXRhYmFzZUNvbmZpZ3VyYXRpb246IGltcG9ydChcIi4uL2NvbmZpZ3VyYXRpb24tdHlwZXMuanNcIikuRGF0YWJhc2VDb25maWd1cmF0aW9uVHlwZSwgdGVuYW50OiA/fSkgOiBQcm9taXNlPHZvaWQ+fSBjYWxsYmFjayAtIENhbGxiYWNrLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxudW1iZXI+fSAtIE51bWJlciBvZiB0ZW5hbnRzIHByb2Nlc3NlZC5cbiAgICovXG4gIGFzeW5jIGVhY2hUZW5hbnQoY2FsbGJhY2spIHtcbiAgICBjb25zdCB0ZW5hbnRzID0gYXdhaXQgdGhpcy5saXN0VGVuYW50cygpXG4gICAgY29uc3QgY29tbWFuZE5hbWUgPSB0aGlzLmNvbW1hbmQucHJvY2Vzc0FyZ3M/LlswXSB8fCBcImRiOnRlbmFudHNcIlxuICAgIGNvbnN0IHBhcmFsbGVsQ291bnQgPSB0aGlzLnBhcmFsbGVsQ291bnQoKVxuICAgIGNvbnN0IHByb2dyZXNzUHJlZml4ID0gYCR7Y29tbWFuZE5hbWV9ICR7dGhpcy5pZGVudGlmaWVyfWBcbiAgICBsZXQgYWN0aXZlVGVuYW50Q291bnQgPSAwXG4gICAgbGV0IGNvbXBsZXRlZFRlbmFudENvdW50ID0gMFxuICAgIGNvbnN0IGl0ZXJhdG9yID0gbmV3IFRlbmFudEl0ZXJhdG9yKHtcbiAgICAgIGNvbmZpZ3VyYXRpb246IHRoaXMuY29uZmlndXJhdGlvbixcbiAgICAgIGlkZW50aWZpZXI6IHRoaXMuaWRlbnRpZmllcixcbiAgICAgIHBhcmFsbGVsQ291bnRcbiAgICB9KVxuICAgIGNvbnN0IHByb2dyZXNzSGVhcnRiZWF0ID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgdGhpcy5vdXRwdXQoYCR7cHJvZ3Jlc3NQcmVmaXh9OiBoZWFydGJlYXQ6ICR7Y29tcGxldGVkVGVuYW50Q291bnR9LyR7dGVuYW50cy5sZW5ndGh9IGNvbXBsZXRlZCwgJHthY3RpdmVUZW5hbnRDb3VudH0gYWN0aXZlYClcbiAgICB9LCB0aGlzLmhlYXJ0YmVhdEludGVydmFsTXMpXG5cbiAgICBwcm9ncmVzc0hlYXJ0YmVhdC51bnJlZigpXG4gICAgdGhpcy5vdXRwdXQoYCR7cHJvZ3Jlc3NQcmVmaXh9OiBwcm9jZXNzaW5nICR7dGVuYW50cy5sZW5ndGh9IHRlbmFudChzKSB3aXRoIHBhcmFsbGVsaXNtICR7cGFyYWxsZWxDb3VudH1gKVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHByb2Nlc3NlZFRlbmFudENvdW50ID0gYXdhaXQgaXRlcmF0b3IucnVuKHRlbmFudHMsIGFzeW5jIChhcmdzKSA9PiB7XG4gICAgICAgIGFjdGl2ZVRlbmFudENvdW50KytcblxuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IGNhbGxiYWNrKGFyZ3MpXG4gICAgICAgICAgY29tcGxldGVkVGVuYW50Q291bnQrK1xuICAgICAgICAgIHRoaXMub3V0cHV0KGAke3Byb2dyZXNzUHJlZml4fTogY29tcGxldGVkICR7VGVuYW50SXRlcmF0b3IudGVuYW50TGFiZWwoYXJncy50ZW5hbnQpfSAoJHtjb21wbGV0ZWRUZW5hbnRDb3VudH0vJHt0ZW5hbnRzLmxlbmd0aH0pYClcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICBhY3RpdmVUZW5hbnRDb3VudC0tXG4gICAgICAgIH1cbiAgICAgIH0pXG5cbiAgICAgIHRoaXMub3V0cHV0KGAke3Byb2dyZXNzUHJlZml4fTogZmluaXNoZWQgJHtwcm9jZXNzZWRUZW5hbnRDb3VudH0vJHt0ZW5hbnRzLmxlbmd0aH0gdGVuYW50KHMpYClcblxuICAgICAgcmV0dXJuIHByb2Nlc3NlZFRlbmFudENvdW50XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGNsZWFySW50ZXJ2YWwocHJvZ3Jlc3NIZWFydGJlYXQpXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgcGFyYWxsZWwgY291bnQuXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9IC0gTnVtYmVyIG9mIHRlbmFudHMgdG8gcHJvY2VzcyBjb25jdXJyZW50bHkuXG4gICAqL1xuICBwYXJhbGxlbENvdW50KCkge1xuICAgIGNvbnN0IHBhcnNlZFByb2Nlc3NBcmdzID0gdGhpcy5jb21tYW5kLmFyZ3M/LnBhcnNlZFByb2Nlc3NBcmdzIHx8IHt9XG4gICAgbGV0IHBhcmFsbGVsQXJnID0gcGFyc2VkUHJvY2Vzc0FyZ3MucGFyYWxsZWxcblxuICAgIGlmIChwYXJhbGxlbEFyZyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCBwYXJhbGxlbEFyZ0luZGV4ID0gdGhpcy5jb21tYW5kLnByb2Nlc3NBcmdzPy5pbmRleE9mKFwiLS1wYXJhbGxlbFwiKSA/PyAtMVxuXG4gICAgICBpZiAocGFyYWxsZWxBcmdJbmRleCA+PSAwKSB7XG4gICAgICAgIGNvbnN0IG5leHRBcmcgPSB0aGlzLmNvbW1hbmQucHJvY2Vzc0FyZ3M/LltwYXJhbGxlbEFyZ0luZGV4ICsgMV1cblxuICAgICAgICBwYXJhbGxlbEFyZyA9IG5leHRBcmcgJiYgIW5leHRBcmcuc3RhcnRzV2l0aChcIi1cIikgPyBuZXh0QXJnIDogdHJ1ZVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChwYXJhbGxlbEFyZyA9PT0gdW5kZWZpbmVkIHx8IHBhcmFsbGVsQXJnID09PSBmYWxzZSkgcmV0dXJuIDFcbiAgICBpZiAocGFyYWxsZWxBcmcgPT09IHRydWUpIHJldHVybiAyMFxuXG4gICAgY29uc3QgcGFyYWxsZWxDb3VudCA9IE51bWJlcihwYXJhbGxlbEFyZylcblxuICAgIGlmICghTnVtYmVyLmlzSW50ZWdlcihwYXJhbGxlbENvdW50KSB8fCBwYXJhbGxlbENvdW50IDwgMSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGAtLXBhcmFsbGVsIG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyIHdoZW4gYSB2YWx1ZSBpcyBwcm92aWRlZDogJHtwYXJhbGxlbEFyZ31gKVxuICAgIH1cblxuICAgIHJldHVybiBwYXJhbGxlbENvdW50XG4gIH1cbn1cbiJdfQ==
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tenant-iterator.d.ts","sourceRoot":"","sources":["../../../src/tenants/tenant-iterator.js"],"names":[],"mappings":"AAEA;;;;;;;;GAQG;AACH;IAmFE;;;;OAIG;IACH,2BAHW,OAAC,GACC,MAAM,
|
|
1
|
+
{"version":3,"file":"tenant-iterator.d.ts","sourceRoot":"","sources":["../../../src/tenants/tenant-iterator.js"],"names":[],"mappings":"AAEA;;;;;;;;GAQG;AACH;IAmFE;;;;OAIG;IACH,2BAHW,OAAC,GACC,MAAM,CAiBlB;IAtGD;;;OAGG;IACH,0DAFW;QAAC,aAAa,EAAE,OAAO,qBAAqB,EAAE,OAAO,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,aAAa,CAAC,EAAE,MAAM,CAAA;KAAC,EAM5G;IAHC,qDAAkC;IAClC,mBAA4B;IAC5B,sBAAkC;IAGpC;;;;;OAKG;IACH,aAJW,KAAK,CAAC,OAAC,CAAC,YACR,CAAS,IAAiG,EAAjG;QAAC,qBAAqB,EAAE,OAAO,2BAA2B,EAAE,yBAAyB,CAAC;QAAC,MAAM,EAAE,OAAC,CAAA;KAAC,KAAI,OAAO,CAAC,IAAI,CAAC,GACzH,OAAO,CAAC,MAAM,CAAC,CAgD3B;IAED;;;;OAIG;IACH,wCAHW;QAAC,QAAQ,EAAE,CAAS,IAAiG,EAAjG;YAAC,qBAAqB,EAAE,OAAO,2BAA2B,EAAE,yBAAyB,CAAC;YAAC,MAAM,EAAE,OAAC,CAAA;SAAC,KAAI,OAAO,CAAC,IAAI,CAAC,CAAC;QAAC,MAAM,EAAE,OAAC,CAAA;KAAC,GAChJ,OAAO,CAAC,IAAI,CAAC,CAazB;CAuBF"}
|
|
@@ -84,14 +84,16 @@ export default class TenantIterator {
|
|
|
84
84
|
static tenantLabel(tenant) {
|
|
85
85
|
if (tenant && typeof tenant === "object") {
|
|
86
86
|
const tenantObject = /** @type {{id?: ?, name?: ?, slug?: ?}} */ (tenant);
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
87
|
+
for (const attributeName of /** @type {Array<"slug" | "name" | "id">} */ (["slug", "name", "id"])) {
|
|
88
|
+
const attributeOrAccessor = tenantObject[attributeName];
|
|
89
|
+
const attributeValue = typeof attributeOrAccessor === "function"
|
|
90
|
+
? attributeOrAccessor.call(tenant)
|
|
91
|
+
: attributeOrAccessor;
|
|
92
|
+
if (attributeValue)
|
|
93
|
+
return String(attributeValue);
|
|
94
|
+
}
|
|
93
95
|
}
|
|
94
96
|
return JSON.stringify(tenant);
|
|
95
97
|
}
|
|
96
98
|
}
|
|
97
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVuYW50LWl0ZXJhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3RlbmFudHMvdGVuYW50LWl0ZXJhdG9yLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWjs7Ozs7Ozs7R0FRRztBQUNILE1BQU0sQ0FBQyxPQUFPLE9BQU8sY0FBYztJQUNqQzs7O09BR0c7SUFDSCxZQUFZLEVBQUMsYUFBYSxFQUFFLFVBQVUsRUFBRSxhQUFhLEdBQUcsQ0FBQyxFQUFDO1FBQ3hELElBQUksQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFBO1FBQ2xDLElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFBO1FBQzVCLElBQUksQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFBO0lBQ3BDLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILEtBQUssQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLFFBQVE7UUFDekIsSUFBSSxJQUFJLENBQUMsYUFBYSxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQzVCLEtBQUssTUFBTSxNQUFNLElBQUksT0FBTyxFQUFFLENBQUM7Z0JBQzdCLE1BQU0sSUFBSSxDQUFDLGlCQUFpQixDQUFDLEVBQUMsUUFBUSxFQUFFLE1BQU0sRUFBQyxDQUFDLENBQUE7WUFDbEQsQ0FBQztZQUVELE9BQU8sT0FBTyxDQUFDLE1BQU0sQ0FBQTtRQUN2QixDQUFDO1FBRUQsK0NBQStDO1FBQy9DLE1BQU0sUUFBUSxHQUFHLEVBQUUsQ0FBQTtRQUNuQixNQUFNLE9BQU8sR0FBRyxFQUFFLENBQUE7UUFDbEIsSUFBSSxXQUFXLEdBQUcsQ0FBQyxDQUFBO1FBQ25CLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUE7UUFFaEUsS0FBSyxJQUFJLFdBQVcsR0FBRyxDQUFDLEVBQUUsV0FBVyxHQUFHLFdBQVcsRUFBRSxXQUFXLEVBQUUsRUFB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QU0sQ0FBQyxDQUFBO0lBQy9CLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG4vKipcbiAqIFJ1bnMgYSBjYWxsYmFjayBvbmNlIHdpdGhpbiBlYWNoIHRlbmFudCdzIGNvbnRleHQgZm9yIGEgdGVuYW50IGRhdGFiYXNlIGlkZW50aWZpZXIsXG4gKiBvcHRpb25hbGx5IHNldmVyYWwgdGVuYW50cyBhdCBhIHRpbWUuIEVhY2ggdGVuYW50IGlzIGVudGVyZWQgd2l0aCBgcnVuV2l0aFRlbmFudGAsIGFuZCBhXG4gKiB0ZW5hbnQgd2hvc2UgZGF0YWJhc2UgaWRlbnRpZmllciBpcyBpbmFjdGl2ZSB0aHJvd3MgcmF0aGVyIHRoYW4gcnVubmluZyB0aGUgY2FsbGJhY2tcbiAqIGFnYWluc3QgdGhlIHdyb25nIGNvbm5lY3Rpb24uIFdoZW4gaXRlcmF0aW5nIGluIHBhcmFsbGVsIHRoZSBwZXItdGVuYW50IGZhaWx1cmVzIGFyZVxuICogY29sbGVjdGVkIGFuZCByZXRocm93biB0b2dldGhlciBhcyBhbiBgQWdncmVnYXRlRXJyb3JgIHNvIG9uZSBiYWQgdGVuYW50IGRvZXMgbm90IGhpZGUgdGhlXG4gKiBvdGhlcnMuIFRoaXMgaXMgdGhlIGl0ZXJhdGlvbiBlbmdpbmUgc2hhcmVkIGJ5IHRoZSBgZGI6dGVuYW50czoqYCBDTEkgY29tbWFuZHMgYW5kIHRoZVxuICogcnVudGltZSB0ZW5hbnQgZmHDp2FkZTsgdGhlIGNhbGxlciBpcyByZXNwb25zaWJsZSBmb3IgcHJvZHVjaW5nIHRoZSB0ZW5hbnQgbGlzdC5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGVuYW50SXRlcmF0b3Ige1xuICAvKipcbiAgICogQ3JlYXRlcyBhbiBpdGVyYXRvciBib3VuZCB0byBhIGNvbmZpZ3VyYXRpb24gYW5kIHRlbmFudCBkYXRhYmFzZSBpZGVudGlmaWVyLlxuICAgKiBAcGFyYW0ge3tjb25maWd1cmF0aW9uOiBpbXBvcnQoXCIuLi9jb25maWd1cmF0aW9uLmpzXCIpLmRlZmF1bHQsIGlkZW50aWZpZXI6IHN0cmluZywgcGFyYWxsZWxDb3VudD86IG51bWJlcn19IGFyZ3MgLSBUZW5hbnQgY29uZmlndXJhdGlvbiwgZGF0YWJhc2UgaWRlbnRpZmllciwgYW5kIGNvbmN1cnJlbmN5IGxpbWl0LlxuICAgKi9cbiAgY29uc3RydWN0b3Ioe2NvbmZpZ3VyYXRpb24sIGlkZW50aWZpZXIsIHBhcmFsbGVsQ291bnQgPSAxfSkge1xuICAgIHRoaXMuY29uZmlndXJhdGlvbiA9IGNvbmZpZ3VyYXRpb25cbiAgICB0aGlzLmlkZW50aWZpZXIgPSBpZGVudGlmaWVyXG4gICAgdGhpcy5wYXJhbGxlbENvdW50ID0gcGFyYWxsZWxDb3VudFxuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgYGNhbGxiYWNrYCB3aXRoaW4gZWFjaCB0ZW5hbnQncyBjb250ZXh0IGFuZCByZXR1cm5zIGhvdyBtYW55IHRlbmFudHMgd2VyZSBwcm9jZXNzZWQuXG4gICAqIEBwYXJhbSB7QXJyYXk8Pz59IHRlbmFudHMgLSBUZW5hbnQgZGVzY3JpcHRvcnMgdG8gZW50ZXIgYW5kIHByb2Nlc3MuXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24oe2RhdGFiYXNlQ29uZmlndXJhdGlvbjogaW1wb3J0KFwiLi4vY29uZmlndXJhdGlvbi10eXBlcy5qc1wiKS5EYXRhYmFzZUNvbmZpZ3VyYXRpb25UeXBlLCB0ZW5hbnQ6ID99KSA6IFByb21pc2U8dm9pZD59IGNhbGxiYWNrIC0gUGVyLXRlbmFudCBvcGVyYXRpb24gcmVjZWl2aW5nIHRoZSBhY3RpdmUgZGF0YWJhc2UgY29uZmlndXJhdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8bnVtYmVyPn0gLSBOdW1iZXIgb2YgcHJvY2Vzc2VkIHRlbmFudHMuXG4gICAqL1xuICBhc3luYyBydW4odGVuYW50cywgY2FsbGJhY2spIHtcbiAgICBpZiAodGhpcy5wYXJhbGxlbENvdW50IDw9IDEpIHtcbiAgICAgIGZvciAoY29uc3QgdGVuYW50IG9mIHRlbmFudHMpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5ydW5UZW5hbnRDYWxsYmFjayh7Y2FsbGJhY2ssIHRlbmFudH0pXG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0ZW5hbnRzLmxlbmd0aFxuICAgIH1cblxuICAgIC8qKiBAdHlwZSB7QXJyYXk8e2Vycm9yOiBFcnJvciwgdGVuYW50OiA/fT59ICovXG4gICAgY29uc3QgZmFpbHVyZXMgPSBbXVxuICAgIGNvbnN0IHdvcmtlcnMgPSBbXVxuICAgIGxldCB0ZW5hbnRJbmRleCA9IDBcbiAgICBjb25zdCB3b3JrZXJDb3VudCA9IE1hdGgubWluKHRoaXMucGFyYWxsZWxDb3VudCwgdGVuYW50cy5sZW5ndGgpXG5cbiAgICBmb3IgKGxldCB3b3JrZXJJbmRleCA9IDA7IHdvcmtlckluZGV4IDwgd29ya2VyQ291bnQ7IHdvcmtlckluZGV4KyspIHtcbiAgICAgIHdvcmtlcnMucHVzaCgoYXN5bmMgKCkgPT4ge1xuICAgICAgICB3aGlsZSAodGVuYW50SW5kZXggPCB0ZW5hbnRzLmxlbmd0aCkge1xuICAgICAgICAgIGNvbnN0IHRlbmFudCA9IHRlbmFudHNbdGVuYW50SW5kZXhdXG5cbiAgICAgICAgICB0ZW5hbnRJbmRleCsrXG5cbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5ydW5UZW5hbnRDYWxsYmFjayh7Y2FsbGJhY2ssIHRlbmFudH0pXG4gICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGZhaWx1cmVzLnB1c2goe1xuICAgICAgICAgICAgICBlcnJvcjogZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yIDogbmV3IEVycm9yKFN0cmluZyhlcnJvcikpLFxuICAgICAgICAgICAgICB0ZW5hbnRcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KSgpKVxuICAgIH1cblxuICAgIGF3YWl0IFByb21pc2UuYWxsKHdvcmtlcnMpXG5cbiAgICBpZiAoZmFpbHVyZXMubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgZmFpbGVkVGVuYW50TGFiZWxzID0gZmFpbHVyZXMubWFwKChmYWlsdXJlKSA9PiBUZW5hbnRJdGVyYXRvci50ZW5hbnRMYWJlbChmYWlsdXJlLnRlbmFudCkpLmpvaW4oXCIsIFwiKVxuXG4gICAgICB0aHJvdyBuZXcgQWdncmVnYXRlRXJyb3IoXG4gICAgICAgIGZhaWx1cmVzLm1hcCgoZmFpbHVyZSkgPT4gZmFpbHVyZS5lcnJvciksXG4gICAgICAgIGBGYWlsZWQgdGVuYW50IGRhdGFiYXNlIGNvbW1hbmQgZm9yIHRlbmFudChzKTogJHtmYWlsZWRUZW5hbnRMYWJlbHN9YFxuICAgICAgKVxuICAgIH1cblxuICAgIHJldHVybiB0ZW5hbnRzLmxlbmd0aFxuICB9XG5cbiAgLyoqXG4gICAqIEVudGVycyBvbmUgdGVuYW50J3MgY29udGV4dCBhbmQgcnVucyB0aGUgY2FsbGJhY2ssIGFzc2VydGluZyB0aGUgZGF0YWJhc2UgaXMgYWN0aXZlIGZpcnN0LlxuICAgKiBAcGFyYW0ge3tjYWxsYmFjazogZnVuY3Rpb24oe2RhdGFiYXNlQ29uZmlndXJhdGlvbjogaW1wb3J0KFwiLi4vY29uZmlndXJhdGlvbi10eXBlcy5qc1wiKS5EYXRhYmFzZUNvbmZpZ3VyYXRpb25UeXBlLCB0ZW5hbnQ6ID99KSA6IFByb21pc2U8dm9pZD4sIHRlbmFudDogP319IGFyZ3MgLSBUZW5hbnQgZGVzY3JpcHRvciBhbmQgb3BlcmF0aW9uIHRvIHJ1biBpbiBpdHMgY29udGV4dC5cbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59XG4gICAqL1xuICBhc3luYyBydW5UZW5hbnRDYWxsYmFjayh7Y2FsbGJhY2ssIHRlbmFudH0pIHtcbiAgICBhd2FpdCB0aGlzLmNvbmZpZ3VyYXRpb24ucnVuV2l0aFRlbmFudCh0ZW5hbnQsIGFzeW5jICgpID0+IHtcbiAgICAgIGlmICghdGhpcy5jb25maWd1cmF0aW9uLmlzRGF0YWJhc2VJZGVudGlmaWVyQWN0aXZlKHRoaXMuaWRlbnRpZmllcikpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBUZW5hbnQgZGF0YWJhc2UgaWRlbnRpZmllciAke3RoaXMuaWRlbnRpZmllcn0gaXMgaW5hY3RpdmUgZm9yIHRlbmFudDogJHtUZW5hbnRJdGVyYXRvci50ZW5hbnRMYWJlbCh0ZW5hbnQpfWApXG4gICAgICB9XG5cbiAgICAgIGF3YWl0IGNhbGxiYWNrKHtcbiAgICAgICAgZGF0YWJhc2VDb25maWd1cmF0aW9uOiB0aGlzLmNvbmZpZ3VyYXRpb24ucmVzb2x2ZURhdGFiYXNlQ29uZmlndXJhdGlvbih0aGlzLmlkZW50aWZpZXIpLFxuICAgICAgICB0ZW5hbnRcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZHMgYSBodW1hbi1yZWFkYWJsZSBsYWJlbCBmb3IgYSB0ZW5hbnQgZm9yIHVzZSBpbiBlcnJvciBtZXNzYWdlcy5cbiAgICogQHBhcmFtIHs/fSB0ZW5hbnQgLSBUZW5hbnQgZGVzY3JpcHRvciB0byBpZGVudGlmeSBpbiBhbiBlcnJvci5cbiAgICogQHJldHVybnMge3N0cmluZ30gLSBIdW1hbi1yZWFkYWJsZSB0ZW5hbnQgbGFiZWwuXG4gICAqL1xuICBzdGF0aWMgdGVuYW50TGFiZWwodGVuYW50KSB7XG4gICAgaWYgKHRlbmFudCAmJiB0eXBlb2YgdGVuYW50ID09PSBcIm9iamVjdFwiKSB7XG4gICAgICBjb25zdCB0ZW5hbnRPYmplY3QgPSAvKiogQHR5cGUge3tpZD86ID8sIG5hbWU/OiA/LCBzbHVnPzogP319ICovICh0ZW5hbnQpXG5cbiAgICAgIGlmICh0ZW5hbnRPYmplY3Quc2x1ZykgcmV0dXJuIFN0cmluZyh0ZW5hbnRPYmplY3Quc2x1ZylcbiAgICAgIGlmICh0ZW5hbnRPYmplY3QubmFtZSkgcmV0dXJuIFN0cmluZyh0ZW5hbnRPYmplY3QubmFtZSlcbiAgICAgIGlmICh0ZW5hbnRPYmplY3QuaWQpIHJldHVybiBTdHJpbmcodGVuYW50T2JqZWN0LmlkKVxuICAgIH1cblxuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh0ZW5hbnQpXG4gIH1cbn1cbiJdfQ==
|
|
99
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVuYW50LWl0ZXJhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3RlbmFudHMvdGVuYW50LWl0ZXJhdG9yLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWjs7Ozs7Ozs7R0FRRztBQUNILE1BQU0sQ0FBQyxPQUFPLE9BQU8sY0FBYztJQUNqQzs7O09BR0c7SUFDSCxZQUFZLEVBQUMsYUFBYSxFQUFFLFVBQVUsRUFBRSxhQUFhLEdBQUcsQ0FBQyxFQUFDO1FBQ3hELElBQUksQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFBO1FBQ2xDLElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFBO1FBQzVCLElBQUksQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFBO0lBQ3BDLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILEtBQUssQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLFFBQVE7UUFDekIsSUFBSSxJQUFJLENBQUMsYUFBYSxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQzVCLEtBQUssTUFBTSxNQUFNLElBQUksT0FBTyxFQUFFLENBQUM7Z0JBQzdCLE1BQU0sSUFBSSxDQUFDLGlCQUFpQixDQUFDLEVBQUMsUUFBUSxFQUFFLE1BQU0sRUFBQyxDQUFDLENBQUE7WUFDbEQsQ0FBQztZQUVELE9BQU8sT0FBTyxDQUFDLE1BQU0sQ0FBQTtRQUN2QixDQUFDO1FBRUQsK0NBQStDO1FBQy9DLE1BQU0sUUFBUSxHQUFHLEVBQUUsQ0FBQTtRQUNuQixNQUFNLE9BQU8sR0FBRyxFQUFFLENBQUE7UUFDbEIsSUFBSSxXQUFXLEdBQUcsQ0FBQyxDQUFBO1FBQ25CLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUE7UUFFaEUsS0FBSyxJQUFJLFdBQVcsR0FBRyxDQUFDLEVBQUUsV0FBVyxHQUFHLFdBQVcsRUFBRSxXQUFXLEVBQUUsRUFB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Q0FBQTtnQkFFdkIsSUFBSSxjQUFjO29CQUFFLE9BQU8sTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFBO1lBQ25ELENBQUM7UUFDSCxDQUFDO1FBRUQsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFBO0lBQy9CLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG4vKipcbiAqIFJ1bnMgYSBjYWxsYmFjayBvbmNlIHdpdGhpbiBlYWNoIHRlbmFudCdzIGNvbnRleHQgZm9yIGEgdGVuYW50IGRhdGFiYXNlIGlkZW50aWZpZXIsXG4gKiBvcHRpb25hbGx5IHNldmVyYWwgdGVuYW50cyBhdCBhIHRpbWUuIEVhY2ggdGVuYW50IGlzIGVudGVyZWQgd2l0aCBgcnVuV2l0aFRlbmFudGAsIGFuZCBhXG4gKiB0ZW5hbnQgd2hvc2UgZGF0YWJhc2UgaWRlbnRpZmllciBpcyBpbmFjdGl2ZSB0aHJvd3MgcmF0aGVyIHRoYW4gcnVubmluZyB0aGUgY2FsbGJhY2tcbiAqIGFnYWluc3QgdGhlIHdyb25nIGNvbm5lY3Rpb24uIFdoZW4gaXRlcmF0aW5nIGluIHBhcmFsbGVsIHRoZSBwZXItdGVuYW50IGZhaWx1cmVzIGFyZVxuICogY29sbGVjdGVkIGFuZCByZXRocm93biB0b2dldGhlciBhcyBhbiBgQWdncmVnYXRlRXJyb3JgIHNvIG9uZSBiYWQgdGVuYW50IGRvZXMgbm90IGhpZGUgdGhlXG4gKiBvdGhlcnMuIFRoaXMgaXMgdGhlIGl0ZXJhdGlvbiBlbmdpbmUgc2hhcmVkIGJ5IHRoZSBgZGI6dGVuYW50czoqYCBDTEkgY29tbWFuZHMgYW5kIHRoZVxuICogcnVudGltZSB0ZW5hbnQgZmHDp2FkZTsgdGhlIGNhbGxlciBpcyByZXNwb25zaWJsZSBmb3IgcHJvZHVjaW5nIHRoZSB0ZW5hbnQgbGlzdC5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGVuYW50SXRlcmF0b3Ige1xuICAvKipcbiAgICogQ3JlYXRlcyBhbiBpdGVyYXRvciBib3VuZCB0byBhIGNvbmZpZ3VyYXRpb24gYW5kIHRlbmFudCBkYXRhYmFzZSBpZGVudGlmaWVyLlxuICAgKiBAcGFyYW0ge3tjb25maWd1cmF0aW9uOiBpbXBvcnQoXCIuLi9jb25maWd1cmF0aW9uLmpzXCIpLmRlZmF1bHQsIGlkZW50aWZpZXI6IHN0cmluZywgcGFyYWxsZWxDb3VudD86IG51bWJlcn19IGFyZ3MgLSBUZW5hbnQgY29uZmlndXJhdGlvbiwgZGF0YWJhc2UgaWRlbnRpZmllciwgYW5kIGNvbmN1cnJlbmN5IGxpbWl0LlxuICAgKi9cbiAgY29uc3RydWN0b3Ioe2NvbmZpZ3VyYXRpb24sIGlkZW50aWZpZXIsIHBhcmFsbGVsQ291bnQgPSAxfSkge1xuICAgIHRoaXMuY29uZmlndXJhdGlvbiA9IGNvbmZpZ3VyYXRpb25cbiAgICB0aGlzLmlkZW50aWZpZXIgPSBpZGVudGlmaWVyXG4gICAgdGhpcy5wYXJhbGxlbENvdW50ID0gcGFyYWxsZWxDb3VudFxuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgYGNhbGxiYWNrYCB3aXRoaW4gZWFjaCB0ZW5hbnQncyBjb250ZXh0IGFuZCByZXR1cm5zIGhvdyBtYW55IHRlbmFudHMgd2VyZSBwcm9jZXNzZWQuXG4gICAqIEBwYXJhbSB7QXJyYXk8Pz59IHRlbmFudHMgLSBUZW5hbnQgZGVzY3JpcHRvcnMgdG8gZW50ZXIgYW5kIHByb2Nlc3MuXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24oe2RhdGFiYXNlQ29uZmlndXJhdGlvbjogaW1wb3J0KFwiLi4vY29uZmlndXJhdGlvbi10eXBlcy5qc1wiKS5EYXRhYmFzZUNvbmZpZ3VyYXRpb25UeXBlLCB0ZW5hbnQ6ID99KSA6IFByb21pc2U8dm9pZD59IGNhbGxiYWNrIC0gUGVyLXRlbmFudCBvcGVyYXRpb24gcmVjZWl2aW5nIHRoZSBhY3RpdmUgZGF0YWJhc2UgY29uZmlndXJhdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8bnVtYmVyPn0gLSBOdW1iZXIgb2YgcHJvY2Vzc2VkIHRlbmFudHMuXG4gICAqL1xuICBhc3luYyBydW4odGVuYW50cywgY2FsbGJhY2spIHtcbiAgICBpZiAodGhpcy5wYXJhbGxlbENvdW50IDw9IDEpIHtcbiAgICAgIGZvciAoY29uc3QgdGVuYW50IG9mIHRlbmFudHMpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5ydW5UZW5hbnRDYWxsYmFjayh7Y2FsbGJhY2ssIHRlbmFudH0pXG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0ZW5hbnRzLmxlbmd0aFxuICAgIH1cblxuICAgIC8qKiBAdHlwZSB7QXJyYXk8e2Vycm9yOiBFcnJvciwgdGVuYW50OiA/fT59ICovXG4gICAgY29uc3QgZmFpbHVyZXMgPSBbXVxuICAgIGNvbnN0IHdvcmtlcnMgPSBbXVxuICAgIGxldCB0ZW5hbnRJbmRleCA9IDBcbiAgICBjb25zdCB3b3JrZXJDb3VudCA9IE1hdGgubWluKHRoaXMucGFyYWxsZWxDb3VudCwgdGVuYW50cy5sZW5ndGgpXG5cbiAgICBmb3IgKGxldCB3b3JrZXJJbmRleCA9IDA7IHdvcmtlckluZGV4IDwgd29ya2VyQ291bnQ7IHdvcmtlckluZGV4KyspIHtcbiAgICAgIHdvcmtlcnMucHVzaCgoYXN5bmMgKCkgPT4ge1xuICAgICAgICB3aGlsZSAodGVuYW50SW5kZXggPCB0ZW5hbnRzLmxlbmd0aCkge1xuICAgICAgICAgIGNvbnN0IHRlbmFudCA9IHRlbmFudHNbdGVuYW50SW5kZXhdXG5cbiAgICAgICAgICB0ZW5hbnRJbmRleCsrXG5cbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5ydW5UZW5hbnRDYWxsYmFjayh7Y2FsbGJhY2ssIHRlbmFudH0pXG4gICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGZhaWx1cmVzLnB1c2goe1xuICAgICAgICAgICAgICBlcnJvcjogZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yIDogbmV3IEVycm9yKFN0cmluZyhlcnJvcikpLFxuICAgICAgICAgICAgICB0ZW5hbnRcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KSgpKVxuICAgIH1cblxuICAgIGF3YWl0IFByb21pc2UuYWxsKHdvcmtlcnMpXG5cbiAgICBpZiAoZmFpbHVyZXMubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgZmFpbGVkVGVuYW50TGFiZWxzID0gZmFpbHVyZXMubWFwKChmYWlsdXJlKSA9PiBUZW5hbnRJdGVyYXRvci50ZW5hbnRMYWJlbChmYWlsdXJlLnRlbmFudCkpLmpvaW4oXCIsIFwiKVxuXG4gICAgICB0aHJvdyBuZXcgQWdncmVnYXRlRXJyb3IoXG4gICAgICAgIGZhaWx1cmVzLm1hcCgoZmFpbHVyZSkgPT4gZmFpbHVyZS5lcnJvciksXG4gICAgICAgIGBGYWlsZWQgdGVuYW50IGRhdGFiYXNlIGNvbW1hbmQgZm9yIHRlbmFudChzKTogJHtmYWlsZWRUZW5hbnRMYWJlbHN9YFxuICAgICAgKVxuICAgIH1cblxuICAgIHJldHVybiB0ZW5hbnRzLmxlbmd0aFxuICB9XG5cbiAgLyoqXG4gICAqIEVudGVycyBvbmUgdGVuYW50J3MgY29udGV4dCBhbmQgcnVucyB0aGUgY2FsbGJhY2ssIGFzc2VydGluZyB0aGUgZGF0YWJhc2UgaXMgYWN0aXZlIGZpcnN0LlxuICAgKiBAcGFyYW0ge3tjYWxsYmFjazogZnVuY3Rpb24oe2RhdGFiYXNlQ29uZmlndXJhdGlvbjogaW1wb3J0KFwiLi4vY29uZmlndXJhdGlvbi10eXBlcy5qc1wiKS5EYXRhYmFzZUNvbmZpZ3VyYXRpb25UeXBlLCB0ZW5hbnQ6ID99KSA6IFByb21pc2U8dm9pZD4sIHRlbmFudDogP319IGFyZ3MgLSBUZW5hbnQgZGVzY3JpcHRvciBhbmQgb3BlcmF0aW9uIHRvIHJ1biBpbiBpdHMgY29udGV4dC5cbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59XG4gICAqL1xuICBhc3luYyBydW5UZW5hbnRDYWxsYmFjayh7Y2FsbGJhY2ssIHRlbmFudH0pIHtcbiAgICBhd2FpdCB0aGlzLmNvbmZpZ3VyYXRpb24ucnVuV2l0aFRlbmFudCh0ZW5hbnQsIGFzeW5jICgpID0+IHtcbiAgICAgIGlmICghdGhpcy5jb25maWd1cmF0aW9uLmlzRGF0YWJhc2VJZGVudGlmaWVyQWN0aXZlKHRoaXMuaWRlbnRpZmllcikpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBUZW5hbnQgZGF0YWJhc2UgaWRlbnRpZmllciAke3RoaXMuaWRlbnRpZmllcn0gaXMgaW5hY3RpdmUgZm9yIHRlbmFudDogJHtUZW5hbnRJdGVyYXRvci50ZW5hbnRMYWJlbCh0ZW5hbnQpfWApXG4gICAgICB9XG5cbiAgICAgIGF3YWl0IGNhbGxiYWNrKHtcbiAgICAgICAgZGF0YWJhc2VDb25maWd1cmF0aW9uOiB0aGlzLmNvbmZpZ3VyYXRpb24ucmVzb2x2ZURhdGFiYXNlQ29uZmlndXJhdGlvbih0aGlzLmlkZW50aWZpZXIpLFxuICAgICAgICB0ZW5hbnRcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZHMgYSBodW1hbi1yZWFkYWJsZSBsYWJlbCBmb3IgYSB0ZW5hbnQgZm9yIHVzZSBpbiBlcnJvciBtZXNzYWdlcy5cbiAgICogQHBhcmFtIHs/fSB0ZW5hbnQgLSBUZW5hbnQgZGVzY3JpcHRvciB0byBpZGVudGlmeSBpbiBhbiBlcnJvci5cbiAgICogQHJldHVybnMge3N0cmluZ30gLSBIdW1hbi1yZWFkYWJsZSB0ZW5hbnQgbGFiZWwuXG4gICAqL1xuICBzdGF0aWMgdGVuYW50TGFiZWwodGVuYW50KSB7XG4gICAgaWYgKHRlbmFudCAmJiB0eXBlb2YgdGVuYW50ID09PSBcIm9iamVjdFwiKSB7XG4gICAgICBjb25zdCB0ZW5hbnRPYmplY3QgPSAvKiogQHR5cGUge3tpZD86ID8sIG5hbWU/OiA/LCBzbHVnPzogP319ICovICh0ZW5hbnQpXG5cbiAgICAgIGZvciAoY29uc3QgYXR0cmlidXRlTmFtZSBvZiAvKiogQHR5cGUge0FycmF5PFwic2x1Z1wiIHwgXCJuYW1lXCIgfCBcImlkXCI+fSAqLyAoW1wic2x1Z1wiLCBcIm5hbWVcIiwgXCJpZFwiXSkpIHtcbiAgICAgICAgY29uc3QgYXR0cmlidXRlT3JBY2Nlc3NvciA9IHRlbmFudE9iamVjdFthdHRyaWJ1dGVOYW1lXVxuICAgICAgICBjb25zdCBhdHRyaWJ1dGVWYWx1ZSA9IHR5cGVvZiBhdHRyaWJ1dGVPckFjY2Vzc29yID09PSBcImZ1bmN0aW9uXCJcbiAgICAgICAgICA/IGF0dHJpYnV0ZU9yQWNjZXNzb3IuY2FsbCh0ZW5hbnQpXG4gICAgICAgICAgOiBhdHRyaWJ1dGVPckFjY2Vzc29yXG5cbiAgICAgICAgaWYgKGF0dHJpYnV0ZVZhbHVlKSByZXR1cm4gU3RyaW5nKGF0dHJpYnV0ZVZhbHVlKVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh0ZW5hbnQpXG4gIH1cbn1cbiJdfQ==
|
|
@@ -101,9 +101,14 @@ export default class TenantIterator {
|
|
|
101
101
|
if (tenant && typeof tenant === "object") {
|
|
102
102
|
const tenantObject = /** @type {{id?: ?, name?: ?, slug?: ?}} */ (tenant)
|
|
103
103
|
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
104
|
+
for (const attributeName of /** @type {Array<"slug" | "name" | "id">} */ (["slug", "name", "id"])) {
|
|
105
|
+
const attributeOrAccessor = tenantObject[attributeName]
|
|
106
|
+
const attributeValue = typeof attributeOrAccessor === "function"
|
|
107
|
+
? attributeOrAccessor.call(tenant)
|
|
108
|
+
: attributeOrAccessor
|
|
109
|
+
|
|
110
|
+
if (attributeValue) return String(attributeValue)
|
|
111
|
+
}
|
|
107
112
|
}
|
|
108
113
|
|
|
109
114
|
return JSON.stringify(tenant)
|
package/package.json
CHANGED
|
@@ -2,19 +2,25 @@
|
|
|
2
2
|
|
|
3
3
|
import TenantIterator from "../tenants/tenant-iterator.js"
|
|
4
4
|
|
|
5
|
+
const DEFAULT_HEARTBEAT_INTERVAL_MS = 30_000
|
|
6
|
+
|
|
5
7
|
export default class TenantDatabaseCommandHelper {
|
|
6
8
|
/**
|
|
7
9
|
* Runs constructor.
|
|
8
10
|
* @param {object} args - Options object.
|
|
9
11
|
* @param {import("./base-command.js").default} args.command - CLI command instance.
|
|
12
|
+
* @param {number} [args.heartbeatIntervalMs] - Interval between progress heartbeats.
|
|
10
13
|
* @param {string | undefined} args.identifier - Tenant database identifier.
|
|
14
|
+
* @param {(message: string) => void} [args.output] - Progress output handler.
|
|
11
15
|
*/
|
|
12
|
-
constructor({command, identifier}) {
|
|
16
|
+
constructor({command, heartbeatIntervalMs = DEFAULT_HEARTBEAT_INTERVAL_MS, identifier, output = console.log}) {
|
|
13
17
|
if (!identifier) throw new Error("Missing tenant database identifier argument")
|
|
14
18
|
|
|
15
19
|
this.command = command
|
|
16
20
|
this.configuration = command.getConfiguration()
|
|
21
|
+
this.heartbeatIntervalMs = heartbeatIntervalMs
|
|
17
22
|
this.identifier = identifier
|
|
23
|
+
this.output = output
|
|
18
24
|
this.provider = this.configuration.getTenantDatabaseProvider(identifier)
|
|
19
25
|
}
|
|
20
26
|
|
|
@@ -78,13 +84,42 @@ export default class TenantDatabaseCommandHelper {
|
|
|
78
84
|
*/
|
|
79
85
|
async eachTenant(callback) {
|
|
80
86
|
const tenants = await this.listTenants()
|
|
87
|
+
const commandName = this.command.processArgs?.[0] || "db:tenants"
|
|
88
|
+
const parallelCount = this.parallelCount()
|
|
89
|
+
const progressPrefix = `${commandName} ${this.identifier}`
|
|
90
|
+
let activeTenantCount = 0
|
|
91
|
+
let completedTenantCount = 0
|
|
81
92
|
const iterator = new TenantIterator({
|
|
82
93
|
configuration: this.configuration,
|
|
83
94
|
identifier: this.identifier,
|
|
84
|
-
parallelCount
|
|
95
|
+
parallelCount
|
|
85
96
|
})
|
|
97
|
+
const progressHeartbeat = setInterval(() => {
|
|
98
|
+
this.output(`${progressPrefix}: heartbeat: ${completedTenantCount}/${tenants.length} completed, ${activeTenantCount} active`)
|
|
99
|
+
}, this.heartbeatIntervalMs)
|
|
100
|
+
|
|
101
|
+
progressHeartbeat.unref()
|
|
102
|
+
this.output(`${progressPrefix}: processing ${tenants.length} tenant(s) with parallelism ${parallelCount}`)
|
|
103
|
+
|
|
104
|
+
try {
|
|
105
|
+
const processedTenantCount = await iterator.run(tenants, async (args) => {
|
|
106
|
+
activeTenantCount++
|
|
107
|
+
|
|
108
|
+
try {
|
|
109
|
+
await callback(args)
|
|
110
|
+
completedTenantCount++
|
|
111
|
+
this.output(`${progressPrefix}: completed ${TenantIterator.tenantLabel(args.tenant)} (${completedTenantCount}/${tenants.length})`)
|
|
112
|
+
} finally {
|
|
113
|
+
activeTenantCount--
|
|
114
|
+
}
|
|
115
|
+
})
|
|
86
116
|
|
|
87
|
-
|
|
117
|
+
this.output(`${progressPrefix}: finished ${processedTenantCount}/${tenants.length} tenant(s)`)
|
|
118
|
+
|
|
119
|
+
return processedTenantCount
|
|
120
|
+
} finally {
|
|
121
|
+
clearInterval(progressHeartbeat)
|
|
122
|
+
}
|
|
88
123
|
}
|
|
89
124
|
|
|
90
125
|
/**
|
|
@@ -101,9 +101,14 @@ export default class TenantIterator {
|
|
|
101
101
|
if (tenant && typeof tenant === "object") {
|
|
102
102
|
const tenantObject = /** @type {{id?: ?, name?: ?, slug?: ?}} */ (tenant)
|
|
103
103
|
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
104
|
+
for (const attributeName of /** @type {Array<"slug" | "name" | "id">} */ (["slug", "name", "id"])) {
|
|
105
|
+
const attributeOrAccessor = tenantObject[attributeName]
|
|
106
|
+
const attributeValue = typeof attributeOrAccessor === "function"
|
|
107
|
+
? attributeOrAccessor.call(tenant)
|
|
108
|
+
: attributeOrAccessor
|
|
109
|
+
|
|
110
|
+
if (attributeValue) return String(attributeValue)
|
|
111
|
+
}
|
|
107
112
|
}
|
|
108
113
|
|
|
109
114
|
return JSON.stringify(tenant)
|