sonamu 0.10.12 → 0.10.13
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/dist/ai/agents/agent.d.ts +1 -1
- package/dist/ai/agents/agent.d.ts.map +1 -1
- package/dist/ai/agents/agent.js +5 -6
- package/dist/ai/agents/types.d.ts +1 -1
- package/dist/ai/agents/types.d.ts.map +1 -1
- package/dist/ai/providers/rtzr/api.js +18 -18
- package/dist/ai/providers/rtzr/error.d.ts.map +1 -1
- package/dist/ai/providers/rtzr/error.js +17 -15
- package/dist/ai/providers/rtzr/model.d.ts.map +1 -1
- package/dist/ai/providers/rtzr/model.js +3 -2
- package/dist/ai/providers/rtzr/options.d.ts.map +1 -1
- package/dist/ai/providers/rtzr/options.js +16 -16
- package/dist/ai/providers/rtzr/provider.d.ts.map +1 -1
- package/dist/ai/providers/rtzr/provider.js +9 -9
- package/dist/ai/providers/rtzr/utils.d.ts.map +1 -1
- package/dist/ai/providers/rtzr/utils.js +1 -1
- package/dist/api/caster.d.ts.map +1 -1
- package/dist/api/caster.js +17 -17
- package/dist/api/code-converters.d.ts +4 -2
- package/dist/api/code-converters.d.ts.map +1 -1
- package/dist/api/code-converters.js +100 -19
- package/dist/api/config.d.ts +16 -1
- package/dist/api/config.d.ts.map +1 -1
- package/dist/api/config.js +28 -21
- package/dist/api/context.d.ts +2 -2
- package/dist/api/context.d.ts.map +1 -1
- package/dist/api/context.js +1 -1
- package/dist/api/decorators.d.ts.map +1 -1
- package/dist/api/decorators.js +18 -11
- package/dist/api/http-validator.d.ts +36 -0
- package/dist/api/http-validator.d.ts.map +1 -0
- package/dist/api/http-validator.js +72 -0
- package/dist/api/index.js +6 -4
- package/dist/api/sonamu.d.ts +59 -20
- package/dist/api/sonamu.d.ts.map +1 -1
- package/dist/api/sonamu.js +250 -106
- package/dist/api/websocket-helpers.d.ts +7 -5
- package/dist/api/websocket-helpers.d.ts.map +1 -1
- package/dist/api/websocket-helpers.js +6 -6
- package/dist/auth/audit-log/builders.d.ts.map +1 -1
- package/dist/auth/audit-log/builders.js +1 -1
- package/dist/auth/audit-log/client-ip.d.ts +1 -1
- package/dist/auth/audit-log/client-ip.d.ts.map +1 -1
- package/dist/auth/audit-log/client-ip.js +4 -2
- package/dist/auth/audit-log/events.d.ts +5 -1
- package/dist/auth/audit-log/events.d.ts.map +1 -1
- package/dist/auth/audit-log/events.js +1 -1
- package/dist/auth/audit-log/plugin.d.ts +0 -8
- package/dist/auth/audit-log/plugin.d.ts.map +1 -1
- package/dist/auth/audit-log/plugin.js +48 -52
- package/dist/auth/audit-log-ingestor.d.ts.map +1 -1
- package/dist/auth/audit-log-ingestor.js +16 -12
- package/dist/auth/auth-generator.d.ts.map +1 -1
- package/dist/auth/auth-generator.js +1 -1
- package/dist/auth/better-auth-request.d.ts.map +1 -1
- package/dist/auth/better-auth-request.js +6 -5
- package/dist/auth/knex-adapter.js +1 -1
- package/dist/auth/plugins/entity-definitions/index.d.ts +13 -1
- package/dist/auth/plugins/entity-definitions/index.d.ts.map +1 -1
- package/dist/auth/plugins/entity-definitions/index.js +1 -1
- package/dist/auth/plugins/wrappers/admin.d.ts +1 -1
- package/dist/bin/build-config.d.ts +25 -0
- package/dist/bin/build-config.d.ts.map +1 -1
- package/dist/bin/build-config.js +105 -2
- package/dist/bin/cli.js +131 -27
- package/dist/bin/compiler-policy.d.ts +3 -0
- package/dist/bin/compiler-policy.d.ts.map +1 -0
- package/dist/bin/compiler-policy.js +24 -0
- package/dist/bin/fixture.d.ts.map +1 -1
- package/dist/bin/fixture.js +5 -3
- package/dist/bin/test-command.d.ts +22 -1
- package/dist/bin/test-command.d.ts.map +1 -1
- package/dist/bin/test-command.js +18 -10
- package/dist/bin/ts-loader-registration.d.ts +7 -1
- package/dist/bin/ts-loader-registration.d.ts.map +1 -1
- package/dist/bin/ts-loader-registration.js +13 -4
- package/dist/cache/decorator.d.ts.map +1 -1
- package/dist/cache/decorator.js +11 -4
- package/dist/compress/compress.d.ts.map +1 -1
- package/dist/compress/compress.js +1 -1
- package/dist/cone/cone-generator.d.ts +14 -1
- package/dist/cone/cone-generator.d.ts.map +1 -1
- package/dist/cone/cone-generator.js +13 -9
- package/dist/database/_batch_update.js +1 -1
- package/dist/database/base-model.d.ts +22 -10
- package/dist/database/base-model.d.ts.map +1 -1
- package/dist/database/base-model.js +26 -16
- package/dist/database/base-model.types.d.ts +15 -3
- package/dist/database/base-model.types.d.ts.map +1 -1
- package/dist/database/db.d.ts +12 -2
- package/dist/database/db.d.ts.map +1 -1
- package/dist/database/db.js +10 -7
- package/dist/database/knex.d.ts.map +1 -1
- package/dist/database/knex.js +17 -14
- package/dist/database/puri.d.ts +11 -9
- package/dist/database/puri.d.ts.map +1 -1
- package/dist/database/puri.js +93 -79
- package/dist/database/puri.types.d.ts +21 -21
- package/dist/database/puri.types.d.ts.map +1 -1
- package/dist/database/puri.types.js +1 -1
- package/dist/database/upsert-builder.d.ts +12 -10
- package/dist/database/upsert-builder.d.ts.map +1 -1
- package/dist/database/upsert-builder.js +20 -12
- package/dist/dict/sd.d.ts.map +1 -1
- package/dist/dict/sd.js +1 -1
- package/dist/dict/sonamu-dictionary.d.ts.map +1 -1
- package/dist/dict/sonamu-dictionary.js +1 -1
- package/dist/dict/utils.d.ts.map +1 -1
- package/dist/dict/utils.js +7 -2
- package/dist/entity/entity-manager.d.ts +13 -4
- package/dist/entity/entity-manager.d.ts.map +1 -1
- package/dist/entity/entity-manager.js +19 -11
- package/dist/entity/entity-template-cone.d.ts +73 -5
- package/dist/entity/entity-template-cone.d.ts.map +1 -1
- package/dist/entity/entity-template-cone.js +4 -2
- package/dist/entity/entity.d.ts +6 -2
- package/dist/entity/entity.d.ts.map +1 -1
- package/dist/entity/entity.js +30 -28
- package/dist/env.d.ts +3 -1
- package/dist/env.d.ts.map +1 -1
- package/dist/env.js +1 -1
- package/dist/exceptions/error-handler.d.ts.map +1 -1
- package/dist/exceptions/error-handler.js +7 -2
- package/dist/exceptions/so-exceptions.d.ts +24 -20
- package/dist/exceptions/so-exceptions.d.ts.map +1 -1
- package/dist/exceptions/so-exceptions.js +4 -2
- package/dist/filter/utils.d.ts +7 -2
- package/dist/filter/utils.d.ts.map +1 -1
- package/dist/filter/utils.js +8 -6
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +12 -6
- package/dist/logger/configure.d.ts.map +1 -1
- package/dist/logger/configure.js +10 -10
- package/dist/migration/code-generation.d.ts.map +1 -1
- package/dist/migration/code-generation.js +50 -46
- package/dist/migration/index-where-predicate.d.ts.map +1 -1
- package/dist/migration/index-where-predicate.js +22 -8
- package/dist/migration/migration-set.d.ts.map +1 -1
- package/dist/migration/migration-set.js +1 -1
- package/dist/migration/migrator.d.ts +3 -2
- package/dist/migration/migrator.d.ts.map +1 -1
- package/dist/migration/migrator.js +27 -21
- package/dist/migration/postgresql-schema-reader.d.ts.map +1 -1
- package/dist/migration/postgresql-schema-reader.js +51 -36
- package/dist/migration/slack-confirm.d.ts.map +1 -1
- package/dist/migration/slack-confirm.js +1 -1
- package/dist/naite/naite-reporter.js +2 -2
- package/dist/naite/naite.d.ts +74 -15
- package/dist/naite/naite.d.ts.map +1 -1
- package/dist/naite/naite.js +5 -19
- package/dist/runtime-type.d.ts +6 -0
- package/dist/runtime-type.d.ts.map +1 -0
- package/dist/runtime-type.js +26 -0
- package/dist/ssr/hmr-opt-out.d.ts +26 -0
- package/dist/ssr/hmr-opt-out.d.ts.map +1 -0
- package/dist/ssr/hmr-opt-out.js +59 -0
- package/dist/ssr/renderer.d.ts.map +1 -1
- package/dist/ssr/renderer.js +4 -1
- package/dist/storage/base-file.js +14 -14
- package/dist/storage/buffered-file.d.ts +2 -2
- package/dist/storage/buffered-file.d.ts.map +1 -1
- package/dist/storage/buffered-file.js +12 -12
- package/dist/storage/s3-driver.d.ts.map +1 -1
- package/dist/storage/s3-driver.js +1 -1
- package/dist/storage/uploaded-file.d.ts +2 -2
- package/dist/storage/uploaded-file.d.ts.map +1 -1
- package/dist/storage/uploaded-file.js +8 -8
- package/dist/stream/sse.js +11 -11
- package/dist/stream/ws-core.d.ts +1 -1
- package/dist/stream/ws-core.d.ts.map +1 -1
- package/dist/stream/ws-delivery.d.ts +1 -1
- package/dist/stream/ws-delivery.d.ts.map +1 -1
- package/dist/stream/ws-delivery.js +6 -4
- package/dist/stream/ws-local-connection-store.d.ts.map +1 -1
- package/dist/stream/ws-local-connection-store.js +4 -2
- package/dist/stream/ws-presence-store.js +1 -1
- package/dist/stream/ws-registry.d.ts +4 -4
- package/dist/stream/ws-registry.d.ts.map +1 -1
- package/dist/stream/ws-registry.js +4 -2
- package/dist/stream/ws-telemetry.d.ts +16 -12
- package/dist/stream/ws-telemetry.d.ts.map +1 -1
- package/dist/stream/ws-telemetry.js +22 -18
- package/dist/stream/ws.d.ts +18 -12
- package/dist/stream/ws.d.ts.map +1 -1
- package/dist/stream/ws.js +26 -22
- package/dist/syncer/api-parser.js +1 -1
- package/dist/syncer/checksum.d.ts.map +1 -1
- package/dist/syncer/checksum.js +7 -8
- package/dist/syncer/code-generator.d.ts.map +1 -1
- package/dist/syncer/code-generator.js +13 -14
- package/dist/syncer/entity-operations.d.ts.map +1 -1
- package/dist/syncer/entity-operations.js +5 -6
- package/dist/syncer/file-copy.d.ts +5 -0
- package/dist/syncer/file-copy.d.ts.map +1 -0
- package/dist/syncer/file-copy.js +36 -0
- package/dist/syncer/file-patterns.d.ts +1 -0
- package/dist/syncer/file-patterns.d.ts.map +1 -1
- package/dist/syncer/file-patterns.js +5 -2
- package/dist/syncer/file-tracking.d.ts.map +1 -1
- package/dist/syncer/file-tracking.js +5 -4
- package/dist/syncer/filesystem-dependencies.d.ts +15 -0
- package/dist/syncer/filesystem-dependencies.d.ts.map +1 -0
- package/dist/syncer/filesystem-dependencies.js +53 -0
- package/dist/syncer/module-loader.d.ts +1 -1
- package/dist/syncer/module-loader.d.ts.map +1 -1
- package/dist/syncer/module-loader.js +6 -4
- package/dist/syncer/syncer-actions.d.ts +4 -0
- package/dist/syncer/syncer-actions.d.ts.map +1 -1
- package/dist/syncer/syncer-actions.js +34 -17
- package/dist/syncer/syncer.d.ts +17 -6
- package/dist/syncer/syncer.d.ts.map +1 -1
- package/dist/syncer/syncer.js +71 -29
- package/dist/syncer/watcher.d.ts.map +1 -1
- package/dist/syncer/watcher.js +3 -3
- package/dist/tasks/decorator.d.ts +6 -6
- package/dist/tasks/decorator.d.ts.map +1 -1
- package/dist/tasks/decorator.js +4 -4
- package/dist/tasks/step-wrapper.d.ts +6 -4
- package/dist/tasks/step-wrapper.d.ts.map +1 -1
- package/dist/tasks/step-wrapper.js +5 -5
- package/dist/tasks/workflow-manager.d.ts.map +1 -1
- package/dist/tasks/workflow-manager.js +13 -7
- package/dist/template/entity-converter.d.ts +1 -1
- package/dist/template/entity-converter.d.ts.map +1 -1
- package/dist/template/entity-converter.js +2 -2
- package/dist/template/helpers.d.ts +8 -6
- package/dist/template/helpers.d.ts.map +1 -1
- package/dist/template/helpers.js +1 -1
- package/dist/template/implementations/generated.template.d.ts.map +1 -1
- package/dist/template/implementations/generated.template.js +4 -4
- package/dist/template/implementations/generated_http.template.d.ts +7 -4
- package/dist/template/implementations/generated_http.template.d.ts.map +1 -1
- package/dist/template/implementations/generated_http.template.js +21 -21
- package/dist/template/implementations/generated_sso.template.d.ts.map +1 -1
- package/dist/template/implementations/generated_sso.template.js +6 -3
- package/dist/template/implementations/http_validators.template.d.ts +18 -0
- package/dist/template/implementations/http_validators.template.d.ts.map +1 -0
- package/dist/template/implementations/http_validators.template.js +127 -0
- package/dist/template/implementations/model.template.d.ts.map +1 -1
- package/dist/template/implementations/model.template.js +1 -1
- package/dist/template/implementations/queries.template.js +1 -1
- package/dist/template/implementations/sd.template.d.ts.map +1 -1
- package/dist/template/implementations/sd.template.js +79 -39
- package/dist/template/implementations/services.template.d.ts.map +1 -1
- package/dist/template/implementations/services.template.js +6 -4
- package/dist/template/implementations/view_form.template.d.ts +6 -1
- package/dist/template/implementations/view_form.template.d.ts.map +1 -1
- package/dist/template/implementations/view_form.template.js +23 -15
- package/dist/template/implementations/view_list.template.d.ts.map +1 -1
- package/dist/template/implementations/view_list.template.js +11 -6
- package/dist/template/template-manager.d.ts.map +1 -1
- package/dist/template/template-manager.js +9 -7
- package/dist/template/template-types.d.ts +12 -5
- package/dist/template/template-types.d.ts.map +1 -1
- package/dist/template/template-types.js +1 -1
- package/dist/template/template.d.ts +2 -2
- package/dist/template/template.d.ts.map +1 -1
- package/dist/template/template.js +6 -4
- package/dist/template/zod-converter.d.ts +0 -19
- package/dist/template/zod-converter.d.ts.map +1 -1
- package/dist/template/zod-converter.js +100 -84
- package/dist/testing/_relation-graph.d.ts.map +1 -1
- package/dist/testing/_relation-graph.js +2 -1
- package/dist/testing/bootstrap.d.ts.map +1 -1
- package/dist/testing/bootstrap.js +9 -6
- package/dist/testing/data-explorer.d.ts +32 -7
- package/dist/testing/data-explorer.d.ts.map +1 -1
- package/dist/testing/data-explorer.js +77 -31
- package/dist/testing/dev-test-routes.d.ts +8 -1
- package/dist/testing/dev-test-routes.d.ts.map +1 -1
- package/dist/testing/dev-test-routes.js +125 -108
- package/dist/testing/dev-vitest-manager.d.ts +54 -8
- package/dist/testing/dev-vitest-manager.d.ts.map +1 -1
- package/dist/testing/dev-vitest-manager.js +24 -9
- package/dist/testing/faker-mappings.d.ts +412 -1
- package/dist/testing/faker-mappings.d.ts.map +1 -1
- package/dist/testing/faker-mappings.js +1 -1
- package/dist/testing/filesystem.d.ts +2 -0
- package/dist/testing/filesystem.d.ts.map +1 -0
- package/dist/testing/filesystem.js +7 -0
- package/dist/testing/fixture-generator.d.ts +25 -8
- package/dist/testing/fixture-generator.d.ts.map +1 -1
- package/dist/testing/fixture-generator.js +132 -73
- package/dist/testing/fixture-loader.d.ts +3 -1
- package/dist/testing/fixture-loader.d.ts.map +1 -1
- package/dist/testing/fixture-loader.js +1 -20
- package/dist/testing/fixture-manager.d.ts +8 -7
- package/dist/testing/fixture-manager.d.ts.map +1 -1
- package/dist/testing/fixture-manager.js +91 -59
- package/dist/testing/global-setup.d.ts.map +1 -1
- package/dist/testing/global-setup.js +5 -2
- package/dist/testing/index.d.ts +2 -0
- package/dist/testing/index.d.ts.map +1 -1
- package/dist/testing/index.js +6 -3
- package/dist/types/types.d.ts +101 -99
- package/dist/types/types.d.ts.map +1 -1
- package/dist/types/types.js +234 -225
- package/dist/ui/ai-api.d.ts.map +1 -1
- package/dist/ui/ai-api.js +1 -1
- package/dist/ui/ai-client.d.ts.map +1 -1
- package/dist/ui/ai-client.js +28 -18
- package/dist/ui/api.d.ts.map +1 -1
- package/dist/ui/api.js +135 -128
- package/dist/ui/async-route.d.ts +3 -0
- package/dist/ui/async-route.d.ts.map +1 -0
- package/dist/ui/async-route.js +12 -0
- package/dist/ui/cdd-service.d.ts +9 -7
- package/dist/ui/cdd-service.d.ts.map +1 -1
- package/dist/ui/cdd-service.js +7 -5
- package/dist/ui/migrations-api.d.ts.map +1 -1
- package/dist/ui/migrations-api.js +17 -15
- package/dist/ui-web/assets/index-DV1AAq6W.js +178 -0
- package/dist/ui-web/index.html +1 -1
- package/dist/utils/formatter.d.ts.map +1 -1
- package/dist/utils/formatter.js +7 -5
- package/dist/utils/fs-utils.d.ts +3 -3
- package/dist/utils/fs-utils.d.ts.map +1 -1
- package/dist/utils/fs-utils.js +6 -6
- package/dist/utils/model.d.ts +3 -5
- package/dist/utils/model.d.ts.map +1 -1
- package/dist/utils/model.js +1 -1
- package/dist/utils/object-utils.d.ts +1 -1
- package/dist/utils/object-utils.d.ts.map +1 -1
- package/dist/utils/object-utils.js +17 -16
- package/dist/utils/process-utils.d.ts.map +1 -1
- package/dist/utils/process-utils.js +4 -2
- package/dist/utils/runtime-value.d.ts +13 -0
- package/dist/utils/runtime-value.d.ts.map +1 -0
- package/dist/utils/runtime-value.js +40 -0
- package/dist/utils/sql-parser.d.ts +8 -1
- package/dist/utils/sql-parser.d.ts.map +1 -1
- package/dist/utils/sql-parser.js +6 -3
- package/dist/utils/type-utils.d.ts.map +1 -1
- package/dist/utils/type-utils.js +10 -8
- package/dist/utils/utils.d.ts +2 -2
- package/dist/utils/utils.d.ts.map +1 -1
- package/dist/utils/utils.js +11 -8
- package/dist/utils/zod-error.d.ts.map +1 -1
- package/dist/utils/zod-error.js +7 -4
- package/dist/vector/chunking.d.ts.map +1 -1
- package/dist/vector/chunking.js +1 -1
- package/dist/vector/embedding.d.ts.map +1 -1
- package/dist/vector/embedding.js +1 -1
- package/dist/vector/types.d.ts +3 -2
- package/dist/vector/types.d.ts.map +1 -1
- package/package.json +5 -3
- package/src/ai/agents/agent.ts +5 -5
- package/src/ai/agents/types.ts +1 -1
- package/src/ai/providers/rtzr/__tests__/model.test.ts +2 -2
- package/src/ai/providers/rtzr/error.ts +5 -3
- package/src/ai/providers/rtzr/model.ts +3 -2
- package/src/ai/providers/rtzr/options.ts +10 -5
- package/src/ai/providers/rtzr/provider.ts +10 -10
- package/src/ai/providers/rtzr/utils.ts +3 -1
- package/src/api/__tests__/config.test.ts +11 -21
- package/src/api/__tests__/sonamu.http-validator.test.ts +512 -0
- package/src/api/__tests__/sonamu.websocket.test.ts +51 -41
- package/src/api/__tests__/zod-compiler-policy.test.ts +95 -0
- package/src/api/caster.ts +6 -8
- package/src/api/code-converters.ts +136 -36
- package/src/api/config.ts +62 -4
- package/src/api/context.ts +3 -3
- package/src/api/decorators.ts +28 -17
- package/src/api/http-validator.ts +149 -0
- package/src/api/sonamu.ts +459 -152
- package/src/api/websocket-helpers.ts +24 -17
- package/src/auth/audit-log/builders.ts +3 -2
- package/src/auth/audit-log/client-ip.ts +4 -2
- package/src/auth/audit-log/events.ts +15 -1
- package/src/auth/audit-log/plugin.ts +129 -200
- package/src/auth/audit-log-ingestor.ts +19 -15
- package/src/auth/auth-generator.ts +10 -5
- package/src/auth/better-auth-request.ts +4 -3
- package/src/auth/knex-adapter.ts +8 -2
- package/src/auth/plugins/entity-definitions/index.ts +6 -5
- package/src/bin/__tests__/http-validator-benchmark.test.ts +94 -0
- package/src/bin/__tests__/test-command.test.ts +9 -15
- package/src/bin/__tests__/ts-loader-register.test.ts +15 -17
- package/src/bin/__tests__/zod-compiler-build.test.ts +307 -0
- package/src/bin/build-config.ts +167 -0
- package/src/bin/cli.ts +153 -36
- package/src/bin/compiler-policy.ts +35 -0
- package/src/bin/fixture.ts +14 -3
- package/src/bin/test-command.ts +74 -29
- package/src/bin/ts-loader-registration.ts +22 -4
- package/src/cache/decorator.ts +10 -3
- package/src/compress/compress.ts +17 -4
- package/src/cone/cone-generator.ts +34 -6
- package/src/database/__tests__/db.test.ts +1 -0
- package/src/database/__tests__/puri.test.ts +16 -15
- package/src/database/__tests__/transaction-scope.test.ts +5 -0
- package/src/database/_batch_update.ts +1 -0
- package/src/database/base-model.ts +81 -50
- package/src/database/base-model.types.ts +6 -6
- package/src/database/db.ts +29 -19
- package/src/database/knex.ts +30 -17
- package/src/database/puri-subset.test-d.ts +17 -0
- package/src/database/puri.ts +181 -143
- package/src/database/puri.types.test-d.ts +31 -1
- package/src/database/puri.types.ts +23 -21
- package/src/database/upsert-builder.ts +75 -53
- package/src/dict/sd.ts +15 -5
- package/src/dict/sonamu-dictionary.ts +6 -6
- package/src/dict/utils.ts +9 -1
- package/src/entity/entity-manager.ts +26 -9
- package/src/entity/entity-template-cone.ts +5 -10
- package/src/entity/entity.ts +50 -34
- package/src/env.ts +7 -3
- package/src/exceptions/error-handler.ts +17 -2
- package/src/exceptions/so-exceptions.ts +26 -20
- package/src/filter/utils.ts +21 -11
- package/src/index.ts +3 -0
- package/src/logger/configure.ts +26 -18
- package/src/migration/__tests__/migrator.test.ts +50 -57
- package/src/migration/code-generation.ts +132 -104
- package/src/migration/index-where-predicate.ts +51 -24
- package/src/migration/migration-set.ts +11 -5
- package/src/migration/migrator.ts +68 -41
- package/src/migration/postgresql-schema-reader.ts +52 -47
- package/src/migration/slack-confirm.ts +17 -15
- package/src/naite/naite-reporter.ts +1 -1
- package/src/naite/naite.ts +97 -24
- package/src/runtime-type.ts +34 -0
- package/src/ssr/hmr-opt-out.ts +78 -0
- package/src/ssr/renderer.ts +6 -0
- package/src/storage/base-file.ts +13 -13
- package/src/storage/buffered-file.ts +11 -11
- package/src/storage/s3-driver.ts +4 -1
- package/src/storage/uploaded-file.ts +8 -8
- package/src/stream/__tests__/ws-contracts.test.ts +4 -2
- package/src/stream/__tests__/ws-telemetry.test.ts +1 -1
- package/src/stream/__tests__/ws.test.ts +30 -6
- package/src/stream/sse.ts +12 -11
- package/src/stream/ws-core.ts +1 -1
- package/src/stream/ws-delivery.ts +16 -7
- package/src/stream/ws-local-connection-store.ts +2 -3
- package/src/stream/ws-presence-store.ts +6 -1
- package/src/stream/ws-registry.ts +16 -7
- package/src/stream/ws-telemetry.ts +66 -43
- package/src/stream/ws.ts +73 -39
- package/src/syncer/__tests__/api-parser.websocket-type-ref.test.ts +3 -2
- package/src/syncer/__tests__/http-validator-registry.test.ts +137 -0
- package/src/syncer/api-parser.ts +67 -27
- package/src/syncer/checksum.ts +17 -11
- package/src/syncer/code-generator.ts +25 -17
- package/src/syncer/entity-operations.ts +3 -5
- package/src/syncer/file-copy.ts +46 -0
- package/src/syncer/file-patterns.ts +11 -8
- package/src/syncer/file-tracking.ts +3 -4
- package/src/syncer/filesystem-dependencies.ts +73 -0
- package/src/syncer/module-loader.ts +8 -4
- package/src/syncer/syncer-actions.ts +56 -18
- package/src/syncer/syncer.ts +116 -43
- package/src/syncer/watcher.ts +8 -4
- package/src/tasks/decorator.ts +20 -12
- package/src/tasks/step-wrapper.ts +19 -9
- package/src/tasks/workflow-manager.ts +15 -9
- package/src/template/__tests__/http_validators.template.test.ts +160 -0
- package/src/template/__tests__/services.template.mutation.test.ts +24 -23
- package/src/template/__tests__/services.template.websocket.test.ts +21 -25
- package/src/template/entity-converter.ts +5 -2
- package/src/template/helpers.ts +8 -9
- package/src/template/implementations/generated.template.ts +5 -4
- package/src/template/implementations/generated_http.template.ts +61 -15
- package/src/template/implementations/generated_sso.template.ts +15 -4
- package/src/template/implementations/http_validators.template.ts +175 -0
- package/src/template/implementations/model.template.ts +3 -1
- package/src/template/implementations/sd.template.ts +81 -41
- package/src/template/implementations/services.template.ts +2 -2
- package/src/template/implementations/view_form.template.ts +56 -39
- package/src/template/implementations/view_list.template.ts +31 -23
- package/src/template/template-manager.ts +15 -13
- package/src/template/template-types.ts +13 -5
- package/src/template/template.ts +4 -3
- package/src/template/zod-converter.ts +206 -91
- package/src/testing/__tests__/dev-test-routes.test.ts +85 -25
- package/src/testing/__tests__/dev-vitest-manager.test.ts +15 -15
- package/src/testing/_relation-graph.ts +4 -1
- package/src/testing/bootstrap.ts +12 -5
- package/src/testing/data-explorer.ts +102 -53
- package/src/testing/dev-test-routes.ts +87 -50
- package/src/testing/dev-vitest-manager.ts +88 -32
- package/src/testing/faker-mappings.ts +2 -2
- package/src/testing/filesystem.ts +1 -0
- package/src/testing/fixture-generator.ts +191 -131
- package/src/testing/fixture-loader.ts +5 -1
- package/src/testing/fixture-manager.ts +129 -90
- package/src/testing/global-setup.ts +7 -3
- package/src/testing/index.ts +5 -0
- package/src/types/__tests__/entity-json-schema-search-text.test.ts +9 -3
- package/src/types/types.ts +184 -158
- package/src/ui/ai-api.ts +9 -7
- package/src/ui/ai-client.ts +61 -56
- package/src/ui/api.ts +727 -616
- package/src/ui/async-route.ts +4 -0
- package/src/ui/cdd-service.ts +35 -12
- package/src/ui/migrations-api.ts +63 -51
- package/src/utils/formatter.ts +7 -3
- package/src/utils/fs-utils.ts +5 -5
- package/src/utils/model.ts +4 -5
- package/src/utils/object-utils.ts +32 -22
- package/src/utils/process-utils.ts +4 -1
- package/src/utils/runtime-value.ts +43 -0
- package/src/utils/sql-parser.ts +13 -6
- package/src/utils/type-utils.ts +9 -7
- package/src/utils/utils.ts +19 -21
- package/src/utils/zod-error.ts +4 -2
- package/src/vector/chunking.ts +6 -1
- package/src/vector/embedding.ts +2 -1
- package/src/vector/types.ts +4 -2
- package/tsdown.api.config.ts +5 -2
- package/dist/ui-web/assets/index-C0m1pk6K.js +0 -177
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { __esmMin, __toCommonJS } from "../_virtual/_rolldown/runtime.js";
|
|
2
|
+
import { init_runtime_value, isObjectValue } from "../utils/runtime-value.js";
|
|
2
3
|
import { api_exports, init_api } from "../api/index.js";
|
|
3
4
|
import * as path$1 from "node:path";
|
|
4
5
|
import * as fs$1 from "node:fs";
|
|
@@ -9,9 +10,9 @@ import * as fs$1 from "node:fs";
|
|
|
9
10
|
* @param context - Entity 정보와 생성 옵션
|
|
10
11
|
* @returns 생성된 cone 메타데이터
|
|
11
12
|
*/
|
|
12
|
-
async function generateCones(context) {
|
|
13
|
+
async function generateCones(context, dependencies = {}) {
|
|
13
14
|
const apiKey = getApiKey();
|
|
14
|
-
const { text: responseText, tokensUsed } = await callAnthropicAPI(buildPrompt(context), apiKey);
|
|
15
|
+
const { text: responseText, tokensUsed } = await callAnthropicAPI(buildPrompt(context), apiKey, dependencies.generateText);
|
|
15
16
|
const result = parseConeResponse(responseText);
|
|
16
17
|
result.tokensUsed = tokensUsed;
|
|
17
18
|
if (context.existingCones) {
|
|
@@ -195,11 +196,12 @@ IMPORTANT: Return pure JSON only. Do NOT wrap in markdown code blocks.`;
|
|
|
195
196
|
* @param apiKey - Anthropic API 키
|
|
196
197
|
* @returns LLM 응답 텍스트 및 토큰 사용량
|
|
197
198
|
*/
|
|
198
|
-
async function callAnthropicAPI(prompt, apiKey) {
|
|
199
|
+
async function callAnthropicAPI(prompt, apiKey, injectedGenerateText) {
|
|
199
200
|
try {
|
|
200
201
|
const { createAnthropic } = await import("@ai-sdk/anthropic");
|
|
201
|
-
const {
|
|
202
|
-
|
|
202
|
+
const { text, usage } = await (injectedGenerateText ?? (async (request) => {
|
|
203
|
+
return (await import("ai")).generateText(request);
|
|
204
|
+
}))({
|
|
203
205
|
model: createAnthropic({ apiKey })("claude-sonnet-4-6"),
|
|
204
206
|
prompt
|
|
205
207
|
});
|
|
@@ -210,7 +212,7 @@ async function callAnthropicAPI(prompt, apiKey) {
|
|
|
210
212
|
tokensUsed
|
|
211
213
|
};
|
|
212
214
|
} catch (error) {
|
|
213
|
-
if (error &&
|
|
215
|
+
if (error && isObjectValue(error) && "statusCode" in error) {
|
|
214
216
|
if (error.statusCode === 429) throw new Error("Rate limit exceeded. Please try again later.", { cause: error });
|
|
215
217
|
}
|
|
216
218
|
const message = error instanceof Error ? error.message : "Unknown error";
|
|
@@ -229,7 +231,7 @@ function parseConeResponse(text) {
|
|
|
229
231
|
jsonText = jsonText.trim();
|
|
230
232
|
try {
|
|
231
233
|
const parsed = JSON.parse(jsonText);
|
|
232
|
-
if (!parsed.propCones ||
|
|
234
|
+
if (!parsed.propCones || !isObjectValue(parsed.propCones)) throw new Error("Invalid response: propCones is required and must be an object");
|
|
233
235
|
return {
|
|
234
236
|
entityCone: parsed.entityCone,
|
|
235
237
|
propCones: parsed.propCones,
|
|
@@ -289,7 +291,9 @@ function mergeOnlyEmpty(generated, existing) {
|
|
|
289
291
|
return result;
|
|
290
292
|
}
|
|
291
293
|
//#endregion
|
|
292
|
-
__esmMin((() => {
|
|
294
|
+
__esmMin((() => {
|
|
295
|
+
init_runtime_value();
|
|
296
|
+
}))();
|
|
293
297
|
export { generateCones };
|
|
294
298
|
|
|
295
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZS1nZW5lcmF0b3IuanMiLCJuYW1lcyI6WyJwYXRoIiwiZnMiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvY29uZS9jb25lLWdlbmVyYXRvci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBmcyBmcm9tIFwibm9kZTpmc1wiO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tIFwibm9kZTpwYXRoXCI7XG5cbmltcG9ydCB7IHR5cGUgQ29uZSwgdHlwZSBFbnRpdHlKc29uIH0gZnJvbSBcIi4uL3R5cGVzL3R5cGVzXCI7XG5cbi8qKlxuICogQ29uZSDsg53shLEg7Luo7YWN7Iqk7Yq4XG4gKlxuICogRW50aXR5IOygleuztOyZgCDsg53shLEg7Ji17IWY7J2EIOuLtOqzoCDsnojsirXri4jri6QuXG4gKi9cbmV4cG9ydCB0eXBlIENvbmVHZW5lcmF0aW9uQ29udGV4dCA9IHtcbiAgZW50aXR5OiBFbnRpdHlKc29uO1xuICBsb2NhbGU/OiBcImtvXCIgfCBcImVuXCIgfCBcImphXCI7XG4gIGV4aXN0aW5nQ29uZXM/OiBSZWNvcmQ8c3RyaW5nLCBDb25lPjtcbiAgLyoqIHRydWXsnbgg6rK97JqwIG5vdGXqsIAg7JeG64qUIGNvbmXrp4wg7IOd7ISxICovXG4gIG9ubHlFbXB0eT86IGJvb2xlYW47XG59O1xuXG4vKipcbiAqIENvbmUg7IOd7ISxIOqysOqzvFxuICpcbiAqIEVudGl0eSwgUHJvcHMsIFN1YnNldHMsIEVudW1z7J2YIGNvbmUg66mU7YOA642w7J207YSw66W8IOuLtOqzoCDsnojsirXri4jri6QuXG4gKi9cbmV4cG9ydCB0eXBlIENvbmVHZW5lcmF0aW9uUmVzdWx0ID0ge1xuICBlbnRpdHlDb25lPzogQ29uZTtcbiAgcHJvcENvbmVzOiBSZWNvcmQ8c3RyaW5nLCBDb25lPjtcbiAgc3Vic2V0Q29uZXM6IFJlY29yZDxzdHJpbmcsIENvbmU+O1xuICBlbnVtQ29uZXM6IFJlY29yZDxzdHJpbmcsIENvbmU+O1xuICB0b2tlbnNVc2VkOiBudW1iZXI7XG59O1xuXG4vKipcbiAqIExMTeydhCDsgqzsmqntlZjsl6wgRW50aXR57J2YIGNvbmUg66mU7YOA642w7J207YSw66W8IOyDneyEse2VqeuLiOuLpC5cbiAqXG4gKiBAcGFyYW0gY29udGV4dCAtIEVudGl0eSDsoJXrs7TsmYAg7IOd7ISxIOyYteyFmFxuICogQHJldHVybnMg7IOd7ISx65CcIGNvbmUg66mU7YOA642w7J207YSwXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZW5lcmF0ZUNvbmVzKGNvbnRleHQ6IENvbmVHZW5lcmF0aW9uQ29udGV4dCk6IFByb21pc2U8Q29uZUdlbmVyYXRpb25SZXN1bHQ+IHtcbiAgY29uc3QgYXBpS2V5ID0gZ2V0QXBpS2V5KCk7XG4gIGNvbnN0IHByb21wdCA9IGJ1aWxkUHJvbXB0KGNvbnRleHQpO1xuICBjb25zdCB7IHRleHQ6IHJlc3BvbnNlVGV4dCwgdG9rZW5zVXNlZCB9ID0gYXdhaXQgY2FsbEFudGhyb3BpY0FQSShwcm9tcHQsIGFwaUtleSk7XG4gIGNvbnN0IHJlc3VsdCA9IHBhcnNlQ29uZVJlc3BvbnNlKHJlc3BvbnNlVGV4dCk7XG4gIHJlc3VsdC50b2tlbnNVc2VkID0gdG9rZW5zVXNlZDtcblxuICBpZiAoY29udGV4dC5leGlzdGluZ0NvbmVzKSB7XG4gICAgaWYgKGNvbnRleHQub25seUVtcHR5KSB7XG4gICAgICByZXR1cm4gbWVyZ2VPbmx5RW1wdHkocmVzdWx0LCBjb250ZXh0LmV4aXN0aW5nQ29uZXMpO1xuICAgIH1cbiAgICByZXR1cm4gbWVyZ2VXaXRoRXhpc3RpbmcocmVzdWx0LCBjb250ZXh0LmV4aXN0aW5nQ29uZXMpO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBBUEkg7YKk66W8IOqwgOyguOyYteuLiOuLpC5cbiAqXG4gKiBTb25hbXUuc2VjcmV0IOuYkOuKlCDtmZjqsr3rs4DsiJjsl5DshJwg6rCA7KC47Ji164uI64ukLlxuICovXG5mdW5jdGlvbiBnZXRBcGlLZXkoKTogc3RyaW5nIHtcbiAgLy8gU29uYW11LnNlY3JldOydgCDrn7Dtg4DsnoTsl5Ag66Gc65Oc65CY66+A66GcIOuPmeyggeycvOuhnCBpbXBvcnRcbiAgbGV0IGFwaUtleTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIHRyeSB7XG4gICAgLy8gU29uYW116rCAIOy0iOq4sO2ZlOuQmOyWtCDsnojripQg6rK97JqwXG4gICAgY29uc3QgeyBTb25hbXUgfSA9IHJlcXVpcmUoXCIuLi9hcGlcIik7XG4gICAgYXBpS2V5ID0gU29uYW11LnNlY3JldHM/LmFudGhyb3BpY19hcGlfa2V5O1xuICB9IGNhdGNoIHtcbiAgICAvLyBTb25hbXXqsIAg7LSI6riw7ZmU65CY7KeAIOyViuydgCDqsr3smrAgKO2FjOyKpO2KuCDrk7EpXG4gICAgYXBpS2V5ID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgaWYgKCFhcGlLZXkpIHtcbiAgICBhcGlLZXkgPSBwcm9jZXNzLmVudi5BTlRIUk9QSUNfQVBJX0tFWTtcbiAgfVxuXG4gIGlmICghYXBpS2V5KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgXCJBTlRIUk9QSUNfQVBJX0tFWSBub3QgZm91bmQuIFwiICtcbiAgICAgICAgXCJTZXQgQU5USFJPUElDX0FQSV9LRVkgZW52aXJvbm1lbnQgdmFyaWFibGUgb3IgYWRkIGl0IHRvIHNvbmFtdS5zZWNyZXQudHNcIixcbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIGFwaUtleTtcbn1cblxuLyoqXG4gKiDrj4TrqZTsnbjrs4Qge2RvbWFpbn0uY29udHJhY3QubWTrpbwg7J297Ja0IOy7qO2FjeyKpO2KuOuhnCDrsJjtmZjtlanri4jri6QuXG4gKlxuICogLSBjb250cmFjdC97ZG9tYWlufS97ZG9tYWlufS5jb250cmFjdC5tZDog64+E66mU7J24IOq3nOy5meqzvCDqsrDsoJUg6re86rGwXG4gKlxuICogY29uZSDsg53shLEg7IucIExMTeyXkOqyjCDsoITri6ztlZjsl6wg64+E66mU7J24IOunpeudveyXkCDrp57ripQg66mU7YOA642w7J207YSw66W8IOyDneyEse2VmOuPhOuhnSDtlanri4jri6QuXG4gKi9cbmZ1bmN0aW9uIHJlYWRQcm9qZWN0U2tpbGxzKCk6IHN0cmluZyB7XG4gIHRyeSB7XG4gICAgY29uc3QgeyBTb25hbXUgfSA9IHJlcXVpcmUoXCIuLi9hcGlcIik7XG4gICAgY29uc3QgcHJvamVjdFJvb3QgPSBTb25hbXUuYXBwUm9vdFBhdGg7XG4gICAgY29uc3QgY29udGVudHM6IHN0cmluZ1tdID0gW107XG5cbiAgICAvLyBjb250cmFjdC8qKi8qLmNvbnRyYWN0Lm1kIOyImOynkVxuICAgIGNvbnN0IGNvbnRyYWN0RGlyID0gcGF0aC5qb2luKHByb2plY3RSb290LCBcImNvbnRyYWN0XCIpO1xuICAgIGlmIChmcy5leGlzdHNTeW5jKGNvbnRyYWN0RGlyKSkge1xuICAgICAgY29uc3QgZG9tYWlucyA9IGZzXG4gICAgICAgIC5yZWFkZGlyU3luYyhjb250cmFjdERpciwgeyB3aXRoRmlsZVR5cGVzOiB0cnVlIH0pXG4gICAgICAgIC5maWx0ZXIoKGQpID0+IGQuaXNEaXJlY3RvcnkoKSlcbiAgICAgICAgLm1hcCgoZCkgPT4gZC5uYW1lKTtcblxuICAgICAgZm9yIChjb25zdCBkb21haW4gb2YgZG9tYWlucykge1xuICAgICAgICBjb25zdCBkb21haW5EaXIgPSBwYXRoLmpvaW4oY29udHJhY3REaXIsIGRvbWFpbik7XG4gICAgICAgIGNvbnN0IGNvbnRyYWN0RmlsZXMgPSBmc1xuICAgICAgICAgIC5yZWFkZGlyU3luYyhkb21haW5EaXIpXG4gICAgICAgICAgLmZpbHRlcigoZjogc3RyaW5nKSA9PiBmLmVuZHNXaXRoKFwiLmNvbnRyYWN0Lm1kXCIpKTtcblxuICAgICAgICBmb3IgKGNvbnN0IGZpbGUgb2YgY29udHJhY3RGaWxlcykge1xuICAgICAgICAgIGNvbnN0IGZpbGVQYXRoID0gcGF0aC5qb2luKGRvbWFpbkRpciwgZmlsZSk7XG4gICAgICAgICAgY29uc3QgY29udGVudCA9IGZzLnJlYWRGaWxlU3luYyhmaWxlUGF0aCwgXCJ1dGYtOFwiKS50cmltKCk7XG4gICAgICAgICAgaWYgKGNvbnRlbnQpIHtcbiAgICAgICAgICAgIGNvbnRlbnRzLnB1c2goYC0tLSBjb250cmFjdC8ke2RvbWFpbn0vJHtmaWxlfSAtLS1cXG4ke2NvbnRlbnR9YCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbnRlbnRzLmpvaW4oXCJcXG5cXG5cIik7XG4gIH0gY2F0Y2gge1xuICAgIC8vIFNvbmFtdSDrr7jstIjquLDtmZQg65iQ64qUIO2MjOydvCDsoJHqt7wg7Jik66WYIOyLnCDruYgg66y47J6Q7Je0IOuwmO2ZmFxuICAgIHJldHVybiBcIlwiO1xuICB9XG59XG5cbi8qKlxuICogTExNIO2UhOuhrO2UhO2KuOulvCDsg53shLHtlanri4jri6QuXG4gKlxuICogYWktY2xpZW50LnRzIO2MqO2EtOydhCDssLjqs6DtlZjsl6wg66qF7ZmV7ZWcIOyngOyLnOyCrO2VreqzvCDstpzroKUg7ZiV7Iud7J2EIOygnOqzte2VqeuLiOuLpC5cbiAqL1xuZnVuY3Rpb24gYnVpbGRQcm9tcHQoY29udGV4dDogQ29uZUdlbmVyYXRpb25Db250ZXh0KTogc3RyaW5nIHtcbiAgY29uc3QgbG9jYWxlID0gY29udGV4dC5sb2NhbGUgfHwgXCJrb1wiO1xuICBjb25zdCBsb2NhbGVEZXNjID0ge1xuICAgIGtvOiBcIktvcmVhblwiLFxuICAgIGVuOiBcIkVuZ2xpc2hcIixcbiAgICBqYTogXCJKYXBhbmVzZVwiLFxuICB9W2xvY2FsZV07XG5cbiAgY29uc3QgcHJvamVjdENvbnRleHQgPSByZWFkUHJvamVjdFNraWxscygpO1xuICBjb25zdCBwcm9qZWN0U2VjdGlvbiA9IHByb2plY3RDb250ZXh0XG4gICAgPyBgXFxuUFJPSkVDVCBDT05URVhUIChidXNpbmVzcyByZXF1aXJlbWVudHMgYW5kIGRvbWFpbiBrbm93bGVkZ2UpOlxcbiR7cHJvamVjdENvbnRleHR9XFxuXFxuVXNlIHRoZSBhYm92ZSBwcm9qZWN0IGNvbnRleHQgdG8gdW5kZXJzdGFuZCB0aGUgYnVzaW5lc3MgZG9tYWluLCBlbnRpdHkgcHVycG9zZXMsIGZpZWxkIG1lYW5pbmdzLCBhbmQgcmVsYXRpb25zaGlwcy4gR2VuZXJhdGUgY29uZSBtZXRhZGF0YSB0aGF0IHJlZmxlY3RzIHRoaXMgcHJvamVjdCdzIGFjdHVhbCByZXF1aXJlbWVudHMsIG5vdCBnZW5lcmljIGFzc3VtcHRpb25zLlxcbmBcbiAgICA6IFwiXCI7XG5cbiAgcmV0dXJuIGBZb3UgYXJlIGEgU29uYW11IGZyYW1ld29yayBleHBlcnQuIEdlbmVyYXRlIGNvbmUgbWV0YWRhdGEgZm9yIGRhdGFiYXNlIGVudGl0eSBmaXh0dXJlIGdlbmVyYXRpb24uXG5cbkNSSVRJQ0FMIFBSSU9SSVRZIFJVTEU6XG5UaGUgXCJub3RlXCIgZmllbGQgaXMgdGhlIFBSSU1BUlkgc291cmNlIGZvciBmaXh0dXJlIGRhdGEgZ2VuZXJhdGlvbi4gV2hlbiAtLXVzZS1sbG0gaXMgZW5hYmxlZCwgdGhlIGZpeHR1cmUgZ2VuZXJhdG9yIHJlYWRzIGNvbmUubm90ZSBhbmQgYXNrcyBMTE0gdG8gZ2VuZXJhdGUgY29udGV4dHVhbGx5IGFwcHJvcHJpYXRlIGRhdGEgQkVGT1JFIGZhbGxpbmcgYmFjayB0byBmaXh0dXJlR2VuZXJhdG9yLlxuVGhlcmVmb3JlLCBjb25lLm5vdGUgbXVzdCBhbHdheXMgY29udGFpbiByaWNoLCBkb21haW4tc3BlY2lmaWMgZGVzY3JpcHRpb25zIHdpdGggY29uY3JldGUgZXhhbXBsZXMgYW5kIHZhbHVlIHJhbmdlcy5cbmZpeHR1cmVHZW5lcmF0b3IgaXMgb25seSBhIEZBTExCQUNLIGZvciB3aGVuIExMTSBpcyB1bmF2YWlsYWJsZSAobm8gQVBJIGtleSkuIFdyaXRlIGl0IGFzIGEgYmVzdC1lZmZvcnQgYXBwcm94aW1hdGlvbiwgYnV0IG5ldmVyIHJlbHkgb24gaXQgYXMgdGhlIHByaW1hcnkgZ2VuZXJhdGlvbiBtZXRob2QuXG4ke3Byb2plY3RTZWN0aW9ufVxuRU5USVRZIFNUUlVDVFVSRTpcbiR7SlNPTi5zdHJpbmdpZnkoY29udGV4dC5lbnRpdHksIG51bGwsIDIpfVxuXG5MT0NBTEU6ICR7bG9jYWxlfSAoJHtsb2NhbGVEZXNjfSlcblxuSU5TVFJVQ1RJT05TOlxuMS4gRW50aXR5IGNvbmUgbWV0YWRhdGE6XG4gICAtIG5vdGU6IERlc2NyaWJlIHdoYXQgdGhpcyBlbnRpdHkgcmVwcmVzZW50cywgaXRzIHB1cnBvc2UsIHJlbGF0aW9uc2hpcHMsIGJ1c2luZXNzIGNvbnRleHQsIGFuZCBvdmVyYWxsIGd1aWRhbmNlIGZvciBnZW5lcmF0aW5nIHRlc3QgZGF0YS4gQ29tYmluZSBhbGwgcmVsZXZhbnQgaW5mb3JtYXRpb24gaW50byBvbmUgY29oZXJlbnQgZGVzY3JpcHRpb24uXG4gICAtIHRhZ3M6IFJlbGV2YW50IGNhdGVnb3JpemF0aW9uIHRhZ3NcblxuMi4gRm9yIGVhY2ggcHJvcCwgZ2VuZXJhdGUgYXBwcm9wcmlhdGUgY29uZSBtZXRhZGF0YTpcbiAgIC0gbm90ZSAoTU9TVCBJTVBPUlRBTlQpOiBEZXNjcmliZSB3aGF0IHRoaXMgZmllbGQgcmVwcmVzZW50cyBpbiBidXNpbmVzcyB0ZXJtcywgYW5kIHByb3ZpZGUgZGV0YWlsZWQgZ3VpZGFuY2UgZm9yIHJlYWxpc3RpYyB0ZXN0IGRhdGEgZ2VuZXJhdGlvbi4gSW5jbHVkZSBjb25jcmV0ZSBleGFtcGxlcywgdmFsdWUgcmFuZ2VzLCBmb3JtYXR0aW5nIHJ1bGVzLCBhbmQgZG9tYWluIGNvbnN0cmFpbnRzLiBUaGlzIGlzIHRoZSBwcmltYXJ5IGlucHV0IExMTSB1c2VzIHRvIGdlbmVyYXRlIGZpeHR1cmUgZGF0YS5cbiAgIC0gZml4dHVyZUdlbmVyYXRvcjogZmFrZXIuanMgZXhwcmVzc2lvbiBhcyBGQUxMQkFDSyBvbmx5IChzZWUgcnVsZSA5IGZvciBleGNlcHRpb25zKS4gRm9yIGZyZWUtdGV4dCBmaWVsZHMgd2hlcmUgZmFrZXIgY2Fubm90IHByb2R1Y2UgZG9tYWluLWFwcHJvcHJpYXRlIGNvbnRlbnQgKGRlc2NyaXB0aW9uLCBzdW1tYXJ5LCBub3RlLCByZWFzb24sIHRpdGxlLCBldGMuKSwgcHJlZmVyIHVzaW5nIGZha2VyLmhlbHBlcnMuYXJyYXlFbGVtZW50KFsuLi5dKSB3aXRoIDUtMTAgZG9tYWluLXNwZWNpZmljIGV4YW1wbGUgdmFsdWVzIHJhdGhlciB0aGFuIGZha2VyLmxvcmVtLiouXG5cbjMuIEZpZWxkIHR5cGUg4oaSIGZha2VyLmpzIG1hcHBpbmc6XG4gICAtIGVtYWlsIOKGkiBmYWtlci5pbnRlcm5ldC5lbWFpbCgpXG4gICAtIHBob25lIOKGkiBmYWtlci5waG9uZS5udW1iZXIoKVxuICAgLSBuYW1lL3VzZXJuYW1lIOKGkiBmYWtlci5wZXJzb24uZnVsbE5hbWUoKSAod2l0aCBsb2NhbGUpXG4gICAtIGJpcnRoX2RhdGUg4oaSIGZha2VyLmRhdGUuYmlydGhkYXRlKHsgbWluOiAxOCwgbWF4OiA2NSwgbW9kZTogJ2FnZScgfSlcbiAgIC0gc2FsYXJ5IOKGkiBmYWtlci5udW1iZXIuaW50KHsgbWluOiAzMF8wMDBfMDAwLCBtYXg6IDE1MF8wMDBfMDAwIH0pIGZvciBrbyBsb2NhbGVcbiAgIC0gY29tcGFueV9uYW1lIOKGkiBmYWtlci5jb21wYW55Lm5hbWUoKVxuICAgLSBhZGRyZXNzIOKGkiBmYWtlci5sb2NhdGlvbi5zdHJlZXRBZGRyZXNzKClcblxuNC4gUmVsYXRpb24gZmllbGRzIChCZWxvbmdzVG9PbmUsIE9uZVRvT25lIHdpdGggaGFzSm9pbkNvbHVtbik6XG4gICAtIEFsd2F5cyBhZGQgZGF0YVNvdXJjZTogeyBzdHJhdGVneTogXCJyZWNlbnRcIiwgY29uZmlnOiB7IGxpbWl0OiAzLTUgfSB9XG4gICAtIG5vdGU6IEV4cGxhaW4gd2hhdCB0aGlzIHJlbGF0aW9uIHJlcHJlc2VudHMgYW5kIHRoYXQgaXQgcmVmZXJlbmNlcyBleGlzdGluZyBkYXRhXG5cbjUuIFN1YnNldHMgY29uZSBtZXRhZGF0YSAoSU1QT1JUQU5UIC0gZ2VuZXJhdGUgZm9yIEFMTCBzdWJzZXRzKTpcbiAgIC0gbm90ZTogRGVzY3JpYmUgd2hhdCB0aGlzIHN1YnNldCByZXByZXNlbnRzLCB3aGF0IGZpZWxkcyBpdCBpbmNsdWRlcywgYW5kIHdoZW4gdG8gdXNlIGl0XG5cbjYuIEVudW1zIGNvbmUgbWV0YWRhdGEgKElNUE9SVEFOVCAtIGdlbmVyYXRlIGZvciBBTEwgZW51bXMpOlxuICAgLSBub3RlOiBEZXNjcmliZSB3aGF0IHRoaXMgZW51bSByZXByZXNlbnRzLiBJZiBhbnkgcHJvcCB1c2VzIHRoaXMgZW51bSB0eXBlLCBpbmNsdWRlIHRoZSBzYW1lIGd1aWRhbmNlIGZyb20gdGhhdCBwcm9wJ3Mgbm90ZS5cbiAgIC0gRm9yIGVhY2ggZW51bSB2YWx1ZSwgcHJvdmlkZSBub3RlIGV4cGxhaW5pbmcgd2hhdCB0aGF0IHNwZWNpZmljIHZhbHVlIG1lYW5zXG5cbjcuIEtvcmVhbiBmaWVsZCBuYW1lcyAobG9jYWxlPWtvKTpcbiAgIC0gSW5mZXIgbWVhbmluZyBhbmQgZ2VuZXJhdGUgYXBwcm9wcmlhdGUgZmFrZXJcbiAgIC0gXCLsnbTrpoRcIiDihpIgZmFrZXIucGVyc29uLmZ1bGxOYW1lKClcbiAgIC0gXCLsg53rhYTsm5TsnbxcIiDihpIgZmFrZXIuZGF0ZS5iaXJ0aGRhdGUoKVxuICAgLSBcIuyjvOyGjFwiIOKGkiBmYWtlci5sb2NhdGlvbi5zdHJlZXRBZGRyZXNzKClcblxuOC4gTG9jYWxlLXNwZWNpZmljIHZhbHVlczpcbiAgIC0ga286IEtvcmVhbiBuYW1lcywgYWRkcmVzc2VzLCBwaG9uZSBudW1iZXJzICgwMTAtWFhYWC1YWFhYIGZvcm1hdClcbiAgIC0gZW46IEVuZ2xpc2ggbmFtZXMsIFVTIGFkZHJlc3Nlc1xuICAgLSBqYTogSmFwYW5lc2UgbmFtZXMsIGFkZHJlc3Nlc1xuXG45LiBDb3JyZWxhdGVkIGZpZWxkcyAoSU1QT1JUQU5UIC0gZG8gTk9UIHVzZSBmaXh0dXJlR2VuZXJhdG9yIGZvciB0aGVzZSk6XG4gICBJZiBtdWx0aXBsZSBwcm9wcyBhcmUgc2VtYW50aWNhbGx5IHJlbGF0ZWQgYW5kIG11c3QgYmUgY29uc2lzdGVudCB3aXRoIGVhY2ggb3RoZXIgKGUuZy4gbmFtZSArIG5hbWVfZW4sIG5hbWUgKyBuYW1lX2phLCB0aXRsZSArIHRpdGxlX2VuKSwgZG8gTk9UIHNldCBmaXh0dXJlR2VuZXJhdG9yIG9uIGFueSBvZiB0aGVtLlxuICAgSW5zdGVhZCwgc2V0IG9ubHkgbm90ZSB3aXRoIGEgY2xlYXIgZGVzY3JpcHRpb24gdGhhdCBleHBsYWlucyB0aGUgcmVsYXRpb25zaGlwLlxuICAgRXhhbXBsZTogaWYgbmFtZSBpcyBhIEtvcmVhbiBmdWxsIG5hbWUgbGlrZSBcIuq5gOuvvOyImFwiLCB0aGVuIG5hbWVfZW4gbXVzdCBiZSBpdHMgcm9tYW5pemVkIGZvcm0gXCJLaW0gTWluc3VcIi5cbiAgIFRoZSBmaXh0dXJlIGdlbmVyYXRvciB3aWxsIHBhc3MgYWxsIHN1Y2ggcHJvcHMgdG9nZXRoZXIgdG8gTExNIGluIGEgc2luZ2xlIGNhbGwgdG8gZW5zdXJlIGNvbnNpc3RlbmN5LlxuICAgRGV0ZWN0aW9uIHJ1bGU6IGlmIGEgcHJvcCBuYW1lIG1hdGNoZXMgYW5vdGhlciBwcm9wIG5hbWUgd2l0aCBhIGxvY2FsZSBzdWZmaXggKF9lbiwgX2tvLCBfamEsIF9jbikgb3IgdmljZSB2ZXJzYSwgdHJlYXQgdGhlbSBhcyBjb3JyZWxhdGVkLlxuXG4xMC4gU3RyaW5nIFBLIGlkOlxuICAgLSBOZXZlciBzZXQgZml4dHVyZVN0cmF0ZWd5OiBcInNlcXVlbmNlXCIgb24gYW4gaWQgcHJvcCB3aXRoIHR5cGUgXCJzdHJpbmdcIi5cbiAgIC0gRG8gbm90IHNldCBmaXh0dXJlR2VuZXJhdG9yIGVpdGhlciDigJQgZml4dHVyZS1nZW5lcmF0b3IgYXV0b21hdGljYWxseSBnZW5lcmF0ZXMgYWxwaGFudW1lcmljKDMyKS5cbiAgIC0gSW4gbm90ZSwgZGVzY3JpYmUgaG93IHRoZSBpZCBpcyBnZW5lcmF0ZWQgKGUuZy4gcmFuZG9tIHN0cmluZyBnZW5lcmF0ZWQgYnkgYmV0dGVyLWF1dGgpLlxuXG4xMS4gZml4dHVyZUNvbXBhbmlvbnMgKElNUE9SVEFOVCAtIG5ldmVyIGdlbmVyYXRlIG9yIG1vZGlmeSk6XG4gICAtIGZpeHR1cmVDb21wYW5pb25zIGlzIHVzZXItZGVjbGFyZWQgbWV0YWRhdGEgdGhhdCB0cmlnZ2VycyBhdXRvbWF0aWMgY29tcGFuaW9uIGZpeHR1cmUgY3JlYXRpb24gd2hlbiBhIHBhcmVudCBmaXh0dXJlIGlzIGdlbmVyYXRlZC5cbiAgIC0gRG8gTk9UIGdlbmVyYXRlIG9yIHN1Z2dlc3QgZml4dHVyZUNvbXBhbmlvbnMgZm9yIGFueSBwcm9wLiBPbmx5IHVzZXJzIGRlY2xhcmUgdGhpcyBpbnRlbnRpb25hbGx5LlxuICAgLSBJZiBhIHByb3AncyBleGlzdGluZyBjb25lIGFscmVhZHkgY29udGFpbnMgZml4dHVyZUNvbXBhbmlvbnMsIHByZXNlcnZlIGl0IGV4YWN0bHkgYXMtaXMgaW4gdGhlIHByb3BDb25lcyBvdXRwdXQuIERvIG5vdCByZW1vdmUsIGFsdGVyLCBvciBvbWl0IGl0LlxuICAgLSBFeGFtcGxlOiBpZiBVc2VyIGVudGl0eSdzIFwiaWRcIiBwcm9wIGNvbmUgaGFzIGZpeHR1cmVDb21wYW5pb25zLCBpbmNsdWRlIGl0IHVuY2hhbmdlZCBpbiBwcm9wQ29uZXNbXCJpZFwiXS5cblxuJHtcbiAgY29udGV4dC5leGlzdGluZ0NvbmVzXG4gICAgPyBgXG5FWElTVElORyBDT05FUyAocHJlc2VydmUgdGhlc2UgaWYgcHJlc2VudCk6XG4ke0pTT04uc3RyaW5naWZ5KGNvbnRleHQuZXhpc3RpbmdDb25lcywgbnVsbCwgMil9XG5gXG4gICAgOiBcIlwiXG59XG5cbk9VVFBVVCBGT1JNQVQ6XG5SZXR1cm4gT05MWSB2YWxpZCBKU09OIChubyBtYXJrZG93biwgbm8gY29kZSBibG9ja3MpLiBVc2UgdGhpcyBleGFjdCBzdHJ1Y3R1cmU6XG57XG4gIFwiZW50aXR5Q29uZVwiOiB7XG4gICAgXCJub3RlXCI6IFwiRGVzY3JpcHRpb24gb2YgdGhlIGVudGl0eSwgaXRzIHB1cnBvc2UsIGFuZCBndWlkYW5jZSBmb3IgZml4dHVyZSBnZW5lcmF0aW9uXCIsXG4gICAgXCJ0YWdzXCI6IFtcIm9wdGlvbmFsXCIsIFwidGFnc1wiXVxuICB9LFxuICBcInByb3BDb25lc1wiOiB7XG4gICAgXCJwcm9wX25hbWVcIjoge1xuICAgICAgXCJub3RlXCI6IFwiRGVzY3JpcHRpb24gb2YgdGhpcyBmaWVsZCBhbmQgZ3VpZGFuY2UgZm9yIHJlYWxpc3RpYyB0ZXN0IGRhdGEgZ2VuZXJhdGlvblwiLFxuICAgICAgXCJmaXh0dXJlR2VuZXJhdG9yXCI6IFwiZmFrZXIueHh4Lnl5eSgpXCIsXG4gICAgICBcImRhdGFTb3VyY2VcIjogeyBcInN0cmF0ZWd5XCI6IFwicmVjZW50XCIsIFwiY29uZmlnXCI6IHsgXCJsaW1pdFwiOiA1IH0gfVxuICAgIH1cbiAgfSxcbiAgXCJzdWJzZXRDb25lc1wiOiB7XG4gICAgXCJBXCI6IHtcbiAgICAgIFwibm90ZVwiOiBcIkRlc2NyaXB0aW9uIG9mIHN1YnNldCBBLCB3aGF0IGZpZWxkcyBpdCBpbmNsdWRlcywgYW5kIHdoZW4gdG8gdXNlIGl0XCJcbiAgICB9XG4gIH0sXG4gIFwiZW51bUNvbmVzXCI6IHtcbiAgICBcIkVudW1OYW1lXCI6IHtcbiAgICAgIFwibm90ZVwiOiBcIkRlc2NyaXB0aW9uIG9mIHRoZSBlbnVtIGFuZCBndWlkYW5jZSBmb3IgZ2VuZXJhdGluZyB2YWx1ZXNcIixcbiAgICAgIFwidmFsdWVzXCI6IHtcbiAgICAgICAgXCJWQUxVRV9LRVlcIjoge1xuICAgICAgICAgIFwibm90ZVwiOiBcIiR7bG9jYWxlRGVzY30gZGVzY3JpcHRpb24gb2YgdGhpcyBlbnVtIHZhbHVlXCJcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5JTVBPUlRBTlQ6IFJldHVybiBwdXJlIEpTT04gb25seS4gRG8gTk9UIHdyYXAgaW4gbWFya2Rvd24gY29kZSBibG9ja3MuYDtcbn1cblxuLyoqXG4gKiBBbnRocm9waWMgQVBJ66W8IO2YuOy2nO2VmOyXrCBMTE0g7J2R64u17J2EIOuwm+yKteuLiOuLpC5cbiAqXG4gKiBAcGFyYW0gcHJvbXB0IC0g7IOd7ISx7ZWgIO2UhOuhrO2UhO2KuFxuICogQHBhcmFtIGFwaUtleSAtIEFudGhyb3BpYyBBUEkg7YKkXG4gKiBAcmV0dXJucyBMTE0g7J2R64u1IO2FjeyKpO2KuCDrsI8g7Yag7YGwIOyCrOyaqeufiVxuICovXG5hc3luYyBmdW5jdGlvbiBjYWxsQW50aHJvcGljQVBJKFxuICBwcm9tcHQ6IHN0cmluZyxcbiAgYXBpS2V5OiBzdHJpbmcsXG4pOiBQcm9taXNlPHsgdGV4dDogc3RyaW5nOyB0b2tlbnNVc2VkOiBudW1iZXIgfT4ge1xuICB0cnkge1xuICAgIC8vIEBhaS1zZGsvYW50aHJvcGlj6rO8IGFpIO2MqO2CpOyngOuKlCBvcHRpb25hbCBkZXBlbmRlbmN57J2066+A66GcIOuPmeyggSBpbXBvcnRcbiAgICBjb25zdCB7IGNyZWF0ZUFudGhyb3BpYyB9ID0gYXdhaXQgaW1wb3J0KFwiQGFpLXNkay9hbnRocm9waWNcIik7XG4gICAgY29uc3QgeyBnZW5lcmF0ZVRleHQgfSA9IGF3YWl0IGltcG9ydChcImFpXCIpO1xuXG4gICAgY29uc3QgYW50aHJvcGljID0gY3JlYXRlQW50aHJvcGljKHtcbiAgICAgIGFwaUtleSxcbiAgICB9KTtcblxuICAgIGNvbnN0IHsgdGV4dCwgdXNhZ2UgfSA9IGF3YWl0IGdlbmVyYXRlVGV4dCh7XG4gICAgICBtb2RlbDogYW50aHJvcGljKFwiY2xhdWRlLXNvbm5ldC00LTZcIiksXG4gICAgICBwcm9tcHQsXG4gICAgfSk7XG5cbiAgICBjb25zdCB0b2tlbnNVc2VkID0gdXNhZ2U/LnRvdGFsVG9rZW5zIHx8IDA7XG4gICAgaWYgKHVzYWdlKSB7XG4gICAgICBjb25zb2xlLmxvZyhgW0NvbmUgR2VuZXJhdG9yXSBUb2tlbnMgdXNlZDogJHt0b2tlbnNVc2VkfWApO1xuICAgIH1cblxuICAgIHJldHVybiB7IHRleHQsIHRva2Vuc1VzZWQgfTtcbiAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICBpZiAoZXJyb3IgJiYgdHlwZW9mIGVycm9yID09PSBcIm9iamVjdFwiICYmIFwic3RhdHVzQ29kZVwiIGluIGVycm9yKSB7XG4gICAgICBjb25zdCBzdGF0dXNDb2RlID0gKGVycm9yIGFzIHsgc3RhdHVzQ29kZTogbnVtYmVyIH0pLnN0YXR1c0NvZGU7XG4gICAgICBpZiAoc3RhdHVzQ29kZSA9PT0gNDI5KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlJhdGUgbGltaXQgZXhjZWVkZWQuIFBsZWFzZSB0cnkgYWdhaW4gbGF0ZXIuXCIsIHsgY2F1c2U6IGVycm9yIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IG1lc3NhZ2UgPSBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFwiVW5rbm93biBlcnJvclwiO1xuICAgIHRocm93IG5ldyBFcnJvcihgTExNIEFQSSBmYWlsZWQ6ICR7bWVzc2FnZX1gLCB7IGNhdXNlOiBlcnJvciB9KTtcbiAgfVxufVxuXG4vKipcbiAqIExMTSDsnZHri7XsnYQg7YyM7Iux7ZWY7JesIENvbmVHZW5lcmF0aW9uUmVzdWx066GcIOuzgO2ZmO2VqeuLiOuLpC5cbiAqXG4gKiBNYXJrZG93biDsvZTrk5wg67iU66Gd7J20IO2PrO2VqOuQmOyWtCDsnojsnLzrqbQg7KCc6rGw7ZWp64uI64ukLlxuICovXG5mdW5jdGlvbiBwYXJzZUNvbmVSZXNwb25zZSh0ZXh0OiBzdHJpbmcpOiBDb25lR2VuZXJhdGlvblJlc3VsdCB7XG4gIGxldCBqc29uVGV4dCA9IHRleHQudHJpbSgpO1xuICBqc29uVGV4dCA9IGpzb25UZXh0LnJlcGxhY2UoL15gYGBqc29uXFxzKi9pLCBcIlwiKTtcbiAganNvblRleHQgPSBqc29uVGV4dC5yZXBsYWNlKC9gYGBcXHMqJC8sIFwiXCIpO1xuICBqc29uVGV4dCA9IGpzb25UZXh0LnRyaW0oKTtcblxuICB0cnkge1xuICAgIGNvbnN0IHBhcnNlZCA9IEpTT04ucGFyc2UoanNvblRleHQpO1xuXG4gICAgaWYgKCFwYXJzZWQucHJvcENvbmVzIHx8IHR5cGVvZiBwYXJzZWQucHJvcENvbmVzICE9PSBcIm9iamVjdFwiKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHJlc3BvbnNlOiBwcm9wQ29uZXMgaXMgcmVxdWlyZWQgYW5kIG11c3QgYmUgYW4gb2JqZWN0XCIpO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBlbnRpdHlDb25lOiBwYXJzZWQuZW50aXR5Q29uZSxcbiAgICAgIHByb3BDb25lczogcGFyc2VkLnByb3BDb25lcyxcbiAgICAgIHN1YnNldENvbmVzOiBwYXJzZWQuc3Vic2V0Q29uZXMgfHwge30sXG4gICAgICBlbnVtQ29uZXM6IHBhcnNlZC5lbnVtQ29uZXMgfHwge30sXG4gICAgICB0b2tlbnNVc2VkOiAwLFxuICAgIH07XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY29uc3QgbWVzc2FnZSA9IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogXCJVbmtub3duIGVycm9yXCI7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYEZhaWxlZCB0byBwYXJzZSBMTE0gcmVzcG9uc2U6ICR7bWVzc2FnZX1cXG5cXG5gICtcbiAgICAgICAgYE9yaWdpbmFsIHJlc3BvbnNlOlxcbiR7dGV4dH1cXG5cXG5gICtcbiAgICAgICAgYENsZWFuZWQgSlNPTjpcXG4ke2pzb25UZXh0fWAsXG4gICAgICB7IGNhdXNlOiBlcnJvciB9LFxuICAgICk7XG4gIH1cbn1cblxuLyoqXG4gKiDsg53shLHrkJwgY29uZeydhCDquLDsobQgY29uZeqzvCDrs5Htlantlanri4jri6QuXG4gKlxuICog6riw7KG0IGNvbmXsnbQg7J6I7Jy866m0IOuztOyhtO2VmOqzoCwg7JeG64qUIOqyveyasOyXkOunjCDsg53shLHrkJwgY29uZeydhCDsgqzsmqntlanri4jri6QuXG4gKi9cbmZ1bmN0aW9uIG1lcmdlV2l0aEV4aXN0aW5nKFxuICBnZW5lcmF0ZWQ6IENvbmVHZW5lcmF0aW9uUmVzdWx0LFxuICBleGlzdGluZzogUmVjb3JkPHN0cmluZywgQ29uZT4sXG4pOiBDb25lR2VuZXJhdGlvblJlc3VsdCB7XG4gIGNvbnN0IHJlc3VsdCA9IHsgLi4uZ2VuZXJhdGVkIH07XG5cbiAgY29uc3QgZW50aXR5S2V5ID0gYGVudGl0eToke2dlbmVyYXRlZC5lbnRpdHlDb25lID8gXCJwcmVzZW50XCIgOiBcIm1pc3NpbmdcIn1gO1xuICBpZiAoZXhpc3RpbmdbZW50aXR5S2V5XSkge1xuICAgIHJlc3VsdC5lbnRpdHlDb25lID0gZXhpc3RpbmdbZW50aXR5S2V5XTtcbiAgfVxuXG4gIGZvciAoY29uc3QgcHJvcE5hbWUgb2YgT2JqZWN0LmtleXMoZ2VuZXJhdGVkLnByb3BDb25lcykpIHtcbiAgICBjb25zdCBrZXkgPSBgcHJvcDoke3Byb3BOYW1lfWA7XG4gICAgaWYgKGV4aXN0aW5nW2tleV0pIHtcbiAgICAgIHJlc3VsdC5wcm9wQ29uZXNbcHJvcE5hbWVdID0gZXhpc3Rpbmdba2V5XTtcbiAgICB9XG4gIH1cblxuICBmb3IgKGNvbnN0IGVudW1JZCBvZiBPYmplY3Qua2V5cyhnZW5lcmF0ZWQuZW51bUNvbmVzKSkge1xuICAgIGNvbnN0IGtleSA9IGBlbnVtOiR7ZW51bUlkfWA7XG4gICAgaWYgKGV4aXN0aW5nW2tleV0pIHtcbiAgICAgIHJlc3VsdC5lbnVtQ29uZXNbZW51bUlkXSA9IGV4aXN0aW5nW2tleV07XG4gICAgfVxuICB9XG5cbiAgZm9yIChjb25zdCBzdWJzZXRLZXkgb2YgT2JqZWN0LmtleXMoZ2VuZXJhdGVkLnN1YnNldENvbmVzKSkge1xuICAgIGNvbnN0IGtleSA9IGBzdWJzZXQ6JHtzdWJzZXRLZXl9YDtcbiAgICBpZiAoZXhpc3Rpbmdba2V5XSkge1xuICAgICAgcmVzdWx0LnN1YnNldENvbmVzW3N1YnNldEtleV0gPSBleGlzdGluZ1trZXldO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogbm90ZeqwgCDsl4bripQgY29uZeunjCDsg53shLHtlZjqs6Ag64KY66i47KeA64qUIOuztOyhtO2VqeuLiOuLpC5cbiAqXG4gKiDquLDsobQgY29uZeyXkCBub3Rl6rCAIOyeiOycvOuptCDrs7TsobTtlZjqs6AsIOyXhuycvOuptCDsg4jroZwg7IOd7ISx65CcIGNvbmXsnYQg7IKs7Jqp7ZWp64uI64ukLlxuICovXG5mdW5jdGlvbiBtZXJnZU9ubHlFbXB0eShcbiAgZ2VuZXJhdGVkOiBDb25lR2VuZXJhdGlvblJlc3VsdCxcbiAgZXhpc3Rpbmc6IFJlY29yZDxzdHJpbmcsIENvbmU+LFxuKTogQ29uZUdlbmVyYXRpb25SZXN1bHQge1xuICBjb25zdCByZXN1bHQgPSB7IC4uLmdlbmVyYXRlZCB9O1xuXG4gIC8vIEVudGl0eSBjb25lOiBzY2FsZeydtCDsnojsnLzrqbQg67O07KG0XG4gIGNvbnN0IGVudGl0eUtleSA9IGBlbnRpdHk6JHtnZW5lcmF0ZWQuZW50aXR5Q29uZSA/IFwicHJlc2VudFwiIDogXCJtaXNzaW5nXCJ9YDtcbiAgaWYgKGV4aXN0aW5nW2VudGl0eUtleV0/Lm5vdGUpIHtcbiAgICByZXN1bHQuZW50aXR5Q29uZSA9IGV4aXN0aW5nW2VudGl0eUtleV07XG4gIH1cblxuICAvLyBQcm9wIGNvbmVzOiBzY2FsZeydtCDsnojsnLzrqbQg67O07KG0XG4gIGZvciAoY29uc3QgcHJvcE5hbWUgb2YgT2JqZWN0LmtleXMoZ2VuZXJhdGVkLnByb3BDb25lcykpIHtcbiAgICBjb25zdCBrZXkgPSBgcHJvcDoke3Byb3BOYW1lfWA7XG4gICAgaWYgKGV4aXN0aW5nW2tleV0/Lm5vdGUpIHtcbiAgICAgIHJlc3VsdC5wcm9wQ29uZXNbcHJvcE5hbWVdID0gZXhpc3Rpbmdba2V5XTtcbiAgICB9XG4gIH1cblxuICAvLyBFbnVtIGNvbmVzOiBzY2FsZeydtCDsnojsnLzrqbQg67O07KG0XG4gIGZvciAoY29uc3QgZW51bUlkIG9mIE9iamVjdC5rZXlzKGdlbmVyYXRlZC5lbnVtQ29uZXMpKSB7XG4gICAgY29uc3Qga2V5ID0gYGVudW06JHtlbnVtSWR9YDtcbiAgICBpZiAoZXhpc3Rpbmdba2V5XT8ubm90ZSkge1xuICAgICAgcmVzdWx0LmVudW1Db25lc1tlbnVtSWRdID0gZXhpc3Rpbmdba2V5XTtcbiAgICB9XG4gIH1cblxuICAvLyBTdWJzZXQgY29uZXM6IHNjYWxl7J20IOyeiOycvOuptCDrs7TsobRcbiAgZm9yIChjb25zdCBzdWJzZXRLZXkgb2YgT2JqZWN0LmtleXMoZ2VuZXJhdGVkLnN1YnNldENvbmVzKSkge1xuICAgIGNvbnN0IGtleSA9IGBzdWJzZXQ6JHtzdWJzZXRLZXl9YDtcbiAgICBpZiAoZXhpc3Rpbmdba2V5XT8ubm90ZSkge1xuICAgICAgcmVzdWx0LnN1YnNldENvbmVzW3N1YnNldEtleV0gPSBleGlzdGluZ1trZXldO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBcUNBLGVBQXNCLGNBQWMsU0FBK0Q7Q0FDakcsTUFBTSxTQUFTLFVBQVU7Q0FFekIsTUFBTSxFQUFFLE1BQU0sY0FBYyxlQUFlLE1BQU0saUJBRGxDLFlBQVksT0FDdUMsR0FBUSxNQUFNO0NBQ2hGLE1BQU0sU0FBUyxrQkFBa0IsWUFBWTtDQUM3QyxPQUFPLGFBQWE7Q0FFcEIsSUFBSSxRQUFRLGVBQWU7RUFDekIsSUFBSSxRQUFRLFdBQ1YsT0FBTyxlQUFlLFFBQVEsUUFBUSxhQUFhO0VBRXJELE9BQU8sa0JBQWtCLFFBQVEsUUFBUSxhQUFhO0NBQ3hEO0NBRUEsT0FBTztBQUNUOzs7Ozs7QUFPQSxTQUFTLFlBQW9CO0NBRTNCLElBQUk7Q0FFSixJQUFJO0VBRUYsTUFBTSxFQUFFLFlBQUEsU0FBQSxHQUFBLGFBQUEsV0FBQTtFQUNSLFNBQVMsT0FBTyxTQUFTO0NBQzNCLFFBQVE7RUFFTixTQUFTO0NBQ1g7Q0FFQSxJQUFJLENBQUMsUUFDSCxTQUFTLFFBQVEsSUFB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
|
|
299
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZS1nZW5lcmF0b3IuanMiLCJuYW1lcyI6WyJwYXRoIiwiZnMiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvY29uZS9jb25lLWdlbmVyYXRvci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBmcyBmcm9tIFwibm9kZTpmc1wiO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tIFwibm9kZTpwYXRoXCI7XG5cbmltcG9ydCB7IHR5cGUgTGFuZ3VhZ2VNb2RlbCB9IGZyb20gXCJhaVwiO1xuXG5pbXBvcnQgeyB0eXBlIENvbmUsIHR5cGUgRW50aXR5SnNvbiB9IGZyb20gXCIuLi90eXBlcy90eXBlc1wiO1xuaW1wb3J0IHsgaXNPYmplY3RWYWx1ZSB9IGZyb20gXCIuLi91dGlscy9ydW50aW1lLXZhbHVlXCI7XG5cbi8qKlxuICogQ29uZSDsg53shLEg7Luo7YWN7Iqk7Yq4XG4gKlxuICogRW50aXR5IOygleuztOyZgCDsg53shLEg7Ji17IWY7J2EIOuLtOqzoCDsnojsirXri4jri6QuXG4gKi9cbmV4cG9ydCB0eXBlIENvbmVHZW5lcmF0aW9uQ29udGV4dCA9IHtcbiAgZW50aXR5OiBFbnRpdHlKc29uO1xuICBsb2NhbGU/OiBcImtvXCIgfCBcImVuXCIgfCBcImphXCI7XG4gIGV4aXN0aW5nQ29uZXM/OiBSZWNvcmQ8c3RyaW5nLCBDb25lPjtcbiAgLyoqIHRydWXsnbgg6rK97JqwIG5vdGXqsIAg7JeG64qUIGNvbmXrp4wg7IOd7ISxICovXG4gIG9ubHlFbXB0eT86IGJvb2xlYW47XG59O1xuXG4vKipcbiAqIENvbmUg7IOd7ISxIOqysOqzvFxuICpcbiAqIEVudGl0eSwgUHJvcHMsIFN1YnNldHMsIEVudW1z7J2YIGNvbmUg66mU7YOA642w7J207YSw66W8IOuLtOqzoCDsnojsirXri4jri6QuXG4gKi9cbmV4cG9ydCB0eXBlIENvbmVHZW5lcmF0aW9uUmVzdWx0ID0ge1xuICBlbnRpdHlDb25lPzogQ29uZTtcbiAgcHJvcENvbmVzOiBSZWNvcmQ8c3RyaW5nLCBDb25lPjtcbiAgc3Vic2V0Q29uZXM6IFJlY29yZDxzdHJpbmcsIENvbmU+O1xuICBlbnVtQ29uZXM6IFJlY29yZDxzdHJpbmcsIENvbmU+O1xuICB0b2tlbnNVc2VkOiBudW1iZXI7XG59O1xuXG5leHBvcnQgdHlwZSBDb25lVGV4dEdlbmVyYXRvciA9IChyZXF1ZXN0OiB7XG4gIG1vZGVsOiBMYW5ndWFnZU1vZGVsO1xuICBwcm9tcHQ6IHN0cmluZztcbn0pID0+IFByb21pc2U8eyB0ZXh0OiBzdHJpbmc7IHVzYWdlPzogeyB0b3RhbFRva2Vucz86IG51bWJlciB9IH0+O1xuXG5leHBvcnQgdHlwZSBDb25lR2VuZXJhdG9yRGVwZW5kZW5jaWVzID0ge1xuICBnZW5lcmF0ZVRleHQ/OiBDb25lVGV4dEdlbmVyYXRvcjtcbn07XG5cbi8qKlxuICogTExN7J2EIOyCrOyaqe2VmOyXrCBFbnRpdHnsnZggY29uZSDrqZTtg4DrjbDsnbTthLDrpbwg7IOd7ISx7ZWp64uI64ukLlxuICpcbiAqIEBwYXJhbSBjb250ZXh0IC0gRW50aXR5IOygleuztOyZgCDsg53shLEg7Ji17IWYXG4gKiBAcmV0dXJucyDsg53shLHrkJwgY29uZSDrqZTtg4DrjbDsnbTthLBcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdlbmVyYXRlQ29uZXMoXG4gIGNvbnRleHQ6IENvbmVHZW5lcmF0aW9uQ29udGV4dCxcbiAgZGVwZW5kZW5jaWVzOiBDb25lR2VuZXJhdG9yRGVwZW5kZW5jaWVzID0ge30sXG4pOiBQcm9taXNlPENvbmVHZW5lcmF0aW9uUmVzdWx0PiB7XG4gIGNvbnN0IGFwaUtleSA9IGdldEFwaUtleSgpO1xuICBjb25zdCBwcm9tcHQgPSBidWlsZFByb21wdChjb250ZXh0KTtcbiAgY29uc3QgeyB0ZXh0OiByZXNwb25zZVRleHQsIHRva2Vuc1VzZWQgfSA9IGF3YWl0IGNhbGxBbnRocm9waWNBUEkoXG4gICAgcHJvbXB0LFxuICAgIGFwaUtleSxcbiAgICBkZXBlbmRlbmNpZXMuZ2VuZXJhdGVUZXh0LFxuICApO1xuICBjb25zdCByZXN1bHQgPSBwYXJzZUNvbmVSZXNwb25zZShyZXNwb25zZVRleHQpO1xuICByZXN1bHQudG9rZW5zVXNlZCA9IHRva2Vuc1VzZWQ7XG5cbiAgaWYgKGNvbnRleHQuZXhpc3RpbmdDb25lcykge1xuICAgIGlmIChjb250ZXh0Lm9ubHlFbXB0eSkge1xuICAgICAgcmV0dXJuIG1lcmdlT25seUVtcHR5KHJlc3VsdCwgY29udGV4dC5leGlzdGluZ0NvbmVzKTtcbiAgICB9XG4gICAgcmV0dXJuIG1lcmdlV2l0aEV4aXN0aW5nKHJlc3VsdCwgY29udGV4dC5leGlzdGluZ0NvbmVzKTtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogQVBJIO2CpOulvCDqsIDsoLjsmLXri4jri6QuXG4gKlxuICogU29uYW11LnNlY3JldCDrmJDripQg7ZmY6rK967OA7IiY7JeQ7IScIOqwgOyguOyYteuLiOuLpC5cbiAqL1xuZnVuY3Rpb24gZ2V0QXBpS2V5KCk6IHN0cmluZyB7XG4gIC8vIFNvbmFtdS5zZWNyZXTsnYAg65+w7YOA7J6E7JeQIOuhnOuTnOuQmOuvgOuhnCDrj5nsoIHsnLzroZwgaW1wb3J0XG4gIGxldCBhcGlLZXk6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICB0cnkge1xuICAgIC8vIFNvbmFtdeqwgCDstIjquLDtmZTrkJjslrQg7J6I64qUIOqyveyasFxuICAgIGNvbnN0IHsgU29uYW11IH0gPSByZXF1aXJlKFwiLi4vYXBpXCIpO1xuICAgIGFwaUtleSA9IFNvbmFtdS5zZWNyZXRzPy5hbnRocm9waWNfYXBpX2tleTtcbiAgfSBjYXRjaCB7XG4gICAgLy8gU29uYW116rCAIOy0iOq4sO2ZlOuQmOyngCDslYrsnYAg6rK97JqwICjthYzsiqTtirgg65OxKVxuICAgIGFwaUtleSA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGlmICghYXBpS2V5KSB7XG4gICAgYXBpS2V5ID0gcHJvY2Vzcy5lbnYuQU5USFJPUElDX0FQSV9LRVk7XG4gIH1cblxuICBpZiAoIWFwaUtleSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIFwiQU5USFJPUElDX0FQSV9LRVkgbm90IGZvdW5kLiBcIiArXG4gICAgICAgIFwiU2V0IEFOVEhST1BJQ19BUElfS0VZIGVudmlyb25tZW50IHZhcmlhYmxlIG9yIGFkZCBpdCB0byBzb25hbXUuc2VjcmV0LnRzXCIsXG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiBhcGlLZXk7XG59XG5cbi8qKlxuICog64+E66mU7J2467OEIHtkb21haW59LmNvbnRyYWN0Lm1k66W8IOydveyWtCDsu6jthY3siqTtirjroZwg67CY7ZmY7ZWp64uI64ukLlxuICpcbiAqIC0gY29udHJhY3Qve2RvbWFpbn0ve2RvbWFpbn0uY29udHJhY3QubWQ6IOuPhOuplOyduCDqt5zsuZnqs7wg6rKw7KCVIOq3vOqxsFxuICpcbiAqIGNvbmUg7IOd7ISxIOyLnCBMTE3sl5Dqsowg7KCE64us7ZWY7JesIOuPhOuplOyduCDrp6Xrnb3sl5Ag66ee64qUIOuplO2DgOuNsOydtO2EsOulvCDsg53shLHtlZjrj4TroZ0g7ZWp64uI64ukLlxuICovXG5mdW5jdGlvbiByZWFkUHJvamVjdFNraWxscygpOiBzdHJpbmcge1xuICB0cnkge1xuICAgIGNvbnN0IHsgU29uYW11IH0gPSByZXF1aXJlKFwiLi4vYXBpXCIpO1xuICAgIGNvbnN0IHByb2plY3RSb290ID0gU29uYW11LmFwcFJvb3RQYXRoO1xuICAgIGNvbnN0IGNvbnRlbnRzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgLy8gY29udHJhY3QvKiovKi5jb250cmFjdC5tZCDsiJjsp5FcbiAgICBjb25zdCBjb250cmFjdERpciA9IHBhdGguam9pbihwcm9qZWN0Um9vdCwgXCJjb250cmFjdFwiKTtcbiAgICBpZiAoZnMuZXhpc3RzU3luYyhjb250cmFjdERpcikpIHtcbiAgICAgIGNvbnN0IGRvbWFpbnMgPSBmc1xuICAgICAgICAucmVhZGRpclN5bmMoY29udHJhY3REaXIsIHsgd2l0aEZpbGVUeXBlczogdHJ1ZSB9KVxuICAgICAgICAuZmlsdGVyKChkKSA9PiBkLmlzRGlyZWN0b3J5KCkpXG4gICAgICAgIC5tYXAoKGQpID0+IGQubmFtZSk7XG5cbiAgICAgIGZvciAoY29uc3QgZG9tYWluIG9mIGRvbWFpbnMpIHtcbiAgICAgICAgY29uc3QgZG9tYWluRGlyID0gcGF0aC5qb2luKGNvbnRyYWN0RGlyLCBkb21haW4pO1xuICAgICAgICBjb25zdCBjb250cmFjdEZpbGVzID0gZnNcbiAgICAgICAgICAucmVhZGRpclN5bmMoZG9tYWluRGlyKVxuICAgICAgICAgIC5maWx0ZXIoKGY6IHN0cmluZykgPT4gZi5lbmRzV2l0aChcIi5jb250cmFjdC5tZFwiKSk7XG5cbiAgICAgICAgZm9yIChjb25zdCBmaWxlIG9mIGNvbnRyYWN0RmlsZXMpIHtcbiAgICAgICAgICBjb25zdCBmaWxlUGF0aCA9IHBhdGguam9pbihkb21haW5EaXIsIGZpbGUpO1xuICAgICAgICAgIGNvbnN0IGNvbnRlbnQgPSBmcy5yZWFkRmlsZVN5bmMoZmlsZVBhdGgsIFwidXRmLThcIikudHJpbSgpO1xuICAgICAgICAgIGlmIChjb250ZW50KSB7XG4gICAgICAgICAgICBjb250ZW50cy5wdXNoKGAtLS0gY29udHJhY3QvJHtkb21haW59LyR7ZmlsZX0gLS0tXFxuJHtjb250ZW50fWApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBjb250ZW50cy5qb2luKFwiXFxuXFxuXCIpO1xuICB9IGNhdGNoIHtcbiAgICAvLyBTb25hbXUg66+47LSI6riw7ZmUIOuYkOuKlCDtjIzsnbwg7KCR6re8IOyYpOulmCDsi5wg67mIIOusuOyekOyXtCDrsJjtmZhcbiAgICByZXR1cm4gXCJcIjtcbiAgfVxufVxuXG4vKipcbiAqIExMTSDtlITroaztlITtirjrpbwg7IOd7ISx7ZWp64uI64ukLlxuICpcbiAqIGFpLWNsaWVudC50cyDtjKjthLTsnYQg7LC46rOg7ZWY7JesIOuqhe2Zle2VnCDsp4Dsi5zsgqztla3qs7wg7Lac66ClIO2YleyLneydhCDsoJzqs7Xtlanri4jri6QuXG4gKi9cbmZ1bmN0aW9uIGJ1aWxkUHJvbXB0KGNvbnRleHQ6IENvbmVHZW5lcmF0aW9uQ29udGV4dCk6IHN0cmluZyB7XG4gIGNvbnN0IGxvY2FsZSA9IGNvbnRleHQubG9jYWxlIHx8IFwia29cIjtcbiAgY29uc3QgbG9jYWxlRGVzYyA9IHtcbiAgICBrbzogXCJLb3JlYW5cIixcbiAgICBlbjogXCJFbmdsaXNoXCIsXG4gICAgamE6IFwiSmFwYW5lc2VcIixcbiAgfVtsb2NhbGVdO1xuXG4gIGNvbnN0IHByb2plY3RDb250ZXh0ID0gcmVhZFByb2plY3RTa2lsbHMoKTtcbiAgY29uc3QgcHJvamVjdFNlY3Rpb24gPSBwcm9qZWN0Q29udGV4dFxuICAgID8gYFxcblBST0pFQ1QgQ09OVEVYVCAoYnVzaW5lc3MgcmVxdWlyZW1lbnRzIGFuZCBkb21haW4ga25vd2xlZGdlKTpcXG4ke3Byb2plY3RDb250ZXh0fVxcblxcblVzZSB0aGUgYWJvdmUgcHJvamVjdCBjb250ZXh0IHRvIHVuZGVyc3RhbmQgdGhlIGJ1c2luZXNzIGRvbWFpbiwgZW50aXR5IHB1cnBvc2VzLCBmaWVsZCBtZWFuaW5ncywgYW5kIHJlbGF0aW9uc2hpcHMuIEdlbmVyYXRlIGNvbmUgbWV0YWRhdGEgdGhhdCByZWZsZWN0cyB0aGlzIHByb2plY3QncyBhY3R1YWwgcmVxdWlyZW1lbnRzLCBub3QgZ2VuZXJpYyBhc3N1bXB0aW9ucy5cXG5gXG4gICAgOiBcIlwiO1xuXG4gIHJldHVybiBgWW91IGFyZSBhIFNvbmFtdSBmcmFtZXdvcmsgZXhwZXJ0LiBHZW5lcmF0ZSBjb25lIG1ldGFkYXRhIGZvciBkYXRhYmFzZSBlbnRpdHkgZml4dHVyZSBnZW5lcmF0aW9uLlxuXG5DUklUSUNBTCBQUklPUklUWSBSVUxFOlxuVGhlIFwibm90ZVwiIGZpZWxkIGlzIHRoZSBQUklNQVJZIHNvdXJjZSBmb3IgZml4dHVyZSBkYXRhIGdlbmVyYXRpb24uIFdoZW4gLS11c2UtbGxtIGlzIGVuYWJsZWQsIHRoZSBmaXh0dXJlIGdlbmVyYXRvciByZWFkcyBjb25lLm5vdGUgYW5kIGFza3MgTExNIHRvIGdlbmVyYXRlIGNvbnRleHR1YWxseSBhcHByb3ByaWF0ZSBkYXRhIEJFRk9SRSBmYWxsaW5nIGJhY2sgdG8gZml4dHVyZUdlbmVyYXRvci5cblRoZXJlZm9yZSwgY29uZS5ub3RlIG11c3QgYWx3YXlzIGNvbnRhaW4gcmljaCwgZG9tYWluLXNwZWNpZmljIGRlc2NyaXB0aW9ucyB3aXRoIGNvbmNyZXRlIGV4YW1wbGVzIGFuZCB2YWx1ZSByYW5nZXMuXG5maXh0dXJlR2VuZXJhdG9yIGlzIG9ubHkgYSBGQUxMQkFDSyBmb3Igd2hlbiBMTE0gaXMgdW5hdmFpbGFibGUgKG5vIEFQSSBrZXkpLiBXcml0ZSBpdCBhcyBhIGJlc3QtZWZmb3J0IGFwcHJveGltYXRpb24sIGJ1dCBuZXZlciByZWx5IG9uIGl0IGFzIHRoZSBwcmltYXJ5IGdlbmVyYXRpb24gbWV0aG9kLlxuJHtwcm9qZWN0U2VjdGlvbn1cbkVOVElUWSBTVFJVQ1RVUkU6XG4ke0pTT04uc3RyaW5naWZ5KGNvbnRleHQuZW50aXR5LCBudWxsLCAyKX1cblxuTE9DQUxFOiAke2xvY2FsZX0gKCR7bG9jYWxlRGVzY30pXG5cbklOU1RSVUNUSU9OUzpcbjEuIEVudGl0eSBjb25lIG1ldGFkYXRhOlxuICAgLSBub3RlOiBEZXNjcmliZSB3aGF0IHRoaXMgZW50aXR5IHJlcHJlc2VudHMsIGl0cyBwdXJwb3NlLCByZWxhdGlvbnNoaXBzLCBidXNpbmVzcyBjb250ZXh0LCBhbmQgb3ZlcmFsbCBndWlkYW5jZSBmb3IgZ2VuZXJhdGluZyB0ZXN0IGRhdGEuIENvbWJpbmUgYWxsIHJlbGV2YW50IGluZm9ybWF0aW9uIGludG8gb25lIGNvaGVyZW50IGRlc2NyaXB0aW9uLlxuICAgLSB0YWdzOiBSZWxldmFudCBjYXRlZ29yaXphdGlvbiB0YWdzXG5cbjIuIEZvciBlYWNoIHByb3AsIGdlbmVyYXRlIGFwcHJvcHJpYXRlIGNvbmUgbWV0YWRhdGE6XG4gICAtIG5vdGUgKE1PU1QgSU1QT1JUQU5UKTogRGVzY3JpYmUgd2hhdCB0aGlzIGZpZWxkIHJlcHJlc2VudHMgaW4gYnVzaW5lc3MgdGVybXMsIGFuZCBwcm92aWRlIGRldGFpbGVkIGd1aWRhbmNlIGZvciByZWFsaXN0aWMgdGVzdCBkYXRhIGdlbmVyYXRpb24uIEluY2x1ZGUgY29uY3JldGUgZXhhbXBsZXMsIHZhbHVlIHJhbmdlcywgZm9ybWF0dGluZyBydWxlcywgYW5kIGRvbWFpbiBjb25zdHJhaW50cy4gVGhpcyBpcyB0aGUgcHJpbWFyeSBpbnB1dCBMTE0gdXNlcyB0byBnZW5lcmF0ZSBmaXh0dXJlIGRhdGEuXG4gICAtIGZpeHR1cmVHZW5lcmF0b3I6IGZha2VyLmpzIGV4cHJlc3Npb24gYXMgRkFMTEJBQ0sgb25seSAoc2VlIHJ1bGUgOSBmb3IgZXhjZXB0aW9ucykuIEZvciBmcmVlLXRleHQgZmllbGRzIHdoZXJlIGZha2VyIGNhbm5vdCBwcm9kdWNlIGRvbWFpbi1hcHByb3ByaWF0ZSBjb250ZW50IChkZXNjcmlwdGlvbiwgc3VtbWFyeSwgbm90ZSwgcmVhc29uLCB0aXRsZSwgZXRjLiksIHByZWZlciB1c2luZyBmYWtlci5oZWxwZXJzLmFycmF5RWxlbWVudChbLi4uXSkgd2l0aCA1LTEwIGRvbWFpbi1zcGVjaWZpYyBleGFtcGxlIHZhbHVlcyByYXRoZXIgdGhhbiBmYWtlci5sb3JlbS4qLlxuXG4zLiBGaWVsZCB0eXBlIOKGkiBmYWtlci5qcyBtYXBwaW5nOlxuICAgLSBlbWFpbCDihpIgZmFrZXIuaW50ZXJuZXQuZW1haWwoKVxuICAgLSBwaG9uZSDihpIgZmFrZXIucGhvbmUubnVtYmVyKClcbiAgIC0gbmFtZS91c2VybmFtZSDihpIgZmFrZXIucGVyc29uLmZ1bGxOYW1lKCkgKHdpdGggbG9jYWxlKVxuICAgLSBiaXJ0aF9kYXRlIOKGkiBmYWtlci5kYXRlLmJpcnRoZGF0ZSh7IG1pbjogMTgsIG1heDogNjUsIG1vZGU6ICdhZ2UnIH0pXG4gICAtIHNhbGFyeSDihpIgZmFrZXIubnVtYmVyLmludCh7IG1pbjogMzBfMDAwXzAwMCwgbWF4OiAxNTBfMDAwXzAwMCB9KSBmb3Iga28gbG9jYWxlXG4gICAtIGNvbXBhbnlfbmFtZSDihpIgZmFrZXIuY29tcGFueS5uYW1lKClcbiAgIC0gYWRkcmVzcyDihpIgZmFrZXIubG9jYXRpb24uc3RyZWV0QWRkcmVzcygpXG5cbjQuIFJlbGF0aW9uIGZpZWxkcyAoQmVsb25nc1RvT25lLCBPbmVUb09uZSB3aXRoIGhhc0pvaW5Db2x1bW4pOlxuICAgLSBBbHdheXMgYWRkIGRhdGFTb3VyY2U6IHsgc3RyYXRlZ3k6IFwicmVjZW50XCIsIGNvbmZpZzogeyBsaW1pdDogMy01IH0gfVxuICAgLSBub3RlOiBFeHBsYWluIHdoYXQgdGhpcyByZWxhdGlvbiByZXByZXNlbnRzIGFuZCB0aGF0IGl0IHJlZmVyZW5jZXMgZXhpc3RpbmcgZGF0YVxuXG41LiBTdWJzZXRzIGNvbmUgbWV0YWRhdGEgKElNUE9SVEFOVCAtIGdlbmVyYXRlIGZvciBBTEwgc3Vic2V0cyk6XG4gICAtIG5vdGU6IERlc2NyaWJlIHdoYXQgdGhpcyBzdWJzZXQgcmVwcmVzZW50cywgd2hhdCBmaWVsZHMgaXQgaW5jbHVkZXMsIGFuZCB3aGVuIHRvIHVzZSBpdFxuXG42LiBFbnVtcyBjb25lIG1ldGFkYXRhIChJTVBPUlRBTlQgLSBnZW5lcmF0ZSBmb3IgQUxMIGVudW1zKTpcbiAgIC0gbm90ZTogRGVzY3JpYmUgd2hhdCB0aGlzIGVudW0gcmVwcmVzZW50cy4gSWYgYW55IHByb3AgdXNlcyB0aGlzIGVudW0gdHlwZSwgaW5jbHVkZSB0aGUgc2FtZSBndWlkYW5jZSBmcm9tIHRoYXQgcHJvcCdzIG5vdGUuXG4gICAtIEZvciBlYWNoIGVudW0gdmFsdWUsIHByb3ZpZGUgbm90ZSBleHBsYWluaW5nIHdoYXQgdGhhdCBzcGVjaWZpYyB2YWx1ZSBtZWFuc1xuXG43LiBLb3JlYW4gZmllbGQgbmFtZXMgKGxvY2FsZT1rbyk6XG4gICAtIEluZmVyIG1lYW5pbmcgYW5kIGdlbmVyYXRlIGFwcHJvcHJpYXRlIGZha2VyXG4gICAtIFwi7J2066aEXCIg4oaSIGZha2VyLnBlcnNvbi5mdWxsTmFtZSgpXG4gICAtIFwi7IOd64WE7JuU7J28XCIg4oaSIGZha2VyLmRhdGUuYmlydGhkYXRlKClcbiAgIC0gXCLso7zshoxcIiDihpIgZmFrZXIubG9jYXRpb24uc3RyZWV0QWRkcmVzcygpXG5cbjguIExvY2FsZS1zcGVjaWZpYyB2YWx1ZXM6XG4gICAtIGtvOiBLb3JlYW4gbmFtZXMsIGFkZHJlc3NlcywgcGhvbmUgbnVtYmVycyAoMDEwLVhYWFgtWFhYWCBmb3JtYXQpXG4gICAtIGVuOiBFbmdsaXNoIG5hbWVzLCBVUyBhZGRyZXNzZXNcbiAgIC0gamE6IEphcGFuZXNlIG5hbWVzLCBhZGRyZXNzZXNcblxuOS4gQ29ycmVsYXRlZCBmaWVsZHMgKElNUE9SVEFOVCAtIGRvIE5PVCB1c2UgZml4dHVyZUdlbmVyYXRvciBmb3IgdGhlc2UpOlxuICAgSWYgbXVsdGlwbGUgcHJvcHMgYXJlIHNlbWFudGljYWxseSByZWxhdGVkIGFuZCBtdXN0IGJlIGNvbnNpc3RlbnQgd2l0aCBlYWNoIG90aGVyIChlLmcuIG5hbWUgKyBuYW1lX2VuLCBuYW1lICsgbmFtZV9qYSwgdGl0bGUgKyB0aXRsZV9lbiksIGRvIE5PVCBzZXQgZml4dHVyZUdlbmVyYXRvciBvbiBhbnkgb2YgdGhlbS5cbiAgIEluc3RlYWQsIHNldCBvbmx5IG5vdGUgd2l0aCBhIGNsZWFyIGRlc2NyaXB0aW9uIHRoYXQgZXhwbGFpbnMgdGhlIHJlbGF0aW9uc2hpcC5cbiAgIEV4YW1wbGU6IGlmIG5hbWUgaXMgYSBLb3JlYW4gZnVsbCBuYW1lIGxpa2UgXCLquYDrr7zsiJhcIiwgdGhlbiBuYW1lX2VuIG11c3QgYmUgaXRzIHJvbWFuaXplZCBmb3JtIFwiS2ltIE1pbnN1XCIuXG4gICBUaGUgZml4dHVyZSBnZW5lcmF0b3Igd2lsbCBwYXNzIGFsbCBzdWNoIHByb3BzIHRvZ2V0aGVyIHRvIExMTSBpbiBhIHNpbmdsZSBjYWxsIHRvIGVuc3VyZSBjb25zaXN0ZW5jeS5cbiAgIERldGVjdGlvbiBydWxlOiBpZiBhIHByb3AgbmFtZSBtYXRjaGVzIGFub3RoZXIgcHJvcCBuYW1lIHdpdGggYSBsb2NhbGUgc3VmZml4IChfZW4sIF9rbywgX2phLCBfY24pIG9yIHZpY2UgdmVyc2EsIHRyZWF0IHRoZW0gYXMgY29ycmVsYXRlZC5cblxuMTAuIFN0cmluZyBQSyBpZDpcbiAgIC0gTmV2ZXIgc2V0IGZpeHR1cmVTdHJhdGVneTogXCJzZXF1ZW5jZVwiIG9uIGFuIGlkIHByb3Agd2l0aCB0eXBlIFwic3RyaW5nXCIuXG4gICAtIERvIG5vdCBzZXQgZml4dHVyZUdlbmVyYXRvciBlaXRoZXIg4oCUIGZpeHR1cmUtZ2VuZXJhdG9yIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVzIGFscGhhbnVtZXJpYygzMikuXG4gICAtIEluIG5vdGUsIGRlc2NyaWJlIGhvdyB0aGUgaWQgaXMgZ2VuZXJhdGVkIChlLmcuIHJhbmRvbSBzdHJpbmcgZ2VuZXJhdGVkIGJ5IGJldHRlci1hdXRoKS5cblxuMTEuIGZpeHR1cmVDb21wYW5pb25zIChJTVBPUlRBTlQgLSBuZXZlciBnZW5lcmF0ZSBvciBtb2RpZnkpOlxuICAgLSBmaXh0dXJlQ29tcGFuaW9ucyBpcyB1c2VyLWRlY2xhcmVkIG1ldGFkYXRhIHRoYXQgdHJpZ2dlcnMgYXV0b21hdGljIGNvbXBhbmlvbiBmaXh0dXJlIGNyZWF0aW9uIHdoZW4gYSBwYXJlbnQgZml4dHVyZSBpcyBnZW5lcmF0ZWQuXG4gICAtIERvIE5PVCBnZW5lcmF0ZSBvciBzdWdnZXN0IGZpeHR1cmVDb21wYW5pb25zIGZvciBhbnkgcHJvcC4gT25seSB1c2VycyBkZWNsYXJlIHRoaXMgaW50ZW50aW9uYWxseS5cbiAgIC0gSWYgYSBwcm9wJ3MgZXhpc3RpbmcgY29uZSBhbHJlYWR5IGNvbnRhaW5zIGZpeHR1cmVDb21wYW5pb25zLCBwcmVzZXJ2ZSBpdCBleGFjdGx5IGFzLWlzIGluIHRoZSBwcm9wQ29uZXMgb3V0cHV0LiBEbyBub3QgcmVtb3ZlLCBhbHRlciwgb3Igb21pdCBpdC5cbiAgIC0gRXhhbXBsZTogaWYgVXNlciBlbnRpdHkncyBcImlkXCIgcHJvcCBjb25lIGhhcyBmaXh0dXJlQ29tcGFuaW9ucywgaW5jbHVkZSBpdCB1bmNoYW5nZWQgaW4gcHJvcENvbmVzW1wiaWRcIl0uXG5cbiR7XG4gIGNvbnRleHQuZXhpc3RpbmdDb25lc1xuICAgID8gYFxuRVhJU1RJTkcgQ09ORVMgKHByZXNlcnZlIHRoZXNlIGlmIHByZXNlbnQpOlxuJHtKU09OLnN0cmluZ2lmeShjb250ZXh0LmV4aXN0aW5nQ29uZXMsIG51bGwsIDIpfVxuYFxuICAgIDogXCJcIlxufVxuXG5PVVRQVVQgRk9STUFUOlxuUmV0dXJuIE9OTFkgdmFsaWQgSlNPTiAobm8gbWFya2Rvd24sIG5vIGNvZGUgYmxvY2tzKS4gVXNlIHRoaXMgZXhhY3Qgc3RydWN0dXJlOlxue1xuICBcImVudGl0eUNvbmVcIjoge1xuICAgIFwibm90ZVwiOiBcIkRlc2NyaXB0aW9uIG9mIHRoZSBlbnRpdHksIGl0cyBwdXJwb3NlLCBhbmQgZ3VpZGFuY2UgZm9yIGZpeHR1cmUgZ2VuZXJhdGlvblwiLFxuICAgIFwidGFnc1wiOiBbXCJvcHRpb25hbFwiLCBcInRhZ3NcIl1cbiAgfSxcbiAgXCJwcm9wQ29uZXNcIjoge1xuICAgIFwicHJvcF9uYW1lXCI6IHtcbiAgICAgIFwibm90ZVwiOiBcIkRlc2NyaXB0aW9uIG9mIHRoaXMgZmllbGQgYW5kIGd1aWRhbmNlIGZvciByZWFsaXN0aWMgdGVzdCBkYXRhIGdlbmVyYXRpb25cIixcbiAgICAgIFwiZml4dHVyZUdlbmVyYXRvclwiOiBcImZha2VyLnh4eC55eXkoKVwiLFxuICAgICAgXCJkYXRhU291cmNlXCI6IHsgXCJzdHJhdGVneVwiOiBcInJlY2VudFwiLCBcImNvbmZpZ1wiOiB7IFwibGltaXRcIjogNSB9IH1cbiAgICB9XG4gIH0sXG4gIFwic3Vic2V0Q29uZXNcIjoge1xuICAgIFwiQVwiOiB7XG4gICAgICBcIm5vdGVcIjogXCJEZXNjcmlwdGlvbiBvZiBzdWJzZXQgQSwgd2hhdCBmaWVsZHMgaXQgaW5jbHVkZXMsIGFuZCB3aGVuIHRvIHVzZSBpdFwiXG4gICAgfVxuICB9LFxuICBcImVudW1Db25lc1wiOiB7XG4gICAgXCJFbnVtTmFtZVwiOiB7XG4gICAgICBcIm5vdGVcIjogXCJEZXNjcmlwdGlvbiBvZiB0aGUgZW51bSBhbmQgZ3VpZGFuY2UgZm9yIGdlbmVyYXRpbmcgdmFsdWVzXCIsXG4gICAgICBcInZhbHVlc1wiOiB7XG4gICAgICAgIFwiVkFMVUVfS0VZXCI6IHtcbiAgICAgICAgICBcIm5vdGVcIjogXCIke2xvY2FsZURlc2N9IGRlc2NyaXB0aW9uIG9mIHRoaXMgZW51bSB2YWx1ZVwiXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuSU1QT1JUQU5UOiBSZXR1cm4gcHVyZSBKU09OIG9ubHkuIERvIE5PVCB3cmFwIGluIG1hcmtkb3duIGNvZGUgYmxvY2tzLmA7XG59XG5cbi8qKlxuICogQW50aHJvcGljIEFQSeulvCDtmLjstpztlZjsl6wgTExNIOydkeuLteydhCDrsJvsirXri4jri6QuXG4gKlxuICogQHBhcmFtIHByb21wdCAtIOyDneyEse2VoCDtlITroaztlITtirhcbiAqIEBwYXJhbSBhcGlLZXkgLSBBbnRocm9waWMgQVBJIO2CpFxuICogQHJldHVybnMgTExNIOydkeuLtSDthY3siqTtirgg67CPIO2GoO2BsCDsgqzsmqnrn4lcbiAqL1xuYXN5bmMgZnVuY3Rpb24gY2FsbEFudGhyb3BpY0FQSShcbiAgcHJvbXB0OiBzdHJpbmcsXG4gIGFwaUtleTogc3RyaW5nLFxuICBpbmplY3RlZEdlbmVyYXRlVGV4dD86IENvbmVUZXh0R2VuZXJhdG9yLFxuKTogUHJvbWlzZTx7IHRleHQ6IHN0cmluZzsgdG9rZW5zVXNlZDogbnVtYmVyIH0+IHtcbiAgdHJ5IHtcbiAgICAvLyBAYWktc2RrL2FudGhyb3BpY+qzvCBhaSDtjKjtgqTsp4DripQgb3B0aW9uYWwgZGVwZW5kZW5jeeydtOuvgOuhnCDrj5nsoIEgaW1wb3J0XG4gICAgY29uc3QgeyBjcmVhdGVBbnRocm9waWMgfSA9IGF3YWl0IGltcG9ydChcIkBhaS1zZGsvYW50aHJvcGljXCIpO1xuICAgIGNvbnN0IGdlbmVyYXRlVGV4dDogQ29uZVRleHRHZW5lcmF0b3IgPVxuICAgICAgaW5qZWN0ZWRHZW5lcmF0ZVRleHQgPz9cbiAgICAgIChhc3luYyAocmVxdWVzdCkgPT4ge1xuICAgICAgICBjb25zdCBhaSA9IGF3YWl0IGltcG9ydChcImFpXCIpO1xuICAgICAgICByZXR1cm4gYWkuZ2VuZXJhdGVUZXh0KHJlcXVlc3QpO1xuICAgICAgfSk7XG5cbiAgICBjb25zdCBhbnRocm9waWMgPSBjcmVhdGVBbnRocm9waWMoe1xuICAgICAgYXBpS2V5LFxuICAgIH0pO1xuXG4gICAgY29uc3QgeyB0ZXh0LCB1c2FnZSB9ID0gYXdhaXQgZ2VuZXJhdGVUZXh0KHtcbiAgICAgIG1vZGVsOiBhbnRocm9waWMoXCJjbGF1ZGUtc29ubmV0LTQtNlwiKSxcbiAgICAgIHByb21wdCxcbiAgICB9KTtcblxuICAgIGNvbnN0IHRva2Vuc1VzZWQgPSB1c2FnZT8udG90YWxUb2tlbnMgfHwgMDtcbiAgICBpZiAodXNhZ2UpIHtcbiAgICAgIGNvbnNvbGUubG9nKGBbQ29uZSBHZW5lcmF0b3JdIFRva2VucyB1c2VkOiAke3Rva2Vuc1VzZWR9YCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgdGV4dCwgdG9rZW5zVXNlZCB9O1xuICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgIGlmIChlcnJvciAmJiBpc09iamVjdFZhbHVlKGVycm9yKSAmJiBcInN0YXR1c0NvZGVcIiBpbiBlcnJvcikge1xuICAgICAgY29uc3Qgc3RhdHVzQ29kZSA9XG4gICAgICAgIC8qIFNBRkVUWTog7Zi47LacIOqyveqzhOydmCDshKDtlokg6rKA7Kad6rO8IOyGjOycoCDtg4DsnoUg6rOE7JW97J20IOydtCDqsJLsnZgg7YOA7J6F7J2EIOuztOyepe2VnOuLpC4gKi8gKFxuICAgICAgICAgIGVycm9yIGFzIHsgc3RhdHVzQ29kZTogbnVtYmVyIH1cbiAgICAgICAgKS5zdGF0dXNDb2RlO1xuICAgICAgaWYgKHN0YXR1c0NvZGUgPT09IDQyOSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJSYXRlIGxpbWl0IGV4Y2VlZGVkLiBQbGVhc2UgdHJ5IGFnYWluIGxhdGVyLlwiLCB7IGNhdXNlOiBlcnJvciB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBtZXNzYWdlID0gZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBcIlVua25vd24gZXJyb3JcIjtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYExMTSBBUEkgZmFpbGVkOiAke21lc3NhZ2V9YCwgeyBjYXVzZTogZXJyb3IgfSk7XG4gIH1cbn1cblxuLyoqXG4gKiBMTE0g7J2R64u17J2EIO2MjOyLse2VmOyXrCBDb25lR2VuZXJhdGlvblJlc3VsdOuhnCDrs4DtmZjtlanri4jri6QuXG4gKlxuICogTWFya2Rvd24g7L2U65OcIOu4lOuhneydtCDtj6ztlajrkJjslrQg7J6I7Jy866m0IOygnOqxsO2VqeuLiOuLpC5cbiAqL1xuZnVuY3Rpb24gcGFyc2VDb25lUmVzcG9uc2UodGV4dDogc3RyaW5nKTogQ29uZUdlbmVyYXRpb25SZXN1bHQge1xuICBsZXQganNvblRleHQgPSB0ZXh0LnRyaW0oKTtcbiAganNvblRleHQgPSBqc29uVGV4dC5yZXBsYWNlKC9eYGBganNvblxccyovaSwgXCJcIik7XG4gIGpzb25UZXh0ID0ganNvblRleHQucmVwbGFjZSgvYGBgXFxzKiQvLCBcIlwiKTtcbiAganNvblRleHQgPSBqc29uVGV4dC50cmltKCk7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBwYXJzZWQgPSBKU09OLnBhcnNlKGpzb25UZXh0KTtcblxuICAgIGlmICghcGFyc2VkLnByb3BDb25lcyB8fCAhaXNPYmplY3RWYWx1ZShwYXJzZWQucHJvcENvbmVzKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCByZXNwb25zZTogcHJvcENvbmVzIGlzIHJlcXVpcmVkIGFuZCBtdXN0IGJlIGFuIG9iamVjdFwiKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgZW50aXR5Q29uZTogcGFyc2VkLmVudGl0eUNvbmUsXG4gICAgICBwcm9wQ29uZXM6IHBhcnNlZC5wcm9wQ29uZXMsXG4gICAgICBzdWJzZXRDb25lczogcGFyc2VkLnN1YnNldENvbmVzIHx8IHt9LFxuICAgICAgZW51bUNvbmVzOiBwYXJzZWQuZW51bUNvbmVzIHx8IHt9LFxuICAgICAgdG9rZW5zVXNlZDogMCxcbiAgICB9O1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFwiVW5rbm93biBlcnJvclwiO1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBGYWlsZWQgdG8gcGFyc2UgTExNIHJlc3BvbnNlOiAke21lc3NhZ2V9XFxuXFxuYCArXG4gICAgICAgIGBPcmlnaW5hbCByZXNwb25zZTpcXG4ke3RleHR9XFxuXFxuYCArXG4gICAgICAgIGBDbGVhbmVkIEpTT046XFxuJHtqc29uVGV4dH1gLFxuICAgICAgeyBjYXVzZTogZXJyb3IgfSxcbiAgICApO1xuICB9XG59XG5cbi8qKlxuICog7IOd7ISx65CcIGNvbmXsnYQg6riw7KG0IGNvbmXqs7wg67OR7ZWp7ZWp64uI64ukLlxuICpcbiAqIOq4sOyhtCBjb25l7J20IOyeiOycvOuptCDrs7TsobTtlZjqs6AsIOyXhuuKlCDqsr3smrDsl5Drp4wg7IOd7ISx65CcIGNvbmXsnYQg7IKs7Jqp7ZWp64uI64ukLlxuICovXG5mdW5jdGlvbiBtZXJnZVdpdGhFeGlzdGluZyhcbiAgZ2VuZXJhdGVkOiBDb25lR2VuZXJhdGlvblJlc3VsdCxcbiAgZXhpc3Rpbmc6IFJlY29yZDxzdHJpbmcsIENvbmU+LFxuKTogQ29uZUdlbmVyYXRpb25SZXN1bHQge1xuICBjb25zdCByZXN1bHQgPSB7IC4uLmdlbmVyYXRlZCB9O1xuXG4gIGNvbnN0IGVudGl0eUtleSA9IGBlbnRpdHk6JHtnZW5lcmF0ZWQuZW50aXR5Q29uZSA/IFwicHJlc2VudFwiIDogXCJtaXNzaW5nXCJ9YDtcbiAgaWYgKGV4aXN0aW5nW2VudGl0eUtleV0pIHtcbiAgICByZXN1bHQuZW50aXR5Q29uZSA9IGV4aXN0aW5nW2VudGl0eUtleV07XG4gIH1cblxuICBmb3IgKGNvbnN0IHByb3BOYW1lIG9mIE9iamVjdC5rZXlzKGdlbmVyYXRlZC5wcm9wQ29uZXMpKSB7XG4gICAgY29uc3Qga2V5ID0gYHByb3A6JHtwcm9wTmFtZX1gO1xuICAgIGlmIChleGlzdGluZ1trZXldKSB7XG4gICAgICByZXN1bHQucHJvcENvbmVzW3Byb3BOYW1lXSA9IGV4aXN0aW5nW2tleV07XG4gICAgfVxuICB9XG5cbiAgZm9yIChjb25zdCBlbnVtSWQgb2YgT2JqZWN0LmtleXMoZ2VuZXJhdGVkLmVudW1Db25lcykpIHtcbiAgICBjb25zdCBrZXkgPSBgZW51bToke2VudW1JZH1gO1xuICAgIGlmIChleGlzdGluZ1trZXldKSB7XG4gICAgICByZXN1bHQuZW51bUNvbmVzW2VudW1JZF0gPSBleGlzdGluZ1trZXldO1xuICAgIH1cbiAgfVxuXG4gIGZvciAoY29uc3Qgc3Vic2V0S2V5IG9mIE9iamVjdC5rZXlzKGdlbmVyYXRlZC5zdWJzZXRDb25lcykpIHtcbiAgICBjb25zdCBrZXkgPSBgc3Vic2V0OiR7c3Vic2V0S2V5fWA7XG4gICAgaWYgKGV4aXN0aW5nW2tleV0pIHtcbiAgICAgIHJlc3VsdC5zdWJzZXRDb25lc1tzdWJzZXRLZXldID0gZXhpc3Rpbmdba2V5XTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIG5vdGXqsIAg7JeG64qUIGNvbmXrp4wg7IOd7ISx7ZWY6rOgIOuCmOuouOyngOuKlCDrs7TsobTtlanri4jri6QuXG4gKlxuICog6riw7KG0IGNvbmXsl5Agbm90ZeqwgCDsnojsnLzrqbQg67O07KG07ZWY6rOgLCDsl4bsnLzrqbQg7IOI66GcIOyDneyEseuQnCBjb25l7J2EIOyCrOyaqe2VqeuLiOuLpC5cbiAqL1xuZnVuY3Rpb24gbWVyZ2VPbmx5RW1wdHkoXG4gIGdlbmVyYXRlZDogQ29uZUdlbmVyYXRpb25SZXN1bHQsXG4gIGV4aXN0aW5nOiBSZWNvcmQ8c3RyaW5nLCBDb25lPixcbik6IENvbmVHZW5lcmF0aW9uUmVzdWx0IHtcbiAgY29uc3QgcmVzdWx0ID0geyAuLi5nZW5lcmF0ZWQgfTtcblxuICAvLyBFbnRpdHkgY29uZTogc2NhbGXsnbQg7J6I7Jy866m0IOuztOyhtFxuICBjb25zdCBlbnRpdHlLZXkgPSBgZW50aXR5OiR7Z2VuZXJhdGVkLmVudGl0eUNvbmUgPyBcInByZXNlbnRcIiA6IFwibWlzc2luZ1wifWA7XG4gIGlmIChleGlzdGluZ1tlbnRpdHlLZXldPy5ub3RlKSB7XG4gICAgcmVzdWx0LmVudGl0eUNvbmUgPSBleGlzdGluZ1tlbnRpdHlLZXldO1xuICB9XG5cbiAgLy8gUHJvcCBjb25lczogc2NhbGXsnbQg7J6I7Jy866m0IOuztOyhtFxuICBmb3IgKGNvbnN0IHByb3BOYW1lIG9mIE9iamVjdC5rZXlzKGdlbmVyYXRlZC5wcm9wQ29uZXMpKSB7XG4gICAgY29uc3Qga2V5ID0gYHByb3A6JHtwcm9wTmFtZX1gO1xuICAgIGlmIChleGlzdGluZ1trZXldPy5ub3RlKSB7XG4gICAgICByZXN1bHQucHJvcENvbmVzW3Byb3BOYW1lXSA9IGV4aXN0aW5nW2tleV07XG4gICAgfVxuICB9XG5cbiAgLy8gRW51bSBjb25lczogc2NhbGXsnbQg7J6I7Jy866m0IOuztOyhtFxuICBmb3IgKGNvbnN0IGVudW1JZCBvZiBPYmplY3Qua2V5cyhnZW5lcmF0ZWQuZW51bUNvbmVzKSkge1xuICAgIGNvbnN0IGtleSA9IGBlbnVtOiR7ZW51bUlkfWA7XG4gICAgaWYgKGV4aXN0aW5nW2tleV0/Lm5vdGUpIHtcbiAgICAgIHJlc3VsdC5lbnVtQ29uZXNbZW51bUlkXSA9IGV4aXN0aW5nW2tleV07XG4gICAgfVxuICB9XG5cbiAgLy8gU3Vic2V0IGNvbmVzOiBzY2FsZeydtCDsnojsnLzrqbQg67O07KG0XG4gIGZvciAoY29uc3Qgc3Vic2V0S2V5IG9mIE9iamVjdC5rZXlzKGdlbmVyYXRlZC5zdWJzZXRDb25lcykpIHtcbiAgICBjb25zdCBrZXkgPSBgc3Vic2V0OiR7c3Vic2V0S2V5fWA7XG4gICAgaWYgKGV4aXN0aW5nW2tleV0/Lm5vdGUpIHtcbiAgICAgIHJlc3VsdC5zdWJzZXRDb25lc1tzdWJzZXRLZXldID0gZXhpc3Rpbmdba2V5XTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFpREEsZUFBc0IsY0FDcEIsU0FDQSxlQUEwQyxDQUFDLEdBQ1o7Q0FDL0IsTUFBTSxTQUFTLFVBQVU7Q0FFekIsTUFBTSxFQUFFLE1BQU0sY0FBYyxlQUFlLE1BQU0saUJBRGxDLFlBQVksT0FFekIsR0FDQSxRQUNBLGFBQWEsWUFDZjtDQUNBLE1BQU0sU0FBUyxrQkFBa0IsWUFBWTtDQUM3QyxPQUFPLGFBQWE7Q0FFcEIsSUFBSSxRQUFRLGVBQWU7RUFDekIsSUFBSSxRQUFRLFdBQ1YsT0FBTyxlQUFlLFFBQVEsUUFBUSxhQUFhO0VBRXJELE9BQU8sa0JBQWtCLFFBQVEsUUFBUSxhQUFhO0NBQ3hEO0NBRUEsT0FBTztBQUNUOzs7Ozs7QUFPQSxTQUFTLFlBQW9CO0NBRTNCLElBQUk7Q0FFSixJQUFJO0VBRUYsTUFBTSxFQUFFLFlBQUEsU0FBQSxHQUFBLGFBQUEsV0FBQTtFQUNSLFNBQVMsT0FBTyxTQUFTO0NBQzNCLFFBQVE7RUFFTixTQUFTO0NBQ1g7Q0FFQSxJQUFJLENBQUMsUUFDSCxTQUFTLFFBQVEsSUFBSTtDQUd2QixJQUFJLENBQUMsUUFDSCxNQUFNLElBQUksTUFDUix1R0FFRjtDQUdGLE9BQU87QUFDVDs7Ozs7Ozs7QUFTQSxTQUFTLG9CQUE0QjtDQUNuQyxJQUFJO0VBQ0YsTUFB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
|
|
@@ -91,4 +91,4 @@ var init__batch_update = __esmMin((() => {
|
|
|
91
91
|
init__batch_update();
|
|
92
92
|
export { batchUpdate, init__batch_update };
|
|
93
93
|
|
|
94
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiX2JhdGNoX3VwZGF0ZS5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi9zcmMvZGF0YWJhc2UvX2JhdGNoX3VwZGF0ZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICDslYTrnpjsnZgg66eB7YGs7JeQ7IScIOywuOqzoO2VtOyEnCDqsIDsoLjsmKgg7IaM7Iqk7L2U65OcXG4gIGh0dHBzOi8vZ2l0aHViLmNvbS9rbmV4L2tuZXgvaXNzdWVzLzU3MTZcbiovXG5cbmltcG9ydCB7IGdldExvZ2dlciB9IGZyb20gXCJAbG9ndGFwZS9sb2d0YXBlXCI7XG5pbXBvcnQgeyB0eXBlIEtuZXggfSBmcm9tIFwia25leFwiO1xuXG5jb25zdCBsb2dnZXIgPSBnZXRMb2dnZXIoW1wic29uYW11XCIsIFwiaW50ZXJuYWxcIiwgXCJiYXRjaC11cGRhdGVcIl0pO1xuXG50eXBlIENvbHVtblZhbHVlID0gc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB8IG51bGw7XG5leHBvcnQgdHlwZSBSb3dXaXRoSWQ8SWQgZXh0ZW5kcyBzdHJpbmc+ID0ge1xuICBba2V5IGluIElkXTogQ29sdW1uVmFsdWU7XG59ICYgUmVjb3JkPHN0cmluZywgQ29sdW1uVmFsdWU+O1xuXG4vKipcbiAqIEJhdGNoIHVwZGF0ZSByb3dzIGluIGEgdGFibGUuIFRlY2huaWNhbGx5IGl0cyBhIHBhdGNoIHNpbmNlIGl0IG9ubHkgdXBkYXRlcyB0aGUgc3BlY2lmaWVkIGNvbHVtbnMuIEFueSBvbWl0dGVkIGNvbHVtbnMgd2lsbCBub3QgYmUgYWZmZWN0ZWRcbiAqIEBwYXJhbSBrbmV4XG4gKiBAcGFyYW0gdGFibGVOYW1lXG4gKiBAcGFyYW0gaWRzXG4gKiBAcGFyYW0gcm93c1xuICogQHBhcmFtIGNodW5rU2l6ZVxuICogQHBhcmFtIHRyeFxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYmF0Y2hVcGRhdGU8SWQgZXh0ZW5kcyBzdHJpbmc+KFxuICBrbmV4OiBLbmV4LFxuICB0YWJsZU5hbWU6IHN0cmluZyxcbiAgaWRzOiBJZFtdLFxuICByb3dzOiBSb3dXaXRoSWQ8SWQ+W10sXG4gIGNodW5rU2l6ZSA9IDUwLFxuICB0cng6IEtuZXguVHJhbnNhY3Rpb24gfCBudWxsID0gbnVsbCxcbikge1xuICBjb25zdCBjaHVua3M6IFJvd1dpdGhJZDxJZD5bXVtdID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgcm93cy5sZW5ndGg7IGkgKz0gY2h1bmtTaXplKSB7XG4gICAgY2h1bmtzLnB1c2gocm93cy5zbGljZShpLCBpICsgY2h1bmtTaXplKSk7XG4gIH1cblxuICBjb25zdCBleGVjdXRlVXBkYXRlID0gYXN5bmMgKGNodW5rOiBSb3dXaXRoSWQ8SWQ+W10sIHRyYW5zYWN0aW9uOiBLbmV4LlRyYW5zYWN0aW9uKSA9PiB7XG4gICAgY29uc3QgcmF3UXVlcnkgPSBnZW5lcmF0ZUJhdGNoVXBkYXRlU1FMKGtuZXgsIHRhYmxlTmFtZSwgY2h1bmssIGlkcyk7XG4gICAgcmV0dXJuIHJhd1F1ZXJ5LnRyYW5zYWN0aW5nKHRyYW5zYWN0aW9uKTtcbiAgfTtcblxuICBpZiAodHJ4KSB7XG4gICAgZm9yIChjb25zdCBjaHVuayBvZiBjaHVua3MpIHtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhcIlByb2Nlc3NpbmcgQmF0Y2ggQ2h1bmsgaW4gRXhpc3RpbmcgVHJhbnNhY3Rpb246IHtjdXJyZW50fSAvIHt0b3RhbH1cIiwge1xuICAgICAgICBjdXJyZW50OiBjaHVuay5sZW5ndGgsXG4gICAgICAgIHRvdGFsOiBjaHVua3MubGVuZ3RoLFxuICAgICAgfSk7XG4gICAgICBhd2FpdCBleGVjdXRlVXBkYXRlKGNodW5rLCB0cngpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBhd2FpdCBrbmV4LnRyYW5zYWN0aW9uKGFzeW5jIChuZXdUcngpID0+IHtcbiAgICAgIGZvciAoY29uc3QgY2h1bmsgb2YgY2h1bmtzKSB7XG4gICAgICAgIGxvZ2dlci5kZWJ1ZyhcIlByb2Nlc3NpbmcgQmF0Y2ggQ2h1bmsgaW4gTmV3IFRyYW5zYWN0aW9uOiB7Y3VycmVudH0gLyB7dG90YWx9XCIsIHtcbiAgICAgICAgICBjdXJyZW50OiBjaHVuay5sZW5ndGgsXG4gICAgICAgICAgdG90YWw6IGNodW5rcy5sZW5ndGgsXG4gICAgICAgIH0pO1xuICAgICAgICBhd2FpdCBleGVjdXRlVXBkYXRlKGNodW5rLCBuZXdUcngpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG5cbi8qKlxuICogR2VuZXJhdGUgYSBzZXQgb2YgdW5pcXVlIGtleXMgaW4gYSBkYXRhIGFycmF5XG4gKlxuICogRXhhbXBsZTpcbiAqIFsgeyBhOiAxLCBiOiAyIH0sIHsgYTogMywgYzogNCB9IF0gPT4gU2V0KFsgXCJhXCIsIFwiYlwiLCBcImNcIiBdKVxuICogQHBhcmFtIGRhdGFcbiAqL1xuZnVuY3Rpb24gZ2VuZXJhdGVLZXlTZXRGcm9tRGF0YShkYXRhOiBSZWNvcmQ8c3RyaW5nLCBDb2x1bW5WYWx1ZT5bXSkge1xuICBjb25zdCBrZXlTZXQ6IFNldDxzdHJpbmc+ID0gbmV3IFNldCgpO1xuICBmb3IgKGNvbnN0IHJvdyBvZiBkYXRhKSB7XG4gICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMocm93KSkge1xuICAgICAga2V5U2V0LmFkZChrZXkpO1xuICAgIH1cbiAgfVxuICByZXR1cm4ga2V5U2V0O1xufVxuXG5mdW5jdGlvbiBnZW5lcmF0ZUJhdGNoVXBkYXRlU1FMPElkIGV4dGVuZHMgc3RyaW5nPihcbiAgZGI6IEtuZXgsXG4gIHRhYmxlTmFtZTogc3RyaW5nLFxuICBkYXRhOiBSZWNvcmQ8c3RyaW5nLCBDb2x1bW5WYWx1ZT5bXSxcbiAgaWRlbnRpZmllcnM6IElkW10sXG4pOiBLbmV4LlJhdyB7XG4gIGNvbnN0IGtleVNldCA9IGdlbmVyYXRlS2V5U2V0RnJvbURhdGEoZGF0YSk7XG4gIGNvbnN0IGFsbEJpbmRpbmdzOiAoc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB8IG51bGwpW10gPSBbXTtcblxuICBjb25zdCBpbnZhbGlkSWRlbnRpZmllcnMgPSBpZGVudGlmaWVycy5maWx0ZXIoKGlkKSA9PiAha2V5U2V0LmhhcyhpZCkpO1xuICBpZiAoaW52YWxpZElkZW50aWZpZXJzLmxlbmd0aCA+
|
|
94
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiX2JhdGNoX3VwZGF0ZS5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi9zcmMvZGF0YWJhc2UvX2JhdGNoX3VwZGF0ZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICDslYTrnpjsnZgg66eB7YGs7JeQ7IScIOywuOqzoO2VtOyEnCDqsIDsoLjsmKgg7IaM7Iqk7L2U65OcXG4gIGh0dHBzOi8vZ2l0aHViLmNvbS9rbmV4L2tuZXgvaXNzdWVzLzU3MTZcbiovXG5cbmltcG9ydCB7IGdldExvZ2dlciB9IGZyb20gXCJAbG9ndGFwZS9sb2d0YXBlXCI7XG5pbXBvcnQgeyB0eXBlIEtuZXggfSBmcm9tIFwia25leFwiO1xuXG5jb25zdCBsb2dnZXIgPSBnZXRMb2dnZXIoW1wic29uYW11XCIsIFwiaW50ZXJuYWxcIiwgXCJiYXRjaC11cGRhdGVcIl0pO1xuXG50eXBlIENvbHVtblZhbHVlID0gc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB8IG51bGw7XG5leHBvcnQgdHlwZSBSb3dXaXRoSWQ8SWQgZXh0ZW5kcyBzdHJpbmc+ID0ge1xuICBba2V5IGluIElkXTogQ29sdW1uVmFsdWU7XG59ICYgUmVjb3JkPHN0cmluZywgQ29sdW1uVmFsdWU+O1xuXG4vKipcbiAqIEJhdGNoIHVwZGF0ZSByb3dzIGluIGEgdGFibGUuIFRlY2huaWNhbGx5IGl0cyBhIHBhdGNoIHNpbmNlIGl0IG9ubHkgdXBkYXRlcyB0aGUgc3BlY2lmaWVkIGNvbHVtbnMuIEFueSBvbWl0dGVkIGNvbHVtbnMgd2lsbCBub3QgYmUgYWZmZWN0ZWRcbiAqIEBwYXJhbSBrbmV4XG4gKiBAcGFyYW0gdGFibGVOYW1lXG4gKiBAcGFyYW0gaWRzXG4gKiBAcGFyYW0gcm93c1xuICogQHBhcmFtIGNodW5rU2l6ZVxuICogQHBhcmFtIHRyeFxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYmF0Y2hVcGRhdGU8SWQgZXh0ZW5kcyBzdHJpbmc+KFxuICBrbmV4OiBLbmV4LFxuICB0YWJsZU5hbWU6IHN0cmluZyxcbiAgaWRzOiBJZFtdLFxuICByb3dzOiBSb3dXaXRoSWQ8SWQ+W10sXG4gIGNodW5rU2l6ZSA9IDUwLFxuICB0cng6IEtuZXguVHJhbnNhY3Rpb24gfCBudWxsID0gbnVsbCxcbikge1xuICBjb25zdCBjaHVua3M6IFJvd1dpdGhJZDxJZD5bXVtdID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgcm93cy5sZW5ndGg7IGkgKz0gY2h1bmtTaXplKSB7XG4gICAgY2h1bmtzLnB1c2gocm93cy5zbGljZShpLCBpICsgY2h1bmtTaXplKSk7XG4gIH1cblxuICBjb25zdCBleGVjdXRlVXBkYXRlID0gYXN5bmMgKGNodW5rOiBSb3dXaXRoSWQ8SWQ+W10sIHRyYW5zYWN0aW9uOiBLbmV4LlRyYW5zYWN0aW9uKSA9PiB7XG4gICAgY29uc3QgcmF3UXVlcnkgPSBnZW5lcmF0ZUJhdGNoVXBkYXRlU1FMKGtuZXgsIHRhYmxlTmFtZSwgY2h1bmssIGlkcyk7XG4gICAgcmV0dXJuIHJhd1F1ZXJ5LnRyYW5zYWN0aW5nKHRyYW5zYWN0aW9uKTtcbiAgfTtcblxuICBpZiAodHJ4KSB7XG4gICAgZm9yIChjb25zdCBjaHVuayBvZiBjaHVua3MpIHtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhcIlByb2Nlc3NpbmcgQmF0Y2ggQ2h1bmsgaW4gRXhpc3RpbmcgVHJhbnNhY3Rpb246IHtjdXJyZW50fSAvIHt0b3RhbH1cIiwge1xuICAgICAgICBjdXJyZW50OiBjaHVuay5sZW5ndGgsXG4gICAgICAgIHRvdGFsOiBjaHVua3MubGVuZ3RoLFxuICAgICAgfSk7XG4gICAgICBhd2FpdCBleGVjdXRlVXBkYXRlKGNodW5rLCB0cngpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBhd2FpdCBrbmV4LnRyYW5zYWN0aW9uKGFzeW5jIChuZXdUcngpID0+IHtcbiAgICAgIGZvciAoY29uc3QgY2h1bmsgb2YgY2h1bmtzKSB7XG4gICAgICAgIGxvZ2dlci5kZWJ1ZyhcIlByb2Nlc3NpbmcgQmF0Y2ggQ2h1bmsgaW4gTmV3IFRyYW5zYWN0aW9uOiB7Y3VycmVudH0gLyB7dG90YWx9XCIsIHtcbiAgICAgICAgICBjdXJyZW50OiBjaHVuay5sZW5ndGgsXG4gICAgICAgICAgdG90YWw6IGNodW5rcy5sZW5ndGgsXG4gICAgICAgIH0pO1xuICAgICAgICBhd2FpdCBleGVjdXRlVXBkYXRlKGNodW5rLCBuZXdUcngpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG5cbi8qKlxuICogR2VuZXJhdGUgYSBzZXQgb2YgdW5pcXVlIGtleXMgaW4gYSBkYXRhIGFycmF5XG4gKlxuICogRXhhbXBsZTpcbiAqIFsgeyBhOiAxLCBiOiAyIH0sIHsgYTogMywgYzogNCB9IF0gPT4gU2V0KFsgXCJhXCIsIFwiYlwiLCBcImNcIiBdKVxuICogQHBhcmFtIGRhdGFcbiAqL1xuZnVuY3Rpb24gZ2VuZXJhdGVLZXlTZXRGcm9tRGF0YShkYXRhOiBSZWNvcmQ8c3RyaW5nLCBDb2x1bW5WYWx1ZT5bXSkge1xuICBjb25zdCBrZXlTZXQ6IFNldDxzdHJpbmc+ID0gbmV3IFNldCgpO1xuICBmb3IgKGNvbnN0IHJvdyBvZiBkYXRhKSB7XG4gICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMocm93KSkge1xuICAgICAga2V5U2V0LmFkZChrZXkpO1xuICAgIH1cbiAgfVxuICByZXR1cm4ga2V5U2V0O1xufVxuXG5mdW5jdGlvbiBnZW5lcmF0ZUJhdGNoVXBkYXRlU1FMPElkIGV4dGVuZHMgc3RyaW5nPihcbiAgZGI6IEtuZXgsXG4gIHRhYmxlTmFtZTogc3RyaW5nLFxuICBkYXRhOiBSZWNvcmQ8c3RyaW5nLCBDb2x1bW5WYWx1ZT5bXSxcbiAgaWRlbnRpZmllcnM6IElkW10sXG4pOiBLbmV4LlJhdyB7XG4gIGNvbnN0IGtleVNldCA9IGdlbmVyYXRlS2V5U2V0RnJvbURhdGEoZGF0YSk7XG4gIGNvbnN0IGFsbEJpbmRpbmdzOiAoc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB8IG51bGwpW10gPSBbXTtcblxuICBjb25zdCBpbnZhbGlkSWRlbnRpZmllcnMgPSBpZGVudGlmaWVycy5maWx0ZXIoKGlkKSA9PiAha2V5U2V0LmhhcyhpZCkpO1xuICBpZiAoaW52YWxpZElkZW50aWZpZXJzLmxlbmd0aCA+IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgSW52YWxpZCBpZGVudGlmaWVyczogJHtpbnZhbGlkSWRlbnRpZmllcnMuam9pbihcIiwgXCIpfS4gSWRlbnRpZmllcnMgbXVzdCBleGlzdCBpbiB0aGUgZGF0YWAsXG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IGNhc2VzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIGZvciAoY29uc3Qga2V5IG9mIGtleVNldCkge1xuICAgIC8vIFNBRkVUWTog7L+866asIOu5jOuNlOydmCDsoJzrhKTrpq0g6rOE7JW96rO8IOyEoO2WiSDqsoDspp3snbQg7J20IO2DgOyeheydhCDrs7TsnqXtlanri4jri6QuXG4gICAgaWYgKGlkZW50aWZpZXJzLmluY2x1ZGVzKGtleSBhcyBJZCkpIGNvbnRpbnVlO1xuXG4gICAgY29uc3QgY2FzZUJpbmRpbmdzOiAoc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB8IG51bGwpW10gPSBbXTtcbiAgICBjb25zdCB3aGVuQ2xhdXNlczogc3RyaW5nW10gPSBbXTtcblxuICAgIGZvciAoY29uc3Qgcm93IG9mIGRhdGEpIHtcbiAgICAgIGlmIChPYmplY3QuaGFzT3duKHJvdywga2V5KSkge1xuICAgICAgICBjb25zdCB3aGVyZVBhcnRzID0gaWRlbnRpZmllcnMubWFwKCgpID0+IGA/PyA9ID9gKS5qb2luKFwiIEFORCBcIik7XG4gICAgICAgIHdoZW5DbGF1c2VzLnB1c2goYFdIRU4gKCR7d2hlcmVQYXJ0c30pIFRIRU4gP2ApO1xuXG4gICAgICAgIC8vIGlkZW50aWZpZXIg7J2066aE6rO8IOqwkuuTpOydhCDstpTqsIBcbiAgICAgICAgZm9yIChjb25zdCBpZCBvZiBpZGVudGlmaWVycykge1xuICAgICAgICAgIGNhc2VCaW5kaW5ncy5wdXNoKGlkLCByb3dbaWRdKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBUSEVOIOqwkiDstpTqsIBcbiAgICAgICAgY2FzZUJpbmRpbmdzLnB1c2gocm93W2tleV0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHdoZW5UaGVuID0gd2hlbkNsYXVzZXMuam9pbihcIiBcIik7XG4gICAgY2FzZXMucHVzaChgPz8gPSBDQVNFICR7d2hlblRoZW59IEVMU0UgPz8gRU5EYCk7XG5cbiAgICAvLyDsu6zrn7zrqoUgMuqwnCDstpTqsIAgKFNFVOydmCDsu6zrn7zrqoUsIEVMU0XsnZgg7Lus65+866qFKVxuICAgIGFsbEJpbmRpbmdzLnB1c2goa2V5KTtcbiAgICBhbGxCaW5kaW5ncy5wdXNoKC4uLmNhc2VCaW5kaW5ncyk7XG4gICAgYWxsQmluZGluZ3MucHVzaChrZXkpO1xuICB9XG5cbiAgY29uc3Qgd2hlcmVJbkNsYXVzZXMgPSBpZGVudGlmaWVyc1xuICAgIC5tYXAoKF9jb2wpID0+IGA/PyBJTiAoJHtkYXRhLm1hcCgoKSA9PiBcIj9cIikuam9pbihcIiwgXCIpfSlgKVxuICAgIC5qb2luKFwiIEFORCBcIik7XG5cbiAgY29uc3Qgd2hlcmVJbkJpbmRpbmdzOiAoc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB8IG51bGwpW10gPSBbXTtcbiAgZm9yIChjb25zdCBjb2wgb2YgaWRlbnRpZmllcnMpIHtcbiAgICB3aGVyZUluQmluZGluZ3MucHVzaChjb2wpO1xuICAgIGZvciAoY29uc3Qgcm93IG9mIGRhdGEpIHtcbiAgICAgIHdoZXJlSW5CaW5kaW5ncy5wdXNoKHJvd1tjb2xdKTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBzcWwgPSBkYi5yYXcoYFVQREFURSA/PyBTRVQgJHtjYXNlcy5qb2luKFwiLCBcIil9IFdIRVJFICR7d2hlcmVJbkNsYXVzZXN9YCwgW1xuICAgIHRhYmxlTmFtZSxcbiAgICAuLi5hbGxCaW5kaW5ncyxcbiAgICAuLi53aGVyZUluQmluZGluZ3MsXG4gIF0pO1xuXG4gIHJldHVybiBzcWw7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
|
|
@@ -9,7 +9,10 @@ import { Puri } from "./puri";
|
|
|
9
9
|
import { type InferAllSubsets, type PuriLoaderQueries, type PuriSubsetFn } from "./puri-subset.types";
|
|
10
10
|
import { PuriWrapper } from "./puri-wrapper";
|
|
11
11
|
import { type UnionExtractedTTables } from "./puri.types";
|
|
12
|
-
type
|
|
12
|
+
type DatabaseRecordValue = string | number | boolean | bigint | Date | Buffer | Knex.Raw | null | DatabaseRecordValue[] | {
|
|
13
|
+
[key: string]: DatabaseRecordValue;
|
|
14
|
+
};
|
|
15
|
+
type DatabaseRecord = Record<string, DatabaseRecordValue | undefined>;
|
|
13
16
|
/**
|
|
14
17
|
* 모든 Model 클래스의 기본 클래스
|
|
15
18
|
*
|
|
@@ -18,7 +21,9 @@ type UnknownDBRecord = Record<string, unknown>;
|
|
|
18
21
|
* @template TSubsetQueries - 서브셋 쿼리 함수 객체
|
|
19
22
|
* @template TLoaderQueries - 서브셋별 로더 쿼리 배열 객체
|
|
20
23
|
*/
|
|
21
|
-
export declare class BaseModelClass<TSubsetKey extends string = never, TSubsetMapping extends
|
|
24
|
+
export declare class BaseModelClass<TSubsetKey extends string = never, TSubsetMapping extends {
|
|
25
|
+
[K in TSubsetKey]: TSubsetMapping[K];
|
|
26
|
+
} = never, TSubsetQueries extends Record<TSubsetKey, PuriSubsetFn> = never, TLoaderQueries extends PuriLoaderQueries<TSubsetKey> = never> {
|
|
22
27
|
readonly modelName: string;
|
|
23
28
|
protected subsetQueries?: TSubsetQueries | undefined;
|
|
24
29
|
protected loaderQueries?: TLoaderQueries | undefined;
|
|
@@ -28,7 +33,7 @@ export declare class BaseModelClass<TSubsetKey extends string = never, TSubsetMa
|
|
|
28
33
|
getPuri(which: DBPreset): PuriWrapper;
|
|
29
34
|
private getSubsetQueryPuri;
|
|
30
35
|
destroy(): Promise<void>;
|
|
31
|
-
getInsertedIds(wdb: Knex, rows:
|
|
36
|
+
getInsertedIds(wdb: Knex, rows: DatabaseRecord[], tableName: string, unqKeyFields: string[], chunkSize?: number): Promise<number[]>;
|
|
32
37
|
/**
|
|
33
38
|
* 특정 서브셋에 대한 쿼리 빌더 획득
|
|
34
39
|
*
|
|
@@ -60,11 +65,10 @@ export declare class BaseModelClass<TSubsetKey extends string = never, TSubsetMa
|
|
|
60
65
|
* 4. Hydrate (flat → 중첩 객체)
|
|
61
66
|
* 5. Enhancer 적용 (virtual 필드 계산)
|
|
62
67
|
*/
|
|
63
|
-
executeSubsetQuery<T extends TSubsetKey, TComputedResults extends InferAllSubsets<TSubsetQueries, TLoaderQueries>, LP extends {
|
|
68
|
+
executeSubsetQuery<T extends TSubsetKey, TComputedResults extends InferAllSubsets<TSubsetQueries, TLoaderQueries>, TFilter extends object, LP extends {
|
|
64
69
|
num?: number;
|
|
65
70
|
page?: number;
|
|
66
71
|
queryMode?: SonamuQueryMode;
|
|
67
|
-
sonamuFilter?: Record<string, unknown>;
|
|
68
72
|
}>(params: {
|
|
69
73
|
subset: T;
|
|
70
74
|
qb: Puri<any, any, any>;
|
|
@@ -72,7 +76,7 @@ export declare class BaseModelClass<TSubsetKey extends string = never, TSubsetMa
|
|
|
72
76
|
num: number;
|
|
73
77
|
page: number;
|
|
74
78
|
queryMode?: SonamuQueryMode;
|
|
75
|
-
sonamuFilter?:
|
|
79
|
+
sonamuFilter?: TFilter;
|
|
76
80
|
};
|
|
77
81
|
debug?: boolean;
|
|
78
82
|
optimizeCountQuery?: boolean;
|
|
@@ -88,7 +92,7 @@ export declare class BaseModelClass<TSubsetKey extends string = never, TSubsetMa
|
|
|
88
92
|
* @param qb Puri QueryBuilder 인스턴스
|
|
89
93
|
* @param filters FilterQuery 객체
|
|
90
94
|
*/
|
|
91
|
-
protected applySonamuFilters<TEntity
|
|
95
|
+
protected applySonamuFilters<TEntity>(qb: Puri<any, any, any>, filters?: FilterQuery<TEntity>): void;
|
|
92
96
|
/**
|
|
93
97
|
* 단일 연산자를 QueryBuilder에 적용
|
|
94
98
|
*/
|
|
@@ -115,18 +119,26 @@ export declare class BaseModelClass<TSubsetKey extends string = never, TSubsetMa
|
|
|
115
119
|
* - `user__name` → `{ user: { name } }`
|
|
116
120
|
* - nullable relation의 경우 id 필드가 null이면 객체 자체를 null로
|
|
117
121
|
*/
|
|
118
|
-
hydrate<T extends
|
|
122
|
+
hydrate<T extends object>(rows: T[]): T[];
|
|
119
123
|
}
|
|
120
124
|
/**
|
|
121
125
|
* Enhancer 파라미터 조건부 타입
|
|
122
126
|
* RequiredEnhancerKeys가 없으면 enhancers 선택적, 있으면 필수
|
|
123
127
|
*/
|
|
124
|
-
type EnhancerParam<TSubsetKey extends string, TComputedResults extends
|
|
128
|
+
type EnhancerParam<TSubsetKey extends string, TComputedResults extends {
|
|
129
|
+
[K in TSubsetKey]: TComputedResults[K];
|
|
130
|
+
}, TSubsetMapping extends {
|
|
131
|
+
[K in TSubsetKey]: TSubsetMapping[K];
|
|
132
|
+
}, TSubsetQueries extends Record<TSubsetKey, PuriSubsetFn>> = [RequiredEnhancerKeys<TSubsetKey, TComputedResults, TSubsetMapping>] extends [never] ? {
|
|
125
133
|
enhancers?: EnhancerMap<TSubsetKey, TComputedResults, TSubsetMapping, TSubsetQueries>;
|
|
126
134
|
} : {
|
|
127
135
|
enhancers: EnhancerMap<TSubsetKey, TComputedResults, TSubsetMapping, TSubsetQueries>;
|
|
128
136
|
};
|
|
129
|
-
type RequiredEnhancerKeys<TSubsetKey extends string, TComputedResults extends
|
|
137
|
+
type RequiredEnhancerKeys<TSubsetKey extends string, TComputedResults extends {
|
|
138
|
+
[K in TSubsetKey]: TComputedResults[K];
|
|
139
|
+
}, TSubsetMapping extends {
|
|
140
|
+
[K in TSubsetKey]: TSubsetMapping[K];
|
|
141
|
+
}> = {
|
|
130
142
|
[K in TSubsetKey]: TComputedResults[K] extends TSubsetMapping[K] ? never : K;
|
|
131
143
|
}[TSubsetKey];
|
|
132
144
|
export declare const BaseModel: BaseModelClass<never, never, never, never>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base-model.d.ts","sourceRoot":"","sources":["../../src/database/base-model.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,KAAK,IAAI,EAAE,MAAM,MAAM,CAAC;AAKjC,OAAO,EAAuB,KAAK,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAGxE,OAAO,EAAE,KAAK,oBAAoB,EAAE,KAAK,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjF,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"base-model.d.ts","sourceRoot":"","sources":["../../src/database/base-model.ts"],"names":[],"mappings":"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"}
|