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
package/dist/api/caster.js
CHANGED
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import { __esmMin } from "../_virtual/_rolldown/runtime.js";
|
|
2
|
-
import {
|
|
2
|
+
import { init_runtime_value, isObjectValue, isStringValue } from "../utils/runtime-value.js";
|
|
3
|
+
import { z } from "zod";
|
|
3
4
|
import assert from "assert";
|
|
4
5
|
//#region src/api/caster.ts
|
|
5
6
|
function isNumberType(zodType) {
|
|
6
|
-
return zodType instanceof z
|
|
7
|
+
return zodType instanceof z.ZodNumber;
|
|
7
8
|
}
|
|
8
9
|
function isNullOrOptional(zodType) {
|
|
9
|
-
return zodType instanceof z
|
|
10
|
+
return zodType instanceof z.ZodNullable || zodType instanceof z.ZodOptional;
|
|
10
11
|
}
|
|
11
12
|
function isZodNumberAnyway(zodType) {
|
|
12
13
|
if (isNumberType(zodType)) return true;
|
|
@@ -14,31 +15,30 @@ function isZodNumberAnyway(zodType) {
|
|
|
14
15
|
return false;
|
|
15
16
|
}
|
|
16
17
|
function caster(zodType, raw) {
|
|
17
|
-
if (isZodNumberAnyway(zodType) &&
|
|
18
|
-
else if (zodType instanceof z
|
|
18
|
+
if (isZodNumberAnyway(zodType) && isStringValue(raw)) return Number(raw);
|
|
19
|
+
else if (zodType instanceof z.ZodUnion && zodType.options.some((opt) => isZodNumberAnyway(opt))) if (Array.isArray(raw)) {
|
|
19
20
|
const numType = zodType.options.find((opt) => isNumberType(opt));
|
|
20
21
|
assert(numType !== void 0);
|
|
21
22
|
return raw.map((elem) => caster(numType, elem));
|
|
22
23
|
} else return Number(raw);
|
|
23
|
-
else if (zodType instanceof z
|
|
24
|
-
else if (raw !== null && Array.isArray(raw) && zodType instanceof z
|
|
25
|
-
else if (zodType instanceof z
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
else if (zodType instanceof z$1.ZodOptional) return caster(zodType.def.innerType, raw);
|
|
30
|
-
else if (zodType instanceof z$1.ZodNullable) return caster(zodType.def.innerType, raw);
|
|
31
|
-
else if (zodType instanceof z$1.ZodDate && raw !== null && raw !== void 0 && new Date(raw).toString() !== "Invalid Date") return new Date(raw);
|
|
24
|
+
else if (zodType instanceof z.ZodBoolean && (raw === "true" || raw === "false")) return raw === "true";
|
|
25
|
+
else if (raw !== null && Array.isArray(raw) && zodType instanceof z.ZodArray) return raw.map((elem) => caster(zodType.element, elem));
|
|
26
|
+
else if (zodType instanceof z.ZodObject && isObjectValue(raw) && raw !== null) return Object.fromEntries(Object.keys(raw).map((rawKey) => [rawKey, caster(zodType["shape"][rawKey], raw[rawKey])]));
|
|
27
|
+
else if (zodType instanceof z.ZodOptional) return caster(zodType.def.innerType, raw);
|
|
28
|
+
else if (zodType instanceof z.ZodNullable) return caster(zodType.def.innerType, raw);
|
|
29
|
+
else if (zodType instanceof z.ZodDate && raw !== null && raw !== void 0 && new Date(raw).toString() !== "Invalid Date") return new Date(raw);
|
|
32
30
|
else return raw;
|
|
33
31
|
}
|
|
34
32
|
function fastifyCaster(schema) {
|
|
35
|
-
return z
|
|
33
|
+
return z.preprocess((raw) => {
|
|
36
34
|
return caster(schema, raw);
|
|
37
35
|
}, schema);
|
|
38
36
|
}
|
|
39
|
-
var init_caster = __esmMin((() => {
|
|
37
|
+
var init_caster = __esmMin((() => {
|
|
38
|
+
init_runtime_value();
|
|
39
|
+
}));
|
|
40
40
|
//#endregion
|
|
41
41
|
init_caster();
|
|
42
42
|
export { caster, fastifyCaster, init_caster };
|
|
43
43
|
|
|
44
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
44
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FzdGVyLmpzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hcGkvY2FzdGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhc3NlcnQgZnJvbSBcImFzc2VydFwiO1xuXG5pbXBvcnQgeyB6IH0gZnJvbSBcInpvZFwiO1xuaW1wb3J0IHsgdHlwZSAkWm9kVHlwZSB9IGZyb20gXCJ6b2QvdjQvY29yZVwiO1xuXG5pbXBvcnQgeyBpc09iamVjdFZhbHVlLCBpc1N0cmluZ1ZhbHVlIH0gZnJvbSBcIi4uL3V0aWxzL3J1bnRpbWUtdmFsdWVcIjtcblxuZnVuY3Rpb24gaXNOdW1iZXJUeXBlKHpvZFR5cGU6ICRab2RUeXBlKTogem9kVHlwZSBpcyB6LlpvZE51bWJlciB7XG4gIHJldHVybiB6b2RUeXBlIGluc3RhbmNlb2Ygei5ab2ROdW1iZXI7XG59XG5cbmZ1bmN0aW9uIGlzTnVsbE9yT3B0aW9uYWwoem9kVHlwZTogJFpvZFR5cGUpOiB6b2RUeXBlIGlzIHouWm9kTnVsbGFibGUgfCB6LlpvZE9wdGlvbmFsIHtcbiAgcmV0dXJuIHpvZFR5cGUgaW5zdGFuY2VvZiB6LlpvZE51bGxhYmxlIHx8IHpvZFR5cGUgaW5zdGFuY2VvZiB6LlpvZE9wdGlvbmFsO1xufVxuXG4vLyBvcHRpb25hbCwgbnVsbGFibGUg66y06rSA7ZWY6rKMIFpvZE51bWJlciDssrTtgaxcbmZ1bmN0aW9uIGlzWm9kTnVtYmVyQW55d2F5KHpvZFR5cGU6ICRab2RUeXBlKSB7XG4gIGlmIChpc051bWJlclR5cGUoem9kVHlwZSkpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8vIFpvZE51bGxhYmxlIOuYkOuKlCBab2RPcHRpb25hbOydvCDrlYxcbiAgaWYgKGlzTnVsbE9yT3B0aW9uYWwoem9kVHlwZSkgJiYgaXNOdW1iZXJUeXBlKHpvZFR5cGUuZGVmLmlubmVyVHlwZSkpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuLy8gWm9kVHlwZeydhCDsnbTsmqntlbQgcmF366W8IFR5cGUgQ29lcmNpbmdcbi8vIG94bGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55IC0tIOy6kOyKpO2MheyXkOuKlCBhbnnqsIAg7ZWE7JqU7ZWoLlxuZXhwb3J0IGZ1bmN0aW9uIGNhc3Rlcih6b2RUeXBlOiAkWm9kVHlwZSwgcmF3OiBhbnkpOiBhbnkge1xuICBpZiAoaXNab2ROdW1iZXJBbnl3YXkoem9kVHlwZSkgJiYgaXNTdHJpbmdWYWx1ZShyYXcpKSB7XG4gICAgLy8gbnVtYmVyXG4gICAgcmV0dXJuIE51bWJlcihyYXcpO1xuICB9IGVsc2UgaWYgKFxuICAgIHpvZFR5cGUgaW5zdGFuY2VvZiB6LlpvZFVuaW9uICYmXG4gICAgem9kVHlwZS5vcHRpb25zLnNvbWUoKG9wdCkgPT4gaXNab2ROdW1iZXJBbnl3YXkob3B0KSlcbiAgKSB7XG4gICAgLy8gekFycmF5YWJsZSBOdW1iZXIg7LyA7J207IqkIOyymOumrFxuICAgIGlmIChBcnJheS5pc0FycmF5KHJhdykpIHtcbiAgICAgIGNvbnN0IG51bVR5cGUgPSB6b2RUeXBlLm9wdGlvbnMuZmluZCgob3B0KSA9PiBpc051bWJlclR5cGUob3B0KSk7XG4gICAgICBhc3NlcnQobnVtVHlwZSAhPT0gdW5kZWZpbmVkKTtcbiAgICAgIC8vIG94bGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55IC0tIOy6kOyKpO2MheyXkOuKlCBhbnnqsIAg7ZWE7JqU7ZWoLlxuICAgICAgcmV0dXJuIHJhdy5tYXAoKGVsZW06IGFueSkgPT4gY2FzdGVyKG51bVR5cGUsIGVsZW0pKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIE51bWJlcihyYXcpO1xuICAgIH1cbiAgfSBlbHNlIGlmICh6b2RUeXBlIGluc3RhbmNlb2Ygei5ab2RCb29sZWFuICYmIChyYXcgPT09IFwidHJ1ZVwiIHx8IHJhdyA9PT0gXCJmYWxzZVwiKSkge1xuICAgIC8vIGJvb2xlYW5cbiAgICByZXR1cm4gcmF3ID09PSBcInRydWVcIjtcbiAgfSBlbHNlIGlmIChyYXcgIT09IG51bGwgJiYgQXJyYXkuaXNBcnJheShyYXcpICYmIHpvZFR5cGUgaW5zdGFuY2VvZiB6LlpvZEFycmF5KSB7XG4gICAgLy8gYXJyYXlcbiAgICAvLyBveGxpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAtLSDsupDsiqTtjIXsl5DripQgYW556rCAIO2VhOyalO2VqC5cbiAgICByZXR1cm4gcmF3Lm1hcCgoZWxlbTogYW55KSA9PiBjYXN0ZXIoem9kVHlwZS5lbGVtZW50LCBlbGVtKSk7XG4gIH0gZWxzZSBpZiAoem9kVHlwZSBpbnN0YW5jZW9mIHouWm9kT2JqZWN0ICYmIGlzT2JqZWN0VmFsdWUocmF3KSAmJiByYXcgIT09IG51bGwpIHtcbiAgICAvLyBvYmplY3RcbiAgICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgICAgT2JqZWN0LmtleXMocmF3KS5tYXAoKHJhd0tleSkgPT4gW3Jhd0tleSwgY2FzdGVyKHpvZFR5cGVbXCJzaGFwZVwiXVtyYXdLZXldLCByYXdbcmF3S2V5XSldKSxcbiAgICApO1xuICB9IGVsc2UgaWYgKHpvZFR5cGUgaW5zdGFuY2VvZiB6LlpvZE9wdGlvbmFsKSB7XG4gICAgLy8gb3B0aW9uYWxcbiAgICByZXR1cm4gY2FzdGVyKHpvZFR5cGUuZGVmLmlubmVyVHlwZSwgcmF3KTtcbiAgfSBlbHNlIGlmICh6b2RUeXBlIGluc3RhbmNlb2Ygei5ab2ROdWxsYWJsZSkge1xuICAgIC8vIG51bGxhYmxlXG4gICAgcmV0dXJuIGNhc3Rlcih6b2RUeXBlLmRlZi5pbm5lclR5cGUsIHJhdyk7XG4gIH0gZWxzZSBpZiAoXG4gICAgem9kVHlwZSBpbnN0YW5jZW9mIHouWm9kRGF0ZSAmJlxuICAgIHJhdyAhPT0gbnVsbCAmJlxuICAgIHJhdyAhPT0gdW5kZWZpbmVkICYmXG4gICAgbmV3IERhdGUocmF3KS50b1N0cmluZygpICE9PSBcIkludmFsaWQgRGF0ZVwiXG4gICkge1xuICAgIC8vIGRhdGVcbiAgICByZXR1cm4gbmV3IERhdGUocmF3KTtcbiAgfSBlbHNlIHtcbiAgICAvLyDrgpjrqLjsp4DripQg7LKY66asIOyViO2VqFxuICAgIHJldHVybiByYXc7XG4gIH1cbn1cblxuLy8gb3hsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgLS0g7LqQ7Iqk7YyF7JeQ64qUIGFueeqwgCDtlYTsmpTtlaguXG5leHBvcnQgZnVuY3Rpb24gZmFzdGlmeUNhc3RlcihzY2hlbWE6IHouWm9kT2JqZWN0PGFueT4pIHtcbiAgLy8gb3hsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgLS0g7LqQ7Iqk7YyF7JeQ64qUIGFueeqwgCDtlYTsmpTtlaguXG4gIHJldHVybiB6LnByZXByb2Nlc3MoKHJhdzogYW55KSA9PiB7XG4gICAgcmV0dXJuIGNhc3RlcihzY2hlbWEsIHJhdyk7XG4gIH0sIHNjaGVtYSk7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7O0FBT0EsU0FBUyxhQUFhLFNBQTJDO0NBQy9ELE9BQU8sbUJBQW1CLEVBQUU7QUFDOUI7QUFFQSxTQUFTLGlCQUFpQixTQUE2RDtDQUNyRixPQUFPLG1CQUFtQixFQUFFLGVBQWUsbUJBQW1CLEVBQUU7QUFDbEU7QUFHQSxTQUFTLGtCQUFrQixTQUFtQjtDQUM1QyxJQUFJLGFBQWEsT0FBTyxHQUN0QixPQUFPO0NBSVQsSUFBSSxpQkFBaUIsT0FBTyxLQUFLLGFBQWEsUUFBUSxJQUFJLFNBQVMsR0FDakUsT0FBTztDQUdULE9BQU87QUFDVDtBQUlBLFNBQWdCLE9BQU8sU0FBbUIsS0FBZTtDQUN2RCxJQUFJLGtCQUFrQixPQUFPLEtBQUssY0FBYyxHQUFHLEdBRWpELE9BQU8sT0FBTyxHQUFHO01BQ1osSUFDTCxtQkFBbUIsRUFBRSxZQUNyQixRQUFRLFFBQVEsTUFBTSxRQUFRLGtCQUFrQixHQUFHLENBQUMsR0FHcEQsSUFBSSxNQUFNLFFBQVEsR0FBRyxHQUFHO0VBQ3RCLE1BQU0sVUFBVSxRQUFRLFFBQVEsTUFBTSxRQUFRLGFBQWEsR0FBRyxDQUFDO0VBQy9ELE9BQU8sWUFBWSxNQUFTO0VBRTVCLE9BQU8sSUFBSSxLQUFLLFNBQWMsT0FBTyxTQUFTLElBQUksQ0FBQztDQUNyRCxPQUNFLE9BQU8sT0FBTyxHQUFHO01BRWQsSUFBSSxtQkFBbUIsRUFBRSxlQUFlLFFBQVEsVUFBVSxRQUFRLFVBRXZFLE9BQU8sUUFBUTtNQUNWLElBQUksUUFBUSxRQUFRLE1BQU0sUUFBUSxHQUFHLEtBQUssbUJBQW1CLEVBQUUsVUFHcEUsT0FBTyxJQUFJLEtBQUssU0FBYyxPQUFPLFFBQVEsU0FBUyxJQUFJLENBQUM7TUFDdEQsSUFBSSxtQkFBbUIsRUFBRSxhQUFhLGNBQWMsR0FBRyxLQUFLLFFBQVEsTUFFekUsT0FBTyxPQUFPLFlBQ1osT0FBTyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssV0FBVyxDQUFDLFFBQVEsT0FBTyxRQUFRLFFBQVEsQ0FBQyxTQUFTLElBQUksT0FBTyxDQUFDLENBQUMsQ0FDMUY7TUFDSyxJQUFJLG1CQUFtQixFQUFFLGFBRTlCLE9BQU8sT0FBTyxRQUFRLElBQUksV0FBVyxHQUFHO01BQ25DLElBQUksbUJBQW1CLEVBQUUsYUFFOUIsT0FBTyxPQUFPLFFBQVEsSUFBSSxXQUFXLEdBQUc7TUFDbkMsSUFDTCxtQkFBbUIsRUFBRSxXQUNyQixRQUFRLFFBQ1IsUUFBUSxVQUNSLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQyxTQUFTLE1BQU0sZ0JBRzdCLE9BQU8sSUFBSSxLQUFLLEdBQUc7TUFHbkIsT0FBTztBQUVYO0FBR0EsU0FBZ0IsY0FBYyxRQUEwQjtDQUV0RCxPQUFPLEVBQUUsWUFBWSxRQUFhO0VBQ2hDLE9BQU8sT0FBTyxRQUFRLEdBQUc7Q0FDM0IsR0FBRyxNQUFNO0FBQ1g7O29CQWpGcUUifQ==
|
|
@@ -21,6 +21,8 @@ import { z } from "zod";
|
|
|
21
21
|
import { ApiParamType } from "../types/types";
|
|
22
22
|
import { type ApiParam } from "../types/types";
|
|
23
23
|
import { type ExtendedApi } from "./decorators";
|
|
24
|
+
/** 신뢰할 수 없는 값을 ApiParamType 경계에서 검증합니다. */
|
|
25
|
+
export declare function parseApiParamType<Input>(input: Input): ApiParamType;
|
|
24
26
|
/**
|
|
25
27
|
* Promise 타입을 한 번 언래핑하여 내부 타입을 반환합니다.
|
|
26
28
|
* Promise가 아닌 경우 원본 타입을 그대로 반환합니다.
|
|
@@ -31,7 +33,7 @@ export declare function unwrapPromiseOnce(paramType: ApiParamType): ApiParamType
|
|
|
31
33
|
* string, number, array, union 등 모든 ApiParamType을 처리하며,
|
|
32
34
|
* 순환참조가 발생하는 경우 z.unknown()으로 fallback합니다.
|
|
33
35
|
*/
|
|
34
|
-
export declare function getZodTypeFromApiParamType(
|
|
36
|
+
export declare function getZodTypeFromApiParamType<Input>(input: Input, references: {
|
|
35
37
|
[id: string]: z.ZodType;
|
|
36
38
|
}): z.ZodType;
|
|
37
39
|
/**
|
|
@@ -54,7 +56,7 @@ export declare function getZodObjectFromApi(api: ExtendedApi, references?: {
|
|
|
54
56
|
* union, intersection, array, ref 등 모든 타입을 TS 문법으로 표현하며,
|
|
55
57
|
* import가 필요한 타입 ID는 injectImportKeys에 수집합니다.
|
|
56
58
|
*/
|
|
57
|
-
export declare function apiParamTypeToTsType(
|
|
59
|
+
export declare function apiParamTypeToTsType<Input>(input: Input, injectImportKeys: string[]): string;
|
|
58
60
|
/**
|
|
59
61
|
* ApiParam 배열을 TypeScript 함수 파라미터 코드로 변환합니다.
|
|
60
62
|
* 예: "name: string, age?: number, active: boolean = true"
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"code-converters.d.ts","sourceRoot":"","sources":["../../src/api/code-converters.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"code-converters.d.ts","sourceRoot":"","sources":["../../src/api/code-converters.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,cAAc,CAAC;AAmEhD,2CAA2C;AAC3C,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,GAAG,YAAY,CAMnE;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,YAAY,4BAMxD;AAMD;;;;GAIG;AACH,wBAAgB,0BAA0B,CAAC,KAAK,EAC9C,KAAK,EAAE,KAAK,EACZ,UAAU,EAAE;IACV,CAAC,EAAE,EAAE,MAAM,GAAG,CAAC,CAAC,OAAO,CAAC;CACzB,GACA,CAAC,CAAC,OAAO,CAqJX;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,CACvC,SAAS,EAAE,QAAQ,EAAE,EACrB,UAAU,GAAE;IACV,CAAC,EAAE,EAAE,MAAM,GAAG,CAAC,CAAC,OAAO,CAAC;CACpB,GACL,CAAC,CAAC,SAAS,CAYb;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CACjC,GAAG,EAAE,WAAW,EAChB,UAAU,GAAE;IACV,CAAC,EAAE,EAAE,MAAM,GAAG,CAAC,CAAC,OAAO,CAAC;CACpB,qDA0BP;AAMD;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,gBAAgB,EAAE,MAAM,EAAE,GAAG,MAAM,CAgE5F;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE,gBAAgB,EAAE,MAAM,EAAE,GAAG,MAAM,CAUvF;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE,gBAAgB,EAAE,MAAM,EAAE,GAAG,MAAM,CAU/F"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { __esmMin } from "../_virtual/_rolldown/runtime.js";
|
|
2
2
|
import { ApiParamType, init_types } from "../types/types.js";
|
|
3
|
-
import { z
|
|
3
|
+
import { z } from "zod";
|
|
4
4
|
//#region src/api/code-converters.ts
|
|
5
5
|
/**
|
|
6
6
|
* code-converters는 API 타입 정의들을 Zod 객체나 TypeScript 코드로 변환하는 함수들을 제공합니다.
|
|
@@ -21,6 +21,12 @@ import { z as z$1 } from "zod";
|
|
|
21
21
|
* - ZodTypeDef 생성 (Zod 코드 문자열): zod-converter.ts의 zodTypeToZodCode 사용
|
|
22
22
|
* - EntityProp 변환: zod-converter.ts 참조
|
|
23
23
|
*/
|
|
24
|
+
/** 신뢰할 수 없는 값을 ApiParamType 경계에서 검증합니다. */
|
|
25
|
+
function parseApiParamType(input) {
|
|
26
|
+
const result = ApiParamTypeSchema.safeParse(input);
|
|
27
|
+
if (!result.success) throw new Error(`resolve 불가 ApiParamType: ${z.prettifyError(result.error)}`);
|
|
28
|
+
return result.data;
|
|
29
|
+
}
|
|
24
30
|
/**
|
|
25
31
|
* Promise 타입을 한 번 언래핑하여 내부 타입을 반환합니다.
|
|
26
32
|
* Promise가 아닌 경우 원본 타입을 그대로 반환합니다.
|
|
@@ -34,29 +40,30 @@ function unwrapPromiseOnce(paramType) {
|
|
|
34
40
|
* string, number, array, union 등 모든 ApiParamType을 처리하며,
|
|
35
41
|
* 순환참조가 발생하는 경우 z.unknown()으로 fallback합니다.
|
|
36
42
|
*/
|
|
37
|
-
function getZodTypeFromApiParamType(
|
|
43
|
+
function getZodTypeFromApiParamType(input, references) {
|
|
44
|
+
const paramType = parseApiParamType(input);
|
|
38
45
|
switch (paramType) {
|
|
39
|
-
case "string": return z
|
|
40
|
-
case "number": return z
|
|
41
|
-
case "boolean": return z
|
|
46
|
+
case "string": return z.string();
|
|
47
|
+
case "number": return z.number();
|
|
48
|
+
case "boolean": return z.boolean();
|
|
42
49
|
default: {
|
|
43
50
|
const advType = paramType;
|
|
44
51
|
switch (advType.t) {
|
|
45
52
|
case "string-literal":
|
|
46
|
-
case "numeric-literal": return z
|
|
53
|
+
case "numeric-literal": return z.literal(advType.value);
|
|
47
54
|
case "object": return getZodObjectFromApiParams(paramType.props);
|
|
48
55
|
case "array": {
|
|
49
56
|
const arrType = paramType;
|
|
50
|
-
return z
|
|
57
|
+
return z.array(getZodTypeFromApiParamType(arrType.elementsType, references));
|
|
51
58
|
}
|
|
52
59
|
case "ref": {
|
|
53
60
|
const refType = paramType;
|
|
54
|
-
if (refType.id === "Date") return z
|
|
61
|
+
if (refType.id === "Date") return z.date();
|
|
55
62
|
if (["Pick", "Omit"].includes(refType.id)) {
|
|
56
63
|
if (refType.args?.length !== 2) throw new Error(`잘못된 ${refType.id}`);
|
|
57
64
|
const [obj, literalOrUnion] = refType.args.map((arg) => getZodTypeFromApiParamType(arg, references));
|
|
58
65
|
let keys = [];
|
|
59
|
-
if (literalOrUnion instanceof z
|
|
66
|
+
if (literalOrUnion instanceof z.ZodUnion) keys = literalOrUnion.def.options.map((option) => option.def.values[0]);
|
|
60
67
|
else keys = literalOrUnion.def.values;
|
|
61
68
|
const keyRecord = Object.fromEntries(keys.map((key) => [key, true]));
|
|
62
69
|
if (refType.id === "Pick") {
|
|
@@ -68,26 +75,26 @@ function getZodTypeFromApiParamType(paramType, references) {
|
|
|
68
75
|
return getZodTypeFromApiParamType(refType.args[0], references).partial();
|
|
69
76
|
}
|
|
70
77
|
const reference = references[refType.id];
|
|
71
|
-
if (reference === void 0) return z
|
|
78
|
+
if (reference === void 0) return z.unknown();
|
|
72
79
|
return reference;
|
|
73
80
|
}
|
|
74
81
|
case "union": {
|
|
75
82
|
const unionType = paramType;
|
|
76
83
|
if (unionType.types.length === 2 && unionType.types.some((type) => type === "null")) if (unionType.types[0] === "null") return getZodTypeFromApiParamType(unionType.types[1], references).nullable();
|
|
77
84
|
else return getZodTypeFromApiParamType(unionType.types[0], references).nullable();
|
|
78
|
-
return z
|
|
85
|
+
return z.union(unionType.types.map((type) => getZodTypeFromApiParamType(type, references)));
|
|
79
86
|
}
|
|
80
87
|
case "intersection": return paramType.types.reduce((result, type, index) => {
|
|
81
88
|
const resolvedType = getZodTypeFromApiParamType(type, references);
|
|
82
89
|
if (index === 0) return resolvedType;
|
|
83
|
-
else return z
|
|
84
|
-
}, z
|
|
90
|
+
else return z.intersection(result, resolvedType);
|
|
91
|
+
}, z.unknown());
|
|
85
92
|
case "tuple-type": {
|
|
86
93
|
const tupleType = paramType;
|
|
87
|
-
return z
|
|
94
|
+
return z.tuple(tupleType.elements.map((elem) => getZodTypeFromApiParamType(elem, references)));
|
|
88
95
|
}
|
|
89
96
|
}
|
|
90
|
-
return z
|
|
97
|
+
return z.unknown();
|
|
91
98
|
}
|
|
92
99
|
}
|
|
93
100
|
}
|
|
@@ -96,7 +103,7 @@ function getZodTypeFromApiParamType(paramType, references) {
|
|
|
96
103
|
* 각 파라미터의 optional 여부를 반영하여 Zod 스키마를 생성합니다.
|
|
97
104
|
*/
|
|
98
105
|
function getZodObjectFromApiParams(apiParams, references = {}) {
|
|
99
|
-
return z
|
|
106
|
+
return z.object(Object.fromEntries(apiParams.map((param) => {
|
|
100
107
|
let zodType = getZodTypeFromApiParamType(param.type, references);
|
|
101
108
|
if (param.optional) zodType = zodType.optional();
|
|
102
109
|
return [param.name, zodType];
|
|
@@ -121,7 +128,8 @@ function getZodObjectFromApi(api, references = {}) {
|
|
|
121
128
|
* union, intersection, array, ref 등 모든 타입을 TS 문법으로 표현하며,
|
|
122
129
|
* import가 필요한 타입 ID는 injectImportKeys에 수집합니다.
|
|
123
130
|
*/
|
|
124
|
-
function apiParamTypeToTsType(
|
|
131
|
+
function apiParamTypeToTsType(input, injectImportKeys) {
|
|
132
|
+
const paramType = parseApiParamType(input);
|
|
125
133
|
if ([
|
|
126
134
|
"string",
|
|
127
135
|
"number",
|
|
@@ -173,11 +181,84 @@ function apiParamToTsCode(params, injectImportKeys) {
|
|
|
173
181
|
function apiParamToTsCodeAsObject(params, injectImportKeys) {
|
|
174
182
|
return `{ ${params.map((param) => `${param.name}${param.optional ? "?" : ""}: ${apiParamTypeToTsType(param.type, injectImportKeys)}${param.defaultDef ? `= ${param.defaultDef}` : ""}`).join(", ")} }`;
|
|
175
183
|
}
|
|
184
|
+
var ApiParamTypeSchema;
|
|
176
185
|
var init_code_converters = __esmMin((() => {
|
|
177
186
|
init_types();
|
|
187
|
+
ApiParamTypeSchema = z.lazy(() => z.union([
|
|
188
|
+
z.enum([
|
|
189
|
+
"string",
|
|
190
|
+
"number",
|
|
191
|
+
"boolean",
|
|
192
|
+
"null",
|
|
193
|
+
"undefined",
|
|
194
|
+
"void",
|
|
195
|
+
"any",
|
|
196
|
+
"unknown",
|
|
197
|
+
"true",
|
|
198
|
+
"false"
|
|
199
|
+
]),
|
|
200
|
+
z.object({
|
|
201
|
+
t: z.literal("string-literal"),
|
|
202
|
+
value: z.string()
|
|
203
|
+
}),
|
|
204
|
+
z.object({
|
|
205
|
+
t: z.literal("numeric-literal"),
|
|
206
|
+
value: z.number()
|
|
207
|
+
}),
|
|
208
|
+
z.object({
|
|
209
|
+
t: z.literal("object"),
|
|
210
|
+
props: z.array(z.object({
|
|
211
|
+
name: z.string(),
|
|
212
|
+
type: ApiParamTypeSchema,
|
|
213
|
+
optional: z.boolean(),
|
|
214
|
+
defaultDef: z.string().optional()
|
|
215
|
+
}))
|
|
216
|
+
}),
|
|
217
|
+
z.object({
|
|
218
|
+
t: z.literal("union"),
|
|
219
|
+
types: z.array(ApiParamTypeSchema)
|
|
220
|
+
}),
|
|
221
|
+
z.object({
|
|
222
|
+
t: z.literal("intersection"),
|
|
223
|
+
types: z.array(ApiParamTypeSchema)
|
|
224
|
+
}),
|
|
225
|
+
z.object({
|
|
226
|
+
t: z.literal("array"),
|
|
227
|
+
elementsType: ApiParamTypeSchema
|
|
228
|
+
}),
|
|
229
|
+
z.object({
|
|
230
|
+
t: z.literal("ref"),
|
|
231
|
+
id: z.string(),
|
|
232
|
+
args: z.array(ApiParamTypeSchema).optional()
|
|
233
|
+
}),
|
|
234
|
+
z.object({
|
|
235
|
+
t: z.literal("indexed-access"),
|
|
236
|
+
object: ApiParamTypeSchema,
|
|
237
|
+
index: ApiParamTypeSchema
|
|
238
|
+
}),
|
|
239
|
+
z.object({
|
|
240
|
+
t: z.literal("type-param"),
|
|
241
|
+
id: z.string(),
|
|
242
|
+
constraint: ApiParamTypeSchema.optional()
|
|
243
|
+
}),
|
|
244
|
+
z.object({
|
|
245
|
+
t: z.literal("tuple-type"),
|
|
246
|
+
elements: z.array(ApiParamTypeSchema)
|
|
247
|
+
}),
|
|
248
|
+
z.object({
|
|
249
|
+
t: z.literal("function"),
|
|
250
|
+
parameters: z.array(z.object({
|
|
251
|
+
name: z.string(),
|
|
252
|
+
type: ApiParamTypeSchema,
|
|
253
|
+
optional: z.boolean(),
|
|
254
|
+
defaultDef: z.string().optional()
|
|
255
|
+
})),
|
|
256
|
+
returnType: ApiParamTypeSchema
|
|
257
|
+
})
|
|
258
|
+
]));
|
|
178
259
|
}));
|
|
179
260
|
//#endregion
|
|
180
261
|
init_code_converters();
|
|
181
|
-
export { apiParamToTsCode, apiParamToTsCodeAsObject, apiParamTypeToTsType, getZodObjectFromApi, getZodObjectFromApiParams, getZodTypeFromApiParamType, init_code_converters, unwrapPromiseOnce };
|
|
262
|
+
export { apiParamToTsCode, apiParamToTsCodeAsObject, apiParamTypeToTsType, getZodObjectFromApi, getZodObjectFromApiParams, getZodTypeFromApiParamType, init_code_converters, parseApiParamType, unwrapPromiseOnce };
|
|
182
263
|
|
|
183
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29kZS1jb252ZXJ0ZXJzLmpzIiwibmFtZXMiOlsieiJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hcGkvY29kZS1jb252ZXJ0ZXJzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogY29kZS1jb252ZXJ0ZXJz64qUIEFQSSDtg4DsnoUg7KCV7J2Y65Ok7J2EIFpvZCDqsJ3ssrTrgpggVHlwZVNjcmlwdCDsvZTrk5zroZwg67OA7ZmY7ZWY64qUIO2VqOyImOuTpOydhCDsoJzqs7Xtlanri4jri6QuXG4gKlxuICogMS4gQVBJIOyLnOumrOymiOuTpDpcbiAqIC0gRXh0ZW5kZWRBcGksIEFwaVBhcmFtLCBBcGlQYXJhbVR5cGVcbiAqIC0gQVBJIOuplO2DgOuNsOydtO2EsOulvCDtkZztmITtlZjripQg7YOA7J6FIOygleydmOuTpFxuICpcbiAqIDIuIFpvZE9iamVjdCDrs4DtmZhcbiAqIC0gQVBJIO2DgOyehSDsoJXsnZgg4oaSIFpvZCDtg4DsnoUg7J247Iqk7YS07IqkICjrn7Dtg4DsnoQg67C466as642w7J207IWY7JqpKVxuICogLSBnZXRab2RUeXBlRnJvbUFwaVBhcmFtVHlwZSDihpIgZ2V0Wm9kT2JqZWN0RnJvbUFwaVBhcmFtcyDihpIgZ2V0Wm9kT2JqZWN0RnJvbUFwaVxuICpcbiAqIDMuIFRzVHlwZURlZiDrs4DtmZhcbiAqIC0gQVBJIO2DgOyehSDsoJXsnZgg4oaSIFR5cGVTY3JpcHQg7YOA7J6FIOy9lOuTnCDrrLjsnpDsl7QgKOy9lOuTnCDsg53shLHsmqkpXG4gKiAtIGFwaVBhcmFtVHlwZVRvVHNUeXBlIOKGkiBhcGlQYXJhbVRvVHNDb2RlLCBhcGlQYXJhbVRvVHNDb2RlQXNPYmplY3RcbiAqXG4gKiDssLjqs6A6XG4gKiAtIFpvZFR5cGVEZWYg7IOd7ISxIChab2Qg7L2U65OcIOusuOyekOyXtCk6IHpvZC1jb252ZXJ0ZXIudHPsnZggem9kVHlwZVRvWm9kQ29kZSDsgqzsmqlcbiAqIC0gRW50aXR5UHJvcCDrs4DtmZg6IHpvZC1jb252ZXJ0ZXIudHMg7LC47KGwXG4gKi9cblxuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIjtcblxuaW1wb3J0IHsgQXBpUGFyYW1UeXBlIH0gZnJvbSBcIi4uL3R5cGVzL3R5cGVzXCI7XG5pbXBvcnQgeyB0eXBlIEFwaVBhcmFtIH0gZnJvbSBcIi4uL3R5cGVzL3R5cGVzXCI7XG5pbXBvcnQgeyB0eXBlIEV4dGVuZGVkQXBpIH0gZnJvbSBcIi4vZGVjb3JhdG9yc1wiO1xuXG4vLyA8YW55PuulvCDsnpDsoJztlZjqs6AsIFpvZOyXkOyEnCDsoJzslb3tlZjripQg6riw67O47KCB7J24IEdlbmVyaWMgVHlwZSBQYXJhbWV0ZXLrpbwg7IKs7Jqp7ZWoLlxudHlwZSBBbnlab2RPYmplY3QgPSB6LlpvZE9iamVjdDtcbnR5cGUgQW55Wm9kTGl0ZXJhbCA9IHouWm9kTGl0ZXJhbDtcblxuLyoqXG4gKiBQcm9taXNlIO2DgOyeheydhCDtlZwg67KIIOyWuOuemO2Vke2VmOyXrCDrgrTrtoAg7YOA7J6F7J2EIOuwmO2ZmO2VqeuLiOuLpC5cbiAqIFByb21pc2XqsIAg7JWE64uMIOqyveyasCDsm5Drs7gg7YOA7J6F7J2EIOq3uOuMgOuhnCDrsJjtmZjtlanri4jri6QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1bndyYXBQcm9taXNlT25jZShwYXJhbVR5cGU6IEFwaVBhcmFtVHlwZSkge1xuICBpZiAoQXBpUGFyYW1UeXBlLmlzUHJvbWlzZShwYXJhbVR5cGUpKSB7XG4gICAgcmV0dXJuIHBhcmFtVHlwZS5hcmdzPy5bMF07XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHBhcmFtVHlwZTtcbiAgfVxufVxuXG4vKlxuICogQVBJ66W8IOq1rOyEse2VmOuKlCDsmpTshozrk6TsnYQgWm9kT2JqZWN066GcIOuzgO2ZmO2VmOq4sCDsnITtlZwg7ZWo7IiY65Ok7J6F64uI64ukLlxuICovXG5cbi8qKlxuICogQXBpUGFyYW1UeXBl7J2EIFpvZCDtg4DsnoUg7J247Iqk7YS07Iqk66GcIOuzgO2ZmO2VqeuLiOuLpC5cbiAqIHN0cmluZywgbnVtYmVyLCBhcnJheSwgdW5pb24g65OxIOuqqOuToCBBcGlQYXJhbVR5cGXsnYQg7LKY66as7ZWY66mwLFxuICog7Iic7ZmY7LC47KGw6rCAIOuwnOyDne2VmOuKlCDqsr3smrAgei51bmtub3duKCnsnLzroZwgZmFsbGJhY2vtlanri4jri6QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRab2RUeXBlRnJvbUFwaVBhcmFtVHlwZShcbiAgcGFyYW1UeXBlOiBBcGlQYXJhbVR5cGUsXG4gIHJlZmVyZW5jZXM6IHtcbiAgICBbaWQ6IHN0cmluZ106IHouWm9kVHlwZTtcbiAgfSxcbik6IHouWm9kVHlwZSB7XG4gIHN3aXRjaCAocGFyYW1UeXBlKSB7XG4gICAgY2FzZSBcInN0cmluZ1wiOlxuICAgICAgcmV0dXJuIHouc3RyaW5nKCk7XG4gICAgY2FzZSBcIm51bWJlclwiOlxuICAgICAgcmV0dXJuIHoubnVtYmVyKCk7XG4gICAgY2FzZSBcImJvb2xlYW5cIjpcbiAgICAgIHJldHVybiB6LmJvb2xlYW4oKTtcbiAgICBkZWZhdWx0OiB7XG4gICAgICBjb25zdCBhZHZUeXBlID0gcGFyYW1UeXBlIGFzIHsgdDogc3RyaW5nOyB2YWx1ZT86IHN0cmluZyB8IG51bWJlciB9O1xuICAgICAgc3dpdGNoIChhZHZUeXBlLnQpIHtcbiAgICAgICAgY2FzZSBcInN0cmluZy1saXRlcmFsXCI6XG4gICAgICAgIGNhc2UgXCJudW1lcmljLWxpdGVyYWxcIjpcbiAgICAgICAgICByZXR1cm4gei5saXRlcmFsKGFkdlR5cGUudmFsdWUpO1xuICAgICAgICBjYXNlIFwib2JqZWN0XCI6IHtcbiAgICAgICAgICBjb25zdCBvYmpUeXBlID0gcGFyYW1UeXBlIGFzIHsgdDogc3RyaW5nOyBwcm9wczogQXBpUGFyYW1bXSB9O1xuICAgICAgICAgIHJldHVybiBnZXRab2RPYmplY3RGcm9tQXBpUGFyYW1zKG9ialR5cGUucHJvcHMpO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgXCJhcnJheVwiOiB7XG4gICAgICAgICAgY29uc3QgYXJyVHlwZSA9IHBhcmFtVHlwZSBhcyB7XG4gICAgICAgICAgICB0OiBzdHJpbmc7XG4gICAgICAgICAgICBlbGVtZW50c1R5cGU6IEFwaVBhcmFtVHlwZTtcbiAgICAgICAgICB9O1xuICAgICAgICAgIHJldHVybiB6LmFycmF5KGdldFpvZFR5cGVGcm9tQXBpUGFyYW1UeXBlKGFyclR5cGUuZWxlbWVudHNUeXBlLCByZWZlcmVuY2VzKSk7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBcInJlZlwiOiB7XG4gICAgICAgICAgY29uc3QgcmVmVHlwZSA9IHBhcmFtVHlwZSBhcyB7XG4gICAgICAgICAgICB0OiBzdHJpbmc7XG4gICAgICAgICAgICBpZDogc3RyaW5nO1xuICAgICAgICAgICAgYXJncz86IEFwaVBhcmFtVHlwZVtdO1xuICAgICAgICAgIH07XG4gICAgICAgICAgLy8gRGF0ZSDtg4DsnoUg7LKY66asXG4gICAgICAgICAgaWYgKHJlZlR5cGUuaWQgPT09IFwiRGF0ZVwiKSB7XG4gICAgICAgICAgICByZXR1cm4gei5kYXRlKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIOqwneyytCDtgqQg6rSA66asIOycoO2LuOumrO2LsFxuICAgICAgICAgIGlmIChbXCJQaWNrXCIsIFwiT21pdFwiXS5pbmNsdWRlcyhyZWZUeXBlLmlkKSkge1xuICAgICAgICAgICAgaWYgKHJlZlR5cGUuYXJncz8ubGVuZ3RoICE9PSAyKSB7XG4gICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihg7J6Y66q765CcICR7cmVmVHlwZS5pZH1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IFtvYmosIGxpdGVyYWxPclVuaW9uXSA9IHJlZlR5cGUuYXJncy5tYXAoXG4gICAgICAgICAgICAgIChhcmcpID0+IGdldFpvZFR5cGVGcm9tQXBpUGFyYW1UeXBlKGFyZywgcmVmZXJlbmNlcyksXG4gICAgICAgICAgICAgIC8vIG94bGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55IC0tIOyDneyEseuQmOuKlCBab2RVbmlvbuydmCDtg4DsnoXsnYQg7LaU7KCB7ZWY6riwIOyWtOugpOybgFxuICAgICAgICAgICAgKSBhcyBbQW55Wm9kT2JqZWN0LCB6LlpvZFVuaW9uPGFueT4gfCBBbnlab2RMaXRlcmFsXTtcblxuICAgICAgICAgICAgbGV0IGtleXM6IHN0cmluZ1tdID0gW107XG4gICAgICAgICAgICBpZiAobGl0ZXJhbE9yVW5pb24gaW5zdGFuY2VvZiB6LlpvZFVuaW9uKSB7XG4gICAgICAgICAgICAgIGtleXMgPSBsaXRlcmFsT3JVbmlvbi5kZWYub3B0aW9ucy5tYXAoXG4gICAgICAgICAgICAgICAgKG9wdGlvbjogeyBkZWY6IHsgdmFsdWVzOiBzdHJpbmdbXSB9IH0pID0+IG9wdGlvbi5kZWYudmFsdWVzWzBdLFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAga2V5cyA9IChsaXRlcmFsT3JVbmlvbiBhcyB6LlpvZExpdGVyYWw8c3RyaW5nPikuZGVmLnZhbHVlcztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGtleVJlY29yZCA9IE9iamVjdC5mcm9tRW50cmllcyhrZXlzLm1hcCgoa2V5KSA9PiBba2V5LCB0cnVlIGFzIGNvbnN0XSkpO1xuICAgICAgICAgICAgaWYgKHJlZlR5cGUuaWQgPT09IFwiUGlja1wiKSB7XG4gICAgICAgICAgICAgIGlmIChvYmoucGljaykge1xuICAgICAgICAgICAgICAgIC8vIG94bGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55IC0tIFpvZCA0LjMuNiBwaWNrIO2DgOyehSDtmLjtmZjshLFcbiAgICAgICAgICAgICAgICByZXR1cm4gb2JqLnBpY2soa2V5UmVjb3JkIGFzIGFueSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGlmIChvYmoub21pdCkge1xuICAgICAgICAgICAgICAgIC8vIG94bGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55IC0tIFpvZCA0LjMuNiBvbWl0IO2DgOyehSDtmLjtmZjshLFcbiAgICAgICAgICAgICAgICByZXR1cm4gb2JqLm9taXQoa2V5UmVjb3JkIGFzIGFueSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKFtcIlBhcnRpYWxcIl0uaW5jbHVkZXMocmVmVHlwZS5pZCkpIHtcbiAgICAgICAgICAgIGlmIChyZWZUeXBlLmFyZ3M/Lmxlbmd0aCAhPT0gMSkge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYOyemOuqu+uQnCAke3JlZlR5cGUuaWR9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBvYmogPSBnZXRab2RUeXBlRnJvbUFwaVBhcmFtVHlwZShyZWZUeXBlLmFyZ3NbMF0sIHJlZmVyZW5jZXMpO1xuICAgICAgICAgICAgLy8gb3hsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgLS0gUGFydGlhbCDsnbjsiJgg7YOA7J6FIOy6kOyKpO2MhVxuICAgICAgICAgICAgcmV0dXJuIChvYmogYXMgei5ab2RPYmplY3Q8YW55PikucGFydGlhbCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCByZWZlcmVuY2UgPSByZWZlcmVuY2VzW3JlZlR5cGUuaWRdO1xuICAgICAgICAgIGlmIChyZWZlcmVuY2UgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIHoudW5rbm93bigpO1xuICAgICAgICAgICAgLy8gdGhyb3cgbmV3IEVycm9yKGByZWYg7LC47KGwIOu2iOqwgCAke3JlZlR5cGUuaWR9YCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiByZWZlcmVuY2U7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBcInVuaW9uXCI6IHtcbiAgICAgICAgICBjb25zdCB1bmlvblR5cGUgPSBwYXJhbVR5cGUgYXMge1xuICAgICAgICAgICAgdDogc3RyaW5nO1xuICAgICAgICAgICAgdHlwZXM6IEFwaVBhcmFtVHlwZVtdO1xuICAgICAgICAgIH07XG4gICAgICAgICAgLy8gbnVsbGFibGUg7Jyg64uI7JioXG4gICAgICAgICAgaWYgKHVuaW9uVHlwZS50eXBlcy5sZW5ndGggPT09IDIgJiYgdW5pb25UeXBlLnR5cGVzLnNvbWUoKHR5cGUpID0+IHR5cGUgPT09IFwibnVsbFwiKSkge1xuICAgICAgICAgICAgaWYgKHVuaW9uVHlwZS50eXBlc1swXSA9PT0gXCJudWxsXCIpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGdldFpvZFR5cGVGcm9tQXBpUGFyYW1UeXBlKHVuaW9uVHlwZS50eXBlc1sxXSwgcmVmZXJlbmNlcykubnVsbGFibGUoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJldHVybiBnZXRab2RUeXBlRnJvbUFwaVBhcmFtVHlwZSh1bmlvblR5cGUudHlwZXNbMF0sIHJlZmVyZW5jZXMpLm51bGxhYmxlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIOydvOuwmCDsnKDri4jsmKhcbiAgICAgICAgICByZXR1cm4gei51bmlvbihcbiAgICAgICAgICAgIHVuaW9uVHlwZS50eXBlcy5tYXAoKHR5cGUpID0+IGdldFpvZFR5cGVGcm9tQXBpUGFyYW1UeXBlKHR5cGUsIHJlZmVyZW5jZXMpKSxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgXCJpbnRlcnNlY3Rpb25cIjoge1xuICAgICAgICAgIGNvbnN0IGludGVyc2VjdGlvblR5cGUgPSBwYXJhbVR5cGUgYXMge1xuICAgICAgICAgICAgdDogc3RyaW5nO1xuICAgICAgICAgICAgdHlwZXM6IEFwaVBhcmFtVHlwZVtdO1xuICAgICAgICAgIH07XG4gICAgICAgICAgcmV0dXJuIGludGVyc2VjdGlvblR5cGUudHlwZXMucmVkdWNlKChyZXN1bHQsIHR5cGUsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICBjb25zdCByZXNvbHZlZFR5cGUgPSBnZXRab2RUeXBlRnJvbUFwaVBhcmFtVHlwZSh0eXBlLCByZWZlcmVuY2VzKTtcbiAgICAgICAgICAgIGlmIChpbmRleCA9PT0gMCkge1xuICAgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZWRUeXBlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHouaW50ZXJzZWN0aW9uKHJlc3VsdCwgcmVzb2x2ZWRUeXBlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LCB6LnVua25vd24oKSBhcyB6LlpvZFR5cGUpO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgXCJ0dXBsZS10eXBlXCI6IHtcbiAgICAgICAgICBjb25zdCB0dXBsZVR5cGUgPSBwYXJhbVR5cGUgYXMgQXBpUGFyYW1UeXBlLlR1cGxlVHlwZTtcbiAgICAgICAgICByZXR1cm4gei50dXBsZShcbiAgICAgICAgICAgIC8vIG94bGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55IC0tIOyDneyEseuQmOuKlCBab2RUdXBsZeydmCDtg4DsnoXsnYQg7LaU7KCB7ZWY6riwIOyWtOugpOybgFxuICAgICAgICAgICAgdHVwbGVUeXBlLmVsZW1lbnRzLm1hcCgoZWxlbSkgPT4gZ2V0Wm9kVHlwZUZyb21BcGlQYXJhbVR5cGUoZWxlbSwgcmVmZXJlbmNlcykpIGFzIGFueSxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gei51bmtub3duKCk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogQXBpUGFyYW0g67Cw7Je07J2EIFpvZE9iamVjdOuhnCDrs4DtmZjtlanri4jri6QuXG4gKiDqsIEg7YyM652866+47YSw7J2YIG9wdGlvbmFsIOyXrOu2gOulvCDrsJjsmIHtlZjsl6wgWm9kIOyKpO2CpOuniOulvCDsg53shLHtlanri4jri6QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRab2RPYmplY3RGcm9tQXBpUGFyYW1zKFxuICBhcGlQYXJhbXM6IEFwaVBhcmFtW10sXG4gIHJlZmVyZW5jZXM6IHtcbiAgICBbaWQ6IHN0cmluZ106IHouWm9kVHlwZTtcbiAgfSA9IHt9LFxuKTogei5ab2RPYmplY3Qge1xuICByZXR1cm4gei5vYmplY3QoXG4gICAgT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgICAgYXBpUGFyYW1zLm1hcCgocGFyYW0pID0+IHtcbiAgICAgICAgbGV0IHpvZFR5cGUgPSBnZXRab2RUeXBlRnJvbUFwaVBhcmFtVHlwZShwYXJhbS50eXBlLCByZWZlcmVuY2VzKTtcbiAgICAgICAgaWYgKHBhcmFtLm9wdGlvbmFsKSB7XG4gICAgICAgICAgem9kVHlwZSA9IHpvZFR5cGUub3B0aW9uYWwoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gW3BhcmFtLm5hbWUsIHpvZFR5cGVdO1xuICAgICAgfSksXG4gICAgKSxcbiAgKTtcbn1cblxuLyoqXG4gKiBFeHRlbmRlZEFwaeulvCBab2RPYmplY3TroZwg67OA7ZmY7ZWp64uI64ukLlxuICogVHlwZVBhcmFtZXRlcuyZgCDsnbzrsJgg7YyM652866+47YSw66W8IOyymOumrO2VmOupsCxcbiAqIENvbnRleHQsIFJlZktuZXgsIF/roZwg7Iuc7J6R7ZWY64qUIG9wdGlvbmFsIO2MjOudvOuvuO2EsOuKlCDsoJzsmbjtlanri4jri6QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRab2RPYmplY3RGcm9tQXBpKFxuICBhcGk6IEV4dGVuZGVkQXBpLFxuICByZWZlcmVuY2VzOiB7XG4gICAgW2lkOiBzdHJpbmddOiB6LlpvZFR5cGU7XG4gIH0gPSB7fSxcbikge1xuICBpZiAoYXBpLnR5cGVQYXJhbWV0ZXJzPy5sZW5ndGggPiAwKSB7XG4gICAgZm9yIChjb25zdCB0eXBlUGFyYW0gb2YgYXBpLnR5cGVQYXJhbWV0ZXJzKSB7XG4gICAgICBpZiAodHlwZVBhcmFtLmNvbnN0cmFpbnQpIHtcbiAgICAgICAgY29uc3Qgem9kVHlwZSA9IGdldFpvZFR5cGVGcm9tQXBpUGFyYW1UeXBlKHR5cGVQYXJhbS5jb25zdHJhaW50LCByZWZlcmVuY2VzKTtcblxuICAgICAgICAvLyBGSVhNRTogcmVmZXJlbmNlc+uKlCDquIDroZzrsowg7Jik67iM7KCd7Yq466GcLCB0eXBlUGFyYW0uaWQoXCJUXCIg65OxKeulvCBrZXnroZwg7J2066CH6rKMIOuNruyWtOyUjOybjOuyhOumrOuptCBsb2FkZWRUeXBlc+qwgCDsmKTsl7zrkKguXG4gICAgICAgIC8vIG94bGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55IC0tIOugiO2NvOufsOyKpCDtg4DsnoUg7LqQ7Iqk7YyFXG4gICAgICAgIChyZWZlcmVuY2VzW3R5cGVQYXJhbS5pZF0gYXMgei5ab2RUeXBlPGFueT4pID0gem9kVHlwZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgY29uc3QgUmVxVHlwZSA9IGdldFpvZE9iamVjdEZyb21BcGlQYXJhbXMoXG4gICAgLy8gYXBpIHBhcnNpbmftlZwg6rKw6rO86rCAIGFwaSBwYXJhbXNcbiAgICBhcGkucGFyYW1ldGVycy5maWx0ZXIoXG4gICAgICAocGFyYW0pID0+XG4gICAgICAgICFBcGlQYXJhbVR5cGUuaXNDb250ZXh0KHBhcmFtLnR5cGUpICYmXG4gICAgICAgICFBcGlQYXJhbVR5cGUuaXNSZWZLbmV4KHBhcmFtLnR5cGUpICYmXG4gICAgICAgICEocGFyYW0ub3B0aW9uYWwgJiYgcGFyYW0ubmFtZS5zdGFydHNXaXRoKFwiX1wiKSksIC8vIF/roZwg7Iuc7J6R7ZWY64qUIO2MjOudvOuvuO2EsOuKlCDsoJzsmbhcbiAgICApLFxuICAgIHJlZmVyZW5jZXMsXG4gICk7XG4gIHJldHVybiBSZXFUeXBlO1xufVxuXG4vKlxuICogQVBJIO2DgOyehSDsoJXsnZjrpbwgVHlwZVNjcmlwdCDsvZTrk5wg66y47J6Q7Je066GcIOuzgO2ZmO2VmOq4sCDsnITtlZwg7ZWo7IiY65Ok7J6F64uI64ukLlxuICovXG5cbi8qKlxuICogQXBpUGFyYW1UeXBl7J2EIFR5cGVTY3JpcHQg7YOA7J6FIOusuOyekOyXtOuhnCDrs4DtmZjtlanri4jri6QuXG4gKiB1bmlvbiwgaW50ZXJzZWN0aW9uLCBhcnJheSwgcmVmIOuTsSDrqqjrk6Ag7YOA7J6F7J2EIFRTIOusuOuyleycvOuhnCDtkZztmITtlZjrqbAsXG4gKiBpbXBvcnTqsIAg7ZWE7JqU7ZWcIO2DgOyehSBJROuKlCBpbmplY3RJbXBvcnRLZXlz7JeQIOyImOynke2VqeuLiOuLpC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFwaVBhcmFtVHlwZVRvVHNUeXBlKHBhcmFtVHlwZTogQXBpUGFyYW1UeXBlLCBpbmplY3RJbXBvcnRLZXlzOiBzdHJpbmdbXSk6IHN0cmluZyB7XG4gIGlmIChcbiAgICBbXG4gICAgICBcInN0cmluZ1wiLFxuICAgICAgXCJudW1iZXJcIixcbiAgICAgIFwiYm9vbGVhblwiLFxuICAgICAgXCJ0cnVlXCIsXG4gICAgICBcImZhbHNlXCIsXG4gICAgICBcIm51bGxcIixcbiAgICAgIFwidW5kZWZpbmVkXCIsXG4gICAgICBcInZvaWRcIixcbiAgICAgIFwiYW55XCIsXG4gICAgICBcInVua25vd25cIixcbiAgICBdLmluY2x1ZGVzKHBhcmFtVHlwZSBhcyBzdHJpbmcpXG4gICkge1xuICAgIHJldHVybiBwYXJhbVR5cGUgYXMgc3RyaW5nO1xuICB9IGVsc2UgaWYgKEFwaVBhcmFtVHlwZS5pc09iamVjdChwYXJhbVR5cGUpKSB7XG4gICAgcmV0dXJuIGB7ICR7YXBpUGFyYW1Ub1RzQ29kZShwYXJhbVR5cGUucHJvcHMsIGluamVjdEltcG9ydEtleXMpfSB9YDtcbiAgfSBlbHNlIGlmIChBcGlQYXJhbVR5cGUuaXNTdHJpbmdMaXRlcmFsKHBhcmFtVHlwZSkpIHtcbiAgICByZXR1cm4gYFwiJHtwYXJhbVR5cGUudmFsdWV9XCJgO1xuICB9IGVsc2UgaWYgKEFwaVBhcmFtVHlwZS5pc051bWVyaWNMaXRlcmFsKHBhcmFtVHlwZSkpIHtcbiAgICByZXR1cm4gU3RyaW5nKHBhcmFtVHlwZS52YWx1ZSk7XG4gIH0gZWxzZSBpZiAoQXBpUGFyYW1UeXBlLmlzVW5pb24ocGFyYW1UeXBlKSkge1xuICAgIHJldHVybiBwYXJhbVR5cGUudHlwZXMubWFwKCh0eXBlKSA9PiBhcGlQYXJhbVR5cGVUb1RzVHlwZSh0eXBlLCBpbmplY3RJbXBvcnRLZXlzKSkuam9pbihcIiB8IFwiKTtcbiAgfSBlbHNlIGlmIChBcGlQYXJhbVR5cGUuaXNJbnRlcnNlY3Rpb24ocGFyYW1UeXBlKSkge1xuICAgIHJldHVybiBwYXJhbVR5cGUudHlwZXMubWFwKCh0eXBlKSA9PiBhcGlQYXJhbVR5cGVUb1RzVHlwZSh0eXBlLCBpbmplY3RJbXBvcnRLZXlzKSkuam9pbihcIiAmIFwiKTtcbiAgfSBlbHNlIGlmIChBcGlQYXJhbVR5cGUuaXNBcnJheShwYXJhbVR5cGUpKSB7XG4gICAgLy8gaW50ZXJzZWN0aW9u7J2064KYIHVuaW9u7J24IOqyveyasCDqtITtmLjroZwg6rCQ7Iu46riwXG4gICAgY29uc3QgZWxlbWVudHNUeXBlID0gYXBpUGFyYW1UeXBlVG9Uc1R5cGUocGFyYW1UeXBlLmVsZW1lbnRzVHlwZSwgaW5qZWN0SW1wb3J0S2V5cyk7XG4gICAgcmV0dXJuIEFwaVBhcmFtVHlwZS5pc0ludGVyc2VjdGlvbihwYXJhbVR5cGUuZWxlbWVudHNUeXBlKSB8fFxuICAgICAgQXBpUGFyYW1UeXBlLmlzVW5pb24ocGFyYW1UeXBlLmVsZW1lbnRzVHlwZSlcbiAgICAgID8gYCgke2VsZW1lbnRzVHlwZX0pW11gXG4gICAgICA6IGAke2VsZW1lbnRzVHlwZX1bXWA7XG4gIH0gZWxzZSBpZiAoQXBpUGFyYW1UeXBlLmlzUmVmKHBhcmFtVHlwZSkpIHtcbiAgICBpZiAoIVtcIlBpY2tcIiwgXCJPbWl0XCIsIFwiUHJvbWlzZVwiLCBcIlBhcnRpYWxcIiwgXCJEYXRlXCJdLmluY2x1ZGVzKHBhcmFtVHlwZS5pZCkpIHtcbiAgICAgIC8vIGltcG9ydEtleXMg7J247KCd7IWYXG4gICAgICBpbmplY3RJbXBvcnRLZXlzLnB1c2gocGFyYW1UeXBlLmlkKTtcbiAgICB9XG4gICAgaWYgKHBhcmFtVHlwZS5hcmdzID09PSB1bmRlZmluZWQgfHwgcGFyYW1UeXBlLmFyZ3MubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gcGFyYW1UeXBlLmlkO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gYCR7cGFyYW1UeXBlLmlkfTwke3BhcmFtVHlwZS5hcmdzXG4gICAgICAgIC5tYXAoKGFyZykgPT4gYXBpUGFyYW1UeXBlVG9Uc1R5cGUoYXJnLCBpbmplY3RJbXBvcnRLZXlzKSlcbiAgICAgICAgLmpvaW4oXCIsXCIpfT5gO1xuICAgIH1cbiAgfSBlbHNlIGlmIChBcGlQYXJhbVR5cGUuaXNJbmRleGVkQWNjZXNzKHBhcmFtVHlwZSkpIHtcbiAgICByZXR1cm4gYCR7YXBpUGFyYW1UeXBlVG9Uc1R5cGUoXG4gICAgICBwYXJhbVR5cGUub2JqZWN0LFxuICAgICAgaW5qZWN0SW1wb3J0S2V5cyxcbiAgICApfVske2FwaVBhcmFtVHlwZVRvVHNUeXBlKHBhcmFtVHlwZS5pbmRleCwgaW5qZWN0SW1wb3J0S2V5cyl9XWA7XG4gIH0gZWxzZSBpZiAoQXBpUGFyYW1UeXBlLmlzVHVwbGVUeXBlKHBhcmFtVHlwZSkpIHtcbiAgICByZXR1cm4gYFsgJHtwYXJhbVR5cGUuZWxlbWVudHMubWFwKChlbGVtKSA9PiBhcGlQYXJhbVR5cGVUb1RzVHlwZShlbGVtLCBpbmplY3RJbXBvcnRLZXlzKSl9IF1gO1xuICB9IGVsc2UgaWYgKEFwaVBhcmFtVHlwZS5pc1R5cGVQYXJhbShwYXJhbVR5cGUpKSB7XG4gICAgcmV0dXJuIGAke3BhcmFtVHlwZS5pZH0ke1xuICAgICAgcGFyYW1UeXBlLmNvbnN0cmFpbnRcbiAgICAgICAgPyBgIGV4dGVuZHMgJHthcGlQYXJhbVR5cGVUb1RzVHlwZShwYXJhbVR5cGUuY29uc3RyYWludCwgaW5qZWN0SW1wb3J0S2V5cyl9YFxuICAgICAgICA6IFwiXCJcbiAgICB9YDtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYHJlc29sdmUg67aI6rCAIEFwaVBhcmFtVHlwZSAke3BhcmFtVHlwZX1gKTtcbiAgfVxufVxuXG4vKipcbiAqIEFwaVBhcmFtIOuwsOyXtOydhCBUeXBlU2NyaXB0IO2VqOyImCDtjIzrnbzrr7jthLAg7L2U65Oc66GcIOuzgO2ZmO2VqeuLiOuLpC5cbiAqIOyYiDogXCJuYW1lOiBzdHJpbmcsIGFnZT86IG51bWJlciwgYWN0aXZlOiBib29sZWFuID0gdHJ1ZVwiXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhcGlQYXJhbVRvVHNDb2RlKHBhcmFtczogQXBpUGFyYW1bXSwgaW5qZWN0SW1wb3J0S2V5czogc3RyaW5nW10pOiBzdHJpbmcge1xuICByZXR1cm4gcGFyYW1zXG4gICAgLm1hcCgocGFyYW0pID0+IHtcbiAgICAgIHJldHVybiBgJHtwYXJhbS5uYW1lfSR7XG4gICAgICAgIHBhcmFtLm9wdGlvbmFsICYmICFwYXJhbS5kZWZhdWx0RGVmID8gXCI/XCIgOiBcIlwiXG4gICAgICB9OiAke2FwaVBhcmFtVHlwZVRvVHNUeXBlKHBhcmFtLnR5cGUsIGluamVjdEltcG9ydEtleXMpfSR7XG4gICAgICAgIHBhcmFtLmRlZmF1bHREZWYgPyBgPSAke3BhcmFtLmRlZmF1bHREZWZ9YCA6IFwiXCJcbiAgICAgIH1gO1xuICAgIH0pXG4gICAgLmpvaW4oXCIsIFwiKTtcbn1cblxuLyoqXG4gKiBBcGlQYXJhbSDrsLDsl7TsnYQgVHlwZVNjcmlwdCDqsJ3ssrQg7YOA7J6FIOy9lOuTnOuhnCDrs4DtmZjtlanri4jri6QuXG4gKiDsmIg6IFwieyBuYW1lOiBzdHJpbmcsIGFnZT86IG51bWJlciwgYWN0aXZlOiBib29sZWFuID0gdHJ1ZSB9XCJcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFwaVBhcmFtVG9Uc0NvZGVBc09iamVjdChwYXJhbXM6IEFwaVBhcmFtW10sIGluamVjdEltcG9ydEtleXM6IHN0cmluZ1tdKTogc3RyaW5nIHtcbiAgcmV0dXJuIGB7ICR7cGFyYW1zXG4gICAgLm1hcChcbiAgICAgIChwYXJhbSkgPT5cbiAgICAgICAgYCR7cGFyYW0ubmFtZX0ke3BhcmFtLm9wdGlvbmFsID8gXCI/XCIgOiBcIlwifTogJHthcGlQYXJhbVR5cGVUb1RzVHlwZShcbiAgICAgICAgICBwYXJhbS50eXBlLFxuICAgICAgICAgIGluamVjdEltcG9ydEtleXMsXG4gICAgICAgICl9JHtwYXJhbS5kZWZhdWx0RGVmID8gYD0gJHtwYXJhbS5kZWZhdWx0RGVmfWAgOiBcIlwifWAsXG4gICAgKVxuICAgIC5qb2luKFwiLCBcIil9IH1gO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFrQ0EsU0FBZ0Isa0JBQWtCLFdBQXlCO0NBQ3pELElBQUksYUFBYSxVQUFVLFNBQVMsR0FDbEMsT0FBTyxVQUFVLE9BQU87TUFFeEIsT0FBTztBQUVYOzs7Ozs7QUFXQSxTQUFnQiwyQkFDZCxXQUNBLFlBR1c7Q0FDWCxRQUFRLFdBQVI7RUFDRSxLQUFLLFVBQ0gsT0FBT0EsSUFBRSxPQUFPO0VBQ2xCLEtBQUssVUFDSCxPQUFPQSxJQUFFLE9BQU87RUFDbEIsS0FBSyxXQUNILE9BQU9BLElBQUUsUUFBUTtFQUNuQixTQUFTO0dBQ1AsTUFBTSxVQUFVO0dBQ2hCLFFBQVEsUUFBUSxHQUFoQjtJQUNFLEtBQUs7SUFDTCxLQUFLLG1CQUNILE9BQU9BLElBQUUsUUFBUSxRQUFRLEtBQUs7SUFDaEMsS0FBSyxVQUVILE9BQU8sMEJBQTBCLFVBQVEsS0FBSztJQUVoRCxLQUFLLFNBQVM7S0FDWixNQUFNLFVBQVU7S0FJaEIsT0FBT0EsSUFBRSxNQUFNLDJCQUEyQixRQUFRLGNBQWMsVUFBVSxDQUFDO0lBQzdFO0lBQ0Es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
|
|
264
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29kZS1jb252ZXJ0ZXJzLmpzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hcGkvY29kZS1jb252ZXJ0ZXJzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogY29kZS1jb252ZXJ0ZXJz64qUIEFQSSDtg4DsnoUg7KCV7J2Y65Ok7J2EIFpvZCDqsJ3ssrTrgpggVHlwZVNjcmlwdCDsvZTrk5zroZwg67OA7ZmY7ZWY64qUIO2VqOyImOuTpOydhCDsoJzqs7Xtlanri4jri6QuXG4gKlxuICogMS4gQVBJIOyLnOumrOymiOuTpDpcbiAqIC0gRXh0ZW5kZWRBcGksIEFwaVBhcmFtLCBBcGlQYXJhbVR5cGVcbiAqIC0gQVBJIOuplO2DgOuNsOydtO2EsOulvCDtkZztmITtlZjripQg7YOA7J6FIOygleydmOuTpFxuICpcbiAqIDIuIFpvZE9iamVjdCDrs4DtmZhcbiAqIC0gQVBJIO2DgOyehSDsoJXsnZgg4oaSIFpvZCDtg4DsnoUg7J247Iqk7YS07IqkICjrn7Dtg4DsnoQg67C466as642w7J207IWY7JqpKVxuICogLSBnZXRab2RUeXBlRnJvbUFwaVBhcmFtVHlwZSDihpIgZ2V0Wm9kT2JqZWN0RnJvbUFwaVBhcmFtcyDihpIgZ2V0Wm9kT2JqZWN0RnJvbUFwaVxuICpcbiAqIDMuIFRzVHlwZURlZiDrs4DtmZhcbiAqIC0gQVBJIO2DgOyehSDsoJXsnZgg4oaSIFR5cGVTY3JpcHQg7YOA7J6FIOy9lOuTnCDrrLjsnpDsl7QgKOy9lOuTnCDsg53shLHsmqkpXG4gKiAtIGFwaVBhcmFtVHlwZVRvVHNUeXBlIOKGkiBhcGlQYXJhbVRvVHNDb2RlLCBhcGlQYXJhbVRvVHNDb2RlQXNPYmplY3RcbiAqXG4gKiDssLjqs6A6XG4gKiAtIFpvZFR5cGVEZWYg7IOd7ISxIChab2Qg7L2U65OcIOusuOyekOyXtCk6IHpvZC1jb252ZXJ0ZXIudHPsnZggem9kVHlwZVRvWm9kQ29kZSDsgqzsmqlcbiAqIC0gRW50aXR5UHJvcCDrs4DtmZg6IHpvZC1jb252ZXJ0ZXIudHMg7LC47KGwXG4gKi9cblxuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIjtcblxuaW1wb3J0IHsgQXBpUGFyYW1UeXBlIH0gZnJvbSBcIi4uL3R5cGVzL3R5cGVzXCI7XG5pbXBvcnQgeyB0eXBlIEFwaVBhcmFtIH0gZnJvbSBcIi4uL3R5cGVzL3R5cGVzXCI7XG5pbXBvcnQgeyB0eXBlIEV4dGVuZGVkQXBpIH0gZnJvbSBcIi4vZGVjb3JhdG9yc1wiO1xuXG4vLyA8YW55PuulvCDsnpDsoJztlZjqs6AsIFpvZOyXkOyEnCDsoJzslb3tlZjripQg6riw67O47KCB7J24IEdlbmVyaWMgVHlwZSBQYXJhbWV0ZXLrpbwg7IKs7Jqp7ZWoLlxudHlwZSBBbnlab2RPYmplY3QgPSB6LlpvZE9iamVjdDtcbnR5cGUgQW55Wm9kTGl0ZXJhbCA9IHouWm9kTGl0ZXJhbDtcblxuY29uc3QgQXBpUGFyYW1UeXBlU2NoZW1hOiB6LlpvZFR5cGU8QXBpUGFyYW1UeXBlPiA9IHoubGF6eSgoKSA9PlxuICB6LnVuaW9uKFtcbiAgICB6LmVudW0oW1xuICAgICAgXCJzdHJpbmdcIixcbiAgICAgIFwibnVtYmVyXCIsXG4gICAgICBcImJvb2xlYW5cIixcbiAgICAgIFwibnVsbFwiLFxuICAgICAgXCJ1bmRlZmluZWRcIixcbiAgICAgIFwidm9pZFwiLFxuICAgICAgXCJhbnlcIixcbiAgICAgIFwidW5rbm93blwiLFxuICAgICAgXCJ0cnVlXCIsXG4gICAgICBcImZhbHNlXCIsXG4gICAgXSksXG4gICAgei5vYmplY3QoeyB0OiB6LmxpdGVyYWwoXCJzdHJpbmctbGl0ZXJhbFwiKSwgdmFsdWU6IHouc3RyaW5nKCkgfSksXG4gICAgei5vYmplY3QoeyB0OiB6LmxpdGVyYWwoXCJudW1lcmljLWxpdGVyYWxcIiksIHZhbHVlOiB6Lm51bWJlcigpIH0pLFxuICAgIHoub2JqZWN0KHtcbiAgICAgIHQ6IHoubGl0ZXJhbChcIm9iamVjdFwiKSxcbiAgICAgIHByb3BzOiB6LmFycmF5KFxuICAgICAgICB6Lm9iamVjdCh7XG4gICAgICAgICAgbmFtZTogei5zdHJpbmcoKSxcbiAgICAgICAgICB0eXBlOiBBcGlQYXJhbVR5cGVTY2hlbWEsXG4gICAgICAgICAgb3B0aW9uYWw6IHouYm9vbGVhbigpLFxuICAgICAgICAgIGRlZmF1bHREZWY6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICAgICAgfSksXG4gICAgICApLFxuICAgIH0pLFxuICAgIHoub2JqZWN0KHsgdDogei5saXRlcmFsKFwidW5pb25cIiksIHR5cGVzOiB6LmFycmF5KEFwaVBhcmFtVHlwZVNjaGVtYSkgfSksXG4gICAgei5vYmplY3QoeyB0OiB6LmxpdGVyYWwoXCJpbnRlcnNlY3Rpb25cIiksIHR5cGVzOiB6LmFycmF5KEFwaVBhcmFtVHlwZVNjaGVtYSkgfSksXG4gICAgei5vYmplY3QoeyB0OiB6LmxpdGVyYWwoXCJhcnJheVwiKSwgZWxlbWVudHNUeXBlOiBBcGlQYXJhbVR5cGVTY2hlbWEgfSksXG4gICAgei5vYmplY3Qoe1xuICAgICAgdDogei5saXRlcmFsKFwicmVmXCIpLFxuICAgICAgaWQ6IHouc3RyaW5nKCksXG4gICAgICBhcmdzOiB6LmFycmF5KEFwaVBhcmFtVHlwZVNjaGVtYSkub3B0aW9uYWwoKSxcbiAgICB9KSxcbiAgICB6Lm9iamVjdCh7XG4gICAgICB0OiB6LmxpdGVyYWwoXCJpbmRleGVkLWFjY2Vzc1wiKSxcbiAgICAgIG9iamVjdDogQXBpUGFyYW1UeXBlU2NoZW1hLFxuICAgICAgaW5kZXg6IEFwaVBhcmFtVHlwZVNjaGVtYSxcbiAgICB9KSxcbiAgICB6Lm9iamVjdCh7XG4gICAgICB0OiB6LmxpdGVyYWwoXCJ0eXBlLXBhcmFtXCIpLFxuICAgICAgaWQ6IHouc3RyaW5nKCksXG4gICAgICBjb25zdHJhaW50OiBBcGlQYXJhbVR5cGVTY2hlbWEub3B0aW9uYWwoKSxcbiAgICB9KSxcbiAgICB6Lm9iamVjdCh7IHQ6IHoubGl0ZXJhbChcInR1cGxlLXR5cGVcIiksIGVsZW1lbnRzOiB6LmFycmF5KEFwaVBhcmFtVHlwZVNjaGVtYSkgfSksXG4gICAgei5vYmplY3Qoe1xuICAgICAgdDogei5saXRlcmFsKFwiZnVuY3Rpb25cIiksXG4gICAgICBwYXJhbWV0ZXJzOiB6LmFycmF5KFxuICAgICAgICB6Lm9iamVjdCh7XG4gICAgICAgICAgbmFtZTogei5zdHJpbmcoKSxcbiAgICAgICAgICB0eXBlOiBBcGlQYXJhbVR5cGVTY2hlbWEsXG4gICAgICAgICAgb3B0aW9uYWw6IHouYm9vbGVhbigpLFxuICAgICAgICAgIGRlZmF1bHREZWY6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICAgICAgfSksXG4gICAgICApLFxuICAgICAgcmV0dXJuVHlwZTogQXBpUGFyYW1UeXBlU2NoZW1hLFxuICAgIH0pLFxuICBdKSxcbik7XG5cbi8qKiDsi6DrorDtlaAg7IiYIOyXhuuKlCDqsJLsnYQgQXBpUGFyYW1UeXBlIOqyveqzhOyXkOyEnCDqsoDspp3tlanri4jri6QuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VBcGlQYXJhbVR5cGU8SW5wdXQ+KGlucHV0OiBJbnB1dCk6IEFwaVBhcmFtVHlwZSB7XG4gIGNvbnN0IHJlc3VsdCA9IEFwaVBhcmFtVHlwZVNjaGVtYS5zYWZlUGFyc2UoaW5wdXQpO1xuICBpZiAoIXJlc3VsdC5zdWNjZXNzKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGByZXNvbHZlIOu2iOqwgCBBcGlQYXJhbVR5cGU6ICR7ei5wcmV0dGlmeUVycm9yKHJlc3VsdC5lcnJvcil9YCk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdC5kYXRhO1xufVxuXG4vKipcbiAqIFByb21pc2Ug7YOA7J6F7J2EIO2VnCDrsogg7Ja4656Y7ZWR7ZWY7JesIOuCtOu2gCDtg4DsnoXsnYQg67CY7ZmY7ZWp64uI64ukLlxuICogUHJvbWlzZeqwgCDslYTri4wg6rK97JqwIOybkOuzuCDtg4DsnoXsnYQg6re464yA66GcIOuwmO2ZmO2VqeuLiOuLpC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVud3JhcFByb21pc2VPbmNlKHBhcmFtVHlwZTogQXBpUGFyYW1UeXBlKSB7XG4gIGlmIChBcGlQYXJhbVR5cGUuaXNQcm9taXNlKHBhcmFtVHlwZSkpIHtcbiAgICByZXR1cm4gcGFyYW1UeXBlLmFyZ3M/LlswXTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gcGFyYW1UeXBlO1xuICB9XG59XG5cbi8qXG4gKiBBUEnrpbwg6rWs7ISx7ZWY64qUIOyalOyGjOuTpOydhCBab2RPYmplY3TroZwg67OA7ZmY7ZWY6riwIOychO2VnCDtlajsiJjrk6TsnoXri4jri6QuXG4gKi9cblxuLyoqXG4gKiBBcGlQYXJhbVR5cGXsnYQgWm9kIO2DgOyehSDsnbjsiqTthLTsiqTroZwg67OA7ZmY7ZWp64uI64ukLlxuICogc3RyaW5nLCBudW1iZXIsIGFycmF5LCB1bmlvbiDrk7Eg66qo65OgIEFwaVBhcmFtVHlwZeydhCDsspjrpqztlZjrqbAsXG4gKiDsiJztmZjssLjsobDqsIAg67Cc7IOd7ZWY64qUIOqyveyasCB6LnVua25vd24oKeycvOuhnCBmYWxsYmFja+2VqeuLiOuLpC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFpvZFR5cGVGcm9tQXBpUGFyYW1UeXBlPElucHV0PihcbiAgaW5wdXQ6IElucHV0LFxuICByZWZlcmVuY2VzOiB7XG4gICAgW2lkOiBzdHJpbmddOiB6LlpvZFR5cGU7XG4gIH0sXG4pOiB6LlpvZFR5cGUge1xuICBjb25zdCBwYXJhbVR5cGUgPSBwYXJzZUFwaVBhcmFtVHlwZShpbnB1dCk7XG4gIHN3aXRjaCAocGFyYW1UeXBlKSB7XG4gICAgY2FzZSBcInN0cmluZ1wiOlxuICAgICAgcmV0dXJuIHouc3RyaW5nKCk7XG4gICAgY2FzZSBcIm51bWJlclwiOlxuICAgICAgcmV0dXJuIHoubnVtYmVyKCk7XG4gICAgY2FzZSBcImJvb2xlYW5cIjpcbiAgICAgIHJldHVybiB6LmJvb2xlYW4oKTtcbiAgICBkZWZhdWx0OiB7XG4gICAgICBjb25zdCBhZHZUeXBlID1cbiAgICAgICAgLyogU0FGRVRZOiBBUEkg642w7L2U66CI7J207YSw7JmAIFpvZCDqsoDspp3quLAg65Ox66GdIOqzhOyVveydtCDsnbQg6rCS7J2YIO2DgOyeheydhCDrs7TsnqXtlZzri6QuICovIHBhcmFtVHlwZSBhcyB7XG4gICAgICAgICAgdDogc3RyaW5nO1xuICAgICAgICAgIHZhbHVlPzogc3RyaW5nIHwgbnVtYmVyO1xuICAgICAgICB9O1xuICAgICAgc3dpdGNoIChhZHZUeXBlLnQpIHtcbiAgICAgICAgY2FzZSBcInN0cmluZy1saXRlcmFsXCI6XG4gICAgICAgIGNhc2UgXCJudW1lcmljLWxpdGVyYWxcIjpcbiAgICAgICAgICByZXR1cm4gei5saXRlcmFsKGFkdlR5cGUudmFsdWUpO1xuICAgICAgICBjYXNlIFwib2JqZWN0XCI6IHtcbiAgICAgICAgICBjb25zdCBvYmpUeXBlID1cbiAgICAgICAgICAgIC8qIFNBRkVUWTogQVBJIOuNsOy9lOugiOydtO2EsOyZgCBab2Qg6rKA7Kad6riwIOuTseuhnSDqs4Tslb3snbQg7J20IOqwkuydmCDtg4DsnoXsnYQg67O07J6l7ZWc64ukLiAqLyBwYXJhbVR5cGUgYXMge1xuICAgICAgICAgICAgICB0OiBzdHJpbmc7XG4gICAgICAgICAgICAgIHByb3BzOiBBcGlQYXJhbVtdO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICByZXR1cm4gZ2V0Wm9kT2JqZWN0RnJvbUFwaVBhcmFtcyhvYmpUeXBlLnByb3BzKTtcbiAgICAgICAgfVxuICAgICAgICBjYXNlIFwiYXJyYXlcIjoge1xuICAgICAgICAgIGNvbnN0IGFyclR5cGUgPVxuICAgICAgICAgICAgLyogU0FGRVRZOiBBUEkg642w7L2U66CI7J207YSw7JmAIFpvZCDqsoDspp3quLAg65Ox66GdIOqzhOyVveydtCDsnbQg6rCS7J2YIO2DgOyeheydhCDrs7TsnqXtlZzri6QuICovIHBhcmFtVHlwZSBhcyB7XG4gICAgICAgICAgICAgIHQ6IHN0cmluZztcbiAgICAgICAgICAgICAgZWxlbWVudHNUeXBlOiBBcGlQYXJhbVR5cGU7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgIHJldHVybiB6LmFycmF5KGdldFpvZFR5cGVGcm9tQXBpUGFyYW1UeXBlKGFyclR5cGUuZWxlbWVudHNUeXBlLCByZWZlcmVuY2VzKSk7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBcInJlZlwiOiB7XG4gICAgICAgICAgY29uc3QgcmVmVHlwZSA9XG4gICAgICAgICAgICAvKiBTQUZFVFk6IEFQSSDrjbDsvZTroIjsnbTthLDsmYAgWm9kIOqygOymneq4sCDrk7HroZ0g6rOE7JW97J20IOydtCDqsJLsnZgg7YOA7J6F7J2EIOuztOyepe2VnOuLpC4gKi8gcGFyYW1UeXBlIGFzIHtcbiAgICAgICAgICAgICAgdDogc3RyaW5nO1xuICAgICAgICAgICAgICBpZDogc3RyaW5nO1xuICAgICAgICAgICAgICBhcmdzPzogQXBpUGFyYW1UeXBlW107XG4gICAgICAgICAgICB9O1xuICAgICAgICAgIC8vIERhdGUg7YOA7J6FIOyymOumrFxuICAgICAgICAgIGlmIChyZWZUeXBlLmlkID09PSBcIkRhdGVcIikge1xuICAgICAgICAgICAgcmV0dXJuIHouZGF0ZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyDqsJ3ssrQg7YKkIOq0gOumrCDsnKDti7jrpqzti7BcbiAgICAgICAgICBpZiAoW1wiUGlja1wiLCBcIk9taXRcIl0uaW5jbHVkZXMocmVmVHlwZS5pZCkpIHtcbiAgICAgICAgICAgIGlmIChyZWZUeXBlLmFyZ3M/Lmxlbmd0aCAhPT0gMikge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYOyemOuqu+uQnCAke3JlZlR5cGUuaWR9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBbb2JqLCBsaXRlcmFsT3JVbmlvbl0gPVxuICAgICAgICAgICAgICAvKiBTQUZFVFk6IEFQSSDrjbDsvZTroIjsnbTthLDsmYAgWm9kIOqygOymneq4sCDrk7HroZ0g6rOE7JW97J20IOydtCDqsJLsnZgg7YOA7J6F7J2EIOuztOyepe2VnOuLpC4gKi8gcmVmVHlwZS5hcmdzLm1hcChcbiAgICAgICAgICAgICAgICAoYXJnKSA9PiBnZXRab2RUeXBlRnJvbUFwaVBhcmFtVHlwZShhcmcsIHJlZmVyZW5jZXMpLFxuICAgICAgICAgICAgICApIGFzIFtBbnlab2RPYmplY3QsIHouWm9kVW5pb248YW55PiB8IEFueVpvZExpdGVyYWxdO1xuXG4gICAgICAgICAgICBsZXQga2V5czogc3RyaW5nW10gPSBbXTtcbiAgICAgICAgICAgIGlmIChsaXRlcmFsT3JVbmlvbiBpbnN0YW5jZW9mIHouWm9kVW5pb24pIHtcbiAgICAgICAgICAgICAga2V5cyA9IGxpdGVyYWxPclVuaW9uLmRlZi5vcHRpb25zLm1hcChcbiAgICAgICAgICAgICAgICAob3B0aW9uOiB7IGRlZjogeyB2YWx1ZXM6IHN0cmluZ1tdIH0gfSkgPT4gb3B0aW9uLmRlZi52YWx1ZXNbMF0sXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBrZXlzID1cbiAgICAgICAgICAgICAgICAvKiBTQUZFVFk6IEFQSSDrjbDsvZTroIjsnbTthLDsmYAgWm9kIOqygOymneq4sCDrk7HroZ0g6rOE7JW97J20IOydtCDqsJLsnZgg7YOA7J6F7J2EIOuztOyepe2VnOuLpC4gKi8gKFxuICAgICAgICAgICAgICAgICAgbGl0ZXJhbE9yVW5pb24gYXMgei5ab2RMaXRlcmFsPHN0cmluZz5cbiAgICAgICAgICAgICAgICApLmRlZi52YWx1ZXM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBrZXlSZWNvcmQgPSBPYmplY3QuZnJvbUVudHJpZXMoa2V5cy5tYXAoKGtleSkgPT4gW2tleSwgdHJ1ZSBhcyBjb25zdF0pKTtcbiAgICAgICAgICAgIGlmIChyZWZUeXBlLmlkID09PSBcIlBpY2tcIikge1xuICAgICAgICAgICAgICBpZiAob2JqLnBpY2spIHtcbiAgICAgICAgICAgICAgICAvLyBveGxpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAtLSBab2QgNC4zLjYgcGljayDtg4DsnoUg7Zi47ZmY7ISxXG4gICAgICAgICAgICAgICAgcmV0dXJuIG9iai5waWNrKFxuICAgICAgICAgICAgICAgICAgLyogU0FGRVRZOiBBUEkg642w7L2U66CI7J207YSw7JmAIFpvZCDqsoDspp3quLAg65Ox66GdIOqzhOyVveydtCDsnbQg6rCS7J2YIO2DgOyeheydhCDrs7TsnqXtlZzri6QuICovIGtleVJlY29yZCBhcyBhbnksXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgaWYgKG9iai5vbWl0KSB7XG4gICAgICAgICAgICAgICAgLy8gb3hsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgLS0gWm9kIDQuMy42IG9taXQg7YOA7J6FIO2YuO2ZmOyEsVxuICAgICAgICAgICAgICAgIHJldHVybiBvYmoub21pdChcbiAgICAgICAgICAgICAgICAgIC8qIFNBRkVUWTogQVBJIOuNsOy9lOugiOydtO2EsOyZgCBab2Qg6rKA7Kad6riwIOuTseuhnSDqs4Tslb3snbQg7J20IOqwkuydmCDtg4DsnoXsnYQg67O07J6l7ZWc64ukLiAqLyBrZXlSZWNvcmQgYXMgYW55LFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKFtcIlBhcnRpYWxcIl0uaW5jbHVkZXMocmVmVHlwZS5pZCkpIHtcbiAgICAgICAgICAgIGlmIChyZWZUeXBlLmFyZ3M/Lmxlbmd0aCAhPT0gMSkge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYOyemOuqu+uQnCAke3JlZlR5cGUuaWR9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBvYmogPSBnZXRab2RUeXBlRnJvbUFwaVBhcmFtVHlwZShyZWZUeXBlLmFyZ3NbMF0sIHJlZmVyZW5jZXMpO1xuICAgICAgICAgICAgLy8gb3hsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgLS0gUGFydGlhbCDsnbjsiJgg7YOA7J6FIOy6kOyKpO2MhVxuICAgICAgICAgICAgcmV0dXJuIC8qIFNBRkVUWTogQVBJIOuNsOy9lOugiOydtO2EsOyZgCBab2Qg6rKA7Kad6riwIOuTseuhnSDqs4Tslb3snbQg7J20IOqwkuydmCDtg4DsnoXsnYQg67O07J6l7ZWc64ukLiAqLyAoXG4gICAgICAgICAgICAgIG9iaiBhcyB6LlpvZE9iamVjdDxhbnk+XG4gICAgICAgICAgICApLnBhcnRpYWwoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgcmVmZXJlbmNlID0gcmVmZXJlbmNlc1tyZWZUeXBlLmlkXTtcbiAgICAgICAgICBpZiAocmVmZXJlbmNlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiB6LnVua25vd24oKTtcbiAgICAgICAgICAgIC8vIHRocm93IG5ldyBFcnJvcihgcmVmIOywuOyhsCDrtojqsIAgJHtyZWZUeXBlLmlkfWApO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gcmVmZXJlbmNlO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgXCJ1bmlvblwiOiB7XG4gICAgICAgICAgY29uc3QgdW5pb25UeXBlID1cbiAgICAgICAgICAgIC8qIFNBRkVUWTogQVBJIOuNsOy9lOugiOydtO2EsOyZgCBab2Qg6rKA7Kad6riwIOuTseuhnSDqs4Tslb3snbQg7J20IOqwkuydmCDtg4DsnoXsnYQg67O07J6l7ZWc64ukLiAqLyBwYXJhbVR5cGUgYXMge1xuICAgICAgICAgICAgICB0OiBzdHJpbmc7XG4gICAgICAgICAgICAgIHR5cGVzOiBBcGlQYXJhbVR5cGVbXTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgLy8gbnVsbGFibGUg7Jyg64uI7JioXG4gICAgICAgICAgaWYgKHVuaW9uVHlwZS50eXBlcy5sZW5ndGggPT09IDIgJiYgdW5pb25UeXBlLnR5cGVzLnNvbWUoKHR5cGUpID0+IHR5cGUgPT09IFwibnVsbFwiKSkge1xuICAgICAgICAgICAgaWYgKHVuaW9uVHlwZS50eXBlc1swXSA9PT0gXCJudWxsXCIpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGdldFpvZFR5cGVGcm9tQXBpUGFyYW1UeXBlKHVuaW9uVHlwZS50eXBlc1sxXSwgcmVmZXJlbmNlcykubnVsbGFibGUoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJldHVybiBnZXRab2RUeXBlRnJvbUFwaVBhcmFtVHlwZSh1bmlvblR5cGUudHlwZXNbMF0sIHJlZmVyZW5jZXMpLm51bGxhYmxlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIOydvOuwmCDsnKDri4jsmKhcbiAgICAgICAgICByZXR1cm4gei51bmlvbihcbiAgICAgICAgICAgIHVuaW9uVHlwZS50eXBlcy5tYXAoKHR5cGUpID0+IGdldFpvZFR5cGVGcm9tQXBpUGFyYW1UeXBlKHR5cGUsIHJlZmVyZW5jZXMpKSxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgXCJpbnRlcnNlY3Rpb25cIjoge1xuICAgICAgICAgIGNvbnN0IGludGVyc2VjdGlvblR5cGUgPVxuICAgICAgICAgICAgLyogU0FGRVRZOiBBUEkg642w7L2U66CI7J207YSw7JmAIFpvZCDqsoDspp3quLAg65Ox66GdIOqzhOyVveydtCDsnbQg6rCS7J2YIO2DgOyeheydhCDrs7TsnqXtlZzri6QuICovIHBhcmFtVHlwZSBhcyB7XG4gICAgICAgICAgICAgIHQ6IHN0cmluZztcbiAgICAgICAgICAgICAgdHlwZXM6IEFwaVBhcmFtVHlwZVtdO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICByZXR1cm4gaW50ZXJzZWN0aW9uVHlwZS50eXBlcy5yZWR1Y2UoKHJlc3VsdCwgdHlwZSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc29sdmVkVHlwZSA9IGdldFpvZFR5cGVGcm9tQXBpUGFyYW1UeXBlKHR5cGUsIHJlZmVyZW5jZXMpO1xuICAgICAgICAgICAgaWYgKGluZGV4ID09PSAwKSB7XG4gICAgICAgICAgICAgIHJldHVybiByZXNvbHZlZFR5cGU7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICByZXR1cm4gei5pbnRlcnNlY3Rpb24ocmVzdWx0LCByZXNvbHZlZFR5cGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sIC8qIFNBRkVUWTogQVBJIOuNsOy9lOugiOydtO2EsOyZgCBab2Qg6rKA7Kad6riwIOuTseuhnSDqs4Tslb3snbQg7J20IOqwkuydmCDtg4DsnoXsnYQg67O07J6l7ZWc64ukLiAqLyB6LnVua25vd24oKSBhcyB6LlpvZFR5cGUpO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgXCJ0dXBsZS10eXBlXCI6IHtcbiAgICAgICAgICBjb25zdCB0dXBsZVR5cGUgPVxuICAgICAgICAgICAgLyogU0FGRVRZOiBBUEkg642w7L2U66CI7J207YSw7JmAIFpvZCDqsoDspp3quLAg65Ox66GdIOqzhOyVveydtCDsnbQg6rCS7J2YIO2DgOyeheydhCDrs7TsnqXtlZzri6QuICovIHBhcmFtVHlwZSBhcyBBcGlQYXJhbVR5cGUuVHVwbGVUeXBlO1xuICAgICAgICAgIHJldHVybiB6LnR1cGxlKFxuICAgICAgICAgICAgLy8gb3hsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgLS0g7IOd7ISx65CY64qUIFpvZFR1cGxl7J2YIO2DgOyeheydhCDstpTsoIHtlZjquLAg7Ja066Ck7JuAXG4gICAgICAgICAgICAvKiBTQUZFVFk6IEFQSSDrjbDsvZTroIjsnbTthLDsmYAgWm9kIOqygOymneq4sCDrk7HroZ0g6rOE7JW97J20IOydtCDqsJLsnZgg7YOA7J6F7J2EIOuztOyepe2VnOuLpC4gKi8gdHVwbGVUeXBlLmVsZW1lbnRzLm1hcChcbiAgICAgICAgICAgICAgKGVsZW0pID0+IGdldFpvZFR5cGVGcm9tQXBpUGFyYW1UeXBlKGVsZW0sIHJlZmVyZW5jZXMpLFxuICAgICAgICAgICAgKSBhcyBhbnksXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHoudW5rbm93bigpO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIEFwaVBhcmFtIOuwsOyXtOydhCBab2RPYmplY3TroZwg67OA7ZmY7ZWp64uI64ukLlxuICog6rCBIO2MjOudvOuvuO2EsOydmCBvcHRpb25hbCDsl6zrtoDrpbwg67CY7JiB7ZWY7JesIFpvZCDsiqTtgqTrp4jrpbwg7IOd7ISx7ZWp64uI64ukLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Wm9kT2JqZWN0RnJvbUFwaVBhcmFtcyhcbiAgYXBpUGFyYW1zOiBBcGlQYXJhbVtdLFxuICByZWZlcmVuY2VzOiB7XG4gICAgW2lkOiBzdHJpbmddOiB6LlpvZFR5cGU7XG4gIH0gPSB7fSxcbik6IHouWm9kT2JqZWN0IHtcbiAgcmV0dXJuIHoub2JqZWN0KFxuICAgIE9iamVjdC5mcm9tRW50cmllcyhcbiAgICAgIGFwaVBhcmFtcy5tYXAoKHBhcmFtKSA9PiB7XG4gICAgICAgIGxldCB6b2RUeXBlID0gZ2V0Wm9kVHlwZUZyb21BcGlQYXJhbVR5cGUocGFyYW0udHlwZSwgcmVmZXJlbmNlcyk7XG4gICAgICAgIGlmIChwYXJhbS5vcHRpb25hbCkge1xuICAgICAgICAgIHpvZFR5cGUgPSB6b2RUeXBlLm9wdGlvbmFsKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFtwYXJhbS5uYW1lLCB6b2RUeXBlXTtcbiAgICAgIH0pLFxuICAgICksXG4gICk7XG59XG5cbi8qKlxuICogRXh0ZW5kZWRBcGnrpbwgWm9kT2JqZWN066GcIOuzgO2ZmO2VqeuLiOuLpC5cbiAqIFR5cGVQYXJhbWV0ZXLsmYAg7J2867CYIO2MjOudvOuvuO2EsOulvCDsspjrpqztlZjrqbAsXG4gKiBDb250ZXh0LCBSZWZLbmV4LCBf66GcIOyLnOyeke2VmOuKlCBvcHRpb25hbCDtjIzrnbzrr7jthLDripQg7KCc7Jm47ZWp64uI64ukLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Wm9kT2JqZWN0RnJvbUFwaShcbiAgYXBpOiBFeHRlbmRlZEFwaSxcbiAgcmVmZXJlbmNlczoge1xuICAgIFtpZDogc3RyaW5nXTogei5ab2RUeXBlO1xuICB9ID0ge30sXG4pIHtcbiAgaWYgKGFwaS50eXBlUGFyYW1ldGVycz8ubGVuZ3RoID4gMCkge1xuICAgIGZvciAoY29uc3QgdHlwZVBhcmFtIG9mIGFwaS50eXBlUGFyYW1ldGVycykge1xuICAgICAgaWYgKHR5cGVQYXJhbS5jb25zdHJhaW50KSB7XG4gICAgICAgIGNvbnN0IHpvZFR5cGUgPSBnZXRab2RUeXBlRnJvbUFwaVBhcmFtVHlwZSh0eXBlUGFyYW0uY29uc3RyYWludCwgcmVmZXJlbmNlcyk7XG5cbiAgICAgICAgLy8gRklYTUU6IHJlZmVyZW5jZXPripQg6riA66Gc67KMIOyYpOu4jOygne2KuOuhnCwgdHlwZVBhcmFtLmlkKFwiVFwiIOuTsSnrpbwga2V566GcIOydtOugh+qyjCDrja7slrTslIzsm4zrsoTrpqzrqbQgbG9hZGVkVHlwZXPqsIAg7Jik7Je865CoLlxuICAgICAgICAvLyBveGxpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAtLSDroIjtjbzrn7DsiqQg7YOA7J6FIOy6kOyKpO2MhVxuICAgICAgICAvKiBTQUZFVFk6IEFQSSDrjbDsvZTroIjsnbTthLDsmYAgWm9kIOqygOymneq4sCDrk7HroZ0g6rOE7JW97J20IOydtCDqsJLsnZgg7YOA7J6F7J2EIOuztOyepe2VnOuLpC4gKi8gKHJlZmVyZW5jZXNbXG4gICAgICAgICAgdHlwZVBhcmFtLmlkXG4gICAgICAgIF0gYXMgei5ab2RUeXBlPGFueT4pID0gem9kVHlwZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgY29uc3QgUmVxVHlwZSA9IGdldFpvZE9iamVjdEZyb21BcGlQYXJhbXMoXG4gICAgLy8gYXBpIHBhcnNpbmftlZwg6rKw6rO86rCAIGFwaSBwYXJhbXNcbiAgICBhcGkucGFyYW1ldGVycy5maWx0ZXIoXG4gICAgICAocGFyYW0pID0+XG4gICAgICAgICFBcGlQYXJhbVR5cGUuaXNDb250ZXh0KHBhcmFtLnR5cGUpICYmXG4gICAgICAgICFBcGlQYXJhbVR5cGUuaXNSZWZLbmV4KHBhcmFtLnR5cGUpICYmXG4gICAgICAgICEocGFyYW0ub3B0aW9uYWwgJiYgcGFyYW0ubmFtZS5zdGFydHNXaXRoKFwiX1wiKSksIC8vIF/roZwg7Iuc7J6R7ZWY64qUIO2MjOudvOuvuO2EsOuKlCDsoJzsmbhcbiAgICApLFxuICAgIHJlZmVyZW5jZXMsXG4gICk7XG4gIHJldHVybiBSZXFUeXBlO1xufVxuXG4vKlxuICogQVBJIO2DgOyehSDsoJXsnZjrpbwgVHlwZVNjcmlwdCDsvZTrk5wg66y47J6Q7Je066GcIOuzgO2ZmO2VmOq4sCDsnITtlZwg7ZWo7IiY65Ok7J6F64uI64ukLlxuICovXG5cbi8qKlxuICogQXBpUGFyYW1UeXBl7J2EIFR5cGVTY3JpcHQg7YOA7J6FIOusuOyekOyXtOuhnCDrs4DtmZjtlanri4jri6QuXG4gKiB1bmlvbiwgaW50ZXJzZWN0aW9uLCBhcnJheSwgcmVmIOuTsSDrqqjrk6Ag7YOA7J6F7J2EIFRTIOusuOuyleycvOuhnCDtkZztmITtlZjrqbAsXG4gKiBpbXBvcnTqsIAg7ZWE7JqU7ZWcIO2DgOyehSBJROuKlCBpbmplY3RJbXBvcnRLZXlz7JeQIOyImOynke2VqeuLiOuLpC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFwaVBhcmFtVHlwZVRvVHNUeXBlPElucHV0PihpbnB1dDogSW5wdXQsIGluamVjdEltcG9ydEtleXM6IHN0cmluZ1tdKTogc3RyaW5nIHtcbiAgY29uc3QgcGFyYW1UeXBlID0gcGFyc2VBcGlQYXJhbVR5cGUoaW5wdXQpO1xuICBpZiAoXG4gICAgW1xuICAgICAgXCJzdHJpbmdcIixcbiAgICAgIFwibnVtYmVyXCIsXG4gICAgICBcImJvb2xlYW5cIixcbiAgICAgIFwidHJ1ZVwiLFxuICAgICAgXCJmYWxzZVwiLFxuICAgICAgXCJudWxsXCIsXG4gICAgICBcInVuZGVmaW5lZFwiLFxuICAgICAgXCJ2b2lkXCIsXG4gICAgICBcImFueVwiLFxuICAgICAgXCJ1bmtub3duXCIsXG4gICAgXS5pbmNsdWRlcyhcbiAgICAgIC8qIFNBRkVUWTogQVBJIOuNsOy9lOugiOydtO2EsOyZgCBab2Qg6rKA7Kad6riwIOuTseuhnSDqs4Tslb3snbQg7J20IOqwkuydmCDtg4DsnoXsnYQg67O07J6l7ZWc64ukLiAqLyBwYXJhbVR5cGUgYXMgc3RyaW5nLFxuICAgIClcbiAgKSB7XG4gICAgcmV0dXJuIC8qIFNBRkVUWTogQVBJIOuNsOy9lOugiOydtO2EsOyZgCBab2Qg6rKA7Kad6riwIOuTseuhnSDqs4Tslb3snbQg7J20IOqwkuydmCDtg4DsnoXsnYQg67O07J6l7ZWc64ukLiAqLyBwYXJhbVR5cGUgYXMgc3RyaW5nO1xuICB9IGVsc2UgaWYgKEFwaVBhcmFtVHlwZS5pc09iamVjdChwYXJhbVR5cGUpKSB7XG4gICAgcmV0dXJuIGB7ICR7YXBpUGFyYW1Ub1RzQ29kZShwYXJhbVR5cGUucHJvcHMsIGluamVjdEltcG9ydEtleXMpfSB9YDtcbiAgfSBlbHNlIGlmIChBcGlQYXJhbVR5cGUuaXNTdHJpbmdMaXRlcmFsKHBhcmFtVHlwZSkpIHtcbiAgICByZXR1cm4gYFwiJHtwYXJhbVR5cGUudmFsdWV9XCJgO1xuICB9IGVsc2UgaWYgKEFwaVBhcmFtVHlwZS5pc051bWVyaWNMaXRlcmFsKHBhcmFtVHlwZSkpIHtcbiAgICByZXR1cm4gU3RyaW5nKHBhcmFtVHlwZS52YWx1ZSk7XG4gIH0gZWxzZSBpZiAoQXBpUGFyYW1UeXBlLmlzVW5pb24ocGFyYW1UeXBlKSkge1xuICAgIHJldHVybiBwYXJhbVR5cGUudHlwZXMubWFwKCh0eXBlKSA9PiBhcGlQYXJhbVR5cGVUb1RzVHlwZSh0eXBlLCBpbmplY3RJbXBvcnRLZXlzKSkuam9pbihcIiB8IFwiKTtcbiAgfSBlbHNlIGlmIChBcGlQYXJhbVR5cGUuaXNJbnRlcnNlY3Rpb24ocGFyYW1UeXBlKSkge1xuICAgIHJldHVybiBwYXJhbVR5cGUudHlwZXMubWFwKCh0eXBlKSA9PiBhcGlQYXJhbVR5cGVUb1RzVHlwZSh0eXBlLCBpbmplY3RJbXBvcnRLZXlzKSkuam9pbihcIiAmIFwiKTtcbiAgfSBlbHNlIGlmIChBcGlQYXJhbVR5cGUuaXNBcnJheShwYXJhbVR5cGUpKSB7XG4gICAgLy8gaW50ZXJzZWN0aW9u7J2064KYIHVuaW9u7J24IOqyveyasCDqtITtmLjroZwg6rCQ7Iu46riwXG4gICAgY29uc3QgZWxlbWVudHNUeXBlID0gYXBpUGFyYW1UeXBlVG9Uc1R5cGUocGFyYW1UeXBlLmVsZW1lbnRzVHlwZSwgaW5qZWN0SW1wb3J0S2V5cyk7XG4gICAgcmV0dXJuIEFwaVBhcmFtVHlwZS5pc0ludGVyc2VjdGlvbihwYXJhbVR5cGUuZWxlbWVudHNUeXBlKSB8fFxuICAgICAgQXBpUGFyYW1UeXBlLmlzVW5pb24ocGFyYW1UeXBlLmVsZW1lbnRzVHlwZSlcbiAgICAgID8gYCgke2VsZW1lbnRzVHlwZX0pW11gXG4gICAgICA6IGAke2VsZW1lbnRzVHlwZX1bXWA7XG4gIH0gZWxzZSBpZiAoQXBpUGFyYW1UeXBlLmlzUmVmKHBhcmFtVHlwZSkpIHtcbiAgICBpZiAoIVtcIlBpY2tcIiwgXCJPbWl0XCIsIFwiUHJvbWlzZVwiLCBcIlBhcnRpYWxcIiwgXCJEYXRlXCJdLmluY2x1ZGVzKHBhcmFtVHlwZS5pZCkpIHtcbiAgICAgIC8vIGltcG9ydEtleXMg7J247KCd7IWYXG4gICAgICBpbmplY3RJbXBvcnRLZXlzLnB1c2gocGFyYW1UeXBlLmlkKTtcbiAgICB9XG4gICAgaWYgKHBhcmFtVHlwZS5hcmdzID09PSB1bmRlZmluZWQgfHwgcGFyYW1UeXBlLmFyZ3MubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gcGFyYW1UeXBlLmlkO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gYCR7cGFyYW1UeXBlLmlkfTwke3BhcmFtVHlwZS5hcmdzXG4gICAgICAgIC5tYXAoKGFyZykgPT4gYXBpUGFyYW1UeXBlVG9Uc1R5cGUoYXJnLCBpbmplY3RJbXBvcnRLZXlzKSlcbiAgICAgICAgLmpvaW4oXCIsXCIpfT5gO1xuICAgIH1cbiAgfSBlbHNlIGlmIChBcGlQYXJhbVR5cGUuaXNJbmRleGVkQWNjZXNzKHBhcmFtVHlwZSkpIHtcbiAgICByZXR1cm4gYCR7YXBpUGFyYW1UeXBlVG9Uc1R5cGUoXG4gICAgICBwYXJhbVR5cGUub2JqZWN0LFxuICAgICAgaW5qZWN0SW1wb3J0S2V5cyxcbiAgICApfVske2FwaVBhcmFtVHlwZVRvVHNUeXBlKHBhcmFtVHlwZS5pbmRleCwgaW5qZWN0SW1wb3J0S2V5cyl9XWA7XG4gIH0gZWxzZSBpZiAoQXBpUGFyYW1UeXBlLmlzVHVwbGVUeXBlKHBhcmFtVHlwZSkpIHtcbiAgICByZXR1cm4gYFsgJHtwYXJhbVR5cGUuZWxlbWVudHMubWFwKChlbGVtKSA9PiBhcGlQYXJhbVR5cGVUb1RzVHlwZShlbGVtLCBpbmplY3RJbXBvcnRLZXlzKSl9IF1gO1xuICB9IGVsc2UgaWYgKEFwaVBhcmFtVHlwZS5pc1R5cGVQYXJhbShwYXJhbVR5cGUpKSB7XG4gICAgcmV0dXJuIGAke3BhcmFtVHlwZS5pZH0ke1xuICAgICAgcGFyYW1UeXBlLmNvbnN0cmFpbnRcbiAgICAgICAgPyBgIGV4dGVuZHMgJHthcGlQYXJhbVR5cGVUb1RzVHlwZShwYXJhbVR5cGUuY29uc3RyYWludCwgaW5qZWN0SW1wb3J0S2V5cyl9YFxuICAgICAgICA6IFwiXCJcbiAgICB9YDtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYHJlc29sdmUg67aI6rCAIEFwaVBhcmFtVHlwZSAke3BhcmFtVHlwZX1gKTtcbiAgfVxufVxuXG4vKipcbiAqIEFwaVBhcmFtIOuwsOyXtOydhCBUeXBlU2NyaXB0IO2VqOyImCDtjIzrnbzrr7jthLAg7L2U65Oc66GcIOuzgO2ZmO2VqeuLiOuLpC5cbiAqIOyYiDogXCJuYW1lOiBzdHJpbmcsIGFnZT86IG51bWJlciwgYWN0aXZlOiBib29sZWFuID0gdHJ1ZVwiXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhcGlQYXJhbVRvVHNDb2RlKHBhcmFtczogQXBpUGFyYW1bXSwgaW5qZWN0SW1wb3J0S2V5czogc3RyaW5nW10pOiBzdHJpbmcge1xuICByZXR1cm4gcGFyYW1zXG4gICAgLm1hcCgocGFyYW0pID0+IHtcbiAgICAgIHJldHVybiBgJHtwYXJhbS5uYW1lfSR7XG4gICAgICAgIHBhcmFtLm9wdGlvbmFsICYmICFwYXJhbS5kZWZhdWx0RGVmID8gXCI/XCIgOiBcIlwiXG4gICAgICB9OiAke2FwaVBhcmFtVHlwZVRvVHNUeXBlKHBhcmFtLnR5cGUsIGluamVjdEltcG9ydEtleXMpfSR7XG4gICAgICAgIHBhcmFtLmRlZmF1bHREZWYgPyBgPSAke3BhcmFtLmRlZmF1bHREZWZ9YCA6IFwiXCJcbiAgICAgIH1gO1xuICAgIH0pXG4gICAgLmpvaW4oXCIsIFwiKTtcbn1cblxuLyoqXG4gKiBBcGlQYXJhbSDrsLDsl7TsnYQgVHlwZVNjcmlwdCDqsJ3ssrQg7YOA7J6FIOy9lOuTnOuhnCDrs4DtmZjtlanri4jri6QuXG4gKiDsmIg6IFwieyBuYW1lOiBzdHJpbmcsIGFnZT86IG51bWJlciwgYWN0aXZlOiBib29sZWFuID0gdHJ1ZSB9XCJcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFwaVBhcmFtVG9Uc0NvZGVBc09iamVjdChwYXJhbXM6IEFwaVBhcmFtW10sIGluamVjdEltcG9ydEtleXM6IHN0cmluZ1tdKTogc3RyaW5nIHtcbiAgcmV0dXJuIGB7ICR7cGFyYW1zXG4gICAgLm1hcChcbiAgICAgIChwYXJhbSkgPT5cbiAgICAgICAgYCR7cGFyYW0ubmFtZX0ke3BhcmFtLm9wdGlvbmFsID8gXCI/XCIgOiBcIlwifTogJHthcGlQYXJhbVR5cGVUb1RzVHlwZShcbiAgICAgICAgICBwYXJhbS50eXBlLFxuICAgICAgICAgIGluamVjdEltcG9ydEtleXMsXG4gICAgICAgICl9JHtwYXJhbS5kZWZhdWx0RGVmID8gYD0gJHtwYXJhbS5kZWZhdWx0RGVmfWAgOiBcIlwifWAsXG4gICAgKVxuICAgIC5qb2luKFwiLCBcIil9IH1gO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUE0RkEsU0FBZ0Isa0JBQXlCLE9BQTRCO0NBQ25FLE1BQU0sU0FBUyxtQkFBbUIsVUFBVSxLQUFLO0NBQ2pELElBQUksQ0FBQyxPQUFPLFNBQ1YsTUFBTSxJQUFJLE1BQU0sNEJBQTRCLEVBQUUsY0FBYyxPQUFPLEtBQUssR0FBRztDQUU3RSxPQUFPLE9BQU87QUFDaEI7Ozs7O0FBTUEsU0FBZ0Isa0JBQWtCLFdBQXlCO0NBQ3pELElBQUksYUFBYSxVQUFVLFNBQVMsR0FDbEMsT0FBTyxVQUFVLE9BQU87TUFFeEIsT0FBTztBQUVYOzs7Ozs7QUFXQSxTQUFnQiwyQkFDZCxPQUNBLFlBR1c7Q0FDWCxNQUFNLFlBQVksa0JBQWtCLEtBQUs7Q0FDekMsUUFBUSxXQUFSO0VBQ0UsS0FBSyxVQUNILE9BQU8sRUFBRSxPQUFPO0VBQ2xCLEtBQUssVUFDSCxPQUFPLEVBQUUsT0FBTztFQUNsQixLQUFLLFdBQ0gsT0FBTyxFQUFFLFFBQVE7RUFDbkIsU0FBUztHQUNQLE1BQU0sVUFDbUQ7R0FJekQsUUFBUSxRQUFRLEdBQWhCO0lBQ0UsS0FBSztJQUNMLEtBQUssbUJBQ0gsT0FBTyxFQUFFLFFBQVEsUUFBUSxLQUFLO0lBQ2hDLEtBQUssVUFNSCxPQUFPLDBCQUEwQixVQUFRLEtBQUs7SUFFaEQsS0FBSyxTQUFTO0tBQ1osTUFBTSxVQUNtRDtLQUl6RCxPQUFPLEVBQUUsTUFBTSwyQkFBMkIsUUFBUSxjQUFjLFVBQVUsQ0FBQztJQUM3RTtJQUNBLEtBQUssT0FBTztLQUNWLE1BQU0sVUFDbUQ7S0FNekQsSUFBSSxRQUFRLE9BQU8sUUFDakIsT0FBTyxFQUFFLEtBQUs7S0FH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
|
package/dist/api/config.d.ts
CHANGED
|
@@ -52,6 +52,15 @@ export type SonamuTestConfig = {
|
|
|
52
52
|
/** Dev 서버 내 Vitest 상주 인스턴스 설정 */
|
|
53
53
|
devRunner?: SonamuDevRunnerConfig;
|
|
54
54
|
};
|
|
55
|
+
export type ZodCompilerApiMode = false | "jit" | "aot";
|
|
56
|
+
export type ZodCompilerConfig = false | {
|
|
57
|
+
api?: ZodCompilerApiMode;
|
|
58
|
+
};
|
|
59
|
+
export type NormalizedZodCompilerPolicy = {
|
|
60
|
+
api: ZodCompilerApiMode;
|
|
61
|
+
targets: Record<string, never>;
|
|
62
|
+
};
|
|
63
|
+
export declare function normalizeZodCompilerPolicy<Value>(value: Value, _syncTargets?: readonly string[]): NormalizedZodCompilerPolicy;
|
|
55
64
|
export type SonamuConfig<TSinkId extends string = string, TFilterId extends string = string> = {
|
|
56
65
|
projectName?: string;
|
|
57
66
|
api: {
|
|
@@ -76,6 +85,9 @@ export type SonamuConfig<TSinkId extends string = string, TFilterId extends stri
|
|
|
76
85
|
sync: {
|
|
77
86
|
targets: string[];
|
|
78
87
|
};
|
|
88
|
+
validation?: {
|
|
89
|
+
zodCompiler?: ZodCompilerConfig;
|
|
90
|
+
};
|
|
79
91
|
database: {
|
|
80
92
|
database?: "pg" | "pgnative";
|
|
81
93
|
defaultOptions?: DatabaseConfig;
|
|
@@ -240,5 +252,8 @@ export declare function defineConfig(config: Executable<SonamuConfig>): Promise<
|
|
|
240
252
|
* @param rootPath
|
|
241
253
|
* @returns
|
|
242
254
|
*/
|
|
243
|
-
export
|
|
255
|
+
export interface ConfigLoaderDependencies {
|
|
256
|
+
ensureTsLoaderRegistered(rootPath: string): Promise<void>;
|
|
257
|
+
}
|
|
258
|
+
export declare function loadConfig(rootPath: string, dependencies?: ConfigLoaderDependencies): Promise<SonamuConfig>;
|
|
244
259
|
//# sourceMappingURL=config.d.ts.map
|
package/dist/api/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/api/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAChE,OAAO,EAAE,KAAK,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACxD,OAAO,EAAE,KAAK,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAChE,OAAO,EAAE,KAAK,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAClE,OAAO,EAAE,KAAK,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAC5D,OAAO,EAAE,KAAK,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AACjE,OAAO,EAAE,KAAK,iBAAiB,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,EACL,KAAK,eAAe,EACpB,KAAK,YAAY,EACjB,KAAK,cAAc,EACnB,KAAK,oBAAoB,EAC1B,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,EAAE,KAAK,IAAI,EAAE,MAAM,MAAM,CAAC;AAEjC,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAErD,OAAO,EAAE,KAAK,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAChE,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,KAAK,uBAAuB,EAAE,MAAM,cAAc,CAAC;AAC5D,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,KAAK,UAAU,EAAE,KAAK,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/api/config.ts"],"names":[],"mappings":"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"}
|