velocious 1.0.643 → 1.0.645
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 +21 -10
- package/build/authorization/ability.js +36 -13
- package/build/background-jobs/adapter.js +9 -0
- package/build/background-jobs/main.js +35 -10
- package/build/background-jobs/store.js +217 -38
- package/build/background-jobs/types.js +15 -0
- package/build/configuration-types.js +1 -1
- package/build/configuration.js +45 -9
- package/build/database/drivers/base-column.js +8 -0
- package/build/database/drivers/mssql/sql/update.js +1 -3
- package/build/database/drivers/mysql/sql/update.js +1 -3
- package/build/database/drivers/pgsql/column.js +22 -0
- package/build/database/drivers/pgsql/sql/update.js +1 -3
- package/build/database/drivers/sqlite/sql/alter-table.js +11 -1
- package/build/database/drivers/sqlite/sql/update.js +1 -3
- package/build/database/query/index.js +2 -2
- package/build/database/query/model-class-query.js +26 -10
- package/build/database/query/preloader/has-many.js +4 -1
- package/build/database/query/query-data.js +2 -1
- package/build/database/query/update-base.js +14 -0
- package/build/database/query/with-count.js +3 -1
- package/build/database/record/acts-as-list.js +37 -13
- package/build/database/record/attachments/store.js +336 -26
- package/build/database/record/auditing.js +6 -3
- package/build/database/record/index.js +197 -42
- package/build/database/record/instance-relationships/belongs-to.js +2 -1
- package/build/database/record/validators/uniqueness.js +8 -5
- package/build/environment-handlers/node/cli/commands/generate/frontend-models.js +24 -8
- package/build/frontend-model-controller.js +136 -53
- package/build/frontend-model-resource/base-resource.js +87 -37
- package/build/frontend-model-resource/velocious-attachment-resource.js +98 -31
- package/build/frontend-models/base.js +307 -59
- package/build/frontend-models/preloader.js +6 -3
- package/build/frontend-models/query.js +15 -6
- package/build/frontend-models/resource-definition.js +21 -2
- package/build/frontend-models/use-destroyed-event.js +1 -1
- package/build/frontend-models/use-model-class-event.js +2 -2
- package/build/frontend-models/use-updated-event.js +1 -1
- package/build/frontend-models/websocket-channel.js +256 -93
- package/build/frontend-models/websocket-publishers.js +218 -18
- package/build/http-server/client/websocket-session.js +13 -1
- package/build/http-server/websocket-channel.js +15 -2
- package/build/src/authorization/ability.d.ts +9 -3
- package/build/src/authorization/ability.d.ts.map +1 -1
- package/build/src/authorization/ability.js +33 -14
- package/build/src/background-jobs/adapter.d.ts +6 -0
- package/build/src/background-jobs/adapter.d.ts.map +1 -1
- package/build/src/background-jobs/adapter.js +9 -1
- package/build/src/background-jobs/main.d.ts +6 -0
- package/build/src/background-jobs/main.d.ts.map +1 -1
- package/build/src/background-jobs/main.js +34 -11
- package/build/src/background-jobs/store.d.ts +66 -12
- package/build/src/background-jobs/store.d.ts.map +1 -1
- package/build/src/background-jobs/store.js +191 -35
- package/build/src/background-jobs/types.d.ts +55 -0
- package/build/src/background-jobs/types.d.ts.map +1 -1
- package/build/src/background-jobs/types.js +16 -1
- package/build/src/configuration-types.d.ts +3 -3
- package/build/src/configuration-types.d.ts.map +1 -1
- package/build/src/configuration-types.js +2 -2
- package/build/src/configuration.d.ts +18 -8
- package/build/src/configuration.d.ts.map +1 -1
- package/build/src/configuration.js +38 -7
- package/build/src/database/drivers/base-column.d.ts +5 -0
- package/build/src/database/drivers/base-column.d.ts.map +1 -1
- package/build/src/database/drivers/base-column.js +8 -1
- package/build/src/database/drivers/mssql/sql/update.d.ts.map +1 -1
- package/build/src/database/drivers/mssql/sql/update.js +2 -4
- package/build/src/database/drivers/mysql/sql/update.d.ts.map +1 -1
- package/build/src/database/drivers/mysql/sql/update.js +2 -4
- package/build/src/database/drivers/pgsql/column.d.ts +5 -0
- package/build/src/database/drivers/pgsql/column.d.ts.map +1 -1
- package/build/src/database/drivers/pgsql/column.js +19 -1
- package/build/src/database/drivers/pgsql/sql/update.d.ts.map +1 -1
- package/build/src/database/drivers/pgsql/sql/update.js +2 -4
- package/build/src/database/drivers/sqlite/sql/alter-table.d.ts.map +1 -1
- package/build/src/database/drivers/sqlite/sql/alter-table.js +6 -2
- package/build/src/database/drivers/sqlite/sql/update.d.ts.map +1 -1
- package/build/src/database/drivers/sqlite/sql/update.js +2 -4
- package/build/src/database/query/index.d.ts +4 -4
- package/build/src/database/query/index.d.ts.map +1 -1
- package/build/src/database/query/index.js +3 -3
- package/build/src/database/query/model-class-query.d.ts +8 -2
- package/build/src/database/query/model-class-query.d.ts.map +1 -1
- package/build/src/database/query/model-class-query.js +25 -11
- package/build/src/database/query/preloader/has-many.d.ts.map +1 -1
- package/build/src/database/query/preloader/has-many.js +4 -2
- package/build/src/database/query/query-data.d.ts.map +1 -1
- package/build/src/database/query/query-data.js +3 -2
- package/build/src/database/query/update-base.d.ts +7 -0
- package/build/src/database/query/update-base.d.ts.map +1 -1
- package/build/src/database/query/update-base.js +13 -1
- package/build/src/database/query/with-count.d.ts.map +1 -1
- package/build/src/database/query/with-count.js +3 -2
- package/build/src/database/record/acts-as-list.d.ts.map +1 -1
- package/build/src/database/record/acts-as-list.js +35 -14
- package/build/src/database/record/attachments/store.d.ts +67 -0
- package/build/src/database/record/attachments/store.d.ts.map +1 -1
- package/build/src/database/record/attachments/store.js +301 -25
- package/build/src/database/record/auditing.d.ts.map +1 -1
- package/build/src/database/record/auditing.js +7 -4
- package/build/src/database/record/index.d.ts +78 -26
- package/build/src/database/record/index.d.ts.map +1 -1
- package/build/src/database/record/index.js +171 -42
- package/build/src/database/record/instance-relationships/belongs-to.d.ts.map +1 -1
- package/build/src/database/record/instance-relationships/belongs-to.js +3 -2
- package/build/src/database/record/validators/uniqueness.d.ts.map +1 -1
- package/build/src/database/record/validators/uniqueness.js +8 -6
- package/build/src/environment-handlers/node/cli/commands/generate/frontend-models.d.ts +4 -4
- package/build/src/environment-handlers/node/cli/commands/generate/frontend-models.d.ts.map +1 -1
- package/build/src/environment-handlers/node/cli/commands/generate/frontend-models.js +24 -12
- package/build/src/frontend-model-controller.d.ts +29 -8
- package/build/src/frontend-model-controller.d.ts.map +1 -1
- package/build/src/frontend-model-controller.js +122 -51
- package/build/src/frontend-model-resource/base-resource.d.ts +51 -24
- package/build/src/frontend-model-resource/base-resource.d.ts.map +1 -1
- package/build/src/frontend-model-resource/base-resource.js +83 -37
- package/build/src/frontend-model-resource/velocious-attachment-resource.d.ts +45 -26
- package/build/src/frontend-model-resource/velocious-attachment-resource.d.ts.map +1 -1
- package/build/src/frontend-model-resource/velocious-attachment-resource.js +89 -31
- package/build/src/frontend-models/base.d.ts +53 -20
- package/build/src/frontend-models/base.d.ts.map +1 -1
- package/build/src/frontend-models/base.js +275 -59
- package/build/src/frontend-models/preloader.d.ts.map +1 -1
- package/build/src/frontend-models/preloader.js +6 -4
- package/build/src/frontend-models/query.d.ts +2 -2
- package/build/src/frontend-models/query.d.ts.map +1 -1
- package/build/src/frontend-models/query.js +14 -7
- package/build/src/frontend-models/resource-definition.d.ts.map +1 -1
- package/build/src/frontend-models/resource-definition.js +20 -3
- package/build/src/frontend-models/use-destroyed-event.d.ts +1 -1
- package/build/src/frontend-models/use-destroyed-event.d.ts.map +1 -1
- package/build/src/frontend-models/use-destroyed-event.js +2 -2
- package/build/src/frontend-models/use-model-class-event.d.ts +2 -2
- package/build/src/frontend-models/use-model-class-event.d.ts.map +1 -1
- package/build/src/frontend-models/use-model-class-event.js +3 -3
- package/build/src/frontend-models/use-updated-event.d.ts +1 -1
- package/build/src/frontend-models/use-updated-event.d.ts.map +1 -1
- package/build/src/frontend-models/use-updated-event.js +2 -2
- package/build/src/frontend-models/websocket-channel.d.ts +60 -41
- package/build/src/frontend-models/websocket-channel.d.ts.map +1 -1
- package/build/src/frontend-models/websocket-channel.js +225 -85
- package/build/src/frontend-models/websocket-publishers.d.ts +9 -0
- package/build/src/frontend-models/websocket-publishers.d.ts.map +1 -1
- package/build/src/frontend-models/websocket-publishers.js +190 -19
- package/build/src/http-server/client/websocket-session.d.ts.map +1 -1
- package/build/src/http-server/client/websocket-session.js +11 -2
- package/build/src/http-server/websocket-channel.d.ts +20 -8
- package/build/src/http-server/websocket-channel.d.ts.map +1 -1
- package/build/src/http-server/websocket-channel.js +15 -3
- package/build/src/sync/assets/cache.d.ts +288 -0
- package/build/src/sync/assets/cache.d.ts.map +1 -0
- package/build/src/sync/assets/cache.js +883 -0
- package/build/src/sync/assets/types.d.ts +199 -0
- package/build/src/sync/assets/types.d.ts.map +1 -0
- package/build/src/sync/assets/types.js +56 -0
- package/build/src/sync/sync-api-client.d.ts.map +1 -1
- package/build/src/sync/sync-api-client.js +4 -3
- package/build/src/sync/sync-client.d.ts.map +1 -1
- package/build/src/sync/sync-client.js +3 -2
- package/build/src/sync/sync-envelope-replay-service.d.ts.map +1 -1
- package/build/src/sync/sync-envelope-replay-service.js +6 -5
- package/build/src/sync/sync-publisher.d.ts.map +1 -1
- package/build/src/sync/sync-publisher.js +4 -3
- package/build/src/testing/browser-frontend-model-event-hook-scenarios.d.ts +2 -2
- package/build/src/testing/browser-frontend-model-event-hook-scenarios.d.ts.map +1 -1
- package/build/src/testing/browser-frontend-model-event-hook-scenarios.js +3 -3
- package/build/src/testing/test-profiler.d.ts +4 -4
- package/build/src/testing/test-profiler.d.ts.map +1 -1
- package/build/src/testing/test-profiler.js +3 -3
- package/build/src/testing/test-runner.d.ts +279 -117
- package/build/src/testing/test-runner.d.ts.map +1 -1
- package/build/src/testing/test-runner.js +503 -933
- package/build/src/testing/test.d.ts +11 -72
- package/build/src/testing/test.d.ts.map +1 -1
- package/build/src/testing/test.js +131 -284
- package/build/src/testing/velocious-attempt-executor.d.ts +54 -0
- package/build/src/testing/velocious-attempt-executor.d.ts.map +1 -0
- package/build/src/testing/velocious-attempt-executor.js +408 -0
- package/build/src/testing/velocious-runner-reporter.d.ts +67 -0
- package/build/src/testing/velocious-runner-reporter.d.ts.map +1 -0
- package/build/src/testing/velocious-runner-reporter.js +240 -0
- package/build/src/testing/velocious-suite-hook-executor.d.ts +19 -0
- package/build/src/testing/velocious-suite-hook-executor.d.ts.map +1 -0
- package/build/src/testing/velocious-suite-hook-executor.js +41 -0
- package/build/src/testing/velocious-test-arguments.d.ts +39 -0
- package/build/src/testing/velocious-test-arguments.d.ts.map +1 -0
- package/build/src/testing/velocious-test-arguments.js +55 -0
- package/build/src/utils/model-primary-key.d.ts +73 -0
- package/build/src/utils/model-primary-key.d.ts.map +1 -0
- package/build/src/utils/model-primary-key.js +144 -0
- package/build/src/utils/sha256-bytes-hex.d.ts +7 -0
- package/build/src/utils/sha256-bytes-hex.d.ts.map +1 -0
- package/build/src/utils/sha256-bytes-hex.js +117 -0
- package/build/src/utils/sha256-hex.d.ts +2 -4
- package/build/src/utils/sha256-hex.d.ts.map +1 -1
- package/build/src/utils/sha256-hex.js +6 -120
- package/build/sync/assets/cache.js +998 -0
- package/build/sync/assets/types.js +62 -0
- package/build/sync/sync-api-client.js +3 -2
- package/build/sync/sync-client.js +2 -1
- package/build/sync/sync-envelope-replay-service.js +5 -4
- package/build/sync/sync-publisher.js +3 -2
- package/build/testing/browser-frontend-model-event-hook-scenarios.js +2 -2
- package/build/testing/test-profiler.js +2 -2
- package/build/testing/test-runner.js +496 -990
- package/build/testing/test.js +164 -306
- package/build/testing/velocious-attempt-executor.js +441 -0
- package/build/testing/velocious-runner-reporter.js +264 -0
- package/build/testing/velocious-suite-hook-executor.js +43 -0
- package/build/testing/velocious-test-arguments.js +64 -0
- package/build/tsconfig.tsbuildinfo +1 -1
- package/build/utils/model-primary-key.js +171 -0
- package/build/utils/sha256-bytes-hex.js +132 -0
- package/build/utils/sha256-hex.js +7 -135
- package/package.json +5 -4
- package/src/authorization/ability.js +36 -13
- package/src/background-jobs/adapter.js +9 -0
- package/src/background-jobs/main.js +35 -10
- package/src/background-jobs/store.js +217 -38
- package/src/background-jobs/types.js +15 -0
- package/src/configuration-types.js +1 -1
- package/src/configuration.js +45 -9
- package/src/database/drivers/base-column.js +8 -0
- package/src/database/drivers/mssql/sql/update.js +1 -3
- package/src/database/drivers/mysql/sql/update.js +1 -3
- package/src/database/drivers/pgsql/column.js +22 -0
- package/src/database/drivers/pgsql/sql/update.js +1 -3
- package/src/database/drivers/sqlite/sql/alter-table.js +11 -1
- package/src/database/drivers/sqlite/sql/update.js +1 -3
- package/src/database/query/index.js +2 -2
- package/src/database/query/model-class-query.js +26 -10
- package/src/database/query/preloader/has-many.js +4 -1
- package/src/database/query/query-data.js +2 -1
- package/src/database/query/update-base.js +14 -0
- package/src/database/query/with-count.js +3 -1
- package/src/database/record/acts-as-list.js +37 -13
- package/src/database/record/attachments/store.js +336 -26
- package/src/database/record/auditing.js +6 -3
- package/src/database/record/index.js +197 -42
- package/src/database/record/instance-relationships/belongs-to.js +2 -1
- package/src/database/record/validators/uniqueness.js +8 -5
- package/src/environment-handlers/node/cli/commands/generate/frontend-models.js +24 -8
- package/src/frontend-model-controller.js +136 -53
- package/src/frontend-model-resource/base-resource.js +87 -37
- package/src/frontend-model-resource/velocious-attachment-resource.js +98 -31
- package/src/frontend-models/base.js +307 -59
- package/src/frontend-models/preloader.js +6 -3
- package/src/frontend-models/query.js +15 -6
- package/src/frontend-models/resource-definition.js +21 -2
- package/src/frontend-models/use-destroyed-event.js +1 -1
- package/src/frontend-models/use-model-class-event.js +2 -2
- package/src/frontend-models/use-updated-event.js +1 -1
- package/src/frontend-models/websocket-channel.js +256 -93
- package/src/frontend-models/websocket-publishers.js +218 -18
- package/src/http-server/client/websocket-session.js +13 -1
- package/src/http-server/websocket-channel.js +15 -2
- package/src/sync/assets/cache.js +998 -0
- package/src/sync/assets/types.js +62 -0
- package/src/sync/sync-api-client.js +3 -2
- package/src/sync/sync-client.js +2 -1
- package/src/sync/sync-envelope-replay-service.js +5 -4
- package/src/sync/sync-publisher.js +3 -2
- package/src/testing/browser-frontend-model-event-hook-scenarios.js +2 -2
- package/src/testing/test-profiler.js +2 -2
- package/src/testing/test-runner.js +496 -990
- package/src/testing/test.js +164 -306
- package/src/testing/velocious-attempt-executor.js +441 -0
- package/src/testing/velocious-runner-reporter.js +264 -0
- package/src/testing/velocious-suite-hook-executor.js +43 -0
- package/src/testing/velocious-test-arguments.js +64 -0
- package/src/utils/model-primary-key.js +171 -0
- package/src/utils/sha256-bytes-hex.js +132 -0
- package/src/utils/sha256-hex.js +7 -135
- package/build/src/testing/testing-package-adapter.d.ts +0 -9
- package/build/src/testing/testing-package-adapter.d.ts.map +0 -1
- package/build/src/testing/testing-package-adapter.js +0 -69
- package/build/testing/testing-package-adapter.js +0 -76
- package/src/testing/testing-package-adapter.js +0 -76
|
@@ -14,10 +14,10 @@ import { frontendModelRemoteRequestContextKey } from "./remote-request-context.j
|
|
|
14
14
|
* @typedef {"create" | "update" | "destroy"} FrontendModelClassEventName */
|
|
15
15
|
/**
|
|
16
16
|
* Defines this typedef.
|
|
17
|
-
* @typedef {{id: string, model: FrontendModelInstance}} FrontendModelCreateUpdateEventPayload */
|
|
17
|
+
* @typedef {{id: string | import("../utils/model-primary-key.js").CompositeModelPrimaryKeyValue, model: FrontendModelInstance}} FrontendModelCreateUpdateEventPayload */
|
|
18
18
|
/**
|
|
19
19
|
* Defines this typedef.
|
|
20
|
-
* @typedef {{id: string}} FrontendModelDestroyEventPayload */
|
|
20
|
+
* @typedef {{id: string | import("../utils/model-primary-key.js").CompositeModelPrimaryKeyValue}} FrontendModelDestroyEventPayload */
|
|
21
21
|
/**
|
|
22
22
|
* FrontendModelClassEventPayload type.
|
|
23
23
|
* @typedef {FrontendModelCreateUpdateEventPayload | FrontendModelDestroyEventPayload} FrontendModelClassEventPayload */
|
|
@@ -146,4 +146,4 @@ export default function useModelClassEvent(modelClass, eventOrEvents, callback,
|
|
|
146
146
|
};
|
|
147
147
|
}, [active, eventsKey, eventCallback, modelClass, onConnected, projectionKey]);
|
|
148
148
|
}
|
|
149
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlLW1vZGVsLWNsYXNzLWV2ZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2Zyb250ZW5kLW1vZGVscy91c2UtbW9kZWwtY2xhc3MtZXZlbnQuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTtBQUVaLE9BQU8sZ0JBQWdCLE1BQU0sVUFBVSxDQUFBO0FBQ3ZDLE9BQU8sRUFBQyxTQUFTLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBQyxNQUFNLE9BQU8sQ0FBQTtBQUVoRCxPQUFPLDZCQUE2QixNQUFNLHVDQUF1QyxDQUFBO0FBQ2pGLE9BQU8sRUFBQyxvQ0FBb0MsRUFBQyxNQUFNLDZCQUE2QixDQUFBO0FBRWhGOzswRUFFMEU7QUFDMUU7O3VFQUV1RTtBQUN2RTs7NEVBRTRFO0FBQzVFOztpR0FFaUc7QUFDakc7OzhEQUU4RDtBQUM5RDs7d0hBRXdIO0FBQ3hIOztrR0FFa0c7QUFDbEc7OzJLQUUySztBQUUzSzs7OztHQUlHO0FBQ0gsU0FBUyxzQkFBc0IsQ0FBQyxXQUFXO0lBQ3pDLE1BQU0sa0JBQWtCLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQTtJQUVuRCxJQUFJLGtCQUFrQixDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUNsQyxNQUFNLElBQUksS0FBSyxDQUFDLGdEQUFnRCxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFBO0lBQ2xHLENBQUM7QUFDSCxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILFNBQVMsMkJBQTJCLENBQUMsS0FBSztJQUN4QyxJQUFJLENBQUMsS0FBSztRQUFFLE9BQU8sSUFBSSxDQUFBO0lBRXZCLE9BQU8sS0FBSyxDQUFDLG1CQUFtQixFQUFFLENBQUE7QUFDcEMsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxTQUFTLG1CQUFtQixDQUFDLGFBQWE7SUFDeEMsT0FBTyxLQUFLLENBQUMsT0FBTyxDQUFDLGFB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QVcsRUFBRSxDQUFBO1lBQ2YsQ0FBQztZQUVELDZCQUE2QixDQUFDLGFBQWEsQ0FBQyxDQUFBO1FBQzlDLENBQUMsQ0FBQTtJQUNILENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBRSxTQUFTLEVBQUUsYUFBYSxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsYUFBYSxDQUFDLENBQUMsQ0FBQTtBQUNoRixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbmltcG9ydCBkZWJvdW5jZUZ1bmN0aW9uIGZyb20gXCJkZWJvdW5jZVwiXG5pbXBvcnQge3VzZUVmZmVjdCwgdXNlTWVtbywgdXNlUmVmfSBmcm9tIFwicmVhY3RcIlxuXG5pbXBvcnQgY2xlYXJQZW5kaW5nRGVib3VuY2VkQ2FsbGJhY2sgZnJvbSBcIi4vY2xlYXItcGVuZGluZy1kZWJvdW5jZWQtY2FsbGJhY2suanNcIlxuaW1wb3J0IHtmcm9udGVuZE1vZGVsUmVtb3RlUmVxdWVzdENvbnRleHRLZXl9IGZyb20gXCIuL3JlbW90ZS1yZXF1ZXN0LWNvbnRleHQuanNcIlxuXG4vKipcbiAqIEZyb250ZW5kTW9kZWxDbGFzcyB0eXBlLlxuICogQHR5cGVkZWYge2ltcG9ydChcIi4vYmFzZS5qc1wiKS5Gcm9udGVuZE1vZGVsQ2xhc3N9IEZyb250ZW5kTW9kZWxDbGFzcyAqL1xuLyoqXG4gKiBGcm9udGVuZE1vZGVsSW5zdGFuY2UgdHlwZS5cbiAqIEB0eXBlZGVmIHtJbnN0YW5jZVR5cGU8RnJvbnRlbmRNb2RlbENsYXNzPn0gRnJvbnRlbmRNb2RlbEluc3RhbmNlICovXG4vKipcbiAqIEZyb250ZW5kTW9kZWxDbGFzc0V2ZW50TmFtZSB0eXBlLlxuICogQHR5cGVkZWYge1wiY3JlYXRlXCIgfCBcInVwZGF0ZVwiIHwgXCJkZXN0cm95XCJ9IEZyb250ZW5kTW9kZWxDbGFzc0V2ZW50TmFtZSAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoaXMgdHlwZWRlZi5cbiAqIEB0eXBlZGVmIHt7aWQ6IHN0cmluZywgbW9kZWw6IEZyb250ZW5kTW9kZWxJbnN0YW5jZX19IEZyb250ZW5kTW9kZWxDcmVhdGVVcGRhdGVFdmVudFBheWxvYWQgKi9cbi8qKlxuICogRGVmaW5lcyB0aGlzIHR5cGVkZWYuXG4gKiBAdHlwZWRlZiB7e2lkOiBzdHJpbmd9fSBGcm9udGVuZE1vZGVsRGVzdHJveUV2ZW50UGF5bG9hZCAqL1xuLyoqXG4gKiBGcm9udGVuZE1vZGVsQ2xhc3NFdmVudFBheWxvYWQgdHlwZS5cbiAqIEB0eXBlZGVmIHtGcm9udGVuZE1vZGVsQ3JlYXRlVXBkYXRlRXZlbnRQYXlsb2FkIHwgRnJvbnRlbmRNb2RlbERlc3Ryb3lFdmVudFBheWxvYWR9IEZyb250ZW5kTW9kZWxDbGFzc0V2ZW50UGF5bG9hZCAqL1xuLyoqXG4gKiBGcm9udGVuZE1vZGVsQ2xhc3NFdmVudENhbGxiYWNrIHR5cGUuXG4gKiBAdHlwZWRlZiB7KHBheWxvYWQ6IEZyb250ZW5kTW9kZWxDbGFzc0V2ZW50UGF5bG9hZCkgPT4gdm9pZH0gRnJvbnRlbmRNb2RlbENsYXNzRXZlbnRDYWxsYmFjayAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoaXMgdHlwZWRlZi5cbiAqIEB0eXBlZGVmIHt7YWN0aXZlPzogYm9vbGVhbiwgZGVib3VuY2U/OiBib29sZWFuIHwgbnVtYmVyLCBvbkNvbm5lY3RlZD86ICgpID0+IHZvaWR9ICYgaW1wb3J0KFwiLi9xdWVyeS5qc1wiKS5Gcm9udGVuZE1vZGVsRXZlbnRPcHRpb25zT2JqZWN0fSBVc2VNb2RlbENsYXNzRXZlbnRPcHRpb25zICovXG5cbi8qKlxuICogUnVucyBhc3NlcnQgbm8gdW5rbm93biBvcHRpb25zLlxuICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCBpbXBvcnQoXCIuL3F1ZXJ5LmpzXCIpLkZyb250ZW5kTW9kZWxUcmFuc3BvcnRWYWx1ZSB8ICgoKSA9PiB2b2lkKSB8IHVuZGVmaW5lZD59IHJlc3RPcHRpb25zIC0gVW5rbm93biBvcHRpb25zIG9iamVjdC5cbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5mdW5jdGlvbiBhc3NlcnROb1Vua25vd25PcHRpb25zKHJlc3RPcHRpb25zKSB7XG4gIGNvbnN0IHVua25vd25PcHRpb25OYW1lcyA9IE9iamVjdC5rZXlzKHJlc3RPcHRpb25zKVxuXG4gIGlmICh1bmtub3duT3B0aW9uTmFtZXMubGVuZ3RoID4gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBvcHRpb25zIGdpdmVuIHRvIHVzZU1vZGVsQ2xhc3NFdmVudDogJHt1bmtub3duT3B0aW9uTmFtZXMuam9pbihcIiwgXCIpfWApXG4gIH1cbn1cblxuLyoqXG4gKiBSdW5zIGV2ZW50IHF1ZXJ5IGRlcGVuZGVuY3kgcGF5bG9hZC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi9xdWVyeS5qc1wiKS5kZWZhdWx0PEZyb250ZW5kTW9kZWxDbGFzcz4gfCB1bmRlZmluZWR9IHF1ZXJ5IC0gRXZlbnQgcXVlcnkgb3B0aW9uLlxuICogQHJldHVybnMge2ltcG9ydChcIi4vcXVlcnkuanNcIikuRnJvbnRlbmRNb2RlbEV2ZW50UXVlcnlQYXlsb2FkIHwgbnVsbH0gU3RhYmxlIGRlcGVuZGVuY3kgcGF5bG9hZC5cbiAqL1xuZnVuY3Rpb24gZXZlbnRRdWVyeURlcGVuZGVuY3lQYXlsb2FkKHF1ZXJ5KSB7XG4gIGlmICghcXVlcnkpIHJldHVybiBudWxsXG5cbiAgcmV0dXJuIHF1ZXJ5LmV2ZW50T3B0aW9uc1BheWxvYWQoKVxufVxuXG4vKipcbiAqIFJ1bnMgbm9ybWFsaXplIGV2ZW50IG5hbWVzLlxuICogQHBhcmFtIHtGcm9udGVuZE1vZGVsQ2xhc3NFdmVudE5hbWUgfCBGcm9udGVuZE1vZGVsQ2xhc3NFdmVudE5hbWVbXX0gZXZlbnRPckV2ZW50cyAtIEV2ZW50IG5hbWUgb3IgbmFtZXMuXG4gKiBAcmV0dXJucyB7RnJvbnRlbmRNb2RlbENsYXNzRXZlbnROYW1lW119IC0gTm9ybWFsaXplZCBldmVudCBuYW1lcy5cbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplRXZlbnROYW1lcyhldmVudE9yRXZlbnRzKSB7XG4gIHJldHVybiBBcnJheS5pc0FycmF5KGV2ZW50T3JFdmVudHMpID8gZXZlbnRPckV2ZW50cyA6IFtldmVudE9yRXZlbnRzXVxufVxuXG4vKipcbiAqIFJ1bnMgZXZlbnQgbmFtZXMgZGVwZW5kZW5jeSBrZXkuXG4gKiBAcGFyYW0ge0Zyb250ZW5kTW9kZWxDbGFzc0V2ZW50TmFtZVtdfSBldmVudE5hbWVzIC0gRXZlbnQgbmFtZXMuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSAtIFN0YWJsZSBkZXBlbmRlbmN5IGtleS5cbiAqL1xuZnVuY3Rpb24gZXZlbnROYW1lc0RlcGVuZGVuY3lLZXkoZXZlbnROYW1lcykge1xuICByZXR1cm4gZXZlbnROYW1lcy5qb2luKFwifFwiKVxufVxuXG4vKipcbiAqIFJ1bnMgc3Vic2NyaWJlIHRvIG1vZGVsIGNsYXNzIGV2ZW50LlxuICogQHBhcmFtIHtGcm9udGVuZE1vZGVsQ2xhc3N9IG1vZGVsQ2xhc3MgLSBGcm9udGVuZCBtb2RlbCBjbGFzcy5cbiAqIEBwYXJhbSB7RnJvbnRlbmRNb2RlbENsYXNzRXZlbnROYW1lfSBldmVudE5hbWUgLSBFdmVudCBuYW1lLlxuICogQHBhcmFtIHtGcm9udGVuZE1vZGVsQ2xhc3NFdmVudENhbGxiYWNrfSBjYWxsYmFjayAtIEV2ZW50IGNhbGxiYWNrLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuL3F1ZXJ5LmpzXCIpLkZyb250ZW5kTW9kZWxFdmVudE9wdGlvbnNPYmplY3R9IG9wdGlvbnMgLSBFdmVudCBxdWVyeSBvciByZWNvcmQgcHJvamVjdGlvbiBvcHRpb25zLlxuICogQHJldHVybnMge1Byb21pc2U8KCkgPT4gdm9pZD59IC0gVW5zdWJzY3JpYmUgY2FsbGJhY2suXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHN1YnNjcmliZVRvTW9kZWxDbGFzc0V2ZW50KG1vZGVsQ2xhc3MsIGV2ZW50TmFtZSwgY2FsbGJhY2ssIG9wdGlvbnMpIHtcbiAgaWYgKGV2ZW50TmFtZSA9PT0gXCJjcmVhdGVcIikgcmV0dXJuIGF3YWl0IG1vZGVsQ2xhc3Mub25DcmVhdGUoY2FsbGJhY2ssIG9wdGlvbnMpXG4gIGlmIChldmVudE5hbWUgPT09IFwidXBkYXRlXCIpIHJldHVybiBhd2FpdCBtb2RlbENsYXNzLm9uVXBkYXRlKGNhbGxiYWNrLCBvcHRpb25zKVxuICBpZiAoZXZlbnROYW1lID09PSBcImRlc3Ryb3lcIikgcmV0dXJuIGF3YWl0IG1vZGVsQ2xhc3Mub25EZXN0cm95KGNhbGxiYWNrLCBvcHRpb25zKVxuXG4gIHRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgZnJvbnRlbmQgbW9kZWwgY2xhc3MgZXZlbnQ6ICR7ZXZlbnROYW1lfWApXG59XG5cbi8qKlxuICogUmVhY3QgaG9vayBmb3IgZnJvbnRlbmQtbW9kZWwgY2xhc3MgbGlmZWN5Y2xlIGV2ZW50cy5cbiAqIEBwYXJhbSB7RnJvbnRlbmRNb2RlbENsYXNzIHwgbnVsbCB8IHVuZGVmaW5lZH0gbW9kZWxDbGFzcyAtIEZyb250ZW5kIG1vZGVsIGNsYXNzLlxuICogQHBhcmFtIHtGcm9udGVuZE1vZGVsQ2xhc3NFdmVudE5hbWUgfCBGcm9udGVuZE1vZGVsQ2xhc3NFdmVudE5hbWVbXX0gZXZlbnRPckV2ZW50cyAtIEV2ZW50IG5hbWUgb3IgbmFtZXMuXG4gKiBAcGFyYW0ge0Zyb250ZW5kTW9kZWxDbGFzc0V2ZW50Q2FsbGJhY2t9IGNhbGxiYWNrIC0gRXZlbnQgY2FsbGJhY2suXG4gKiBAcGFyYW0ge1VzZU1vZGVsQ2xhc3NFdmVudE9wdGlvbnN9IFtvcHRpb25zXSAtIEhvb2sgb3B0aW9ucy5cbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1c2VNb2RlbENsYXNzRXZlbnQobW9kZWxDbGFzcywgZXZlbnRPckV2ZW50cywgY2FsbGJhY2ssIG9wdGlvbnMgPSB7fSkge1xuICBjb25zdCB7YWN0aXZlID0gdHJ1ZSwgYWJpbGl0aWVzLCBkZWJvdW5jZSA9IGZhbHNlLCBvbkNvbm5lY3RlZCwgcHJlbG9hZCwgcXVlcnksIHF1ZXJ5RGF0YSwgcmVxdWVzdENvbnRleHQsIHNlbGVjdCwgc2VsZWN0c0V4dHJhLCB3aXRoQ291bnQsIC4uLnJlc3RPcHRpb25zfSA9IG9wdGlvbnNcbiAgYXNzZXJ0Tm9Vbmtub3duT3B0aW9ucyhyZXN0T3B0aW9ucylcblxuICBjb25zdCBwcm9qZWN0aW9uS2V5ID0gSlNPTi5zdHJpbmdpZnkoe2FiaWxpdGllcywgcHJlbG9hZCwgcXVlcnk6IGV2ZW50UXVlcnlEZXBlbmRlbmN5UGF5bG9hZChxdWVyeSksIHF1ZXJ5RGF0YSwgcmVxdWVzdENvbnRleHQ6IGZyb250ZW5kTW9kZWxSZW1vdGVSZXF1ZXN0Q29udGV4dEtleShyZXF1ZXN0Q29udGV4dCksIHNlbGVjdCwgc2VsZWN0c0V4dHJhLCB3aXRoQ291bnR9KVxuICBjb25zdCBwcm9qZWN0aW9uT3B0aW9uc1JlZiA9IHVzZVJlZih7YWJpbGl0aWVzLCBwcmVsb2FkLCBxdWVyeSwgcXVlcnlEYXRhLCByZXF1ZXN0Q29udGV4dCwgc2VsZWN0LCBzZWxlY3RzRXh0cmEsIHdpdGhDb3VudH0pXG4gIGNvbnN0IGNhbGxiYWNrUmVmID0gdXNlUmVmKGNhbGxiYWNrKVxuICBjb25zdCBhY3RpdmVSZWYgPSB1c2VSZWYoYWN0aXZlKVxuICBwcm9qZWN0aW9uT3B0aW9uc1JlZi5jdXJyZW50ID0ge2FiaWxpdGllcywgcHJlbG9hZCwgcXVlcnksIHF1ZXJ5RGF0YSwgcmVxdWVzdENvbnRleHQsIHNlbGVjdCwgc2VsZWN0c0V4dHJhLCB3aXRoQ291bnR9XG4gIGNhbGxiYWNrUmVmLmN1cnJlbnQgPSBjYWxsYmFja1xuICBhY3RpdmVSZWYuY3VycmVudCA9IGFjdGl2ZVxuXG4gIGNvbnN0IGV2ZW50TmFtZXMgPSBub3JtYWxpemVFdmVudE5hbWVzKGV2ZW50T3JFdmVudHMpXG4gIGNvbnN0IGV2ZW50c0tleSA9IGV2ZW50TmFtZXNEZXBlbmRlbmN5S2V5KGV2ZW50TmFtZXMpXG4gIGNvbnN0IGV2ZW50Q2FsbGJhY2sgPSB1c2VNZW1vKCgpID0+IHtcbiAgICBjb25zdCB3cmFwcGVkQ2FsbGJhY2sgPSAoLyoqIEB0eXBlIHtGcm9udGVuZE1vZGVsQ2xhc3NFdmVudFBheWxvYWR9ICovIHBheWxvYWQpID0+IHtcbiAgICAgIGlmIChhY3RpdmVSZWYuY3VycmVudCkgY2FsbGJhY2tSZWYuY3VycmVudChwYXlsb2FkKVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZGVib3VuY2UgPT09IFwibnVtYmVyXCIpIHJldHVybiBkZWJvdW5jZUZ1bmN0aW9uKHdyYXBwZWRDYWxsYmFjaywgZGVib3VuY2UpXG4gICAgaWYgKGRlYm91bmNlKSByZXR1cm4gZGVib3VuY2VGdW5jdGlvbih3cmFwcGVkQ2FsbGJhY2spXG5cbiAgICByZXR1cm4gd3JhcHBlZENhbGxiYWNrXG4gIH0sIFtkZWJvdW5jZV0pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIWFjdGl2ZSB8fCAhbW9kZWxDbGFzcykgcmV0dXJuIHVuZGVmaW5lZFxuXG4gICAgbGV0IGNsb3NlZCA9IGZhbHNlXG4gICAgLyoqXG4gICAgICogVW5zdWJzY3JpYmUgY2FsbGJhY2tzLlxuICAgICAqIEB0eXBlIHtBcnJheTwoKSA9PiB2b2lkPn0gKi9cbiAgICBjb25zdCB1bnN1YnNjcmliZUNhbGxiYWNrcyA9IFtdXG4gICAgY29uc3Qgc3Vic2NyaXB0aW9uQ2FsbGJhY2sgPSAoLyoqIEB0eXBlIHtGcm9udGVuZE1vZGVsQ2xhc3NFdmVudFBheWxvYWR9ICovIHBheWxvYWQpID0+IHtcbiAgICAgIGlmICghY2xvc2VkKSBldmVudENhbGxiYWNrKHBheWxvYWQpXG4gICAgfVxuXG4gICAgdm9pZCAoYXN5bmMgKCkgPT4ge1xuICAgICAgZm9yIChjb25zdCBldmVudE5hbWUgb2YgZXZlbnROYW1lcykge1xuICAgICAgICBjb25zdCB1bnN1YnNjcmliZSA9IGF3YWl0IHN1YnNjcmliZVRvTW9kZWxDbGFzc0V2ZW50KG1vZGVsQ2xhc3MsIGV2ZW50TmFtZSwgc3Vic2NyaXB0aW9uQ2FsbGJhY2ssIHByb2plY3Rpb25PcHRpb25zUmVmLmN1cnJlbnQpXG5cbiAgICAgICAgaWYgKGNsb3NlZCkge1xuICAgICAgICAgIHVuc3Vic2NyaWJlKClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB1bnN1YnNjcmliZUNhbGxiYWNrcy5wdXNoKHVuc3Vic2NyaWJlKVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICghY2xvc2VkICYmIG9uQ29ubmVjdGVkKSBvbkNvbm5lY3RlZCgpXG4gICAgfSkoKVxuXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGNsb3NlZCA9IHRydWVcblxuICAgICAgZm9yIChjb25zdCB1bnN1YnNjcmliZSBvZiB1bnN1YnNjcmliZUNhbGxiYWNrcykge1xuICAgICAgICB1bnN1YnNjcmliZSgpXG4gICAgICB9XG5cbiAgICAgIGNsZWFyUGVuZGluZ0RlYm91bmNlZENhbGxiYWNrKGV2ZW50Q2FsbGJhY2spXG4gICAgfVxuICB9LCBbYWN0aXZlLCBldmVudHNLZXksIGV2ZW50Q2FsbGJhY2ssIG1vZGVsQ2xhc3MsIG9uQ29ubmVjdGVkLCBwcm9qZWN0aW9uS2V5XSlcbn1cbiJdfQ==
|
|
149
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlLW1vZGVsLWNsYXNzLWV2ZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2Zyb250ZW5kLW1vZGVscy91c2UtbW9kZWwtY2xhc3MtZXZlbnQuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTtBQUVaLE9BQU8sZ0JBQWdCLE1BQU0sVUFBVSxDQUFBO0FBQ3ZDLE9BQU8sRUFBQyxTQUFTLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBQyxNQUFNLE9BQU8sQ0FBQTtBQUVoRCxPQUFPLDZCQUE2QixNQUFNLHVDQUF1QyxDQUFBO0FBQ2pGLE9BQU8sRUFBQyxvQ0FBb0MsRUFBQyxNQUFNLDZCQUE2QixDQUFBO0FBRWhGOzswRUFFMEU7QUFDMUU7O3VFQUV1RTtBQUN2RTs7NEVBRTRFO0FBQzVFOzt5S0FFeUs7QUFDeks7O3NJQUVzSTtBQUN0STs7d0hBRXdIO0FBQ3hIOztrR0FFa0c7QUFDbEc7OzJLQUUySztBQUUzSzs7OztHQUlHO0FBQ0gsU0FBUyxzQkFBc0IsQ0FBQyxXQUFXO0lBQ3pDLE1BQU0sa0JBQWtCLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQTtJQUVuRCxJQUFJLGtCQUFrQixDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUNsQyxNQUFNLElBQUksS0FBSyxDQUFDLGdEQUFnRCxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFBO0lBQ2xHLENBQUM7QUFDSCxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILFNBQVMsMkJBQTJCLENBQUMsS0FBSztJQUN4QyxJQUFJLENBQUMsS0FBSztRQUFFLE9BQU8sSUFBSSxDQUFBO0lBRXZCLE9BQU8sS0FBSyxDQUFDLG1CQUFtQixFQUFFLENBQUE7QUFDcEMsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxTQUFTLG1CQUFtQixDQUFDLGFBQWE7SUFDeEMsT0FBTyxLQUFLLENBQUMsT0FBTyxDQUFDLGFB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QVcsRUFBRSxDQUFBO1lBQ2YsQ0FBQztZQUVELDZCQUE2QixDQUFDLGFBQWEsQ0FBQyxDQUFBO1FBQzlDLENBQUMsQ0FBQTtJQUNILENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBRSxTQUFTLEVBQUUsYUFBYSxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsYUFBYSxDQUFDLENBQUMsQ0FBQTtBQUNoRixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbmltcG9ydCBkZWJvdW5jZUZ1bmN0aW9uIGZyb20gXCJkZWJvdW5jZVwiXG5pbXBvcnQge3VzZUVmZmVjdCwgdXNlTWVtbywgdXNlUmVmfSBmcm9tIFwicmVhY3RcIlxuXG5pbXBvcnQgY2xlYXJQZW5kaW5nRGVib3VuY2VkQ2FsbGJhY2sgZnJvbSBcIi4vY2xlYXItcGVuZGluZy1kZWJvdW5jZWQtY2FsbGJhY2suanNcIlxuaW1wb3J0IHtmcm9udGVuZE1vZGVsUmVtb3RlUmVxdWVzdENvbnRleHRLZXl9IGZyb20gXCIuL3JlbW90ZS1yZXF1ZXN0LWNvbnRleHQuanNcIlxuXG4vKipcbiAqIEZyb250ZW5kTW9kZWxDbGFzcyB0eXBlLlxuICogQHR5cGVkZWYge2ltcG9ydChcIi4vYmFzZS5qc1wiKS5Gcm9udGVuZE1vZGVsQ2xhc3N9IEZyb250ZW5kTW9kZWxDbGFzcyAqL1xuLyoqXG4gKiBGcm9udGVuZE1vZGVsSW5zdGFuY2UgdHlwZS5cbiAqIEB0eXBlZGVmIHtJbnN0YW5jZVR5cGU8RnJvbnRlbmRNb2RlbENsYXNzPn0gRnJvbnRlbmRNb2RlbEluc3RhbmNlICovXG4vKipcbiAqIEZyb250ZW5kTW9kZWxDbGFzc0V2ZW50TmFtZSB0eXBlLlxuICogQHR5cGVkZWYge1wiY3JlYXRlXCIgfCBcInVwZGF0ZVwiIHwgXCJkZXN0cm95XCJ9IEZyb250ZW5kTW9kZWxDbGFzc0V2ZW50TmFtZSAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoaXMgdHlwZWRlZi5cbiAqIEB0eXBlZGVmIHt7aWQ6IHN0cmluZyB8IGltcG9ydChcIi4uL3V0aWxzL21vZGVsLXByaW1hcnkta2V5LmpzXCIpLkNvbXBvc2l0ZU1vZGVsUHJpbWFyeUtleVZhbHVlLCBtb2RlbDogRnJvbnRlbmRNb2RlbEluc3RhbmNlfX0gRnJvbnRlbmRNb2RlbENyZWF0ZVVwZGF0ZUV2ZW50UGF5bG9hZCAqL1xuLyoqXG4gKiBEZWZpbmVzIHRoaXMgdHlwZWRlZi5cbiAqIEB0eXBlZGVmIHt7aWQ6IHN0cmluZyB8IGltcG9ydChcIi4uL3V0aWxzL21vZGVsLXByaW1hcnkta2V5LmpzXCIpLkNvbXBvc2l0ZU1vZGVsUHJpbWFyeUtleVZhbHVlfX0gRnJvbnRlbmRNb2RlbERlc3Ryb3lFdmVudFBheWxvYWQgKi9cbi8qKlxuICogRnJvbnRlbmRNb2RlbENsYXNzRXZlbnRQYXlsb2FkIHR5cGUuXG4gKiBAdHlwZWRlZiB7RnJvbnRlbmRNb2RlbENyZWF0ZVVwZGF0ZUV2ZW50UGF5bG9hZCB8IEZyb250ZW5kTW9kZWxEZXN0cm95RXZlbnRQYXlsb2FkfSBGcm9udGVuZE1vZGVsQ2xhc3NFdmVudFBheWxvYWQgKi9cbi8qKlxuICogRnJvbnRlbmRNb2RlbENsYXNzRXZlbnRDYWxsYmFjayB0eXBlLlxuICogQHR5cGVkZWYgeyhwYXlsb2FkOiBGcm9udGVuZE1vZGVsQ2xhc3NFdmVudFBheWxvYWQpID0+IHZvaWR9IEZyb250ZW5kTW9kZWxDbGFzc0V2ZW50Q2FsbGJhY2sgKi9cbi8qKlxuICogRGVmaW5lcyB0aGlzIHR5cGVkZWYuXG4gKiBAdHlwZWRlZiB7e2FjdGl2ZT86IGJvb2xlYW4sIGRlYm91bmNlPzogYm9vbGVhbiB8IG51bWJlciwgb25Db25uZWN0ZWQ/OiAoKSA9PiB2b2lkfSAmIGltcG9ydChcIi4vcXVlcnkuanNcIikuRnJvbnRlbmRNb2RlbEV2ZW50T3B0aW9uc09iamVjdH0gVXNlTW9kZWxDbGFzc0V2ZW50T3B0aW9ucyAqL1xuXG4vKipcbiAqIFJ1bnMgYXNzZXJ0IG5vIHVua25vd24gb3B0aW9ucy5cbiAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgaW1wb3J0KFwiLi9xdWVyeS5qc1wiKS5Gcm9udGVuZE1vZGVsVHJhbnNwb3J0VmFsdWUgfCAoKCkgPT4gdm9pZCkgfCB1bmRlZmluZWQ+fSByZXN0T3B0aW9ucyAtIFVua25vd24gb3B0aW9ucyBvYmplY3QuXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gYXNzZXJ0Tm9Vbmtub3duT3B0aW9ucyhyZXN0T3B0aW9ucykge1xuICBjb25zdCB1bmtub3duT3B0aW9uTmFtZXMgPSBPYmplY3Qua2V5cyhyZXN0T3B0aW9ucylcblxuICBpZiAodW5rbm93bk9wdGlvbk5hbWVzLmxlbmd0aCA+IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gb3B0aW9ucyBnaXZlbiB0byB1c2VNb2RlbENsYXNzRXZlbnQ6ICR7dW5rbm93bk9wdGlvbk5hbWVzLmpvaW4oXCIsIFwiKX1gKVxuICB9XG59XG5cbi8qKlxuICogUnVucyBldmVudCBxdWVyeSBkZXBlbmRlbmN5IHBheWxvYWQuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4vcXVlcnkuanNcIikuZGVmYXVsdDxGcm9udGVuZE1vZGVsQ2xhc3M+IHwgdW5kZWZpbmVkfSBxdWVyeSAtIEV2ZW50IHF1ZXJ5IG9wdGlvbi5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuL3F1ZXJ5LmpzXCIpLkZyb250ZW5kTW9kZWxFdmVudFF1ZXJ5UGF5bG9hZCB8IG51bGx9IFN0YWJsZSBkZXBlbmRlbmN5IHBheWxvYWQuXG4gKi9cbmZ1bmN0aW9uIGV2ZW50UXVlcnlEZXBlbmRlbmN5UGF5bG9hZChxdWVyeSkge1xuICBpZiAoIXF1ZXJ5KSByZXR1cm4gbnVsbFxuXG4gIHJldHVybiBxdWVyeS5ldmVudE9wdGlvbnNQYXlsb2FkKClcbn1cblxuLyoqXG4gKiBSdW5zIG5vcm1hbGl6ZSBldmVudCBuYW1lcy5cbiAqIEBwYXJhbSB7RnJvbnRlbmRNb2RlbENsYXNzRXZlbnROYW1lIHwgRnJvbnRlbmRNb2RlbENsYXNzRXZlbnROYW1lW119IGV2ZW50T3JFdmVudHMgLSBFdmVudCBuYW1lIG9yIG5hbWVzLlxuICogQHJldHVybnMge0Zyb250ZW5kTW9kZWxDbGFzc0V2ZW50TmFtZVtdfSAtIE5vcm1hbGl6ZWQgZXZlbnQgbmFtZXMuXG4gKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZUV2ZW50TmFtZXMoZXZlbnRPckV2ZW50cykge1xuICByZXR1cm4gQXJyYXkuaXNBcnJheShldmVudE9yRXZlbnRzKSA/IGV2ZW50T3JFdmVudHMgOiBbZXZlbnRPckV2ZW50c11cbn1cblxuLyoqXG4gKiBSdW5zIGV2ZW50IG5hbWVzIGRlcGVuZGVuY3kga2V5LlxuICogQHBhcmFtIHtGcm9udGVuZE1vZGVsQ2xhc3NFdmVudE5hbWVbXX0gZXZlbnROYW1lcyAtIEV2ZW50IG5hbWVzLlxuICogQHJldHVybnMge3N0cmluZ30gLSBTdGFibGUgZGVwZW5kZW5jeSBrZXkuXG4gKi9cbmZ1bmN0aW9uIGV2ZW50TmFtZXNEZXBlbmRlbmN5S2V5KGV2ZW50TmFtZXMpIHtcbiAgcmV0dXJuIGV2ZW50TmFtZXMuam9pbihcInxcIilcbn1cblxuLyoqXG4gKiBSdW5zIHN1YnNjcmliZSB0byBtb2RlbCBjbGFzcyBldmVudC5cbiAqIEBwYXJhbSB7RnJvbnRlbmRNb2RlbENsYXNzfSBtb2RlbENsYXNzIC0gRnJvbnRlbmQgbW9kZWwgY2xhc3MuXG4gKiBAcGFyYW0ge0Zyb250ZW5kTW9kZWxDbGFzc0V2ZW50TmFtZX0gZXZlbnROYW1lIC0gRXZlbnQgbmFtZS5cbiAqIEBwYXJhbSB7RnJvbnRlbmRNb2RlbENsYXNzRXZlbnRDYWxsYmFja30gY2FsbGJhY2sgLSBFdmVudCBjYWxsYmFjay5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi9xdWVyeS5qc1wiKS5Gcm9udGVuZE1vZGVsRXZlbnRPcHRpb25zT2JqZWN0fSBvcHRpb25zIC0gRXZlbnQgcXVlcnkgb3IgcmVjb3JkIHByb2plY3Rpb24gb3B0aW9ucy5cbiAqIEByZXR1cm5zIHtQcm9taXNlPCgpID0+IHZvaWQ+fSAtIFVuc3Vic2NyaWJlIGNhbGxiYWNrLlxuICovXG5hc3luYyBmdW5jdGlvbiBzdWJzY3JpYmVUb01vZGVsQ2xhc3NFdmVudChtb2RlbENsYXNzLCBldmVudE5hbWUsIGNhbGxiYWNrLCBvcHRpb25zKSB7XG4gIGlmIChldmVudE5hbWUgPT09IFwiY3JlYXRlXCIpIHJldHVybiBhd2FpdCBtb2RlbENsYXNzLm9uQ3JlYXRlKGNhbGxiYWNrLCBvcHRpb25zKVxuICBpZiAoZXZlbnROYW1lID09PSBcInVwZGF0ZVwiKSByZXR1cm4gYXdhaXQgbW9kZWxDbGFzcy5vblVwZGF0ZShjYWxsYmFjaywgb3B0aW9ucylcbiAgaWYgKGV2ZW50TmFtZSA9PT0gXCJkZXN0cm95XCIpIHJldHVybiBhd2FpdCBtb2RlbENsYXNzLm9uRGVzdHJveShjYWxsYmFjaywgb3B0aW9ucylcblxuICB0aHJvdyBuZXcgRXJyb3IoYFVuc3VwcG9ydGVkIGZyb250ZW5kIG1vZGVsIGNsYXNzIGV2ZW50OiAke2V2ZW50TmFtZX1gKVxufVxuXG4vKipcbiAqIFJlYWN0IGhvb2sgZm9yIGZyb250ZW5kLW1vZGVsIGNsYXNzIGxpZmVjeWNsZSBldmVudHMuXG4gKiBAcGFyYW0ge0Zyb250ZW5kTW9kZWxDbGFzcyB8IG51bGwgfCB1bmRlZmluZWR9IG1vZGVsQ2xhc3MgLSBGcm9udGVuZCBtb2RlbCBjbGFzcy5cbiAqIEBwYXJhbSB7RnJvbnRlbmRNb2RlbENsYXNzRXZlbnROYW1lIHwgRnJvbnRlbmRNb2RlbENsYXNzRXZlbnROYW1lW119IGV2ZW50T3JFdmVudHMgLSBFdmVudCBuYW1lIG9yIG5hbWVzLlxuICogQHBhcmFtIHtGcm9udGVuZE1vZGVsQ2xhc3NFdmVudENhbGxiYWNrfSBjYWxsYmFjayAtIEV2ZW50IGNhbGxiYWNrLlxuICogQHBhcmFtIHtVc2VNb2RlbENsYXNzRXZlbnRPcHRpb25zfSBbb3B0aW9uc10gLSBIb29rIG9wdGlvbnMuXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdXNlTW9kZWxDbGFzc0V2ZW50KG1vZGVsQ2xhc3MsIGV2ZW50T3JFdmVudHMsIGNhbGxiYWNrLCBvcHRpb25zID0ge30pIHtcbiAgY29uc3Qge2FjdGl2ZSA9IHRydWUsIGFiaWxpdGllcywgZGVib3VuY2UgPSBmYWxzZSwgb25Db25uZWN0ZWQsIHByZWxvYWQsIHF1ZXJ5LCBxdWVyeURhdGEsIHJlcXVlc3RDb250ZXh0LCBzZWxlY3QsIHNlbGVjdHNFeHRyYSwgd2l0aENvdW50LCAuLi5yZXN0T3B0aW9uc30gPSBvcHRpb25zXG4gIGFzc2VydE5vVW5rbm93bk9wdGlvbnMocmVzdE9wdGlvbnMpXG5cbiAgY29uc3QgcHJvamVjdGlvbktleSA9IEpTT04uc3RyaW5naWZ5KHthYmlsaXRpZXMsIHByZWxvYWQsIHF1ZXJ5OiBldmVudFF1ZXJ5RGVwZW5kZW5jeVBheWxvYWQocXVlcnkpLCBxdWVyeURhdGEsIHJlcXVlc3RDb250ZXh0OiBmcm9udGVuZE1vZGVsUmVtb3RlUmVxdWVzdENvbnRleHRLZXkocmVxdWVzdENvbnRleHQpLCBzZWxlY3QsIHNlbGVjdHNFeHRyYSwgd2l0aENvdW50fSlcbiAgY29uc3QgcHJvamVjdGlvbk9wdGlvbnNSZWYgPSB1c2VSZWYoe2FiaWxpdGllcywgcHJlbG9hZCwgcXVlcnksIHF1ZXJ5RGF0YSwgcmVxdWVzdENvbnRleHQsIHNlbGVjdCwgc2VsZWN0c0V4dHJhLCB3aXRoQ291bnR9KVxuICBjb25zdCBjYWxsYmFja1JlZiA9IHVzZVJlZihjYWxsYmFjaylcbiAgY29uc3QgYWN0aXZlUmVmID0gdXNlUmVmKGFjdGl2ZSlcbiAgcHJvamVjdGlvbk9wdGlvbnNSZWYuY3VycmVudCA9IHthYmlsaXRpZXMsIHByZWxvYWQsIHF1ZXJ5LCBxdWVyeURhdGEsIHJlcXVlc3RDb250ZXh0LCBzZWxlY3QsIHNlbGVjdHNFeHRyYSwgd2l0aENvdW50fVxuICBjYWxsYmFja1JlZi5jdXJyZW50ID0gY2FsbGJhY2tcbiAgYWN0aXZlUmVmLmN1cnJlbnQgPSBhY3RpdmVcblxuICBjb25zdCBldmVudE5hbWVzID0gbm9ybWFsaXplRXZlbnROYW1lcyhldmVudE9yRXZlbnRzKVxuICBjb25zdCBldmVudHNLZXkgPSBldmVudE5hbWVzRGVwZW5kZW5jeUtleShldmVudE5hbWVzKVxuICBjb25zdCBldmVudENhbGxiYWNrID0gdXNlTWVtbygoKSA9PiB7XG4gICAgY29uc3Qgd3JhcHBlZENhbGxiYWNrID0gKC8qKiBAdHlwZSB7RnJvbnRlbmRNb2RlbENsYXNzRXZlbnRQYXlsb2FkfSAqLyBwYXlsb2FkKSA9PiB7XG4gICAgICBpZiAoYWN0aXZlUmVmLmN1cnJlbnQpIGNhbGxiYWNrUmVmLmN1cnJlbnQocGF5bG9hZClcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGRlYm91bmNlID09PSBcIm51bWJlclwiKSByZXR1cm4gZGVib3VuY2VGdW5jdGlvbih3cmFwcGVkQ2FsbGJhY2ssIGRlYm91bmNlKVxuICAgIGlmIChkZWJvdW5jZSkgcmV0dXJuIGRlYm91bmNlRnVuY3Rpb24od3JhcHBlZENhbGxiYWNrKVxuXG4gICAgcmV0dXJuIHdyYXBwZWRDYWxsYmFja1xuICB9LCBbZGVib3VuY2VdKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFhY3RpdmUgfHwgIW1vZGVsQ2xhc3MpIHJldHVybiB1bmRlZmluZWRcblxuICAgIGxldCBjbG9zZWQgPSBmYWxzZVxuICAgIC8qKlxuICAgICAqIFVuc3Vic2NyaWJlIGNhbGxiYWNrcy5cbiAgICAgKiBAdHlwZSB7QXJyYXk8KCkgPT4gdm9pZD59ICovXG4gICAgY29uc3QgdW5zdWJzY3JpYmVDYWxsYmFja3MgPSBbXVxuICAgIGNvbnN0IHN1YnNjcmlwdGlvbkNhbGxiYWNrID0gKC8qKiBAdHlwZSB7RnJvbnRlbmRNb2RlbENsYXNzRXZlbnRQYXlsb2FkfSAqLyBwYXlsb2FkKSA9PiB7XG4gICAgICBpZiAoIWNsb3NlZCkgZXZlbnRDYWxsYmFjayhwYXlsb2FkKVxuICAgIH1cblxuICAgIHZvaWQgKGFzeW5jICgpID0+IHtcbiAgICAgIGZvciAoY29uc3QgZXZlbnROYW1lIG9mIGV2ZW50TmFtZXMpIHtcbiAgICAgICAgY29uc3QgdW5zdWJzY3JpYmUgPSBhd2FpdCBzdWJzY3JpYmVUb01vZGVsQ2xhc3NFdmVudChtb2RlbENsYXNzLCBldmVudE5hbWUsIHN1YnNjcmlwdGlvbkNhbGxiYWNrLCBwcm9qZWN0aW9uT3B0aW9uc1JlZi5jdXJyZW50KVxuXG4gICAgICAgIGlmIChjbG9zZWQpIHtcbiAgICAgICAgICB1bnN1YnNjcmliZSgpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdW5zdWJzY3JpYmVDYWxsYmFja3MucHVzaCh1bnN1YnNjcmliZSlcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoIWNsb3NlZCAmJiBvbkNvbm5lY3RlZCkgb25Db25uZWN0ZWQoKVxuICAgIH0pKClcblxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBjbG9zZWQgPSB0cnVlXG5cbiAgICAgIGZvciAoY29uc3QgdW5zdWJzY3JpYmUgb2YgdW5zdWJzY3JpYmVDYWxsYmFja3MpIHtcbiAgICAgICAgdW5zdWJzY3JpYmUoKVxuICAgICAgfVxuXG4gICAgICBjbGVhclBlbmRpbmdEZWJvdW5jZWRDYWxsYmFjayhldmVudENhbGxiYWNrKVxuICAgIH1cbiAgfSwgW2FjdGl2ZSwgZXZlbnRzS2V5LCBldmVudENhbGxiYWNrLCBtb2RlbENsYXNzLCBvbkNvbm5lY3RlZCwgcHJvamVjdGlvbktleV0pXG59XG4iXX0=
|
|
@@ -2,7 +2,7 @@ export type FrontendModelClass = import("./base.js").FrontendModelClass;
|
|
|
2
2
|
export type FrontendModelInstance = import("./base.js").default;
|
|
3
3
|
export type FrontendModelClassUpdateEventPayload = import("./use-model-class-event.js").FrontendModelCreateUpdateEventPayload;
|
|
4
4
|
export type FrontendModelInstanceUpdateEventPayload = {
|
|
5
|
-
id: string;
|
|
5
|
+
id: string | import("../utils/model-primary-key.js").CompositeModelPrimaryKeyValue;
|
|
6
6
|
model: FrontendModelInstance;
|
|
7
7
|
};
|
|
8
8
|
export type FrontendModelUpdateEventPayload = FrontendModelClassUpdateEventPayload | FrontendModelInstanceUpdateEventPayload;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-updated-event.d.ts","sourceRoot":"","sources":["../../../src/frontend-models/use-updated-event.js"],"names":[],"mappings":"AAYG,YAAkD,kBAAkB,GAA1D,OAAO,WAAW,EAAE,kBAAkB,CAAoB;AAGpE,YAAuC,qBAAqB,GAAlD,OAAO,WAAW,EAAE,OAAO,CAAuB;AAG5D,YAAsF,oCAAoC,GAAhH,OAAO,4BAA4B,EAAE,qCAAqC,CAAsC;AAG1H,
|
|
1
|
+
{"version":3,"file":"use-updated-event.d.ts","sourceRoot":"","sources":["../../../src/frontend-models/use-updated-event.js"],"names":[],"mappings":"AAYG,YAAkD,kBAAkB,GAA1D,OAAO,WAAW,EAAE,kBAAkB,CAAoB;AAGpE,YAAuC,qBAAqB,GAAlD,OAAO,WAAW,EAAE,OAAO,CAAuB;AAG5D,YAAsF,oCAAoC,GAAhH,OAAO,4BAA4B,EAAE,qCAAqC,CAAsC;AAG1H,YAA8H,uCAAuC,GAA3J;IAAC,EAAE,EAAE,MAAM,GAAG,OAAO,+BAA+B,EAAE,6BAA6B,CAAC;IAAC,KAAK,EAAE,qBAAqB,CAAA;CAAC,CAAyC;AAGrK,YAA0F,+BAA+B,GAA/G,oCAAoC,GAAG,uCAAuC,CAAiC;AAGzH,YAA0E,sBAAsB,GAAtF,OAAO,4BAA4B,EAAE,yBAAyB,CAAwB;AAGhG,YAA8D,gCAAgC,GAApF,CAAC,OAAO,EAAE,+BAA+B,KAAK,IAAI,CAAkC;AA0BjG;;;;;;;GAOG;AACH,MAAM,CAAC,OAAO,UAAU,eAAe,CAAC,kBAAkB,EAL/C,kBAAkB,GAAG,qBAAqB,GAAG,qBAAqB,EAAE,GAAG,IAAI,GAAG,SAK/B,EAAE,QAAQ,EAJzD,gCAIyD,EAAE,OAAO,AAH1E,CACA,EADQ,sBAGuE,GAFrE,IAAI,CAchB"}
|
|
@@ -16,7 +16,7 @@ import useModelClassEvent from "./use-model-class-event.js";
|
|
|
16
16
|
* @typedef {import("./use-model-class-event.js").FrontendModelCreateUpdateEventPayload} FrontendModelClassUpdateEventPayload */
|
|
17
17
|
/**
|
|
18
18
|
* Defines this typedef.
|
|
19
|
-
* @typedef {{id: string, model: FrontendModelInstance}} FrontendModelInstanceUpdateEventPayload */
|
|
19
|
+
* @typedef {{id: string | import("../utils/model-primary-key.js").CompositeModelPrimaryKeyValue, model: FrontendModelInstance}} FrontendModelInstanceUpdateEventPayload */
|
|
20
20
|
/**
|
|
21
21
|
* FrontendModelUpdateEventPayload type.
|
|
22
22
|
* @typedef {FrontendModelClassUpdateEventPayload | FrontendModelInstanceUpdateEventPayload} FrontendModelUpdateEventPayload */
|
|
@@ -131,4 +131,4 @@ function useInstanceUpdatedEvent(modelOrModels, callback, options) {
|
|
|
131
131
|
};
|
|
132
132
|
}, [active, eventCallback, modelsKey, onConnected, projectionKey]);
|
|
133
133
|
}
|
|
134
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlLXVwZGF0ZWQtZXZlbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZnJvbnRlbmQtbW9kZWxzL3VzZS11cGRhdGVkLWV2ZW50LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWixPQUFPLGdCQUFnQixNQUFNLFVBQVUsQ0FBQTtBQUN2QyxPQUFPLEVBQUMsU0FBUyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUMsTUFBTSxPQUFPLENBQUE7QUFFaEQsT0FBTyw2QkFBNkIsTUFBTSx1Q0FBdUMsQ0FBQTtBQUNqRixPQUFPLEVBQUMsbUJBQW1CLEVBQUUsZUFBZSxFQUFDLE1BQU0sd0JBQXdCLENBQUE7QUFDM0UsT0FBTyxFQUFDLG9DQUFvQyxFQUFDLE1BQU0sNkJBQTZCLENBQUE7QUFDaEYsT0FBTyxrQkFBa0IsTUFBTSw0QkFBNEIsQ0FBQTtBQUUzRDs7MEVBRTBFO0FBQzFFOztrRUFFa0U7QUFDbEU7O2dJQUVnSTtBQUNoSTs7bUdBRW1HO0FBQ25HOzsrSEFFK0g7QUFDL0g7O3NHQUVzRztBQUN0Rzs7b0dBRW9HO0FBRXBHOzs7O0dBSUc7QUFDSCxTQUFTLHNCQUFzQixDQUFDLFdBQVc7SUFDekMsTUFBTSxrQkFBa0IsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFBO0lBRW5ELElBQUksa0JBQWtCLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQ2xDLE1BQU0sSUFBSSxLQUFLLENBQUMsNkNBQTZDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUE7SUFDL0YsQ0FBQztBQUNILENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsU0FBUywyQkFBMkIsQ0FBQyxLQUFLO0lBQ3hDLElBQUksQ0FBQyxLQUFLO1FBQUUsT0FBTyxJQUFJLENBQUE7SUFFdkIsT0FBTyxLQUFLLENBQUMsbUJBQW1CLEVBQUUsQ0FBQTtBQUNwQyxDQUFDO0FBRUQ7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QUFDLENBQUE7Z0JBRTVGLElBQUksTUFBTSxFQUFFLENBQUM7b0JBQ1gsV0FBVyxFQUFFLENBQUE7Z0JBQ2YsQ0FBQztxQkFBTSxDQUFDO29CQUNOLG9CQUFvQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQTtnQkFDeEMsQ0FBQztZQUNILENBQUM7WUFFRCxJQUFJLENBQUMsTUFBTSxJQUFJLFdBQVc7Z0JBQUUsV0FBVyxFQUFFLENBQUE7UUFDM0MsQ0FBQyxDQUFDLEVBQUUsQ0FBQTtRQUVKLE9BQU8sR0FBRyxFQUFFO1lBQ1YsTUFBTSxHQUFHLElBQUksQ0FBQTtZQUViLEtBQUssTUFBTSxXQUFXLElBQUksb0JBQW9CLEVBQUUsQ0FBQztnQkFDL0MsV0FBVyxFQUFFLENBQUE7WUFDZixDQUFDO1lBRUQsNkJBQTZCLENBQUMsYUFBYSxDQUFDLENBQUE7UUFDOUMsQ0FBQyxDQUFBO0lBQ0gsQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLGFBQWEsRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLGFBQWEsQ0FBQyxDQUFDLENBQUE7QUFDcEUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG5pbXBvcnQgZGVib3VuY2VGdW5jdGlvbiBmcm9tIFwiZGVib3VuY2VcIlxuaW1wb3J0IHt1c2VFZmZlY3QsIHVzZU1lbW8sIHVzZVJlZn0gZnJvbSBcInJlYWN0XCJcblxuaW1wb3J0IGNsZWFyUGVuZGluZ0RlYm91bmNlZENhbGxiYWNrIGZyb20gXCIuL2NsZWFyLXBlbmRpbmctZGVib3VuY2VkLWNhbGxiYWNrLmpzXCJcbmltcG9ydCB7bW9kZWxzRGVwZW5kZW5jeUtleSwgbW9kZWxzRnJvbUlucHV0fSBmcm9tIFwiLi9ldmVudC1ob29rLW1vZGVscy5qc1wiXG5pbXBvcnQge2Zyb250ZW5kTW9kZWxSZW1vdGVSZXF1ZXN0Q29udGV4dEtleX0gZnJvbSBcIi4vcmVtb3RlLXJlcXVlc3QtY29udGV4dC5qc1wiXG5pbXBvcnQgdXNlTW9kZWxDbGFzc0V2ZW50IGZyb20gXCIuL3VzZS1tb2RlbC1jbGFzcy1ldmVudC5qc1wiXG5cbi8qKlxuICogRnJvbnRlbmRNb2RlbENsYXNzIHR5cGUuXG4gKiBAdHlwZWRlZiB7aW1wb3J0KFwiLi9iYXNlLmpzXCIpLkZyb250ZW5kTW9kZWxDbGFzc30gRnJvbnRlbmRNb2RlbENsYXNzICovXG4vKipcbiAqIEZyb250ZW5kTW9kZWxJbnN0YW5jZSB0eXBlLlxuICogQHR5cGVkZWYge2ltcG9ydChcIi4vYmFzZS5qc1wiKS5kZWZhdWx0fSBGcm9udGVuZE1vZGVsSW5zdGFuY2UgKi9cbi8qKlxuICogRnJvbnRlbmRNb2RlbENsYXNzVXBkYXRlRXZlbnRQYXlsb2FkIHR5cGUuXG4gKiBAdHlwZWRlZiB7aW1wb3J0KFwiLi91c2UtbW9kZWwtY2xhc3MtZXZlbnQuanNcIikuRnJvbnRlbmRNb2RlbENyZWF0ZVVwZGF0ZUV2ZW50UGF5bG9hZH0gRnJvbnRlbmRNb2RlbENsYXNzVXBkYXRlRXZlbnRQYXlsb2FkICovXG4vKipcbiAqIERlZmluZXMgdGhpcyB0eXBlZGVmLlxuICogQHR5cGVkZWYge3tpZDogc3RyaW5nLCBtb2RlbDogRnJvbnRlbmRNb2RlbEluc3RhbmNlfX0gRnJvbnRlbmRNb2RlbEluc3RhbmNlVXBkYXRlRXZlbnRQYXlsb2FkICovXG4vKipcbiAqIEZyb250ZW5kTW9kZWxVcGRhdGVFdmVudFBheWxvYWQgdHlwZS5cbiAqIEB0eXBlZGVmIHtGcm9udGVuZE1vZGVsQ2xhc3NVcGRhdGVFdmVudFBheWxvYWQgfCBGcm9udGVuZE1vZGVsSW5zdGFuY2VVcGRhdGVFdmVudFBheWxvYWR9IEZyb250ZW5kTW9kZWxVcGRhdGVFdmVudFBheWxvYWQgKi9cbi8qKlxuICogVXNlVXBkYXRlZEV2ZW50T3B0aW9ucyB0eXBlLlxuICogQHR5cGVkZWYge2ltcG9ydChcIi4vdXNlLW1vZGVsLWNsYXNzLWV2ZW50LmpzXCIpLlVzZU1vZGVsQ2xhc3NFdmVudE9wdGlvbnN9IFVzZVVwZGF0ZWRFdmVudE9wdGlvbnMgKi9cbi8qKlxuICogRnJvbnRlbmRNb2RlbFVwZGF0ZUV2ZW50Q2FsbGJhY2sgdHlwZS5cbiAqIEB0eXBlZGVmIHsocGF5bG9hZDogRnJvbnRlbmRNb2RlbFVwZGF0ZUV2ZW50UGF5bG9hZCkgPT4gdm9pZH0gRnJvbnRlbmRNb2RlbFVwZGF0ZUV2ZW50Q2FsbGJhY2sgKi9cblxuLyoqXG4gKiBSdW5zIGFzc2VydCBubyB1bmtub3duIG9wdGlvbnMuXG4gKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIGltcG9ydChcIi4vcXVlcnkuanNcIikuRnJvbnRlbmRNb2RlbFRyYW5zcG9ydFZhbHVlIHwgKCgpID0+IHZvaWQpIHwgdW5kZWZpbmVkPn0gcmVzdE9wdGlvbnMgLSBVbmtub3duIG9wdGlvbnMgb2JqZWN0LlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmZ1bmN0aW9uIGFzc2VydE5vVW5rbm93bk9wdGlvbnMocmVzdE9wdGlvbnMpIHtcbiAgY29uc3QgdW5rbm93bk9wdGlvbk5hbWVzID0gT2JqZWN0LmtleXMocmVzdE9wdGlvbnMpXG5cbiAgaWYgKHVua25vd25PcHRpb25OYW1lcy5sZW5ndGggPiAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIG9wdGlvbnMgZ2l2ZW4gdG8gdXNlVXBkYXRlZEV2ZW50OiAke3Vua25vd25PcHRpb25OYW1lcy5qb2luKFwiLCBcIil9YClcbiAgfVxufVxuXG4vKipcbiAqIFJ1bnMgZXZlbnQgcXVlcnkgZGVwZW5kZW5jeSBwYXlsb2FkLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuL3F1ZXJ5LmpzXCIpLmRlZmF1bHQ8RnJvbnRlbmRNb2RlbENsYXNzPiB8IHVuZGVmaW5lZH0gcXVlcnkgLSBFdmVudCBxdWVyeSBvcHRpb24uXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi9xdWVyeS5qc1wiKS5Gcm9udGVuZE1vZGVsRXZlbnRRdWVyeVBheWxvYWQgfCBudWxsfSBTdGFibGUgZGVwZW5kZW5jeSBwYXlsb2FkLlxuICovXG5mdW5jdGlvbiBldmVudFF1ZXJ5RGVwZW5kZW5jeVBheWxvYWQocXVlcnkpIHtcbiAgaWYgKCFxdWVyeSkgcmV0dXJuIG51bGxcblxuICByZXR1cm4gcXVlcnkuZXZlbnRPcHRpb25zUGF5bG9hZCgpXG59XG5cbi8qKlxuICogUmVhY3QgaG9vayBmb3IgZnJvbnRlbmQtbW9kZWwgdXBkYXRlIGV2ZW50cy4gUGFzcyBhIG1vZGVsIGNsYXNzIGZvciBjbGFzcy1sZXZlbFxuICogdXBkYXRlIGV2ZW50cywgb3IgYSBtb2RlbCAvIG1vZGVsIGFycmF5IGZvciBpbnN0YW5jZS1sZXZlbCB1cGRhdGUgZXZlbnRzLlxuICogQHBhcmFtIHtGcm9udGVuZE1vZGVsQ2xhc3MgfCBGcm9udGVuZE1vZGVsSW5zdGFuY2UgfCBGcm9udGVuZE1vZGVsSW5zdGFuY2VbXSB8IG51bGwgfCB1bmRlZmluZWR9IG1vZGVsQ2xhc3NPck1vZGVscyAtIE1vZGVsIGNsYXNzLCBtb2RlbCwgb3IgbW9kZWxzLlxuICogQHBhcmFtIHtGcm9udGVuZE1vZGVsVXBkYXRlRXZlbnRDYWxsYmFja30gY2FsbGJhY2sgLSBFdmVudCBjYWxsYmFjay5cbiAqIEBwYXJhbSB7VXNlVXBkYXRlZEV2ZW50T3B0aW9uc30gW29wdGlvbnNdIC0gSG9vayBvcHRpb25zLlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVzZVVwZGF0ZWRFdmVudChtb2RlbENsYXNzT3JNb2RlbHMsIGNhbGxiYWNrLCBvcHRpb25zID0ge30pIHtcbiAgY29uc3Qge2FjdGl2ZSA9IHRydWUsIGFiaWxpdGllcywgZGVib3VuY2UgPSBmYWxzZSwgb25Db25uZWN0ZWQsIHByZWxvYWQsIHF1ZXJ5LCBxdWVyeURhdGEsIHJlcXVlc3RDb250ZXh0LCBzZWxlY3QsIHNlbGVjdHNFeHRyYSwgd2l0aENvdW50LCAuLi5yZXN0T3B0aW9uc30gPSBvcHRpb25zXG4gIGFzc2VydE5vVW5rbm93bk9wdGlvbnMocmVzdE9wdGlvbnMpXG5cbiAgY29uc3QgY2xhc3NNb2RlbCA9IHR5cGVvZiBtb2RlbENsYXNzT3JNb2RlbHMgPT09IFwiZnVuY3Rpb25cIiA/IG1vZGVsQ2xhc3NPck1vZGVscyA6IG51bGxcbiAgY29uc3QgaW5zdGFuY2VNb2RlbHMgPSB0eXBlb2YgbW9kZWxDbGFzc09yTW9kZWxzID09PSBcImZ1bmN0aW9uXCIgPyBudWxsIDogbW9kZWxDbGFzc09yTW9kZWxzXG4gIGNvbnN0IHByb2plY3Rpb25PcHRpb25zID0ge2FiaWxpdGllcywgcHJlbG9hZCwgcXVlcnksIHF1ZXJ5RGF0YSwgcmVxdWVzdENvbnRleHQsIHNlbGVjdCwgc2VsZWN0c0V4dHJhLCB3aXRoQ291bnR9XG5cbiAgdXNlTW9kZWxDbGFzc0V2ZW50KGNsYXNzTW9kZWwsIFwidXBkYXRlXCIsIChwYXlsb2FkKSA9PiB7XG4gICAgY2FsbGJhY2soLyoqIEB0eXBlIHtGcm9udGVuZE1vZGVsQ2xhc3NVcGRhdGVFdmVudFBheWxvYWR9ICovIChwYXlsb2FkKSlcbiAgfSwge2FjdGl2ZTogYWN0aXZlICYmIEJvb2xlYW4oY2xhc3NNb2RlbCksIGRlYm91bmNlLCBvbkNvbm5lY3RlZCwgLi4ucHJvamVjdGlvbk9wdGlvbnN9KVxuICB1c2VJbnN0YW5jZVVwZGF0ZWRFdmVudChpbnN0YW5jZU1vZGVscywgY2FsbGJhY2ssIHthY3RpdmU6IGFjdGl2ZSAmJiAhY2xhc3NNb2RlbCwgZGVib3VuY2UsIG9uQ29ubmVjdGVkLCAuLi5wcm9qZWN0aW9uT3B0aW9uc30pXG59XG5cbi8qKlxuICogUnVucyB1c2UgaW5zdGFuY2UgdXBkYXRlZCBldmVudC5cbiAqIEBwYXJhbSB7RnJvbnRlbmRNb2RlbEluc3RhbmNlIHwgRnJvbnRlbmRNb2RlbEluc3RhbmNlW10gfCBudWxsIHwgdW5kZWZpbmVkfSBtb2RlbE9yTW9kZWxzIC0gTW9kZWwgb3IgbW9kZWxzLlxuICogQHBhcmFtIHtGcm9udGVuZE1vZGVsVXBkYXRlRXZlbnRDYWxsYmFja30gY2FsbGJhY2sgLSBFdmVudCBjYWxsYmFjay5cbiAqIEBwYXJhbSB7VXNlVXBkYXRlZEV2ZW50T3B0aW9uc30gb3B0aW9ucyAtIEhvb2sgb3B0aW9ucy5cbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5mdW5jdGlvbiB1c2VJbnN0YW5jZVVwZGF0ZWRFdmVudChtb2RlbE9yTW9kZWxzLCBjYWxsYmFjaywgb3B0aW9ucykge1xuICBjb25zdCB7YWN0aXZlID0gdHJ1ZSwgYWJpbGl0aWVzLCBkZWJvdW5jZSA9IGZhbHNlLCBvbkNvbm5lY3RlZCwgcHJlbG9hZCwgcXVlcnksIHF1ZXJ5RGF0YSwgcmVxdWVzdENvbnRleHQsIHNlbGVjdCwgc2VsZWN0c0V4dHJhLCB3aXRoQ291bnR9ID0gb3B0aW9uc1xuICBjb25zdCBwcm9qZWN0aW9uS2V5ID0gSlNPTi5zdHJpbmdpZnkoe2FiaWxpdGllcywgcHJlbG9hZCwgcXVlcnk6IGV2ZW50UXVlcnlEZXBlbmRlbmN5UGF5bG9hZChxdWVyeSksIHF1ZXJ5RGF0YSwgcmVxdWVzdENvbnRleHQ6IGZyb250ZW5kTW9kZWxSZW1vdGVSZXF1ZXN0Q29udGV4dEtleShyZXF1ZXN0Q29udGV4dCksIHNlbGVjdCwgc2VsZWN0c0V4dHJhLCB3aXRoQ291bnR9KVxuICBjb25zdCBwcm9qZWN0aW9uT3B0aW9uc1JlZiA9IHVzZVJlZih7YWJpbGl0aWVzLCBwcmVsb2FkLCBxdWVyeSwgcXVlcnlEYXRhLCByZXF1ZXN0Q29udGV4dCwgc2VsZWN0LCBzZWxlY3RzRXh0cmEsIHdpdGhDb3VudH0pXG4gIGNvbnN0IGNhbGxiYWNrUmVmID0gdXNlUmVmKGNhbGxiYWNrKVxuICBjb25zdCBhY3RpdmVSZWYgPSB1c2VSZWYoYWN0aXZlKVxuICBwcm9qZWN0aW9uT3B0aW9uc1JlZi5jdXJyZW50ID0ge2FiaWxpdGllcywgcHJlbG9hZCwgcXVlcnksIHF1ZXJ5RGF0YSwgcmVxdWVzdENvbnRleHQsIHNlbGVjdCwgc2VsZWN0c0V4dHJhLCB3aXRoQ291bnR9XG4gIGNhbGxiYWNrUmVmLmN1cnJlbnQgPSBjYWxsYmFja1xuICBhY3RpdmVSZWYuY3VycmVudCA9IGFjdGl2ZVxuXG4gIGNvbnN0IG1vZGVsc0tleSA9IG1vZGVsc0RlcGVuZGVuY3lLZXkobW9kZWxPck1vZGVscylcbiAgY29uc3QgZXZlbnRDYWxsYmFjayA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGNvbnN0IHdyYXBwZWRDYWxsYmFjayA9ICgvKiogQHR5cGUge0Zyb250ZW5kTW9kZWxJbnN0YW5jZVVwZGF0ZUV2ZW50UGF5bG9hZH0gKi8gcGF5bG9hZCkgPT4ge1xuICAgICAgaWYgKGFjdGl2ZVJlZi5jdXJyZW50KSBjYWxsYmFja1JlZi5jdXJyZW50KHBheWxvYWQpXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBkZWJvdW5jZSA9PT0gXCJudW1iZXJcIikgcmV0dXJuIGRlYm91bmNlRnVuY3Rpb24od3JhcHBlZENhbGxiYWNrLCBkZWJvdW5jZSlcbiAgICBpZiAoZGVib3VuY2UpIHJldHVybiBkZWJvdW5jZUZ1bmN0aW9uKHdyYXBwZWRDYWxsYmFjaylcblxuICAgIHJldHVybiB3cmFwcGVkQ2FsbGJhY2tcbiAgfSwgW2RlYm91bmNlXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghYWN0aXZlKSByZXR1cm4gdW5kZWZpbmVkXG5cbiAgICBjb25zdCBtb2RlbHMgPSBtb2RlbHNGcm9tSW5wdXQobW9kZWxPck1vZGVscylcbiAgICBpZiAobW9kZWxzLmxlbmd0aCA8IDEpIHJldHVybiB1bmRlZmluZWRcblxuICAgIGxldCBjbG9zZWQgPSBmYWxzZVxuICAgIC8qKlxuICAgICAqIFVuc3Vic2NyaWJlIGNhbGxiYWNrcy5cbiAgICAgKiBAdHlwZSB7QXJyYXk8KCkgPT4gdm9pZD59ICovXG4gICAgY29uc3QgdW5zdWJzY3JpYmVDYWxsYmFja3MgPSBbXVxuICAgIGNvbnN0IHN1YnNjcmlwdGlvbkNhbGxiYWNrID0gKC8qKiBAdHlwZSB7RnJvbnRlbmRNb2RlbEluc3RhbmNlVXBkYXRlRXZlbnRQYXlsb2FkfSAqLyBwYXlsb2FkKSA9PiB7XG4gICAgICBpZiAoIWNsb3NlZCkgZXZlbnRDYWxsYmFjayhwYXlsb2FkKVxuICAgIH1cblxuICAgIHZvaWQgKGFzeW5jICgpID0+IHtcbiAgICAgIGZvciAoY29uc3QgbW9kZWwgb2YgbW9kZWxzKSB7XG4gICAgICAgIGNvbnN0IHVuc3Vic2NyaWJlID0gYXdhaXQgbW9kZWwub25VcGRhdGUoc3Vic2NyaXB0aW9uQ2FsbGJhY2ssIHByb2plY3Rpb25PcHRpb25zUmVmLmN1cnJlbnQpXG5cbiAgICAgICAgaWYgKGNsb3NlZCkge1xuICAgICAgICAgIHVuc3Vic2NyaWJlKClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB1bnN1YnNjcmliZUNhbGxiYWNrcy5wdXNoKHVuc3Vic2NyaWJlKVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICghY2xvc2VkICYmIG9uQ29ubmVjdGVkKSBvbkNvbm5lY3RlZCgpXG4gICAgfSkoKVxuXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGNsb3NlZCA9IHRydWVcblxuICAgICAgZm9yIChjb25zdCB1bnN1YnNjcmliZSBvZiB1bnN1YnNjcmliZUNhbGxiYWNrcykge1xuICAgICAgICB1bnN1YnNjcmliZSgpXG4gICAgICB9XG5cbiAgICAgIGNsZWFyUGVuZGluZ0RlYm91bmNlZENhbGxiYWNrKGV2ZW50Q2FsbGJhY2spXG4gICAgfVxuICB9LCBbYWN0aXZlLCBldmVudENhbGxiYWNrLCBtb2RlbHNLZXksIG9uQ29ubmVjdGVkLCBwcm9qZWN0aW9uS2V5XSlcbn1cbiJdfQ==
|
|
134
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlLXVwZGF0ZWQtZXZlbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZnJvbnRlbmQtbW9kZWxzL3VzZS11cGRhdGVkLWV2ZW50LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWixPQUFPLGdCQUFnQixNQUFNLFVBQVUsQ0FBQTtBQUN2QyxPQUFPLEVBQUMsU0FBUyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUMsTUFBTSxPQUFPLENBQUE7QUFFaEQsT0FBTyw2QkFBNkIsTUFBTSx1Q0FBdUMsQ0FBQTtBQUNqRixPQUFPLEVBQUMsbUJBQW1CLEVBQUUsZUFBZSxFQUFDLE1BQU0sd0JBQXdCLENBQUE7QUFDM0UsT0FBTyxFQUFDLG9DQUFvQyxFQUFDLE1BQU0sNkJBQTZCLENBQUE7QUFDaEYsT0FBTyxrQkFBa0IsTUFBTSw0QkFBNEIsQ0FBQTtBQUUzRDs7MEVBRTBFO0FBQzFFOztrRUFFa0U7QUFDbEU7O2dJQUVnSTtBQUNoSTs7MktBRTJLO0FBQzNLOzsrSEFFK0g7QUFDL0g7O3NHQUVzRztBQUN0Rzs7b0dBRW9HO0FBRXBHOzs7O0dBSUc7QUFDSCxTQUFTLHNCQUFzQixDQUFDLFdBQVc7SUFDekMsTUFBTSxrQkFBa0IsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFBO0lBRW5ELElBQUksa0JBQWtCLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQ2xDLE1BQU0sSUFBSSxLQUFLLENBQUMsNkNBQTZDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUE7SUFDL0YsQ0FBQztBQUNILENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsU0FBUywyQkFBMkIsQ0FBQyxLQUFLO0lBQ3hDLElBQUksQ0FBQyxLQUFLO1FBQUUsT0FBTyxJQUFJLENBQUE7SUFFdkIsT0FBTyxLQUFLLENBQUMsbUJBQW1CLEVBQUUsQ0FBQTtBQUNwQyxDQUFDO0FBRUQ7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QUFDLENBQUE7Z0JBRTVGLElBQUksTUFBTSxFQUFFLENBQUM7b0JBQ1gsV0FBVyxFQUFFLENBQUE7Z0JBQ2YsQ0FBQztxQkFBTSxDQUFDO29CQUNOLG9CQUFvQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQTtnQkFDeEMsQ0FBQztZQUNILENBQUM7WUFFRCxJQUFJLENBQUMsTUFBTSxJQUFJLFdBQVc7Z0JBQUUsV0FBVyxFQUFFLENBQUE7UUFDM0MsQ0FBQyxDQUFDLEVBQUUsQ0FBQTtRQUVKLE9BQU8sR0FBRyxFQUFFO1lBQ1YsTUFBTSxHQUFHLElBQUksQ0FBQTtZQUViLEtBQUssTUFBTSxXQUFXLElBQUksb0JBQW9CLEVBQUUsQ0FBQztnQkFDL0MsV0FBVyxFQUFFLENBQUE7WUFDZixDQUFDO1lBRUQsNkJBQTZCLENBQUMsYUFBYSxDQUFDLENBQUE7UUFDOUMsQ0FBQyxDQUFBO0lBQ0gsQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLGFBQWEsRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLGFBQWEsQ0FBQyxDQUFDLENBQUE7QUFDcEUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG5pbXBvcnQgZGVib3VuY2VGdW5jdGlvbiBmcm9tIFwiZGVib3VuY2VcIlxuaW1wb3J0IHt1c2VFZmZlY3QsIHVzZU1lbW8sIHVzZVJlZn0gZnJvbSBcInJlYWN0XCJcblxuaW1wb3J0IGNsZWFyUGVuZGluZ0RlYm91bmNlZENhbGxiYWNrIGZyb20gXCIuL2NsZWFyLXBlbmRpbmctZGVib3VuY2VkLWNhbGxiYWNrLmpzXCJcbmltcG9ydCB7bW9kZWxzRGVwZW5kZW5jeUtleSwgbW9kZWxzRnJvbUlucHV0fSBmcm9tIFwiLi9ldmVudC1ob29rLW1vZGVscy5qc1wiXG5pbXBvcnQge2Zyb250ZW5kTW9kZWxSZW1vdGVSZXF1ZXN0Q29udGV4dEtleX0gZnJvbSBcIi4vcmVtb3RlLXJlcXVlc3QtY29udGV4dC5qc1wiXG5pbXBvcnQgdXNlTW9kZWxDbGFzc0V2ZW50IGZyb20gXCIuL3VzZS1tb2RlbC1jbGFzcy1ldmVudC5qc1wiXG5cbi8qKlxuICogRnJvbnRlbmRNb2RlbENsYXNzIHR5cGUuXG4gKiBAdHlwZWRlZiB7aW1wb3J0KFwiLi9iYXNlLmpzXCIpLkZyb250ZW5kTW9kZWxDbGFzc30gRnJvbnRlbmRNb2RlbENsYXNzICovXG4vKipcbiAqIEZyb250ZW5kTW9kZWxJbnN0YW5jZSB0eXBlLlxuICogQHR5cGVkZWYge2ltcG9ydChcIi4vYmFzZS5qc1wiKS5kZWZhdWx0fSBGcm9udGVuZE1vZGVsSW5zdGFuY2UgKi9cbi8qKlxuICogRnJvbnRlbmRNb2RlbENsYXNzVXBkYXRlRXZlbnRQYXlsb2FkIHR5cGUuXG4gKiBAdHlwZWRlZiB7aW1wb3J0KFwiLi91c2UtbW9kZWwtY2xhc3MtZXZlbnQuanNcIikuRnJvbnRlbmRNb2RlbENyZWF0ZVVwZGF0ZUV2ZW50UGF5bG9hZH0gRnJvbnRlbmRNb2RlbENsYXNzVXBkYXRlRXZlbnRQYXlsb2FkICovXG4vKipcbiAqIERlZmluZXMgdGhpcyB0eXBlZGVmLlxuICogQHR5cGVkZWYge3tpZDogc3RyaW5nIHwgaW1wb3J0KFwiLi4vdXRpbHMvbW9kZWwtcHJpbWFyeS1rZXkuanNcIikuQ29tcG9zaXRlTW9kZWxQcmltYXJ5S2V5VmFsdWUsIG1vZGVsOiBGcm9udGVuZE1vZGVsSW5zdGFuY2V9fSBGcm9udGVuZE1vZGVsSW5zdGFuY2VVcGRhdGVFdmVudFBheWxvYWQgKi9cbi8qKlxuICogRnJvbnRlbmRNb2RlbFVwZGF0ZUV2ZW50UGF5bG9hZCB0eXBlLlxuICogQHR5cGVkZWYge0Zyb250ZW5kTW9kZWxDbGFzc1VwZGF0ZUV2ZW50UGF5bG9hZCB8IEZyb250ZW5kTW9kZWxJbnN0YW5jZVVwZGF0ZUV2ZW50UGF5bG9hZH0gRnJvbnRlbmRNb2RlbFVwZGF0ZUV2ZW50UGF5bG9hZCAqL1xuLyoqXG4gKiBVc2VVcGRhdGVkRXZlbnRPcHRpb25zIHR5cGUuXG4gKiBAdHlwZWRlZiB7aW1wb3J0KFwiLi91c2UtbW9kZWwtY2xhc3MtZXZlbnQuanNcIikuVXNlTW9kZWxDbGFzc0V2ZW50T3B0aW9uc30gVXNlVXBkYXRlZEV2ZW50T3B0aW9ucyAqL1xuLyoqXG4gKiBGcm9udGVuZE1vZGVsVXBkYXRlRXZlbnRDYWxsYmFjayB0eXBlLlxuICogQHR5cGVkZWYgeyhwYXlsb2FkOiBGcm9udGVuZE1vZGVsVXBkYXRlRXZlbnRQYXlsb2FkKSA9PiB2b2lkfSBGcm9udGVuZE1vZGVsVXBkYXRlRXZlbnRDYWxsYmFjayAqL1xuXG4vKipcbiAqIFJ1bnMgYXNzZXJ0IG5vIHVua25vd24gb3B0aW9ucy5cbiAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgaW1wb3J0KFwiLi9xdWVyeS5qc1wiKS5Gcm9udGVuZE1vZGVsVHJhbnNwb3J0VmFsdWUgfCAoKCkgPT4gdm9pZCkgfCB1bmRlZmluZWQ+fSByZXN0T3B0aW9ucyAtIFVua25vd24gb3B0aW9ucyBvYmplY3QuXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gYXNzZXJ0Tm9Vbmtub3duT3B0aW9ucyhyZXN0T3B0aW9ucykge1xuICBjb25zdCB1bmtub3duT3B0aW9uTmFtZXMgPSBPYmplY3Qua2V5cyhyZXN0T3B0aW9ucylcblxuICBpZiAodW5rbm93bk9wdGlvbk5hbWVzLmxlbmd0aCA+IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gb3B0aW9ucyBnaXZlbiB0byB1c2VVcGRhdGVkRXZlbnQ6ICR7dW5rbm93bk9wdGlvbk5hbWVzLmpvaW4oXCIsIFwiKX1gKVxuICB9XG59XG5cbi8qKlxuICogUnVucyBldmVudCBxdWVyeSBkZXBlbmRlbmN5IHBheWxvYWQuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4vcXVlcnkuanNcIikuZGVmYXVsdDxGcm9udGVuZE1vZGVsQ2xhc3M+IHwgdW5kZWZpbmVkfSBxdWVyeSAtIEV2ZW50IHF1ZXJ5IG9wdGlvbi5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuL3F1ZXJ5LmpzXCIpLkZyb250ZW5kTW9kZWxFdmVudFF1ZXJ5UGF5bG9hZCB8IG51bGx9IFN0YWJsZSBkZXBlbmRlbmN5IHBheWxvYWQuXG4gKi9cbmZ1bmN0aW9uIGV2ZW50UXVlcnlEZXBlbmRlbmN5UGF5bG9hZChxdWVyeSkge1xuICBpZiAoIXF1ZXJ5KSByZXR1cm4gbnVsbFxuXG4gIHJldHVybiBxdWVyeS5ldmVudE9wdGlvbnNQYXlsb2FkKClcbn1cblxuLyoqXG4gKiBSZWFjdCBob29rIGZvciBmcm9udGVuZC1tb2RlbCB1cGRhdGUgZXZlbnRzLiBQYXNzIGEgbW9kZWwgY2xhc3MgZm9yIGNsYXNzLWxldmVsXG4gKiB1cGRhdGUgZXZlbnRzLCBvciBhIG1vZGVsIC8gbW9kZWwgYXJyYXkgZm9yIGluc3RhbmNlLWxldmVsIHVwZGF0ZSBldmVudHMuXG4gKiBAcGFyYW0ge0Zyb250ZW5kTW9kZWxDbGFzcyB8IEZyb250ZW5kTW9kZWxJbnN0YW5jZSB8IEZyb250ZW5kTW9kZWxJbnN0YW5jZVtdIHwgbnVsbCB8IHVuZGVmaW5lZH0gbW9kZWxDbGFzc09yTW9kZWxzIC0gTW9kZWwgY2xhc3MsIG1vZGVsLCBvciBtb2RlbHMuXG4gKiBAcGFyYW0ge0Zyb250ZW5kTW9kZWxVcGRhdGVFdmVudENhbGxiYWNrfSBjYWxsYmFjayAtIEV2ZW50IGNhbGxiYWNrLlxuICogQHBhcmFtIHtVc2VVcGRhdGVkRXZlbnRPcHRpb25zfSBbb3B0aW9uc10gLSBIb29rIG9wdGlvbnMuXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdXNlVXBkYXRlZEV2ZW50KG1vZGVsQ2xhc3NPck1vZGVscywgY2FsbGJhY2ssIG9wdGlvbnMgPSB7fSkge1xuICBjb25zdCB7YWN0aXZlID0gdHJ1ZSwgYWJpbGl0aWVzLCBkZWJvdW5jZSA9IGZhbHNlLCBvbkNvbm5lY3RlZCwgcHJlbG9hZCwgcXVlcnksIHF1ZXJ5RGF0YSwgcmVxdWVzdENvbnRleHQsIHNlbGVjdCwgc2VsZWN0c0V4dHJhLCB3aXRoQ291bnQsIC4uLnJlc3RPcHRpb25zfSA9IG9wdGlvbnNcbiAgYXNzZXJ0Tm9Vbmtub3duT3B0aW9ucyhyZXN0T3B0aW9ucylcblxuICBjb25zdCBjbGFzc01vZGVsID0gdHlwZW9mIG1vZGVsQ2xhc3NPck1vZGVscyA9PT0gXCJmdW5jdGlvblwiID8gbW9kZWxDbGFzc09yTW9kZWxzIDogbnVsbFxuICBjb25zdCBpbnN0YW5jZU1vZGVscyA9IHR5cGVvZiBtb2RlbENsYXNzT3JNb2RlbHMgPT09IFwiZnVuY3Rpb25cIiA/IG51bGwgOiBtb2RlbENsYXNzT3JNb2RlbHNcbiAgY29uc3QgcHJvamVjdGlvbk9wdGlvbnMgPSB7YWJpbGl0aWVzLCBwcmVsb2FkLCBxdWVyeSwgcXVlcnlEYXRhLCByZXF1ZXN0Q29udGV4dCwgc2VsZWN0LCBzZWxlY3RzRXh0cmEsIHdpdGhDb3VudH1cblxuICB1c2VNb2RlbENsYXNzRXZlbnQoY2xhc3NNb2RlbCwgXCJ1cGRhdGVcIiwgKHBheWxvYWQpID0+IHtcbiAgICBjYWxsYmFjaygvKiogQHR5cGUge0Zyb250ZW5kTW9kZWxDbGFzc1VwZGF0ZUV2ZW50UGF5bG9hZH0gKi8gKHBheWxvYWQpKVxuICB9LCB7YWN0aXZlOiBhY3RpdmUgJiYgQm9vbGVhbihjbGFzc01vZGVsKSwgZGVib3VuY2UsIG9uQ29ubmVjdGVkLCAuLi5wcm9qZWN0aW9uT3B0aW9uc30pXG4gIHVzZUluc3RhbmNlVXBkYXRlZEV2ZW50KGluc3RhbmNlTW9kZWxzLCBjYWxsYmFjaywge2FjdGl2ZTogYWN0aXZlICYmICFjbGFzc01vZGVsLCBkZWJvdW5jZSwgb25Db25uZWN0ZWQsIC4uLnByb2plY3Rpb25PcHRpb25zfSlcbn1cblxuLyoqXG4gKiBSdW5zIHVzZSBpbnN0YW5jZSB1cGRhdGVkIGV2ZW50LlxuICogQHBhcmFtIHtGcm9udGVuZE1vZGVsSW5zdGFuY2UgfCBGcm9udGVuZE1vZGVsSW5zdGFuY2VbXSB8IG51bGwgfCB1bmRlZmluZWR9IG1vZGVsT3JNb2RlbHMgLSBNb2RlbCBvciBtb2RlbHMuXG4gKiBAcGFyYW0ge0Zyb250ZW5kTW9kZWxVcGRhdGVFdmVudENhbGxiYWNrfSBjYWxsYmFjayAtIEV2ZW50IGNhbGxiYWNrLlxuICogQHBhcmFtIHtVc2VVcGRhdGVkRXZlbnRPcHRpb25zfSBvcHRpb25zIC0gSG9vayBvcHRpb25zLlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmZ1bmN0aW9uIHVzZUluc3RhbmNlVXBkYXRlZEV2ZW50KG1vZGVsT3JNb2RlbHMsIGNhbGxiYWNrLCBvcHRpb25zKSB7XG4gIGNvbnN0IHthY3RpdmUgPSB0cnVlLCBhYmlsaXRpZXMsIGRlYm91bmNlID0gZmFsc2UsIG9uQ29ubmVjdGVkLCBwcmVsb2FkLCBxdWVyeSwgcXVlcnlEYXRhLCByZXF1ZXN0Q29udGV4dCwgc2VsZWN0LCBzZWxlY3RzRXh0cmEsIHdpdGhDb3VudH0gPSBvcHRpb25zXG4gIGNvbnN0IHByb2plY3Rpb25LZXkgPSBKU09OLnN0cmluZ2lmeSh7YWJpbGl0aWVzLCBwcmVsb2FkLCBxdWVyeTogZXZlbnRRdWVyeURlcGVuZGVuY3lQYXlsb2FkKHF1ZXJ5KSwgcXVlcnlEYXRhLCByZXF1ZXN0Q29udGV4dDogZnJvbnRlbmRNb2RlbFJlbW90ZVJlcXVlc3RDb250ZXh0S2V5KHJlcXVlc3RDb250ZXh0KSwgc2VsZWN0LCBzZWxlY3RzRXh0cmEsIHdpdGhDb3VudH0pXG4gIGNvbnN0IHByb2plY3Rpb25PcHRpb25zUmVmID0gdXNlUmVmKHthYmlsaXRpZXMsIHByZWxvYWQsIHF1ZXJ5LCBxdWVyeURhdGEsIHJlcXVlc3RDb250ZXh0LCBzZWxlY3QsIHNlbGVjdHNFeHRyYSwgd2l0aENvdW50fSlcbiAgY29uc3QgY2FsbGJhY2tSZWYgPSB1c2VSZWYoY2FsbGJhY2spXG4gIGNvbnN0IGFjdGl2ZVJlZiA9IHVzZVJlZihhY3RpdmUpXG4gIHByb2plY3Rpb25PcHRpb25zUmVmLmN1cnJlbnQgPSB7YWJpbGl0aWVzLCBwcmVsb2FkLCBxdWVyeSwgcXVlcnlEYXRhLCByZXF1ZXN0Q29udGV4dCwgc2VsZWN0LCBzZWxlY3RzRXh0cmEsIHdpdGhDb3VudH1cbiAgY2FsbGJhY2tSZWYuY3VycmVudCA9IGNhbGxiYWNrXG4gIGFjdGl2ZVJlZi5jdXJyZW50ID0gYWN0aXZlXG5cbiAgY29uc3QgbW9kZWxzS2V5ID0gbW9kZWxzRGVwZW5kZW5jeUtleShtb2RlbE9yTW9kZWxzKVxuICBjb25zdCBldmVudENhbGxiYWNrID0gdXNlTWVtbygoKSA9PiB7XG4gICAgY29uc3Qgd3JhcHBlZENhbGxiYWNrID0gKC8qKiBAdHlwZSB7RnJvbnRlbmRNb2RlbEluc3RhbmNlVXBkYXRlRXZlbnRQYXlsb2FkfSAqLyBwYXlsb2FkKSA9PiB7XG4gICAgICBpZiAoYWN0aXZlUmVmLmN1cnJlbnQpIGNhbGxiYWNrUmVmLmN1cnJlbnQocGF5bG9hZClcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGRlYm91bmNlID09PSBcIm51bWJlclwiKSByZXR1cm4gZGVib3VuY2VGdW5jdGlvbih3cmFwcGVkQ2FsbGJhY2ssIGRlYm91bmNlKVxuICAgIGlmIChkZWJvdW5jZSkgcmV0dXJuIGRlYm91bmNlRnVuY3Rpb24od3JhcHBlZENhbGxiYWNrKVxuXG4gICAgcmV0dXJuIHdyYXBwZWRDYWxsYmFja1xuICB9LCBbZGVib3VuY2VdKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFhY3RpdmUpIHJldHVybiB1bmRlZmluZWRcblxuICAgIGNvbnN0IG1vZGVscyA9IG1vZGVsc0Zyb21JbnB1dChtb2RlbE9yTW9kZWxzKVxuICAgIGlmIChtb2RlbHMubGVuZ3RoIDwgMSkgcmV0dXJuIHVuZGVmaW5lZFxuXG4gICAgbGV0IGNsb3NlZCA9IGZhbHNlXG4gICAgLyoqXG4gICAgICogVW5zdWJzY3JpYmUgY2FsbGJhY2tzLlxuICAgICAqIEB0eXBlIHtBcnJheTwoKSA9PiB2b2lkPn0gKi9cbiAgICBjb25zdCB1bnN1YnNjcmliZUNhbGxiYWNrcyA9IFtdXG4gICAgY29uc3Qgc3Vic2NyaXB0aW9uQ2FsbGJhY2sgPSAoLyoqIEB0eXBlIHtGcm9udGVuZE1vZGVsSW5zdGFuY2VVcGRhdGVFdmVudFBheWxvYWR9ICovIHBheWxvYWQpID0+IHtcbiAgICAgIGlmICghY2xvc2VkKSBldmVudENhbGxiYWNrKHBheWxvYWQpXG4gICAgfVxuXG4gICAgdm9pZCAoYXN5bmMgKCkgPT4ge1xuICAgICAgZm9yIChjb25zdCBtb2RlbCBvZiBtb2RlbHMpIHtcbiAgICAgICAgY29uc3QgdW5zdWJzY3JpYmUgPSBhd2FpdCBtb2RlbC5vblVwZGF0ZShzdWJzY3JpcHRpb25DYWxsYmFjaywgcHJvamVjdGlvbk9wdGlvbnNSZWYuY3VycmVudClcblxuICAgICAgICBpZiAoY2xvc2VkKSB7XG4gICAgICAgICAgdW5zdWJzY3JpYmUoKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHVuc3Vic2NyaWJlQ2FsbGJhY2tzLnB1c2godW5zdWJzY3JpYmUpXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKCFjbG9zZWQgJiYgb25Db25uZWN0ZWQpIG9uQ29ubmVjdGVkKClcbiAgICB9KSgpXG5cbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgY2xvc2VkID0gdHJ1ZVxuXG4gICAgICBmb3IgKGNvbnN0IHVuc3Vic2NyaWJlIG9mIHVuc3Vic2NyaWJlQ2FsbGJhY2tzKSB7XG4gICAgICAgIHVuc3Vic2NyaWJlKClcbiAgICAgIH1cblxuICAgICAgY2xlYXJQZW5kaW5nRGVib3VuY2VkQ2FsbGJhY2soZXZlbnRDYWxsYmFjaylcbiAgICB9XG4gIH0sIFthY3RpdmUsIGV2ZW50Q2FsbGJhY2ssIG1vZGVsc0tleSwgb25Db25uZWN0ZWQsIHByb2plY3Rpb25LZXldKVxufVxuIl19
|
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
import VelociousWebsocketChannel from "../http-server/websocket-channel.js";
|
|
2
2
|
export type FrontendModelLifecycleBroadcastBody = {
|
|
3
3
|
action?: string;
|
|
4
|
-
id?:
|
|
4
|
+
id?: import("../utils/model-primary-key.js").ModelPrimaryKeyValue;
|
|
5
5
|
matchedEventFilterKeys?: string[];
|
|
6
|
+
previousId?: import("../utils/model-primary-key.js").ModelPrimaryKeyValue;
|
|
6
7
|
record?: import("./query.js").FrontendModelTransportValue;
|
|
7
8
|
[key: string]: import("./query.js").FrontendModelTransportValue | string[] | undefined;
|
|
8
9
|
};
|
|
10
|
+
export type DestroyAuthorizationRecord = Record<string, import("./query.js").FrontendModelTransportValue>;
|
|
9
11
|
export type FrontendModelWebsocketUpgradeRequest = {
|
|
10
12
|
headers?: () => Record<string, string | string[] | undefined>;
|
|
11
13
|
remoteAddress?: () => string | undefined;
|
|
@@ -23,15 +25,11 @@ export type FrontendModelWebsocketSyntheticRequest = {
|
|
|
23
25
|
* Per-session channel subscription for frontend-model lifecycle events.
|
|
24
26
|
* Replaces the legacy `FrontendModelWebsocketChannel` (Phase 3).
|
|
25
27
|
*
|
|
26
|
-
*
|
|
27
|
-
*
|
|
28
|
-
*
|
|
29
|
-
*
|
|
30
|
-
*
|
|
31
|
-
* per-record visibility guarantees for massively cheaper broadcast fan-out.
|
|
32
|
-
* Subscriber-provided event filters can still narrow which create/update
|
|
33
|
-
* events are delivered, but they are matching predicates rather than
|
|
34
|
-
* per-record authorization checks.
|
|
28
|
+
* `canSubscribe` resolves the caller's ability once and requires a read rule
|
|
29
|
+
* for the requested model class. Create/update delivery then reloads each
|
|
30
|
+
* record through that ability and serializes it through the subscribed
|
|
31
|
+
* frontend resource. Subscriber-provided event filters can further narrow
|
|
32
|
+
* those authorized events.
|
|
35
33
|
*
|
|
36
34
|
* Wire: subscribe with `subscribeChannel("frontend-models", {params: {model: ModelName}})`.
|
|
37
35
|
* Backend publishes `{action, id, record}` via
|
|
@@ -48,24 +46,58 @@ export default class FrontendModelWebsocketChannel extends VelociousWebsocketCha
|
|
|
48
46
|
* @returns {Promise<boolean>} Whether the frontend-model subscription is authorized.
|
|
49
47
|
*/
|
|
50
48
|
canSubscribe(): Promise<boolean>;
|
|
49
|
+
/**
|
|
50
|
+
* Resolves a subscription name through frontend resources before falling back to a backing model name.
|
|
51
|
+
* @param {string} modelName - Frontend resource name.
|
|
52
|
+
* @returns {typeof import("../database/record/index.js").default | undefined} - Backing model class.
|
|
53
|
+
*/
|
|
54
|
+
_modelClass(modelName: string): typeof import("../database/record/index.js").default | undefined;
|
|
51
55
|
/**
|
|
52
56
|
* Runs deliver broadcast.
|
|
53
57
|
* @param {FrontendModelLifecycleBroadcastBody} body - Broadcast body.
|
|
54
|
-
* @param {
|
|
58
|
+
* @param {import("../http-server/websocket-channel.js").WebsocketBroadcastMetadata} [meta] - Optional server-side broadcast metadata.
|
|
55
59
|
* @returns {Promise<void>} Resolves after delivery.
|
|
56
60
|
*/
|
|
57
|
-
deliverBroadcast(body: FrontendModelLifecycleBroadcastBody, meta?:
|
|
58
|
-
eventId?: string;
|
|
59
|
-
}): Promise<void>;
|
|
61
|
+
deliverBroadcast(body: FrontendModelLifecycleBroadcastBody, meta?: import("../http-server/websocket-channel.js").WebsocketBroadcastMetadata): Promise<void>;
|
|
60
62
|
/**
|
|
61
63
|
* Runs deliver broadcast.
|
|
62
64
|
* @param {FrontendModelLifecycleBroadcastBody} body - Broadcast body.
|
|
63
|
-
* @param {
|
|
65
|
+
* @param {import("../http-server/websocket-channel.js").WebsocketBroadcastMetadata} [meta] - Optional server-side broadcast metadata.
|
|
64
66
|
* @returns {Promise<void>} Resolves after delivery.
|
|
65
67
|
*/
|
|
66
|
-
_deliverBroadcast(body: FrontendModelLifecycleBroadcastBody, meta?:
|
|
67
|
-
|
|
68
|
-
|
|
68
|
+
_deliverBroadcast(body: FrontendModelLifecycleBroadcastBody, meta?: import("../http-server/websocket-channel.js").WebsocketBroadcastMetadata): Promise<void>;
|
|
69
|
+
/**
|
|
70
|
+
* Requires a resync for relevant destroy events because their authorization
|
|
71
|
+
* snapshots are intentionally excluded from the persisted replay payload.
|
|
72
|
+
* @param {import("../http-server/websocket-channel.js").WebsocketJsonValue} body - Persisted broadcast payload.
|
|
73
|
+
* @returns {boolean} - Whether replay cannot safely authorize this event.
|
|
74
|
+
*/
|
|
75
|
+
_requiresReplayGap(body: import("../http-server/websocket-channel.js").WebsocketJsonValue): boolean;
|
|
76
|
+
/**
|
|
77
|
+
* Checks a destroy against the subscriber's ordinary authorized query by
|
|
78
|
+
* replacing the deleted backing table with the captured pre-delete row. Values
|
|
79
|
+
* are quoted on this trusted database connection; no broadcast-provided SQL is run.
|
|
80
|
+
* @param {FrontendModelLifecycleBroadcastBody} body - Destroy broadcast body.
|
|
81
|
+
* @param {typeof import("../frontend-model-controller.js").default} FrontendModelController - Server-side frontend-model controller class.
|
|
82
|
+
* @param {import("./query.js").FrontendModelTransportValue | undefined} destroyAuthorizationRecord - Server-only pre-delete record from live broadcast metadata.
|
|
83
|
+
* @returns {Promise<boolean>} - Whether the subscriber could read the record before deletion.
|
|
84
|
+
*/
|
|
85
|
+
_destroyEventIsAuthorized(body: FrontendModelLifecycleBroadcastBody, FrontendModelController: typeof import("../frontend-model-controller.js").default, destroyAuthorizationRecord: import("./query.js").FrontendModelTransportValue | undefined): Promise<boolean>;
|
|
86
|
+
/**
|
|
87
|
+
* Builds a backing-model query whose source is the captured pre-delete row.
|
|
88
|
+
* @param {typeof import("../database/record/index.js").default} ModelClass - Backing model class.
|
|
89
|
+
* @param {DestroyAuthorizationRecord} destroyAuthorizationRecord - Captured pre-delete record.
|
|
90
|
+
* @returns {import("../database/query/model-class-query.js").default<typeof import("../database/record/index.js").default>} - One-row model query.
|
|
91
|
+
*/
|
|
92
|
+
_destroyAuthorizationQuery(ModelClass: typeof import("../database/record/index.js").default, destroyAuthorizationRecord: DestroyAuthorizationRecord): import("../database/query/model-class-query.js").default<typeof import("../database/record/index.js").default>;
|
|
93
|
+
/**
|
|
94
|
+
* Replaces a query's backing table with a safely quoted one-row derived table.
|
|
95
|
+
* @param {import("../database/query/model-class-query.js").default<typeof import("../database/record/index.js").default>} query - Query to update.
|
|
96
|
+
* @param {typeof import("../database/record/index.js").default} ModelClass - Backing model class.
|
|
97
|
+
* @param {DestroyAuthorizationRecord} destroyAuthorizationRecord - Captured pre-delete record.
|
|
98
|
+
* @returns {void}
|
|
99
|
+
*/
|
|
100
|
+
_applyDestroyAuthorizationRecordToQuery(query: import("../database/query/model-class-query.js").default<typeof import("../database/record/index.js").default>, ModelClass: typeof import("../database/record/index.js").default, destroyAuthorizationRecord: DestroyAuthorizationRecord): void;
|
|
69
101
|
/**
|
|
70
102
|
* Runs matches.
|
|
71
103
|
* @param {Record<string, import("./query.js").FrontendModelTransportValue>} broadcastParams - Params from `broadcastToChannel`.
|
|
@@ -82,11 +114,6 @@ export default class FrontendModelWebsocketChannel extends VelociousWebsocketCha
|
|
|
82
114
|
* @returns {string | null} - Requested frontend-model name or null.
|
|
83
115
|
*/
|
|
84
116
|
_modelName(): string | null;
|
|
85
|
-
/**
|
|
86
|
-
* Runs has projection params.
|
|
87
|
-
* @returns {boolean} - Whether this subscription requested per-event record projection.
|
|
88
|
-
*/
|
|
89
|
-
_hasProjectionParams(): boolean;
|
|
90
117
|
/**
|
|
91
118
|
* Runs has event filter params.
|
|
92
119
|
* @returns {boolean} - Whether this subscription requested event query filters.
|
|
@@ -121,10 +148,10 @@ export default class FrontendModelWebsocketChannel extends VelociousWebsocketCha
|
|
|
121
148
|
_frontendModelController(FrontendModelController: typeof import("../frontend-model-controller.js").default, params?: Record<string, ReturnType<typeof JSON.parse>>): import("../frontend-model-controller.js").default;
|
|
122
149
|
/**
|
|
123
150
|
* Resolves tenant for event.
|
|
124
|
-
* @param {
|
|
151
|
+
* @param {import("../utils/model-primary-key.js").ModelPrimaryKeyValue} id - Event record id.
|
|
125
152
|
* @returns {Promise<ReturnType<typeof JSON.parse>>} - Resolved tenant.
|
|
126
153
|
*/
|
|
127
|
-
_resolveEventTenant(id:
|
|
154
|
+
_resolveEventTenant(id: import("../utils/model-primary-key.js").ModelPrimaryKeyValue): Promise<ReturnType<typeof JSON.parse>>;
|
|
128
155
|
/**
|
|
129
156
|
* Resolves the subscriber's tenant for the broadcast record and runs `callback` inside that tenant
|
|
130
157
|
* context. Broadcast delivery runs in whatever ambient tenant context the publisher left behind. For
|
|
@@ -135,46 +162,38 @@ export default class FrontendModelWebsocketChannel extends VelociousWebsocketCha
|
|
|
135
162
|
* the subscriber's own tenant/ability scope. When no tenant resolves (non-multitenant configs), the
|
|
136
163
|
* callback runs directly so the ambient context is preserved.
|
|
137
164
|
* @template T
|
|
138
|
-
* @param {
|
|
165
|
+
* @param {import("../utils/model-primary-key.js").ModelPrimaryKeyValue} id - Event record id.
|
|
139
166
|
* @param {() => Promise<T>} callback - Authorized-query callback.
|
|
140
167
|
* @returns {Promise<T>} - Callback result.
|
|
141
168
|
*/
|
|
142
|
-
_withEventTenant<T>(id:
|
|
143
|
-
/**
|
|
144
|
-
* Whether the broadcast record is within the subscriber's authenticated ability scope. Used to gate
|
|
145
|
-
* unfiltered/unprojected create/update delivery so a scoped token never receives a record it cannot read.
|
|
146
|
-
* @param {string | number} id - Event record id.
|
|
147
|
-
* @param {typeof import("../frontend-model-controller.js").default} FrontendModelController - Server-side frontend-model controller class.
|
|
148
|
-
* @returns {Promise<boolean>} True when the record is readable by this subscription.
|
|
149
|
-
*/
|
|
150
|
-
_eventIsAccessible(id: string | number, FrontendModelController: typeof import("../frontend-model-controller.js").default): Promise<boolean>;
|
|
169
|
+
_withEventTenant<T>(id: import("../utils/model-primary-key.js").ModelPrimaryKeyValue, callback: () => Promise<T>): Promise<T>;
|
|
151
170
|
/**
|
|
152
171
|
* Runs matched event filter keys for event id.
|
|
153
|
-
* @param {
|
|
172
|
+
* @param {import("../utils/model-primary-key.js").ModelPrimaryKeyValue} id - Event record id.
|
|
154
173
|
* @param {typeof import("../frontend-model-controller.js").default} FrontendModelController - Server-side frontend-model controller class.
|
|
155
174
|
* @returns {Promise<string[]>} - Event filter keys matched by the record.
|
|
156
175
|
*/
|
|
157
|
-
_matchedEventFilterKeysForEventId(id:
|
|
176
|
+
_matchedEventFilterKeysForEventId(id: import("../utils/model-primary-key.js").ModelPrimaryKeyValue, FrontendModelController: typeof import("../frontend-model-controller.js").default): Promise<string[]>;
|
|
158
177
|
/**
|
|
159
178
|
* Runs event matches filter.
|
|
160
179
|
* @param {object} args - Filter args.
|
|
161
180
|
* @param {typeof import("../frontend-model-controller.js").default} args.FrontendModelController - Server-side frontend-model controller class.
|
|
162
181
|
* @param {import("./query.js").FrontendModelEventFilterPayloadEntry} args.eventFilter - Event filter payload.
|
|
163
|
-
* @param {
|
|
182
|
+
* @param {import("../utils/model-primary-key.js").ModelPrimaryKeyValue} args.id - Event record id.
|
|
164
183
|
* @returns {Promise<boolean>} Whether the record matches the filter.
|
|
165
184
|
*/
|
|
166
185
|
_eventMatchesFilter({ FrontendModelController, eventFilter, id }: {
|
|
167
186
|
FrontendModelController: typeof import("../frontend-model-controller.js").default;
|
|
168
187
|
eventFilter: import("./query.js").FrontendModelEventFilterPayloadEntry;
|
|
169
|
-
id:
|
|
188
|
+
id: import("../utils/model-primary-key.js").ModelPrimaryKeyValue;
|
|
170
189
|
}): Promise<boolean>;
|
|
171
190
|
/**
|
|
172
191
|
* Runs projected record for event id.
|
|
173
|
-
* @param {
|
|
192
|
+
* @param {import("../utils/model-primary-key.js").ModelPrimaryKeyValue} id - Event record id.
|
|
174
193
|
* @param {typeof import("../frontend-model-controller.js").default} FrontendModelController - Server-side frontend-model controller class.
|
|
175
194
|
* @returns {Promise<Record<string, import("./query.js").FrontendModelTransportValue> | null>} - Serialized projected record.
|
|
176
195
|
*/
|
|
177
|
-
_projectedRecordForEventId(id:
|
|
196
|
+
_projectedRecordForEventId(id: import("../utils/model-primary-key.js").ModelPrimaryKeyValue, FrontendModelController: typeof import("../frontend-model-controller.js").default): Promise<Record<string, import("./query.js").FrontendModelTransportValue> | null>;
|
|
178
197
|
/**
|
|
179
198
|
* Minimal Request-like stub used only for ability resolution. Avoids
|
|
180
199
|
* importing `WebsocketRequest` here because its `node:querystring`
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"websocket-channel.d.ts","sourceRoot":"","sources":["../../../src/frontend-models/websocket-channel.js"],"names":[],"mappings":"AAEA,OAAO,yBAAyB,MAAM,qCAAqC,CAAA;
|
|
1
|
+
{"version":3,"file":"websocket-channel.d.ts","sourceRoot":"","sources":["../../../src/frontend-models/websocket-channel.js"],"names":[],"mappings":"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"}
|