velocious 1.0.591 → 1.0.592
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 +1 -1
- package/build/src/sync/conflict-strategy.d.ts.map +1 -1
- package/build/src/sync/conflict-strategy.js +7 -1
- package/build/src/sync/local-mutation-log.d.ts +10 -0
- package/build/src/sync/local-mutation-log.d.ts.map +1 -1
- package/build/src/sync/local-mutation-log.js +21 -1
- package/build/src/sync/sync-api-client-types.d.ts +15 -0
- package/build/src/sync/sync-api-client-types.d.ts.map +1 -1
- package/build/src/sync/sync-api-client-types.js +4 -1
- package/build/src/sync/sync-api-client.d.ts +91 -0
- package/build/src/sync/sync-api-client.d.ts.map +1 -1
- package/build/src/sync/sync-api-client.js +184 -1
- package/build/src/sync/sync-client-types.d.ts +57 -0
- package/build/src/sync/sync-client-types.d.ts.map +1 -1
- package/build/src/sync/sync-client-types.js +16 -1
- package/build/src/sync/sync-client.d.ts +56 -7
- package/build/src/sync/sync-client.d.ts.map +1 -1
- package/build/src/sync/sync-client.js +180 -15
- package/build/src/sync/sync-envelope-replay-service.d.ts +31 -2
- package/build/src/sync/sync-envelope-replay-service.d.ts.map +1 -1
- package/build/src/sync/sync-envelope-replay-service.js +98 -16
- package/build/src/sync/sync-model-change-feed-service.d.ts.map +1 -1
- package/build/src/sync/sync-model-change-feed-service.js +3 -4
- package/build/src/sync/sync-replay-persisted-data.d.ts +26 -0
- package/build/src/sync/sync-replay-persisted-data.d.ts.map +1 -0
- package/build/src/sync/sync-replay-persisted-data.js +43 -0
- package/build/sync/conflict-strategy.js +3 -0
- package/build/sync/local-mutation-log.js +24 -0
- package/build/sync/sync-api-client-types.js +3 -0
- package/build/sync/sync-api-client.js +203 -0
- package/build/sync/sync-client-types.js +16 -0
- package/build/sync/sync-client.js +198 -14
- package/build/sync/sync-envelope-replay-service.js +109 -12
- package/build/sync/sync-model-change-feed-service.js +2 -4
- package/build/sync/sync-replay-persisted-data.js +50 -0
- package/build/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/src/sync/conflict-strategy.js +3 -0
- package/src/sync/local-mutation-log.js +24 -0
- package/src/sync/sync-api-client-types.js +3 -0
- package/src/sync/sync-api-client.js +203 -0
- package/src/sync/sync-client-types.js +16 -0
- package/src/sync/sync-client.js +198 -14
- package/src/sync/sync-envelope-replay-service.js +109 -12
- package/src/sync/sync-model-change-feed-service.js +2 -4
- package/src/sync/sync-replay-persisted-data.js +50 -0
|
@@ -22,6 +22,40 @@ export type ModelSyncRealtimeDeclaration = {
|
|
|
22
22
|
*/
|
|
23
23
|
params?: Record<string, ReturnType<typeof JSON.parse>>;
|
|
24
24
|
};
|
|
25
|
+
export type SyncClientConflictTrackingConfig = {
|
|
26
|
+
/**
|
|
27
|
+
* - Stable device identity.
|
|
28
|
+
*/
|
|
29
|
+
actorDeviceId: string;
|
|
30
|
+
/**
|
|
31
|
+
* - Stable user identity.
|
|
32
|
+
*/
|
|
33
|
+
actorUserId: string;
|
|
34
|
+
/**
|
|
35
|
+
* - Durable idempotency-id generator.
|
|
36
|
+
*/
|
|
37
|
+
clientMutationId: () => string;
|
|
38
|
+
/**
|
|
39
|
+
* - Existing durable mutation log.
|
|
40
|
+
*/
|
|
41
|
+
mutationLog: import("./local-mutation-log.js").default;
|
|
42
|
+
/**
|
|
43
|
+
* - Mutation clock.
|
|
44
|
+
*/
|
|
45
|
+
now?: () => Date;
|
|
46
|
+
/**
|
|
47
|
+
* - Grant identifier retained with intent.
|
|
48
|
+
*/
|
|
49
|
+
offlineGrantId: string;
|
|
50
|
+
/**
|
|
51
|
+
* - Policy hash retained with intent.
|
|
52
|
+
*/
|
|
53
|
+
policyHash: string;
|
|
54
|
+
/**
|
|
55
|
+
* - Authoritative version attribute; defaults to updatedAt when present.
|
|
56
|
+
*/
|
|
57
|
+
versionAttribute?: string;
|
|
58
|
+
};
|
|
25
59
|
export type SyncClientResourceConfig = {
|
|
26
60
|
/**
|
|
27
61
|
* - Local model class for this resource.
|
|
@@ -47,6 +81,10 @@ export type SyncClientResourceConfig = {
|
|
|
47
81
|
* - Attributes coerced through sync boolean parsing when queueing.
|
|
48
82
|
*/
|
|
49
83
|
booleanAttributes?: string[];
|
|
84
|
+
/**
|
|
85
|
+
* - Opt-in durable base-version conflict tracking.
|
|
86
|
+
*/
|
|
87
|
+
conflictTracking?: SyncClientConflictTrackingConfig;
|
|
50
88
|
/**
|
|
51
89
|
* - Attributes stripped from queued payloads.
|
|
52
90
|
*/
|
|
@@ -89,6 +127,10 @@ export type ModelSyncDeclarationConfig<TModel = any> = {
|
|
|
89
127
|
* - Extra boolean attributes merged with the boolean columns derived from column types.
|
|
90
128
|
*/
|
|
91
129
|
booleanAttributes?: string[];
|
|
130
|
+
/**
|
|
131
|
+
* - Opt-in durable base-version conflict tracking.
|
|
132
|
+
*/
|
|
133
|
+
conflictTracking?: SyncClientConflictTrackingConfig;
|
|
92
134
|
/**
|
|
93
135
|
* - Custom pull-apply record resolver.
|
|
94
136
|
*/
|
|
@@ -228,6 +270,19 @@ export type SyncClientConfig = {
|
|
|
228
270
|
* @property {string} channel - Server channel name to subscribe.
|
|
229
271
|
* @property {Record<string, ReturnType<typeof JSON.parse>>} [params] - Static subscribe params. The framework injects `authenticationToken` automatically.
|
|
230
272
|
*/
|
|
273
|
+
/**
|
|
274
|
+
* Durable optimistic-version tracking configuration. Identity/grant fields are
|
|
275
|
+
* retained in the shared LocalMutationLog mutation shape used by offline sync.
|
|
276
|
+
* @typedef {object} SyncClientConflictTrackingConfig
|
|
277
|
+
* @property {string} actorDeviceId - Stable device identity.
|
|
278
|
+
* @property {string} actorUserId - Stable user identity.
|
|
279
|
+
* @property {() => string} clientMutationId - Durable idempotency-id generator.
|
|
280
|
+
* @property {import("./local-mutation-log.js").default} mutationLog - Existing durable mutation log.
|
|
281
|
+
* @property {() => Date} [now] - Mutation clock.
|
|
282
|
+
* @property {string} offlineGrantId - Grant identifier retained with intent.
|
|
283
|
+
* @property {string} policyHash - Policy hash retained with intent.
|
|
284
|
+
* @property {string} [versionAttribute] - Authoritative version attribute; defaults to updatedAt when present.
|
|
285
|
+
*/
|
|
231
286
|
/**
|
|
232
287
|
* Declarative per-resource sync policy.
|
|
233
288
|
* @typedef {object} SyncClientResourceConfig
|
|
@@ -237,6 +292,7 @@ export type SyncClientConfig = {
|
|
|
237
292
|
* @property {import("./sync-api-client-types.js").SyncResourceConfig["findRecordForDelete"]} [findRecordForDelete] - Custom pull-apply delete resolver.
|
|
238
293
|
* @property {import("./sync-api-client-types.js").SyncResourceConfig["afterApply"]} [afterApply] - Post-apply hook.
|
|
239
294
|
* @property {string[]} [booleanAttributes] - Attributes coerced through sync boolean parsing when queueing.
|
|
295
|
+
* @property {SyncClientConflictTrackingConfig} [conflictTracking] - Opt-in durable base-version conflict tracking.
|
|
240
296
|
* @property {string[]} [localOnlyAttributes] - Attributes stripped from queued payloads.
|
|
241
297
|
* @property {"upsert" | ((args: {operation: "create" | "update" | "destroy", record: ReturnType<typeof JSON.parse>}) => string)} [syncType] - Maps a mutation operation to a sync type. The "upsert" flag queues creates and updates as "update" rows (the server upserts by resource id) and destroys as "delete". Defaults to the operation name with destroy mapped to "delete".
|
|
242
298
|
* @property {(args: {operation: "create" | "update" | "destroy", record: ReturnType<typeof JSON.parse>}) => Record<string, ReturnType<typeof JSON.parse>>} [trackedData] - Custom queued-payload builder for tracked mutations.
|
|
@@ -252,6 +308,7 @@ export type SyncClientConfig = {
|
|
|
252
308
|
* @property {import("./sync-api-client-types.js").SyncResourceConfig["afterApply"]} [afterApply] - Post-apply hook.
|
|
253
309
|
* @property {import("./sync-api-client-types.js").SyncResourceConfig["attributes"]} [attributes] - Pull-apply attribute mapper. Required for resources that receive pulled changes.
|
|
254
310
|
* @property {string[]} [booleanAttributes] - Extra boolean attributes merged with the boolean columns derived from column types.
|
|
311
|
+
* @property {SyncClientConflictTrackingConfig} [conflictTracking] - Opt-in durable base-version conflict tracking.
|
|
255
312
|
* @property {import("./sync-api-client-types.js").SyncResourceConfig["findRecord"]} [findRecord] - Custom pull-apply record resolver.
|
|
256
313
|
* @property {import("./sync-api-client-types.js").SyncResourceConfig["findRecordForDelete"]} [findRecordForDelete] - Custom pull-apply delete resolver.
|
|
257
314
|
* @property {string[]} [localOnlyAttributes] - Extra local-only attributes merged with the derived primary key, createdAt/updatedAt, and sync bookkeeping attributes.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync-client-types.d.ts","sourceRoot":"","sources":["../../../src/sync/sync-client-types.js"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"sync-client-types.d.ts","sourceRoot":"","sources":["../../../src/sync/sync-client-types.js"],"names":[],"mappings":"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"}
|
|
@@ -14,6 +14,19 @@
|
|
|
14
14
|
* @property {string} channel - Server channel name to subscribe.
|
|
15
15
|
* @property {Record<string, ReturnType<typeof JSON.parse>>} [params] - Static subscribe params. The framework injects `authenticationToken` automatically.
|
|
16
16
|
*/
|
|
17
|
+
/**
|
|
18
|
+
* Durable optimistic-version tracking configuration. Identity/grant fields are
|
|
19
|
+
* retained in the shared LocalMutationLog mutation shape used by offline sync.
|
|
20
|
+
* @typedef {object} SyncClientConflictTrackingConfig
|
|
21
|
+
* @property {string} actorDeviceId - Stable device identity.
|
|
22
|
+
* @property {string} actorUserId - Stable user identity.
|
|
23
|
+
* @property {() => string} clientMutationId - Durable idempotency-id generator.
|
|
24
|
+
* @property {import("./local-mutation-log.js").default} mutationLog - Existing durable mutation log.
|
|
25
|
+
* @property {() => Date} [now] - Mutation clock.
|
|
26
|
+
* @property {string} offlineGrantId - Grant identifier retained with intent.
|
|
27
|
+
* @property {string} policyHash - Policy hash retained with intent.
|
|
28
|
+
* @property {string} [versionAttribute] - Authoritative version attribute; defaults to updatedAt when present.
|
|
29
|
+
*/
|
|
17
30
|
/**
|
|
18
31
|
* Declarative per-resource sync policy.
|
|
19
32
|
* @typedef {object} SyncClientResourceConfig
|
|
@@ -23,6 +36,7 @@
|
|
|
23
36
|
* @property {import("./sync-api-client-types.js").SyncResourceConfig["findRecordForDelete"]} [findRecordForDelete] - Custom pull-apply delete resolver.
|
|
24
37
|
* @property {import("./sync-api-client-types.js").SyncResourceConfig["afterApply"]} [afterApply] - Post-apply hook.
|
|
25
38
|
* @property {string[]} [booleanAttributes] - Attributes coerced through sync boolean parsing when queueing.
|
|
39
|
+
* @property {SyncClientConflictTrackingConfig} [conflictTracking] - Opt-in durable base-version conflict tracking.
|
|
26
40
|
* @property {string[]} [localOnlyAttributes] - Attributes stripped from queued payloads.
|
|
27
41
|
* @property {"upsert" | ((args: {operation: "create" | "update" | "destroy", record: ReturnType<typeof JSON.parse>}) => string)} [syncType] - Maps a mutation operation to a sync type. The "upsert" flag queues creates and updates as "update" rows (the server upserts by resource id) and destroys as "delete". Defaults to the operation name with destroy mapped to "delete".
|
|
28
42
|
* @property {(args: {operation: "create" | "update" | "destroy", record: ReturnType<typeof JSON.parse>}) => Record<string, ReturnType<typeof JSON.parse>>} [trackedData] - Custom queued-payload builder for tracked mutations.
|
|
@@ -38,6 +52,7 @@
|
|
|
38
52
|
* @property {import("./sync-api-client-types.js").SyncResourceConfig["afterApply"]} [afterApply] - Post-apply hook.
|
|
39
53
|
* @property {import("./sync-api-client-types.js").SyncResourceConfig["attributes"]} [attributes] - Pull-apply attribute mapper. Required for resources that receive pulled changes.
|
|
40
54
|
* @property {string[]} [booleanAttributes] - Extra boolean attributes merged with the boolean columns derived from column types.
|
|
55
|
+
* @property {SyncClientConflictTrackingConfig} [conflictTracking] - Opt-in durable base-version conflict tracking.
|
|
41
56
|
* @property {import("./sync-api-client-types.js").SyncResourceConfig["findRecord"]} [findRecord] - Custom pull-apply record resolver.
|
|
42
57
|
* @property {import("./sync-api-client-types.js").SyncResourceConfig["findRecordForDelete"]} [findRecordForDelete] - Custom pull-apply delete resolver.
|
|
43
58
|
* @property {string[]} [localOnlyAttributes] - Extra local-only attributes merged with the derived primary key, createdAt/updatedAt, and sync bookkeeping attributes.
|
|
@@ -88,4 +103,4 @@
|
|
|
88
103
|
* @property {string | (() => string | null | undefined)} [websocketUrl] - Shared app-lifetime websocket URL the framework builds a client from.
|
|
89
104
|
*/
|
|
90
105
|
export {};
|
|
91
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3luYy1jbGllbnQtdHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc3luYy9zeW5jLWNsaWVudC10eXBlcy5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZO0FBRVo7Ozs7OztHQU1HO0FBRUg7Ozs7Ozs7R0FPRztBQUVIOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBRUg7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBaUJHO0FBRUg7Ozs7O0dBS0c7QUFFSDs7Ozs7R0FLRztBQUVIOzs7Ozs7Ozs7R0FTRztBQUVIOzs7Ozs7Ozs7Ozs7Ozs7OztHQWlCRztBQUVILE9BQU8sRUFBRSxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbi8qKlxuICogQ2xpZW50LWRlY2xhcmVkIHN5bmMgc2NvcGUgc2VyaWFsaXplZCBmcm9tIGEgbW9kZWwgcXVlcnkuXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBTZXJpYWxpemVkU3luY1Njb3BlXG4gKiBAcHJvcGVydHkge1JlY29yZDxzdHJpbmcsIFJldHVyblR5cGU8dHlwZW9mIEpTT04ucGFyc2U+Pn0gY29uZGl0aW9ucyAtIFBsYWluIGF0dHJpYnV0ZSBjb25kaXRpb25zIGZyb20gdGhlIHF1ZXJ5LlxuICogQHByb3BlcnR5IHtzdHJpbmcgfCBudWxsfSByZXNvdXJjZVR5cGUgLSBSZXNvdXJjZS9tb2RlbCBuYW1lIHRoZSBzY29wZSB3YXMgZGVjbGFyZWQgZm9yLCBvciBudWxsIGZvciB0aGUgYWxsLXR5cGVzICh1c2VyKSBzY29wZSBjb3ZlcmluZyBldmVyeSB0eXBlIHRoZSBzZXJ2ZXIgYXV0aG9yaXplcyBmb3IgdGhlIGNhbGxlci5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbb3duZXJdIC0gTG9jYWwgcGFydGl0aW9uIGtleTogdGhlIGF1dGhlbnRpY2F0ZWQgaWRlbnRpdHkgdGhhdCBkZWNsYXJlZCB0aGUgc2NvcGUuIFVzZWQgb25seSB0byBwYXJ0aXRpb24gdGhlIGxvY2FsIHNjb3BlL2N1cnNvciBzdG9yZSAobmV2ZXIgc2VudCB0byB0aGUgc2VydmVyIGFzIHNjb3BlIGNvbmRpdGlvbnMpLCBzbyBhIHVzZXIgc2NvcGUncyBlbXB0eS1jb25kaXRpb25zIGN1cnNvciBkb2VzIG5vdCBsZWFrIGFjcm9zcyBhY2NvdW50cyBvbiBhIHNoYXJlZCBkZXZpY2UuXG4gKi9cblxuLyoqXG4gKiBTdGF0aWMgcmVhbHRpbWUgY2hhbm5lbCBkZWNsYXJhdGlvbiBvbiBhIG1vZGVsJ3MgYHN0YXRpYyBzeW5jYCwgZm9yIGNoYW5uZWxzXG4gKiB3aG9zZSBuYW1lIGFuZCBwYXJhbXMgYXJlIHN0YXRpYy5cbiAqIEBkZXByZWNhdGVkIERlY2xhcmVkIHB1bGwgc2NvcGVzIHN1YnNjcmliZSB0aGUgZnJhbWV3b3JrIHN5bmMgY2hhbm5lbCBhdXRvbWF0aWNhbGx5OyBrZWVwIHRoaXMgb25seSBmb3IgbGVnYWN5IGFwcCBjaGFubmVscy5cbiAqIEB0eXBlZGVmIHtvYmplY3R9IE1vZGVsU3luY1JlYWx0aW1lRGVjbGFyYXRpb25cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBjaGFubmVsIC0gU2VydmVyIGNoYW5uZWwgbmFtZSB0byBzdWJzY3JpYmUuXG4gKiBAcHJvcGVydHkge1JlY29yZDxzdHJpbmcsIFJldHVyblR5cGU8dHlwZW9mIEpTT04ucGFyc2U+Pn0gW3BhcmFtc10gLSBTdGF0aWMgc3Vic2NyaWJlIHBhcmFtcy4gVGhlIGZyYW1ld29yayBpbmplY3RzIGBhdXRoZW50aWNhdGlvblRva2VuYCBhdXRvbWF0aWNhbGx5LlxuICovXG5cbi8qKlxuICogRGVjbGFyYXRpdmUgcGVyLXJlc291cmNlIHN5bmMgcG9saWN5LlxuICogQHR5cGVkZWYge29iamVjdH0gU3luY0NsaWVudFJlc291cmNlQ29uZmlnXG4gKiBAcHJvcGVydHkge1JldHVyblR5cGU8dHlwZW9mIEpTT04ucGFyc2U+fSBtb2RlbENsYXNzIC0gTG9jYWwgbW9kZWwgY2xhc3MgZm9yIHRoaXMgcmVzb3VyY2UuXG4gKiBAcHJvcGVydHkge2ltcG9ydChcIi4vc3luYy1hcGktY2xpZW50LXR5cGVzLmpzXCIpLlN5bmNSZXNvdXJjZUNvbmZpZ1tcImF0dHJpYnV0ZXNcIl19IFthdHRyaWJ1dGVzXSAtIFB1bGwtYXBwbHkgYXR0cmlidXRlIG1hcHBlci4gUmVxdWlyZWQgZm9yIHJlc291cmNlcyB0aGF0IHJlY2VpdmUgcHVsbGVkIGNoYW5nZXMuXG4gKiBAcHJvcGVydHkge2ltcG9ydChcIi4vc3luYy1hcGktY2xpZW50LXR5cGVzLmpzXCIpLlN5bmNSZXNvdXJjZUNvbmZpZ1tcImZpbmRSZWNvcmRcIl19IFtmaW5kUmVjb3JkXSAtIEN1c3RvbSBwdWxsLWFwcGx5IHJlY29yZCByZXNvbHZlci5cbiAqIEBwcm9wZXJ0eSB7aW1wb3J0KFwiLi9zeW5jLWFwaS1jbGllbnQtdHlwZXMuanNcIikuU3luY1Jlc291cmNlQ29uZmlnW1wiZmluZFJlY29yZEZvckRlbGV0ZVwiXX0gW2ZpbmRSZWNvcmRGb3JEZWxldGVdIC0gQ3VzdG9tIHB1bGwtYXBwbHkgZGVsZXRlIHJlc29sdmVyLlxuICogQHByb3BlcnR5IHtpbXBvcnQoXCIuL3N5bmMtYXBpLWNsaWVudC10eXBlcy5qc1wiKS5TeW5jUmVzb3VyY2VDb25maWdbXCJhZnRlckFwcGx5XCJdfSBbYWZ0ZXJBcHBseV0gLSBQb3N0LWFwcGx5IGhvb2suXG4gKiBAcHJvcGVydHkge3N0cmluZ1tdfSBbYm9vbGVhbkF0dHJpYnV0ZXNdIC0gQXR0cmlidXRlcyBjb2VyY2VkIHRocm91Z2ggc3luYyBib29sZWFuIHBhcnNpbmcgd2hlbiBxdWV1ZWluZy5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nW119IFtsb2NhbE9ubHlBdHRyaWJ1dGVzXSAtIEF0dHJpYnV0ZXMgc3RyaXBwZWQgZnJvbSBxdWV1ZWQgcGF5bG9hZHMuXG4gKiBAcHJvcGVydHkge1widXBzZXJ0XCIgfCAoKGFyZ3M6IHtvcGVyYXRpb246IFwiY3JlYXRlXCIgfCBcInVwZGF0ZVwiIHwgXCJkZXN0cm95XCIsIHJlY29yZDogUmV0dXJuVHlwZTx0eXBlb2YgSlNPTi5wYXJzZT59KSA9PiBzdHJpbmcpfSBbc3luY1R5cGVdIC0gTWFwcyBhIG11dGF0aW9uIG9wZXJhdGlvbiB0byBhIHN5bmMgdHlwZS4gVGhlIFwidXBzZXJ0XCIgZmxhZyBxdWV1ZXMgY3JlYXRlcyBhbmQgdXBkYXRlcyBhcyBcInVwZGF0ZVwiIHJvd3MgKHRoZSBzZXJ2ZXIgdXBzZXJ0cyBieSByZXNvdXJjZSBpZCkgYW5kIGRlc3Ryb3lzIGFzIFwiZGVsZXRlXCIuIERlZmF1bHRzIHRvIHRoZSBvcGVyYXRpb24gbmFtZSB3aXRoIGRlc3Ryb3kgbWFwcGVkIHRvIFwiZGVsZXRlXCIuXG4gKiBAcHJvcGVydHkgeyhhcmdzOiB7b3BlcmF0aW9uOiBcImNyZWF0ZVwiIHwgXCJ1cGRhdGVcIiB8IFwiZGVzdHJveVwiLCByZWNvcmQ6IFJldHVyblR5cGU8dHlwZW9mIEpTT04ucGFyc2U+fSkgPT4gUmVjb3JkPHN0cmluZywgUmV0dXJuVHlwZTx0eXBlb2YgSlNPTi5wYXJzZT4+fSBbdHJhY2tlZERhdGFdIC0gQ3VzdG9tIHF1ZXVlZC1wYXlsb2FkIGJ1aWxkZXIgZm9yIHRyYWNrZWQgbXV0YXRpb25zLlxuICogQHByb3BlcnR5IHtib29sZWFuIHwge29wZXJhdGlvbnM6IEFycmF5PFwiY3JlYXRlXCIgfCBcInVwZGF0ZVwiIHwgXCJkZXN0cm95XCI+fX0gW3RyYWNrXSAtIEF1dG9tYXRpYyBtdXRhdGlvbiB0cmFja2luZyBwb2xpY3kuIE9uIGJ5IGRlZmF1bHQgKGNyZWF0ZXMgYW5kIHVwZGF0ZXMgcXVldWUgYXV0b21hdGljYWxseSk7IGBmYWxzZWAgb3B0cyB0aGUgcmVzb3VyY2Ugb3V0LCBgdHJ1ZWAgYWRkcyBkZXN0cm95cywgYHtvcGVyYXRpb25zfWAgbmFycm93cyB0aGUgdHJhY2tlZCBvcGVyYXRpb25zLlxuICogQHByb3BlcnR5IHtNb2RlbFN5bmNSZWFsdGltZURlY2xhcmF0aW9ufSBbcmVhbHRpbWVdIC0gRGVwcmVjYXRlZDogc3RhdGljIGxlZ2FjeSByZWFsdGltZSBjaGFubmVsIHRoaXMgcmVzb3VyY2Ugc3Vic2NyaWJlcyB0aHJvdWdoIGBzdWJzY3JpYmVSZWFsdGltZSguLi4pYC4gRGVjbGFyZWQgcHVsbCBzY29wZXMgc3Vic2NyaWJlIHRoZSBmcmFtZXdvcmsgc3luYyBjaGFubmVsIGF1dG9tYXRpY2FsbHkuXG4gKi9cblxuLyoqXG4gKiBNb2RlbC1sZXZlbCBjbGllbnQgc3luYyBkZWNsYXJhdGlvbiByZWFkIGZyb20gYHN0YXRpYyBzeW5jYCBieVxuICogYFN5bmNDbGllbnQuZnJvbUNvbmZpZ3VyYXRpb24oLi4uKWAuIGB0cnVlYCBvcHRzIHRoZSBtb2RlbCBpbiB3aXRoIGFsbFxuICogZGVmYXVsdHM7IGFuIG9iamVjdCBjdXN0b21pemVzIHRoZSBkZXJpdmVkIHJlc291cmNlIGNvbmZpZy5cbiAqIEB0ZW1wbGF0ZSBbVE1vZGVsPWFueV1cbiAqIEB0eXBlZGVmIHtvYmplY3R9IE1vZGVsU3luY0RlY2xhcmF0aW9uQ29uZmlnXG4gKiBAcHJvcGVydHkge2ltcG9ydChcIi4vc3luYy1hcGktY2xpZW50LXR5cGVzLmpzXCIpLlN5bmNSZXNvdXJjZUNvbmZpZ1tcImFmdGVyQXBwbHlcIl19IFthZnRlckFwcGx5XSAtIFBvc3QtYXBwbHkgaG9vay5cbiAqIEBwcm9wZXJ0eSB7aW1wb3J0KFwiLi9zeW5jLWFwaS1jbGllbnQtdHlwZXMuanNcIikuU3luY1Jlc291cmNlQ29uZmlnW1wiYXR0cmlidXRlc1wiXX0gW2F0dHJpYnV0ZXNdIC0gUHVsbC1hcHBseSBhdHRyaWJ1dGUgbWFwcGVyLiBSZXF1aXJlZCBmb3IgcmVzb3VyY2VzIHRoYXQgcmVjZWl2ZSBwdWxsZWQgY2hhbmdlcy5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nW119IFtib29sZWFuQXR0cmlidXRlc10gLSBFeHRyYSBib29sZWFuIGF0dHJpYnV0ZXMgbWVyZ2VkIHdpdGggdGhlIGJvb2xlYW4gY29sdW1ucyBkZXJpdmVkIGZyb20gY29sdW1uIHR5cGVzLlxuICogQHByb3BlcnR5IHtpbXBvcnQoXCIuL3N5bmMtYXBpLWNsaWVudC10eXBlcy5qc1wiKS5TeW5jUmVzb3VyY2VDb25maWdbXCJmaW5kUmVjb3JkXCJdfSBbZmluZFJlY29yZF0gLSBDdXN0b20gcHVsbC1hcHBseSByZWNvcmQgcmVzb2x2ZXIuXG4gKiBAcHJvcGVydHkge2ltcG9ydChcIi4vc3luYy1hcGktY2xpZW50LXR5cGVzLmpzXCIpLlN5bmNSZXNvdXJjZUNvbmZpZ1tcImZpbmRSZWNvcmRGb3JEZWxldGVcIl19IFtmaW5kUmVjb3JkRm9yRGVsZXRlXSAtIEN1c3RvbSBwdWxsLWFwcGx5IGRlbGV0ZSByZXNvbHZlci5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nW119IFtsb2NhbE9ubHlBdHRyaWJ1dGVzXSAtIEV4dHJhIGxvY2FsLW9ubHkgYXR0cmlidXRlcyBtZXJnZWQgd2l0aCB0aGUgZGVyaXZlZCBwcmltYXJ5IGtleSwgY3JlYXRlZEF0L3VwZGF0ZWRBdCwgYW5kIHN5bmMgYm9va2tlZXBpbmcgYXR0cmlidXRlcy5cbiAqIEBwcm9wZXJ0eSB7aW1wb3J0KFwiLi9zeW5jLXB1Ymxpc2hlci10eXBlcy5qc1wiKS5TeW5jUHVibGlzaERlY2xhcmF0aW9uPFRNb2RlbD59IFtwdWJsaXNoXSAtIFNlcnZlci1zaWRlIHB1Ymxpc2ggZGVjbGFyYXRpb24gY29uc3VtZWQgYnkgYFN5bmNQdWJsaXNoZXIuZnJvbUNvbmZpZ3VyYXRpb24oLi4uKWAgb24gdGhlIGJhY2tlbmQ7IGlnbm9yZWQgYnkgdGhlIGNsaWVudC5cbiAqIEBwcm9wZXJ0eSB7XCJ1cHNlcnRcIiB8ICgoYXJnczoge29wZXJhdGlvbjogXCJjcmVhdGVcIiB8IFwidXBkYXRlXCIgfCBcImRlc3Ryb3lcIiwgcmVjb3JkOiBSZXR1cm5UeXBlPHR5cGVvZiBKU09OLnBhcnNlPn0pID0+IHN0cmluZyl9IFtzeW5jVHlwZV0gLSBTeW5jIHR5cGUgZmxhZyBvciBtYXBwZXIgKHNlZSBTeW5jQ2xpZW50UmVzb3VyY2VDb25maWcpLlxuICogQHByb3BlcnR5IHtib29sZWFuIHwgQXJyYXk8XCJjcmVhdGVcIiB8IFwidXBkYXRlXCIgfCBcImRlc3Ryb3lcIj4gfCB7b3BlcmF0aW9uczogQXJyYXk8XCJjcmVhdGVcIiB8IFwidXBkYXRlXCIgfCBcImRlc3Ryb3lcIj59fSBbdHJhY2tdIC0gQXV0b21hdGljIG11dGF0aW9uIHRyYWNraW5nIHBvbGljeTsgYW4gYXJyYXkgaXMgc2hvcnRoYW5kIGZvciB7b3BlcmF0aW9uc30uIE9uIGJ5IGRlZmF1bHQgKGNyZWF0ZXMgYW5kIHVwZGF0ZXMgcXVldWUgYXV0b21hdGljYWxseSk7IGBmYWxzZWAgb3B0cyB0aGUgbW9kZWwgb3V0IChmb3IgbW9kZWxzIHdyaXR0ZW4gYnkgbm9uLXVzZXIgZmxvd3MpLCBgdHJ1ZWAgYWRkcyBkZXN0cm95cy5cbiAqIEBwcm9wZXJ0eSB7KGFyZ3M6IHtvcGVyYXRpb246IFwiY3JlYXRlXCIgfCBcInVwZGF0ZVwiIHwgXCJkZXN0cm95XCIsIHJlY29yZDogUmV0dXJuVHlwZTx0eXBlb2YgSlNPTi5wYXJzZT59KSA9PiBSZWNvcmQ8c3RyaW5nLCBSZXR1cm5UeXBlPHR5cGVvZiBKU09OLnBhcnNlPj59IFt0cmFja2VkRGF0YV0gLSBDdXN0b20gcXVldWVkLXBheWxvYWQgYnVpbGRlciBmb3IgdHJhY2tlZCBtdXRhdGlvbnMuXG4gKiBAcHJvcGVydHkge01vZGVsU3luY1JlYWx0aW1lRGVjbGFyYXRpb259IFtyZWFsdGltZV0gLSBEZXByZWNhdGVkOiBzdGF0aWMgbGVnYWN5IHJlYWx0aW1lIGNoYW5uZWwgdGhpcyByZXNvdXJjZSBzdWJzY3JpYmVzIHRocm91Z2ggYHN1YnNjcmliZVJlYWx0aW1lKC4uLilgLiBEZWNsYXJlZCBwdWxsIHNjb3BlcyBzdWJzY3JpYmUgdGhlIGZyYW1ld29yayBzeW5jIGNoYW5uZWwgYXV0b21hdGljYWxseS5cbiAqL1xuXG4vKipcbiAqIE1vZGVsLWxldmVsIHN5bmMgZGVjbGFyYXRpb24gdmFsdWU6IGB0cnVlYCBvcHRzIGluIHdpdGggYWxsIGRlZmF1bHRzLCBhblxuICogb2JqZWN0IGN1c3RvbWl6ZXMgdGhlIGRlcml2ZWQgcmVzb3VyY2UgY29uZmlnLlxuICogQHRlbXBsYXRlIFtUTW9kZWw9YW55XVxuICogQHR5cGVkZWYge2Jvb2xlYW4gfCBNb2RlbFN5bmNEZWNsYXJhdGlvbkNvbmZpZzxUTW9kZWw+fSBNb2RlbFN5bmNEZWNsYXJhdGlvblxuICovXG5cbi8qKlxuICogU2hhcmVkIGFwcC1saWZldGltZSB3ZWJzb2NrZXQgY29ubmVjdGlvbiBhbGwgc3luYyB0cmFmZmljIHJpZGVzLiBNYXRjaGVzIHRoZVxuICogcmVhbHRpbWUgd2Vic29ja2V0IGNsaWVudCBjb250cmFjdDsgdGhlIHN5bmMgY2xpZW50IHJpZGVzIGl0IHdpdGhvdXQgb3duaW5nXG4gKiBpdHMgY29ubmVjdC9kaXNjb25uZWN0IGxpZmVjeWNsZS5cbiAqIEB0eXBlZGVmIHtpbXBvcnQoXCIuLi9jb25maWd1cmF0aW9uLXR5cGVzLmpzXCIpLlZlbG9jaW91c1N5bmNSZWFsdGltZVdlYnNvY2tldENsaWVudH0gU3luY0NsaWVudFNoYXJlZENvbm5lY3Rpb25cbiAqL1xuXG4vKipcbiAqIE9wdGlvbnMgZm9yIGJ1aWxkaW5nIGEgc3luYyBjbGllbnQuIEV2ZXJ5dGhpbmcgZWxzZSDigJQgcmVzb3VyY2VzLCB0cmFuc3BvcnRcbiAqIFBPU1RlcnMsIGF1dGgsIGNvbm5lY3Rpdml0eSwgYmF0Y2ggc2l6ZSDigJQgaXMgZGVyaXZlZCBmcm9tIHRoZSBjb25maWd1cmF0aW9uJ3NcbiAqIHJlZ2lzdGVyZWQgbW9kZWxzIChgc3RhdGljIHN5bmNgKSBhbmQgaXRzIGBzeW5jLmNsaWVudGAgYmxvY2suXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBTeW5jQ2xpZW50T3B0aW9uc1xuICogQHByb3BlcnR5IHtpbXBvcnQoXCIuLi9jb25maWd1cmF0aW9uLmpzXCIpLmRlZmF1bHR9IFtjb25maWd1cmF0aW9uXSAtIENvbmZpZ3VyYXRpb24gb3duaW5nIHRoZSByZWdpc3RlcmVkIG1vZGVscywgdGhlIGBzeW5jLmNsaWVudGAgYmxvY2ssIGFuZCB0aGUgc2NvcGUtc3RvcmUgZGF0YWJhc2UuIERlZmF1bHRzIHRvIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24uXG4gKiBAcHJvcGVydHkgeyhhcmdzOiB7c2NvcGU6IFNlcmlhbGl6ZWRTeW5jU2NvcGV9KSA9PiBzdHJpbmcgfCBudWxsIHwgUHJvbWlzZTxzdHJpbmcgfCBudWxsPn0gW2xlZ2FjeUN1cnNvcl0gLSBTZWVkcyBhIG5ld2x5IGRlY2xhcmVkIHNjb3BlJ3MgY3Vyc29yIChlLmcuIGZyb20gYSBwcmUtc2NvcGUgY3Vyc29yIHN0b3JlKSBzbyBkZXZpY2VzIGRvbid0IHJlLXB1bGwgZXZlcnl0aGluZy5cbiAqIEBwcm9wZXJ0eSB7aW1wb3J0KFwiLi9zeW5jLXNjb3BlLXN0b3JlLmpzXCIpLmRlZmF1bHR9IFtzY29wZVN0b3JlXSAtIFNjb3BlIHN0b3JlIG92ZXJyaWRlICh0ZXN0cykuXG4gKiBAcHJvcGVydHkge1JldHVyblR5cGU8dHlwZW9mIEpTT04ucGFyc2U+fSBbc3luY01vZGVsXSAtIFBlbmRpbmctc3luYyBtb2RlbCBvdmVycmlkZS4gRGVmYXVsdHMgdG8gdGhlIHJlZ2lzdGVyZWQgXCJTeW5jXCIgbW9kZWwuXG4gKi9cblxuLyoqXG4gKiBJbnRlcm5hbCBkZXJpdmVkIHN5bmMgY2xpZW50IGNvbmZpZ3VyYXRpb24gYnVpbHQgYnkgdGhlIFN5bmNDbGllbnRcbiAqIGNvbnN0cnVjdG9yIOKAlCBub3QgYW4gYXBwLWZhY2luZyBBUEkuXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBTeW5jQ2xpZW50Q29uZmlnXG4gKiBAcHJvcGVydHkgeygpID0+IHN0cmluZyB8IFByb21pc2U8c3RyaW5nPn0gYXV0aGVudGljYXRpb25Ub2tlbiAtIFJlc29sdmVzIHRoZSBhdXRoIHRva2VuIHNlbnQgd2l0aCBzeW5jIHJlcXVlc3RzLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IFtiYXRjaFNpemVdIC0gTWF4IHN5bmNzIHBlciByZXF1ZXN0LlxuICogQHByb3BlcnR5IHtpbXBvcnQoXCIuLi9jb25maWd1cmF0aW9uLmpzXCIpLmRlZmF1bHR9IGNvbmZpZ3VyYXRpb24gLSBDb25maWd1cmF0aW9uIG93bmluZyB0aGUgc2NvcGUtc3RvcmUgZGF0YWJhc2UuXG4gKiBAcHJvcGVydHkgeygpID0+IGJvb2xlYW4gfCBQcm9taXNlPGJvb2xlYW4+fSBbaXNPbmxpbmVdIC0gQ29ubmVjdGl2aXR5IGdhdGUgZm9yIHB1bGxzIGFuZCByZXBsYXlzLiBEZWZhdWx0cyB0byBhbHdheXMgb25saW5lLlxuICogQHByb3BlcnR5IHsoYXJnczoge3Njb3BlOiBTZXJpYWxpemVkU3luY1Njb3BlfSkgPT4gc3RyaW5nIHwgbnVsbCB8IFByb21pc2U8c3RyaW5nIHwgbnVsbD59IFtsZWdhY3lDdXJzb3JdIC0gU2VlZHMgYSBuZXdseSBkZWNsYXJlZCBzY29wZSdzIGN1cnNvciAoZS5nLiBmcm9tIGEgcHJlLXNjb3BlIGN1cnNvciBzdG9yZSkgc28gZGV2aWNlcyBkb24ndCByZS1wdWxsIGV2ZXJ5dGhpbmcuXG4gKiBAcHJvcGVydHkgeyhlcnJvcjogRXJyb3IpID0+IHZvaWR9IFtvbkVycm9yXSAtIFJlcG9ydHMgYmFja2dyb3VuZCByZXBsYXkvcHVsbCBmYWlsdXJlcy4gRGVmYXVsdHMgdG8gcmV0aHJvd2luZy5cbiAqIEBwcm9wZXJ0eSB7KHBheWxvYWQ6IGltcG9ydChcIi4vc3luYy1hcGktY2xpZW50LXR5cGVzLmpzXCIpLlN5bmNDaGFuZ2VzUmVxdWVzdCAmIHtzY29wZTogU2VyaWFsaXplZFN5bmNTY29wZX0pID0+IFByb21pc2U8aW1wb3J0KFwiLi9zeW5jLWFwaS1jbGllbnQtdHlwZXMuanNcIikuU3luY0NoYW5nZXNSZXNwb25zZT59IHBvc3RDaGFuZ2VzIC0gUG9zdHMgb25lIGNoYW5nZXMgcmVxdWVzdC5cbiAqIEBwcm9wZXJ0eSB7KHBheWxvYWQ6IHthdXRoZW50aWNhdGlvblRva2VuOiBzdHJpbmcsIHN5bmNzOiBBcnJheTxSZWNvcmQ8c3RyaW5nLCBSZXR1cm5UeXBlPHR5cGVvZiBKU09OLnBhcnNlPj4+fSkgPT4gUHJvbWlzZTxpbXBvcnQoXCIuL3N5bmMtYXBpLWNsaWVudC10eXBlcy5qc1wiKS5TeW5jUmVwbGF5UmVzcG9uc2U+fSBwb3N0UmVwbGF5IC0gUG9zdHMgb25lIHJlcGxheSByZXF1ZXN0LlxuICogQHByb3BlcnR5IHtpbXBvcnQoXCIuLi9jb25maWd1cmF0aW9uLXR5cGVzLmpzXCIpLlZlbG9jaW91c1N5bmNDbGllbnRSZWFsdGltZUNvbmZpZ3VyYXRpb259IFtyZWFsdGltZV0gLSBSZWFsdGltZSBwdXNoIGNvbmZpZ3VyYXRpb24gY29uc3VtZWQgYnkgYHN1YnNjcmliZVJlYWx0aW1lKC4uLilgLlxuICogQHByb3BlcnR5IHtSZWNvcmQ8c3RyaW5nLCBTeW5jQ2xpZW50UmVzb3VyY2VDb25maWc+fSByZXNvdXJjZXMgLSBEZXJpdmVkIHJlc291cmNlIHBvbGljaWVzIGtleWVkIGJ5IHJlc291cmNlL21vZGVsIG5hbWUuXG4gKiBAcHJvcGVydHkge1JldHVyblR5cGU8dHlwZW9mIEpTT04ucGFyc2U+fSBzeW5jTW9kZWwgLSBMb2NhbCBwZW5kaW5nLXN5bmMgbW9kZWwgY2xhc3MuXG4gKiBAcHJvcGVydHkge1N5bmNDbGllbnRTaGFyZWRDb25uZWN0aW9ufSBbd2Vic29ja2V0Q2xpZW50XSAtIFNoYXJlZCBhcHAtbGlmZXRpbWUgd2Vic29ja2V0IGNsaWVudCBpbnN0YW5jZSAodGhlIGxvdy1sZXZlbCBzaGFyZWQtY29ubmVjdGlvbiBmb3JtKS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nIHwgKCgpID0+IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQpfSBbd2Vic29ja2V0VXJsXSAtIFNoYXJlZCBhcHAtbGlmZXRpbWUgd2Vic29ja2V0IFVSTCB0aGUgZnJhbWV3b3JrIGJ1aWxkcyBhIGNsaWVudCBmcm9tLlxuICovXG5cbmV4cG9ydCB7fVxuIl19
|
|
106
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3luYy1jbGllbnQtdHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc3luYy9zeW5jLWNsaWVudC10eXBlcy5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZO0FBRVo7Ozs7OztHQU1HO0FBRUg7Ozs7Ozs7R0FPRztBQUVIOzs7Ozs7Ozs7Ozs7R0FZRztBQUVIOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVIOzs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FrQkc7QUFFSDs7Ozs7R0FLRztBQUVIOzs7OztHQUtHO0FBRUg7Ozs7Ozs7OztHQVNHO0FBRUg7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBaUJHO0FBRUgsT0FBTyxFQUFFLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcblxuLyoqXG4gKiBDbGllbnQtZGVjbGFyZWQgc3luYyBzY29wZSBzZXJpYWxpemVkIGZyb20gYSBtb2RlbCBxdWVyeS5cbiAqIEB0eXBlZGVmIHtvYmplY3R9IFNlcmlhbGl6ZWRTeW5jU2NvcGVcbiAqIEBwcm9wZXJ0eSB7UmVjb3JkPHN0cmluZywgUmV0dXJuVHlwZTx0eXBlb2YgSlNPTi5wYXJzZT4+fSBjb25kaXRpb25zIC0gUGxhaW4gYXR0cmlidXRlIGNvbmRpdGlvbnMgZnJvbSB0aGUgcXVlcnkuXG4gKiBAcHJvcGVydHkge3N0cmluZyB8IG51bGx9IHJlc291cmNlVHlwZSAtIFJlc291cmNlL21vZGVsIG5hbWUgdGhlIHNjb3BlIHdhcyBkZWNsYXJlZCBmb3IsIG9yIG51bGwgZm9yIHRoZSBhbGwtdHlwZXMgKHVzZXIpIHNjb3BlIGNvdmVyaW5nIGV2ZXJ5IHR5cGUgdGhlIHNlcnZlciBhdXRob3JpemVzIGZvciB0aGUgY2FsbGVyLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtvd25lcl0gLSBMb2NhbCBwYXJ0aXRpb24ga2V5OiB0aGUgYXV0aGVudGljYXRlZCBpZGVudGl0eSB0aGF0IGRlY2xhcmVkIHRoZSBzY29wZS4gVXNlZCBvbmx5IHRvIHBhcnRpdGlvbiB0aGUgbG9jYWwgc2NvcGUvY3Vyc29yIHN0b3JlIChuZXZlciBzZW50IHRvIHRoZSBzZXJ2ZXIgYXMgc2NvcGUgY29uZGl0aW9ucyksIHNvIGEgdXNlciBzY29wZSdzIGVtcHR5LWNvbmRpdGlvbnMgY3Vyc29yIGRvZXMgbm90IGxlYWsgYWNyb3NzIGFjY291bnRzIG9uIGEgc2hhcmVkIGRldmljZS5cbiAqL1xuXG4vKipcbiAqIFN0YXRpYyByZWFsdGltZSBjaGFubmVsIGRlY2xhcmF0aW9uIG9uIGEgbW9kZWwncyBgc3RhdGljIHN5bmNgLCBmb3IgY2hhbm5lbHNcbiAqIHdob3NlIG5hbWUgYW5kIHBhcmFtcyBhcmUgc3RhdGljLlxuICogQGRlcHJlY2F0ZWQgRGVjbGFyZWQgcHVsbCBzY29wZXMgc3Vic2NyaWJlIHRoZSBmcmFtZXdvcmsgc3luYyBjaGFubmVsIGF1dG9tYXRpY2FsbHk7IGtlZXAgdGhpcyBvbmx5IGZvciBsZWdhY3kgYXBwIGNoYW5uZWxzLlxuICogQHR5cGVkZWYge29iamVjdH0gTW9kZWxTeW5jUmVhbHRpbWVEZWNsYXJhdGlvblxuICogQHByb3BlcnR5IHtzdHJpbmd9IGNoYW5uZWwgLSBTZXJ2ZXIgY2hhbm5lbCBuYW1lIHRvIHN1YnNjcmliZS5cbiAqIEBwcm9wZXJ0eSB7UmVjb3JkPHN0cmluZywgUmV0dXJuVHlwZTx0eXBlb2YgSlNPTi5wYXJzZT4+fSBbcGFyYW1zXSAtIFN0YXRpYyBzdWJzY3JpYmUgcGFyYW1zLiBUaGUgZnJhbWV3b3JrIGluamVjdHMgYGF1dGhlbnRpY2F0aW9uVG9rZW5gIGF1dG9tYXRpY2FsbHkuXG4gKi9cblxuLyoqXG4gKiBEdXJhYmxlIG9wdGltaXN0aWMtdmVyc2lvbiB0cmFja2luZyBjb25maWd1cmF0aW9uLiBJZGVudGl0eS9ncmFudCBmaWVsZHMgYXJlXG4gKiByZXRhaW5lZCBpbiB0aGUgc2hhcmVkIExvY2FsTXV0YXRpb25Mb2cgbXV0YXRpb24gc2hhcGUgdXNlZCBieSBvZmZsaW5lIHN5bmMuXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBTeW5jQ2xpZW50Q29uZmxpY3RUcmFja2luZ0NvbmZpZ1xuICogQHByb3BlcnR5IHtzdHJpbmd9IGFjdG9yRGV2aWNlSWQgLSBTdGFibGUgZGV2aWNlIGlkZW50aXR5LlxuICogQHByb3BlcnR5IHtzdHJpbmd9IGFjdG9yVXNlcklkIC0gU3RhYmxlIHVzZXIgaWRlbnRpdHkuXG4gKiBAcHJvcGVydHkgeygpID0+IHN0cmluZ30gY2xpZW50TXV0YXRpb25JZCAtIER1cmFibGUgaWRlbXBvdGVuY3ktaWQgZ2VuZXJhdG9yLlxuICogQHByb3BlcnR5IHtpbXBvcnQoXCIuL2xvY2FsLW11dGF0aW9uLWxvZy5qc1wiKS5kZWZhdWx0fSBtdXRhdGlvbkxvZyAtIEV4aXN0aW5nIGR1cmFibGUgbXV0YXRpb24gbG9nLlxuICogQHByb3BlcnR5IHsoKSA9PiBEYXRlfSBbbm93XSAtIE11dGF0aW9uIGNsb2NrLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IG9mZmxpbmVHcmFudElkIC0gR3JhbnQgaWRlbnRpZmllciByZXRhaW5lZCB3aXRoIGludGVudC5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBwb2xpY3lIYXNoIC0gUG9saWN5IGhhc2ggcmV0YWluZWQgd2l0aCBpbnRlbnQuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW3ZlcnNpb25BdHRyaWJ1dGVdIC0gQXV0aG9yaXRhdGl2ZSB2ZXJzaW9uIGF0dHJpYnV0ZTsgZGVmYXVsdHMgdG8gdXBkYXRlZEF0IHdoZW4gcHJlc2VudC5cbiAqL1xuXG4vKipcbiAqIERlY2xhcmF0aXZlIHBlci1yZXNvdXJjZSBzeW5jIHBvbGljeS5cbiAqIEB0eXBlZGVmIHtvYmplY3R9IFN5bmNDbGllbnRSZXNvdXJjZUNvbmZpZ1xuICogQHByb3BlcnR5IHtSZXR1cm5UeXBlPHR5cGVvZiBKU09OLnBhcnNlPn0gbW9kZWxDbGFzcyAtIExvY2FsIG1vZGVsIGNsYXNzIGZvciB0aGlzIHJlc291cmNlLlxuICogQHByb3BlcnR5IHtpbXBvcnQoXCIuL3N5bmMtYXBpLWNsaWVudC10eXBlcy5qc1wiKS5TeW5jUmVzb3VyY2VDb25maWdbXCJhdHRyaWJ1dGVzXCJdfSBbYXR0cmlidXRlc10gLSBQdWxsLWFwcGx5IGF0dHJpYnV0ZSBtYXBwZXIuIFJlcXVpcmVkIGZvciByZXNvdXJjZXMgdGhhdCByZWNlaXZlIHB1bGxlZCBjaGFuZ2VzLlxuICogQHByb3BlcnR5IHtpbXBvcnQoXCIuL3N5bmMtYXBpLWNsaWVudC10eXBlcy5qc1wiKS5TeW5jUmVzb3VyY2VDb25maWdbXCJmaW5kUmVjb3JkXCJdfSBbZmluZFJlY29yZF0gLSBDdXN0b20gcHVsbC1hcHBseSByZWNvcmQgcmVzb2x2ZXIuXG4gKiBAcHJvcGVydHkge2ltcG9ydChcIi4vc3luYy1hcGktY2xpZW50LXR5cGVzLmpzXCIpLlN5bmNSZXNvdXJjZUNvbmZpZ1tcImZpbmRSZWNvcmRGb3JEZWxldGVcIl19IFtmaW5kUmVjb3JkRm9yRGVsZXRlXSAtIEN1c3RvbSBwdWxsLWFwcGx5IGRlbGV0ZSByZXNvbHZlci5cbiAqIEBwcm9wZXJ0eSB7aW1wb3J0KFwiLi9zeW5jLWFwaS1jbGllbnQtdHlwZXMuanNcIikuU3luY1Jlc291cmNlQ29uZmlnW1wiYWZ0ZXJBcHBseVwiXX0gW2FmdGVyQXBwbHldIC0gUG9zdC1hcHBseSBob29rLlxuICogQHByb3BlcnR5IHtzdHJpbmdbXX0gW2Jvb2xlYW5BdHRyaWJ1dGVzXSAtIEF0dHJpYnV0ZXMgY29lcmNlZCB0aHJvdWdoIHN5bmMgYm9vbGVhbiBwYXJzaW5nIHdoZW4gcXVldWVpbmcuXG4gKiBAcHJvcGVydHkge1N5bmNDbGllbnRDb25mbGljdFRyYWNraW5nQ29uZmlnfSBbY29uZmxpY3RUcmFja2luZ10gLSBPcHQtaW4gZHVyYWJsZSBiYXNlLXZlcnNpb24gY29uZmxpY3QgdHJhY2tpbmcuXG4gKiBAcHJvcGVydHkge3N0cmluZ1tdfSBbbG9jYWxPbmx5QXR0cmlidXRlc10gLSBBdHRyaWJ1dGVzIHN0cmlwcGVkIGZyb20gcXVldWVkIHBheWxvYWRzLlxuICogQHByb3BlcnR5IHtcInVwc2VydFwiIHwgKChhcmdzOiB7b3BlcmF0aW9uOiBcImNyZWF0ZVwiIHwgXCJ1cGRhdGVcIiB8IFwiZGVzdHJveVwiLCByZWNvcmQ6IFJldHVyblR5cGU8dHlwZW9mIEpTT04ucGFyc2U+fSkgPT4gc3RyaW5nKX0gW3N5bmNUeXBlXSAtIE1hcHMgYSBtdXRhdGlvbiBvcGVyYXRpb24gdG8gYSBzeW5jIHR5cGUuIFRoZSBcInVwc2VydFwiIGZsYWcgcXVldWVzIGNyZWF0ZXMgYW5kIHVwZGF0ZXMgYXMgXCJ1cGRhdGVcIiByb3dzICh0aGUgc2VydmVyIHVwc2VydHMgYnkgcmVzb3VyY2UgaWQpIGFuZCBkZXN0cm95cyBhcyBcImRlbGV0ZVwiLiBEZWZhdWx0cyB0byB0aGUgb3BlcmF0aW9uIG5hbWUgd2l0aCBkZXN0cm95IG1hcHBlZCB0byBcImRlbGV0ZVwiLlxuICogQHByb3BlcnR5IHsoYXJnczoge29wZXJhdGlvbjogXCJjcmVhdGVcIiB8IFwidXBkYXRlXCIgfCBcImRlc3Ryb3lcIiwgcmVjb3JkOiBSZXR1cm5UeXBlPHR5cGVvZiBKU09OLnBhcnNlPn0pID0+IFJlY29yZDxzdHJpbmcsIFJldHVyblR5cGU8dHlwZW9mIEpTT04ucGFyc2U+Pn0gW3RyYWNrZWREYXRhXSAtIEN1c3RvbSBxdWV1ZWQtcGF5bG9hZCBidWlsZGVyIGZvciB0cmFja2VkIG11dGF0aW9ucy5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbiB8IHtvcGVyYXRpb25zOiBBcnJheTxcImNyZWF0ZVwiIHwgXCJ1cGRhdGVcIiB8IFwiZGVzdHJveVwiPn19IFt0cmFja10gLSBBdXRvbWF0aWMgbXV0YXRpb24gdHJhY2tpbmcgcG9saWN5LiBPbiBieSBkZWZhdWx0IChjcmVhdGVzIGFuZCB1cGRhdGVzIHF1ZXVlIGF1dG9tYXRpY2FsbHkpOyBgZmFsc2VgIG9wdHMgdGhlIHJlc291cmNlIG91dCwgYHRydWVgIGFkZHMgZGVzdHJveXMsIGB7b3BlcmF0aW9uc31gIG5hcnJvd3MgdGhlIHRyYWNrZWQgb3BlcmF0aW9ucy5cbiAqIEBwcm9wZXJ0eSB7TW9kZWxTeW5jUmVhbHRpbWVEZWNsYXJhdGlvbn0gW3JlYWx0aW1lXSAtIERlcHJlY2F0ZWQ6IHN0YXRpYyBsZWdhY3kgcmVhbHRpbWUgY2hhbm5lbCB0aGlzIHJlc291cmNlIHN1YnNjcmliZXMgdGhyb3VnaCBgc3Vic2NyaWJlUmVhbHRpbWUoLi4uKWAuIERlY2xhcmVkIHB1bGwgc2NvcGVzIHN1YnNjcmliZSB0aGUgZnJhbWV3b3JrIHN5bmMgY2hhbm5lbCBhdXRvbWF0aWNhbGx5LlxuICovXG5cbi8qKlxuICogTW9kZWwtbGV2ZWwgY2xpZW50IHN5bmMgZGVjbGFyYXRpb24gcmVhZCBmcm9tIGBzdGF0aWMgc3luY2AgYnlcbiAqIGBTeW5jQ2xpZW50LmZyb21Db25maWd1cmF0aW9uKC4uLilgLiBgdHJ1ZWAgb3B0cyB0aGUgbW9kZWwgaW4gd2l0aCBhbGxcbiAqIGRlZmF1bHRzOyBhbiBvYmplY3QgY3VzdG9taXplcyB0aGUgZGVyaXZlZCByZXNvdXJjZSBjb25maWcuXG4gKiBAdGVtcGxhdGUgW1RNb2RlbD1hbnldXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBNb2RlbFN5bmNEZWNsYXJhdGlvbkNvbmZpZ1xuICogQHByb3BlcnR5IHtpbXBvcnQoXCIuL3N5bmMtYXBpLWNsaWVudC10eXBlcy5qc1wiKS5TeW5jUmVzb3VyY2VDb25maWdbXCJhZnRlckFwcGx5XCJdfSBbYWZ0ZXJBcHBseV0gLSBQb3N0LWFwcGx5IGhvb2suXG4gKiBAcHJvcGVydHkge2ltcG9ydChcIi4vc3luYy1hcGktY2xpZW50LXR5cGVzLmpzXCIpLlN5bmNSZXNvdXJjZUNvbmZpZ1tcImF0dHJpYnV0ZXNcIl19IFthdHRyaWJ1dGVzXSAtIFB1bGwtYXBwbHkgYXR0cmlidXRlIG1hcHBlci4gUmVxdWlyZWQgZm9yIHJlc291cmNlcyB0aGF0IHJlY2VpdmUgcHVsbGVkIGNoYW5nZXMuXG4gKiBAcHJvcGVydHkge3N0cmluZ1tdfSBbYm9vbGVhbkF0dHJpYnV0ZXNdIC0gRXh0cmEgYm9vbGVhbiBhdHRyaWJ1dGVzIG1lcmdlZCB3aXRoIHRoZSBib29sZWFuIGNvbHVtbnMgZGVyaXZlZCBmcm9tIGNvbHVtbiB0eXBlcy5cbiAqIEBwcm9wZXJ0eSB7U3luY0NsaWVudENvbmZsaWN0VHJhY2tpbmdDb25maWd9IFtjb25mbGljdFRyYWNraW5nXSAtIE9wdC1pbiBkdXJhYmxlIGJhc2UtdmVyc2lvbiBjb25mbGljdCB0cmFja2luZy5cbiAqIEBwcm9wZXJ0eSB7aW1wb3J0KFwiLi9zeW5jLWFwaS1jbGllbnQtdHlwZXMuanNcIikuU3luY1Jlc291cmNlQ29uZmlnW1wiZmluZFJlY29yZFwiXX0gW2ZpbmRSZWNvcmRdIC0gQ3VzdG9tIHB1bGwtYXBwbHkgcmVjb3JkIHJlc29sdmVyLlxuICogQHByb3BlcnR5IHtpbXBvcnQoXCIuL3N5bmMtYXBpLWNsaWVudC10eXBlcy5qc1wiKS5TeW5jUmVzb3VyY2VDb25maWdbXCJmaW5kUmVjb3JkRm9yRGVsZXRlXCJdfSBbZmluZFJlY29yZEZvckRlbGV0ZV0gLSBDdXN0b20gcHVsbC1hcHBseSBkZWxldGUgcmVzb2x2ZXIuXG4gKiBAcHJvcGVydHkge3N0cmluZ1tdfSBbbG9jYWxPbmx5QXR0cmlidXRlc10gLSBFeHRyYSBsb2NhbC1vbmx5IGF0dHJpYnV0ZXMgbWVyZ2VkIHdpdGggdGhlIGRlcml2ZWQgcHJpbWFyeSBrZXksIGNyZWF0ZWRBdC91cGRhdGVkQXQsIGFuZCBzeW5jIGJvb2trZWVwaW5nIGF0dHJpYnV0ZXMuXG4gKiBAcHJvcGVydHkge2ltcG9ydChcIi4vc3luYy1wdWJsaXNoZXItdHlwZXMuanNcIikuU3luY1B1Ymxpc2hEZWNsYXJhdGlvbjxUTW9kZWw+fSBbcHVibGlzaF0gLSBTZXJ2ZXItc2lkZSBwdWJsaXNoIGRlY2xhcmF0aW9uIGNvbnN1bWVkIGJ5IGBTeW5jUHVibGlzaGVyLmZyb21Db25maWd1cmF0aW9uKC4uLilgIG9uIHRoZSBiYWNrZW5kOyBpZ25vcmVkIGJ5IHRoZSBjbGllbnQuXG4gKiBAcHJvcGVydHkge1widXBzZXJ0XCIgfCAoKGFyZ3M6IHtvcGVyYXRpb246IFwiY3JlYXRlXCIgfCBcInVwZGF0ZVwiIHwgXCJkZXN0cm95XCIsIHJlY29yZDogUmV0dXJuVHlwZTx0eXBlb2YgSlNPTi5wYXJzZT59KSA9PiBzdHJpbmcpfSBbc3luY1R5cGVdIC0gU3luYyB0eXBlIGZsYWcgb3IgbWFwcGVyIChzZWUgU3luY0NsaWVudFJlc291cmNlQ29uZmlnKS5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbiB8IEFycmF5PFwiY3JlYXRlXCIgfCBcInVwZGF0ZVwiIHwgXCJkZXN0cm95XCI+IHwge29wZXJhdGlvbnM6IEFycmF5PFwiY3JlYXRlXCIgfCBcInVwZGF0ZVwiIHwgXCJkZXN0cm95XCI+fX0gW3RyYWNrXSAtIEF1dG9tYXRpYyBtdXRhdGlvbiB0cmFja2luZyBwb2xpY3k7IGFuIGFycmF5IGlzIHNob3J0aGFuZCBmb3Ige29wZXJhdGlvbnN9LiBPbiBieSBkZWZhdWx0IChjcmVhdGVzIGFuZCB1cGRhdGVzIHF1ZXVlIGF1dG9tYXRpY2FsbHkpOyBgZmFsc2VgIG9wdHMgdGhlIG1vZGVsIG91dCAoZm9yIG1vZGVscyB3cml0dGVuIGJ5IG5vbi11c2VyIGZsb3dzKSwgYHRydWVgIGFkZHMgZGVzdHJveXMuXG4gKiBAcHJvcGVydHkgeyhhcmdzOiB7b3BlcmF0aW9uOiBcImNyZWF0ZVwiIHwgXCJ1cGRhdGVcIiB8IFwiZGVzdHJveVwiLCByZWNvcmQ6IFJldHVyblR5cGU8dHlwZW9mIEpTT04ucGFyc2U+fSkgPT4gUmVjb3JkPHN0cmluZywgUmV0dXJuVHlwZTx0eXBlb2YgSlNPTi5wYXJzZT4+fSBbdHJhY2tlZERhdGFdIC0gQ3VzdG9tIHF1ZXVlZC1wYXlsb2FkIGJ1aWxkZXIgZm9yIHRyYWNrZWQgbXV0YXRpb25zLlxuICogQHByb3BlcnR5IHtNb2RlbFN5bmNSZWFsdGltZURlY2xhcmF0aW9ufSBbcmVhbHRpbWVdIC0gRGVwcmVjYXRlZDogc3RhdGljIGxlZ2FjeSByZWFsdGltZSBjaGFubmVsIHRoaXMgcmVzb3VyY2Ugc3Vic2NyaWJlcyB0aHJvdWdoIGBzdWJzY3JpYmVSZWFsdGltZSguLi4pYC4gRGVjbGFyZWQgcHVsbCBzY29wZXMgc3Vic2NyaWJlIHRoZSBmcmFtZXdvcmsgc3luYyBjaGFubmVsIGF1dG9tYXRpY2FsbHkuXG4gKi9cblxuLyoqXG4gKiBNb2RlbC1sZXZlbCBzeW5jIGRlY2xhcmF0aW9uIHZhbHVlOiBgdHJ1ZWAgb3B0cyBpbiB3aXRoIGFsbCBkZWZhdWx0cywgYW5cbiAqIG9iamVjdCBjdXN0b21pemVzIHRoZSBkZXJpdmVkIHJlc291cmNlIGNvbmZpZy5cbiAqIEB0ZW1wbGF0ZSBbVE1vZGVsPWFueV1cbiAqIEB0eXBlZGVmIHtib29sZWFuIHwgTW9kZWxTeW5jRGVjbGFyYXRpb25Db25maWc8VE1vZGVsPn0gTW9kZWxTeW5jRGVjbGFyYXRpb25cbiAqL1xuXG4vKipcbiAqIFNoYXJlZCBhcHAtbGlmZXRpbWUgd2Vic29ja2V0IGNvbm5lY3Rpb24gYWxsIHN5bmMgdHJhZmZpYyByaWRlcy4gTWF0Y2hlcyB0aGVcbiAqIHJlYWx0aW1lIHdlYnNvY2tldCBjbGllbnQgY29udHJhY3Q7IHRoZSBzeW5jIGNsaWVudCByaWRlcyBpdCB3aXRob3V0IG93bmluZ1xuICogaXRzIGNvbm5lY3QvZGlzY29ubmVjdCBsaWZlY3ljbGUuXG4gKiBAdHlwZWRlZiB7aW1wb3J0KFwiLi4vY29uZmlndXJhdGlvbi10eXBlcy5qc1wiKS5WZWxvY2lvdXNTeW5jUmVhbHRpbWVXZWJzb2NrZXRDbGllbnR9IFN5bmNDbGllbnRTaGFyZWRDb25uZWN0aW9uXG4gKi9cblxuLyoqXG4gKiBPcHRpb25zIGZvciBidWlsZGluZyBhIHN5bmMgY2xpZW50LiBFdmVyeXRoaW5nIGVsc2Ug4oCUIHJlc291cmNlcywgdHJhbnNwb3J0XG4gKiBQT1NUZXJzLCBhdXRoLCBjb25uZWN0aXZpdHksIGJhdGNoIHNpemUg4oCUIGlzIGRlcml2ZWQgZnJvbSB0aGUgY29uZmlndXJhdGlvbidzXG4gKiByZWdpc3RlcmVkIG1vZGVscyAoYHN0YXRpYyBzeW5jYCkgYW5kIGl0cyBgc3luYy5jbGllbnRgIGJsb2NrLlxuICogQHR5cGVkZWYge29iamVjdH0gU3luY0NsaWVudE9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7aW1wb3J0KFwiLi4vY29uZmlndXJhdGlvbi5qc1wiKS5kZWZhdWx0fSBbY29uZmlndXJhdGlvbl0gLSBDb25maWd1cmF0aW9uIG93bmluZyB0aGUgcmVnaXN0ZXJlZCBtb2RlbHMsIHRoZSBgc3luYy5jbGllbnRgIGJsb2NrLCBhbmQgdGhlIHNjb3BlLXN0b3JlIGRhdGFiYXNlLiBEZWZhdWx0cyB0byB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uLlxuICogQHByb3BlcnR5IHsoYXJnczoge3Njb3BlOiBTZXJpYWxpemVkU3luY1Njb3BlfSkgPT4gc3RyaW5nIHwgbnVsbCB8IFByb21pc2U8c3RyaW5nIHwgbnVsbD59IFtsZWdhY3lDdXJzb3JdIC0gU2VlZHMgYSBuZXdseSBkZWNsYXJlZCBzY29wZSdzIGN1cnNvciAoZS5nLiBmcm9tIGEgcHJlLXNjb3BlIGN1cnNvciBzdG9yZSkgc28gZGV2aWNlcyBkb24ndCByZS1wdWxsIGV2ZXJ5dGhpbmcuXG4gKiBAcHJvcGVydHkge2ltcG9ydChcIi4vc3luYy1zY29wZS1zdG9yZS5qc1wiKS5kZWZhdWx0fSBbc2NvcGVTdG9yZV0gLSBTY29wZSBzdG9yZSBvdmVycmlkZSAodGVzdHMpLlxuICogQHByb3BlcnR5IHtSZXR1cm5UeXBlPHR5cGVvZiBKU09OLnBhcnNlPn0gW3N5bmNNb2RlbF0gLSBQZW5kaW5nLXN5bmMgbW9kZWwgb3ZlcnJpZGUuIERlZmF1bHRzIHRvIHRoZSByZWdpc3RlcmVkIFwiU3luY1wiIG1vZGVsLlxuICovXG5cbi8qKlxuICogSW50ZXJuYWwgZGVyaXZlZCBzeW5jIGNsaWVudCBjb25maWd1cmF0aW9uIGJ1aWx0IGJ5IHRoZSBTeW5jQ2xpZW50XG4gKiBjb25zdHJ1Y3RvciDigJQgbm90IGFuIGFwcC1mYWNpbmcgQVBJLlxuICogQHR5cGVkZWYge29iamVjdH0gU3luY0NsaWVudENvbmZpZ1xuICogQHByb3BlcnR5IHsoKSA9PiBzdHJpbmcgfCBQcm9taXNlPHN0cmluZz59IGF1dGhlbnRpY2F0aW9uVG9rZW4gLSBSZXNvbHZlcyB0aGUgYXV0aCB0b2tlbiBzZW50IHdpdGggc3luYyByZXF1ZXN0cy5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbYmF0Y2hTaXplXSAtIE1heCBzeW5jcyBwZXIgcmVxdWVzdC5cbiAqIEBwcm9wZXJ0eSB7aW1wb3J0KFwiLi4vY29uZmlndXJhdGlvbi5qc1wiKS5kZWZhdWx0fSBjb25maWd1cmF0aW9uIC0gQ29uZmlndXJhdGlvbiBvd25pbmcgdGhlIHNjb3BlLXN0b3JlIGRhdGFiYXNlLlxuICogQHByb3BlcnR5IHsoKSA9PiBib29sZWFuIHwgUHJvbWlzZTxib29sZWFuPn0gW2lzT25saW5lXSAtIENvbm5lY3Rpdml0eSBnYXRlIGZvciBwdWxscyBhbmQgcmVwbGF5cy4gRGVmYXVsdHMgdG8gYWx3YXlzIG9ubGluZS5cbiAqIEBwcm9wZXJ0eSB7KGFyZ3M6IHtzY29wZTogU2VyaWFsaXplZFN5bmNTY29wZX0pID0+IHN0cmluZyB8IG51bGwgfCBQcm9taXNlPHN0cmluZyB8IG51bGw+fSBbbGVnYWN5Q3Vyc29yXSAtIFNlZWRzIGEgbmV3bHkgZGVjbGFyZWQgc2NvcGUncyBjdXJzb3IgKGUuZy4gZnJvbSBhIHByZS1zY29wZSBjdXJzb3Igc3RvcmUpIHNvIGRldmljZXMgZG9uJ3QgcmUtcHVsbCBldmVyeXRoaW5nLlxuICogQHByb3BlcnR5IHsoZXJyb3I6IEVycm9yKSA9PiB2b2lkfSBbb25FcnJvcl0gLSBSZXBvcnRzIGJhY2tncm91bmQgcmVwbGF5L3B1bGwgZmFpbHVyZXMuIERlZmF1bHRzIHRvIHJldGhyb3dpbmcuXG4gKiBAcHJvcGVydHkgeyhwYXlsb2FkOiBpbXBvcnQoXCIuL3N5bmMtYXBpLWNsaWVudC10eXBlcy5qc1wiKS5TeW5jQ2hhbmdlc1JlcXVlc3QgJiB7c2NvcGU6IFNlcmlhbGl6ZWRTeW5jU2NvcGV9KSA9PiBQcm9taXNlPGltcG9ydChcIi4vc3luYy1hcGktY2xpZW50LXR5cGVzLmpzXCIpLlN5bmNDaGFuZ2VzUmVzcG9uc2U+fSBwb3N0Q2hhbmdlcyAtIFBvc3RzIG9uZSBjaGFuZ2VzIHJlcXVlc3QuXG4gKiBAcHJvcGVydHkgeyhwYXlsb2FkOiB7YXV0aGVudGljYXRpb25Ub2tlbjogc3RyaW5nLCBzeW5jczogQXJyYXk8UmVjb3JkPHN0cmluZywgUmV0dXJuVHlwZTx0eXBlb2YgSlNPTi5wYXJzZT4+Pn0pID0+IFByb21pc2U8aW1wb3J0KFwiLi9zeW5jLWFwaS1jbGllbnQtdHlwZXMuanNcIikuU3luY1JlcGxheVJlc3BvbnNlPn0gcG9zdFJlcGxheSAtIFBvc3RzIG9uZSByZXBsYXkgcmVxdWVzdC5cbiAqIEBwcm9wZXJ0eSB7aW1wb3J0KFwiLi4vY29uZmlndXJhdGlvbi10eXBlcy5qc1wiKS5WZWxvY2lvdXNTeW5jQ2xpZW50UmVhbHRpbWVDb25maWd1cmF0aW9ufSBbcmVhbHRpbWVdIC0gUmVhbHRpbWUgcHVzaCBjb25maWd1cmF0aW9uIGNvbnN1bWVkIGJ5IGBzdWJzY3JpYmVSZWFsdGltZSguLi4pYC5cbiAqIEBwcm9wZXJ0eSB7UmVjb3JkPHN0cmluZywgU3luY0NsaWVudFJlc291cmNlQ29uZmlnPn0gcmVzb3VyY2VzIC0gRGVyaXZlZCByZXNvdXJjZSBwb2xpY2llcyBrZXllZCBieSByZXNvdXJjZS9tb2RlbCBuYW1lLlxuICogQHByb3BlcnR5IHtSZXR1cm5UeXBlPHR5cGVvZiBKU09OLnBhcnNlPn0gc3luY01vZGVsIC0gTG9jYWwgcGVuZGluZy1zeW5jIG1vZGVsIGNsYXNzLlxuICogQHByb3BlcnR5IHtTeW5jQ2xpZW50U2hhcmVkQ29ubmVjdGlvbn0gW3dlYnNvY2tldENsaWVudF0gLSBTaGFyZWQgYXBwLWxpZmV0aW1lIHdlYnNvY2tldCBjbGllbnQgaW5zdGFuY2UgKHRoZSBsb3ctbGV2ZWwgc2hhcmVkLWNvbm5lY3Rpb24gZm9ybSkuXG4gKiBAcHJvcGVydHkge3N0cmluZyB8ICgoKSA9PiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkKX0gW3dlYnNvY2tldFVybF0gLSBTaGFyZWQgYXBwLWxpZmV0aW1lIHdlYnNvY2tldCBVUkwgdGhlIGZyYW1ld29yayBidWlsZHMgYSBjbGllbnQgZnJvbS5cbiAqL1xuXG5leHBvcnQge31cbiJdfQ==
|
|
@@ -31,14 +31,18 @@ export default class SyncClient {
|
|
|
31
31
|
_scheduledReplay: Promise<void> | null;
|
|
32
32
|
/** @type {Record<string, import("./sync-api-client-types.js").SyncResourceConfig> | null} */
|
|
33
33
|
_pullResourceConfigs: Record<string, import("./sync-api-client-types.js").SyncResourceConfig> | null;
|
|
34
|
-
/** @type {Array<{callback: (record: ReturnType<typeof JSON.parse>) => Promise<void
|
|
34
|
+
/** @type {Array<{callback: (record: ReturnType<typeof JSON.parse>) => Promise<void> | void, callbackName: "afterCreate" | "afterUpdate" | "afterDestroy" | "beforeUpdate" | "beforeDestroy", modelClass: ReturnType<typeof JSON.parse>}>} */
|
|
35
35
|
_trackedCallbacks: Array<{
|
|
36
|
-
callback: (record: ReturnType<typeof JSON.parse>) => Promise<void
|
|
37
|
-
callbackName: "afterCreate" | "afterUpdate" | "afterDestroy";
|
|
36
|
+
callback: (record: ReturnType<typeof JSON.parse>) => Promise<void> | void;
|
|
37
|
+
callbackName: "afterCreate" | "afterUpdate" | "afterDestroy" | "beforeUpdate" | "beforeDestroy";
|
|
38
38
|
modelClass: ReturnType<typeof JSON.parse>;
|
|
39
39
|
}>;
|
|
40
40
|
/** @type {WeakSet<object>} */
|
|
41
41
|
_remoteApplyRecords: WeakSet<object>;
|
|
42
|
+
/** @type {Map<string, number>} */
|
|
43
|
+
_remoteGenerations: Map<string, number>;
|
|
44
|
+
/** @type {WeakMap<object, Array<string | number | null>>} */
|
|
45
|
+
_capturedBaseVersions: WeakMap<object, Array<string | number | null>>;
|
|
42
46
|
_withoutTrackingDepth: number;
|
|
43
47
|
/** @type {Logger | {error: (...messages: Array<ReturnType<typeof JSON.parse>>) => Promise<void>} | null} */
|
|
44
48
|
_logger: Logger | {
|
|
@@ -316,20 +320,65 @@ export default class SyncClient {
|
|
|
316
320
|
/**
|
|
317
321
|
* Queues a local model change as a pending sync row and schedules an immediate
|
|
318
322
|
* replay attempt (kept pending while offline or when the backend rejects it).
|
|
319
|
-
* @param {{resource: ReturnType<typeof JSON.parse>, data?: Record<string, ReturnType<typeof JSON.parse>>, syncType?: string}} args - Queue args.
|
|
320
|
-
* @returns {Promise<ReturnType<typeof JSON.parse
|
|
323
|
+
* @param {{baseVersion?: string | number | null, resource: ReturnType<typeof JSON.parse>, data?: Record<string, ReturnType<typeof JSON.parse>>, operation?: "create" | "update" | "destroy", syncType?: string}} args - Queue args.
|
|
324
|
+
* @returns {Promise<ReturnType<typeof JSON.parse> | import("./local-mutation-log.js").LocalMutationLogRecord>} Pending local sync row or durable conflict-tracked intent.
|
|
321
325
|
*/
|
|
322
|
-
queue({ data, resource, syncType }: {
|
|
326
|
+
queue({ baseVersion, data, operation, resource, syncType }: {
|
|
327
|
+
baseVersion?: string | number | null;
|
|
323
328
|
resource: ReturnType<typeof JSON.parse>;
|
|
324
329
|
data?: Record<string, ReturnType<typeof JSON.parse>>;
|
|
330
|
+
operation?: "create" | "update" | "destroy";
|
|
325
331
|
syncType?: string;
|
|
326
|
-
}): Promise<ReturnType<typeof JSON.parse
|
|
332
|
+
}): Promise<ReturnType<typeof JSON.parse> | import("./local-mutation-log.js").LocalMutationLogRecord>;
|
|
327
333
|
/**
|
|
328
334
|
* Drains pending local sync rows to the backend (single-flighted, online-gated).
|
|
329
335
|
* Rows are only marked successful after the backend acknowledges them.
|
|
330
336
|
* @returns {Promise<void>}
|
|
331
337
|
*/
|
|
332
338
|
replayPending(): Promise<void>;
|
|
339
|
+
/**
|
|
340
|
+
* Records an authoritative remote observation so an in-flight acknowledgement
|
|
341
|
+
* cannot rebase a successor across that observation.
|
|
342
|
+
* @param {{resourceId: string | number, resourceType: string, version?: string | number | null}} args - Remote identity.
|
|
343
|
+
* @returns {void}
|
|
344
|
+
*/
|
|
345
|
+
noteRemoteVersion({ resourceId, resourceType, version }: {
|
|
346
|
+
resourceId: string | number;
|
|
347
|
+
resourceType: string;
|
|
348
|
+
version?: string | number | null;
|
|
349
|
+
}): void;
|
|
350
|
+
/**
|
|
351
|
+
* Reads the authoritative base version observed before a local mutation.
|
|
352
|
+
* @param {{operation: "create" | "update" | "destroy", record: ReturnType<typeof JSON.parse>, resourceConfig: import("./sync-client-types.js").SyncClientResourceConfig}} args - Version args.
|
|
353
|
+
* @returns {string | number | null} Base version.
|
|
354
|
+
*/
|
|
355
|
+
baseVersionFor({ operation, record, resourceConfig }: {
|
|
356
|
+
operation: "create" | "update" | "destroy";
|
|
357
|
+
record: ReturnType<typeof JSON.parse>;
|
|
358
|
+
resourceConfig: import("./sync-client-types.js").SyncClientResourceConfig;
|
|
359
|
+
}): string | number | null;
|
|
360
|
+
/**
|
|
361
|
+
* Reads the pre-assignment value exposed by record changes during beforeUpdate.
|
|
362
|
+
* Deletes have no version change pair and use the record's current version.
|
|
363
|
+
* @param {{operation: "create" | "update" | "destroy", record: ReturnType<typeof JSON.parse>, resourceConfig: import("./sync-client-types.js").SyncClientResourceConfig}} args - Version args.
|
|
364
|
+
* @returns {string | number | null} Pre-mutation base version.
|
|
365
|
+
*/
|
|
366
|
+
preMutationBaseVersionFor({ operation, record, resourceConfig }: {
|
|
367
|
+
operation: "create" | "update" | "destroy";
|
|
368
|
+
record: ReturnType<typeof JSON.parse>;
|
|
369
|
+
resourceConfig: import("./sync-client-types.js").SyncClientResourceConfig;
|
|
370
|
+
}): string | number | null;
|
|
371
|
+
/**
|
|
372
|
+
* Consumes the base captured for this lifecycle event before its after-commit
|
|
373
|
+
* closure is deferred, preserving repeated same-record writes in one transaction.
|
|
374
|
+
* @param {{operation: "create" | "update" | "destroy", record: ReturnType<typeof JSON.parse>, resourceConfig: import("./sync-client-types.js").SyncClientResourceConfig}} args - Capture args.
|
|
375
|
+
* @returns {string | number | null} Captured base version.
|
|
376
|
+
*/
|
|
377
|
+
capturedBaseVersionFor({ operation, record, resourceConfig }: {
|
|
378
|
+
operation: "create" | "update" | "destroy";
|
|
379
|
+
record: ReturnType<typeof JSON.parse>;
|
|
380
|
+
resourceConfig: import("./sync-client-types.js").SyncClientResourceConfig;
|
|
381
|
+
}): string | number | null;
|
|
333
382
|
/**
|
|
334
383
|
* Schedules a background replay attempt without blocking the caller.
|
|
335
384
|
* Failures go to config.onError (or rethrow when none is configured).
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync-client.d.ts","sourceRoot":"","sources":["../../../src/sync/sync-client.js"],"names":[],"mappings":"AAEA,OAAO,aAAa,MAAM,qBAAqB,CAAA;AAE/C,OAAO,MAAM,MAAM,cAAc,CAAA;AAMjC,OAAO,kBAAkB,MAAM,2BAA2B,CAAA;AAuB1D;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,OAAO,OAAO,UAAU;IA6C3B,gEAAgE;IAC3D,MAAM,EADA,OAAO,wBAAwB,EAAE,gBAAgB;IAgBvD,aAAa;IAClB,wCAAwC;IACnC,eAAe,EADT,kBAAkB,GAAG,IAAI;IAEpC,sMAAsM;IACjM,eAAe,EADT,OAAO,wBAAwB,EAAE,0BAA0B,GAAG,IAAI,GAAG,SAAS;IAEzF,mCAAmC;IAC9B,0BAA0B,EADpB,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI;IAE/B,4DAA4D;IACvD,eAAe,EADT,YAAY,GAAG,aAAa,GAAG,cAAc;IAExD,6DAA6D;IACxD,WAAW,EADL,OAAO,uBAAuB,EAAE,OAAO,GAAG,IAAI;IAEzD,mCAAmC;IAC9B,gBAAgB,EADV,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI;IAE/B,6FAA6F;IACxF,oBAAoB,EADd,MAAM,CAAC,MAAM,EAAE,OAAO,4BAA4B,EAAE,kBAAkB,CAAC,GAAG,IAAI;IAEzF,
|
|
1
|
+
{"version":3,"file":"sync-client.d.ts","sourceRoot":"","sources":["../../../src/sync/sync-client.js"],"names":[],"mappings":"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"}
|