velocious 1.0.601 → 1.0.602
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 +3 -3
- package/build/database/live-query.js +4 -1
- package/build/database/operation.js +9 -0
- package/build/database/record/index.js +50 -2
- package/build/database/record-changes.js +18 -4
- package/build/src/database/live-query.d.ts +5 -0
- package/build/src/database/live-query.d.ts.map +1 -1
- package/build/src/database/live-query.js +4 -2
- package/build/src/database/operation.d.ts +5 -0
- package/build/src/database/operation.d.ts.map +1 -1
- package/build/src/database/operation.js +9 -1
- package/build/src/database/record/index.d.ts +36 -0
- package/build/src/database/record/index.d.ts.map +1 -1
- package/build/src/database/record/index.js +43 -3
- package/build/src/database/record-changes.d.ts +9 -1
- package/build/src/database/record-changes.d.ts.map +1 -1
- package/build/src/database/record-changes.js +18 -5
- package/build/src/sync/local-mutation-log.d.ts +7 -0
- package/build/src/sync/local-mutation-log.d.ts.map +1 -1
- package/build/src/sync/local-mutation-log.js +17 -1
- package/build/src/sync/sync-api-client-types.d.ts +8 -4
- package/build/src/sync/sync-api-client-types.d.ts.map +1 -1
- package/build/src/sync/sync-api-client-types.js +3 -3
- package/build/src/sync/sync-client-types.d.ts +25 -0
- package/build/src/sync/sync-client-types.d.ts.map +1 -1
- package/build/src/sync/sync-client-types.js +6 -1
- package/build/src/sync/sync-client.d.ts +43 -1
- package/build/src/sync/sync-client.d.ts.map +1 -1
- package/build/src/sync/sync-client.js +187 -37
- package/build/src/sync/sync-realtime-bridge.js +2 -2
- package/build/src/sync/sync-scope-store.d.ts +15 -1
- package/build/src/sync/sync-scope-store.d.ts.map +1 -1
- package/build/src/sync/sync-scope-store.js +31 -4
- package/build/src/tenants/tenant-handle.d.ts +81 -0
- package/build/src/tenants/tenant-handle.d.ts.map +1 -1
- package/build/src/tenants/tenant-handle.js +143 -1
- package/build/sync/local-mutation-log.js +17 -0
- package/build/sync/sync-api-client-types.js +2 -2
- package/build/sync/sync-client-types.js +5 -0
- package/build/sync/sync-client.js +198 -38
- package/build/sync/sync-realtime-bridge.js +1 -1
- package/build/sync/sync-scope-store.js +32 -3
- package/build/tenants/tenant-handle.js +165 -0
- package/package.json +1 -1
- package/src/database/live-query.js +4 -1
- package/src/database/operation.js +9 -0
- package/src/database/record/index.js +50 -2
- package/src/database/record-changes.js +18 -4
- package/src/sync/local-mutation-log.js +17 -0
- package/src/sync/sync-api-client-types.js +2 -2
- package/src/sync/sync-client-types.js +5 -0
- package/src/sync/sync-client.js +198 -38
- package/src/sync/sync-realtime-bridge.js +1 -1
- package/src/sync/sync-scope-store.js +32 -3
- package/src/tenants/tenant-handle.js +165 -0
package/README.md
CHANGED
|
@@ -15,8 +15,8 @@
|
|
|
15
15
|
* Controllers and views for HTTP endpoints
|
|
16
16
|
* Frontend-model transport for creating, updating, querying, and subscribing to query-filtered lifecycle events over HTTP/WebSocket, with structured per-attribute validation error responses and one-budget WebSocket startup controls (see [docs/frontend-models.md](docs/frontend-models.md) and [docs/websocket-channels.md](docs/websocket-channels.md))
|
|
17
17
|
* Client-side offline sync mutation logs and frontend-model optimistic queueing primitives (see the [shared-resource sync developer guide](docs/shared-resource-sync-guide.md) and [offline sync architecture](docs/offline-sync.md))
|
|
18
|
-
* Declarative client sync scopes with per-scope cursors, automatic mutation tracking, opt-in durable base-version conflict replay, realtime delivery
|
|
19
|
-
* Reactive `useLiveQuery(Model.where(...))` queries
|
|
18
|
+
* Declarative client sync scopes with per-scope cursors, automatic mutation tracking, opt-in durable base-version conflict replay, realtime delivery, and immutable-handle project clients whose queues, scopes, cursors, receipts, conflicts, pulls, and reconnect catch-up stay in one physical tenant database (see [docs/sync-client.md](docs/sync-client.md) and [docs/offline-sync.md](docs/offline-sync.md))
|
|
19
|
+
* Reactive `useLiveQuery(Model.where(...))` queries for default databases plus immutable-handle tenant live-query sources whose committed events and refreshes stay on the captured physical tenant (see [docs/live-queries.md](docs/live-queries.md))
|
|
20
20
|
* Server-side sync envelope replay orchestration for app-owned sync receivers, including allowlisted authoritative values for conflict resolution (see [docs/sync-envelope-replay-service.md](docs/sync-envelope-replay-service.md))
|
|
21
21
|
* Self-sustaining sync feeds: upstream imports triggered by the changes pull itself, with framework-owned coalescing and throttling (see [docs/sync-upstream-imports.md](docs/sync-upstream-imports.md))
|
|
22
22
|
* AwesomeTasks-shaped offline sync proof using routed resources, domain commands, signed offline grants, and peer-forwarded mutations (see the [developer guide](docs/shared-resource-sync-guide.md) and [proof](docs/awesome-tasks-offline-sync-proof.md))
|
|
@@ -2687,7 +2687,7 @@ Tenant lifecycle commands print start and final counts, report each completed te
|
|
|
2687
2687
|
|
|
2688
2688
|
`afterMigrateTenant` hooks run inside the active default and tenant database connection scope for the tenant being migrated.
|
|
2689
2689
|
|
|
2690
|
-
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 Node async context, `Tenant.handle(tenant)` to deeply capture immutable application and physical database identity for overlapping browser/native work, `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. SQLite handles additionally expose framework-owned `open`, `flush`, `close`, `delete`, `inspect`, and `withPin` lifecycle methods; `frontendTenantSqlite.maxOpenHandles` bounds resident identities and clean, idle, unpinned handles are evicted least-recently-used. `Tenant.handle(...).databaseOperation(...)` and `.transaction(...)` use bounded pool-owned checkouts and pin model/query/write/association/preload/audit/attachment/raw work to the captured database even if a later UI project switch changes ambient tenant state. `Model.usingTenant(tenant)` uses the same safe core and adds eager helpers plus general `databaseOperation`/`transaction` model callbacks; eager records preserve legacy ambient Node follow-up semantics, while browser/native follow-up database work belongs inside the callback APIs. Inactive identifiers, mixed physical tenants, unsupported/cyclic descriptors,
|
|
2690
|
+
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 Node async context, `Tenant.handle(tenant)` to deeply capture immutable application and physical database identity for overlapping browser/native work, `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. SQLite handles additionally expose framework-owned `open`, `flush`, `close`, `delete`, `inspect`, and `withPin` lifecycle methods; `frontendTenantSqlite.maxOpenHandles` bounds resident identities and clean, idle, unpinned handles are evicted least-recently-used. `Tenant.handle(...).databaseOperation(...)` and `.transaction(...)` use bounded pool-owned checkouts and pin model/query/write/association/preload/audit/attachment/raw work to the captured database even if a later UI project switch changes ambient tenant state. The handle also builds tenant-bound live-query sources, exposes an opaque physical identity for filtered record-change subscriptions, and binds project `SyncClient` instances. `Model.usingTenant(tenant)` uses the same safe core and adds eager helpers plus general `databaseOperation`/`transaction` model callbacks; eager records preserve legacy ambient Node follow-up semantics, while browser/native follow-up database work belongs inside the callback APIs. Inactive identifiers, mixed physical tenants, unsupported/cyclic descriptors, expired operations, unscoped tenant event subscriptions, and stale/cross-tenant sync state fail closed. `Tenant.with` and `Tenant.each` retain their connection-establishing and model-initializing ambient behavior for Node request/job flows. `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).
|
|
2691
2691
|
|
|
2692
2692
|
`SchemaCloner` adds a missing auto-increment column and its separate source unique index in one schema alteration, including on MySQL/MariaDB where an auto-increment column must be keyed when it is created.
|
|
2693
2693
|
|
|
@@ -16,6 +16,7 @@ import restArgsError from "../utils/rest-args-error.js"
|
|
|
16
16
|
* @template T
|
|
17
17
|
* @typedef {object} LiveQuerySource
|
|
18
18
|
* @property {() => RecordModelClass} getModelClass - Root model class the query reads.
|
|
19
|
+
* @property {(modelClass: RecordModelClass) => string} [databaseIdentityForModel] - Captured physical identity for an observed model.
|
|
19
20
|
* @property {() => Promise<T[]>} toArray - Runs the query and resolves the current rows.
|
|
20
21
|
*/
|
|
21
22
|
|
|
@@ -117,7 +118,9 @@ class LiveQuery {
|
|
|
117
118
|
this._started = true
|
|
118
119
|
|
|
119
120
|
for (const modelClass of this._modelClasses) {
|
|
120
|
-
this.
|
|
121
|
+
const databaseIdentity = this._query.databaseIdentityForModel?.(modelClass)
|
|
122
|
+
|
|
123
|
+
this._unsubscribes.push(recordChanges.subscribe(modelClass, this._onRecordChange, {databaseIdentity}))
|
|
121
124
|
}
|
|
122
125
|
|
|
123
126
|
this._run()
|
|
@@ -127,6 +127,7 @@ export default class VelociousDatabaseOperation {
|
|
|
127
127
|
this.assertActive()
|
|
128
128
|
this.assertModel(record.getModelClass())
|
|
129
129
|
record.bindDatabaseOperation(this)
|
|
130
|
+
record.captureDatabaseIdentity(this.databaseIdentity())
|
|
130
131
|
|
|
131
132
|
return record
|
|
132
133
|
}
|
|
@@ -203,6 +204,14 @@ export default class VelociousDatabaseOperation {
|
|
|
203
204
|
return `${this._databaseIdentifier}:${this._configurationReuseKey}`
|
|
204
205
|
}
|
|
205
206
|
|
|
207
|
+
/**
|
|
208
|
+
* Returns the tenant schema generation captured when this operation started.
|
|
209
|
+
* @returns {string | undefined} - Captured schema generation.
|
|
210
|
+
*/
|
|
211
|
+
schemaGeneration() {
|
|
212
|
+
return this._schemaGeneration
|
|
213
|
+
}
|
|
214
|
+
|
|
206
215
|
/**
|
|
207
216
|
* Initializes a model through this operation's captured connection.
|
|
208
217
|
* @param {typeof import("./record/index.js").default} ModelClass - Model class.
|
|
@@ -3618,6 +3618,29 @@ class VelociousDatabaseRecord {
|
|
|
3618
3618
|
return this
|
|
3619
3619
|
}
|
|
3620
3620
|
|
|
3621
|
+
/**
|
|
3622
|
+
* Captures and validates the physical database identity that owns this record.
|
|
3623
|
+
* @param {string} databaseIdentity - Opaque operation/connection identity.
|
|
3624
|
+
* @returns {this} This record.
|
|
3625
|
+
*/
|
|
3626
|
+
captureDatabaseIdentity(databaseIdentity) {
|
|
3627
|
+
if (this._databaseIdentity && this._databaseIdentity !== databaseIdentity) {
|
|
3628
|
+
throw new Error("Record belongs to a different physical tenant database")
|
|
3629
|
+
}
|
|
3630
|
+
|
|
3631
|
+
this._databaseIdentity = databaseIdentity
|
|
3632
|
+
|
|
3633
|
+
return this
|
|
3634
|
+
}
|
|
3635
|
+
|
|
3636
|
+
/**
|
|
3637
|
+
* Returns the captured physical database identity.
|
|
3638
|
+
* @returns {string | undefined} Captured physical database identity.
|
|
3639
|
+
*/
|
|
3640
|
+
databaseIdentity() {
|
|
3641
|
+
return this._databaseIdentity
|
|
3642
|
+
}
|
|
3643
|
+
|
|
3621
3644
|
/**
|
|
3622
3645
|
* Releases this record from a completed eager-helper operation while
|
|
3623
3646
|
* preserving the legacy ambient follow-up behavior of `usingTenant` finders.
|
|
@@ -3742,7 +3765,27 @@ class VelociousDatabaseRecord {
|
|
|
3742
3765
|
if (this._databaseOperation) return this._databaseOperation.connection()
|
|
3743
3766
|
if (this.__connection) return this.__connection
|
|
3744
3767
|
|
|
3745
|
-
|
|
3768
|
+
const connection = this.getModelClass().connection()
|
|
3769
|
+
|
|
3770
|
+
if (this._databaseIdentity) this.captureDatabaseIdentity(this._databaseIdentityForConnection(connection))
|
|
3771
|
+
|
|
3772
|
+
return connection
|
|
3773
|
+
}
|
|
3774
|
+
|
|
3775
|
+
/**
|
|
3776
|
+
* Resolves the identity of an already selected concrete connection.
|
|
3777
|
+
* @param {import("../drivers/base.js").default} connection - Concrete connection.
|
|
3778
|
+
* @returns {string} Physical database identity.
|
|
3779
|
+
*/
|
|
3780
|
+
_databaseIdentityForConnection(connection) {
|
|
3781
|
+
const modelClass = this.getModelClass()
|
|
3782
|
+
const databaseIdentifier = modelClass.getDatabaseIdentifier()
|
|
3783
|
+
const reuseKey = modelClass
|
|
3784
|
+
._getConfiguration()
|
|
3785
|
+
.getDatabasePool(databaseIdentifier)
|
|
3786
|
+
.getConnectionConfigurationReuseKey(connection)
|
|
3787
|
+
|
|
3788
|
+
return `${databaseIdentifier}:${reuseKey}`
|
|
3746
3789
|
}
|
|
3747
3790
|
|
|
3748
3791
|
/**
|
|
@@ -3993,9 +4036,14 @@ class VelociousDatabaseRecord {
|
|
|
3993
4036
|
if (!recordChanges.hasListeners(modelClass)) return
|
|
3994
4037
|
|
|
3995
4038
|
const record = this
|
|
4039
|
+
const databaseIdentity = this._databaseOperation
|
|
4040
|
+
? this._databaseOperation.databaseIdentity()
|
|
4041
|
+
: this._databaseIdentityForConnection(this._connection())
|
|
4042
|
+
|
|
4043
|
+
this.captureDatabaseIdentity(databaseIdentity)
|
|
3996
4044
|
|
|
3997
4045
|
await this._connection().afterCommit(() => {
|
|
3998
|
-
recordChanges.emit({modelClass, operation, record})
|
|
4046
|
+
recordChanges.emit({databaseIdentity, modelClass, operation, record})
|
|
3999
4047
|
})
|
|
4000
4048
|
}
|
|
4001
4049
|
|
|
@@ -14,6 +14,7 @@ import EventEmitter from "../utils/event-emitter.js"
|
|
|
14
14
|
* RecordChangeEvent type.
|
|
15
15
|
* @typedef {object} RecordChangeEvent
|
|
16
16
|
* @property {RecordModelClass} modelClass - Model class whose row changed.
|
|
17
|
+
* @property {string} databaseIdentity - Opaque physical database identity where the commit occurred.
|
|
17
18
|
* @property {RecordChangeOperation} operation - The committed operation.
|
|
18
19
|
* @property {InstanceType<RecordModelClass>} record - The committed record instance.
|
|
19
20
|
*/
|
|
@@ -49,15 +50,25 @@ class RecordChanges {
|
|
|
49
50
|
* Subscribes a listener to committed changes of a model class.
|
|
50
51
|
* @param {RecordModelClass} modelClass - Model class to observe.
|
|
51
52
|
* @param {RecordChangeListener} listener - Listener called with each change event.
|
|
53
|
+
* @param {{databaseIdentity?: string}} [options] - Captured physical identity filter.
|
|
52
54
|
* @returns {() => void} Unsubscribe callback.
|
|
53
55
|
*/
|
|
54
|
-
subscribe(modelClass, listener) {
|
|
56
|
+
subscribe(modelClass, listener, {databaseIdentity} = {}) {
|
|
57
|
+
if (modelClass.hasTenantDatabaseIdentifierResolver() && !databaseIdentity) {
|
|
58
|
+
throw new Error(`Tenant-scoped record-change subscriptions for ${modelClass.getModelName()} require a captured databaseIdentity`)
|
|
59
|
+
}
|
|
60
|
+
|
|
55
61
|
const eventName = modelClass.getModelName()
|
|
62
|
+
const subscribedListener = databaseIdentity
|
|
63
|
+
? (/** @type {RecordChangeEvent} */ event) => {
|
|
64
|
+
if (event.databaseIdentity === databaseIdentity) listener(event)
|
|
65
|
+
}
|
|
66
|
+
: listener
|
|
56
67
|
|
|
57
|
-
this._emitter.on(eventName,
|
|
68
|
+
this._emitter.on(eventName, subscribedListener)
|
|
58
69
|
|
|
59
70
|
return () => {
|
|
60
|
-
this._emitter.off(eventName,
|
|
71
|
+
this._emitter.off(eventName, subscribedListener)
|
|
61
72
|
}
|
|
62
73
|
}
|
|
63
74
|
|
|
@@ -81,7 +92,10 @@ class RecordChanges {
|
|
|
81
92
|
*/
|
|
82
93
|
emit(event) {
|
|
83
94
|
if (this._batchDepth > 0) {
|
|
84
|
-
|
|
95
|
+
const modelName = event.modelClass.getModelName()
|
|
96
|
+
const eventKey = `${modelName.length}:${modelName}:${event.databaseIdentity}`
|
|
97
|
+
|
|
98
|
+
this._bufferedEvents.set(eventKey, event)
|
|
85
99
|
|
|
86
100
|
return
|
|
87
101
|
}
|
|
@@ -4,6 +4,10 @@ export type LiveQuerySource<T> = {
|
|
|
4
4
|
* - Root model class the query reads.
|
|
5
5
|
*/
|
|
6
6
|
getModelClass: () => RecordModelClass;
|
|
7
|
+
/**
|
|
8
|
+
* - Captured physical identity for an observed model.
|
|
9
|
+
*/
|
|
10
|
+
databaseIdentityForModel?: (modelClass: RecordModelClass) => string;
|
|
7
11
|
/**
|
|
8
12
|
* - Runs the query and resolves the current rows.
|
|
9
13
|
*/
|
|
@@ -33,6 +37,7 @@ export type LiveQueryState<T> = {
|
|
|
33
37
|
* @template T
|
|
34
38
|
* @typedef {object} LiveQuerySource
|
|
35
39
|
* @property {() => RecordModelClass} getModelClass - Root model class the query reads.
|
|
40
|
+
* @property {(modelClass: RecordModelClass) => string} [databaseIdentityForModel] - Captured physical identity for an observed model.
|
|
36
41
|
* @property {() => Promise<T[]>} toArray - Runs the query and resolves the current rows.
|
|
37
42
|
*/
|
|
38
43
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"live-query.d.ts","sourceRoot":"","sources":["../../../src/database/live-query.js"],"names":[],"mappings":"AASG,YAAsD,gBAAgB,GAA5D,cAAc,mBAAmB,EAAE,OAAO,CAAkB;AAOtE,YAAkB,eAAe,CADvB,CAAC,IAEX;;;;IAAmC,aAAa,EAArC,MAAM,gBAAgB,CACjC;;;;IAA+B,OAAO,EAA3B,MAAM,OAAO,CAAC,CAAC,EAAE,CAAC,CAC/B;CAAA,CAAA;AAKE,YAAkB,cAAc,CADtB,CAAC,IAEX;;;;IAAgB,OAAO,EAAZ,CAAC,EAAE,CACd;;;;IAAoB,OAAO,EAAhB,OAAO,CAClB;;;;IAAyB,KAAK,EAAnB,KAAK,GAAG,IAAI,CACzB;CAAA,CAAA;
|
|
1
|
+
{"version":3,"file":"live-query.d.ts","sourceRoot":"","sources":["../../../src/database/live-query.js"],"names":[],"mappings":"AASG,YAAsD,gBAAgB,GAA5D,cAAc,mBAAmB,EAAE,OAAO,CAAkB;AAOtE,YAAkB,eAAe,CADvB,CAAC,IAEX;;;;IAAmC,aAAa,EAArC,MAAM,gBAAgB,CACjC;;;;IAAsD,wBAAwB,AAA9E,CACA,EADW,CAAC,UAAU,EAAE,gBAAgB,KAAK,MAAM,CACnD;;;;IAA+B,OAAO,EAA3B,MAAM,OAAO,CAAC,CAAC,EAAE,CAAC,CAC/B;CAAA,CAAA;AAKE,YAAkB,cAAc,CADtB,CAAC,IAEX;;;;IAAgB,OAAO,EAAZ,CAAC,EAAE,CACd;;;;IAAoB,OAAO,EAAhB,OAAO,CAClB;;;;IAAyB,KAAK,EAAnB,KAAK,GAAG,IAAI,CACzB;CAAA,CAAA;AAtBD;;4EAE4E;AAE5E;;;;;;;;;GASG;AAEH;;;;;;;GAOG;AAEH;;;;;;;;;;;;GAYG;AACH,cAAM,SAAS,CAFF,CAAC;IAiBV,iCAAiC;IAC5B,MAAM,EADA,eAAe,CAAC,CAAC,CAAC;IAG7B,iCAAiC;IAC5B,aAAa,EADP,gBAAgB,EAAE;IAG7B,gCAAgC;IAC3B,MAAM,EADA,cAAc,CAAC,CAAC,CAAC;IAG5B;;iCAE6B;IACxB,UAAU,EADL,GAAG,CAAC,MAAM,IAAI,CAAC;IAGzB;;mCAE+B;IAC1B,aAAa,EADR,KAAK,CAAC,MAAM,IAAI,CAAC;IAG3B,qBAAqB;IAChB,UAAU,EADJ,MAAM;IAGjB,sBAAsB;IACjB,OAAO,EADD,OAAO;IAGlB,sBAAsB;IACjB,QAAQ,EADF,OAAO;IAGlB,sBAAsB;IACjB,aAAa,EADP,OAAO;IAGlB;;sCAEkC;IAC7B,eAAe,EADV,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI;IAG9B;;qDAEiD;IAC5C,YAAY,EADP,CAAC,MAAM,IAAI,CAAC,GAAG;QAAC,KAAK,CAAC,EAAE,MAAM,IAAI,CAAA;KAAC;IAK7C;;4BAEwB;IACnB,eAAe,EADV,MAAM,IAAI;IA3DtB;;;;;;OAMG;IACH,YAAY,EAAC,KAAK,EAAE,GAAG,QAAQ,EAAC,EAJ7B;QAAiC,KAAK,EAA9B,eAAe,CAAC,CAAC,CAAC,CAC1B;QAAkC,MAAM,AAAxC,CACA,EADQ,gBAAgB,EAAE,CAC1B;QAAsB,QAAQ,AAA9B,CACF,EADU,MAAM,CAChB;KAC+B,EAwD/B;IAED;;;OAGG;IACH,KAAK,IAFQ,IAAI,CAchB;IAED;;;;OAIG;IACH,QAAQ,IAFK,cAAc,CAAC,CAAC,CAAC,CAI7B;IAED;;;;OAIG;IACH,SAAS,CAAC,QAAQ,EAHP,MAAM,IAGC,GAFL,MAAM,IAAI,CAQtB;IAED;;;OAGG;IACH,KAAK,IAFQ,IAAI,CAehB;IAED;;;;OAIG;IACG,WAAW,IAFJ,OAAO,CAAC,IAAI,CAAC,CAWzB;IAED;;;;OAIG;IACH,qBAAqB,IAFR,IAAI,CAYhB;IAED;;;;;OAKG;IACH,IAAI,IAFS,OAAO,CAAC,IAAI,CAAC,CAwBzB;IAED;;;;OAIG;IACH,SAAS,CAAC,KAAK,EAHJ,cAAc,CAAC,CAAC,CAGZ,GAFF,IAAI,CAQhB;CACF;eAEc,SAAS"}
|
|
@@ -12,6 +12,7 @@ import restArgsError from "../utils/rest-args-error.js";
|
|
|
12
12
|
* @template T
|
|
13
13
|
* @typedef {object} LiveQuerySource
|
|
14
14
|
* @property {() => RecordModelClass} getModelClass - Root model class the query reads.
|
|
15
|
+
* @property {(modelClass: RecordModelClass) => string} [databaseIdentityForModel] - Captured physical identity for an observed model.
|
|
15
16
|
* @property {() => Promise<T[]>} toArray - Runs the query and resolves the current rows.
|
|
16
17
|
*/
|
|
17
18
|
/**
|
|
@@ -97,7 +98,8 @@ class LiveQuery {
|
|
|
97
98
|
return;
|
|
98
99
|
this._started = true;
|
|
99
100
|
for (const modelClass of this._modelClasses) {
|
|
100
|
-
this.
|
|
101
|
+
const databaseIdentity = this._query.databaseIdentityForModel?.(modelClass);
|
|
102
|
+
this._unsubscribes.push(recordChanges.subscribe(modelClass, this._onRecordChange, { databaseIdentity }));
|
|
101
103
|
}
|
|
102
104
|
this._run();
|
|
103
105
|
}
|
|
@@ -208,4 +210,4 @@ class LiveQuery {
|
|
|
208
210
|
}
|
|
209
211
|
}
|
|
210
212
|
export default LiveQuery;
|
|
211
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGl2ZS1xdWVyeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9kYXRhYmFzZS9saXZlLXF1ZXJ5LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWixPQUFPLGdCQUFnQixNQUFNLFVBQVUsQ0FBQTtBQUV2QyxPQUFPLGFBQWEsTUFBTSxxQkFBcUIsQ0FBQTtBQUMvQyxPQUFPLGFBQWEsTUFBTSw2QkFBNkIsQ0FBQTtBQUV2RDs7NEVBRTRFO0FBRTVFOzs7Ozs7OztHQVFHO0FBRUg7Ozs7Ozs7R0FPRztBQUVIOzs7Ozs7Ozs7Ozs7R0FZRztBQUNILE1BQU0sU0FBUztJQUNiOzs7Ozs7T0FNRztJQUNILFlBQVksRUFBQyxLQUFLLEVBQUUsR0FBRyxRQUFRLEVBQUM7UUFDOUIsTUFBTSxFQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUUsR0FBRyxXQUFXLEVBQUMsR0FBRyxRQUFRLENBQUE7UUFFbkQsYUFBYSxDQUFDLFdBQVcsQ0FBQyxDQUFBO1FBRTFCLElBQUksQ0FBQyxLQUFLO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyw2QkFBNkIsQ0FBQyxDQUFBO1FBRTFELGlDQUFpQztRQUNqQyxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQTtRQUVuQixpQ0FBaUM7UUFDakMsSUFBSSxDQUFDLGFBQWEsR0FBRyxNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQTtRQUV0RCxnQ0FBZ0M7UUFDaEMsSUFBSSxDQUFDLE1BQU0sR0FBRyxFQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFDLENBQUE7UUFFdkQ7O3FDQUU2QjtRQUM3QixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksR0FBRyxFQUFFLENBQUE7UUFFM0I7O3VDQUUrQjtRQUMvQixJQUFJLENBQUMsYUFBYSxHQUFHLEVBQUUsQ0FBQTtRQUV2QixxQkFBcUI7UUFD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Q0FBQTtZQUNyRyxDQUFDO1FBQ0gsQ0FBQyxDQUFDLEVBQUUsQ0FBQTtRQUVKLElBQUksQ0FBQyxlQUFlLEdBQUcsY0FBYyxDQUFBO1FBQ3JDLEtBQUssY0FBYyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUU7WUFDNUIsSUFBSSxJQUFJLENBQUMsZUFBZSxLQUFLLGNBQWM7Z0JBQUUsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUE7UUFDMUUsQ0FBQyxDQUFDLENBQUE7UUFFRixPQUFPLGNBQWMsQ0FBQTtJQUN2QixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILFNBQVMsQ0FBQyxLQUFLO1FBQ2IsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUE7UUFFbkIsS0FBSyxNQUFNLFFBQVEsSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO1lBQ25ELFFBQVEsRUFBRSxDQUFBO1FBQ1osQ0FBQztJQUNILENBQUM7Q0FDRjtBQUVELGVBQWUsU0FBUyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbmltcG9ydCBkZWJvdW5jZUZ1bmN0aW9uIGZyb20gXCJkZWJvdW5jZVwiXG5cbmltcG9ydCByZWNvcmRDaGFuZ2VzIGZyb20gXCIuL3JlY29yZC1jaGFuZ2VzLmpzXCJcbmltcG9ydCByZXN0QXJnc0Vycm9yIGZyb20gXCIuLi91dGlscy9yZXN0LWFyZ3MtZXJyb3IuanNcIlxuXG4vKipcbiAqIFJlY29yZE1vZGVsQ2xhc3MgdHlwZS5cbiAqIEB0eXBlZGVmIHt0eXBlb2YgaW1wb3J0KFwiLi9yZWNvcmQvaW5kZXguanNcIikuZGVmYXVsdH0gUmVjb3JkTW9kZWxDbGFzcyAqL1xuXG4vKipcbiAqIFRoZSBtaW5pbWFsIHF1ZXJ5IGNvbnRyYWN0IGEgbGl2ZSBxdWVyeSBuZWVkczogYSByb290IG1vZGVsIGNsYXNzIHRvIG9ic2VydmVcbiAqIGZvciBjb21taXR0ZWQgY2hhbmdlcyBhbmQgYSB3YXkgdG8gcnVuIHRoZSBxdWVyeSBhbmQgcmV0dXJuIHRoZSBjdXJyZW50IHJvd3MuXG4gKiBgTW9kZWwud2hlcmUoey4uLn0pYCAoYSBtb2RlbC1jbGFzcyBxdWVyeSkgc2F0aXNmaWVzIHRoaXMgZGlyZWN0bHkuXG4gKiBAdGVtcGxhdGUgVFxuICogQHR5cGVkZWYge29iamVjdH0gTGl2ZVF1ZXJ5U291cmNlXG4gKiBAcHJvcGVydHkgeygpID0+IFJlY29yZE1vZGVsQ2xhc3N9IGdldE1vZGVsQ2xhc3MgLSBSb290IG1vZGVsIGNsYXNzIHRoZSBxdWVyeSByZWFkcy5cbiAqIEBwcm9wZXJ0eSB7KCkgPT4gUHJvbWlzZTxUW10+fSB0b0FycmF5IC0gUnVucyB0aGUgcXVlcnkgYW5kIHJlc29sdmVzIHRoZSBjdXJyZW50IHJvd3MuXG4gKi9cblxuLyoqXG4gKiBMaXZlUXVlcnlTdGF0ZSB0eXBlLlxuICogQHRlbXBsYXRlIFRcbiAqIEB0eXBlZGVmIHtvYmplY3R9IExpdmVRdWVyeVN0YXRlXG4gKiBAcHJvcGVydHkge1RbXX0gcmVzdWx0cyAtIEN1cnJlbnQgcXVlcnkgcmVzdWx0cy5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gbG9hZGluZyAtIFdoZXRoZXIgdGhlIGluaXRpYWwgcmVzdWx0cyBhcmUgc3RpbGwgbG9hZGluZy5cbiAqIEBwcm9wZXJ0eSB7RXJyb3IgfCBudWxsfSBlcnJvciAtIFRoZSBsYXN0IHJ1biBlcnJvciwgb3IgbnVsbCB3aGVuIHRoZSBsYXN0IHJ1biBzdWNjZWVkZWQuXG4gKi9cblxuLyoqXG4gKiBBIHJlYWN0aXZlIHF1ZXJ5IGNvbnRyb2xsZXI6IGZldGNoZXMgb25jZSwgc3Vic2NyaWJlcyB0byBjb21taXR0ZWQgY2hhbmdlcyBvZlxuICogaXRzIG1vZGVsIGNsYXNzKGVzKSwgYW5kIHJlLXJ1bnMgd2hlbmV2ZXIgYSB3YXRjaGVkIG1vZGVsIGNoYW5nZXMuIFJlLXJ1bnMgYXJlXG4gKiBjb2FsZXNjZWQgKG1pY3JvdGFzayBieSBkZWZhdWx0LCBvciBhIHRyYWlsaW5nIGRlYm91bmNlKSBhbmQgcHJvdGVjdGVkIGFnYWluc3RcbiAqIHN0YWxlIHJlc3BvbnNlcyBieSBhIG1vbm90b25pY2FsbHkgaW5jcmVhc2luZyByZXF1ZXN0IGlkLCBzbyBhbiBpbi1mbGlnaHQgcnVuXG4gKiBzdXBlcnNlZGVkIGJ5IGEgbmV3ZXIgY2hhbmdlIG5ldmVyIG92ZXJ3cml0ZXMgZnJlc2hlciByZXN1bHRzLiBGcmFtZXdvcmstbGV2ZWxcbiAqIGFuZCBSZWFjdC1mcmVlIHNvIGl0IGNhbiBiZSB1bml0IHRlc3RlZCBhbmQgd3JhcHBlZCBieSBgdXNlTGl2ZVF1ZXJ5YC5cbiAqXG4gKiBDb3N0IG1vZGVsOiBpbnZhbGlkYXRpb24gaXMgYnkgbW9kZWwgY2xhc3MuIEEgY2hhbmdlIHRvIG1vZGVsIE0gc2NoZWR1bGVzIG9uZVxuICogcmUtcnVuIG9mIGV2ZXJ5IGxpdmUgcXVlcnkgb2JzZXJ2aW5nIE0gKG5vIHBlci1jb25kaXRpb24gbWF0Y2hpbmcpOyBhIGJhdGNoIG9mXG4gKiBjaGFuZ2VzIGNvYWxlc2NlcyBpbnRvIGEgc2luZ2xlIHJlLXJ1bi5cbiAqIEB0ZW1wbGF0ZSBUXG4gKi9cbmNsYXNzIExpdmVRdWVyeSB7XG4gIC8qKlxuICAgKiBCdWlsZHMgYSBsaXZlIHF1ZXJ5IGNvbnRyb2xsZXIgZm9yIGEgcXVlcnkgc291cmNlLlxuICAgKiBAcGFyYW0ge29iamVjdH0gYXJncyAtIE9wdGlvbnMuXG4gICAqIEBwYXJhbSB7TGl2ZVF1ZXJ5U291cmNlPFQ+fSBhcmdzLnF1ZXJ5IC0gUXVlcnkgc291cmNlIHByb3ZpZGluZyBtb2RlbCBjbGFzcyBhbmQgYHRvQXJyYXlgLlxuICAgKiBAcGFyYW0ge1JlY29yZE1vZGVsQ2xhc3NbXX0gW2FyZ3MubW9kZWxzXSAtIE1vZGVsIGNsYXNzZXMgdG8gb2JzZXJ2ZS4gRGVmYXVsdHMgdG8gYFtxdWVyeS5nZXRNb2RlbENsYXNzKCldYDsgcGFzcyB0aGlzIHRvIGFsc28gcmVhY3QgdG8gam9pbmVkIG1vZGVscy5cbiAgICogQHBhcmFtIHtudW1iZXJ9IFthcmdzLmRlYm91bmNlXSAtIFRyYWlsaW5nIGRlYm91bmNlIGluIG1zIGZvciByZS1ydW5zLiBEZWZhdWx0cyB0byBtaWNyb3Rhc2sgY29hbGVzY2luZy5cbiAgICovXG4gIGNvbnN0cnVjdG9yKHtxdWVyeSwgLi4ucmVzdEFyZ3N9KSB7XG4gICAgY29uc3Qge2RlYm91bmNlLCBtb2RlbHMsIC4uLnVua25vd25BcmdzfSA9IHJlc3RBcmdzXG5cbiAgICByZXN0QXJnc0Vycm9yKHVua25vd25BcmdzKVxuXG4gICAgaWYgKCFxdWVyeSkgdGhyb3cgbmV3IEVycm9yKFwiTm8gcXVlcnkgZ2l2ZW4gdG8gTGl2ZVF1ZXJ5XCIpXG5cbiAgICAvKiogQHR5cGUge0xpdmVRdWVyeVNvdXJjZTxUPn0gKi9cbiAgICB0aGlzLl9xdWVyeSA9IHF1ZXJ5XG5cbiAgICAvKiogQHR5cGUge1JlY29yZE1vZGVsQ2xhc3NbXX0gKi9cbiAgICB0aGlzLl9tb2RlbENsYXNzZXMgPSBtb2RlbHMgPz8gW3F1ZXJ5LmdldE1vZGVsQ2xhc3MoKV1cblxuICAgIC8qKiBAdHlwZSB7TGl2ZVF1ZXJ5U3RhdGU8VD59ICovXG4gICAgdGhpcy5fc3RhdGUgPSB7ZXJyb3I6IG51bGwsIGxvYWRpbmc6IHRydWUsIHJlc3VsdHM6IFtdfVxuXG4gICAgLyoqXG4gICAgICogU3RhdGUtY2hhbmdlIGxpc3RlbmVycyBub3RpZmllZCBhZnRlciBldmVyeSBzdGF0ZSB0cmFuc2l0aW9uLlxuICAgICAqIEB0eXBlIHtTZXQ8KCkgPT4gdm9pZD59ICovXG4gICAgdGhpcy5fbGlzdGVuZXJzID0gbmV3IFNldCgpXG5cbiAgICAvKipcbiAgICAgKiBSZWNvcmQtY2hhbmdlIHVuc3Vic2NyaWJlIGNhbGxiYWNrcyByZWdpc3RlcmVkIG9uIGBzdGFydGAuXG4gICAgICogQHR5cGUge0FycmF5PCgpID0+IHZvaWQ+fSAqL1xuICAgIHRoaXMuX3Vuc3Vic2NyaWJlcyA9IFtdXG5cbiAgICAvKiogQHR5cGUge251bWJlcn0gKi9cbiAgICB0aGlzLl9yZXF1ZXN0SWQgPSAwXG5cbiAgICAvKiogQHR5cGUge2Jvb2xlYW59ICovXG4gICAgdGhpcy5fY2xvc2VkID0gZmFsc2VcblxuICAgIC8qKiBAdHlwZSB7Ym9vbGVhbn0gKi9cbiAgICB0aGlzLl9zdGFydGVkID0gZmFsc2VcblxuICAgIC8qKiBAdHlwZSB7Ym9vbGVhbn0gKi9cbiAgICB0aGlzLl9ydW5TY2hlZHVsZWQgPSBmYWxzZVxuXG4gICAgLyoqXG4gICAgICogUHJvbWlzZSBmb3IgdGhlIGN1cnJlbnRseSBpbi1mbGlnaHQgcnVuLCBvciBudWxsIHdoZW4gaWRsZS5cbiAgICAgKiBAdHlwZSB7UHJvbWlzZTx2b2lkPiB8IG51bGx9ICovXG4gICAgdGhpcy5fcnVubmluZ1Byb21pc2UgPSBudWxsXG5cbiAgICAvKipcbiAgICAgKiBTY2hlZHVsZXMgYSBjb2FsZXNjZWQgcmUtcnVuOiBhIHRyYWlsaW5nIGRlYm91bmNlIHdoZW4gY29uZmlndXJlZCwgZWxzZSBtaWNyb3Rhc2sgY29hbGVzY2luZy5cbiAgICAgKiBAdHlwZSB7KCgpID0+IHZvaWQpICYge2NsZWFyPzogKCkgPT4gdm9pZH19ICovXG4gICAgdGhpcy5fc2NoZWR1bGVSdW4gPSB0eXBlb2YgZGVib3VuY2UgPT09IFwibnVtYmVyXCJcbiAgICAgID8gZGVib3VuY2VGdW5jdGlvbigoKSA9PiB0aGlzLl9ydW4oKSwgZGVib3VuY2UpXG4gICAgICA6ICgpID0+IHRoaXMuX3NjaGVkdWxlTWljcm90YXNrUnVuKClcblxuICAgIC8qKlxuICAgICAqIFJlY29yZC1jaGFuZ2UgbGlzdGVuZXIgc2NoZWR1bGluZyBhIHJlLXJ1biB3aGlsZSB0aGUgY29udHJvbGxlciBpcyBvcGVuLlxuICAgICAqIEB0eXBlIHsoKSA9PiB2b2lkfSAqL1xuICAgIHRoaXMuX29uUmVjb3JkQ2hhbmdlID0gKCkgPT4ge1xuICAgICAgaWYgKCF0aGlzLl9jbG9zZWQpIHRoaXMuX3NjaGVkdWxlUnVuKClcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU3Vic2NyaWJlcyB0byByZWNvcmQgY2hhbmdlcyBhbmQgcnVucyB0aGUgaW5pdGlhbCBxdWVyeS4gSWRlbXBvdGVudC5cbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICBzdGFydCgpIHtcbiAgICBpZiAodGhpcy5fY2xvc2VkIHx8IHRoaXMuX3N0YXJ0ZWQpIHJldHVyblxuXG4gICAgdGhpcy5fc3RhcnRlZCA9IHRydWVcblxuICAgIGZvciAoY29uc3QgbW9kZWxDbGFzcyBvZiB0aGlzLl9tb2RlbENsYXNzZXMpIHtcbiAgICAgIHRoaXMuX3Vuc3Vic2NyaWJlcy5wdXNoKHJlY29yZENoYW5nZXMuc3Vic2NyaWJlKG1vZGVsQ2xhc3MsIHRoaXMuX29uUmVjb3JkQ2hhbmdlKSlcbiAgICB9XG5cbiAgICB0aGlzLl9ydW4oKVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGN1cnJlbnQgc3RhdGUuIFRoZSByZWZlcmVuY2Ugb25seSBjaGFuZ2VzIHdoZW4gdGhlIHN0YXRlIGNoYW5nZXMsXG4gICAqIHNvIGl0IGlzIHNhZmUgdG8gdXNlIGFzIGEgUmVhY3QgZXh0ZXJuYWwtc3RvcmUgc25hcHNob3QuXG4gICAqIEByZXR1cm5zIHtMaXZlUXVlcnlTdGF0ZTxUPn0gQ3VycmVudCBsaXZlLXF1ZXJ5IHN0YXRlLlxuICAgKi9cbiAgZ2V0U3RhdGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3N0YXRlXG4gIH1cblxuICAvKipcbiAgICogU3Vic2NyaWJlcyBhIGxpc3RlbmVyIG5vdGlmaWVkIGFmdGVyIGV2ZXJ5IHN0YXRlIGNoYW5nZS5cbiAgICogQHBhcmFtIHsoKSA9PiB2b2lkfSBsaXN0ZW5lciAtIFN0YXRlLWNoYW5nZSBsaXN0ZW5lci5cbiAgICogQHJldHVybnMgeygpID0+IHZvaWR9IFVuc3Vic2NyaWJlIGNhbGxiYWNrLlxuICAgKi9cbiAgc3Vic2NyaWJlKGxpc3RlbmVyKSB7XG4gICAgdGhpcy5fbGlzdGVuZXJzLmFkZChsaXN0ZW5lcilcblxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICB0aGlzLl9saXN0ZW5lcnMuZGVsZXRlKGxpc3RlbmVyKVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBVbnN1YnNjcmliZXMgZnJvbSByZWNvcmQgY2hhbmdlcywgZHJvcHMgbGlzdGVuZXJzLCBhbmQgcHJldmVudHMgZnVydGhlciBydW5zLlxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIGNsb3NlKCkge1xuICAgIGlmICh0aGlzLl9jbG9zZWQpIHJldHVyblxuXG4gICAgdGhpcy5fY2xvc2VkID0gdHJ1ZVxuXG4gICAgZm9yIChjb25zdCB1bnN1YnNjcmliZSBvZiB0aGlzLl91bnN1YnNjcmliZXMpIHtcbiAgICAgIHVuc3Vic2NyaWJlKClcbiAgICB9XG5cbiAgICB0aGlzLl91bnN1YnNjcmliZXMgPSBbXVxuICAgIHRoaXMuX2xpc3RlbmVycy5jbGVhcigpXG5cbiAgICBpZiAodGhpcy5fc2NoZWR1bGVSdW4uY2xlYXIpIHRoaXMuX3NjaGVkdWxlUnVuLmNsZWFyKClcbiAgfVxuXG4gIC8qKlxuICAgKiBBd2FpdHMgYW55IHNjaGVkdWxlZCBvciBpbi1mbGlnaHQgcnVuIHNvIGNhbGxlcnMgKHRlc3RzKSBjYW4gb2JzZXJ2ZSBzZXR0bGVkXG4gICAqIHJlc3VsdHMuIEJvdW5kZWQgc28gYSBjb250aW51b3VzIGNoYW5nZSBzdHJlYW0gY2Fubm90IGxvb3AgZm9yZXZlci5cbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59XG4gICAqL1xuICBhc3luYyB3aGVuU2V0dGxlZCgpIHtcbiAgICBmb3IgKGxldCBhdHRlbXB0ID0gMDsgYXR0ZW1wdCA8IDEwMDsgYXR0ZW1wdCsrKSB7XG4gICAgICBpZiAodGhpcy5fY2xvc2VkKSByZXR1cm5cbiAgICAgIGlmICghdGhpcy5fcnVuU2NoZWR1bGVkICYmICF0aGlzLl9ydW5uaW5nUHJvbWlzZSkgcmV0dXJuXG5cbiAgICAgIGlmICh0aGlzLl9ydW5uaW5nUHJvbWlzZSkgYXdhaXQgdGhpcy5fcnVubmluZ1Byb21pc2VcblxuICAgICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHF1ZXVlTWljcm90YXNrKCgpID0+IHJlc29sdmUodW5kZWZpbmVkKSkpXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNjaGVkdWxlcyBhIG1pY3JvdGFzay1jb2FsZXNjZWQgcmUtcnVuLCBjb2xsYXBzaW5nIGEgc3luY2hyb25vdXMgYnVyc3Qgb2ZcbiAgICogY2hhbmdlIGV2ZW50cyBpbnRvIGEgc2luZ2xlIHJ1bi5cbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICBfc2NoZWR1bGVNaWNyb3Rhc2tSdW4oKSB7XG4gICAgaWYgKHRoaXMuX3J1blNjaGVkdWxlZCkgcmV0dXJuXG5cbiAgICB0aGlzLl9ydW5TY2hlZHVsZWQgPSB0cnVlXG5cbiAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XG4gICAgICB0aGlzLl9ydW5TY2hlZHVsZWQgPSBmYWxzZVxuXG4gICAgICBpZiAoIXRoaXMuX2Nsb3NlZCkgdGhpcy5fcnVuKClcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgdGhlIHF1ZXJ5IGFuZCBhcHBsaWVzIGl0cyByZXN1bHRzIHVubGVzcyBhIG5ld2VyIHJ1biBzdXBlcnNlZGVkIGl0IG9yIHRoZVxuICAgKiBjb250cm9sbGVyIHdhcyBjbG9zZWQuIEEgcnVuIGVycm9yIHN1cmZhY2VzIGluIHN0YXRlICh3aXRoIHRoZSBwcmV2aW91c1xuICAgKiByZXN1bHRzIGtlcHQpIHJhdGhlciB0aGFuIHJlamVjdGluZyBhIGJhY2tncm91bmQgcHJvbWlzZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59XG4gICAqL1xuICBfcnVuKCkge1xuICAgIGNvbnN0IHJlcXVlc3RJZCA9ICsrdGhpcy5fcmVxdWVzdElkXG4gICAgY29uc3QgcnVubmluZ1Byb21pc2UgPSAoYXN5bmMgKCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzdWx0cyA9IGF3YWl0IHRoaXMuX3F1ZXJ5LnRvQXJyYXkoKVxuXG4gICAgICAgIGlmICh0aGlzLl9jbG9zZWQgfHwgcmVxdWVzdElkICE9PSB0aGlzLl9yZXF1ZXN0SWQpIHJldHVyblxuXG4gICAgICAgIHRoaXMuX3NldFN0YXRlKHtlcnJvcjogbnVsbCwgbG9hZGluZzogZmFsc2UsIHJlc3VsdHN9KVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgaWYgKHRoaXMuX2Nsb3NlZCB8fCByZXF1ZXN0SWQgIT09IHRoaXMuX3JlcXVlc3RJZCkgcmV0dXJuXG5cbiAgICAgICAgdGhpcy5fc2V0U3RhdGUoe2Vycm9yOiAvKiogQHR5cGUge0Vycm9yfSAqLyAoZXJyb3IpLCBsb2FkaW5nOiBmYWxzZSwgcmVzdWx0czogdGhpcy5fc3RhdGUucmVzdWx0c30pXG4gICAgICB9XG4gICAgfSkoKVxuXG4gICAgdGhpcy5fcnVubmluZ1Byb21pc2UgPSBydW5uaW5nUHJvbWlzZVxuICAgIHZvaWQgcnVubmluZ1Byb21pc2UudGhlbigoKSA9PiB7XG4gICAgICBpZiAodGhpcy5fcnVubmluZ1Byb21pc2UgPT09IHJ1bm5pbmdQcm9taXNlKSB0aGlzLl9ydW5uaW5nUHJvbWlzZSA9IG51bGxcbiAgICB9KVxuXG4gICAgcmV0dXJuIHJ1bm5pbmdQcm9taXNlXG4gIH1cblxuICAvKipcbiAgICogUmVwbGFjZXMgdGhlIHN0YXRlIGFuZCBub3RpZmllcyBsaXN0ZW5lcnMuXG4gICAqIEBwYXJhbSB7TGl2ZVF1ZXJ5U3RhdGU8VD59IHN0YXRlIC0gTmV4dCBzdGF0ZS5cbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICBfc2V0U3RhdGUoc3RhdGUpIHtcbiAgICB0aGlzLl9zdGF0ZSA9IHN0YXRlXG5cbiAgICBmb3IgKGNvbnN0IGxpc3RlbmVyIG9mIEFycmF5LmZyb20odGhpcy5fbGlzdGVuZXJzKSkge1xuICAgICAgbGlzdGVuZXIoKVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBMaXZlUXVlcnlcbiJdfQ==
|
|
213
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGl2ZS1xdWVyeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9kYXRhYmFzZS9saXZlLXF1ZXJ5LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWixPQUFPLGdCQUFnQixNQUFNLFVBQVUsQ0FBQTtBQUV2QyxPQUFPLGFBQWEsTUFBTSxxQkFBcUIsQ0FBQTtBQUMvQyxPQUFPLGFBQWEsTUFBTSw2QkFBNkIsQ0FBQTtBQUV2RDs7NEVBRTRFO0FBRTVFOzs7Ozs7Ozs7R0FTRztBQUVIOzs7Ozs7O0dBT0c7QUFFSDs7Ozs7Ozs7Ozs7O0dBWUc7QUFDSCxNQUFNLFNBQVM7SUFDYjs7Ozs7O09BTUc7SUFDSCxZQUFZLEVBQUMsS0FBSyxFQUFFLEdBQUcsUUFBUSxFQUFDO1FBQzlCLE1BQU0sRUFBQyxRQUFRLEVBQUUsTUFBTSxFQUFFLEdBQUcsV0FBVyxFQUFDLEdBQUcsUUFBUSxDQUFBO1FBRW5ELGFBQWEsQ0FBQyxXQUFXLENBQUMsQ0FBQTtRQUUxQixJQUFJLENBQUMsS0FBSztZQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsNkJBQTZCLENBQUMsQ0FBQTtRQUUxRCxpQ0FBaUM7UUFDakMsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUE7UUFFbkIsaUNBQWlDO1FBQ2pDLElBQUksQ0FBQyxhQUFhLEdBQUcsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUE7UUFFdEQsZ0NBQWdDO1FBQ2hDLElBQUksQ0FBQyxNQUFNLEdBQUcsRUFBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBQyxDQUFBO1FBRXZEOztxQ0FFNkI7UUFDN0IsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFBO1FBRTNCOzt1Q0FFK0I7UUFDL0IsSUFBSSxDQUFDLGFBQWEsR0FBRyxFQUFFLENBQUE7UUFFdkIscUJBQXFCO1FB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LG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUMsQ0FBQyxDQUFBO1lBQ3JHLENBQUM7UUFDSCxDQUFDLENBQUMsRUFBRSxDQUFBO1FBRUosSUFBSSxDQUFDLGVBQWUsR0FBRyxjQUFjLENBQUE7UUFDckMsS0FBSyxjQUFjLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRTtZQUM1QixJQUFJLElBQUksQ0FBQyxlQUFlLEtBQUssY0FBYztnQkFBRSxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQTtRQUMxRSxDQUFDLENBQUMsQ0FBQTtRQUVGLE9BQU8sY0FBYyxDQUFBO0lBQ3ZCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsU0FBUyxDQUFDLEtBQUs7UUFDYixJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQTtRQUVuQixLQUFLLE1BQU0sUUFBUSxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7WUFDbkQsUUFBUSxFQUFFLENBQUE7UUFDWixDQUFDO0lBQ0gsQ0FBQztDQUNGO0FBRUQsZUFBZSxTQUFTLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcblxuaW1wb3J0IGRlYm91bmNlRnVuY3Rpb24gZnJvbSBcImRlYm91bmNlXCJcblxuaW1wb3J0IHJlY29yZENoYW5nZXMgZnJvbSBcIi4vcmVjb3JkLWNoYW5nZXMuanNcIlxuaW1wb3J0IHJlc3RBcmdzRXJyb3IgZnJvbSBcIi4uL3V0aWxzL3Jlc3QtYXJncy1lcnJvci5qc1wiXG5cbi8qKlxuICogUmVjb3JkTW9kZWxDbGFzcyB0eXBlLlxuICogQHR5cGVkZWYge3R5cGVvZiBpbXBvcnQoXCIuL3JlY29yZC9pbmRleC5qc1wiKS5kZWZhdWx0fSBSZWNvcmRNb2RlbENsYXNzICovXG5cbi8qKlxuICogVGhlIG1pbmltYWwgcXVlcnkgY29udHJhY3QgYSBsaXZlIHF1ZXJ5IG5lZWRzOiBhIHJvb3QgbW9kZWwgY2xhc3MgdG8gb2JzZXJ2ZVxuICogZm9yIGNvbW1pdHRlZCBjaGFuZ2VzIGFuZCBhIHdheSB0byBydW4gdGhlIHF1ZXJ5IGFuZCByZXR1cm4gdGhlIGN1cnJlbnQgcm93cy5cbiAqIGBNb2RlbC53aGVyZSh7Li4ufSlgIChhIG1vZGVsLWNsYXNzIHF1ZXJ5KSBzYXRpc2ZpZXMgdGhpcyBkaXJlY3RseS5cbiAqIEB0ZW1wbGF0ZSBUXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBMaXZlUXVlcnlTb3VyY2VcbiAqIEBwcm9wZXJ0eSB7KCkgPT4gUmVjb3JkTW9kZWxDbGFzc30gZ2V0TW9kZWxDbGFzcyAtIFJvb3QgbW9kZWwgY2xhc3MgdGhlIHF1ZXJ5IHJlYWRzLlxuICogQHByb3BlcnR5IHsobW9kZWxDbGFzczogUmVjb3JkTW9kZWxDbGFzcykgPT4gc3RyaW5nfSBbZGF0YWJhc2VJZGVudGl0eUZvck1vZGVsXSAtIENhcHR1cmVkIHBoeXNpY2FsIGlkZW50aXR5IGZvciBhbiBvYnNlcnZlZCBtb2RlbC5cbiAqIEBwcm9wZXJ0eSB7KCkgPT4gUHJvbWlzZTxUW10+fSB0b0FycmF5IC0gUnVucyB0aGUgcXVlcnkgYW5kIHJlc29sdmVzIHRoZSBjdXJyZW50IHJvd3MuXG4gKi9cblxuLyoqXG4gKiBMaXZlUXVlcnlTdGF0ZSB0eXBlLlxuICogQHRlbXBsYXRlIFRcbiAqIEB0eXBlZGVmIHtvYmplY3R9IExpdmVRdWVyeVN0YXRlXG4gKiBAcHJvcGVydHkge1RbXX0gcmVzdWx0cyAtIEN1cnJlbnQgcXVlcnkgcmVzdWx0cy5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gbG9hZGluZyAtIFdoZXRoZXIgdGhlIGluaXRpYWwgcmVzdWx0cyBhcmUgc3RpbGwgbG9hZGluZy5cbiAqIEBwcm9wZXJ0eSB7RXJyb3IgfCBudWxsfSBlcnJvciAtIFRoZSBsYXN0IHJ1biBlcnJvciwgb3IgbnVsbCB3aGVuIHRoZSBsYXN0IHJ1biBzdWNjZWVkZWQuXG4gKi9cblxuLyoqXG4gKiBBIHJlYWN0aXZlIHF1ZXJ5IGNvbnRyb2xsZXI6IGZldGNoZXMgb25jZSwgc3Vic2NyaWJlcyB0byBjb21taXR0ZWQgY2hhbmdlcyBvZlxuICogaXRzIG1vZGVsIGNsYXNzKGVzKSwgYW5kIHJlLXJ1bnMgd2hlbmV2ZXIgYSB3YXRjaGVkIG1vZGVsIGNoYW5nZXMuIFJlLXJ1bnMgYXJlXG4gKiBjb2FsZXNjZWQgKG1pY3JvdGFzayBieSBkZWZhdWx0LCBvciBhIHRyYWlsaW5nIGRlYm91bmNlKSBhbmQgcHJvdGVjdGVkIGFnYWluc3RcbiAqIHN0YWxlIHJlc3BvbnNlcyBieSBhIG1vbm90b25pY2FsbHkgaW5jcmVhc2luZyByZXF1ZXN0IGlkLCBzbyBhbiBpbi1mbGlnaHQgcnVuXG4gKiBzdXBlcnNlZGVkIGJ5IGEgbmV3ZXIgY2hhbmdlIG5ldmVyIG92ZXJ3cml0ZXMgZnJlc2hlciByZXN1bHRzLiBGcmFtZXdvcmstbGV2ZWxcbiAqIGFuZCBSZWFjdC1mcmVlIHNvIGl0IGNhbiBiZSB1bml0IHRlc3RlZCBhbmQgd3JhcHBlZCBieSBgdXNlTGl2ZVF1ZXJ5YC5cbiAqXG4gKiBDb3N0IG1vZGVsOiBpbnZhbGlkYXRpb24gaXMgYnkgbW9kZWwgY2xhc3MuIEEgY2hhbmdlIHRvIG1vZGVsIE0gc2NoZWR1bGVzIG9uZVxuICogcmUtcnVuIG9mIGV2ZXJ5IGxpdmUgcXVlcnkgb2JzZXJ2aW5nIE0gKG5vIHBlci1jb25kaXRpb24gbWF0Y2hpbmcpOyBhIGJhdGNoIG9mXG4gKiBjaGFuZ2VzIGNvYWxlc2NlcyBpbnRvIGEgc2luZ2xlIHJlLXJ1bi5cbiAqIEB0ZW1wbGF0ZSBUXG4gKi9cbmNsYXNzIExpdmVRdWVyeSB7XG4gIC8qKlxuICAgKiBCdWlsZHMgYSBsaXZlIHF1ZXJ5IGNvbnRyb2xsZXIgZm9yIGEgcXVlcnkgc291cmNlLlxuICAgKiBAcGFyYW0ge29iamVjdH0gYXJncyAtIE9wdGlvbnMuXG4gICAqIEBwYXJhbSB7TGl2ZVF1ZXJ5U291cmNlPFQ+fSBhcmdzLnF1ZXJ5IC0gUXVlcnkgc291cmNlIHByb3ZpZGluZyBtb2RlbCBjbGFzcyBhbmQgYHRvQXJyYXlgLlxuICAgKiBAcGFyYW0ge1JlY29yZE1vZGVsQ2xhc3NbXX0gW2FyZ3MubW9kZWxzXSAtIE1vZGVsIGNsYXNzZXMgdG8gb2JzZXJ2ZS4gRGVmYXVsdHMgdG8gYFtxdWVyeS5nZXRNb2RlbENsYXNzKCldYDsgcGFzcyB0aGlzIHRvIGFsc28gcmVhY3QgdG8gam9pbmVkIG1vZGVscy5cbiAgICogQHBhcmFtIHtudW1iZXJ9IFthcmdzLmRlYm91bmNlXSAtIFRyYWlsaW5nIGRlYm91bmNlIGluIG1zIGZvciByZS1ydW5zLiBEZWZhdWx0cyB0byBtaWNyb3Rhc2sgY29hbGVzY2luZy5cbiAgICovXG4gIGNvbnN0cnVjdG9yKHtxdWVyeSwgLi4ucmVzdEFyZ3N9KSB7XG4gICAgY29uc3Qge2RlYm91bmNlLCBtb2RlbHMsIC4uLnVua25vd25BcmdzfSA9IHJlc3RBcmdzXG5cbiAgICByZXN0QXJnc0Vycm9yKHVua25vd25BcmdzKVxuXG4gICAgaWYgKCFxdWVyeSkgdGhyb3cgbmV3IEVycm9yKFwiTm8gcXVlcnkgZ2l2ZW4gdG8gTGl2ZVF1ZXJ5XCIpXG5cbiAgICAvKiogQHR5cGUge0xpdmVRdWVyeVNvdXJjZTxUPn0gKi9cbiAgICB0aGlzLl9xdWVyeSA9IHF1ZXJ5XG5cbiAgICAvKiogQHR5cGUge1JlY29yZE1vZGVsQ2xhc3NbXX0gKi9cbiAgICB0aGlzLl9tb2RlbENsYXNzZXMgPSBtb2RlbHMgPz8gW3F1ZXJ5LmdldE1vZGVsQ2xhc3MoKV1cblxuICAgIC8qKiBAdHlwZSB7TGl2ZVF1ZXJ5U3RhdGU8VD59ICovXG4gICAgdGhpcy5fc3RhdGUgPSB7ZXJyb3I6IG51bGwsIGxvYWRpbmc6IHRydWUsIHJlc3VsdHM6IFtdfVxuXG4gICAgLyoqXG4gICAgICogU3RhdGUtY2hhbmdlIGxpc3RlbmVycyBub3RpZmllZCBhZnRlciBldmVyeSBzdGF0ZSB0cmFuc2l0aW9uLlxuICAgICAqIEB0eXBlIHtTZXQ8KCkgPT4gdm9pZD59ICovXG4gICAgdGhpcy5fbGlzdGVuZXJzID0gbmV3IFNldCgpXG5cbiAgICAvKipcbiAgICAgKiBSZWNvcmQtY2hhbmdlIHVuc3Vic2NyaWJlIGNhbGxiYWNrcyByZWdpc3RlcmVkIG9uIGBzdGFydGAuXG4gICAgICogQHR5cGUge0FycmF5PCgpID0+IHZvaWQ+fSAqL1xuICAgIHRoaXMuX3Vuc3Vic2NyaWJlcyA9IFtdXG5cbiAgICAvKiogQHR5cGUge251bWJlcn0gKi9cbiAgICB0aGlzLl9yZXF1ZXN0SWQgPSAwXG5cbiAgICAvKiogQHR5cGUge2Jvb2xlYW59ICovXG4gICAgdGhpcy5fY2xvc2VkID0gZmFsc2VcblxuICAgIC8qKiBAdHlwZSB7Ym9vbGVhbn0gKi9cbiAgICB0aGlzLl9zdGFydGVkID0gZmFsc2VcblxuICAgIC8qKiBAdHlwZSB7Ym9vbGVhbn0gKi9cbiAgICB0aGlzLl9ydW5TY2hlZHVsZWQgPSBmYWxzZVxuXG4gICAgLyoqXG4gICAgICogUHJvbWlzZSBmb3IgdGhlIGN1cnJlbnRseSBpbi1mbGlnaHQgcnVuLCBvciBudWxsIHdoZW4gaWRsZS5cbiAgICAgKiBAdHlwZSB7UHJvbWlzZTx2b2lkPiB8IG51bGx9ICovXG4gICAgdGhpcy5fcnVubmluZ1Byb21pc2UgPSBudWxsXG5cbiAgICAvKipcbiAgICAgKiBTY2hlZHVsZXMgYSBjb2FsZXNjZWQgcmUtcnVuOiBhIHRyYWlsaW5nIGRlYm91bmNlIHdoZW4gY29uZmlndXJlZCwgZWxzZSBtaWNyb3Rhc2sgY29hbGVzY2luZy5cbiAgICAgKiBAdHlwZSB7KCgpID0+IHZvaWQpICYge2NsZWFyPzogKCkgPT4gdm9pZH19ICovXG4gICAgdGhpcy5fc2NoZWR1bGVSdW4gPSB0eXBlb2YgZGVib3VuY2UgPT09IFwibnVtYmVyXCJcbiAgICAgID8gZGVib3VuY2VGdW5jdGlvbigoKSA9PiB0aGlzLl9ydW4oKSwgZGVib3VuY2UpXG4gICAgICA6ICgpID0+IHRoaXMuX3NjaGVkdWxlTWljcm90YXNrUnVuKClcblxuICAgIC8qKlxuICAgICAqIFJlY29yZC1jaGFuZ2UgbGlzdGVuZXIgc2NoZWR1bGluZyBhIHJlLXJ1biB3aGlsZSB0aGUgY29udHJvbGxlciBpcyBvcGVuLlxuICAgICAqIEB0eXBlIHsoKSA9PiB2b2lkfSAqL1xuICAgIHRoaXMuX29uUmVjb3JkQ2hhbmdlID0gKCkgPT4ge1xuICAgICAgaWYgKCF0aGlzLl9jbG9zZWQpIHRoaXMuX3NjaGVkdWxlUnVuKClcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU3Vic2NyaWJlcyB0byByZWNvcmQgY2hhbmdlcyBhbmQgcnVucyB0aGUgaW5pdGlhbCBxdWVyeS4gSWRlbXBvdGVudC5cbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICBzdGFydCgpIHtcbiAgICBpZiAodGhpcy5fY2xvc2VkIHx8IHRoaXMuX3N0YXJ0ZWQpIHJldHVyblxuXG4gICAgdGhpcy5fc3RhcnRlZCA9IHRydWVcblxuICAgIGZvciAoY29uc3QgbW9kZWxDbGFzcyBvZiB0aGlzLl9tb2RlbENsYXNzZXMpIHtcbiAgICAgIGNvbnN0IGRhdGFiYXNlSWRlbnRpdHkgPSB0aGlzLl9xdWVyeS5kYXRhYmFzZUlkZW50aXR5Rm9yTW9kZWw/Lihtb2RlbENsYXNzKVxuXG4gICAgICB0aGlzLl91bnN1YnNjcmliZXMucHVzaChyZWNvcmRDaGFuZ2VzLnN1YnNjcmliZShtb2RlbENsYXNzLCB0aGlzLl9vblJlY29yZENoYW5nZSwge2RhdGFiYXNlSWRlbnRpdHl9KSlcbiAgICB9XG5cbiAgICB0aGlzLl9ydW4oKVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGN1cnJlbnQgc3RhdGUuIFRoZSByZWZlcmVuY2Ugb25seSBjaGFuZ2VzIHdoZW4gdGhlIHN0YXRlIGNoYW5nZXMsXG4gICAqIHNvIGl0IGlzIHNhZmUgdG8gdXNlIGFzIGEgUmVhY3QgZXh0ZXJuYWwtc3RvcmUgc25hcHNob3QuXG4gICAqIEByZXR1cm5zIHtMaXZlUXVlcnlTdGF0ZTxUPn0gQ3VycmVudCBsaXZlLXF1ZXJ5IHN0YXRlLlxuICAgKi9cbiAgZ2V0U3RhdGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3N0YXRlXG4gIH1cblxuICAvKipcbiAgICogU3Vic2NyaWJlcyBhIGxpc3RlbmVyIG5vdGlmaWVkIGFmdGVyIGV2ZXJ5IHN0YXRlIGNoYW5nZS5cbiAgICogQHBhcmFtIHsoKSA9PiB2b2lkfSBsaXN0ZW5lciAtIFN0YXRlLWNoYW5nZSBsaXN0ZW5lci5cbiAgICogQHJldHVybnMgeygpID0+IHZvaWR9IFVuc3Vic2NyaWJlIGNhbGxiYWNrLlxuICAgKi9cbiAgc3Vic2NyaWJlKGxpc3RlbmVyKSB7XG4gICAgdGhpcy5fbGlzdGVuZXJzLmFkZChsaXN0ZW5lcilcblxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICB0aGlzLl9saXN0ZW5lcnMuZGVsZXRlKGxpc3RlbmVyKVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBVbnN1YnNjcmliZXMgZnJvbSByZWNvcmQgY2hhbmdlcywgZHJvcHMgbGlzdGVuZXJzLCBhbmQgcHJldmVudHMgZnVydGhlciBydW5zLlxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIGNsb3NlKCkge1xuICAgIGlmICh0aGlzLl9jbG9zZWQpIHJldHVyblxuXG4gICAgdGhpcy5fY2xvc2VkID0gdHJ1ZVxuXG4gICAgZm9yIChjb25zdCB1bnN1YnNjcmliZSBvZiB0aGlzLl91bnN1YnNjcmliZXMpIHtcbiAgICAgIHVuc3Vic2NyaWJlKClcbiAgICB9XG5cbiAgICB0aGlzLl91bnN1YnNjcmliZXMgPSBbXVxuICAgIHRoaXMuX2xpc3RlbmVycy5jbGVhcigpXG5cbiAgICBpZiAodGhpcy5fc2NoZWR1bGVSdW4uY2xlYXIpIHRoaXMuX3NjaGVkdWxlUnVuLmNsZWFyKClcbiAgfVxuXG4gIC8qKlxuICAgKiBBd2FpdHMgYW55IHNjaGVkdWxlZCBvciBpbi1mbGlnaHQgcnVuIHNvIGNhbGxlcnMgKHRlc3RzKSBjYW4gb2JzZXJ2ZSBzZXR0bGVkXG4gICAqIHJlc3VsdHMuIEJvdW5kZWQgc28gYSBjb250aW51b3VzIGNoYW5nZSBzdHJlYW0gY2Fubm90IGxvb3AgZm9yZXZlci5cbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59XG4gICAqL1xuICBhc3luYyB3aGVuU2V0dGxlZCgpIHtcbiAgICBmb3IgKGxldCBhdHRlbXB0ID0gMDsgYXR0ZW1wdCA8IDEwMDsgYXR0ZW1wdCsrKSB7XG4gICAgICBpZiAodGhpcy5fY2xvc2VkKSByZXR1cm5cbiAgICAgIGlmICghdGhpcy5fcnVuU2NoZWR1bGVkICYmICF0aGlzLl9ydW5uaW5nUHJvbWlzZSkgcmV0dXJuXG5cbiAgICAgIGlmICh0aGlzLl9ydW5uaW5nUHJvbWlzZSkgYXdhaXQgdGhpcy5fcnVubmluZ1Byb21pc2VcblxuICAgICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHF1ZXVlTWljcm90YXNrKCgpID0+IHJlc29sdmUodW5kZWZpbmVkKSkpXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNjaGVkdWxlcyBhIG1pY3JvdGFzay1jb2FsZXNjZWQgcmUtcnVuLCBjb2xsYXBzaW5nIGEgc3luY2hyb25vdXMgYnVyc3Qgb2ZcbiAgICogY2hhbmdlIGV2ZW50cyBpbnRvIGEgc2luZ2xlIHJ1bi5cbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICBfc2NoZWR1bGVNaWNyb3Rhc2tSdW4oKSB7XG4gICAgaWYgKHRoaXMuX3J1blNjaGVkdWxlZCkgcmV0dXJuXG5cbiAgICB0aGlzLl9ydW5TY2hlZHVsZWQgPSB0cnVlXG5cbiAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XG4gICAgICB0aGlzLl9ydW5TY2hlZHVsZWQgPSBmYWxzZVxuXG4gICAgICBpZiAoIXRoaXMuX2Nsb3NlZCkgdGhpcy5fcnVuKClcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgdGhlIHF1ZXJ5IGFuZCBhcHBsaWVzIGl0cyByZXN1bHRzIHVubGVzcyBhIG5ld2VyIHJ1biBzdXBlcnNlZGVkIGl0IG9yIHRoZVxuICAgKiBjb250cm9sbGVyIHdhcyBjbG9zZWQuIEEgcnVuIGVycm9yIHN1cmZhY2VzIGluIHN0YXRlICh3aXRoIHRoZSBwcmV2aW91c1xuICAgKiByZXN1bHRzIGtlcHQpIHJhdGhlciB0aGFuIHJlamVjdGluZyBhIGJhY2tncm91bmQgcHJvbWlzZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59XG4gICAqL1xuICBfcnVuKCkge1xuICAgIGNvbnN0IHJlcXVlc3RJZCA9ICsrdGhpcy5fcmVxdWVzdElkXG4gICAgY29uc3QgcnVubmluZ1Byb21pc2UgPSAoYXN5bmMgKCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzdWx0cyA9IGF3YWl0IHRoaXMuX3F1ZXJ5LnRvQXJyYXkoKVxuXG4gICAgICAgIGlmICh0aGlzLl9jbG9zZWQgfHwgcmVxdWVzdElkICE9PSB0aGlzLl9yZXF1ZXN0SWQpIHJldHVyblxuXG4gICAgICAgIHRoaXMuX3NldFN0YXRlKHtlcnJvcjogbnVsbCwgbG9hZGluZzogZmFsc2UsIHJlc3VsdHN9KVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgaWYgKHRoaXMuX2Nsb3NlZCB8fCByZXF1ZXN0SWQgIT09IHRoaXMuX3JlcXVlc3RJZCkgcmV0dXJuXG5cbiAgICAgICAgdGhpcy5fc2V0U3RhdGUoe2Vycm9yOiAvKiogQHR5cGUge0Vycm9yfSAqLyAoZXJyb3IpLCBsb2FkaW5nOiBmYWxzZSwgcmVzdWx0czogdGhpcy5fc3RhdGUucmVzdWx0c30pXG4gICAgICB9XG4gICAgfSkoKVxuXG4gICAgdGhpcy5fcnVubmluZ1Byb21pc2UgPSBydW5uaW5nUHJvbWlzZVxuICAgIHZvaWQgcnVubmluZ1Byb21pc2UudGhlbigoKSA9PiB7XG4gICAgICBpZiAodGhpcy5fcnVubmluZ1Byb21pc2UgPT09IHJ1bm5pbmdQcm9taXNlKSB0aGlzLl9ydW5uaW5nUHJvbWlzZSA9IG51bGxcbiAgICB9KVxuXG4gICAgcmV0dXJuIHJ1bm5pbmdQcm9taXNlXG4gIH1cblxuICAvKipcbiAgICogUmVwbGFjZXMgdGhlIHN0YXRlIGFuZCBub3RpZmllcyBsaXN0ZW5lcnMuXG4gICAqIEBwYXJhbSB7TGl2ZVF1ZXJ5U3RhdGU8VD59IHN0YXRlIC0gTmV4dCBzdGF0ZS5cbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICBfc2V0U3RhdGUoc3RhdGUpIHtcbiAgICB0aGlzLl9zdGF0ZSA9IHN0YXRlXG5cbiAgICBmb3IgKGNvbnN0IGxpc3RlbmVyIG9mIEFycmF5LmZyb20odGhpcy5fbGlzdGVuZXJzKSkge1xuICAgICAgbGlzdGVuZXIoKVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBMaXZlUXVlcnlcbiJdfQ==
|
|
@@ -110,6 +110,11 @@ export default class VelociousDatabaseOperation {
|
|
|
110
110
|
* @returns {string} - Physical database identity.
|
|
111
111
|
*/
|
|
112
112
|
databaseIdentity(): string;
|
|
113
|
+
/**
|
|
114
|
+
* Returns the tenant schema generation captured when this operation started.
|
|
115
|
+
* @returns {string | undefined} - Captured schema generation.
|
|
116
|
+
*/
|
|
117
|
+
schemaGeneration(): string | undefined;
|
|
113
118
|
/**
|
|
114
119
|
* Initializes a model through this operation's captured connection.
|
|
115
120
|
* @param {typeof import("./record/index.js").default} ModelClass - Model class.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"operation.d.ts","sourceRoot":"","sources":["../../../src/database/operation.js"],"names":[],"mappings":"AAEA,OAAO,mBAAmB,MAAM,2BAA2B,CAAA;AAE3D;;;GAGG;AACH,MAAM,CAAC,OAAO,OAAO,0BAA0B;IAetC,OAAO;IACP,cAAc;IACd,sBAAsB;IACtB,sBAAsB;IACtB,mBAAmB;IACnB,6BAA6B;IAC7B,mBAAmB;IACnB,iBAAiB;IACjB,OAAO;IACZ,8GAA8G;IACzG,kBAAkB,EADZ,OAAO,CAAC,cAAc,mBAAmB,EAAE,OAAO,EAAE,cAAc,mBAAmB,EAAE,OAAO,CAAC;IAErG,WAAW;IAzBlB;;;;;;;;;;;;OAYG;IACH,YAAY,EAAC,aAAa,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,UAAU,EAAE,kBAAkB,EAAE,4BAAmC,EAAE,KAAK,EAAE,gBAAgB,EAAE,MAAM,EAAC,EAV5K;QAAoD,aAAa,EAAzD,OAAO,qBAAqB,EAAE,OAAO,CAC7C;QAAuB,4BAA4B,AAAnD,CACA,EADQ,OAAO,CACf;QAA6E,qBAAqB,AAAlG,CACA,EADQ,OAAO,2BAA2B,EAAE,yBAAyB,CACrE;QAAqB,qBAAqB,EAAlC,MAAM,CACd;QAAkD,UAAU,EAApD,OAAO,mBAAmB,EAAE,OAAO,CAC3C;QAAqB,kBAAkB,EAA/B,MAAM,CACd;QAAqB,KAAK,EAAlB,MAAM,CACd;QAAsB,gBAAgB,AAAtC,CACA,EADQ,MAAM,CACd;QAAiC,MAAM,EAA/B,MAAM,GAAG,SAAS,CAC5B;KAC8K,EAiB9K;IAED;;;;;OAKG;IACH,QAAQ,CAJkD,EAAE,SAA9C,cAAc,mBAAmB,EAAE,OAAW,EAInD,UAAU,EAHR,EAGQ,GAFN,OAAO,8BAA8B,EAAE,OAAO,CAAC,EAAE,CAAC,CAU9D;IAED;;;;;;;OAOG;IACH,UAAU,CAJgD,EAAE,SAA9C,cAAc,mBAAmB,EAAE,OAAW,EAIjD,UAAU,EAHV,EAGU,GAFR,EAAE,CAqCd;IAED;;;;OAIG;IACH,WAAW,CAAC,UAAU,EAHX,cAAc,mBAAmB,EAAE,OAGxB,GAFT,IAAI,CAYhB;IAED;;;;;OAKG;IACH,UAAU,CAJyC,KAAK,SAA1C,OAAO,mBAAmB,EAAE,OAAc,EAI7C,MAAM,EAHN,KAGM,GAFJ,KAAK,
|
|
1
|
+
{"version":3,"file":"operation.d.ts","sourceRoot":"","sources":["../../../src/database/operation.js"],"names":[],"mappings":"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"}
|
|
@@ -116,6 +116,7 @@ export default class VelociousDatabaseOperation {
|
|
|
116
116
|
this.assertActive();
|
|
117
117
|
this.assertModel(record.getModelClass());
|
|
118
118
|
record.bindDatabaseOperation(this);
|
|
119
|
+
record.captureDatabaseIdentity(this.databaseIdentity());
|
|
119
120
|
return record;
|
|
120
121
|
}
|
|
121
122
|
/**
|
|
@@ -180,6 +181,13 @@ export default class VelociousDatabaseOperation {
|
|
|
180
181
|
databaseIdentity() {
|
|
181
182
|
return `${this._databaseIdentifier}:${this._configurationReuseKey}`;
|
|
182
183
|
}
|
|
184
|
+
/**
|
|
185
|
+
* Returns the tenant schema generation captured when this operation started.
|
|
186
|
+
* @returns {string | undefined} - Captured schema generation.
|
|
187
|
+
*/
|
|
188
|
+
schemaGeneration() {
|
|
189
|
+
return this._schemaGeneration;
|
|
190
|
+
}
|
|
183
191
|
/**
|
|
184
192
|
* Initializes a model through this operation's captured connection.
|
|
185
193
|
* @param {typeof import("./record/index.js").default} ModelClass - Model class.
|
|
@@ -223,4 +231,4 @@ export default class VelociousDatabaseOperation {
|
|
|
223
231
|
this._active = false;
|
|
224
232
|
}
|
|
225
233
|
}
|
|
226
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3BlcmF0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2RhdGFiYXNlL29wZXJhdGlvbi5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZO0FBRVosT0FBTyxtQkFBbUIsTUFBTSwyQkFBMkIsQ0FBQTtBQUUzRDs7O0dBR0c7QUFDSCxNQUFNLENBQUMsT0FBTyxPQUFPLDBCQUEwQjtJQUM3Qzs7Ozs7Ozs7Ozs7O09BWUc7SUFDSCxZQUFZLEVBQUMsYUFBYSxFQUFFLHFCQUFxQixFQUFFLHFCQUFxQixFQUFFLFVBQVUsRUFBRSxrQkFBa0IsRUFBRSw0QkFBNEIsR0FBRyxJQUFJLEVBQUUsS0FBSyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sRUFBQztRQUM3SyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQTtRQUNuQixJQUFJLENBQUMsY0FBYyxHQUFHLGFBQWEsQ0FBQTtRQUNuQyxJQUFJLENBQUMsc0JBQXNCLEdBQUcscUJBQXFCLElBQUksYUFBYSxDQUFDLDRCQUE0QixDQUFDLGtCQUFrQixFQUFFLE1BQU0sQ0FBQyxDQUFBO1FBQzdILElBQUksQ0FBQyxzQkFBc0IsR0FBRyxxQkFBcUIsQ0FBQTtRQUNuRCxJQUFJLENBQUMsbUJBQW1CLEdBQUcsa0JBQWtCLENBQUE7UUFDN0MsSUFBSSxDQUFDLDZCQUE2QixHQUFHLDRCQUE0QixDQUFBO1FBQ2pFLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxVQUFVLENBQUE7UUFDckMsSUFBSSxDQUFDLGlCQUFpQixHQUFHLGdCQUFnQixDQUFBO1FBQ3pDLElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFBO1FBQ3JCLDhHQUE4RztRQUM5RyxJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQTtRQUN2QyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksbUJBQW1CLENBQUM7WUFDekMsVUFBVTtZQUNWLFNBQVMsRUFBRSxJQUFJO1lBQ2YsS0FBSztT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QUM7SUFDSCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsUUFBUTtRQUNOLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFBO0lBQ3RCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG5pbXBvcnQgT3BlcmF0aW9uQ29ubmVjdGlvbiBmcm9tIFwiLi9vcGVyYXRpb24tY29ubmVjdGlvbi5qc1wiXG5cbi8qKlxuICogRXhwbGljaXQgb3duZXIgZm9yIG1vZGVsIHdvcmsgcGVyZm9ybWVkIG9uIG9uZSBwaW5uZWQgdHJhbnNhY3Rpb25hbFxuICogY29ubmVjdGlvbi5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVmVsb2Npb3VzRGF0YWJhc2VPcGVyYXRpb24ge1xuICAvKipcbiAgICogUnVucyBjb25zdHJ1Y3Rvci5cbiAgICogQHBhcmFtIHtvYmplY3R9IGFyZ3MgLSBPcGVyYXRpb24gb3duZXJzaGlwLlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4uL2NvbmZpZ3VyYXRpb24uanNcIikuZGVmYXVsdH0gYXJncy5jb25maWd1cmF0aW9uIC0gT3duaW5nIGNvbmZpZ3VyYXRpb24uXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2FyZ3MuZW5mb3JjZUN1cnJlbnRUZW5hbnRSZXVzZUtleV0gLSBXaGV0aGVyIGFtYmllbnQgdGVuYW50IGNoYW5nZXMgaW52YWxpZGF0ZSB0aGlzIGxlZ2FjeSBvcGVyYXRpb24uXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vY29uZmlndXJhdGlvbi10eXBlcy5qc1wiKS5EYXRhYmFzZUNvbmZpZ3VyYXRpb25UeXBlfSBbYXJncy5kYXRhYmFzZUNvbmZpZ3VyYXRpb25dIC0gQ2FwdHVyZWQgcmVzb2x2ZWQgcGh5c2ljYWwgZGF0YWJhc2UgY29uZmlndXJhdGlvbi5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MuY29uZmlndXJhdGlvblJldXNlS2V5IC0gUGh5c2ljYWwgZGF0YWJhc2UgY29uZmlndXJhdGlvbiBrZXkgY2FwdHVyZWQgYXQgY2hlY2tvdXQuXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi9kcml2ZXJzL2Jhc2UuanNcIikuZGVmYXVsdH0gYXJncy5jb25uZWN0aW9uIC0gUGlubmVkIHBoeXNpY2FsIGNvbm5lY3Rpb24uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhcmdzLmRhdGFiYXNlSWRlbnRpZmllciAtIFNpbmd1bGFyIGRhdGFiYXNlIGlkZW50aWZpZXIuXG4gICAqIEBwYXJhbSB7c3ltYm9sfSBhcmdzLm93bmVyIC0gT3BhcXVlIHBvb2wgbGVhc2Ugb3duZXIuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbYXJncy5zY2hlbWFHZW5lcmF0aW9uXSAtIFRlbmFudCBzY2hlbWEgZ2VuZXJhdGlvbiBvd25pbmcgcmVjb3JkIG1ldGFkYXRhLlxuICAgKiBAcGFyYW0ge29iamVjdCB8IHVuZGVmaW5lZH0gYXJncy50ZW5hbnQgLSBUZW5hbnQgZGVzY3JpcHRvciBjYXB0dXJlZCBieSB0aGUgb3duaW5nIGhhbmRsZS5cbiAgICovXG4gIGNvbnN0cnVjdG9yKHtjb25maWd1cmF0aW9uLCBkYXRhYmFzZUNvbmZpZ3VyYXRpb24sIGNvbmZpZ3VyYXRpb25SZXVzZUtleSwgY29ubmVjdGlvbiwgZGF0YWJhc2VJZGVudGlmaWVyLCBlbmZvcmNlQ3VycmVudFRlbmFudFJldXNlS2V5ID0gdHJ1ZSwgb3duZXIsIHNjaGVtYUdlbmVyYXRpb24sIHRlbmFudH0pIHtcbiAgICB0aGlzLl9hY3RpdmUgPSB0cnVlXG4gICAgdGhpcy5fY29uZmlndXJhdGlvbiA9IGNvbmZpZ3VyYXRpb25cbiAgICB0aGlzLl9kYXRhYmFzZUNvbmZpZ3VyYXRpb24gPSBkYXRhYmFzZUNvbmZpZ3VyYXRpb24gfHwgY29uZmlndXJhdGlvbi5yZXNvbHZlRGF0YWJhc2VDb25maWd1cmF0aW9uKGRhdGFiYXNlSWRlbnRpZmllciwgdGVuYW50KVxuICAgIHRoaXMuX2NvbmZpZ3VyYXRpb25SZXVzZUtleSA9IGNvbmZpZ3VyYXRpb25SZXVzZUtleVxuICAgIHRoaXMuX2RhdGFiYXNlSWRlbnRpZmllciA9IGRhdGFiYXNlSWRlbnRpZmllclxuICAgIHRoaXMuX2VuZm9yY2VDdXJyZW50VGVuYW50UmV1c2VLZXkgPSBlbmZvcmNlQ3VycmVudFRlbmFudFJldXNlS2V5XG4gICAgdGhpcy5fcGh5c2ljYWxDb25uZWN0aW9uID0gY29ubmVjdGlvblxuICAgIHRoaXMuX3NjaGVtYUdlbmVyYXRpb24gPSBzY2hlbWFHZW5lcmF0aW9uXG4gICAgdGhpcy5fdGVuYW50ID0gdGVuYW50XG4gICAgLyoqIEB0eXBlIHtXZWFrTWFwPHR5cGVvZiBpbXBvcnQoXCIuL3JlY29yZC9pbmRleC5qc1wiKS5kZWZhdWx0LCB0eXBlb2YgaW1wb3J0KFwiLi9yZWNvcmQvaW5kZXguanNcIikuZGVmYXVsdD59ICovXG4gICAgdGhpcy5fYm91bmRNb2RlbENsYXNzZXMgPSBuZXcgV2Vha01hcCgpXG4gICAgdGhpcy5fY29ubmVjdGlvbiA9IG5ldyBPcGVyYXRpb25Db25uZWN0aW9uKHtcbiAgICAgIGNvbm5lY3Rpb24sXG4gICAgICBvcGVyYXRpb246IHRoaXMsXG4gICAgICBvd25lclxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhbiBvcGVyYXRpb24tYm91bmQgbW9kZWwgcXVlcnkvY3JlYXRlIHNjb3BlLlxuICAgKiBAdGVtcGxhdGUge3R5cGVvZiBpbXBvcnQoXCIuL3JlY29yZC9pbmRleC5qc1wiKS5kZWZhdWx0fSBNQ1xuICAgKiBAcGFyYW0ge01DfSBNb2RlbENsYXNzIC0gTW9kZWwgY2xhc3MgdG8gYmluZC5cbiAgICogQHJldHVybnMge2ltcG9ydChcIi4vcXVlcnkvbW9kZWwtY2xhc3MtcXVlcnkuanNcIikuZGVmYXVsdDxNQz59IC0gT3BlcmF0aW9uLWJvdW5kIHNjb3BlLlxuICAgKi9cbiAgZm9yTW9kZWwoTW9kZWxDbGFzcykge1xuICAgIHRoaXMuYXNzZXJ0QWN0aXZlKClcbiAgICB0aGlzLmFzc2VydE1vZGVsKE1vZGVsQ2xhc3MpXG5cbiAgICByZXR1cm4gdGhpcy5tb2RlbENsYXNzKE1vZGVsQ2xhc3MpLl9uZXdRdWVyeSh7XG4gICAgICBkcml2ZXI6IHRoaXMuY29ubmVjdGlvbigpLFxuICAgICAgb3BlcmF0aW9uOiB0aGlzXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgbW9kZWwtY2xhc3MgdmlldyB3aG9zZSBzY2hlbWEgbWV0YWRhdGEgaXMgYm91bmQgdG8gdGhpcyBwaHlzaWNhbFxuICAgKiBkYXRhYmFzZSBnZW5lcmF0aW9uLiBDb25zdHJ1Y3Rpb24gc3RpbGwgcHJvZHVjZXMgdGhlIGFwcGxpY2F0aW9uJ3Mgb3JpZ2luYWxcbiAgICogbW9kZWwgY2xhc3MsIHNvIGxpZmVjeWNsZSBjYWxsYmFja3MgYW5kIG1vZGVsIHJlZ2lzdHJpZXMgcmV0YWluIGNsYXNzIGlkZW50aXR5LlxuICAgKiBAdGVtcGxhdGUge3R5cGVvZiBpbXBvcnQoXCIuL3JlY29yZC9pbmRleC5qc1wiKS5kZWZhdWx0fSBNQ1xuICAgKiBAcGFyYW0ge01DfSBNb2RlbENsYXNzIC0gQ2Fub25pY2FsIG1vZGVsIGNsYXNzLlxuICAgKiBAcmV0dXJucyB7TUN9IC0gT3BlcmF0aW9uLWJvdW5kIG1vZGVsIGNsYXNzLlxuICAgKi9cbiAgbW9kZWxDbGFzcyhNb2RlbENsYXNzKSB7XG4gICAgaWYgKCF0aGlzLl9zY2hlbWFHZW5lcmF0aW9uKSByZXR1cm4gTW9kZWxDbGFzc1xuXG4gICAgY29uc3QgY2Fub25pY2FsTW9kZWxDbGFzcyA9IC8qKiBAdHlwZSB7TUN9ICovIChNb2RlbENsYXNzLl9yZWNvcmRNZXRhZGF0YU1vZGVsQ2xhc3MgfHwgTW9kZWxDbGFzcylcblxuICAgIGNvbnN0IGV4aXN0aW5nID0gdGhpcy5fYm91bmRNb2RlbENsYXNzZXMuZ2V0KGNhbm9uaWNhbE1vZGVsQ2xhc3MpXG5cbiAgICBpZiAoZXhpc3RpbmcpIHJldHVybiAvKiogQHR5cGUge01DfSAqLyAoZXhpc3RpbmcpXG5cbiAgICBjb25zdCBkYXRhYmFzZUlkZW50aXR5ID0gdGhpcy5kYXRhYmFzZUlkZW50aXR5KClcbiAgICBjb25zdCBtZXRhZGF0YUtleSA9IGAke2RhdGFiYXNlSWRlbnRpdHkubGVuZ3RofToke2RhdGFiYXNlSWRlbnRpdHl9OiR7dGhpcy5fc2NoZW1hR2VuZXJhdGlvbn1gXG4gICAgY29uc3QgbWV0YWRhdGFQcm9wZXJ0aWVzID0gY2Fub25pY2FsTW9kZWxDbGFzcy5yZWNvcmRNZXRhZGF0YVByb3BlcnR5TmFtZXMoKVxuICAgIGNvbnN0IGJvdW5kTW9kZWxDbGFzcyA9IG5ldyBQcm94eShjYW5vbmljYWxNb2RlbENsYXNzLCB7XG4gICAgICBjb25zdHJ1Y3Q6ICh0YXJnZXQsIGFyZ3MsIG5ld1RhcmdldCkgPT4gUmVmbGVjdC5jb25zdHJ1Y3QodGFyZ2V0LCBhcmdzLCBuZXdUYXJnZXQpLFxuICAgICAgZ2V0OiAodGFyZ2V0LCBwcm9wZXJ0eSwgcmVjZWl2ZXIpID0+IHtcbiAgICAgICAgaWYgKHByb3BlcnR5ID09PSBcIl9yZWNvcmRNZXRhZGF0YU1vZGVsQ2xhc3NcIikgcmV0dXJuIHRhcmdldFxuICAgICAgICBpZiAocHJvcGVydHkgPT09IFwiX3JlY29yZE1ldGFkYXRhQmluZGVyXCIpIHJldHVybiAoLyoqIEB0eXBlIHt0eXBlb2YgaW1wb3J0KFwiLi9yZWNvcmQvaW5kZXguanNcIikuZGVmYXVsdH0gKi8gdGFyZ2V0TW9kZWxDbGFzcykgPT4gdGhpcy5tb2RlbENsYXNzKHRhcmdldE1vZGVsQ2xhc3MpXG4gICAgICAgIGlmIChwcm9wZXJ0eSA9PT0gXCJfcmVjb3JkTWV0YWRhdGFPcGVyYXRpb25cIikgcmV0dXJuIHRoaXNcbiAgICAgICAgaWYgKHR5cGVvZiBwcm9wZXJ0eSA9PT0gXCJzdHJpbmdcIiAmJiBtZXRhZGF0YVByb3BlcnRpZXMuaGFzKHByb3BlcnR5KSkgcmV0dXJuIHRhcmdldC5yZWNvcmRNZXRhZGF0YVZhbHVlKG1ldGFkYXRhS2V5LCBwcm9wZXJ0eSlcblxuICAgICAgICByZXR1cm4gUmVmbGVjdC5nZXQodGFyZ2V0LCBwcm9wZXJ0eSwgcmVjZWl2ZXIpXG4gICAgICB9LFxuICAgICAgc2V0OiAodGFyZ2V0LCBwcm9wZXJ0eSwgdmFsdWUsIHJlY2VpdmVyKSA9PiB7XG4gICAgICAgIGlmICh0eXBlb2YgcHJvcGVydHkgPT09IFwic3RyaW5nXCIgJiYgbWV0YWRhdGFQcm9wZXJ0aWVzLmhhcyhwcm9wZXJ0eSkpIHtcbiAgICAgICAgICB0YXJnZXQuc2V0UmVjb3JkTWV0YWRhdGFWYWx1ZShtZXRhZGF0YUtleSwgcHJvcGVydHksIHZhbHVlKVxuICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gUmVmbGVjdC5zZXQodGFyZ2V0LCBwcm9wZXJ0eSwgdmFsdWUsIHJlY2VpdmVyKVxuICAgICAgfVxuICAgIH0pXG5cbiAgICB0aGlzLl9ib3VuZE1vZGVsQ2xhc3Nlcy5zZXQoY2Fub25pY2FsTW9kZWxDbGFzcywgYm91bmRNb2RlbENsYXNzKVxuXG4gICAgcmV0dXJuIC8qKiBAdHlwZSB7TUN9ICovIChib3VuZE1vZGVsQ2xhc3MpXG4gIH1cblxuICAvKipcbiAgICogVmVyaWZpZXMgdGhhdCBhIG1vZGVsIGJlbG9uZ3MgdG8gdGhpcyBvcGVyYXRpb24ncyBjb25maWd1cmF0aW9uIGFuZCBkYXRhYmFzZS5cbiAgICogQHBhcmFtIHt0eXBlb2YgaW1wb3J0KFwiLi9yZWNvcmQvaW5kZXguanNcIikuZGVmYXVsdH0gTW9kZWxDbGFzcyAtIE1vZGVsIGNsYXNzIHRvIHZlcmlmeS5cbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICBhc3NlcnRNb2RlbChNb2RlbENsYXNzKSB7XG4gICAgaWYgKE1vZGVsQ2xhc3MuX2dldENvbmZpZ3VyYXRpb24oKSAhPT0gdGhpcy5fY29uZmlndXJhdGlvbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGAke01vZGVsQ2xhc3MuZ2V0TW9kZWxOYW1lKCl9IGJlbG9uZ3MgdG8gYW5vdGhlciBWZWxvY2lvdXMgY29uZmlndXJhdGlvbmApXG4gICAgfVxuXG4gICAgY29uc3QgbW9kZWxEYXRhYmFzZUlkZW50aWZpZXIgPSBNb2RlbENsYXNzLmdldERhdGFiYXNlSWRlbnRpZmllcih7dGVuYW50OiB0aGlzLl90ZW5hbnR9KVxuXG4gICAgaWYgKG1vZGVsRGF0YWJhc2VJZGVudGlmaWVyICE9PSB0aGlzLl9kYXRhYmFzZUlkZW50aWZpZXIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgJHtNb2RlbENsYXNzLmdldE1vZGVsTmFtZSgpfSB1c2VzIGRhdGFiYXNlICR7SlNPTi5zdHJpbmdpZnkobW9kZWxEYXRhYmFzZUlkZW50aWZpZXIpfSwgbm90IG9wZXJhdGlvbiBkYXRhYmFzZSAke0pTT04uc3RyaW5naWZ5KHRoaXMuX2RhdGFiYXNlSWRlbnRpZmllcil9YClcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQmluZHMgYSBsb2FkZWQgb3IgYnVpbHQgcmVjb3JkIHRvIHRoaXMgb3BlcmF0aW9uLlxuICAgKiBAdGVtcGxhdGUge2ltcG9ydChcIi4vcmVjb3JkL2luZGV4LmpzXCIpLmRlZmF1bHR9IE1vZGVsXG4gICAqIEBwYXJhbSB7TW9kZWx9IHJlY29yZCAtIFJlY29yZCB0byBiaW5kLlxuICAgKiBAcmV0dXJucyB7TW9kZWx9IC0gQm91bmQgcmVjb3JkLlxuICAgKi9cbiAgYmluZFJlY29yZChyZWNvcmQpIHtcbiAgICB0aGlzLmFzc2VydEFjdGl2ZSgpXG4gICAgdGhpcy5hc3NlcnRNb2RlbChyZWNvcmQuZ2V0TW9kZWxDbGFzcygpKVxuICAgIHJlY29yZC5iaW5kRGF0YWJhc2VPcGVyYXRpb24odGhpcylcblxuICAgIHJldHVybiByZWNvcmRcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWdpc3RlcnMgYSBjYWxsYmFjayBvd25lZCBieSB0aGUgY3VycmVudCBvcGVyYXRpb24gdHJhbnNhY3Rpb24gZnJhbWUuXG4gICAqIEBwYXJhbSB7KCkgPT4gdm9pZCB8IFByb21pc2U8dm9pZD59IGNhbGxiYWNrIC0gQ2FsbGJhY2suXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fSAtIFJlc29sdmVzIGFmdGVyIHJlZ2lzdHJhdGlvbiBvciBleGVjdXRpb24uXG4gICAqL1xuICBhc3luYyBhZnRlckNvbW1pdChjYWxsYmFjaykge1xuICAgIHRoaXMuYXNzZXJ0QWN0aXZlKClcbiAgICBhd2FpdCB0aGlzLmNvbm5lY3Rpb24oKS5hZnRlckNvbW1pdChjYWxsYmFjaylcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWdpc3RlcnMgYSBndWFyZCBvd25lZCBieSB0aGUgY3VycmVudCB0cmFuc2FjdGlvbi9zYXZlcG9pbnQgZnJhbWUuXG4gICAqIEBwYXJhbSB7KGNvbnRleHQ6IHtvcGVyYXRpb246IFZlbG9jaW91c0RhdGFiYXNlT3BlcmF0aW9ufSkgPT4gdm9pZCB8IFByb21pc2U8dm9pZD59IGNhbGxiYWNrIC0gR3VhcmQgY2FsbGJhY2suXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fSAtIFJlc29sdmVzIGFmdGVyIHJlZ2lzdHJhdGlvbi5cbiAgICovXG4gIGFzeW5jIGJlZm9yZUNvbW1pdChjYWxsYmFjaykge1xuICAgIHRoaXMuYXNzZXJ0QWN0aXZlKClcbiAgICBhd2FpdCB0aGlzLmNvbm5lY3Rpb24oKS5iZWZvcmVDb21taXQoKCkgPT4gY2FsbGJhY2soe29wZXJhdGlvbjogdGhpc30pKVxuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgYSBuZXN0ZWQgb3BlcmF0aW9uIHRyYW5zYWN0aW9uL3NhdmVwb2ludC5cbiAgICogQHRlbXBsYXRlIFRcbiAgICogQHBhcmFtIHsoKSA9PiBQcm9taXNlPFQ+fSBjYWxsYmFjayAtIENhbGxiYWNrLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxUPn0gLSBDYWxsYmFjayByZXN1bHQuXG4gICAqL1xuICBhc3luYyB0cmFuc2FjdGlvbihjYWxsYmFjaykge1xuICAgIHRoaXMuYXNzZXJ0QWN0aXZlKClcblxuICAgIHJldHVybiBhd2FpdCB0aGlzLmNvbm5lY3Rpb24oKS50cmFuc2FjdGlvbihjYWxsYmFjaylcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBkZWxpYmVyYXRlbHkgZXhwb3NlZCBvcGVyYXRpb24gY29ubmVjdGlvbiBmYWNhZGUgZm9yIHJhdyBTUUwuXG4gICAqIEByZXR1cm5zIHtpbXBvcnQoXCIuL2RyaXZlcnMvYmFzZS5qc1wiKS5kZWZhdWx0fSAtIE9wZXJhdGlvbi1ib3VuZCBjb25uZWN0aW9uLlxuICAgKi9cbiAgY29ubmVjdGlvbigpIHtcbiAgICB0aGlzLmFzc2VydEFjdGl2ZSgpXG5cbiAgICAvKipcbiAgICAgKiBOYXJyb3dzIHRoZSBQcm94eSBmYWNhZGUgdG8gdGhlIGNvbXBsZXRlIGRyaXZlciBzdXJmYWNlIHRoYXQgaXQgZm9yd2FyZHMuXG4gICAgICogQHR5cGUge2ltcG9ydChcIi4vZHJpdmVycy9iYXNlLmpzXCIpLmRlZmF1bHR9XG4gICAgICovXG4gICAgY29uc3QgY29ubmVjdGlvbkZhY2FkZSA9IC8qKiBAdHlwZSB7UmV0dXJuVHlwZTx0eXBlb2YgSlNPTi5wYXJzZT59ICovICh0aGlzLl9jb25uZWN0aW9uKVxuXG4gICAgcmV0dXJuIGNvbm5lY3Rpb25GYWNhZGVcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSB0ZW5hbnQgZGVzY3JpcHRvciBjYXB0dXJlZCBieSB0aGUgaW1tdXRhYmxlIGhhbmRsZS5cbiAgICogQHJldHVybnMge1JlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkfSAtIENhcHR1cmVkIHRlbmFudCBkZXNjcmlwdG9yLlxuICAgKi9cbiAgdGVuYW50KCkge1xuICAgIHJldHVybiAvKiogQHR5cGUge1JlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkfSAqLyAodGhpcy5fdGVuYW50KVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGxvZ2ljYWwgZGF0YWJhc2UgaWRlbnRpZmllciBvd25lZCBieSB0aGlzIG9wZXJhdGlvbi5cbiAgICogQHJldHVybnMge3N0cmluZ30gLSBEYXRhYmFzZSBpZGVudGlmaWVyLlxuICAgKi9cbiAgZGF0YWJhc2VJZGVudGlmaWVyKCkge1xuICAgIHJldHVybiB0aGlzLl9kYXRhYmFzZUlkZW50aWZpZXJcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgc3RhYmxlIHBoeXNpY2FsLWRhdGFiYXNlIGlkZW50aXR5IHN1aXRhYmxlIGZvciBvcGVyYXRpb24tYXdhcmUgY2FjaGVzLlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSAtIFBoeXNpY2FsIGRhdGFiYXNlIGlkZW50aXR5LlxuICAgKi9cbiAgZGF0YWJhc2VJZGVudGl0eSgpIHtcbiAgICByZXR1cm4gYCR7dGhpcy5fZGF0YWJhc2VJZGVudGlmaWVyfToke3RoaXMuX2NvbmZpZ3VyYXRpb25SZXVzZUtleX1gXG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhbGl6ZXMgYSBtb2RlbCB0aHJvdWdoIHRoaXMgb3BlcmF0aW9uJ3MgY2FwdHVyZWQgY29ubmVjdGlvbi5cbiAgICogQHBhcmFtIHt0eXBlb2YgaW1wb3J0KFwiLi9yZWNvcmQvaW5kZXguanNcIikuZGVmYXVsdH0gTW9kZWxDbGFzcyAtIE1vZGVsIGNsYXNzLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn0gLSBSZXNvbHZlcyB3aGVuIGluaXRpYWxpemVkLlxuICAgKi9cbiAgYXN5bmMgZW5zdXJlTW9kZWxJbml0aWFsaXplZChNb2RlbENsYXNzKSB7XG4gICAgdGhpcy5hc3NlcnRBY3RpdmUoKVxuXG4gICAgY29uc3QgYm91bmRNb2RlbENsYXNzID0gdGhpcy5tb2RlbENsYXNzKE1vZGVsQ2xhc3MpXG5cbiAgICBpZiAoYm91bmRNb2RlbENsYXNzLmlzSW5pdGlhbGl6ZWQoKSkgdGhpcy5hc3NlcnRNb2RlbChNb2RlbENsYXNzKVxuXG4gICAgYXdhaXQgYm91bmRNb2RlbENsYXNzLmVuc3VyZUluaXRpYWxpemVkKHtcbiAgICAgIGNvbmZpZ3VyYXRpb246IHRoaXMuX2NvbmZpZ3VyYXRpb24sXG4gICAgICBjb25uZWN0aW9uOiB0aGlzLmNvbm5lY3Rpb24oKVxuICAgIH0pXG4gICAgdGhpcy5hc3NlcnRNb2RlbChNb2RlbENsYXNzKVxuICB9XG5cbiAgLyoqXG4gICAqIFJhaXNlcyB3aGVuIGFuIG9wZXJhdGlvbiBoYW5kbGUgaGFzIGxlZnQgaXRzIGNhbGxiYWNrLlxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIGFzc2VydEFjdGl2ZSgpIHtcbiAgICBpZiAoIXRoaXMuX2FjdGl2ZSkgdGhyb3cgbmV3IEVycm9yKFwiRGF0YWJhc2Ugb3BlcmF0aW9uIGhhcyBjb21wbGV0ZWRcIilcblxuICAgIGNvbnN0IHBvb2wgPSB0aGlzXG4gICAgICAuX2NvbmZpZ3VyYXRpb25cbiAgICAgIC5nZXREYXRhYmFzZVBvb2wodGhpcy5fZGF0YWJhc2VJZGVudGlmaWVyKVxuICAgIGNvbnN0IGNhcHR1cmVkUmV1c2VLZXkgPSBwb29sLmdldENvbmZpZ3VyYXRpb25SZXVzZUtleSh0aGlzLl9kYXRhYmFzZUNvbmZpZ3VyYXRpb24pXG4gICAgY29uc3QgY29ubmVjdGlvblJldXNlS2V5ID0gcG9vbC5nZXRDb25uZWN0aW9uQ29uZmlndXJhdGlvblJldXNlS2V5KHRoaXMuX3BoeXNpY2FsQ29ubmVjdGlvbilcblxuICAgIGlmIChjYXB0dXJlZFJldXNlS2V5ICE9PSB0aGlzLl9jb25maWd1cmF0aW9uUmV1c2VLZXkgfHwgY29ubmVjdGlvblJldXNlS2V5ICE9PSB0aGlzLl9jb25maWd1cmF0aW9uUmV1c2VLZXkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRGF0YWJhc2Ugb3BlcmF0aW9uIGZvciAke0pTT04uc3RyaW5naWZ5KHRoaXMuX2RhdGFiYXNlSWRlbnRpZmllcil9IGJlbG9uZ3MgdG8gYSBkaWZmZXJlbnQgcGh5c2ljYWwgZGF0YWJhc2UgdGhhbiBpdHMgY2FwdHVyZWQgdGVuYW50IGhhbmRsZWApXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2VuZm9yY2VDdXJyZW50VGVuYW50UmV1c2VLZXkgJiYgcG9vbC5nZXRDb25maWd1cmF0aW9uUmV1c2VLZXkoKSAhPT0gdGhpcy5fY29uZmlndXJhdGlvblJldXNlS2V5KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYERhdGFiYXNlIG9wZXJhdGlvbiBmb3IgJHtKU09OLnN0cmluZ2lmeSh0aGlzLl9kYXRhYmFzZUlkZW50aWZpZXIpfSBiZWxvbmdzIHRvIGEgZGlmZmVyZW50IHBoeXNpY2FsIGRhdGFiYXNlIHRoYW4gdGhlIGN1cnJlbnQgdGVuYW50IGNvbnRleHRgKVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBFeHBpcmVzIHRoZSBvcGVyYXRpb24gYW5kIGFsbCBzY29wZXMvcmVjb3JkcyBib3VuZCB0byBpdC5cbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICBjb21wbGV0ZSgpIHtcbiAgICB0aGlzLl9hY3RpdmUgPSBmYWxzZVxuICB9XG59XG4iXX0=
|
|
234
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3BlcmF0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2RhdGFiYXNlL29wZXJhdGlvbi5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZO0FBRVosT0FBTyxtQkFBbUIsTUFBTSwyQkFBMkIsQ0FBQTtBQUUzRDs7O0dBR0c7QUFDSCxNQUFNLENBQUMsT0FBTyxPQUFPLDBCQUEwQjtJQUM3Qzs7Ozs7Ozs7Ozs7O09BWUc7SUFDSCxZQUFZLEVBQUMsYUFBYSxFQUFFLHFCQUFxQixFQUFFLHFCQUFxQixFQUFFLFVBQVUsRUFBRSxrQkFBa0IsRUFBRSw0QkFBNEIsR0FBRyxJQUFJLEVBQUUsS0FBSyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sRUFBQztRQUM3SyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQTtRQUNuQixJQUFJLENBQUMsY0FBYyxHQUFHLGFBQWEsQ0FBQTtRQUNuQyxJQUFJLENBQUMsc0JBQXNCLEdBQUcscUJBQXFCLElBQUksYUFBYSxDQUFDLDRCQUE0QixDQUFDLGtCQUFrQixFQUFFLE1BQU0sQ0FBQyxDQUFBO1FBQzdILElBQUksQ0FBQyxzQkFBc0IsR0FBRyxxQkFBcUIsQ0FBQTtRQUNuRCxJQUFJLENBQUMsbUJBQW1CLEdBQUcsa0JBQWtCLENBQUE7UUFDN0MsSUFBSSxDQUFDLDZCQUE2QixHQUFHLDRCQUE0QixDQUFBO1FBQ2pFLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxVQUFVLENBQUE7UUFDckMsSUFBSSxDQUFDLGlCQUFpQixHQUFHLGdCQUFnQixDQUFBO1FBQ3pDLElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFBO1FBQ3JCLDhHQUE4RztRQUM5RyxJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQTtRQUN2QyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksbUJBQW1CLENBQUM7WUFDekMsVUFBVTtZQUNWLFNBQVMsRUFBRSxJQUFJO1lBQ2YsS0FBSztT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SUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7WUFDMUcsTUFBTSxJQUFJLEtBQUssQ0FBQywwQkFBMEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsMkVBQTJFLENBQUMsQ0FBQTtRQUNoSyxDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7T0FHRztJQUNILFFBQVE7UUFDTixJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQTtJQUN0QixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcblxuaW1wb3J0IE9wZXJhdGlvbkNvbm5lY3Rpb24gZnJvbSBcIi4vb3BlcmF0aW9uLWNvbm5lY3Rpb24uanNcIlxuXG4vKipcbiAqIEV4cGxpY2l0IG93bmVyIGZvciBtb2RlbCB3b3JrIHBlcmZvcm1lZCBvbiBvbmUgcGlubmVkIHRyYW5zYWN0aW9uYWxcbiAqIGNvbm5lY3Rpb24uXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFZlbG9jaW91c0RhdGFiYXNlT3BlcmF0aW9uIHtcbiAgLyoqXG4gICAqIFJ1bnMgY29uc3RydWN0b3IuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gT3BlcmF0aW9uIG93bmVyc2hpcC5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuLi9jb25maWd1cmF0aW9uLmpzXCIpLmRlZmF1bHR9IGFyZ3MuY29uZmlndXJhdGlvbiAtIE93bmluZyBjb25maWd1cmF0aW9uLlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFthcmdzLmVuZm9yY2VDdXJyZW50VGVuYW50UmV1c2VLZXldIC0gV2hldGhlciBhbWJpZW50IHRlbmFudCBjaGFuZ2VzIGludmFsaWRhdGUgdGhpcyBsZWdhY3kgb3BlcmF0aW9uLlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4uL2NvbmZpZ3VyYXRpb24tdHlwZXMuanNcIikuRGF0YWJhc2VDb25maWd1cmF0aW9uVHlwZX0gW2FyZ3MuZGF0YWJhc2VDb25maWd1cmF0aW9uXSAtIENhcHR1cmVkIHJlc29sdmVkIHBoeXNpY2FsIGRhdGFiYXNlIGNvbmZpZ3VyYXRpb24uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhcmdzLmNvbmZpZ3VyYXRpb25SZXVzZUtleSAtIFBoeXNpY2FsIGRhdGFiYXNlIGNvbmZpZ3VyYXRpb24ga2V5IGNhcHR1cmVkIGF0IGNoZWNrb3V0LlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4vZHJpdmVycy9iYXNlLmpzXCIpLmRlZmF1bHR9IGFyZ3MuY29ubmVjdGlvbiAtIFBpbm5lZCBwaHlzaWNhbCBjb25uZWN0aW9uLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gYXJncy5kYXRhYmFzZUlkZW50aWZpZXIgLSBTaW5ndWxhciBkYXRhYmFzZSBpZGVudGlmaWVyLlxuICAgKiBAcGFyYW0ge3N5bWJvbH0gYXJncy5vd25lciAtIE9wYXF1ZSBwb29sIGxlYXNlIG93bmVyLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2FyZ3Muc2NoZW1hR2VuZXJhdGlvbl0gLSBUZW5hbnQgc2NoZW1hIGdlbmVyYXRpb24gb3duaW5nIHJlY29yZCBtZXRhZGF0YS5cbiAgICogQHBhcmFtIHtvYmplY3QgfCB1bmRlZmluZWR9IGFyZ3MudGVuYW50IC0gVGVuYW50IGRlc2NyaXB0b3IgY2FwdHVyZWQgYnkgdGhlIG93bmluZyBoYW5kbGUuXG4gICAqL1xuICBjb25zdHJ1Y3Rvcih7Y29uZmlndXJhdGlvbiwgZGF0YWJhc2VDb25maWd1cmF0aW9uLCBjb25maWd1cmF0aW9uUmV1c2VLZXksIGNvbm5lY3Rpb24sIGRhdGFiYXNlSWRlbnRpZmllciwgZW5mb3JjZUN1cnJlbnRUZW5hbnRSZXVzZUtleSA9IHRydWUsIG93bmVyLCBzY2hlbWFHZW5lcmF0aW9uLCB0ZW5hbnR9KSB7XG4gICAgdGhpcy5fYWN0aXZlID0gdHJ1ZVxuICAgIHRoaXMuX2NvbmZpZ3VyYXRpb24gPSBjb25maWd1cmF0aW9uXG4gICAgdGhpcy5fZGF0YWJhc2VDb25maWd1cmF0aW9uID0gZGF0YWJhc2VDb25maWd1cmF0aW9uIHx8IGNvbmZpZ3VyYXRpb24ucmVzb2x2ZURhdGFiYXNlQ29uZmlndXJhdGlvbihkYXRhYmFzZUlkZW50aWZpZXIsIHRlbmFudClcbiAgICB0aGlzLl9jb25maWd1cmF0aW9uUmV1c2VLZXkgPSBjb25maWd1cmF0aW9uUmV1c2VLZXlcbiAgICB0aGlzLl9kYXRhYmFzZUlkZW50aWZpZXIgPSBkYXRhYmFzZUlkZW50aWZpZXJcbiAgICB0aGlzLl9lbmZvcmNlQ3VycmVudFRlbmFudFJldXNlS2V5ID0gZW5mb3JjZUN1cnJlbnRUZW5hbnRSZXVzZUtleVxuICAgIHRoaXMuX3BoeXNpY2FsQ29ubmVjdGlvbiA9IGNvbm5lY3Rpb25cbiAgICB0aGlzLl9zY2hlbWFHZW5lcmF0aW9uID0gc2NoZW1hR2VuZXJhdGlvblxuICAgIHRoaXMuX3RlbmFudCA9IHRlbmFudFxuICAgIC8qKiBAdHlwZSB7V2Vha01hcDx0eXBlb2YgaW1wb3J0KFwiLi9yZWNvcmQvaW5kZXguanNcIikuZGVmYXVsdCwgdHlwZW9mIGltcG9ydChcIi4vcmVjb3JkL2luZGV4LmpzXCIpLmRlZmF1bHQ+fSAqL1xuICAgIHRoaXMuX2JvdW5kTW9kZWxDbGFzc2VzID0gbmV3IFdlYWtNYXAoKVxuICAgIHRoaXMuX2Nvbm5lY3Rpb24gPSBuZXcgT3BlcmF0aW9uQ29ubmVjdGlvbih7XG4gICAgICBjb25uZWN0aW9uLFxuICAgICAgb3BlcmF0aW9uOiB0aGlzLFxuICAgICAgb3duZXJcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYW4gb3BlcmF0aW9uLWJvdW5kIG1vZGVsIHF1ZXJ5L2NyZWF0ZSBzY29wZS5cbiAgICogQHRlbXBsYXRlIHt0eXBlb2YgaW1wb3J0KFwiLi9yZWNvcmQvaW5kZXguanNcIikuZGVmYXVsdH0gTUNcbiAgICogQHBhcmFtIHtNQ30gTW9kZWxDbGFzcyAtIE1vZGVsIGNsYXNzIHRvIGJpbmQuXG4gICAqIEByZXR1cm5zIHtpbXBvcnQoXCIuL3F1ZXJ5L21vZGVsLWNsYXNzLXF1ZXJ5LmpzXCIpLmRlZmF1bHQ8TUM+fSAtIE9wZXJhdGlvbi1ib3VuZCBzY29wZS5cbiAgICovXG4gIGZvck1vZGVsKE1vZGVsQ2xhc3MpIHtcbiAgICB0aGlzLmFzc2VydEFjdGl2ZSgpXG4gICAgdGhpcy5hc3NlcnRNb2RlbChNb2RlbENsYXNzKVxuXG4gICAgcmV0dXJuIHRoaXMubW9kZWxDbGFzcyhNb2RlbENsYXNzKS5fbmV3UXVlcnkoe1xuICAgICAgZHJpdmVyOiB0aGlzLmNvbm5lY3Rpb24oKSxcbiAgICAgIG9wZXJhdGlvbjogdGhpc1xuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIG1vZGVsLWNsYXNzIHZpZXcgd2hvc2Ugc2NoZW1hIG1ldGFkYXRhIGlzIGJvdW5kIHRvIHRoaXMgcGh5c2ljYWxcbiAgICogZGF0YWJhc2UgZ2VuZXJhdGlvbi4gQ29uc3RydWN0aW9uIHN0aWxsIHByb2R1Y2VzIHRoZSBhcHBsaWNhdGlvbidzIG9yaWdpbmFsXG4gICAqIG1vZGVsIGNsYXNzLCBzbyBsaWZlY3ljbGUgY2FsbGJhY2tzIGFuZCBtb2RlbCByZWdpc3RyaWVzIHJldGFpbiBjbGFzcyBpZGVudGl0eS5cbiAgICogQHRlbXBsYXRlIHt0eXBlb2YgaW1wb3J0KFwiLi9yZWNvcmQvaW5kZXguanNcIikuZGVmYXVsdH0gTUNcbiAgICogQHBhcmFtIHtNQ30gTW9kZWxDbGFzcyAtIENhbm9uaWNhbCBtb2RlbCBjbGFzcy5cbiAgICogQHJldHVybnMge01DfSAtIE9wZXJhdGlvbi1ib3VuZCBtb2RlbCBjbGFzcy5cbiAgICovXG4gIG1vZGVsQ2xhc3MoTW9kZWxDbGFzcykge1xuICAgIGlmICghdGhpcy5fc2NoZW1hR2VuZXJhdGlvbikgcmV0dXJuIE1vZGVsQ2xhc3NcblxuICAgIGNvbnN0IGNhbm9uaWNhbE1vZGVsQ2xhc3MgPSAvKiogQHR5cGUge01DfSAqLyAoTW9kZWxDbGFzcy5fcmVjb3JkTWV0YWRhdGFNb2RlbENsYXNzIHx8IE1vZGVsQ2xhc3MpXG5cbiAgICBjb25zdCBleGlzdGluZyA9IHRoaXMuX2JvdW5kTW9kZWxDbGFzc2VzLmdldChjYW5vbmljYWxNb2RlbENsYXNzKVxuXG4gICAgaWYgKGV4aXN0aW5nKSByZXR1cm4gLyoqIEB0eXBlIHtNQ30gKi8gKGV4aXN0aW5nKVxuXG4gICAgY29uc3QgZGF0YWJhc2VJZGVudGl0eSA9IHRoaXMuZGF0YWJhc2VJZGVudGl0eSgpXG4gICAgY29uc3QgbWV0YWRhdGFLZXkgPSBgJHtkYXRhYmFzZUlkZW50aXR5Lmxlbmd0aH06JHtkYXRhYmFzZUlkZW50aXR5fToke3RoaXMuX3NjaGVtYUdlbmVyYXRpb259YFxuICAgIGNvbnN0IG1ldGFkYXRhUHJvcGVydGllcyA9IGNhbm9uaWNhbE1vZGVsQ2xhc3MucmVjb3JkTWV0YWRhdGFQcm9wZXJ0eU5hbWVzKClcbiAgICBjb25zdCBib3VuZE1vZGVsQ2xhc3MgPSBuZXcgUHJveHkoY2Fub25pY2FsTW9kZWxDbGFzcywge1xuICAgICAgY29uc3RydWN0OiAodGFyZ2V0LCBhcmdzLCBuZXdUYXJnZXQpID0+IFJlZmxlY3QuY29uc3RydWN0KHRhcmdldCwgYXJncywgbmV3VGFyZ2V0KSxcbiAgICAgIGdldDogKHRhcmdldCwgcHJvcGVydHksIHJlY2VpdmVyKSA9PiB7XG4gICAgICAgIGlmIChwcm9wZXJ0eSA9PT0gXCJfcmVjb3JkTWV0YWRhdGFNb2RlbENsYXNzXCIpIHJldHVybiB0YXJnZXRcbiAgICAgICAgaWYgKHByb3BlcnR5ID09PSBcIl9yZWNvcmRNZXRhZGF0YUJpbmRlclwiKSByZXR1cm4gKC8qKiBAdHlwZSB7dHlwZW9mIGltcG9ydChcIi4vcmVjb3JkL2luZGV4LmpzXCIpLmRlZmF1bHR9ICovIHRhcmdldE1vZGVsQ2xhc3MpID0+IHRoaXMubW9kZWxDbGFzcyh0YXJnZXRNb2RlbENsYXNzKVxuICAgICAgICBpZiAocHJvcGVydHkgPT09IFwiX3JlY29yZE1ldGFkYXRhT3BlcmF0aW9uXCIpIHJldHVybiB0aGlzXG4gICAgICAgIGlmICh0eXBlb2YgcHJvcGVydHkgPT09IFwic3RyaW5nXCIgJiYgbWV0YWRhdGFQcm9wZXJ0aWVzLmhhcyhwcm9wZXJ0eSkpIHJldHVybiB0YXJnZXQucmVjb3JkTWV0YWRhdGFWYWx1ZShtZXRhZGF0YUtleSwgcHJvcGVydHkpXG5cbiAgICAgICAgcmV0dXJuIFJlZmxlY3QuZ2V0KHRhcmdldCwgcHJvcGVydHksIHJlY2VpdmVyKVxuICAgICAgfSxcbiAgICAgIHNldDogKHRhcmdldCwgcHJvcGVydHksIHZhbHVlLCByZWNlaXZlcikgPT4ge1xuICAgICAgICBpZiAodHlwZW9mIHByb3BlcnR5ID09PSBcInN0cmluZ1wiICYmIG1ldGFkYXRhUHJvcGVydGllcy5oYXMocHJvcGVydHkpKSB7XG4gICAgICAgICAgdGFyZ2V0LnNldFJlY29yZE1ldGFkYXRhVmFsdWUobWV0YWRhdGFLZXksIHByb3BlcnR5LCB2YWx1ZSlcbiAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFJlZmxlY3Quc2V0KHRhcmdldCwgcHJvcGVydHksIHZhbHVlLCByZWNlaXZlcilcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgdGhpcy5fYm91bmRNb2RlbENsYXNzZXMuc2V0KGNhbm9uaWNhbE1vZGVsQ2xhc3MsIGJvdW5kTW9kZWxDbGFzcylcblxuICAgIHJldHVybiAvKiogQHR5cGUge01DfSAqLyAoYm91bmRNb2RlbENsYXNzKVxuICB9XG5cbiAgLyoqXG4gICAqIFZlcmlmaWVzIHRoYXQgYSBtb2RlbCBiZWxvbmdzIHRvIHRoaXMgb3BlcmF0aW9uJ3MgY29uZmlndXJhdGlvbiBhbmQgZGF0YWJhc2UuXG4gICAqIEBwYXJhbSB7dHlwZW9mIGltcG9ydChcIi4vcmVjb3JkL2luZGV4LmpzXCIpLmRlZmF1bHR9IE1vZGVsQ2xhc3MgLSBNb2RlbCBjbGFzcyB0byB2ZXJpZnkuXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgYXNzZXJ0TW9kZWwoTW9kZWxDbGFzcykge1xuICAgIGlmIChNb2RlbENsYXNzLl9nZXRDb25maWd1cmF0aW9uKCkgIT09IHRoaXMuX2NvbmZpZ3VyYXRpb24pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgJHtNb2RlbENsYXNzLmdldE1vZGVsTmFtZSgpfSBiZWxvbmdzIHRvIGFub3RoZXIgVmVsb2Npb3VzIGNvbmZpZ3VyYXRpb25gKVxuICAgIH1cblxuICAgIGNvbnN0IG1vZGVsRGF0YWJhc2VJZGVudGlmaWVyID0gTW9kZWxDbGFzcy5nZXREYXRhYmFzZUlkZW50aWZpZXIoe3RlbmFudDogdGhpcy5fdGVuYW50fSlcblxuICAgIGlmIChtb2RlbERhdGFiYXNlSWRlbnRpZmllciAhPT0gdGhpcy5fZGF0YWJhc2VJZGVudGlmaWVyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7TW9kZWxDbGFzcy5nZXRNb2RlbE5hbWUoKX0gdXNlcyBkYXRhYmFzZSAke0pTT04uc3RyaW5naWZ5KG1vZGVsRGF0YWJhc2VJZGVudGlmaWVyKX0sIG5vdCBvcGVyYXRpb24gZGF0YWJhc2UgJHtKU09OLnN0cmluZ2lmeSh0aGlzLl9kYXRhYmFzZUlkZW50aWZpZXIpfWApXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEJpbmRzIGEgbG9hZGVkIG9yIGJ1aWx0IHJlY29yZCB0byB0aGlzIG9wZXJhdGlvbi5cbiAgICogQHRlbXBsYXRlIHtpbXBvcnQoXCIuL3JlY29yZC9pbmRleC5qc1wiKS5kZWZhdWx0fSBNb2RlbFxuICAgKiBAcGFyYW0ge01vZGVsfSByZWNvcmQgLSBSZWNvcmQgdG8gYmluZC5cbiAgICogQHJldHVybnMge01vZGVsfSAtIEJvdW5kIHJlY29yZC5cbiAgICovXG4gIGJpbmRSZWNvcmQocmVjb3JkKSB7XG4gICAgdGhpcy5hc3NlcnRBY3RpdmUoKVxuICAgIHRoaXMuYXNzZXJ0TW9kZWwocmVjb3JkLmdldE1vZGVsQ2xhc3MoKSlcbiAgICByZWNvcmQuYmluZERhdGFiYXNlT3BlcmF0aW9uKHRoaXMpXG4gICAgcmVjb3JkLmNhcHR1cmVEYXRhYmFzZUlkZW50aXR5KHRoaXMuZGF0YWJhc2VJZGVudGl0eSgpKVxuXG4gICAgcmV0dXJuIHJlY29yZFxuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVycyBhIGNhbGxiYWNrIG93bmVkIGJ5IHRoZSBjdXJyZW50IG9wZXJhdGlvbiB0cmFuc2FjdGlvbiBmcmFtZS5cbiAgICogQHBhcmFtIHsoKSA9PiB2b2lkIHwgUHJvbWlzZTx2b2lkPn0gY2FsbGJhY2sgLSBDYWxsYmFjay5cbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59IC0gUmVzb2x2ZXMgYWZ0ZXIgcmVnaXN0cmF0aW9uIG9yIGV4ZWN1dGlvbi5cbiAgICovXG4gIGFzeW5jIGFmdGVyQ29tbWl0KGNhbGxiYWNrKSB7XG4gICAgdGhpcy5hc3NlcnRBY3RpdmUoKVxuICAgIGF3YWl0IHRoaXMuY29ubmVjdGlvbigpLmFmdGVyQ29tbWl0KGNhbGxiYWNrKVxuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVycyBhIGd1YXJkIG93bmVkIGJ5IHRoZSBjdXJyZW50IHRyYW5zYWN0aW9uL3NhdmVwb2ludCBmcmFtZS5cbiAgICogQHBhcmFtIHsoY29udGV4dDoge29wZXJhdGlvbjogVmVsb2Npb3VzRGF0YWJhc2VPcGVyYXRpb259KSA9PiB2b2lkIHwgUHJvbWlzZTx2b2lkPn0gY2FsbGJhY2sgLSBHdWFyZCBjYWxsYmFjay5cbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59IC0gUmVzb2x2ZXMgYWZ0ZXIgcmVnaXN0cmF0aW9uLlxuICAgKi9cbiAgYXN5bmMgYmVmb3JlQ29tbWl0KGNhbGxiYWNrKSB7XG4gICAgdGhpcy5hc3NlcnRBY3RpdmUoKVxuICAgIGF3YWl0IHRoaXMuY29ubmVjdGlvbigpLmJlZm9yZUNvbW1pdCgoKSA9PiBjYWxsYmFjayh7b3BlcmF0aW9uOiB0aGlzfSkpXG4gIH1cblxuICAvKipcbiAgICogUnVucyBhIG5lc3RlZCBvcGVyYXRpb24gdHJhbnNhY3Rpb24vc2F2ZXBvaW50LlxuICAgKiBAdGVtcGxhdGUgVFxuICAgKiBAcGFyYW0geygpID0+IFByb21pc2U8VD59IGNhbGxiYWNrIC0gQ2FsbGJhY2suXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPFQ+fSAtIENhbGxiYWNrIHJlc3VsdC5cbiAgICovXG4gIGFzeW5jIHRyYW5zYWN0aW9uKGNhbGxiYWNrKSB7XG4gICAgdGhpcy5hc3NlcnRBY3RpdmUoKVxuXG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuY29ubmVjdGlvbigpLnRyYW5zYWN0aW9uKGNhbGxiYWNrKVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGRlbGliZXJhdGVseSBleHBvc2VkIG9wZXJhdGlvbiBjb25uZWN0aW9uIGZhY2FkZSBmb3IgcmF3IFNRTC5cbiAgICogQHJldHVybnMge2ltcG9ydChcIi4vZHJpdmVycy9iYXNlLmpzXCIpLmRlZmF1bHR9IC0gT3BlcmF0aW9uLWJvdW5kIGNvbm5lY3Rpb24uXG4gICAqL1xuICBjb25uZWN0aW9uKCkge1xuICAgIHRoaXMuYXNzZXJ0QWN0aXZlKClcblxuICAgIC8qKlxuICAgICAqIE5hcnJvd3MgdGhlIFByb3h5IGZhY2FkZSB0byB0aGUgY29tcGxldGUgZHJpdmVyIHN1cmZhY2UgdGhhdCBpdCBmb3J3YXJkcy5cbiAgICAgKiBAdHlwZSB7aW1wb3J0KFwiLi9kcml2ZXJzL2Jhc2UuanNcIikuZGVmYXVsdH1cbiAgICAgKi9cbiAgICBjb25zdCBjb25uZWN0aW9uRmFjYWRlID0gLyoqIEB0eXBlIHtSZXR1cm5UeXBlPHR5cGVvZiBKU09OLnBhcnNlPn0gKi8gKHRoaXMuX2Nvbm5lY3Rpb24pXG5cbiAgICByZXR1cm4gY29ubmVjdGlvbkZhY2FkZVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHRlbmFudCBkZXNjcmlwdG9yIGNhcHR1cmVkIGJ5IHRoZSBpbW11dGFibGUgaGFuZGxlLlxuICAgKiBAcmV0dXJucyB7UmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmRlZmluZWR9IC0gQ2FwdHVyZWQgdGVuYW50IGRlc2NyaXB0b3IuXG4gICAqL1xuICB0ZW5hbnQoKSB7XG4gICAgcmV0dXJuIC8qKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmRlZmluZWR9ICovICh0aGlzLl90ZW5hbnQpXG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgbG9naWNhbCBkYXRhYmFzZSBpZGVudGlmaWVyIG93bmVkIGJ5IHRoaXMgb3BlcmF0aW9uLlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSAtIERhdGFiYXNlIGlkZW50aWZpZXIuXG4gICAqL1xuICBkYXRhYmFzZUlkZW50aWZpZXIoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2RhdGFiYXNlSWRlbnRpZmllclxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBzdGFibGUgcGh5c2ljYWwtZGF0YWJhc2UgaWRlbnRpdHkgc3VpdGFibGUgZm9yIG9wZXJhdGlvbi1hd2FyZSBjYWNoZXMuXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IC0gUGh5c2ljYWwgZGF0YWJhc2UgaWRlbnRpdHkuXG4gICAqL1xuICBkYXRhYmFzZUlkZW50aXR5KCkge1xuICAgIHJldHVybiBgJHt0aGlzLl9kYXRhYmFzZUlkZW50aWZpZXJ9OiR7dGhpcy5fY29uZmlndXJhdGlvblJldXNlS2V5fWBcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSB0ZW5hbnQgc2NoZW1hIGdlbmVyYXRpb24gY2FwdHVyZWQgd2hlbiB0aGlzIG9wZXJhdGlvbiBzdGFydGVkLlxuICAgKiBAcmV0dXJucyB7c3RyaW5nIHwgdW5kZWZpbmVkfSAtIENhcHR1cmVkIHNjaGVtYSBnZW5lcmF0aW9uLlxuICAgKi9cbiAgc2NoZW1hR2VuZXJhdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5fc2NoZW1hR2VuZXJhdGlvblxuICB9XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemVzIGEgbW9kZWwgdGhyb3VnaCB0aGlzIG9wZXJhdGlvbidzIGNhcHR1cmVkIGNvbm5lY3Rpb24uXG4gICAqIEBwYXJhbSB7dHlwZW9mIGltcG9ydChcIi4vcmVjb3JkL2luZGV4LmpzXCIpLmRlZmF1bHR9IE1vZGVsQ2xhc3MgLSBNb2RlbCBjbGFzcy5cbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59IC0gUmVzb2x2ZXMgd2hlbiBpbml0aWFsaXplZC5cbiAgICovXG4gIGFzeW5jIGVuc3VyZU1vZGVsSW5pdGlhbGl6ZWQoTW9kZWxDbGFzcykge1xuICAgIHRoaXMuYXNzZXJ0QWN0aXZlKClcblxuICAgIGNvbnN0IGJvdW5kTW9kZWxDbGFzcyA9IHRoaXMubW9kZWxDbGFzcyhNb2RlbENsYXNzKVxuXG4gICAgaWYgKGJvdW5kTW9kZWxDbGFzcy5pc0luaXRpYWxpemVkKCkpIHRoaXMuYXNzZXJ0TW9kZWwoTW9kZWxDbGFzcylcblxuICAgIGF3YWl0IGJvdW5kTW9kZWxDbGFzcy5lbnN1cmVJbml0aWFsaXplZCh7XG4gICAgICBjb25maWd1cmF0aW9uOiB0aGlzLl9jb25maWd1cmF0aW9uLFxuICAgICAgY29ubmVjdGlvbjogdGhpcy5jb25uZWN0aW9uKClcbiAgICB9KVxuICAgIHRoaXMuYXNzZXJ0TW9kZWwoTW9kZWxDbGFzcylcbiAgfVxuXG4gIC8qKlxuICAgKiBSYWlzZXMgd2hlbiBhbiBvcGVyYXRpb24gaGFuZGxlIGhhcyBsZWZ0IGl0cyBjYWxsYmFjay5cbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICBhc3NlcnRBY3RpdmUoKSB7XG4gICAgaWYgKCF0aGlzLl9hY3RpdmUpIHRocm93IG5ldyBFcnJvcihcIkRhdGFiYXNlIG9wZXJhdGlvbiBoYXMgY29tcGxldGVkXCIpXG5cbiAgICBjb25zdCBwb29sID0gdGhpc1xuICAgICAgLl9jb25maWd1cmF0aW9uXG4gICAgICAuZ2V0RGF0YWJhc2VQb29sKHRoaXMuX2RhdGFiYXNlSWRlbnRpZmllcilcbiAgICBjb25zdCBjYXB0dXJlZFJldXNlS2V5ID0gcG9vbC5nZXRDb25maWd1cmF0aW9uUmV1c2VLZXkodGhpcy5fZGF0YWJhc2VDb25maWd1cmF0aW9uKVxuICAgIGNvbnN0IGNvbm5lY3Rpb25SZXVzZUtleSA9IHBvb2wuZ2V0Q29ubmVjdGlvbkNvbmZpZ3VyYXRpb25SZXVzZUtleSh0aGlzLl9waHlzaWNhbENvbm5lY3Rpb24pXG5cbiAgICBpZiAoY2FwdHVyZWRSZXVzZUtleSAhPT0gdGhpcy5fY29uZmlndXJhdGlvblJldXNlS2V5IHx8IGNvbm5lY3Rpb25SZXVzZUtleSAhPT0gdGhpcy5fY29uZmlndXJhdGlvblJldXNlS2V5KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYERhdGFiYXNlIG9wZXJhdGlvbiBmb3IgJHtKU09OLnN0cmluZ2lmeSh0aGlzLl9kYXRhYmFzZUlkZW50aWZpZXIpfSBiZWxvbmdzIHRvIGEgZGlmZmVyZW50IHBoeXNpY2FsIGRhdGFiYXNlIHRoYW4gaXRzIGNhcHR1cmVkIHRlbmFudCBoYW5kbGVgKVxuICAgIH1cblxuICAgIGlmICh0aGlzLl9lbmZvcmNlQ3VycmVudFRlbmFudFJldXNlS2V5ICYmIHBvb2wuZ2V0Q29uZmlndXJhdGlvblJldXNlS2V5KCkgIT09IHRoaXMuX2NvbmZpZ3VyYXRpb25SZXVzZUtleSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBEYXRhYmFzZSBvcGVyYXRpb24gZm9yICR7SlNPTi5zdHJpbmdpZnkodGhpcy5fZGF0YWJhc2VJZGVudGlmaWVyKX0gYmVsb25ncyB0byBhIGRpZmZlcmVudCBwaHlzaWNhbCBkYXRhYmFzZSB0aGFuIHRoZSBjdXJyZW50IHRlbmFudCBjb250ZXh0YClcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRXhwaXJlcyB0aGUgb3BlcmF0aW9uIGFuZCBhbGwgc2NvcGVzL3JlY29yZHMgYm91bmQgdG8gaXQuXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgY29tcGxldGUoKSB7XG4gICAgdGhpcy5fYWN0aXZlID0gZmFsc2VcbiAgfVxufVxuIl19
|
|
@@ -415,6 +415,18 @@ declare class VelociousDatabaseRecord<WriteAttributes extends Record<string, Ret
|
|
|
415
415
|
* @returns {this} - Bound record.
|
|
416
416
|
*/
|
|
417
417
|
bindDatabaseOperation(operation: import("../operation.js").default): /*elided*/ any;
|
|
418
|
+
/**
|
|
419
|
+
* Captures and validates the physical database identity that owns this record.
|
|
420
|
+
* @param {string} databaseIdentity - Opaque operation/connection identity.
|
|
421
|
+
* @returns {this} This record.
|
|
422
|
+
*/
|
|
423
|
+
captureDatabaseIdentity(databaseIdentity: string): /*elided*/ any;
|
|
424
|
+
_databaseIdentity: string | undefined;
|
|
425
|
+
/**
|
|
426
|
+
* Returns the captured physical database identity.
|
|
427
|
+
* @returns {string | undefined} Captured physical database identity.
|
|
428
|
+
*/
|
|
429
|
+
databaseIdentity(): string | undefined;
|
|
418
430
|
/**
|
|
419
431
|
* Releases this record from a completed eager-helper operation while
|
|
420
432
|
* preserving the legacy ambient follow-up behavior of `usingTenant` finders.
|
|
@@ -476,6 +488,12 @@ declare class VelociousDatabaseRecord<WriteAttributes extends Record<string, Ret
|
|
|
476
488
|
* @returns {import("../drivers/base.js").default} - The connection.
|
|
477
489
|
*/
|
|
478
490
|
_connection(): import("../drivers/base.js").default;
|
|
491
|
+
/**
|
|
492
|
+
* Resolves the identity of an already selected concrete connection.
|
|
493
|
+
* @param {import("../drivers/base.js").default} connection - Concrete connection.
|
|
494
|
+
* @returns {string} Physical database identity.
|
|
495
|
+
*/
|
|
496
|
+
_databaseIdentityForConnection(connection: import("../drivers/base.js").default): string;
|
|
479
497
|
/**
|
|
480
498
|
* Returns the connection that owns this record's database work.
|
|
481
499
|
* @returns {import("../drivers/base.js").default} - Connection.
|
|
@@ -2021,6 +2039,7 @@ declare class VelociousDatabaseRecord<WriteAttributes extends Record<string, Ret
|
|
|
2021
2039
|
ransack<MC extends typeof VelociousDatabaseRecord>(this: MC, params: Record<string, ReturnType<typeof JSON.parse>>): ModelClassQuery<MC>;
|
|
2022
2040
|
} | undefined;
|
|
2023
2041
|
_isNewRecord: boolean;
|
|
2042
|
+
_databaseIdentity: string | undefined;
|
|
2024
2043
|
/** @type {Record<string, string> | undefined} */
|
|
2025
2044
|
static _attributeNameToColumnName: Record<string, string> | undefined;
|
|
2026
2045
|
/** @type {Record<string, string> | undefined} */
|
|
@@ -3510,6 +3529,17 @@ declare class VelociousDatabaseRecord<WriteAttributes extends Record<string, Ret
|
|
|
3510
3529
|
* @returns {this} - Bound record.
|
|
3511
3530
|
*/
|
|
3512
3531
|
bindDatabaseOperation(operation: import("../operation.js").default): this;
|
|
3532
|
+
/**
|
|
3533
|
+
* Captures and validates the physical database identity that owns this record.
|
|
3534
|
+
* @param {string} databaseIdentity - Opaque operation/connection identity.
|
|
3535
|
+
* @returns {this} This record.
|
|
3536
|
+
*/
|
|
3537
|
+
captureDatabaseIdentity(databaseIdentity: string): this;
|
|
3538
|
+
/**
|
|
3539
|
+
* Returns the captured physical database identity.
|
|
3540
|
+
* @returns {string | undefined} Captured physical database identity.
|
|
3541
|
+
*/
|
|
3542
|
+
databaseIdentity(): string | undefined;
|
|
3513
3543
|
/**
|
|
3514
3544
|
* Releases this record from a completed eager-helper operation while
|
|
3515
3545
|
* preserving the legacy ambient follow-up behavior of `usingTenant` finders.
|
|
@@ -3571,6 +3601,12 @@ declare class VelociousDatabaseRecord<WriteAttributes extends Record<string, Ret
|
|
|
3571
3601
|
* @returns {import("../drivers/base.js").default} - The connection.
|
|
3572
3602
|
*/
|
|
3573
3603
|
_connection(): import("../drivers/base.js").default;
|
|
3604
|
+
/**
|
|
3605
|
+
* Resolves the identity of an already selected concrete connection.
|
|
3606
|
+
* @param {import("../drivers/base.js").default} connection - Concrete connection.
|
|
3607
|
+
* @returns {string} Physical database identity.
|
|
3608
|
+
*/
|
|
3609
|
+
_databaseIdentityForConnection(connection: import("../drivers/base.js").default): string;
|
|
3574
3610
|
/**
|
|
3575
3611
|
* Returns the connection that owns this record's database work.
|
|
3576
3612
|
* @returns {import("../drivers/base.js").default} - Connection.
|