velocious 1.0.494 → 1.0.496
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/build/database/record/index.js +2 -0
- package/build/database/record/validation-messages.js +50 -0
- package/build/database/record/validators/length.js +52 -0
- package/build/database/record/validators/presence.js +4 -1
- package/build/database/record/validators/uniqueness.js +4 -1
- package/build/frontend-model-resource/base-resource.js +175 -5
- package/build/frontend-models/resource-definition.js +49 -1
- package/build/src/database/record/index.d.ts.map +1 -1
- package/build/src/database/record/index.js +3 -1
- package/build/src/database/record/validation-messages.d.ts +38 -0
- package/build/src/database/record/validation-messages.d.ts.map +1 -0
- package/build/src/database/record/validation-messages.js +45 -0
- package/build/src/database/record/validators/length.d.ts +12 -0
- package/build/src/database/record/validators/length.d.ts.map +1 -0
- package/build/src/database/record/validators/length.js +45 -0
- package/build/src/database/record/validators/presence.d.ts.map +1 -1
- package/build/src/database/record/validators/presence.js +4 -2
- package/build/src/database/record/validators/uniqueness.d.ts.map +1 -1
- package/build/src/database/record/validators/uniqueness.js +4 -2
- package/build/src/frontend-model-resource/base-resource.d.ts +184 -5
- package/build/src/frontend-model-resource/base-resource.d.ts.map +1 -1
- package/build/src/frontend-model-resource/base-resource.js +155 -6
- package/build/src/frontend-models/resource-definition.d.ts +41 -0
- package/build/src/frontend-models/resource-definition.d.ts.map +1 -1
- package/build/src/frontend-models/resource-definition.js +45 -2
- package/build/src/sync/sync-envelope-replay-service.d.ts +166 -3
- package/build/src/sync/sync-envelope-replay-service.d.ts.map +1 -1
- package/build/src/sync/sync-envelope-replay-service.js +304 -12
- package/build/src/sync/sync-replay-upsert-applier.d.ts +1 -0
- package/build/src/sync/sync-replay-upsert-applier.d.ts.map +1 -1
- package/build/src/sync/sync-replay-upsert-applier.js +2 -1
- package/build/src/sync/sync-resource-base.d.ts +16 -32
- package/build/src/sync/sync-resource-base.d.ts.map +1 -1
- package/build/src/sync/sync-resource-base.js +31 -43
- package/build/src/testing/test-runner.d.ts +24 -0
- package/build/src/testing/test-runner.d.ts.map +1 -1
- package/build/src/testing/test-runner.js +99 -9
- package/build/sync/sync-envelope-replay-service.js +350 -10
- package/build/sync/sync-replay-upsert-applier.js +1 -0
- package/build/sync/sync-resource-base.js +32 -45
- package/build/testing/test-runner.js +104 -8
- package/build/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/scripts/run-tests.js +6 -0
- package/src/database/record/index.js +2 -0
- package/src/database/record/validation-messages.js +50 -0
- package/src/database/record/validators/length.js +52 -0
- package/src/database/record/validators/presence.js +4 -1
- package/src/database/record/validators/uniqueness.js +4 -1
- package/src/frontend-model-resource/base-resource.js +175 -5
- package/src/frontend-models/resource-definition.js +49 -1
- package/src/sync/sync-envelope-replay-service.js +350 -10
- package/src/sync/sync-replay-upsert-applier.js +1 -0
- package/src/sync/sync-resource-base.js +32 -45
- package/src/testing/test-runner.js +104 -8
- package/build/src/sync/sync-attribute-normalizer.d.ts +0 -105
- package/build/src/sync/sync-attribute-normalizer.d.ts.map +0 -1
- package/build/src/sync/sync-attribute-normalizer.js +0 -172
- package/build/sync/sync-attribute-normalizer.js +0 -186
- package/src/sync/sync-attribute-normalizer.js +0 -186
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
* present-key filtering, per-field type coercion, unknown-key rejection, the
|
|
6
6
|
* find-or-create upsert, the delete branch, optional snapshot serialization,
|
|
7
7
|
* and the domain after-apply tail. Apps declare only the field map and hooks.
|
|
8
|
+
* @deprecated Prefer resource-routed replay (`SyncEnvelopeReplayService` with `configuration`/`resourceTypeOverrides` and resource `writableAttributes` permit lists) — value casting and validation belong to the record layer. This applier remains for released applyHandlers adopters and will be removed after their migration.
|
|
8
9
|
*/
|
|
9
10
|
export default class SyncReplayUpsertApplier {
|
|
10
11
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync-replay-upsert-applier.d.ts","sourceRoot":"","sources":["../../../src/sync/sync-replay-upsert-applier.js"],"names":[],"mappings":"AAwCA
|
|
1
|
+
{"version":3,"file":"sync-replay-upsert-applier.d.ts","sourceRoot":"","sources":["../../../src/sync/sync-replay-upsert-applier.js"],"names":[],"mappings":"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"}
|
|
@@ -39,6 +39,7 @@ function optionalSyncDate(value, label) {
|
|
|
39
39
|
* present-key filtering, per-field type coercion, unknown-key rejection, the
|
|
40
40
|
* find-or-create upsert, the delete branch, optional snapshot serialization,
|
|
41
41
|
* and the domain after-apply tail. Apps declare only the field map and hooks.
|
|
42
|
+
* @deprecated Prefer resource-routed replay (`SyncEnvelopeReplayService` with `configuration`/`resourceTypeOverrides` and resource `writableAttributes` permit lists) — value casting and validation belong to the record layer. This applier remains for released applyHandlers adopters and will be removed after their migration.
|
|
42
43
|
*/
|
|
43
44
|
export default class SyncReplayUpsertApplier {
|
|
44
45
|
/**
|
|
@@ -155,4 +156,4 @@ export default class SyncReplayUpsertApplier {
|
|
|
155
156
|
return mappedAttributes;
|
|
156
157
|
}
|
|
157
158
|
}
|
|
158
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3luYy1yZXBsYXktdXBzZXJ0LWFwcGxpZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc3luYy9zeW5jLXJlcGxheS11cHNlcnQtYXBwbGllci5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZO0FBRVosT0FBTyxFQUFDLGFBQWEsRUFBRSxlQUFlLEVBQUUsY0FBYyxFQUFDLE1BQU0sU0FBUyxDQUFBO0FBRXRFLE9BQU8sYUFBYSxNQUFNLHNCQUFzQixDQUFBO0FBRWhEOzs7O0dBSUc7QUFDSCxNQUFNLFdBQVcsR0FBRztJQUNsQixhQUFhLEVBQUUsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxhQUFhLENBQUMsd0JBQXdCLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQztJQUNyRixVQUFVLEVBQUUsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDO0lBQzVELFdBQVcsRUFBRSxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDO0lBQzFELGFBQWEsRUFBRSxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLGVBQWUsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDO0lBQzlELEdBQUcsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSztJQUNyQixZQUFZLEVBQUUsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxjQUFjLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQztDQUM3RCxDQUFBO0FBRUQ7Ozs7O0dBS0c7QUFDSCxTQUFTLGdCQUFnQixDQUFDLEtBQUssRUFBRSxLQUFLO0lBQ3BDLElBQUksS0FBSyxLQUFLLElBQUksSUFBSSxLQUFLLEtBQUssU0FBUztRQUFFLE9BQU8sSUFBSSxDQUFBO0lBRXRELElBQUksS0FBSyxZ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QU0sQ0FBQyxPQUFPLENBQUMsQ0FBQTtZQUV0QyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7Z0JBQ2YsV0FBVyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQTtnQkFDekIsU0FBUTtZQUNWLENBQUM7WUFFRCxJQUFJLE9BQU8sU0FBUyxLQUFLLFVBQVUsRUFBRSxDQUFDO2dCQUNwQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsR0FBRyxTQUFTLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFBO2dCQUNyRCxTQUFRO1lBQ1YsQ0FBQztZQUVELE1BQU0sU0FBUyxHQUFHLE9BQU8sU0FBUyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFBO1lBRTVFLElBQUksU0FBUyxLQUFLLFNBQVM7Z0JBQUUsU0FBUTtZQUVyQyxNQUFNLE1BQU0sR0FBRyxPQUFPLFNBQVMsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sSUFBSSxPQUFPLENBQUE7WUFFcEYsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLEdBQUcsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQTtRQUNuRSxDQUFDO1FBRUQsSUFBSSxXQUFXLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsUUFBUSxLQUFLLE9BQU8sRUFBRSxDQUFDO1lBQ3hELE1BQU0sSUFBSSxLQUFLLENBQUMsMkJBQTJCLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFBO1FBQ3RFLENBQUM7UUFFRCxPQUFPLGdCQUFnQixDQUFBO0lBQ3pCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG5pbXBvcnQge29wdGlvbmFsRmxvYXQsIG9wdGlvbmFsSW50ZWdlciwgb3B0aW9uYWxTdHJpbmd9IGZyb20gXCJ0eXBhbmljXCJcblxuaW1wb3J0IFN5bmNBcGlDbGllbnQgZnJvbSBcIi4vc3luYy1hcGktY2xpZW50LmpzXCJcblxuLyoqXG4gKiBDb2VyY2VycyBmb3IgdGhlIGRlY2xhcmF0aXZlIHN5bmMgZmllbGQgdHlwZXMuIEFsbCBhcmUgcHJlc2VudC1rZXkgYmFzZWQ6XG4gKiBhIGZpZWxkIGlzIG9ubHkgYXBwbGllZCB3aGVuIGl0cyBrZXkgZXhpc3RzIGluIHRoZSBtdXRhdGlvbiBkYXRhLlxuICogQHR5cGUge1JlY29yZDxzdHJpbmcsICh2YWx1ZTogPywgbGFiZWw6IHN0cmluZykgPT4gPz59XG4gKi9cbmNvbnN0IEZJRUxEX1RZUEVTID0ge1xuICBib29sZWFuT3JOdWxsOiAodmFsdWUsIGxhYmVsKSA9PiBTeW5jQXBpQ2xpZW50Lm9wdGlvbmFsQm9vbGVhblN5bmNWYWx1ZSh2YWx1ZSwgbGFiZWwpLFxuICBkYXRlT3JOdWxsOiAodmFsdWUsIGxhYmVsKSA9PiBvcHRpb25hbFN5bmNEYXRlKHZhbHVlLCBsYWJlbCksXG4gIGZsb2F0T3JOdWxsOiAodmFsdWUsIGxhYmVsKSA9PiBvcHRpb25hbEZsb2F0KHZhbHVlLCBsYWJlbCksXG4gIGludGVnZXJPck51bGw6ICh2YWx1ZSwgbGFiZWwpID0+IG9wdGlvbmFsSW50ZWdlcih2YWx1ZSwgbGFiZWwpLFxuICByYXc6ICh2YWx1ZSkgPT4gdmFsdWUsXG4gIHN0cmluZ09yTnVsbDogKHZhbHVlLCBsYWJlbCkgPT4gb3B0aW9uYWxTdHJpbmcodmFsdWUsIGxhYmVsKVxufVxuXG4vKipcbiAqIFBhcnNlcyBhbiBvcHRpb25hbCBkYXRlIHZhbHVlLCBmYWlsaW5nIGxvdWRseSBvbiBpbnZhbGlkIGlucHV0LlxuICogQHBhcmFtIHs/fSB2YWx1ZSAtIERhdGUsIHBhcnNlYWJsZSBzdHJpbmcsIG9yIGVwb2NoIG51bWJlci5cbiAqIEBwYXJhbSB7c3RyaW5nfSBsYWJlbCAtIEZpZWxkIGxhYmVsIGZvciBlcnJvciBtZXNzYWdlcy5cbiAqIEByZXR1cm5zIHtEYXRlIHwgbnVsbH0gUGFyc2VkIGRhdGUgb3IgbnVsbCB3aGVuIGFic2VudC5cbiAqL1xuZnVuY3Rpb24gb3B0aW9uYWxTeW5jRGF0ZSh2YWx1ZSwgbGFiZWwpIHtcbiAgaWYgKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQpIHJldHVybiBudWxsXG5cbiAgaWYgKHZhbHVlIGluc3RhbmNlb2YgRGF0ZSAmJiAhTnVtYmVyLmlzTmFOKHZhbHVlLmdldFRpbWUoKSkpIHJldHVybiB2YWx1ZVxuXG4gIGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgfHwgdHlwZW9mIHZhbHVlID09PSBcIm51bWJlclwiKSB7XG4gICAgY29uc3QgZGF0ZVZhbHVlID0gbmV3IERhdGUodmFsdWUpXG5cbiAgICBpZiAoIU51bWJlci5pc05hTihkYXRlVmFsdWUuZ2V0VGltZSgpKSkgcmV0dXJuIGRhdGVWYWx1ZVxuICB9XG5cbiAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCAke2xhYmVsfSB0byBiZSBhIHZhbGlkIGRhdGUgb3IgbnVsbGApXG59XG5cbi8qKlxuICogRGVjbGFyYXRpdmUgZmllbGQtbWFwIHVwc2VydCBhcHBsaWVyIGZvciBzeW5jIHJlcGxheSBtdXRhdGlvbnMuXG4gKlxuICogT3ducyB0aGUgZ2VuZXJpYyBtZWNoYW5pY3MgZXZlcnkgcGVyLXJlc291cmNlIHJlcGxheSBoYW5kbGVyIHJlcGVhdHM6XG4gKiBwcmVzZW50LWtleSBmaWx0ZXJpbmcsIHBlci1maWVsZCB0eXBlIGNvZXJjaW9uLCB1bmtub3duLWtleSByZWplY3Rpb24sIHRoZVxuICogZmluZC1vci1jcmVhdGUgdXBzZXJ0LCB0aGUgZGVsZXRlIGJyYW5jaCwgb3B0aW9uYWwgc25hcHNob3Qgc2VyaWFsaXphdGlvbixcbiAqIGFuZCB0aGUgZG9tYWluIGFmdGVyLWFwcGx5IHRhaWwuIEFwcHMgZGVjbGFyZSBvbmx5IHRoZSBmaWVsZCBtYXAgYW5kIGhvb2tzLlxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTeW5jUmVwbGF5VXBzZXJ0QXBwbGllciB7XG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgZGVjbGFyYXRpdmUgdXBzZXJ0IGFwcGxpZXIuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gQXBwbGllciBjb25maWd1cmF0aW9uLlxuICAgKiBAcGFyYW0gez99IGFyZ3MubW9kZWxDbGFzcyAtIE1vZGVsIGNsYXNzIHJlY2VpdmluZyB0aGUgbXV0YXRpb25zLlxuICAgKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIHN0cmluZyB8IHt0eXBlOiBzdHJpbmcsIGNvbHVtbj86IHN0cmluZ30gfCAoKHZhbHVlOiA/LCBsYWJlbDogc3RyaW5nKSA9PiA/KT59IGFyZ3MuZmllbGRzIC0gRGF0YS1rZXkg4oaSIGZpZWxkLXR5cGUgbWFwOiBhIG5hbWVkIHR5cGUsIGEge3R5cGUsIGNvbHVtbn0gcmVuYW1lIHNwZWMsIFwiaWdub3JlZFwiIGZvciBhY2NlcHRlZC1idXQtZHJvcHBlZCBrZXlzLCBvciBhIGN1c3RvbSBjb2VyY2VyIGZ1bmN0aW9uLlxuICAgKiBAcGFyYW0geyhhcmdzOiB7ZGF0YTogUmVjb3JkPHN0cmluZywgPz4sIG11dGF0aW9uOiA/LCBjb250ZXh0OiBSZWNvcmQ8c3RyaW5nLCA/Pn0pID0+IFByb21pc2U8Pz59IFthcmdzLmZpbmRSZWNvcmRdIC0gQ3VzdG9tIHJlY29yZCByZXNvbHZlci4gRGVmYXVsdHMgdG8gZmluZEJ5KHtpZDogbXV0YXRpb24ucmVzb3VyY2VJZH0pLlxuICAgKiBAcGFyYW0geyhhcmdzOiB7bXV0YXRpb246ID8sIGNvbnRleHQ6IFJlY29yZDxzdHJpbmcsID8+fSkgPT4gUHJvbWlzZTw/Pn0gW2FyZ3MuZmluZFJlY29yZEZvckRlbGV0ZV0gLSBDdXN0b20gZGVsZXRlIHJlc29sdmVyLiBEZWZhdWx0cyB0byBmaW5kUmVjb3JkLlxuICAgKiBAcGFyYW0ge1wiZXJyb3JcIiB8IFwiaWdub3JlXCJ9IFthcmdzLnJlc3RBcmdzXSAtIFVua25vd24gZGF0YS1rZXkgaGFuZGxpbmcuIERlZmF1bHRzIHRvIFwiZXJyb3JcIi5cbiAgICogQHBhcmFtIHsoYXJnczoge21hcHBlZEF0dHJpYnV0ZXM6IFJlY29yZDxzdHJpbmcsID8+LCBtdXRhdGlvbjogPywgY29udGV4dDogUmVjb3JkPHN0cmluZywgPz4sIHJlY29yZDogP30pID0+IFByb21pc2U8UmVjb3JkPHN0cmluZywgPz4gfCB2b2lkPn0gW2FyZ3MuYWZ0ZXJBcHBseV0gLSBEb21haW4gdGFpbDsgaXRzIHJldHVybmVkIG9iamVjdCBtZXJnZXMgaW50byB0aGUgYXBwbHkgcmVzdWx0LlxuICAgKiBAcGFyYW0geyhhcmdzOiB7bXV0YXRpb246ID8sIGNvbnRleHQ6IFJlY29yZDxzdHJpbmcsID8+LCByZWNvcmQ6ID99KSA9PiBQcm9taXNlPFJlY29yZDxzdHJpbmcsID8+PiB8IFJlY29yZDxzdHJpbmcsID8+fSBbYXJncy5zZXJpYWxpemVdIC0gU25hcHNob3Qgc2VyaWFsaXplcjsgcmVzdWx0IGxhbmRzIG9uIGFwcGx5UmVzdWx0LnNlcmlhbGl6ZWREYXRhLlxuICAgKi9cbiAgY29uc3RydWN0b3Ioe2FmdGVyQXBwbHksIGZpZWxkcywgZmluZFJlY29yZCwgZmluZFJlY29yZEZvckRlbGV0ZSwgbW9kZWxDbGFzcywgcmVzdEFyZ3MgPSBcImVycm9yXCIsIHNlcmlhbGl6ZX0pIHtcbiAgICBpZiAoIW1vZGVsQ2xhc3MpIHRocm93IG5ldyBFcnJvcihcIlN5bmNSZXBsYXlVcHNlcnRBcHBsaWVyIHJlcXVpcmVzIGEgbW9kZWxDbGFzc1wiKVxuICAgIGlmICghZmllbGRzIHx8IHR5cGVvZiBmaWVsZHMgIT09IFwib2JqZWN0XCIpIHRocm93IG5ldyBFcnJvcihcIlN5bmNSZXBsYXlVcHNlcnRBcHBsaWVyIHJlcXVpcmVzIGEgZmllbGRzIG1hcFwiKVxuICAgIGlmIChyZXN0QXJncyAhPT0gXCJlcnJvclwiICYmIHJlc3RBcmdzICE9PSBcImlnbm9yZVwiKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFN5bmNSZXBsYXlVcHNlcnRBcHBsaWVyIHJlc3RBcmdzIG11c3QgYmUgXCJlcnJvclwiIG9yIFwiaWdub3JlXCIsIGdvdDogJHtTdHJpbmcocmVzdEFyZ3MpfWApXG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBbZmllbGROYW1lLCBmaWVsZFNwZWNdIG9mIE9iamVjdC5lbnRyaWVzKGZpZWxkcykpIHtcbiAgICAgIGlmICh0eXBlb2YgZmllbGRTcGVjID09PSBcImZ1bmN0aW9uXCIpIGNvbnRpbnVlXG5cbiAgICAgIGNvbnN0IGZpZWxkVHlwZSA9IHR5cGVvZiBmaWVsZFNwZWMgPT09IFwic3RyaW5nXCIgPyBmaWVsZFNwZWMgOiBmaWVsZFNwZWMudHlwZVxuXG4gICAgICBpZiAoZmllbGRUeXBlICE9PSBcImlnbm9yZWRcIiAmJiAhKGZpZWxkVHlwZSBpbiBGSUVMRF9UWVBFUykpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIHN5bmMgZmllbGQgdHlwZTogJHtmaWVsZFR5cGV9IGZvcjogJHtmaWVsZE5hbWV9YClcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmFmdGVyQXBwbHkgPSBhZnRlckFwcGx5XG4gICAgdGhpcy5maWVsZHMgPSBmaWVsZHNcbiAgICB0aGlzLmZpbmRSZWNvcmQgPSBmaW5kUmVjb3JkXG4gICAgdGhpcy5maW5kUmVjb3JkRm9yRGVsZXRlID0gZmluZFJlY29yZEZvckRlbGV0ZVxuICAgIHRoaXMubW9kZWxDbGFzcyA9IG1vZGVsQ2xhc3NcbiAgICB0aGlzLnJlc3RBcmdzID0gcmVzdEFyZ3NcbiAgICB0aGlzLnNlcmlhbGl6ZSA9IHNlcmlhbGl6ZVxuICB9XG5cbiAgLyoqXG4gICAqIEFwcGxpZXMgb25lIG5vcm1hbGl6ZWQgcmVwbGF5IG11dGF0aW9uIHRvIHRoZSBkZWNsYXJlZCBtb2RlbC5cbiAgICogQHBhcmFtIHt7YWN0b3I6ID8sIGNvbnRleHQ6IFJlY29yZDxzdHJpbmcsID8+LCBleGlzdGluZ1N5bmM6ID8sIG11dGF0aW9uOiA/fX0gYXJncyAtIFJlcGxheSBhcHBseSBhcmd1bWVudHMuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPFJlY29yZDxzdHJpbmcsID8+Pn0gQXBwbHkgcmVzdWx0IHdpdGggdGhlIHJlY29yZCwgY3JlYXRlZC9kZWxldGVkIGZsYWdzLCBvcHRpb25hbCBzZXJpYWxpemVkRGF0YSwgYW5kIGFmdGVyQXBwbHkgZXh0cmFzLlxuICAgKi9cbiAgYXN5bmMgYXBwbHkoe2NvbnRleHQsIG11dGF0aW9ufSkge1xuICAgIGlmIChtdXRhdGlvbi5zeW5jVHlwZSA9PT0gXCJkZWxldGVcIikgcmV0dXJuIGF3YWl0IHRoaXMuYXBwbHlEZWxldGUoe2NvbnRleHQsIG11dGF0aW9ufSlcblxuICAgIGNvbnN0IG1hcHBlZEF0dHJpYnV0ZXMgPSB0aGlzLm1hcHBlZEF0dHJpYnV0ZXMobXV0YXRpb24uZGF0YSlcbiAgICBjb25zdCByZWNvcmQgPSB0aGlzLmZpbmRSZWNvcmRcbiAgICAgID8gYXdhaXQgdGhpcy5maW5kUmVjb3JkKHtjb250ZXh0LCBkYXRhOiBtdXRhdGlvbi5kYXRhLCBtdXRhdGlvbn0pXG4gICAgICA6IGF3YWl0IHRoaXMubW9kZWxDbGFzcy5maW5kQnkoe2lkOiBtdXRhdGlvbi5yZXNvdXJjZUlkfSlcbiAgICAvKiogQHR5cGUge1JlY29yZDxzdHJpbmcsID8+fSAqL1xuICAgIGNvbnN0IHJlc3VsdCA9IHtjcmVhdGVkOiBmYWxzZSwgZGVsZXRlZDogZmFsc2UsIHJlY29yZDogbnVsbH1cblxuICAgIGlmIChyZWNvcmQpIHtcbiAgICAgIHJlY29yZC5hc3NpZ24obWFwcGVkQXR0cmlidXRlcylcbiAgICAgIGF3YWl0IHJlY29yZC5zYXZlKClcbiAgICAgIHJlc3VsdC5yZWNvcmQgPSByZWNvcmRcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0LnJlY29yZCA9IGF3YWl0IHRoaXMubW9kZWxDbGFzcy5jcmVhdGUoe2lkOiBtdXRhdGlvbi5yZXNvdXJjZUlkLCAuLi5tYXBwZWRBdHRyaWJ1dGVzfSlcbiAgICAgIHJlc3VsdC5jcmVhdGVkID0gdHJ1ZVxuICAgIH1cblxuICAgIGlmICh0aGlzLnNlcmlhbGl6ZSkgcmVzdWx0LnNlcmlhbGl6ZWREYXRhID0gYXdhaXQgdGhpcy5zZXJpYWxpemUoe2NvbnRleHQsIG11dGF0aW9uLCByZWNvcmQ6IHJlc3VsdC5yZWNvcmR9KVxuXG4gICAgaWYgKHRoaXMuYWZ0ZXJBcHBseSkge1xuICAgICAgY29uc3QgYWZ0ZXJBcHBseVJlc3VsdCA9IGF3YWl0IHRoaXMuYWZ0ZXJBcHBseSh7Y29udGV4dCwgbWFwcGVkQXR0cmlidXRlcywgbXV0YXRpb24sIHJlY29yZDogcmVzdWx0LnJlY29yZH0pXG5cbiAgICAgIGlmIChhZnRlckFwcGx5UmVzdWx0ICYmIHR5cGVvZiBhZnRlckFwcGx5UmVzdWx0ID09PSBcIm9iamVjdFwiKSBPYmplY3QuYXNzaWduKHJlc3VsdCwgYWZ0ZXJBcHBseVJlc3VsdClcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0XG4gIH1cblxuICAvKipcbiAgICogQXBwbGllcyBhIGRlbGV0ZSBtdXRhdGlvbiB0byB0aGUgZGVjbGFyZWQgbW9kZWwuXG4gICAqIEBwYXJhbSB7e2NvbnRleHQ6IFJlY29yZDxzdHJpbmcsID8+LCBtdXRhdGlvbjogP319IGFyZ3MgLSBEZWxldGUgYXJndW1lbnRzLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCA/Pj59IEFwcGx5IHJlc3VsdCB3aXRoIHRoZSBkZWxldGVkIGZsYWcuXG4gICAqL1xuICBhc3luYyBhcHBseURlbGV0ZSh7Y29udGV4dCwgbXV0YXRpb259KSB7XG4gICAgY29uc3QgcmVzb2x2ZVJlY29yZCA9IHRoaXMuZmluZFJlY29yZEZvckRlbGV0ZSB8fCB0aGlzLmZpbmRSZWNvcmRcbiAgICBjb25zdCByZWNvcmQgPSByZXNvbHZlUmVjb3JkXG4gICAgICA/IGF3YWl0IHJlc29sdmVSZWNvcmQoe2NvbnRleHQsIGRhdGE6IG11dGF0aW9uLmRhdGEsIG11dGF0aW9ufSlcbiAgICAgIDogYXdhaXQgdGhpcy5tb2RlbENsYXNzLmZpbmRCeSh7aWQ6IG11dGF0aW9uLnJlc291cmNlSWR9KVxuXG4gICAgaWYgKCFyZWNvcmQpIHJldHVybiB7Y3JlYXRlZDogZmFsc2UsIGRlbGV0ZWQ6IGZhbHNlLCByZWNvcmQ6IG51bGx9XG5cbiAgICBhd2FpdCByZWNvcmQuZGVzdHJveSgpXG5cbiAgICByZXR1cm4ge2NyZWF0ZWQ6IGZhbHNlLCBkZWxldGVkOiB0cnVlLCByZWNvcmR9XG4gIH1cblxuICAvKipcbiAgICogTWFwcyBwcmVzZW50IGRhdGEga2V5cyB0aHJvdWdoIHRoZSBkZWNsYXJlZCBmaWVsZCB0eXBlcy5cbiAgICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCA/Pn0gZGF0YSAtIE5vcm1hbGl6ZWQgbXV0YXRpb24gZGF0YS5cbiAgICogQHJldHVybnMge1JlY29yZDxzdHJpbmcsID8+fSBDb2VyY2VkIGF0dHJpYnV0ZXMga2V5ZWQgYnkgY29sdW1uIG5hbWUuXG4gICAqL1xuICBtYXBwZWRBdHRyaWJ1dGVzKGRhdGEpIHtcbiAgICAvKiogQHR5cGUge1JlY29yZDxzdHJpbmcsID8+fSAqL1xuICAgIGNvbnN0IG1hcHBlZEF0dHJpYnV0ZXMgPSB7fVxuICAgIC8qKiBAdHlwZSB7c3RyaW5nW119ICovXG4gICAgY29uc3QgdW5rbm93bktleXMgPSBbXVxuXG4gICAgZm9yIChjb25zdCBbZGF0YUtleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGRhdGEpKSB7XG4gICAgICBjb25zdCBmaWVsZFNwZWMgPSB0aGlzLmZpZWxkc1tkYXRhS2V5XVxuXG4gICAgICBpZiAoIWZpZWxkU3BlYykge1xuICAgICAgICB1bmtub3duS2V5cy5wdXNoKGRhdGFLZXkpXG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgZmllbGRTcGVjID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgbWFwcGVkQXR0cmlidXRlc1tkYXRhS2V5XSA9IGZpZWxkU3BlYyh2YWx1ZSwgZGF0YUtleSlcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgY29uc3QgZmllbGRUeXBlID0gdHlwZW9mIGZpZWxkU3BlYyA9PT0gXCJzdHJpbmdcIiA/IGZpZWxkU3BlYyA6IGZpZWxkU3BlYy50eXBlXG5cbiAgICAgIGlmIChmaWVsZFR5cGUgPT09IFwiaWdub3JlZFwiKSBjb250aW51ZVxuXG4gICAgICBjb25zdCBjb2x1bW4gPSB0eXBlb2YgZmllbGRTcGVjID09PSBcInN0cmluZ1wiID8gZGF0YUtleSA6IGZpZWxkU3BlYy5jb2x1bW4gfHwgZGF0YUtleVxuXG4gICAgICBtYXBwZWRBdHRyaWJ1dGVzW2NvbHVtbl0gPSBGSUVMRF9UWVBFU1tmaWVsZFR5cGVdKHZhbHVlLCBkYXRhS2V5KVxuICAgIH1cblxuICAgIGlmICh1bmtub3duS2V5cy5sZW5ndGggPiAwICYmIHRoaXMucmVzdEFyZ3MgPT09IFwiZXJyb3JcIikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIHN5bmMgZGF0YSBrZXlzOiAke3Vua25vd25LZXlzLmpvaW4oXCIsIFwiKX1gKVxuICAgIH1cblxuICAgIHJldHVybiBtYXBwZWRBdHRyaWJ1dGVzXG4gIH1cbn1cbiJdfQ==
|
|
159
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3luYy1yZXBsYXktdXBzZXJ0LWFwcGxpZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc3luYy9zeW5jLXJlcGxheS11cHNlcnQtYXBwbGllci5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZO0FBRVosT0FBTyxFQUFDLGFBQWEsRUFBRSxlQUFlLEVBQUUsY0FBYyxFQUFDLE1BQU0sU0FBUyxDQUFBO0FBRXRFLE9BQU8sYUFBYSxNQUFNLHNCQUFzQixDQUFBO0FBRWhEOzs7O0dBSUc7QUFDSCxNQUFNLFdBQVcsR0FBRztJQUNsQixhQUFhLEVBQUUsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxhQUFhLENBQUMsd0JBQXdCLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQztJQUNyRixVQUFVLEVBQUUsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDO0lBQzVELFdBQVcsRUFBRSxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDO0lBQzFELGFBQWEsRUFBRSxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLGVBQWUsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDO0lBQzlELEdBQUcsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSztJQUNyQixZQUFZLEVBQUUsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxjQUFjLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQztDQUM3RCxDQUFBO0FBRUQ7Ozs7O0dBS0c7QUFDSCxTQUFTLGdCQUFnQixDQUFDLEtBQUssRUFBRSxLQUFLO0lBQ3BDLElBQUksS0FBSyxLQUFLLElBQUksSUFBSSxLQUFLLEtBQUssU0FBUztRQUFFLE9BQU8sSUFBSSxDQUFBO0lBRXRELElBQUksS0FBSyxZ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QUFNLENBQUMsT0FBTyxDQUFDLENBQUE7WUFFdEMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO2dCQUNmLFdBQVcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUE7Z0JBQ3pCLFNBQVE7WUFDVixDQUFDO1lBRUQsSUFBSSxPQUFPLFNBQVMsS0FBSyxVQUFVLEVBQUUsQ0FBQztnQkFDcEMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLEdBQUcsU0FBUyxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQTtnQkFDckQsU0FBUTtZQUNWLENBQUM7WUFFRCxNQUFNLFNBQVMsR0FBRyxPQUFPLFNBQVMsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQTtZQUU1RSxJQUFJLFNBQVMsS0FBSyxTQUFTO2dCQUFFLFNBQVE7WUFFckMsTUFBTSxNQUFNLEdBQUcsT0FBTyxTQUFTLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLElBQUksT0FBTyxDQUFBO1lBRXBGLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxHQUFHLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUE7UUFDbkUsQ0FBQztRQUVELElBQUksV0FBVyxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLFFBQVEsS0FBSyxPQUFPLEVBQUUsQ0FBQztZQUN4RCxNQUFNLElBQUksS0FBSyxDQUFDLDJCQUEyQixXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQTtRQUN0RSxDQUFDO1FBRUQsT0FBTyxnQkFBZ0IsQ0FBQTtJQUN6QixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcblxuaW1wb3J0IHtvcHRpb25hbEZsb2F0LCBvcHRpb25hbEludGVnZXIsIG9wdGlvbmFsU3RyaW5nfSBmcm9tIFwidHlwYW5pY1wiXG5cbmltcG9ydCBTeW5jQXBpQ2xpZW50IGZyb20gXCIuL3N5bmMtYXBpLWNsaWVudC5qc1wiXG5cbi8qKlxuICogQ29lcmNlcnMgZm9yIHRoZSBkZWNsYXJhdGl2ZSBzeW5jIGZpZWxkIHR5cGVzLiBBbGwgYXJlIHByZXNlbnQta2V5IGJhc2VkOlxuICogYSBmaWVsZCBpcyBvbmx5IGFwcGxpZWQgd2hlbiBpdHMga2V5IGV4aXN0cyBpbiB0aGUgbXV0YXRpb24gZGF0YS5cbiAqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCAodmFsdWU6ID8sIGxhYmVsOiBzdHJpbmcpID0+ID8+fVxuICovXG5jb25zdCBGSUVMRF9UWVBFUyA9IHtcbiAgYm9vbGVhbk9yTnVsbDogKHZhbHVlLCBsYWJlbCkgPT4gU3luY0FwaUNsaWVudC5vcHRpb25hbEJvb2xlYW5TeW5jVmFsdWUodmFsdWUsIGxhYmVsKSxcbiAgZGF0ZU9yTnVsbDogKHZhbHVlLCBsYWJlbCkgPT4gb3B0aW9uYWxTeW5jRGF0ZSh2YWx1ZSwgbGFiZWwpLFxuICBmbG9hdE9yTnVsbDogKHZhbHVlLCBsYWJlbCkgPT4gb3B0aW9uYWxGbG9hdCh2YWx1ZSwgbGFiZWwpLFxuICBpbnRlZ2VyT3JOdWxsOiAodmFsdWUsIGxhYmVsKSA9PiBvcHRpb25hbEludGVnZXIodmFsdWUsIGxhYmVsKSxcbiAgcmF3OiAodmFsdWUpID0+IHZhbHVlLFxuICBzdHJpbmdPck51bGw6ICh2YWx1ZSwgbGFiZWwpID0+IG9wdGlvbmFsU3RyaW5nKHZhbHVlLCBsYWJlbClcbn1cblxuLyoqXG4gKiBQYXJzZXMgYW4gb3B0aW9uYWwgZGF0ZSB2YWx1ZSwgZmFpbGluZyBsb3VkbHkgb24gaW52YWxpZCBpbnB1dC5cbiAqIEBwYXJhbSB7P30gdmFsdWUgLSBEYXRlLCBwYXJzZWFibGUgc3RyaW5nLCBvciBlcG9jaCBudW1iZXIuXG4gKiBAcGFyYW0ge3N0cmluZ30gbGFiZWwgLSBGaWVsZCBsYWJlbCBmb3IgZXJyb3IgbWVzc2FnZXMuXG4gKiBAcmV0dXJucyB7RGF0ZSB8IG51bGx9IFBhcnNlZCBkYXRlIG9yIG51bGwgd2hlbiBhYnNlbnQuXG4gKi9cbmZ1bmN0aW9uIG9wdGlvbmFsU3luY0RhdGUodmFsdWUsIGxhYmVsKSB7XG4gIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkKSByZXR1cm4gbnVsbFxuXG4gIGlmICh2YWx1ZSBpbnN0YW5jZW9mIERhdGUgJiYgIU51bWJlci5pc05hTih2YWx1ZS5nZXRUaW1lKCkpKSByZXR1cm4gdmFsdWVcblxuICBpZiAodHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiIHx8IHR5cGVvZiB2YWx1ZSA9PT0gXCJudW1iZXJcIikge1xuICAgIGNvbnN0IGRhdGVWYWx1ZSA9IG5ldyBEYXRlKHZhbHVlKVxuXG4gICAgaWYgKCFOdW1iZXIuaXNOYU4oZGF0ZVZhbHVlLmdldFRpbWUoKSkpIHJldHVybiBkYXRlVmFsdWVcbiAgfVxuXG4gIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgJHtsYWJlbH0gdG8gYmUgYSB2YWxpZCBkYXRlIG9yIG51bGxgKVxufVxuXG4vKipcbiAqIERlY2xhcmF0aXZlIGZpZWxkLW1hcCB1cHNlcnQgYXBwbGllciBmb3Igc3luYyByZXBsYXkgbXV0YXRpb25zLlxuICpcbiAqIE93bnMgdGhlIGdlbmVyaWMgbWVjaGFuaWNzIGV2ZXJ5IHBlci1yZXNvdXJjZSByZXBsYXkgaGFuZGxlciByZXBlYXRzOlxuICogcHJlc2VudC1rZXkgZmlsdGVyaW5nLCBwZXItZmllbGQgdHlwZSBjb2VyY2lvbiwgdW5rbm93bi1rZXkgcmVqZWN0aW9uLCB0aGVcbiAqIGZpbmQtb3ItY3JlYXRlIHVwc2VydCwgdGhlIGRlbGV0ZSBicmFuY2gsIG9wdGlvbmFsIHNuYXBzaG90IHNlcmlhbGl6YXRpb24sXG4gKiBhbmQgdGhlIGRvbWFpbiBhZnRlci1hcHBseSB0YWlsLiBBcHBzIGRlY2xhcmUgb25seSB0aGUgZmllbGQgbWFwIGFuZCBob29rcy5cbiAqIEBkZXByZWNhdGVkIFByZWZlciByZXNvdXJjZS1yb3V0ZWQgcmVwbGF5IChgU3luY0VudmVsb3BlUmVwbGF5U2VydmljZWAgd2l0aCBgY29uZmlndXJhdGlvbmAvYHJlc291cmNlVHlwZU92ZXJyaWRlc2AgYW5kIHJlc291cmNlIGB3cml0YWJsZUF0dHJpYnV0ZXNgIHBlcm1pdCBsaXN0cykg4oCUIHZhbHVlIGNhc3RpbmcgYW5kIHZhbGlkYXRpb24gYmVsb25nIHRvIHRoZSByZWNvcmQgbGF5ZXIuIFRoaXMgYXBwbGllciByZW1haW5zIGZvciByZWxlYXNlZCBhcHBseUhhbmRsZXJzIGFkb3B0ZXJzIGFuZCB3aWxsIGJlIHJlbW92ZWQgYWZ0ZXIgdGhlaXIgbWlncmF0aW9uLlxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTeW5jUmVwbGF5VXBzZXJ0QXBwbGllciB7XG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgZGVjbGFyYXRpdmUgdXBzZXJ0IGFwcGxpZXIuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gQXBwbGllciBjb25maWd1cmF0aW9uLlxuICAgKiBAcGFyYW0gez99IGFyZ3MubW9kZWxDbGFzcyAtIE1vZGVsIGNsYXNzIHJlY2VpdmluZyB0aGUgbXV0YXRpb25zLlxuICAgKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIHN0cmluZyB8IHt0eXBlOiBzdHJpbmcsIGNvbHVtbj86IHN0cmluZ30gfCAoKHZhbHVlOiA/LCBsYWJlbDogc3RyaW5nKSA9PiA/KT59IGFyZ3MuZmllbGRzIC0gRGF0YS1rZXkg4oaSIGZpZWxkLXR5cGUgbWFwOiBhIG5hbWVkIHR5cGUsIGEge3R5cGUsIGNvbHVtbn0gcmVuYW1lIHNwZWMsIFwiaWdub3JlZFwiIGZvciBhY2NlcHRlZC1idXQtZHJvcHBlZCBrZXlzLCBvciBhIGN1c3RvbSBjb2VyY2VyIGZ1bmN0aW9uLlxuICAgKiBAcGFyYW0geyhhcmdzOiB7ZGF0YTogUmVjb3JkPHN0cmluZywgPz4sIG11dGF0aW9uOiA/LCBjb250ZXh0OiBSZWNvcmQ8c3RyaW5nLCA/Pn0pID0+IFByb21pc2U8Pz59IFthcmdzLmZpbmRSZWNvcmRdIC0gQ3VzdG9tIHJlY29yZCByZXNvbHZlci4gRGVmYXVsdHMgdG8gZmluZEJ5KHtpZDogbXV0YXRpb24ucmVzb3VyY2VJZH0pLlxuICAgKiBAcGFyYW0geyhhcmdzOiB7bXV0YXRpb246ID8sIGNvbnRleHQ6IFJlY29yZDxzdHJpbmcsID8+fSkgPT4gUHJvbWlzZTw/Pn0gW2FyZ3MuZmluZFJlY29yZEZvckRlbGV0ZV0gLSBDdXN0b20gZGVsZXRlIHJlc29sdmVyLiBEZWZhdWx0cyB0byBmaW5kUmVjb3JkLlxuICAgKiBAcGFyYW0ge1wiZXJyb3JcIiB8IFwiaWdub3JlXCJ9IFthcmdzLnJlc3RBcmdzXSAtIFVua25vd24gZGF0YS1rZXkgaGFuZGxpbmcuIERlZmF1bHRzIHRvIFwiZXJyb3JcIi5cbiAgICogQHBhcmFtIHsoYXJnczoge21hcHBlZEF0dHJpYnV0ZXM6IFJlY29yZDxzdHJpbmcsID8+LCBtdXRhdGlvbjogPywgY29udGV4dDogUmVjb3JkPHN0cmluZywgPz4sIHJlY29yZDogP30pID0+IFByb21pc2U8UmVjb3JkPHN0cmluZywgPz4gfCB2b2lkPn0gW2FyZ3MuYWZ0ZXJBcHBseV0gLSBEb21haW4gdGFpbDsgaXRzIHJldHVybmVkIG9iamVjdCBtZXJnZXMgaW50byB0aGUgYXBwbHkgcmVzdWx0LlxuICAgKiBAcGFyYW0geyhhcmdzOiB7bXV0YXRpb246ID8sIGNvbnRleHQ6IFJlY29yZDxzdHJpbmcsID8+LCByZWNvcmQ6ID99KSA9PiBQcm9taXNlPFJlY29yZDxzdHJpbmcsID8+PiB8IFJlY29yZDxzdHJpbmcsID8+fSBbYXJncy5zZXJpYWxpemVdIC0gU25hcHNob3Qgc2VyaWFsaXplcjsgcmVzdWx0IGxhbmRzIG9uIGFwcGx5UmVzdWx0LnNlcmlhbGl6ZWREYXRhLlxuICAgKi9cbiAgY29uc3RydWN0b3Ioe2FmdGVyQXBwbHksIGZpZWxkcywgZmluZFJlY29yZCwgZmluZFJlY29yZEZvckRlbGV0ZSwgbW9kZWxDbGFzcywgcmVzdEFyZ3MgPSBcImVycm9yXCIsIHNlcmlhbGl6ZX0pIHtcbiAgICBpZiAoIW1vZGVsQ2xhc3MpIHRocm93IG5ldyBFcnJvcihcIlN5bmNSZXBsYXlVcHNlcnRBcHBsaWVyIHJlcXVpcmVzIGEgbW9kZWxDbGFzc1wiKVxuICAgIGlmICghZmllbGRzIHx8IHR5cGVvZiBmaWVsZHMgIT09IFwib2JqZWN0XCIpIHRocm93IG5ldyBFcnJvcihcIlN5bmNSZXBsYXlVcHNlcnRBcHBsaWVyIHJlcXVpcmVzIGEgZmllbGRzIG1hcFwiKVxuICAgIGlmIChyZXN0QXJncyAhPT0gXCJlcnJvclwiICYmIHJlc3RBcmdzICE9PSBcImlnbm9yZVwiKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFN5bmNSZXBsYXlVcHNlcnRBcHBsaWVyIHJlc3RBcmdzIG11c3QgYmUgXCJlcnJvclwiIG9yIFwiaWdub3JlXCIsIGdvdDogJHtTdHJpbmcocmVzdEFyZ3MpfWApXG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBbZmllbGROYW1lLCBmaWVsZFNwZWNdIG9mIE9iamVjdC5lbnRyaWVzKGZpZWxkcykpIHtcbiAgICAgIGlmICh0eXBlb2YgZmllbGRTcGVjID09PSBcImZ1bmN0aW9uXCIpIGNvbnRpbnVlXG5cbiAgICAgIGNvbnN0IGZpZWxkVHlwZSA9IHR5cGVvZiBmaWVsZFNwZWMgPT09IFwic3RyaW5nXCIgPyBmaWVsZFNwZWMgOiBmaWVsZFNwZWMudHlwZVxuXG4gICAgICBpZiAoZmllbGRUeXBlICE9PSBcImlnbm9yZWRcIiAmJiAhKGZpZWxkVHlwZSBpbiBGSUVMRF9UWVBFUykpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIHN5bmMgZmllbGQgdHlwZTogJHtmaWVsZFR5cGV9IGZvcjogJHtmaWVsZE5hbWV9YClcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmFmdGVyQXBwbHkgPSBhZnRlckFwcGx5XG4gICAgdGhpcy5maWVsZHMgPSBmaWVsZHNcbiAgICB0aGlzLmZpbmRSZWNvcmQgPSBmaW5kUmVjb3JkXG4gICAgdGhpcy5maW5kUmVjb3JkRm9yRGVsZXRlID0gZmluZFJlY29yZEZvckRlbGV0ZVxuICAgIHRoaXMubW9kZWxDbGFzcyA9IG1vZGVsQ2xhc3NcbiAgICB0aGlzLnJlc3RBcmdzID0gcmVzdEFyZ3NcbiAgICB0aGlzLnNlcmlhbGl6ZSA9IHNlcmlhbGl6ZVxuICB9XG5cbiAgLyoqXG4gICAqIEFwcGxpZXMgb25lIG5vcm1hbGl6ZWQgcmVwbGF5IG11dGF0aW9uIHRvIHRoZSBkZWNsYXJlZCBtb2RlbC5cbiAgICogQHBhcmFtIHt7YWN0b3I6ID8sIGNvbnRleHQ6IFJlY29yZDxzdHJpbmcsID8+LCBleGlzdGluZ1N5bmM6ID8sIG11dGF0aW9uOiA/fX0gYXJncyAtIFJlcGxheSBhcHBseSBhcmd1bWVudHMuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPFJlY29yZDxzdHJpbmcsID8+Pn0gQXBwbHkgcmVzdWx0IHdpdGggdGhlIHJlY29yZCwgY3JlYXRlZC9kZWxldGVkIGZsYWdzLCBvcHRpb25hbCBzZXJpYWxpemVkRGF0YSwgYW5kIGFmdGVyQXBwbHkgZXh0cmFzLlxuICAgKi9cbiAgYXN5bmMgYXBwbHkoe2NvbnRleHQsIG11dGF0aW9ufSkge1xuICAgIGlmIChtdXRhdGlvbi5zeW5jVHlwZSA9PT0gXCJkZWxldGVcIikgcmV0dXJuIGF3YWl0IHRoaXMuYXBwbHlEZWxldGUoe2NvbnRleHQsIG11dGF0aW9ufSlcblxuICAgIGNvbnN0IG1hcHBlZEF0dHJpYnV0ZXMgPSB0aGlzLm1hcHBlZEF0dHJpYnV0ZXMobXV0YXRpb24uZGF0YSlcbiAgICBjb25zdCByZWNvcmQgPSB0aGlzLmZpbmRSZWNvcmRcbiAgICAgID8gYXdhaXQgdGhpcy5maW5kUmVjb3JkKHtjb250ZXh0LCBkYXRhOiBtdXRhdGlvbi5kYXRhLCBtdXRhdGlvbn0pXG4gICAgICA6IGF3YWl0IHRoaXMubW9kZWxDbGFzcy5maW5kQnkoe2lkOiBtdXRhdGlvbi5yZXNvdXJjZUlkfSlcbiAgICAvKiogQHR5cGUge1JlY29yZDxzdHJpbmcsID8+fSAqL1xuICAgIGNvbnN0IHJlc3VsdCA9IHtjcmVhdGVkOiBmYWxzZSwgZGVsZXRlZDogZmFsc2UsIHJlY29yZDogbnVsbH1cblxuICAgIGlmIChyZWNvcmQpIHtcbiAgICAgIHJlY29yZC5hc3NpZ24obWFwcGVkQXR0cmlidXRlcylcbiAgICAgIGF3YWl0IHJlY29yZC5zYXZlKClcbiAgICAgIHJlc3VsdC5yZWNvcmQgPSByZWNvcmRcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0LnJlY29yZCA9IGF3YWl0IHRoaXMubW9kZWxDbGFzcy5jcmVhdGUoe2lkOiBtdXRhdGlvbi5yZXNvdXJjZUlkLCAuLi5tYXBwZWRBdHRyaWJ1dGVzfSlcbiAgICAgIHJlc3VsdC5jcmVhdGVkID0gdHJ1ZVxuICAgIH1cblxuICAgIGlmICh0aGlzLnNlcmlhbGl6ZSkgcmVzdWx0LnNlcmlhbGl6ZWREYXRhID0gYXdhaXQgdGhpcy5zZXJpYWxpemUoe2NvbnRleHQsIG11dGF0aW9uLCByZWNvcmQ6IHJlc3VsdC5yZWNvcmR9KVxuXG4gICAgaWYgKHRoaXMuYWZ0ZXJBcHBseSkge1xuICAgICAgY29uc3QgYWZ0ZXJBcHBseVJlc3VsdCA9IGF3YWl0IHRoaXMuYWZ0ZXJBcHBseSh7Y29udGV4dCwgbWFwcGVkQXR0cmlidXRlcywgbXV0YXRpb24sIHJlY29yZDogcmVzdWx0LnJlY29yZH0pXG5cbiAgICAgIGlmIChhZnRlckFwcGx5UmVzdWx0ICYmIHR5cGVvZiBhZnRlckFwcGx5UmVzdWx0ID09PSBcIm9iamVjdFwiKSBPYmplY3QuYXNzaWduKHJlc3VsdCwgYWZ0ZXJBcHBseVJlc3VsdClcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0XG4gIH1cblxuICAvKipcbiAgICogQXBwbGllcyBhIGRlbGV0ZSBtdXRhdGlvbiB0byB0aGUgZGVjbGFyZWQgbW9kZWwuXG4gICAqIEBwYXJhbSB7e2NvbnRleHQ6IFJlY29yZDxzdHJpbmcsID8+LCBtdXRhdGlvbjogP319IGFyZ3MgLSBEZWxldGUgYXJndW1lbnRzLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCA/Pj59IEFwcGx5IHJlc3VsdCB3aXRoIHRoZSBkZWxldGVkIGZsYWcuXG4gICAqL1xuICBhc3luYyBhcHBseURlbGV0ZSh7Y29udGV4dCwgbXV0YXRpb259KSB7XG4gICAgY29uc3QgcmVzb2x2ZVJlY29yZCA9IHRoaXMuZmluZFJlY29yZEZvckRlbGV0ZSB8fCB0aGlzLmZpbmRSZWNvcmRcbiAgICBjb25zdCByZWNvcmQgPSByZXNvbHZlUmVjb3JkXG4gICAgICA/IGF3YWl0IHJlc29sdmVSZWNvcmQoe2NvbnRleHQsIGRhdGE6IG11dGF0aW9uLmRhdGEsIG11dGF0aW9ufSlcbiAgICAgIDogYXdhaXQgdGhpcy5tb2RlbENsYXNzLmZpbmRCeSh7aWQ6IG11dGF0aW9uLnJlc291cmNlSWR9KVxuXG4gICAgaWYgKCFyZWNvcmQpIHJldHVybiB7Y3JlYXRlZDogZmFsc2UsIGRlbGV0ZWQ6IGZhbHNlLCByZWNvcmQ6IG51bGx9XG5cbiAgICBhd2FpdCByZWNvcmQuZGVzdHJveSgpXG5cbiAgICByZXR1cm4ge2NyZWF0ZWQ6IGZhbHNlLCBkZWxldGVkOiB0cnVlLCByZWNvcmR9XG4gIH1cblxuICAvKipcbiAgICogTWFwcyBwcmVzZW50IGRhdGEga2V5cyB0aHJvdWdoIHRoZSBkZWNsYXJlZCBmaWVsZCB0eXBlcy5cbiAgICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCA/Pn0gZGF0YSAtIE5vcm1hbGl6ZWQgbXV0YXRpb24gZGF0YS5cbiAgICogQHJldHVybnMge1JlY29yZDxzdHJpbmcsID8+fSBDb2VyY2VkIGF0dHJpYnV0ZXMga2V5ZWQgYnkgY29sdW1uIG5hbWUuXG4gICAqL1xuICBtYXBwZWRBdHRyaWJ1dGVzKGRhdGEpIHtcbiAgICAvKiogQHR5cGUge1JlY29yZDxzdHJpbmcsID8+fSAqL1xuICAgIGNvbnN0IG1hcHBlZEF0dHJpYnV0ZXMgPSB7fVxuICAgIC8qKiBAdHlwZSB7c3RyaW5nW119ICovXG4gICAgY29uc3QgdW5rbm93bktleXMgPSBbXVxuXG4gICAgZm9yIChjb25zdCBbZGF0YUtleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGRhdGEpKSB7XG4gICAgICBjb25zdCBmaWVsZFNwZWMgPSB0aGlzLmZpZWxkc1tkYXRhS2V5XVxuXG4gICAgICBpZiAoIWZpZWxkU3BlYykge1xuICAgICAgICB1bmtub3duS2V5cy5wdXNoKGRhdGFLZXkpXG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgZmllbGRTcGVjID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgbWFwcGVkQXR0cmlidXRlc1tkYXRhS2V5XSA9IGZpZWxkU3BlYyh2YWx1ZSwgZGF0YUtleSlcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgY29uc3QgZmllbGRUeXBlID0gdHlwZW9mIGZpZWxkU3BlYyA9PT0gXCJzdHJpbmdcIiA/IGZpZWxkU3BlYyA6IGZpZWxkU3BlYy50eXBlXG5cbiAgICAgIGlmIChmaWVsZFR5cGUgPT09IFwiaWdub3JlZFwiKSBjb250aW51ZVxuXG4gICAgICBjb25zdCBjb2x1bW4gPSB0eXBlb2YgZmllbGRTcGVjID09PSBcInN0cmluZ1wiID8gZGF0YUtleSA6IGZpZWxkU3BlYy5jb2x1bW4gfHwgZGF0YUtleVxuXG4gICAgICBtYXBwZWRBdHRyaWJ1dGVzW2NvbHVtbl0gPSBGSUVMRF9UWVBFU1tmaWVsZFR5cGVdKHZhbHVlLCBkYXRhS2V5KVxuICAgIH1cblxuICAgIGlmICh1bmtub3duS2V5cy5sZW5ndGggPiAwICYmIHRoaXMucmVzdEFyZ3MgPT09IFwiZXJyb3JcIikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIHN5bmMgZGF0YSBrZXlzOiAke3Vua25vd25LZXlzLmpvaW4oXCIsIFwiKX1gKVxuICAgIH1cblxuICAgIHJldHVybiBtYXBwZWRBdHRyaWJ1dGVzXG4gIH1cbn1cbiJdfQ==
|
|
@@ -14,18 +14,18 @@
|
|
|
14
14
|
* @augments {FrontendModelBaseResource<TModelClass>}
|
|
15
15
|
*/
|
|
16
16
|
export default class SyncResourceBase<TModelClass extends typeof import("../database/record/index.js").default = typeof import("../database/record/index.js").default> extends FrontendModelBaseResource<TModelClass> {
|
|
17
|
+
/**
|
|
18
|
+
* Replay service class handling replay mutations for this resource,
|
|
19
|
+
* declared instead of overriding {@link SyncResourceBase#replayServiceClass}.
|
|
20
|
+
* @type {typeof import("./sync-envelope-replay-service.js").default | undefined}
|
|
21
|
+
*/
|
|
22
|
+
static ReplayServiceClass: typeof import("./sync-envelope-replay-service.js").default | undefined;
|
|
17
23
|
/**
|
|
18
24
|
* Declarative quick-search text columns. When declared, an index search on
|
|
19
25
|
* the pseudo-column `quickSearch` expands to an OR of LIKE conditions over
|
|
20
26
|
* these root-table columns instead of hitting the controller default.
|
|
21
27
|
* @type {string[] | null} */
|
|
22
28
|
static quickSearchColumns: string[] | null;
|
|
23
|
-
/**
|
|
24
|
-
* Declarative writable-attribute schema consumed by
|
|
25
|
-
* {@link SyncResourceBase#normalizeWritableAttributes}, keyed by camelCase
|
|
26
|
-
* attribute name.
|
|
27
|
-
* @type {Record<string, import("./sync-attribute-normalizer.js").SyncAttributeSchemaEntry> | null} */
|
|
28
|
-
static writableAttributes: Record<string, import("./sync-attribute-normalizer.js").SyncAttributeSchemaEntry> | null;
|
|
29
29
|
/**
|
|
30
30
|
* Expands a `quickSearch` pseudo-column search into an OR of LIKE conditions
|
|
31
31
|
* over the declared {@link SyncResourceBase.quickSearchColumns}.
|
|
@@ -38,30 +38,6 @@ export default class SyncResourceBase<TModelClass extends typeof import("../data
|
|
|
38
38
|
query: import("../frontend-model-resource/base-resource.js").FrontendModelResourceAnyQuery;
|
|
39
39
|
search: import("../frontend-model-resource/base-resource.js").FrontendModelResourceSearch;
|
|
40
40
|
}): boolean;
|
|
41
|
-
/**
|
|
42
|
-
* Normalizes incoming writable attributes through the declared
|
|
43
|
-
* {@link SyncResourceBase.writableAttributes} schema: camelCase and
|
|
44
|
-
* snake_case input keys are accepted, values are validated per type and the
|
|
45
|
-
* normalized values are written under snake_case column keys. Validation
|
|
46
|
-
* failures throw client-safe errors built by
|
|
47
|
-
* {@link SyncResourceBase#writableAttributeError}.
|
|
48
|
-
* @param {Record<string, ?>} attributes - Raw incoming attributes.
|
|
49
|
-
* @param {{unknownAttributes?: "error" | "ignore"}} [options] - Unknown input-key handling. Defaults to "error".
|
|
50
|
-
* @returns {Record<string, ?>} Normalized attributes keyed by column names.
|
|
51
|
-
*/
|
|
52
|
-
normalizeWritableAttributes(attributes: Record<string, unknown>, options?: {
|
|
53
|
-
unknownAttributes?: "error" | "ignore";
|
|
54
|
-
}): Record<string, unknown>;
|
|
55
|
-
/**
|
|
56
|
-
* Builds the client-safe error thrown for a failed writable-attribute validation.
|
|
57
|
-
* @param {string} message - Human-readable validation message.
|
|
58
|
-
* @param {{cause?: Error, code: string}} details - Stable machine-readable code and optional cause.
|
|
59
|
-
* @returns {Error} Client-safe error.
|
|
60
|
-
*/
|
|
61
|
-
writableAttributeError(message: string, { cause, code }: {
|
|
62
|
-
cause?: Error;
|
|
63
|
-
code: string;
|
|
64
|
-
}): Error;
|
|
65
41
|
/**
|
|
66
42
|
* Returns a stable change-feed page after app authorization.
|
|
67
43
|
* @returns {Promise<Record<string, ?>>} Change-feed page result.
|
|
@@ -90,7 +66,10 @@ export default class SyncResourceBase<TModelClass extends typeof import("../data
|
|
|
90
66
|
changes: () => Promise<Record<string, unknown>>;
|
|
91
67
|
};
|
|
92
68
|
/**
|
|
93
|
-
* Builds the app replay service handling this replay request.
|
|
69
|
+
* Builds the app replay service handling this replay request. The resource
|
|
70
|
+
* ability, context, configuration, and locals are plumbed in under the
|
|
71
|
+
* app-declared {@link SyncResourceBase#replayServiceArgs} (app args win) so
|
|
72
|
+
* the default resource-routed replay works without wiring.
|
|
94
73
|
* @returns {import("./sync-envelope-replay-service.js").default} Replay service instance.
|
|
95
74
|
*/
|
|
96
75
|
buildReplayService(): import("./sync-envelope-replay-service.js").default;
|
|
@@ -124,7 +103,12 @@ export default class SyncResourceBase<TModelClass extends typeof import("../data
|
|
|
124
103
|
scope: SerializedChangesScope | null;
|
|
125
104
|
}): void;
|
|
126
105
|
/**
|
|
127
|
-
*
|
|
106
|
+
* Resolves the replay service class handling replay mutations: the
|
|
107
|
+
* declarative {@link SyncResourceBase.ReplayServiceClass} static (shared
|
|
108
|
+
* resources included) when declared, otherwise
|
|
109
|
+
* {@link SyncEnvelopeReplayService}, which resource-routes mutations through
|
|
110
|
+
* the plumbed configuration registry. Apps declare the static instead of
|
|
111
|
+
* overriding this method.
|
|
128
112
|
* @returns {typeof import("./sync-envelope-replay-service.js").default} Replay service class.
|
|
129
113
|
*/
|
|
130
114
|
replayServiceClass(): typeof import("./sync-envelope-replay-service.js").default;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync-resource-base.d.ts","sourceRoot":"","sources":["../../../src/sync/sync-resource-base.js"],"names":[],"mappings":"AAWA;;;;;GAKG;AAEH;;;;;;;;GAQG;AACH,sCAHqE,WAAW,SAAnE,cAAe,6BAA6B,EAAE,OAAQ;IAIjE;;;;
|
|
1
|
+
{"version":3,"file":"sync-resource-base.d.ts","sourceRoot":"","sources":["../../../src/sync/sync-resource-base.js"],"names":[],"mappings":"AAWA;;;;;GAKG;AAEH;;;;;;;;GAQG;AACH,sCAHqE,WAAW,SAAnE,cAAe,6BAA6B,EAAE,OAAQ;IAIjE;;;;OAIG;IACH,2BAFU,cAAc,mCAAmC,EAAE,OAAO,GAAG,SAAS,CAE3C;IAErC;;;;iCAI6B;IAC7B,2BADU,MAAM,EAAE,GAAG,IAAI,CACO;IAgBhC;;;;;;;OAOG;IACH,oCAJG;QAAkG,KAAK,EAA/F,OAAO,6CAA6C,EAAE,6BAA6B;QACK,MAAM,EAA9F,OAAO,6CAA6C,EAAE,2BAA2B;KACzF,GAAU,OAAO,CA6BnB;IAMD;;;OAGG;IACH,WAFa,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAC,CAAC,CAAC,CAStC;IAED;;;OAGG;IACH,UAFa,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAC,CAAC,CAAC,CAQtC;IAED;;;;OAIG;IACH,qBAHW,MAAM,CAAC,MAAM,EAAE,OAAC,CAAC,GACf,sBAAsB,GAAG,IAAI,CAoBzC;IAED;;;;OAIG;IACH,qCAHW;QAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAC,CAAC,CAAC;QAAC,KAAK,EAAE,sBAAsB,GAAG,IAAI,CAAA;KAAC,GAC/D;QAAC,OAAO,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAC,CAAC,CAAC,CAAA;KAAC,CAQvD;IAED;;;;;;OAMG;IACH,sBAFa,OAAO,mCAAmC,EAAE,OAAO,CAY/D;IAED;;;OAGG;IACH,qBAFa,MAAM,CAAC,MAAM,EAAE,OAAC,CAAC,CAI7B;IAED;;;OAGG;IACH,kBAFa,cAAc,6BAA6B,EAAE,OAAO,CAQhE;IAED;;;;OAIG;IACH,wBAHW;QAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAC,CAAC,CAAC;QAAC,KAAK,EAAE,sBAAsB,GAAG,IAAI,CAAA;KAAC,GAC/D,OAAO,CAAC,IAAI,CAAC,CAIzB;IAED;;;;OAIG;IACH,yBAHW;QAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAC,CAAC,CAAC;QAAC,KAAK,EAAE,OAAO,wCAAwC,EAAE,OAAO,CAAC;QAAC,KAAK,EAAE,sBAAsB,GAAG,IAAI,CAAA;KAAC,GAChI,IAAI,CAIhB;IAED;;;;;;;;OAQG;IACH,sBAFa,cAAc,mCAAmC,EAAE,OAAO,CAOtE;CACF;;;;;;;;gBA1Na,MAAM,CAAC,MAAM,EAAE,OAAC,CAAC;;;;kBACjB,MAAM;;sCAXkB,6CAA6C"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
// @ts-check
|
|
2
2
|
import { forcedNonBlankStringParam } from "typanic";
|
|
3
3
|
import FrontendModelBaseResource from "../frontend-model-resource/base-resource.js";
|
|
4
|
-
import
|
|
4
|
+
import SyncEnvelopeReplayService from "./sync-envelope-replay-service.js";
|
|
5
5
|
import SyncModelChangeFeedService from "./sync-model-change-feed-service.js";
|
|
6
6
|
import VelociousError from "../velocious-error.js";
|
|
7
7
|
const QUICK_SEARCH_COLUMN = "quickSearch";
|
|
@@ -21,18 +21,18 @@ const QUICK_SEARCH_COLUMN = "quickSearch";
|
|
|
21
21
|
* @augments {FrontendModelBaseResource<TModelClass>}
|
|
22
22
|
*/
|
|
23
23
|
export default class SyncResourceBase extends FrontendModelBaseResource {
|
|
24
|
+
/**
|
|
25
|
+
* Replay service class handling replay mutations for this resource,
|
|
26
|
+
* declared instead of overriding {@link SyncResourceBase#replayServiceClass}.
|
|
27
|
+
* @type {typeof import("./sync-envelope-replay-service.js").default | undefined}
|
|
28
|
+
*/
|
|
29
|
+
static ReplayServiceClass = undefined;
|
|
24
30
|
/**
|
|
25
31
|
* Declarative quick-search text columns. When declared, an index search on
|
|
26
32
|
* the pseudo-column `quickSearch` expands to an OR of LIKE conditions over
|
|
27
33
|
* these root-table columns instead of hitting the controller default.
|
|
28
34
|
* @type {string[] | null} */
|
|
29
35
|
static quickSearchColumns = null;
|
|
30
|
-
/**
|
|
31
|
-
* Declarative writable-attribute schema consumed by
|
|
32
|
-
* {@link SyncResourceBase#normalizeWritableAttributes}, keyed by camelCase
|
|
33
|
-
* attribute name.
|
|
34
|
-
* @type {Record<string, import("./sync-attribute-normalizer.js").SyncAttributeSchemaEntry> | null} */
|
|
35
|
-
static writableAttributes = null;
|
|
36
36
|
/**
|
|
37
37
|
* Applies frontend-model index searches, expanding declared quick searches.
|
|
38
38
|
* @param {object} args - Search args.
|
|
@@ -75,37 +75,9 @@ export default class SyncResourceBase extends FrontendModelBaseResource {
|
|
|
75
75
|
query.where(`(${conditions.join(" OR ")})`);
|
|
76
76
|
return true;
|
|
77
77
|
}
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
* snake_case input keys are accepted, values are validated per type and the
|
|
82
|
-
* normalized values are written under snake_case column keys. Validation
|
|
83
|
-
* failures throw client-safe errors built by
|
|
84
|
-
* {@link SyncResourceBase#writableAttributeError}.
|
|
85
|
-
* @param {Record<string, ?>} attributes - Raw incoming attributes.
|
|
86
|
-
* @param {{unknownAttributes?: "error" | "ignore"}} [options] - Unknown input-key handling. Defaults to "error".
|
|
87
|
-
* @returns {Record<string, ?>} Normalized attributes keyed by column names.
|
|
88
|
-
*/
|
|
89
|
-
normalizeWritableAttributes(attributes, options = {}) {
|
|
90
|
-
const schema = /** @type {typeof SyncResourceBase} */ (this.constructor).writableAttributes;
|
|
91
|
-
if (!schema)
|
|
92
|
-
throw new Error(`${this.constructor.name} must define static writableAttributes to use normalizeWritableAttributes`);
|
|
93
|
-
return normalizeAttributesWithSchema({
|
|
94
|
-
attributes,
|
|
95
|
-
errorFactory: (message, details) => this.writableAttributeError(message, details),
|
|
96
|
-
schema,
|
|
97
|
-
unknownAttributes: options.unknownAttributes
|
|
98
|
-
});
|
|
99
|
-
}
|
|
100
|
-
/**
|
|
101
|
-
* Builds the client-safe error thrown for a failed writable-attribute validation.
|
|
102
|
-
* @param {string} message - Human-readable validation message.
|
|
103
|
-
* @param {{cause?: Error, code: string}} details - Stable machine-readable code and optional cause.
|
|
104
|
-
* @returns {Error} Client-safe error.
|
|
105
|
-
*/
|
|
106
|
-
writableAttributeError(message, { cause, code }) {
|
|
107
|
-
return VelociousError.safe(message, cause ? { cause, code } : { code });
|
|
108
|
-
}
|
|
78
|
+
// The declarative `static writableAttributes` permit list lives on
|
|
79
|
+
// FrontendModelBaseResource so every frontend-model resource can declare
|
|
80
|
+
// one; sync resources inherit it unchanged.
|
|
109
81
|
/**
|
|
110
82
|
* Returns a stable change-feed page after app authorization.
|
|
111
83
|
* @returns {Promise<Record<string, ?>>} Change-feed page result.
|
|
@@ -159,12 +131,21 @@ export default class SyncResourceBase extends FrontendModelBaseResource {
|
|
|
159
131
|
});
|
|
160
132
|
}
|
|
161
133
|
/**
|
|
162
|
-
* Builds the app replay service handling this replay request.
|
|
134
|
+
* Builds the app replay service handling this replay request. The resource
|
|
135
|
+
* ability, context, configuration, and locals are plumbed in under the
|
|
136
|
+
* app-declared {@link SyncResourceBase#replayServiceArgs} (app args win) so
|
|
137
|
+
* the default resource-routed replay works without wiring.
|
|
163
138
|
* @returns {import("./sync-envelope-replay-service.js").default} Replay service instance.
|
|
164
139
|
*/
|
|
165
140
|
buildReplayService() {
|
|
166
141
|
const ReplayServiceClass = this.replayServiceClass();
|
|
167
|
-
return new ReplayServiceClass(
|
|
142
|
+
return new ReplayServiceClass({
|
|
143
|
+
ability: this.ability,
|
|
144
|
+
abilityContext: this.getContext(),
|
|
145
|
+
configuration: this.controller ? this.controllerInstance().getConfiguration() : undefined,
|
|
146
|
+
locals: this.getLocals(),
|
|
147
|
+
...this.replayServiceArgs()
|
|
148
|
+
});
|
|
168
149
|
}
|
|
169
150
|
/**
|
|
170
151
|
* Returns constructor args for the app replay service.
|
|
@@ -200,11 +181,18 @@ export default class SyncResourceBase extends FrontendModelBaseResource {
|
|
|
200
181
|
throw new Error("SyncResourceBase#scopeChangesQuery must be implemented");
|
|
201
182
|
}
|
|
202
183
|
/**
|
|
203
|
-
*
|
|
184
|
+
* Resolves the replay service class handling replay mutations: the
|
|
185
|
+
* declarative {@link SyncResourceBase.ReplayServiceClass} static (shared
|
|
186
|
+
* resources included) when declared, otherwise
|
|
187
|
+
* {@link SyncEnvelopeReplayService}, which resource-routes mutations through
|
|
188
|
+
* the plumbed configuration registry. Apps declare the static instead of
|
|
189
|
+
* overriding this method.
|
|
204
190
|
* @returns {typeof import("./sync-envelope-replay-service.js").default} Replay service class.
|
|
205
191
|
*/
|
|
206
192
|
replayServiceClass() {
|
|
207
|
-
|
|
193
|
+
const ResourceClass = /** @type {typeof SyncResourceBase} */ (this.constructor);
|
|
194
|
+
const SharedResource = /** @type {typeof SyncResourceBase | null} */ (ResourceClass.sharedResourceClass() ?? null);
|
|
195
|
+
return ResourceClass.ReplayServiceClass ?? SharedResource?.ReplayServiceClass ?? SyncEnvelopeReplayService;
|
|
208
196
|
}
|
|
209
197
|
}
|
|
210
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3luYy1yZXNvdXJjZS1iYXNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3N5bmMvc3luYy1yZXNvdXJjZS1iYXNlLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWixPQUFPLEVBQUMseUJBQXlCLEVBQUMsTUFBTSxTQUFTLENBQUE7QUFFakQsT0FBTyx5QkFBeUIsTUFBTSw2Q0FBNkMsQ0FBQTtBQUNuRixPQUFPLDZCQUE2QixNQUFNLGdDQUFnQyxDQUFBO0FBQzFFLE9BQU8sMEJBQTBCLE1BQU0scUNBQXFDLENBQUE7QUFDNUUsT0FBTyxjQUFjLE1BQU0sdUJBQXVCLENBQUE7QUFFbEQsTUFBTSxtQkFBbUIsR0FBRyxhQUFhLENBQUE7QUFFekM7Ozs7O0dBS0c7QUFFSDs7Ozs7Ozs7R0FRRztBQUNILE1BQU0sQ0FBQyxPQUFPLE9BQU8sZ0JBQWlCLFNBQVEseUJBQXlCO0lBQ3JFOzs7O2lDQUk2QjtJQUM3QixNQUFNLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFBO0lBRWhDOzs7OzBHQUlzRztJQUN0RyxNQUFNLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFBO0lBRWhDOzs7Ozs7O09BT0c7SUFDSCw2QkFBNkIsQ0FBQyxFQUFDLFVBQVUsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFDO1FBQ3ZELElBQUksSUFBSSxDQUFDLGdCQUFnQixDQUFDLEVBQUMsS0FBSyxFQUFFLE1BQU0sRUFBQyxDQUFDO1lBQUUsT0FBTTtRQUVsRCxLQUFLLENBQUMsNkJBQTZCLENBQUMsRUFBQyxVQUFVLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBQyxDQUFDLENBQUE7SUFDbEUsQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDSCxnQkFBZ0IsQ0FBQyxFQUFDLEtBQUssRUFBRSxNQUFNLEVBQUM7UUFDOUIsTUFBTSxrQkFBa0IsR0FBRyxzQ0FBc0MsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQTtRQUV2RyxJQUFJLENBQUMsa0JBQWtCLElBQUksa0JBQWtCLENBQUMsTUFBTSxLQUFLLENBQUM7WUFBRSxPQUFPLEtBQUssQ0FBQTtRQUN4RSxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxNQUFNLENBQUMsTUFBTSxLQUFLLG1CQUFtQjtZQUFFLE9BQU8sS0FBSyxDQUFBO1FBRWpGLElBQUksTUFBTSxDQUFDLFFBQVEsS0FBSyxNQUFNLEVBQUUsQ0FBQztZQUMvQixNQUFNLGNBQWMsQ0FBQyxJQUFJLENBQUMsK0NBQStDLEVBQUUsRUFBQyxJQUFJLEVBQUUsMkJBQTJCLEVBQUMsQ0FBQyxDQUFBO1FBQ2pILENBQUM7UUFFRCxJQUFJLE9BQU8sTUFBTSxDQUFDLEtBQUssS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUNyQyxNQUFNLGNBQWMsQ0FBQyxJQUFJLENBQUMscUNBQXFDLEVBQUUsRUFBQyxJQUFJLEVBQUUsMkJBQTJCLEVBQUMsQ0FBQyxDQUFBO1FBQ3ZHLENBQUM7UUFFRCxNQUFNLFlBQVksR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFBO1FBRXhDLElBQUksQ0FBQyxZQUFZO1lBQUUsT0FBTyxJQUFJLENBQUE7UUFFOUIsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLHdCQUF3QixFQUFFLENBQUMsQ0FBQTtRQUMxRSxNQUFNLFNBQVMsR0FBRyxJQUFJLFlBQVksR0FBRyxDQUFBO1FBQ3JDLE1BQU0sVUFBVSxHQUFHLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsQ0FDeEQsR0FBRyxRQUFRLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLFNBQVMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FDNUYsQ0FBQyxDQUFBO1FBRUYsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFBO1FBRTNDLE9BQU8sSUFBSSxDQUFBO0lBQ2IsQ0FBQztJQUVEOzs7Ozs7Ozs7O09BVUc7SUFDSCwyQkFBMkIsQ0FBQyxVQUFVLEVBQUUsT0FBTyxHQUFHLEVBQUU7UUFDbEQsTUFBTSxNQUFNLEdBQUcsc0NBQXNDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsa0JBQWtCLENBQUE7UUFFM0YsSUFBSSxDQUFDLE1BQU07WUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLDJFQUEyRSxDQUFDLENBQUE7UUFFakksT0FBTyw2QkFBNkIsQ0FBQztZQUNuQyxVQUFVO1lBQ1YsWUFBWSxFQUFFLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUM7WUFDakYsTUFBTTtZQUNOLGlCQUFpQixFQUFFLE9BQU8sQ0FBQyxpQkFBaUI7U0FDN0MsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsc0JBQXNCLENBQUMsT0FBTyxFQUFFLEVBQUMsS0FBSyxFQUFFLElBQUksRUFBQztRQUMzQyxPQUFPLGNBQWMsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBQyxLQUFLLEVBQUUsSUFBSSxFQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsSUFBSSxFQUFDLENBQUMsQ0FBQTtJQUNyRSxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsS0FBSyxDQUFDLE9BQU87UUFDWCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUE7UUFDNUIsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQTtRQUV2QyxNQUFNLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUMsQ0FBQyxDQUFBO1FBRTVDLE9BQU8sTUFBTSxJQUFJLENBQUMsaUJBQWlCLENBQUMsRUFBQyxNQUFNLEVBQUUsS0FBSyxFQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQTtJQUNoRSxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsS0FBSyxDQUFDLE1BQU07UUFDVixNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQTtRQUVwRSxJQUFJLE1BQU0sQ0FBQyxNQUFNLEtBQUssT0FBTztZQUFFLE9BQU8sTUFBTSxDQUFBO1FBRTVDLE9BQU8sRUFBQyxNQUFNLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsS0FBSyxFQUFDLENBQUE7SUFDakQsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxZQUFZLENBQUMsTUFBTTtRQUNqQixNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFBO1FBRTFCLElBQUksS0FBSyxLQUFLLFNBQVMsSUFBSSxLQUFLLEtBQUssSUFBSTtZQUFFLE9BQU8sSUFBSSxDQUFBO1FBRXRELElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUN0RCxNQUFNLElBQUksS0FBSyxDQUFDLDhDQUE4QyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFBO1FBQ2hGLENBQUM7UUFFRCxNQUFNLFdBQVcsR0FBRyxnQ0FBZ0MsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBQzVELE1BQU0sWUFBWSxHQUFHLHlCQUF5QixDQUFDLFdBQVcsRUFBRSxjQUFjLENBQUMsQ0FBQTtRQUMzRSxNQUFNLFVBQVUsR0FBRyxXQUFXLENBQUMsVUFBVSxDQUFBO1FBRXpDLElBQUksQ0FBQyxVQUFVLElBQUksT0FBTyxVQUFVLEtBQUssUUFBUSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztZQUMvRSxNQUFNLElBQUksS0FBSyxDQUFDLHlEQUF5RCxNQUFNLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFBO1FBQ2hHLENBQUM7UUFFRCxPQUFPLEVBQUMsVUFBVSxFQUFFLGdDQUFnQyxDQUFDLENBQUMsVUFBVSxDQUFDLEVBQUUsWUFBWSxFQUFDLENBQUE7SUFDbEYsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxpQkFBaUIsQ0FBQyxFQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUM7UUFDL0IsT0FBTyxJQUFJLDBCQUEwQixDQUFDO1lBQ3BDLFVBQVUsRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFO1lBQ2pDLE1BQU07WUFDTixVQUFVLEVBQUUsQ0FBQyxFQUFDLEtBQUssRUFBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsRUFBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBQyxDQUFDO1NBQ3hFLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFFRDs7O09BR0c7SUFDSCxrQkFBa0I7UUFDaEIsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQTtRQUVwRCxPQUFPLElBQUksa0JBQWtCLENBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUMsQ0FBQTtJQUN6RCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsaUJBQWlCO1FBQ2YsT0FBTyxFQUFFLENBQUE7SUFDWCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsY0FBYztRQUNaLE1BQU0sVUFBVSxHQUFHLHNDQUFzQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLFVBQVUsQ0FBQTtRQUV2RixJQUFJLENBQUMsVUFBVTtZQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksZ0NBQWdDLENBQUMsQ0FBQTtRQUUxRixPQUFPLFVBQVUsQ0FBQTtJQUNuQixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLO1FBQzFCLE1BQU0sSUFBSSxLQUFLLENBQUMsdURBQXVELENBQUMsQ0FBQTtJQUMxRSxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILGlCQUFpQixDQUFDLEtBQUs7UUFDckIsTUFBTSxJQUFJLEtBQUssQ0FBQyx3REFBd0QsQ0FBQyxDQUFBO0lBQzNFLENBQUM7SUFFRDs7O09BR0c7SUFDSCxrQkFBa0I7UUFDaEIsTUFBTSxJQUFJLEtBQUssQ0FBQyx5REFBeUQsQ0FBQyxDQUFBO0lBQzVFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcblxuaW1wb3J0IHtmb3JjZWROb25CbGFua1N0cmluZ1BhcmFtfSBmcm9tIFwidHlwYW5pY1wiXG5cbmltcG9ydCBGcm9udGVuZE1vZGVsQmFzZVJlc291cmNlIGZyb20gXCIuLi9mcm9udGVuZC1tb2RlbC1yZXNvdXJjZS9iYXNlLXJlc291cmNlLmpzXCJcbmltcG9ydCBub3JtYWxpemVBdHRyaWJ1dGVzV2l0aFNjaGVtYSBmcm9tIFwiLi9zeW5jLWF0dHJpYnV0ZS1ub3JtYWxpemVyLmpzXCJcbmltcG9ydCBTeW5jTW9kZWxDaGFuZ2VGZWVkU2VydmljZSBmcm9tIFwiLi9zeW5jLW1vZGVsLWNoYW5nZS1mZWVkLXNlcnZpY2UuanNcIlxuaW1wb3J0IFZlbG9jaW91c0Vycm9yIGZyb20gXCIuLi92ZWxvY2lvdXMtZXJyb3IuanNcIlxuXG5jb25zdCBRVUlDS19TRUFSQ0hfQ09MVU1OID0gXCJxdWlja1NlYXJjaFwiXG5cbi8qKlxuICogT3B0aW9uYWwgY2xpZW50LWRlY2xhcmVkIHN5bmMgc2NvcGUgY2FycmllZCBvbiBhIGNoYW5nZXMgcmVxdWVzdC5cbiAqIEB0eXBlZGVmIHtvYmplY3R9IFNlcmlhbGl6ZWRDaGFuZ2VzU2NvcGVcbiAqIEBwcm9wZXJ0eSB7UmVjb3JkPHN0cmluZywgPz59IGNvbmRpdGlvbnMgLSBQbGFpbiBhdHRyaWJ1dGUgY29uZGl0aW9ucyBmcm9tIHRoZSBjbGllbnQgcXVlcnkuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gcmVzb3VyY2VUeXBlIC0gQ2xpZW50IHJlc291cmNlL21vZGVsIG5hbWUgdGhlIHNjb3BlIHdhcyBkZWNsYXJlZCBmb3IuXG4gKi9cblxuLyoqXG4gKiBCYXNlIHJlc291cmNlIGZvciBWZWxvY2lvdXMgc3luYyBlbmRwb2ludHMuXG4gKlxuICogVmVsb2Npb3VzIG93bnMgdGhlIGNoYW5nZXMvcmVwbGF5IG9yY2hlc3RyYXRpb24gKHNjb3BlIHBhcnNpbmcsIGZlZWQgcGFnaW5nLFxuICogcmVwbGF5IGRlbGVnYXRpb24sIHJlc3BvbnNlIHNoYXBlKSB3aGlsZSBhcHBzIHN1YmNsYXNzIGFuZCBvbmx5IGRlY2xhcmVcbiAqIGF1dGhvcml6YXRpb24sIGZlZWQgc2NvcGluZywgYW5kIHRoZWlyIHJlcGxheSBzZXJ2aWNlLlxuICogQHRlbXBsYXRlIHt0eXBlb2YgaW1wb3J0KFwiLi4vZGF0YWJhc2UvcmVjb3JkL2luZGV4LmpzXCIpLmRlZmF1bHR9IFtUTW9kZWxDbGFzcz10eXBlb2YgaW1wb3J0KFwiLi4vZGF0YWJhc2UvcmVjb3JkL2luZGV4LmpzXCIpLmRlZmF1bHRdXG4gKiBAYXVnbWVudHMge0Zyb250ZW5kTW9kZWxCYXNlUmVzb3VyY2U8VE1vZGVsQ2xhc3M+fVxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTeW5jUmVzb3VyY2VCYXNlIGV4dGVuZHMgRnJvbnRlbmRNb2RlbEJhc2VSZXNvdXJjZSB7XG4gIC8qKlxuICAgKiBEZWNsYXJhdGl2ZSBxdWljay1zZWFyY2ggdGV4dCBjb2x1bW5zLiBXaGVuIGRlY2xhcmVkLCBhbiBpbmRleCBzZWFyY2ggb25cbiAgICogdGhlIHBzZXVkby1jb2x1bW4gYHF1aWNrU2VhcmNoYCBleHBhbmRzIHRvIGFuIE9SIG9mIExJS0UgY29uZGl0aW9ucyBvdmVyXG4gICAqIHRoZXNlIHJvb3QtdGFibGUgY29sdW1ucyBpbnN0ZWFkIG9mIGhpdHRpbmcgdGhlIGNvbnRyb2xsZXIgZGVmYXVsdC5cbiAgICogQHR5cGUge3N0cmluZ1tdIHwgbnVsbH0gKi9cbiAgc3RhdGljIHF1aWNrU2VhcmNoQ29sdW1ucyA9IG51bGxcblxuICAvKipcbiAgICogRGVjbGFyYXRpdmUgd3JpdGFibGUtYXR0cmlidXRlIHNjaGVtYSBjb25zdW1lZCBieVxuICAgKiB7QGxpbmsgU3luY1Jlc291cmNlQmFzZSNub3JtYWxpemVXcml0YWJsZUF0dHJpYnV0ZXN9LCBrZXllZCBieSBjYW1lbENhc2VcbiAgICogYXR0cmlidXRlIG5hbWUuXG4gICAqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCBpbXBvcnQoXCIuL3N5bmMtYXR0cmlidXRlLW5vcm1hbGl6ZXIuanNcIikuU3luY0F0dHJpYnV0ZVNjaGVtYUVudHJ5PiB8IG51bGx9ICovXG4gIHN0YXRpYyB3cml0YWJsZUF0dHJpYnV0ZXMgPSBudWxsXG5cbiAgLyoqXG4gICAqIEFwcGxpZXMgZnJvbnRlbmQtbW9kZWwgaW5kZXggc2VhcmNoZXMsIGV4cGFuZGluZyBkZWNsYXJlZCBxdWljayBzZWFyY2hlcy5cbiAgICogQHBhcmFtIHtvYmplY3R9IGFyZ3MgLSBTZWFyY2ggYXJncy5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuLi9mcm9udGVuZC1tb2RlbC1yZXNvdXJjZS9iYXNlLXJlc291cmNlLmpzXCIpLkZyb250ZW5kTW9kZWxSZXNvdXJjZUNvbnRyb2xsZXJ9IGFyZ3MuY29udHJvbGxlciAtIENvbnRyb2xsZXIgaGFuZGxpbmcgdGhlIHF1ZXJ5LlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4uL2Zyb250ZW5kLW1vZGVsLXJlc291cmNlL2Jhc2UtcmVzb3VyY2UuanNcIikuRnJvbnRlbmRNb2RlbFJlc291cmNlQW55UXVlcnl9IGFyZ3MucXVlcnkgLSBRdWVyeSBpbnN0YW5jZS5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuLi9mcm9udGVuZC1tb2RlbC1yZXNvdXJjZS9iYXNlLXJlc291cmNlLmpzXCIpLkZyb250ZW5kTW9kZWxSZXNvdXJjZVNlYXJjaH0gYXJncy5zZWFyY2ggLSBTZWFyY2ggcGFyYW1zLlxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIGFwcGx5RnJvbnRlbmRNb2RlbEluZGV4U2VhcmNoKHtjb250cm9sbGVyLCBxdWVyeSwgc2VhcmNofSkge1xuICAgIGlmICh0aGlzLmFwcGx5UXVpY2tTZWFyY2goe3F1ZXJ5LCBzZWFyY2h9KSkgcmV0dXJuXG5cbiAgICBzdXBlci5hcHBseUZyb250ZW5kTW9kZWxJbmRleFNlYXJjaCh7Y29udHJvbGxlciwgcXVlcnksIHNlYXJjaH0pXG4gIH1cblxuICAvKipcbiAgICogRXhwYW5kcyBhIGBxdWlja1NlYXJjaGAgcHNldWRvLWNvbHVtbiBzZWFyY2ggaW50byBhbiBPUiBvZiBMSUtFIGNvbmRpdGlvbnNcbiAgICogb3ZlciB0aGUgZGVjbGFyZWQge0BsaW5rIFN5bmNSZXNvdXJjZUJhc2UucXVpY2tTZWFyY2hDb2x1bW5zfS5cbiAgICogQHBhcmFtIHtvYmplY3R9IGFyZ3MgLSBTZWFyY2ggYXJncy5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuLi9mcm9udGVuZC1tb2RlbC1yZXNvdXJjZS9iYXNlLXJlc291cmNlLmpzXCIpLkZyb250ZW5kTW9kZWxSZXNvdXJjZUFueVF1ZXJ5fSBhcmdzLnF1ZXJ5IC0gUXVlcnkgdG8gZmlsdGVyLlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4uL2Zyb250ZW5kLW1vZGVsLXJlc291cmNlL2Jhc2UtcmVzb3VyY2UuanNcIikuRnJvbnRlbmRNb2RlbFJlc291cmNlU2VhcmNofSBhcmdzLnNlYXJjaCAtIFNlYXJjaCBwYXlsb2FkLlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gV2hldGhlciB0aGUgc2VhcmNoIHdhcyBoYW5kbGVkIGFzIGEgcXVpY2sgc2VhcmNoLlxuICAgKi9cbiAgYXBwbHlRdWlja1NlYXJjaCh7cXVlcnksIHNlYXJjaH0pIHtcbiAgICBjb25zdCBxdWlja1NlYXJjaENvbHVtbnMgPSAvKiogQHR5cGUge3R5cGVvZiBTeW5jUmVzb3VyY2VCYXNlfSAqLyAodGhpcy5jb25zdHJ1Y3RvcikucXVpY2tTZWFyY2hDb2x1bW5zXG5cbiAgICBpZiAoIXF1aWNrU2VhcmNoQ29sdW1ucyB8fCBxdWlja1NlYXJjaENvbHVtbnMubGVuZ3RoID09PSAwKSByZXR1cm4gZmFsc2VcbiAgICBpZiAoc2VhcmNoLnBhdGgubGVuZ3RoID4gMCB8fCBzZWFyY2guY29sdW1uICE9PSBRVUlDS19TRUFSQ0hfQ09MVU1OKSByZXR1cm4gZmFsc2VcblxuICAgIGlmIChzZWFyY2gub3BlcmF0b3IgIT09IFwibGlrZVwiKSB7XG4gICAgICB0aHJvdyBWZWxvY2lvdXNFcnJvci5zYWZlKFwiU3luYyBxdWljayBzZWFyY2ggbXVzdCB1c2UgdGhlIGxpa2Ugb3BlcmF0b3IuXCIsIHtjb2RlOiBcInN5bmMtaW52YWxpZC1xdWljay1zZWFyY2hcIn0pXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBzZWFyY2gudmFsdWUgIT09IFwic3RyaW5nXCIpIHtcbiAgICAgIHRocm93IFZlbG9jaW91c0Vycm9yLnNhZmUoXCJTeW5jIHF1aWNrIHNlYXJjaCBtdXN0IGJlIGEgc3RyaW5nLlwiLCB7Y29kZTogXCJzeW5jLWludmFsaWQtcXVpY2stc2VhcmNoXCJ9KVxuICAgIH1cblxuICAgIGNvbnN0IHRyaW1tZWRWYWx1ZSA9IHNlYXJjaC52YWx1ZS50cmltKClcblxuICAgIGlmICghdHJpbW1lZFZhbHVlKSByZXR1cm4gdHJ1ZVxuXG4gICAgY29uc3QgdGFibGVTcWwgPSBxdWVyeS5kcml2ZXIucXVvdGVUYWJsZShxdWVyeS5nZXRUYWJsZVJlZmVyZW5jZUZvckpvaW4oKSlcbiAgICBjb25zdCBsaWtlVmFsdWUgPSBgJSR7dHJpbW1lZFZhbHVlfSVgXG4gICAgY29uc3QgY29uZGl0aW9ucyA9IHF1aWNrU2VhcmNoQ29sdW1ucy5tYXAoKGNvbHVtbk5hbWUpID0+IChcbiAgICAgIGAke3RhYmxlU3FsfS4ke3F1ZXJ5LmRyaXZlci5xdW90ZUNvbHVtbihjb2x1bW5OYW1lKX0gTElLRSAke3F1ZXJ5LmRyaXZlci5xdW90ZShsaWtlVmFsdWUpfWBcbiAgICApKVxuXG4gICAgcXVlcnkud2hlcmUoYCgke2NvbmRpdGlvbnMuam9pbihcIiBPUiBcIil9KWApXG5cbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgLyoqXG4gICAqIE5vcm1hbGl6ZXMgaW5jb21pbmcgd3JpdGFibGUgYXR0cmlidXRlcyB0aHJvdWdoIHRoZSBkZWNsYXJlZFxuICAgKiB7QGxpbmsgU3luY1Jlc291cmNlQmFzZS53cml0YWJsZUF0dHJpYnV0ZXN9IHNjaGVtYTogY2FtZWxDYXNlIGFuZFxuICAgKiBzbmFrZV9jYXNlIGlucHV0IGtleXMgYXJlIGFjY2VwdGVkLCB2YWx1ZXMgYXJlIHZhbGlkYXRlZCBwZXIgdHlwZSBhbmQgdGhlXG4gICAqIG5vcm1hbGl6ZWQgdmFsdWVzIGFyZSB3cml0dGVuIHVuZGVyIHNuYWtlX2Nhc2UgY29sdW1uIGtleXMuIFZhbGlkYXRpb25cbiAgICogZmFpbHVyZXMgdGhyb3cgY2xpZW50LXNhZmUgZXJyb3JzIGJ1aWx0IGJ5XG4gICAqIHtAbGluayBTeW5jUmVzb3VyY2VCYXNlI3dyaXRhYmxlQXR0cmlidXRlRXJyb3J9LlxuICAgKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsID8+fSBhdHRyaWJ1dGVzIC0gUmF3IGluY29taW5nIGF0dHJpYnV0ZXMuXG4gICAqIEBwYXJhbSB7e3Vua25vd25BdHRyaWJ1dGVzPzogXCJlcnJvclwiIHwgXCJpZ25vcmVcIn19IFtvcHRpb25zXSAtIFVua25vd24gaW5wdXQta2V5IGhhbmRsaW5nLiBEZWZhdWx0cyB0byBcImVycm9yXCIuXG4gICAqIEByZXR1cm5zIHtSZWNvcmQ8c3RyaW5nLCA/Pn0gTm9ybWFsaXplZCBhdHRyaWJ1dGVzIGtleWVkIGJ5IGNvbHVtbiBuYW1lcy5cbiAgICovXG4gIG5vcm1hbGl6ZVdyaXRhYmxlQXR0cmlidXRlcyhhdHRyaWJ1dGVzLCBvcHRpb25zID0ge30pIHtcbiAgICBjb25zdCBzY2hlbWEgPSAvKiogQHR5cGUge3R5cGVvZiBTeW5jUmVzb3VyY2VCYXNlfSAqLyAodGhpcy5jb25zdHJ1Y3Rvcikud3JpdGFibGVBdHRyaWJ1dGVzXG5cbiAgICBpZiAoIXNjaGVtYSkgdGhyb3cgbmV3IEVycm9yKGAke3RoaXMuY29uc3RydWN0b3IubmFtZX0gbXVzdCBkZWZpbmUgc3RhdGljIHdyaXRhYmxlQXR0cmlidXRlcyB0byB1c2Ugbm9ybWFsaXplV3JpdGFibGVBdHRyaWJ1dGVzYClcblxuICAgIHJldHVybiBub3JtYWxpemVBdHRyaWJ1dGVzV2l0aFNjaGVtYSh7XG4gICAgICBhdHRyaWJ1dGVzLFxuICAgICAgZXJyb3JGYWN0b3J5OiAobWVzc2FnZSwgZGV0YWlscykgPT4gdGhpcy53cml0YWJsZUF0dHJpYnV0ZUVycm9yKG1lc3NhZ2UsIGRldGFpbHMpLFxuICAgICAgc2NoZW1hLFxuICAgICAgdW5rbm93bkF0dHJpYnV0ZXM6IG9wdGlvbnMudW5rbm93bkF0dHJpYnV0ZXNcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkcyB0aGUgY2xpZW50LXNhZmUgZXJyb3IgdGhyb3duIGZvciBhIGZhaWxlZCB3cml0YWJsZS1hdHRyaWJ1dGUgdmFsaWRhdGlvbi5cbiAgICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2UgLSBIdW1hbi1yZWFkYWJsZSB2YWxpZGF0aW9uIG1lc3NhZ2UuXG4gICAqIEBwYXJhbSB7e2NhdXNlPzogRXJyb3IsIGNvZGU6IHN0cmluZ319IGRldGFpbHMgLSBTdGFibGUgbWFjaGluZS1yZWFkYWJsZSBjb2RlIGFuZCBvcHRpb25hbCBjYXVzZS5cbiAgICogQHJldHVybnMge0Vycm9yfSBDbGllbnQtc2FmZSBlcnJvci5cbiAgICovXG4gIHdyaXRhYmxlQXR0cmlidXRlRXJyb3IobWVzc2FnZSwge2NhdXNlLCBjb2RlfSkge1xuICAgIHJldHVybiBWZWxvY2lvdXNFcnJvci5zYWZlKG1lc3NhZ2UsIGNhdXNlID8ge2NhdXNlLCBjb2RlfSA6IHtjb2RlfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgc3RhYmxlIGNoYW5nZS1mZWVkIHBhZ2UgYWZ0ZXIgYXBwIGF1dGhvcml6YXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPFJlY29yZDxzdHJpbmcsID8+Pn0gQ2hhbmdlLWZlZWQgcGFnZSByZXN1bHQuXG4gICAqL1xuICBhc3luYyBjaGFuZ2VzKCkge1xuICAgIGNvbnN0IHBhcmFtcyA9IHRoaXMucGFyYW1zKClcbiAgICBjb25zdCBzY29wZSA9IHRoaXMuY2hhbmdlc1Njb3BlKHBhcmFtcylcblxuICAgIGF3YWl0IHRoaXMuYXV0aG9yaXplQ2hhbmdlcyh7cGFyYW1zLCBzY29wZX0pXG5cbiAgICByZXR1cm4gYXdhaXQgdGhpcy5jaGFuZ2VGZWVkU2VydmljZSh7cGFyYW1zLCBzY29wZX0pLmNoYW5nZXMoKVxuICB9XG5cbiAgLyoqXG4gICAqIFJlcGxheXMgY2xpZW50IHN5bmMgZW52ZWxvcGVzIHRocm91Z2ggdGhlIGFwcCByZXBsYXkgc2VydmljZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8UmVjb3JkPHN0cmluZywgPz4+fSBSZXBsYXkgcmVzdWx0IHdpdGggcGVyLXN5bmMgc3RhdGVzLlxuICAgKi9cbiAgYXN5bmMgcmVwbGF5KCkge1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuYnVpbGRSZXBsYXlTZXJ2aWNlKCkucmVwbGF5KHRoaXMucGFyYW1zKCkpXG5cbiAgICBpZiAocmVzdWx0LnN0YXR1cyA9PT0gXCJlcnJvclwiKSByZXR1cm4gcmVzdWx0XG5cbiAgICByZXR1cm4ge3N0YXR1czogXCJzdWNjZXNzXCIsIHN5bmNzOiByZXN1bHQuc3luY3N9XG4gIH1cblxuICAvKipcbiAgICogUGFyc2VzIHRoZSBvcHRpb25hbCBjbGllbnQtZGVjbGFyZWQgc2NvcGUgZnJvbSByZXF1ZXN0IHBhcmFtcy5cbiAgICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCA/Pn0gcGFyYW1zIC0gUmVxdWVzdCBwYXJhbXMuXG4gICAqIEByZXR1cm5zIHtTZXJpYWxpemVkQ2hhbmdlc1Njb3BlIHwgbnVsbH0gUGFyc2VkIHNjb3BlLCBvciBudWxsIHdoZW4gdGhlIGNsaWVudCBzZW50IG5vbmUuXG4gICAqL1xuICBjaGFuZ2VzU2NvcGUocGFyYW1zKSB7XG4gICAgY29uc3Qgc2NvcGUgPSBwYXJhbXMuc2NvcGVcblxuICAgIGlmIChzY29wZSA9PT0gdW5kZWZpbmVkIHx8IHNjb3BlID09PSBudWxsKSByZXR1cm4gbnVsbFxuXG4gICAgaWYgKHR5cGVvZiBzY29wZSAhPT0gXCJvYmplY3RcIiB8fCBBcnJheS5pc0FycmF5KHNjb3BlKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBTeW5jIGNoYW5nZXMgc2NvcGUgbXVzdCBiZSBhbiBvYmplY3QsIGdvdDogJHtTdHJpbmcoc2NvcGUpfWApXG4gICAgfVxuXG4gICAgY29uc3Qgc2NvcGVQYXJhbXMgPSAvKiogQHR5cGUge1JlY29yZDxzdHJpbmcsID8+fSAqLyAoc2NvcGUpXG4gICAgY29uc3QgcmVzb3VyY2VUeXBlID0gZm9yY2VkTm9uQmxhbmtTdHJpbmdQYXJhbShzY29wZVBhcmFtcywgXCJyZXNvdXJjZVR5cGVcIilcbiAgICBjb25zdCBjb25kaXRpb25zID0gc2NvcGVQYXJhbXMuY29uZGl0aW9uc1xuXG4gICAgaWYgKCFjb25kaXRpb25zIHx8IHR5cGVvZiBjb25kaXRpb25zICE9PSBcIm9iamVjdFwiIHx8IEFycmF5LmlzQXJyYXkoY29uZGl0aW9ucykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgU3luYyBjaGFuZ2VzIHNjb3BlLmNvbmRpdGlvbnMgbXVzdCBiZSBhbiBvYmplY3QsIGdvdDogJHtTdHJpbmcoY29uZGl0aW9ucyl9YClcbiAgICB9XG5cbiAgICByZXR1cm4ge2NvbmRpdGlvbnM6IC8qKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgPz59ICovIChjb25kaXRpb25zKSwgcmVzb3VyY2VUeXBlfVxuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkcyB0aGUgY2hhbmdlLWZlZWQgc2VydmljZSBzZXJ2aW5nIHRoaXMgY2hhbmdlcyByZXF1ZXN0LlxuICAgKiBAcGFyYW0ge3twYXJhbXM6IFJlY29yZDxzdHJpbmcsID8+LCBzY29wZTogU2VyaWFsaXplZENoYW5nZXNTY29wZSB8IG51bGx9fSBhcmdzIC0gUmVxdWVzdCBwYXJhbXMgYW5kIHBhcnNlZCBzY29wZS5cbiAgICogQHJldHVybnMge3tjaGFuZ2VzOiAoKSA9PiBQcm9taXNlPFJlY29yZDxzdHJpbmcsID8+Pn19IENoYW5nZS1mZWVkIHNlcnZpY2UuXG4gICAqL1xuICBjaGFuZ2VGZWVkU2VydmljZSh7cGFyYW1zLCBzY29wZX0pIHtcbiAgICByZXR1cm4gbmV3IFN5bmNNb2RlbENoYW5nZUZlZWRTZXJ2aWNlKHtcbiAgICAgIG1vZGVsQ2xhc3M6IHRoaXMuc3luY01vZGVsQ2xhc3MoKSxcbiAgICAgIHBhcmFtcyxcbiAgICAgIHNjb3BlUXVlcnk6ICh7cXVlcnl9KSA9PiB0aGlzLnNjb3BlQ2hhbmdlc1F1ZXJ5KHtwYXJhbXMsIHF1ZXJ5LCBzY29wZX0pXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZHMgdGhlIGFwcCByZXBsYXkgc2VydmljZSBoYW5kbGluZyB0aGlzIHJlcGxheSByZXF1ZXN0LlxuICAgKiBAcmV0dXJucyB7aW1wb3J0KFwiLi9zeW5jLWVudmVsb3BlLXJlcGxheS1zZXJ2aWNlLmpzXCIpLmRlZmF1bHR9IFJlcGxheSBzZXJ2aWNlIGluc3RhbmNlLlxuICAgKi9cbiAgYnVpbGRSZXBsYXlTZXJ2aWNlKCkge1xuICAgIGNvbnN0IFJlcGxheVNlcnZpY2VDbGFzcyA9IHRoaXMucmVwbGF5U2VydmljZUNsYXNzKClcblxuICAgIHJldHVybiBuZXcgUmVwbGF5U2VydmljZUNsYXNzKHRoaXMucmVwbGF5U2VydmljZUFyZ3MoKSlcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGNvbnN0cnVjdG9yIGFyZ3MgZm9yIHRoZSBhcHAgcmVwbGF5IHNlcnZpY2UuXG4gICAqIEByZXR1cm5zIHtSZWNvcmQ8c3RyaW5nLCA/Pn0gUmVwbGF5IHNlcnZpY2UgY29uc3RydWN0b3IgYXJncy5cbiAgICovXG4gIHJlcGxheVNlcnZpY2VBcmdzKCkge1xuICAgIHJldHVybiB7fVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHN5bmMgbW9kZWwgY2xhc3MgYmFja2luZyB0aGUgY2hhbmdlIGZlZWQuXG4gICAqIEByZXR1cm5zIHt0eXBlb2YgaW1wb3J0KFwiLi4vZGF0YWJhc2UvcmVjb3JkL2luZGV4LmpzXCIpLmRlZmF1bHR9IFN5bmMgbW9kZWwgY2xhc3MuXG4gICAqL1xuICBzeW5jTW9kZWxDbGFzcygpIHtcbiAgICBjb25zdCBtb2RlbENsYXNzID0gLyoqIEB0eXBlIHt0eXBlb2YgU3luY1Jlc291cmNlQmFzZX0gKi8gKHRoaXMuY29uc3RydWN0b3IpLk1vZGVsQ2xhc3NcblxuICAgIGlmICghbW9kZWxDbGFzcykgdGhyb3cgbmV3IEVycm9yKGAke3RoaXMuY29uc3RydWN0b3IubmFtZX0gbXVzdCBkZWZpbmUgc3RhdGljIE1vZGVsQ2xhc3NgKVxuXG4gICAgcmV0dXJuIG1vZGVsQ2xhc3NcbiAgfVxuXG4gIC8qKlxuICAgKiBBdXRob3JpemVzIHRoZSBjdXJyZW50IGNvbnRleHQgZm9yIHJlYWRpbmcgdGhlIHJlcXVlc3RlZCBjaGFuZ2VzLlxuICAgKiBAcGFyYW0ge3twYXJhbXM6IFJlY29yZDxzdHJpbmcsID8+LCBzY29wZTogU2VyaWFsaXplZENoYW5nZXNTY29wZSB8IG51bGx9fSBfYXJncyAtIFJlcXVlc3QgcGFyYW1zIGFuZCBwYXJzZWQgc2NvcGUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fSBSZXNvbHZlcyB3aGVuIGFjY2VzcyBpcyBhbGxvd2VkOyB0aHJvd3Mgb3RoZXJ3aXNlLlxuICAgKi9cbiAgYXN5bmMgYXV0aG9yaXplQ2hhbmdlcyhfYXJncykge1xuICAgIHRocm93IG5ldyBFcnJvcihcIlN5bmNSZXNvdXJjZUJhc2UjYXV0aG9yaXplQ2hhbmdlcyBtdXN0IGJlIGltcGxlbWVudGVkXCIpXG4gIH1cblxuICAvKipcbiAgICogQXBwbGllcyBhcHAgdmlzaWJpbGl0eSBzY29waW5nIG9udG8gdGhlIGNoYW5nZS1mZWVkIHF1ZXJ5LlxuICAgKiBAcGFyYW0ge3twYXJhbXM6IFJlY29yZDxzdHJpbmcsID8+LCBxdWVyeTogaW1wb3J0KFwiLi4vZGF0YWJhc2UvcXVlcnkvbW9kZWwtY2xhc3MtcXVlcnkuanNcIikuZGVmYXVsdCwgc2NvcGU6IFNlcmlhbGl6ZWRDaGFuZ2VzU2NvcGUgfCBudWxsfX0gX2FyZ3MgLSBSZXF1ZXN0IHBhcmFtcywgZmVlZCBxdWVyeSwgYW5kIHBhcnNlZCBzY29wZS5cbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICBzY29wZUNoYW5nZXNRdWVyeShfYXJncykge1xuICAgIHRocm93IG5ldyBFcnJvcihcIlN5bmNSZXNvdXJjZUJhc2Ujc2NvcGVDaGFuZ2VzUXVlcnkgbXVzdCBiZSBpbXBsZW1lbnRlZFwiKVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGFwcCByZXBsYXkgc2VydmljZSBjbGFzcyBoYW5kbGluZyByZXBsYXkgbXV0YXRpb25zLlxuICAgKiBAcmV0dXJucyB7dHlwZW9mIGltcG9ydChcIi4vc3luYy1lbnZlbG9wZS1yZXBsYXktc2VydmljZS5qc1wiKS5kZWZhdWx0fSBSZXBsYXkgc2VydmljZSBjbGFzcy5cbiAgICovXG4gIHJlcGxheVNlcnZpY2VDbGFzcygpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJTeW5jUmVzb3VyY2VCYXNlI3JlcGxheVNlcnZpY2VDbGFzcyBtdXN0IGJlIGltcGxlbWVudGVkXCIpXG4gIH1cbn1cbiJdfQ==
|
|
198
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3luYy1yZXNvdXJjZS1iYXNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3N5bmMvc3luYy1yZXNvdXJjZS1iYXNlLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWixPQUFPLEVBQUMseUJBQXlCLEVBQUMsTUFBTSxTQUFTLENBQUE7QUFFakQsT0FBTyx5QkFBeUIsTUFBTSw2Q0FBNkMsQ0FBQTtBQUNuRixPQUFPLHlCQUF5QixNQUFNLG1DQUFtQyxDQUFBO0FBQ3pFLE9BQU8sMEJBQTBCLE1BQU0scUNBQXFDLENBQUE7QUFDNUUsT0FBTyxjQUFjLE1BQU0sdUJBQXVCLENBQUE7QUFFbEQsTUFBTSxtQkFBbUIsR0FBRyxhQUFhLENBQUE7QUFFekM7Ozs7O0dBS0c7QUFFSDs7Ozs7Ozs7R0FRRztBQUNILE1BQU0sQ0FBQyxPQUFPLE9BQU8sZ0JBQWlCLFNBQVEseUJBQXlCO0lBQ3JFOzs7O09BSUc7SUFDSCxNQUFNLENBQUMsa0JBQWtCLEdBQUcsU0FBUyxDQUFBO0lBRXJDOzs7O2lDQUk2QjtJQUM3QixNQUFNLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFBO0lBRWhDOzs7Ozs7O09BT0c7SUFDSCw2QkFBNkIsQ0FBQyxFQUFDLFVBQVUsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFDO1FBQ3ZELElBQUksSUFBSSxDQUFDLGdCQUFnQixDQUFDLEVBQUMsS0FBSyxFQUFFLE1BQU0sRUFBQyxDQUFDO1lBQUUsT0FBTTtRQUVsRCxLQUFLLENBQUMsNkJBQTZCLENBQUMsRUFBQyxVQUFVLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBQyxDQUFDLENBQUE7SUFDbEUsQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDSCxnQkFBZ0IsQ0FBQyxFQUFDLEtBQUssRUFBRSxNQUFNLEVBQUM7UUFDOUIsTUFBTSxrQkFBa0IsR0FBRyxzQ0FBc0MsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxrQkFBa0IsQ0FB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SSx5QkFBeUIsQ0FBQTtJQUM1RyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbmltcG9ydCB7Zm9yY2VkTm9uQmxhbmtTdHJpbmdQYXJhbX0gZnJvbSBcInR5cGFuaWNcIlxuXG5pbXBvcnQgRnJvbnRlbmRNb2RlbEJhc2VSZXNvdXJjZSBmcm9tIFwiLi4vZnJvbnRlbmQtbW9kZWwtcmVzb3VyY2UvYmFzZS1yZXNvdXJjZS5qc1wiXG5pbXBvcnQgU3luY0VudmVsb3BlUmVwbGF5U2VydmljZSBmcm9tIFwiLi9zeW5jLWVudmVsb3BlLXJlcGxheS1zZXJ2aWNlLmpzXCJcbmltcG9ydCBTeW5jTW9kZWxDaGFuZ2VGZWVkU2VydmljZSBmcm9tIFwiLi9zeW5jLW1vZGVsLWNoYW5nZS1mZWVkLXNlcnZpY2UuanNcIlxuaW1wb3J0IFZlbG9jaW91c0Vycm9yIGZyb20gXCIuLi92ZWxvY2lvdXMtZXJyb3IuanNcIlxuXG5jb25zdCBRVUlDS19TRUFSQ0hfQ09MVU1OID0gXCJxdWlja1NlYXJjaFwiXG5cbi8qKlxuICogT3B0aW9uYWwgY2xpZW50LWRlY2xhcmVkIHN5bmMgc2NvcGUgY2FycmllZCBvbiBhIGNoYW5nZXMgcmVxdWVzdC5cbiAqIEB0eXBlZGVmIHtvYmplY3R9IFNlcmlhbGl6ZWRDaGFuZ2VzU2NvcGVcbiAqIEBwcm9wZXJ0eSB7UmVjb3JkPHN0cmluZywgPz59IGNvbmRpdGlvbnMgLSBQbGFpbiBhdHRyaWJ1dGUgY29uZGl0aW9ucyBmcm9tIHRoZSBjbGllbnQgcXVlcnkuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gcmVzb3VyY2VUeXBlIC0gQ2xpZW50IHJlc291cmNlL21vZGVsIG5hbWUgdGhlIHNjb3BlIHdhcyBkZWNsYXJlZCBmb3IuXG4gKi9cblxuLyoqXG4gKiBCYXNlIHJlc291cmNlIGZvciBWZWxvY2lvdXMgc3luYyBlbmRwb2ludHMuXG4gKlxuICogVmVsb2Npb3VzIG93bnMgdGhlIGNoYW5nZXMvcmVwbGF5IG9yY2hlc3RyYXRpb24gKHNjb3BlIHBhcnNpbmcsIGZlZWQgcGFnaW5nLFxuICogcmVwbGF5IGRlbGVnYXRpb24sIHJlc3BvbnNlIHNoYXBlKSB3aGlsZSBhcHBzIHN1YmNsYXNzIGFuZCBvbmx5IGRlY2xhcmVcbiAqIGF1dGhvcml6YXRpb24sIGZlZWQgc2NvcGluZywgYW5kIHRoZWlyIHJlcGxheSBzZXJ2aWNlLlxuICogQHRlbXBsYXRlIHt0eXBlb2YgaW1wb3J0KFwiLi4vZGF0YWJhc2UvcmVjb3JkL2luZGV4LmpzXCIpLmRlZmF1bHR9IFtUTW9kZWxDbGFzcz10eXBlb2YgaW1wb3J0KFwiLi4vZGF0YWJhc2UvcmVjb3JkL2luZGV4LmpzXCIpLmRlZmF1bHRdXG4gKiBAYXVnbWVudHMge0Zyb250ZW5kTW9kZWxCYXNlUmVzb3VyY2U8VE1vZGVsQ2xhc3M+fVxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTeW5jUmVzb3VyY2VCYXNlIGV4dGVuZHMgRnJvbnRlbmRNb2RlbEJhc2VSZXNvdXJjZSB7XG4gIC8qKlxuICAgKiBSZXBsYXkgc2VydmljZSBjbGFzcyBoYW5kbGluZyByZXBsYXkgbXV0YXRpb25zIGZvciB0aGlzIHJlc291cmNlLFxuICAgKiBkZWNsYXJlZCBpbnN0ZWFkIG9mIG92ZXJyaWRpbmcge0BsaW5rIFN5bmNSZXNvdXJjZUJhc2UjcmVwbGF5U2VydmljZUNsYXNzfS5cbiAgICogQHR5cGUge3R5cGVvZiBpbXBvcnQoXCIuL3N5bmMtZW52ZWxvcGUtcmVwbGF5LXNlcnZpY2UuanNcIikuZGVmYXVsdCB8IHVuZGVmaW5lZH1cbiAgICovXG4gIHN0YXRpYyBSZXBsYXlTZXJ2aWNlQ2xhc3MgPSB1bmRlZmluZWRcblxuICAvKipcbiAgICogRGVjbGFyYXRpdmUgcXVpY2stc2VhcmNoIHRleHQgY29sdW1ucy4gV2hlbiBkZWNsYXJlZCwgYW4gaW5kZXggc2VhcmNoIG9uXG4gICAqIHRoZSBwc2V1ZG8tY29sdW1uIGBxdWlja1NlYXJjaGAgZXhwYW5kcyB0byBhbiBPUiBvZiBMSUtFIGNvbmRpdGlvbnMgb3ZlclxuICAgKiB0aGVzZSByb290LXRhYmxlIGNvbHVtbnMgaW5zdGVhZCBvZiBoaXR0aW5nIHRoZSBjb250cm9sbGVyIGRlZmF1bHQuXG4gICAqIEB0eXBlIHtzdHJpbmdbXSB8IG51bGx9ICovXG4gIHN0YXRpYyBxdWlja1NlYXJjaENvbHVtbnMgPSBudWxsXG5cbiAgLyoqXG4gICAqIEFwcGxpZXMgZnJvbnRlbmQtbW9kZWwgaW5kZXggc2VhcmNoZXMsIGV4cGFuZGluZyBkZWNsYXJlZCBxdWljayBzZWFyY2hlcy5cbiAgICogQHBhcmFtIHtvYmplY3R9IGFyZ3MgLSBTZWFyY2ggYXJncy5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuLi9mcm9udGVuZC1tb2RlbC1yZXNvdXJjZS9iYXNlLXJlc291cmNlLmpzXCIpLkZyb250ZW5kTW9kZWxSZXNvdXJjZUNvbnRyb2xsZXJ9IGFyZ3MuY29udHJvbGxlciAtIENvbnRyb2xsZXIgaGFuZGxpbmcgdGhlIHF1ZXJ5LlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4uL2Zyb250ZW5kLW1vZGVsLXJlc291cmNlL2Jhc2UtcmVzb3VyY2UuanNcIikuRnJvbnRlbmRNb2RlbFJlc291cmNlQW55UXVlcnl9IGFyZ3MucXVlcnkgLSBRdWVyeSBpbnN0YW5jZS5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuLi9mcm9udGVuZC1tb2RlbC1yZXNvdXJjZS9iYXNlLXJlc291cmNlLmpzXCIpLkZyb250ZW5kTW9kZWxSZXNvdXJjZVNlYXJjaH0gYXJncy5zZWFyY2ggLSBTZWFyY2ggcGFyYW1zLlxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIGFwcGx5RnJvbnRlbmRNb2RlbEluZGV4U2VhcmNoKHtjb250cm9sbGVyLCBxdWVyeSwgc2VhcmNofSkge1xuICAgIGlmICh0aGlzLmFwcGx5UXVpY2tTZWFyY2goe3F1ZXJ5LCBzZWFyY2h9KSkgcmV0dXJuXG5cbiAgICBzdXBlci5hcHBseUZyb250ZW5kTW9kZWxJbmRleFNlYXJjaCh7Y29udHJvbGxlciwgcXVlcnksIHNlYXJjaH0pXG4gIH1cblxuICAvKipcbiAgICogRXhwYW5kcyBhIGBxdWlja1NlYXJjaGAgcHNldWRvLWNvbHVtbiBzZWFyY2ggaW50byBhbiBPUiBvZiBMSUtFIGNvbmRpdGlvbnNcbiAgICogb3ZlciB0aGUgZGVjbGFyZWQge0BsaW5rIFN5bmNSZXNvdXJjZUJhc2UucXVpY2tTZWFyY2hDb2x1bW5zfS5cbiAgICogQHBhcmFtIHtvYmplY3R9IGFyZ3MgLSBTZWFyY2ggYXJncy5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuLi9mcm9udGVuZC1tb2RlbC1yZXNvdXJjZS9iYXNlLXJlc291cmNlLmpzXCIpLkZyb250ZW5kTW9kZWxSZXNvdXJjZUFueVF1ZXJ5fSBhcmdzLnF1ZXJ5IC0gUXVlcnkgdG8gZmlsdGVyLlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4uL2Zyb250ZW5kLW1vZGVsLXJlc291cmNlL2Jhc2UtcmVzb3VyY2UuanNcIikuRnJvbnRlbmRNb2RlbFJlc291cmNlU2VhcmNofSBhcmdzLnNlYXJjaCAtIFNlYXJjaCBwYXlsb2FkLlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gV2hldGhlciB0aGUgc2VhcmNoIHdhcyBoYW5kbGVkIGFzIGEgcXVpY2sgc2VhcmNoLlxuICAgKi9cbiAgYXBwbHlRdWlja1NlYXJjaCh7cXVlcnksIHNlYXJjaH0pIHtcbiAgICBjb25zdCBxdWlja1NlYXJjaENvbHVtbnMgPSAvKiogQHR5cGUge3R5cGVvZiBTeW5jUmVzb3VyY2VCYXNlfSAqLyAodGhpcy5jb25zdHJ1Y3RvcikucXVpY2tTZWFyY2hDb2x1bW5zXG5cbiAgICBpZiAoIXF1aWNrU2VhcmNoQ29sdW1ucyB8fCBxdWlja1NlYXJjaENvbHVtbnMubGVuZ3RoID09PSAwKSByZXR1cm4gZmFsc2VcbiAgICBpZiAoc2VhcmNoLnBhdGgubGVuZ3RoID4gMCB8fCBzZWFyY2guY29sdW1uICE9PSBRVUlDS19TRUFSQ0hfQ09MVU1OKSByZXR1cm4gZmFsc2VcblxuICAgIGlmIChzZWFyY2gub3BlcmF0b3IgIT09IFwibGlrZVwiKSB7XG4gICAgICB0aHJvdyBWZWxvY2lvdXNFcnJvci5zYWZlKFwiU3luYyBxdWljayBzZWFyY2ggbXVzdCB1c2UgdGhlIGxpa2Ugb3BlcmF0b3IuXCIsIHtjb2RlOiBcInN5bmMtaW52YWxpZC1xdWljay1zZWFyY2hcIn0pXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBzZWFyY2gudmFsdWUgIT09IFwic3RyaW5nXCIpIHtcbiAgICAgIHRocm93IFZlbG9jaW91c0Vycm9yLnNhZmUoXCJTeW5jIHF1aWNrIHNlYXJjaCBtdXN0IGJlIGEgc3RyaW5nLlwiLCB7Y29kZTogXCJzeW5jLWludmFsaWQtcXVpY2stc2VhcmNoXCJ9KVxuICAgIH1cblxuICAgIGNvbnN0IHRyaW1tZWRWYWx1ZSA9IHNlYXJjaC52YWx1ZS50cmltKClcblxuICAgIGlmICghdHJpbW1lZFZhbHVlKSByZXR1cm4gdHJ1ZVxuXG4gICAgY29uc3QgdGFibGVTcWwgPSBxdWVyeS5kcml2ZXIucXVvdGVUYWJsZShxdWVyeS5nZXRUYWJsZVJlZmVyZW5jZUZvckpvaW4oKSlcbiAgICBjb25zdCBsaWtlVmFsdWUgPSBgJSR7dHJpbW1lZFZhbHVlfSVgXG4gICAgY29uc3QgY29uZGl0aW9ucyA9IHF1aWNrU2VhcmNoQ29sdW1ucy5tYXAoKGNvbHVtbk5hbWUpID0+IChcbiAgICAgIGAke3RhYmxlU3FsfS4ke3F1ZXJ5LmRyaXZlci5xdW90ZUNvbHVtbihjb2x1bW5OYW1lKX0gTElLRSAke3F1ZXJ5LmRyaXZlci5xdW90ZShsaWtlVmFsdWUpfWBcbiAgICApKVxuXG4gICAgcXVlcnkud2hlcmUoYCgke2NvbmRpdGlvbnMuam9pbihcIiBPUiBcIil9KWApXG5cbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgLy8gVGhlIGRlY2xhcmF0aXZlIGBzdGF0aWMgd3JpdGFibGVBdHRyaWJ1dGVzYCBwZXJtaXQgbGlzdCBsaXZlcyBvblxuICAvLyBGcm9udGVuZE1vZGVsQmFzZVJlc291cmNlIHNvIGV2ZXJ5IGZyb250ZW5kLW1vZGVsIHJlc291cmNlIGNhbiBkZWNsYXJlXG4gIC8vIG9uZTsgc3luYyByZXNvdXJjZXMgaW5oZXJpdCBpdCB1bmNoYW5nZWQuXG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBzdGFibGUgY2hhbmdlLWZlZWQgcGFnZSBhZnRlciBhcHAgYXV0aG9yaXphdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8UmVjb3JkPHN0cmluZywgPz4+fSBDaGFuZ2UtZmVlZCBwYWdlIHJlc3VsdC5cbiAgICovXG4gIGFzeW5jIGNoYW5nZXMoKSB7XG4gICAgY29uc3QgcGFyYW1zID0gdGhpcy5wYXJhbXMoKVxuICAgIGNvbnN0IHNjb3BlID0gdGhpcy5jaGFuZ2VzU2NvcGUocGFyYW1zKVxuXG4gICAgYXdhaXQgdGhpcy5hdXRob3JpemVDaGFuZ2VzKHtwYXJhbXMsIHNjb3BlfSlcblxuICAgIHJldHVybiBhd2FpdCB0aGlzLmNoYW5nZUZlZWRTZXJ2aWNlKHtwYXJhbXMsIHNjb3BlfSkuY2hhbmdlcygpXG4gIH1cblxuICAvKipcbiAgICogUmVwbGF5cyBjbGllbnQgc3luYyBlbnZlbG9wZXMgdGhyb3VnaCB0aGUgYXBwIHJlcGxheSBzZXJ2aWNlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCA/Pj59IFJlcGxheSByZXN1bHQgd2l0aCBwZXItc3luYyBzdGF0ZXMuXG4gICAqL1xuICBhc3luYyByZXBsYXkoKSB7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5idWlsZFJlcGxheVNlcnZpY2UoKS5yZXBsYXkodGhpcy5wYXJhbXMoKSlcblxuICAgIGlmIChyZXN1bHQuc3RhdHVzID09PSBcImVycm9yXCIpIHJldHVybiByZXN1bHRcblxuICAgIHJldHVybiB7c3RhdHVzOiBcInN1Y2Nlc3NcIiwgc3luY3M6IHJlc3VsdC5zeW5jc31cbiAgfVxuXG4gIC8qKlxuICAgKiBQYXJzZXMgdGhlIG9wdGlvbmFsIGNsaWVudC1kZWNsYXJlZCBzY29wZSBmcm9tIHJlcXVlc3QgcGFyYW1zLlxuICAgKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsID8+fSBwYXJhbXMgLSBSZXF1ZXN0IHBhcmFtcy5cbiAgICogQHJldHVybnMge1NlcmlhbGl6ZWRDaGFuZ2VzU2NvcGUgfCBudWxsfSBQYXJzZWQgc2NvcGUsIG9yIG51bGwgd2hlbiB0aGUgY2xpZW50IHNlbnQgbm9uZS5cbiAgICovXG4gIGNoYW5nZXNTY29wZShwYXJhbXMpIHtcbiAgICBjb25zdCBzY29wZSA9IHBhcmFtcy5zY29wZVxuXG4gICAgaWYgKHNjb3BlID09PSB1bmRlZmluZWQgfHwgc2NvcGUgPT09IG51bGwpIHJldHVybiBudWxsXG5cbiAgICBpZiAodHlwZW9mIHNjb3BlICE9PSBcIm9iamVjdFwiIHx8IEFycmF5LmlzQXJyYXkoc2NvcGUpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFN5bmMgY2hhbmdlcyBzY29wZSBtdXN0IGJlIGFuIG9iamVjdCwgZ290OiAke1N0cmluZyhzY29wZSl9YClcbiAgICB9XG5cbiAgICBjb25zdCBzY29wZVBhcmFtcyA9IC8qKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgPz59ICovIChzY29wZSlcbiAgICBjb25zdCByZXNvdXJjZVR5cGUgPSBmb3JjZWROb25CbGFua1N0cmluZ1BhcmFtKHNjb3BlUGFyYW1zLCBcInJlc291cmNlVHlwZVwiKVxuICAgIGNvbnN0IGNvbmRpdGlvbnMgPSBzY29wZVBhcmFtcy5jb25kaXRpb25zXG5cbiAgICBpZiAoIWNvbmRpdGlvbnMgfHwgdHlwZW9mIGNvbmRpdGlvbnMgIT09IFwib2JqZWN0XCIgfHwgQXJyYXkuaXNBcnJheShjb25kaXRpb25zKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBTeW5jIGNoYW5nZXMgc2NvcGUuY29uZGl0aW9ucyBtdXN0IGJlIGFuIG9iamVjdCwgZ290OiAke1N0cmluZyhjb25kaXRpb25zKX1gKVxuICAgIH1cblxuICAgIHJldHVybiB7Y29uZGl0aW9uczogLyoqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCA/Pn0gKi8gKGNvbmRpdGlvbnMpLCByZXNvdXJjZVR5cGV9XG4gIH1cblxuICAvKipcbiAgICogQnVpbGRzIHRoZSBjaGFuZ2UtZmVlZCBzZXJ2aWNlIHNlcnZpbmcgdGhpcyBjaGFuZ2VzIHJlcXVlc3QuXG4gICAqIEBwYXJhbSB7e3BhcmFtczogUmVjb3JkPHN0cmluZywgPz4sIHNjb3BlOiBTZXJpYWxpemVkQ2hhbmdlc1Njb3BlIHwgbnVsbH19IGFyZ3MgLSBSZXF1ZXN0IHBhcmFtcyBhbmQgcGFyc2VkIHNjb3BlLlxuICAgKiBAcmV0dXJucyB7e2NoYW5nZXM6ICgpID0+IFByb21pc2U8UmVjb3JkPHN0cmluZywgPz4+fX0gQ2hhbmdlLWZlZWQgc2VydmljZS5cbiAgICovXG4gIGNoYW5nZUZlZWRTZXJ2aWNlKHtwYXJhbXMsIHNjb3BlfSkge1xuICAgIHJldHVybiBuZXcgU3luY01vZGVsQ2hhbmdlRmVlZFNlcnZpY2Uoe1xuICAgICAgbW9kZWxDbGFzczogdGhpcy5zeW5jTW9kZWxDbGFzcygpLFxuICAgICAgcGFyYW1zLFxuICAgICAgc2NvcGVRdWVyeTogKHtxdWVyeX0pID0+IHRoaXMuc2NvcGVDaGFuZ2VzUXVlcnkoe3BhcmFtcywgcXVlcnksIHNjb3BlfSlcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkcyB0aGUgYXBwIHJlcGxheSBzZXJ2aWNlIGhhbmRsaW5nIHRoaXMgcmVwbGF5IHJlcXVlc3QuIFRoZSByZXNvdXJjZVxuICAgKiBhYmlsaXR5LCBjb250ZXh0LCBjb25maWd1cmF0aW9uLCBhbmQgbG9jYWxzIGFyZSBwbHVtYmVkIGluIHVuZGVyIHRoZVxuICAgKiBhcHAtZGVjbGFyZWQge0BsaW5rIFN5bmNSZXNvdXJjZUJhc2UjcmVwbGF5U2VydmljZUFyZ3N9IChhcHAgYXJncyB3aW4pIHNvXG4gICAqIHRoZSBkZWZhdWx0IHJlc291cmNlLXJvdXRlZCByZXBsYXkgd29ya3Mgd2l0aG91dCB3aXJpbmcuXG4gICAqIEByZXR1cm5zIHtpbXBvcnQoXCIuL3N5bmMtZW52ZWxvcGUtcmVwbGF5LXNlcnZpY2UuanNcIikuZGVmYXVsdH0gUmVwbGF5IHNlcnZpY2UgaW5zdGFuY2UuXG4gICAqL1xuICBidWlsZFJlcGxheVNlcnZpY2UoKSB7XG4gICAgY29uc3QgUmVwbGF5U2VydmljZUNsYXNzID0gdGhpcy5yZXBsYXlTZXJ2aWNlQ2xhc3MoKVxuXG4gICAgcmV0dXJuIG5ldyBSZXBsYXlTZXJ2aWNlQ2xhc3Moe1xuICAgICAgYWJpbGl0eTogdGhpcy5hYmlsaXR5LFxuICAgICAgYWJpbGl0eUNvbnRleHQ6IHRoaXMuZ2V0Q29udGV4dCgpLFxuICAgICAgY29uZmlndXJhdGlvbjogdGhpcy5jb250cm9sbGVyID8gdGhpcy5jb250cm9sbGVySW5zdGFuY2UoKS5nZXRDb25maWd1cmF0aW9uKCkgOiB1bmRlZmluZWQsXG4gICAgICBsb2NhbHM6IHRoaXMuZ2V0TG9jYWxzKCksXG4gICAgICAuLi50aGlzLnJlcGxheVNlcnZpY2VBcmdzKClcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgY29uc3RydWN0b3IgYXJncyBmb3IgdGhlIGFwcCByZXBsYXkgc2VydmljZS5cbiAgICogQHJldHVybnMge1JlY29yZDxzdHJpbmcsID8+fSBSZXBsYXkgc2VydmljZSBjb25zdHJ1Y3RvciBhcmdzLlxuICAgKi9cbiAgcmVwbGF5U2VydmljZUFyZ3MoKSB7XG4gICAgcmV0dXJuIHt9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgc3luYyBtb2RlbCBjbGFzcyBiYWNraW5nIHRoZSBjaGFuZ2UgZmVlZC5cbiAgICogQHJldHVybnMge3R5cGVvZiBpbXBvcnQoXCIuLi9kYXRhYmFzZS9yZWNvcmQvaW5kZXguanNcIikuZGVmYXVsdH0gU3luYyBtb2RlbCBjbGFzcy5cbiAgICovXG4gIHN5bmNNb2RlbENsYXNzKCkge1xuICAgIGNvbnN0IG1vZGVsQ2xhc3MgPSAvKiogQHR5cGUge3R5cGVvZiBTeW5jUmVzb3VyY2VCYXNlfSAqLyAodGhpcy5jb25zdHJ1Y3RvcikuTW9kZWxDbGFzc1xuXG4gICAgaWYgKCFtb2RlbENsYXNzKSB0aHJvdyBuZXcgRXJyb3IoYCR7dGhpcy5jb25zdHJ1Y3Rvci5uYW1lfSBtdXN0IGRlZmluZSBzdGF0aWMgTW9kZWxDbGFzc2ApXG5cbiAgICByZXR1cm4gbW9kZWxDbGFzc1xuICB9XG5cbiAgLyoqXG4gICAqIEF1dGhvcml6ZXMgdGhlIGN1cnJlbnQgY29udGV4dCBmb3IgcmVhZGluZyB0aGUgcmVxdWVzdGVkIGNoYW5nZXMuXG4gICAqIEBwYXJhbSB7e3BhcmFtczogUmVjb3JkPHN0cmluZywgPz4sIHNjb3BlOiBTZXJpYWxpemVkQ2hhbmdlc1Njb3BlIHwgbnVsbH19IF9hcmdzIC0gUmVxdWVzdCBwYXJhbXMgYW5kIHBhcnNlZCBzY29wZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59IFJlc29sdmVzIHdoZW4gYWNjZXNzIGlzIGFsbG93ZWQ7IHRocm93cyBvdGhlcndpc2UuXG4gICAqL1xuICBhc3luYyBhdXRob3JpemVDaGFuZ2VzKF9hcmdzKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiU3luY1Jlc291cmNlQmFzZSNhdXRob3JpemVDaGFuZ2VzIG11c3QgYmUgaW1wbGVtZW50ZWRcIilcbiAgfVxuXG4gIC8qKlxuICAgKiBBcHBsaWVzIGFwcCB2aXNpYmlsaXR5IHNjb3Bpbmcgb250byB0aGUgY2hhbmdlLWZlZWQgcXVlcnkuXG4gICAqIEBwYXJhbSB7e3BhcmFtczogUmVjb3JkPHN0cmluZywgPz4sIHF1ZXJ5OiBpbXBvcnQoXCIuLi9kYXRhYmFzZS9xdWVyeS9tb2RlbC1jbGFzcy1xdWVyeS5qc1wiKS5kZWZhdWx0LCBzY29wZTogU2VyaWFsaXplZENoYW5nZXNTY29wZSB8IG51bGx9fSBfYXJncyAtIFJlcXVlc3QgcGFyYW1zLCBmZWVkIHF1ZXJ5LCBhbmQgcGFyc2VkIHNjb3BlLlxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIHNjb3BlQ2hhbmdlc1F1ZXJ5KF9hcmdzKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiU3luY1Jlc291cmNlQmFzZSNzY29wZUNoYW5nZXNRdWVyeSBtdXN0IGJlIGltcGxlbWVudGVkXCIpXG4gIH1cblxuICAvKipcbiAgICogUmVzb2x2ZXMgdGhlIHJlcGxheSBzZXJ2aWNlIGNsYXNzIGhhbmRsaW5nIHJlcGxheSBtdXRhdGlvbnM6IHRoZVxuICAgKiBkZWNsYXJhdGl2ZSB7QGxpbmsgU3luY1Jlc291cmNlQmFzZS5SZXBsYXlTZXJ2aWNlQ2xhc3N9IHN0YXRpYyAoc2hhcmVkXG4gICAqIHJlc291cmNlcyBpbmNsdWRlZCkgd2hlbiBkZWNsYXJlZCwgb3RoZXJ3aXNlXG4gICAqIHtAbGluayBTeW5jRW52ZWxvcGVSZXBsYXlTZXJ2aWNlfSwgd2hpY2ggcmVzb3VyY2Utcm91dGVzIG11dGF0aW9ucyB0aHJvdWdoXG4gICAqIHRoZSBwbHVtYmVkIGNvbmZpZ3VyYXRpb24gcmVnaXN0cnkuIEFwcHMgZGVjbGFyZSB0aGUgc3RhdGljIGluc3RlYWQgb2ZcbiAgICogb3ZlcnJpZGluZyB0aGlzIG1ldGhvZC5cbiAgICogQHJldHVybnMge3R5cGVvZiBpbXBvcnQoXCIuL3N5bmMtZW52ZWxvcGUtcmVwbGF5LXNlcnZpY2UuanNcIikuZGVmYXVsdH0gUmVwbGF5IHNlcnZpY2UgY2xhc3MuXG4gICAqL1xuICByZXBsYXlTZXJ2aWNlQ2xhc3MoKSB7XG4gICAgY29uc3QgUmVzb3VyY2VDbGFzcyA9IC8qKiBAdHlwZSB7dHlwZW9mIFN5bmNSZXNvdXJjZUJhc2V9ICovICh0aGlzLmNvbnN0cnVjdG9yKVxuICAgIGNvbnN0IFNoYXJlZFJlc291cmNlID0gLyoqIEB0eXBlIHt0eXBlb2YgU3luY1Jlc291cmNlQmFzZSB8IG51bGx9ICovIChSZXNvdXJjZUNsYXNzLnNoYXJlZFJlc291cmNlQ2xhc3MoKSA/PyBudWxsKVxuXG4gICAgcmV0dXJuIFJlc291cmNlQ2xhc3MuUmVwbGF5U2VydmljZUNsYXNzID8/IFNoYXJlZFJlc291cmNlPy5SZXBsYXlTZXJ2aWNlQ2xhc3MgPz8gU3luY0VudmVsb3BlUmVwbGF5U2VydmljZVxuICB9XG59XG4iXX0=
|
|
@@ -108,6 +108,12 @@ export default class TestRunner {
|
|
|
108
108
|
_failedTests: number;
|
|
109
109
|
_successfulTests: number;
|
|
110
110
|
_testsCount: number;
|
|
111
|
+
/** @type {{fullDescription: string, filePath: string, line: number} | null} */
|
|
112
|
+
_lastTestContext: {
|
|
113
|
+
fullDescription: string;
|
|
114
|
+
filePath: string;
|
|
115
|
+
line: number;
|
|
116
|
+
} | null;
|
|
111
117
|
/**
|
|
112
118
|
* Runs get configuration.
|
|
113
119
|
* @returns {import("../configuration.js").default} - The configuration.
|
|
@@ -291,6 +297,24 @@ export default class TestRunner {
|
|
|
291
297
|
* Runs run.
|
|
292
298
|
* @returns {Promise<void>} - Resolves when complete.
|
|
293
299
|
*/
|
|
300
|
+
/**
|
|
301
|
+
* Records an asynchronous crash (an unhandled promise rejection detached from
|
|
302
|
+
* any await, e.g. a `void connection.afterCommit(async () => broadcast(...))`
|
|
303
|
+
* frontend-model publish — or a synchronous throw inside a detached callback
|
|
304
|
+
* such as a driver socket or timer callback) as a real, visible, attributed
|
|
305
|
+
* test failure.
|
|
306
|
+
*
|
|
307
|
+
* Without this, such a rejection/exception has no handler, so on modern Node
|
|
308
|
+
* the process is TERMINATED — the run ends with no reported failures and CI
|
|
309
|
+
* just sees a crashed/retried shard with an empty result (the recurring
|
|
310
|
+
* "silent test-runner death": invisible and impossible to diagnose). Turning
|
|
311
|
+
* it into a failure makes the run go red with something debuggable instead of
|
|
312
|
+
* vanishing.
|
|
313
|
+
* @param {"uncaughtException" | "unhandledRejection"} kind - Async-crash kind.
|
|
314
|
+
* @param {unknown} reason - Rejection reason or thrown error.
|
|
315
|
+
* @returns {void}
|
|
316
|
+
*/
|
|
317
|
+
recordAsyncCrash(kind: "uncaughtException" | "unhandledRejection", reason: unknown): void;
|
|
294
318
|
run(): Promise<void>;
|
|
295
319
|
/**
|
|
296
320
|
* Runs run after alls for active scopes.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test-runner.d.ts","sourceRoot":"","sources":["../../../src/testing/test-runner.js"],"names":[],"mappings":"AAoEA;;;;;;;;;;;;;;;GAeG;AAEH;;;;;;;GAOG;AAEH;;;;;;;;;GASG;AAEH;;;;;GAKG;AAEH;;;GAGG;AAEH;;;;GAIG;AAEH;;;GAGG;AAEH;;;;GAIG;AAEH;;;;;;;;;;;;;GAaG;AAEH;IAWE;;;;;;;;;OASG;IACH,+GAPG;QAAoD,aAAa,EAAzD,OAAO,qBAAqB,EAAE,OAAO;QACZ,WAAW;QACX,WAAW;QAChB,SAAS,EAA7B,KAAK,CAAC,MAAM,CAAC;QACmB,WAAW;QAC3B,eAAe;KACzC,
|
|
1
|
+
{"version":3,"file":"test-runner.d.ts","sourceRoot":"","sources":["../../../src/testing/test-runner.js"],"names":[],"mappings":"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"}
|