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/bin/fixture.js
CHANGED
|
@@ -5,6 +5,7 @@ import { Sonamu, init_sonamu } from "../api/sonamu.js";
|
|
|
5
5
|
import { EntityManager, init_entity_manager } from "../entity/entity-manager.js";
|
|
6
6
|
import { DataExplorer, init_data_explorer } from "../testing/data-explorer.js";
|
|
7
7
|
import { FixtureGenerator, init_fixture_generator } from "../testing/fixture-generator.js";
|
|
8
|
+
import { z } from "zod";
|
|
8
9
|
import chalk from "chalk";
|
|
9
10
|
import prompts from "prompts";
|
|
10
11
|
//#region src/bin/fixture.ts
|
|
@@ -15,6 +16,7 @@ init_entity_manager();
|
|
|
15
16
|
init_env();
|
|
16
17
|
init_data_explorer();
|
|
17
18
|
init_fixture_generator();
|
|
19
|
+
const SignupErrorResponse = z.object({ code: z.string().optional() }).passthrough();
|
|
18
20
|
/**
|
|
19
21
|
* username을 일반적인 규칙(영문자 시작, 영문자/숫자만, 1-20자)에 맞도록 정규화합니다.
|
|
20
22
|
*/
|
|
@@ -126,8 +128,8 @@ async function fixtureGenCommand(options) {
|
|
|
126
128
|
});
|
|
127
129
|
const response = await Sonamu.auth.handler(req);
|
|
128
130
|
if (!response.ok) {
|
|
129
|
-
const responseData = await response.json();
|
|
130
|
-
if (
|
|
131
|
+
const responseData = SignupErrorResponse.parse(await response.json());
|
|
132
|
+
if (responseData.code === "USER_ALREADY_EXISTS") {
|
|
131
133
|
console.log(chalk.yellow(` ⚠️ ${email} 이미 존재 - 건너뜁니다.`));
|
|
132
134
|
continue;
|
|
133
135
|
}
|
|
@@ -340,4 +342,4 @@ async function fixtureExploreCommand(options) {
|
|
|
340
342
|
//#endregion
|
|
341
343
|
export { fixtureExploreCommand, fixtureFetchCommand, fixtureGenCommand };
|
|
342
344
|
|
|
343
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZml4dHVyZS5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi9zcmMvYmluL2ZpeHR1cmUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGNoYWxrIGZyb20gXCJjaGFsa1wiO1xuaW1wb3J0IHByb21wdHMgZnJvbSBcInByb21wdHNcIjtcblxuaW1wb3J0IHsgU29uYW11IH0gZnJvbSBcIi4uL2FwaS9zb25hbXVcIjtcbmltcG9ydCB7IERCIH0gZnJvbSBcIi4uL2RhdGFiYXNlL2RiXCI7XG5pbXBvcnQgeyBjcmVhdGVLbmV4SW5zdGFuY2UgfSBmcm9tIFwiLi4vZGF0YWJhc2Uva25leFwiO1xuaW1wb3J0IHsgRW50aXR5TWFuYWdlciB9IGZyb20gXCIuLi9lbnRpdHkvZW50aXR5LW1hbmFnZXJcIjtcbmltcG9ydCB7IGdldFNvbmFtdUVudmlyb25tZW50IH0gZnJvbSBcIi4uL2VudlwiO1xuaW1wb3J0IHsgRGF0YUV4cGxvcmVyIH0gZnJvbSBcIi4uL3Rlc3RpbmcvZGF0YS1leHBsb3JlclwiO1xuaW1wb3J0IHsgdHlwZSBEYXRhRXhwbG9yZXJTdHJhdGVneSB9IGZyb20gXCIuLi90ZXN0aW5nL2RhdGEtZXhwbG9yZXJcIjtcbmltcG9ydCB7IEZpeHR1cmVHZW5lcmF0b3IgfSBmcm9tIFwiLi4vdGVzdGluZy9maXh0dXJlLWdlbmVyYXRvclwiO1xuXG5pbnRlcmZhY2UgRml4dHVyZUNvbW1hbmRPcHRpb25zIHtcbiAgXz86IHN0cmluZ1tdO1xuICBhbGw/OiBib29sZWFuO1xuICBpbmNsdWRlPzogc3RyaW5nO1xuICBleGNsdWRlPzogc3RyaW5nO1xuICBjb3VudD86IHN0cmluZztcbiAgXCJzYXZlLXRvXCI/OiBzdHJpbmc7XG4gIHN0cmF0ZWd5PzogRGF0YUV4cGxvcmVyU3RyYXRlZ3k7XG4gIGxpbWl0Pzogc3RyaW5nO1xuICBcInVzZS1sbG1cIj86IGJvb2xlYW47XG4gIFwibm8tY2FjaGVcIj86IGJvb2xlYW47XG59XG5cbi8qKlxuICogdXNlcm5hbWXsnYQg7J2867CY7KCB7J24IOq3nOy5mSjsmIHrrLjsnpAg7Iuc7J6RLCDsmIHrrLjsnpAv7Iir7J6Q66eMLCAxLTIw7J6QKeyXkCDrp57rj4TroZ0g7KCV6rec7ZmU7ZWp64uI64ukLlxuICovXG5mdW5jdGlvbiBzYW5pdGl6ZVVzZXJuYW1lKHJhdzogc3RyaW5nKTogc3RyaW5nIHtcbiAgLy8g7IaM66y47J6QIOuzgO2ZmCDtm4Qg7JiB66y47J6QL+yIq+yekCDsmbgg66y47J6QIOygnOqxsFxuICBsZXQgdXNlcm5hbWUgPSByYXcudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9bXmEtejAtOV0vZywgXCJcIik7XG4gIGlmICh1c2VybmFtZS5sZW5ndGggPT09IDApIHtcbiAgICB1c2VybmFtZSA9IFwidXNlclwiO1xuICB9XG4gIC8vIOyyqyDquIDsnpDqsIAg7Iir7J6Q66m0ICd1JyDsoJHrkZDslrQg7LaU6rCAXG4gIGlmICgvXlswLTldLy50ZXN0KHVzZXJuYW1lKSkge1xuICAgIHVzZXJuYW1lID0gYHUke3VzZXJuYW1lfWA7XG4gIH1cbiAgLy8gMjDsnpAg7LSI6rO8IOyLnCB0cnVuY2F0ZVxuICByZXR1cm4gdXNlcm5hbWUuc2xpY2UoMCwgMjApO1xufVxuXG4vKipcbiAqIGZpeHR1cmUgZ2VuIOuqheugueyWtCAtIGNvbmUg66mU7YOA642w7J207YSw66W8IO2ZnOyaqe2VmOyXrCDsnpDrj5nsnLzroZwgZml4dHVyZeulvCDsg53shLHtlanri4jri6QuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBmaXh0dXJlR2VuQ29tbWFuZChvcHRpb25zOiBGaXh0dXJlQ29tbWFuZE9wdGlvbnMpIHtcbiAgdHJ5IHtcbiAgICBpZiAoIUVudGl0eU1hbmFnZXIuaXNBdXRvbG9hZGVkKSB7XG4gICAgICBhd2FpdCBFbnRpdHlNYW5hZ2VyLmF1dG9sb2FkKCk7XG4gICAgfVxuXG4gICAgbGV0IGVudGl0eU5hbWVzOiBzdHJpbmdbXTtcblxuICAgIGlmIChvcHRpb25zLmFsbCkge1xuICAgICAgZW50aXR5TmFtZXMgPSBFbnRpdHlNYW5hZ2VyLmdldEFsbElkcygpO1xuICAgICAgaWYgKG9wdGlvbnMuZXhjbHVkZSkge1xuICAgICAgICBjb25zdCBleGNsdWRlTGlzdCA9IG9wdGlvbnMuZXhjbHVkZS5zcGxpdChcIixcIikubWFwKChzOiBzdHJpbmcpID0+IHMudHJpbSgpKTtcbiAgICAgICAgZW50aXR5TmFtZXMgPSBlbnRpdHlOYW1lcy5maWx0ZXIoKG5hbWUpID0+ICFleGNsdWRlTGlzdC5pbmNsdWRlcyhuYW1lKSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChvcHRpb25zLmluY2x1ZGUpIHtcbiAgICAgIGVudGl0eU5hbWVzID0gb3B0aW9ucy5pbmNsdWRlLnNwbGl0KFwiLFwiKS5tYXAoKHM6IHN0cmluZykgPT4gcy50cmltKCkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBwcm9tcHRzKHtcbiAgICAgICAgdHlwZTogXCJtdWx0aXNlbGVjdFwiLFxuICAgICAgICBuYW1lOiBcImVudGl0aWVzXCIsXG4gICAgICAgIG1lc3NhZ2U6IFwiRml4dHVyZeulvCDsg53shLHtlaAgRW50aXR566W8IOyEoO2Dne2VmOyEuOyalDpcIixcbiAgICAgICAgY2hvaWNlczogRW50aXR5TWFuYWdlci5nZXRBbGxJZHMoKS5tYXAoKGlkKSA9PiAoeyB0aXRsZTogaWQsIHZhbHVlOiBpZCB9KSksXG4gICAgICAgIG1pbjogMSxcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoIXJlc3VsdC5lbnRpdGllcyB8fCByZXN1bHQuZW50aXRpZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLnllbGxvdyhcIuy3qOyGjOuQmOyXiOyKteuLiOuLpC5cIikpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGVudGl0eU5hbWVzID0gcmVzdWx0LmVudGl0aWVzO1xuICAgIH1cblxuICAgIGxldCBjb3VudCA9IG9wdGlvbnMuY291bnQgPyBOdW1iZXIucGFyc2VJbnQob3B0aW9ucy5jb3VudCwgMTApIDogNTtcbiAgICBpZiAoIW9wdGlvbnMuY291bnQpIHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHByb21wdHMoe1xuICAgICAgICB0eXBlOiBcIm51bWJlclwiLFxuICAgICAgICBuYW1lOiBcImNvdW50XCIsXG4gICAgICAgIG1lc3NhZ2U6IFwi6rCBIEVudGl0eeuzhCDsg53shLEg6rCc7IiYOlwiLFxuICAgICAgICBpbml0aWFsOiA1LFxuICAgICAgICBtaW46IDEsXG4gICAgICB9KTtcblxuICAgICAgaWYgKCFyZXN1bHQuY291bnQpIHtcbiAgICAgICAgY29uc29sZS5sb2coY2hhbGsueWVsbG93KFwi7Leo7IaM65CY7JeI7Iq164uI64ukLlwiKSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY291bnQgPSByZXN1bHQuY291bnQ7XG4gICAgfVxuXG4gICAgLy8gVXNlciDsl5Tti7Dti7DqsIAg7Y+s7ZWo65CcIOqyveyasDog66Gc6re47J24IOqwgOuKpS/tmZXsnbjsmqkg67aE6riwIOyEoO2DnVxuICAgIGNvbnN0IGhhc1VzZXIgPSBlbnRpdHlOYW1lcy5pbmNsdWRlcyhcIlVzZXJcIik7XG5cbiAgICBpZiAoaGFzVXNlcikge1xuICAgICAgY29uc3QgdXNlck1vZGVSZXN1bHQgPSBhd2FpdCBwcm9tcHRzKHtcbiAgICAgICAgdHlwZTogXCJzZWxlY3RcIixcbiAgICAgICAgbmFtZTogXCJ1c2VyTW9kZVwiLFxuICAgICAgICBtZXNzYWdlOiBcIlVzZXIg7JeU7Yuw7Yuw6rCAIO2PrO2VqOuQmOyWtCDsnojsirXri4jri6QuIOyDneyEsSDrsKnsi53snYQg7ISg7YOd7ZWY7IS47JqUOlwiLFxuICAgICAgICBjaG9pY2VzOiBbXG4gICAgICAgICAgeyB0aXRsZTogXCIxLiDroZzqt7jsnbgg6rCA64ql7ZWcIOyCrOyaqeyekCBmaXh0dXJlIOyDneyEsVwiLCB2YWx1ZTogXCJsb2dpblwiIH0sXG4gICAgICAgICAgeyB0aXRsZTogXCIyLiDtmZXsnbjsmqkg642w7J207YSwKOuhnOq3uOyduCDrtojqsIApIOyDneyEsVwiLCB2YWx1ZTogXCJkdW1teVwiIH0sXG4gICAgICAgIF0sXG4gICAgICB9KTtcblxuICAgICAgaWYgKCF1c2VyTW9kZVJlc3VsdC51c2VyTW9kZSkge1xuICAgICAgICBjb25zb2xlLmxvZyhjaGFsay55ZWxsb3coXCLst6jshozrkJjsl4jsirXri4jri6QuXCIpKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAodXNlck1vZGVSZXN1bHQudXNlck1vZGUgPT09IFwibG9naW5cIikge1xuICAgICAgICAvLyBMTE0g7IKs7JqpIOyXrOu2gFxuICAgICAgICBsZXQgdXNlTExNID0gb3B0aW9uc1tcInVzZS1sbG1cIl0gPz8gZmFsc2U7XG4gICAgICAgIGlmICghb3B0aW9uc1tcInVzZS1sbG1cIl0pIHtcbiAgICAgICAgICBjb25zdCBsbG1SZXN1bHQgPSBhd2FpdCBwcm9tcHRzKHtcbiAgICAgICAgICAgIHR5cGU6IFwiY29uZmlybVwiLFxuICAgICAgICAgICAgbmFtZTogXCJ1c2VMTE1cIixcbiAgICAgICAgICAgIG1lc3NhZ2U6XG4gICAgICAgICAgICAgIFwiTExN7Jy866GcIOuNlCDtmITsi6TsoIHsnbgg642w7J207YSw66W8IOyDneyEse2VoOq5jOyalD8gKGZpeHR1cmVIaW50IOq4sOuwmCwgQU5USFJPUElDX0FQSV9LRVkg7ZWE7JqUKVwiLFxuICAgICAgICAgICAgaW5pdGlhbDogZmFsc2UsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdXNlTExNID0gbGxtUmVzdWx0LnVzZUxMTSA/PyBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGVuYWJsZUxMTUNhY2hlID0gIW9wdGlvbnNbXCJuby1jYWNoZVwiXTtcbiAgICAgICAgY29uc3QgREVGQVVMVF9QQVNTV09SRCA9IFwiVGVzdDEyMzQhXCI7XG5cbiAgICAgICAgLy8g66Gc6re47J24IOqwgOuKpSDqsr3roZzsl5DshJzripQg7ZiE7J6sIO2ZmOqyveydmCDsnb3quLAgRELrpbwgc291cmNlRGLroZwg7IKs7JqpXG4gICAgICAgIGNvbnN0IHNvdXJjZURiID0gREIuZ2V0REIoXCJyXCIpO1xuICAgICAgICBjb25zdCBnZW5lcmF0b3IgPSBuZXcgRml4dHVyZUdlbmVyYXRvcihcbiAgICAgICAgICBzb3VyY2VEYixcbiAgICAgICAgICBzb3VyY2VEYixcbiAgICAgICAgICBnZXRTb25hbXVFbnZpcm9ubWVudCgpLFxuICAgICAgICAgIEVudGl0eU1hbmFnZXIsXG4gICAgICAgICAgeyB1c2VMTE0sIGVuYWJsZUxMTUNhY2hlIH0sXG4gICAgICAgICk7XG5cbiAgICAgICAgY29uc3QgY3JlYXRlZENyZWRlbnRpYWxzOiBBcnJheTx7IGVtYWlsOiBzdHJpbmc7IHBhc3N3b3JkOiBzdHJpbmcgfT4gPSBbXTtcbiAgICAgICAgY29uc3QgYmFzZVBhdGggPSBTb25hbXUuY29uZmlnLnNlcnZlci5hdXRoPy5iYXNlUGF0aCA/PyBcIi9hcGkvYXV0aFwiO1xuXG4gICAgICAgIGlmICh1c2VMTE0pIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgIGNoYWxrLmN5YW4oXG4gICAgICAgICAgICAgIGBcXG5MTE0g66qo65Oc66GcIOuhnOq3uOyduCDqsIDriqXtlZwg7IKs7Jqp7J6QICR7Y291bnR966qFIOyDneyEsSDspJEuLi4gKOy6kOyLsTogJHtlbmFibGVMTE1DYWNoZSA/IFwiT05cIiA6IFwiT0ZGXCJ9KWAsXG4gICAgICAgICAgICApLFxuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc29sZS5sb2coY2hhbGsuY3lhbihgXFxu66Gc6re47J24IOqwgOuKpe2VnCDsgqzsmqnsnpAgJHtjb3VudH3rqoUg7IOd7ISxIOykkS4uLmApKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY291bnQ7IGkrKykge1xuICAgICAgICAgIGNvbnN0IHVzZXJEYXRhID0gYXdhaXQgZ2VuZXJhdG9yLmdlbmVyYXRlKFwiVXNlclwiKTtcblxuICAgICAgICAgIGNvbnN0IG5hbWUgPSBTdHJpbmcodXNlckRhdGEubmFtZSA/PyBcIlwiKTtcbiAgICAgICAgICBjb25zdCBlbWFpbCA9IFN0cmluZyh1c2VyRGF0YS5lbWFpbCA/PyBcIlwiKTtcbiAgICAgICAgICBjb25zdCB1c2VybmFtZSA9IHNhbml0aXplVXNlcm5hbWUoU3RyaW5nKHVzZXJEYXRhLnVzZXJuYW1lID8/IFwiXCIpKTtcbiAgICAgICAgICBjb25zdCBkaXNwbGF5VXNlcm5hbWUgPVxuICAgICAgICAgICAgdXNlckRhdGEuZGlzcGxheV91c2VybmFtZSAhPT0gdW5kZWZpbmVkID8gU3RyaW5nKHVzZXJEYXRhLmRpc3BsYXlfdXNlcm5hbWUpIDogdW5kZWZpbmVkO1xuXG4gICAgICAgICAgY29uc3QgYm9keTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7XG4gICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgZW1haWwsXG4gICAgICAgICAgICB1c2VybmFtZSxcbiAgICAgICAgICAgIHBhc3N3b3JkOiBERUZBVUxUX1BBU1NXT1JELFxuICAgICAgICAgIH07XG4gICAgICAgICAgaWYgKGRpc3BsYXlVc2VybmFtZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBib2R5LmRpc3BsYXlfdXNlcm5hbWUgPSBkaXNwbGF5VXNlcm5hbWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgcmVxID0gbmV3IFJlcXVlc3QoYGh0dHA6Ly9sb2NhbGhvc3Qke2Jhc2VQYXRofS9zaWduLXVwL2VtYWlsYCwge1xuICAgICAgICAgICAgbWV0aG9kOiBcIlBPU1RcIixcbiAgICAgICAgICAgIGhlYWRlcnM6IHsgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIgfSxcbiAgICAgICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KGJvZHkpLFxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBTb25hbXUuYXV0aC5oYW5kbGVyKHJlcSk7XG5cbiAgICAgICAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgICAgICAgICBjb25zdCByZXNwb25zZURhdGEgPSAoYXdhaXQgcmVzcG9uc2UuanNvbigpKSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICAgICAgICAgIGNvbnN0IGNvZGUgPSB0eXBlb2YgcmVzcG9uc2VEYXRhLmNvZGUgPT09IFwic3RyaW5nXCIgPyByZXNwb25zZURhdGEuY29kZSA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGlmIChjb2RlID09PSBcIlVTRVJfQUxSRUFEWV9FWElTVFNcIikge1xuICAgICAgICAgICAgICBjb25zb2xlLmxvZyhjaGFsay55ZWxsb3coYCAg4pqg77iPICAke2VtYWlsfSDsnbTrr7gg7KG07J6sIC0g6rG064SI65yB64uI64ukLmApKTtcbiAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhjaGFsay5yZWQoYCAg4p2MICR7ZW1haWx9IOyDneyEsSDsi6TtjKg6ICR7SlNPTi5zdHJpbmdpZnkocmVzcG9uc2VEYXRhKX1gKSk7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjcmVhdGVkQ3JlZGVudGlhbHMucHVzaCh7IGVtYWlsLCBwYXNzd29yZDogREVGQVVMVF9QQVNTV09SRCB9KTtcbiAgICAgICAgICBjb25zb2xlLmxvZyhjaGFsay5ncmVlbihgICDinIUgJHtlbWFpbH0g7IOd7ISxIOyZhOujjGApKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGVtYWlsX3ZlcmlmaWVkID0gdHJ1ZSDsp4HsoJEg7JeF642w7J207Yq4IChkZXYg7Y647J2YKVxuICAgICAgICBpZiAoY3JlYXRlZENyZWRlbnRpYWxzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBjb25zdCBlbWFpbHMgPSBjcmVhdGVkQ3JlZGVudGlhbHMubWFwKChjKSA9PiBjLmVtYWlsKTtcbiAgICAgICAgICBhd2FpdCBEQi5nZXREQihcIndcIikoXCJ1c2Vyc1wiKS53aGVyZUluKFwiZW1haWxcIiwgZW1haWxzKS51cGRhdGUoeyBlbWFpbF92ZXJpZmllZDogdHJ1ZSB9KTtcbiAgICAgICAgICBjb25zb2xlLmxvZyhjaGFsay5ncmVlbihgXFxuZW1haWxfdmVyaWZpZWQgPSB0cnVlIOyXheuNsOydtO2KuCDsmYTro4xgKSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodXNlTExNKSB7XG4gICAgICAgICAgY29uc3Qgc3RhdHMgPSBnZW5lcmF0b3IuZ2V0TExNQ2FjaGVTdGF0cygpO1xuICAgICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmN5YW4oYFtMTE0gQ2FjaGVdIOy6kOyLnCDtgazquLA6ICR7c3RhdHMuc2l6ZX1gKSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICBjaGFsay5ncmVlbihgXFxu4pyFICR7Y3JlYXRlZENyZWRlbnRpYWxzLmxlbmd0aH3rqoXsnZgg66Gc6re47J24IOqwgOuKpe2VnCDsgqzsmqnsnpAg7IOd7ISxIOyZhOujjGApLFxuICAgICAgICApO1xuICAgICAgICBpZiAoY3JlYXRlZENyZWRlbnRpYWxzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhcIlxcbuyDneyEseuQnCDqs4TsoJUg66qp66GdOlwiKTtcbiAgICAgICAgICBjb25zb2xlLnRhYmxlKGNyZWF0ZWRDcmVkZW50aWFscyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICAvLyB1c2VyTW9kZSA9PT0gXCJkdW1teVwiOiDquLDsobQgZ2VuZXJhdGVCYXRjaCgpIO2dkOumhCDqs4Tsho1cbiAgICB9XG5cbiAgICBsZXQgc2F2ZVRhcmdldCA9IG9wdGlvbnNbXCJzYXZlLXRvXCJdIHx8IFwiZGJcIjtcbiAgICBpZiAoIW9wdGlvbnNbXCJzYXZlLXRvXCJdKSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBwcm9tcHRzKHtcbiAgICAgICAgdHlwZTogXCJzZWxlY3RcIixcbiAgICAgICAgbmFtZTogXCJzYXZlVGFyZ2V0XCIsXG4gICAgICAgIG1lc3NhZ2U6IFwi7KCA7J6lIOuwqeyLnTpcIixcbiAgICAgICAgY2hvaWNlczogW1xuICAgICAgICAgIHsgdGl0bGU6IFwiRml4dHVyZSBEQuyXkCDsoIDsnqVcIiwgdmFsdWU6IFwiZGJcIiB9LFxuICAgICAgICAgIHsgdGl0bGU6IFwi7YyM7J2866GcIOyggOyepSAo7J6Q64+ZIO2MjOydvOuqhSlcIiwgdmFsdWU6IFwiZmlsZVwiIH0sXG4gICAgICAgICAgeyB0aXRsZTogXCLtjIzsnbzroZwg7KCA7J6lICjtjIzsnbzrqoUg7KeA7KCVKVwiLCB2YWx1ZTogXCJmaWxlOmN1c3RvbVwiIH0sXG4gICAgICAgICAgeyB0aXRsZTogXCLsoIDsnqUg7JWIIO2VqCAo7Lac66Cl66eMKVwiLCB2YWx1ZTogXCJub25lXCIgfSxcbiAgICAgICAgXSxcbiAgICAgIH0pO1xuXG4gICAgICBzYXZlVGFyZ2V0ID0gcmVzdWx0LnNhdmVUYXJnZXQ7XG5cbiAgICAgIGlmIChzYXZlVGFyZ2V0ID09PSBcImZpbGU6Y3VzdG9tXCIpIHtcbiAgICAgICAgY29uc3QgZmlsZW5hbWVSZXN1bHQgPSBhd2FpdCBwcm9tcHRzKHtcbiAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICBuYW1lOiBcImZpbGVuYW1lXCIsXG4gICAgICAgICAgbWVzc2FnZTogXCLtjIzsnbzrqoU6XCIsXG4gICAgICAgICAgaW5pdGlhbDogXCJmaXh0dXJlcy5qc29uXCIsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmICghZmlsZW5hbWVSZXN1bHQuZmlsZW5hbWUpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhjaGFsay55ZWxsb3coXCLst6jshozrkJjsl4jsirXri4jri6QuXCIpKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBzYXZlVGFyZ2V0ID0gYGZpbGU6JHtmaWxlbmFtZVJlc3VsdC5maWxlbmFtZX1gO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIExMTSDsgqzsmqkg7Jes67aAIOqysOyglVxuICAgIGxldCB1c2VMTE0gPSBvcHRpb25zW1widXNlLWxsbVwiXSA/PyBmYWxzZTtcbiAgICBpZiAoIW9wdGlvbnNbXCJ1c2UtbGxtXCJdKSB7XG4gICAgICBjb25zdCBsbG1SZXN1bHQgPSBhd2FpdCBwcm9tcHRzKHtcbiAgICAgICAgdHlwZTogXCJjb25maXJtXCIsXG4gICAgICAgIG5hbWU6IFwidXNlTExNXCIsXG4gICAgICAgIG1lc3NhZ2U6XG4gICAgICAgICAgXCJMTE3snLzroZwg642UIO2YhOyLpOyggeyduCDrjbDsnbTthLDrpbwg7IOd7ISx7ZWg6rmM7JqUPyAoZml4dHVyZUhpbnQg6riw67CYLCBBTlRIUk9QSUNfQVBJX0tFWSDtlYTsmpQpXCIsXG4gICAgICAgIGluaXRpYWw6IGZhbHNlLFxuICAgICAgfSk7XG4gICAgICB1c2VMTE0gPSBsbG1SZXN1bHQudXNlTExNID8/IGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IGVuYWJsZUxMTUNhY2hlID0gIW9wdGlvbnNbXCJuby1jYWNoZVwiXTtcblxuICAgIC8vIGZpeHR1cmUgZ2VuOiBmaXh0dXJlIERCIOuCtOyXkOyEnCDssLjsobAg6rSA6rOE66W8IO2VtOqysO2VmOqzoCDsoIDsnqXtlanri4jri6RcbiAgICBjb25zdCBmaXh0dXJlRGIgPSBjcmVhdGVLbmV4SW5zdGFuY2UoU29uYW11LmRiQ29uZmlnLmZpeHR1cmUpO1xuICAgIGNvbnN0IGdlbmVyYXRvciA9IG5ldyBGaXh0dXJlR2VuZXJhdG9yKGZpeHR1cmVEYiwgZml4dHVyZURiLCBcImZpeHR1cmVcIiwgRW50aXR5TWFuYWdlciwge1xuICAgICAgdXNlTExNLFxuICAgICAgZW5hYmxlTExNQ2FjaGUsXG4gICAgfSk7XG5cbiAgICBpZiAodXNlTExNKSB7XG4gICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgY2hhbGsuY3lhbihcbiAgICAgICAgICBgXFxuTExNIOuqqOuTnOuhnCAke2VudGl0eU5hbWVzLmpvaW4oXCIsIFwiKX0g7IOd7ISxIOykkS4uLiAo7LqQ7IuxOiAke2VuYWJsZUxMTUNhY2hlID8gXCJPTlwiIDogXCJPRkZcIn0pYCxcbiAgICAgICAgKSxcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmN5YW4oYFxcbiR7ZW50aXR5TmFtZXMuam9pbihcIiwgXCIpfSDsg53shLEg7KSRLi4uYCkpO1xuICAgIH1cblxuICAgIGNvbnN0IHNwZWNzID0gZW50aXR5TmFtZXMubWFwKChlbnRpdHlOYW1lKSA9PiAoe1xuICAgICAgZW50aXR5OiBlbnRpdHlOYW1lLFxuICAgICAgY291bnQsXG4gICAgICBvdmVycmlkZXM6IHt9LFxuICAgIH0pKTtcblxuICAgIGNvbnN0IHJlc3VsdHMgPSBhd2FpdCBnZW5lcmF0b3IuZ2VuZXJhdGVCYXRjaChzcGVjcyk7XG5cbiAgICBpZiAodXNlTExNKSB7XG4gICAgICBjb25zdCBzdGF0cyA9IGdlbmVyYXRvci5nZXRMTE1DYWNoZVN0YXRzKCk7XG4gICAgICBjb25zb2xlLmxvZyhjaGFsay5jeWFuKGBbTExNIENhY2hlXSDsupDsi5wg7YGs6riwOiAke3N0YXRzLnNpemV9YCkpO1xuICAgIH1cblxuICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyZWVuKGBcXG7inIUgJHtyZXN1bHRzLmxlbmd0aH3qsJwgZml4dHVyZSDsg53shLEg7JmE66OMYCkpO1xuXG4gICAgaWYgKHNhdmVUYXJnZXQgPT09IFwibm9uZVwiKSB7XG4gICAgICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeShyZXN1bHRzLCBudWxsLCAyKSk7XG4gICAgfSBlbHNlIGlmIChzYXZlVGFyZ2V0ID09PSBcImRiXCIpIHtcbiAgICAgIC8vIGdlbmVyYXRlQmF0Y2jqsIAg7J2066+4IERC7JeQIOyggOyepe2WiOycvOuvgOuhnCDrs4Trj4Qg7KCA7J6l7J20IOu2iO2VhOyalO2VqeuLiOuLpC5cbiAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyZWVuKFwiRml4dHVyZSBEQuyXkCDsoIDsnqXrkJjsl4jsirXri4jri6QuXCIpKTtcbiAgICB9IGVsc2UgaWYgKHNhdmVUYXJnZXQuc3RhcnRzV2l0aChcImZpbGVcIikpIHtcbiAgICAgIGNvbnN0IGZzID0gYXdhaXQgaW1wb3J0KFwibm9kZTpmcy9wcm9taXNlc1wiKTtcbiAgICAgIGNvbnN0IHBhdGggPSBhd2FpdCBpbXBvcnQoXCJub2RlOnBhdGhcIik7XG5cbiAgICAgIGNvbnN0IGZpeHR1cmVzRGlyID0gcGF0aC5qb2luKHByb2Nlc3MuY3dkKCksIFwidGVzdFwiLCBcImZpeHR1cmVzXCIpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgZnMuYWNjZXNzKGZpeHR1cmVzRGlyKTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICBhd2FpdCBmcy5ta2RpcihmaXh0dXJlc0RpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgICB9XG5cbiAgICAgIGZvciAoY29uc3QgZW50aXR5TmFtZSBvZiBlbnRpdHlOYW1lcykge1xuICAgICAgICBjb25zdCBlbnRpdHlSZXN1bHRzID0gcmVzdWx0cy5maWx0ZXIoKHIpID0+IHIuZW50aXR5SWQgPT09IGVudGl0eU5hbWUpO1xuXG4gICAgICAgIGlmIChlbnRpdHlSZXN1bHRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGZpbGVuYW1lOiBzdHJpbmc7XG4gICAgICAgIGlmIChzYXZlVGFyZ2V0ID09PSBcImZpbGVcIikge1xuICAgICAgICAgIGNvbnN0IGVudGl0eSA9IEVudGl0eU1hbmFnZXIuZ2V0KGVudGl0eU5hbWUpO1xuICAgICAgICAgIGZpbGVuYW1lID0gYCR7ZW50aXR5LnRhYmxlfS5qc29uYDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBmaWxlbmFtZSA9IHNhdmVUYXJnZXQucmVwbGFjZShcImZpbGU6XCIsIFwiXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZmlsZXBhdGggPSBwYXRoLmpvaW4oZml4dHVyZXNEaXIsIGZpbGVuYW1lKTtcbiAgICAgICAgYXdhaXQgZnMud3JpdGVGaWxlKFxuICAgICAgICAgIGZpbGVwYXRoLFxuICAgICAgICAgIEpTT04uc3RyaW5naWZ5KFxuICAgICAgICAgICAgZW50aXR5UmVzdWx0cy5tYXAoKHIpID0+IHIuZGF0YSksXG4gICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgMixcbiAgICAgICAgICApLFxuICAgICAgICApO1xuICAgICAgICBjb25zb2xlLmxvZyhjaGFsay5ncmVlbihg4pyFICR7ZmlsZXBhdGh9IOyggOyepSDsmYTro4xgKSk7XG4gICAgICB9XG4gICAgfVxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICBjaGFsay5yZWQoXG4gICAgICAgIFwiRml4dHVyZSDsg53shLEg7KSRIOyYpOulmOqwgCDrsJzsg53tlojsirXri4jri6QuXFxuXCIgK1xuICAgICAgICAgIFwi7JuQ7J24OiBFbnRpdHkg7KCV7J2Y64KYIERCIOyXsOqysOydhCDtmZXsnbjtlbTso7zshLjsmpQuXFxuXCIgK1xuICAgICAgICAgIFwi7J6Q7IS47ZWcIOuCtOyaqTpcIixcbiAgICAgICksXG4gICAgICBlcnJvcixcbiAgICApO1xuICAgIHRocm93IGVycm9yO1xuICB9XG59XG5cbi8qKlxuICogZml4dHVyZSBmZXRjaCDrqoXroLnslrQgLSDsi6TsoJwg7Jq07JiBIERC7JeQ7IScIOuNsOydtO2EsOulvCDqsIDsoLjsmYAgZml4dHVyZeuhnCDsoIDsnqXtlanri4jri6QuXG4gKiDqtIDqs4TrkJwg642w7J207YSw64+EIO2VqOq7mCDqsIDsoLjsmKTrr4DroZwg7ZiE7Iuk7KCB7J24IO2FjOyKpO2KuCDrjbDsnbTthLDrpbwg7ZmV67O07ZWgIOyImCDsnojsirXri4jri6QuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBmaXh0dXJlRmV0Y2hDb21tYW5kKG9wdGlvbnM6IEZpeHR1cmVDb21tYW5kT3B0aW9ucykge1xuICB0cnkge1xuICAgIGlmICghRW50aXR5TWFuYWdlci5pc0F1dG9sb2FkZWQpIHtcbiAgICAgIGF3YWl0IEVudGl0eU1hbmFnZXIuYXV0b2xvYWQoKTtcbiAgICB9XG5cbiAgICBsZXQgZW50aXR5TmFtZXM6IHN0cmluZ1tdO1xuXG4gICAgaWYgKG9wdGlvbnMuYWxsKSB7XG4gICAgICBlbnRpdHlOYW1lcyA9IEVudGl0eU1hbmFnZXIuZ2V0QWxsSWRzKCk7XG4gICAgICBpZiAob3B0aW9ucy5leGNsdWRlKSB7XG4gICAgICAgIGNvbnN0IGV4Y2x1ZGVMaXN0ID0gb3B0aW9ucy5leGNsdWRlLnNwbGl0KFwiLFwiKS5tYXAoKHM6IHN0cmluZykgPT4gcy50cmltKCkpO1xuICAgICAgICBlbnRpdHlOYW1lcyA9IGVudGl0eU5hbWVzLmZpbHRlcigobmFtZSkgPT4gIWV4Y2x1ZGVMaXN0LmluY2x1ZGVzKG5hbWUpKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKG9wdGlvbnMuaW5jbHVkZSkge1xuICAgICAgZW50aXR5TmFtZXMgPSBvcHRpb25zLmluY2x1ZGUuc3BsaXQoXCIsXCIpLm1hcCgoczogc3RyaW5nKSA9PiBzLnRyaW0oKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHByb21wdHMoe1xuICAgICAgICB0eXBlOiBcIm11bHRpc2VsZWN0XCIsXG4gICAgICAgIG5hbWU6IFwiZW50aXRpZXNcIixcbiAgICAgICAgbWVzc2FnZTogXCJJbXBvcnTtlaAgRW50aXR566W8IOyEoO2Dne2VmOyEuOyalDpcIixcbiAgICAgICAgY2hvaWNlczogRW50aXR5TWFuYWdlci5nZXRBbGxJZHMoKS5tYXAoKGlkKSA9PiAoeyB0aXRsZTogaWQsIHZhbHVlOiBpZCB9KSksXG4gICAgICAgIG1pbjogMSxcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoIXJlc3VsdC5lbnRpdGllcyB8fCByZXN1bHQuZW50aXRpZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLnllbGxvdyhcIuy3qOyGjOuQmOyXiOyKteuLiOuLpC5cIikpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGVudGl0eU5hbWVzID0gcmVzdWx0LmVudGl0aWVzO1xuICAgIH1cblxuICAgIGNvbnN0IHN0cmF0ZWd5OiBEYXRhRXhwbG9yZXJTdHJhdGVneSA9IG9wdGlvbnMuc3RyYXRlZ3kgPz8gXCJyZWNlbnRcIjtcbiAgICBjb25zdCBsaW1pdCA9IG9wdGlvbnMubGltaXQgPyBOdW1iZXIucGFyc2VJbnQob3B0aW9ucy5saW1pdCwgMTApIDogMTA7XG5cbiAgICAvLyBmaXh0dXJlIGZldGNoOiDtmITsnqwg7ZmY6rK9IOuNsOydtO2EsOulvCBmaXh0dXJlIERC66GcIGltcG9ydO2VqeuLiOuLpFxuICAgIGNvbnN0IHNvdXJjZURiID0gREIuZ2V0REIoXCJyXCIpO1xuICAgIGNvbnN0IGZpeHR1cmVEYiA9IGNyZWF0ZUtuZXhJbnN0YW5jZShTb25hbXUuZGJDb25maWcuZml4dHVyZSk7XG4gICAgY29uc3QgZ2VuZXJhdG9yID0gbmV3IEZpeHR1cmVHZW5lcmF0b3Ioc291cmNlRGIsIGZpeHR1cmVEYiwgXCJmaXh0dXJlXCIsIEVudGl0eU1hbmFnZXIpO1xuXG4gICAgY29uc29sZS5sb2coY2hhbGsuY3lhbihgXFxuJHtlbnRpdHlOYW1lcy5qb2luKFwiLCBcIil9IGltcG9ydCDspJEuLi5gKSk7XG5cbiAgICBmb3IgKGNvbnN0IGVudGl0eU5hbWUgb2YgZW50aXR5TmFtZXMpIHtcbiAgICAgIGNvbnN0IHJlc3VsdHMgPSBhd2FpdCBnZW5lcmF0b3IuaW1wb3J0RnJvbVNvdXJjZShlbnRpdHlOYW1lLCB7XG4gICAgICAgIHN0cmF0ZWd5LFxuICAgICAgICBsaW1pdCxcbiAgICAgICAgaW5jbHVkZVJlbGF0aW9uczogdHJ1ZSxcbiAgICAgICAgbWF4RGVwdGg6IDIsXG4gICAgICB9KTtcblxuICAgICAgY29uc29sZS5sb2coY2hhbGsuZ3JlZW4oYOKchSAke2VudGl0eU5hbWV9OiAke3Jlc3VsdHMubGVuZ3RofeqwnCBpbXBvcnQg7JmE66OMYCkpO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBjb25zb2xlLmVycm9yKFxuICAgICAgY2hhbGsucmVkKFxuICAgICAgICBcIuyLpOygnCBEQuyXkOyEnCDrjbDsnbTthLDrpbwg6rCA7KC47Jik64qUIOykkSDsmKTrpZjqsIAg67Cc7IOd7ZaI7Iq164uI64ukLlxcblwiICtcbiAgICAgICAgICBcIuybkOyduDog7IaM7IqkIERCIOyXsOqysCDshKTsoJUoc29uYW11LmNvbmZpZy50cynsnbTrgpggRW50aXR5IOq0gOqzhCDsoJXsnZjrpbwg7ZmV7J247ZW07KO87IS47JqULlxcblwiICtcbiAgICAgICAgICBcIuyekOyEuO2VnCDrgrTsmqk6XCIsXG4gICAgICApLFxuICAgICAgZXJyb3IsXG4gICAgKTtcbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxufVxuXG4vKipcbiAqIGZpeHR1cmUgZXhwbG9yZSDrqoXroLnslrQgLSBEQuydmCDsi6TsoJwg642w7J207YSw66W8IOyhsO2ajO2VmOyXrCDtmZXsnbjtlanri4jri6QuXG4gKiDsoIDsnqXtlZjsp4Ag7JWK6rOgIOyhsO2ajOunjCDtlZjrr4DroZwg642w7J207YSw66W8IOu5oOultOqyjCDtmZXsnbjtlaAg65WMIOycoOyaqe2VqeuLiOuLpC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGZpeHR1cmVFeHBsb3JlQ29tbWFuZChvcHRpb25zOiBGaXh0dXJlQ29tbWFuZE9wdGlvbnMpIHtcbiAgdHJ5IHtcbiAgICBpZiAoIUVudGl0eU1hbmFnZXIuaXNBdXRvbG9hZGVkKSB7XG4gICAgICBhd2FpdCBFbnRpdHlNYW5hZ2VyLmF1dG9sb2FkKCk7XG4gICAgfVxuXG4gICAgbGV0IGVudGl0eU5hbWUgPSBvcHRpb25zLmluY2x1ZGU7XG5cbiAgICBpZiAoIWVudGl0eU5hbWUpIHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHByb21wdHMoe1xuICAgICAgICB0eXBlOiBcInNlbGVjdFwiLFxuICAgICAgICBuYW1lOiBcImVudGl0eVwiLFxuICAgICAgICBtZXNzYWdlOiBcIu2DkOyDie2VoCBFbnRpdHk6XCIsXG4gICAgICAgIGNob2ljZXM6IEVudGl0eU1hbmFnZXIuZ2V0QWxsSWRzKCkubWFwKChpZCkgPT4gKHsgdGl0bGU6IGlkLCB2YWx1ZTogaWQgfSkpLFxuICAgICAgfSk7XG5cbiAgICAgIGlmICghcmVzdWx0LmVudGl0eSkge1xuICAgICAgICBjb25zb2xlLmxvZyhjaGFsay55ZWxsb3coXCLst6jshozrkJjsl4jsirXri4jri6QuXCIpKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBlbnRpdHlOYW1lID0gcmVzdWx0LmVudGl0eTtcbiAgICB9XG5cbiAgICBpZiAoIWVudGl0eU5hbWUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkVudGl0eSBuYW1lIGlzIHJlcXVpcmVkXCIpO1xuICAgIH1cblxuICAgIGNvbnN0IHN0cmF0ZWd5OiBEYXRhRXhwbG9yZXJTdHJhdGVneSA9IG9wdGlvbnMuc3RyYXRlZ3kgPz8gXCJzYW1wbGVcIjtcbiAgICBjb25zdCBsaW1pdCA9IG9wdGlvbnMubGltaXQgPyBOdW1iZXIucGFyc2VJbnQob3B0aW9ucy5saW1pdCwgMTApIDogMTA7XG5cbiAgICBjb25zdCBkYiA9IERCLmdldERCKFwiclwiKTtcbiAgICBjb25zdCBleHBsb3JlciA9IG5ldyBEYXRhRXhwbG9yZXIoZGIsIEVudGl0eU1hbmFnZXIpO1xuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBleHBsb3Jlci5leHBsb3JlKGVudGl0eU5hbWUsIHsgc3RyYXRlZ3ksIGxpbWl0IH0pO1xuXG4gICAgY29uc29sZS5sb2coY2hhbGsuY3lhbihgXFxuJHtlbnRpdHlOYW1lfSAke2RhdGEubGVuZ3RofeqwnCDsobDtmowg7JmE66OMOmApKTtcbiAgICBjb25zb2xlLnRhYmxlKGRhdGEpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICBjaGFsay5yZWQoXG4gICAgICAgIFwi642w7J207YSwIOyhsO2ajCDspJEg7Jik66WY6rCAIOuwnOyDne2WiOyKteuLiOuLpC5cXG5cIiArXG4gICAgICAgICAgXCLsm5Dsnbg6IERCIOyXsOqysOydtOuCmCBFbnRpdHkg7KCV7J2Y66W8IO2ZleyduO2VtOyjvOyEuOyalC5cXG5cIiArXG4gICAgICAgICAgXCLsnpDshLjtlZwg64K07JqpOlwiLFxuICAgICAgKSxcbiAgICAgIGVycm9yLFxuICAgICk7XG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztZQUdzQztRQUNIO1VBQ2tCO29CQUNHO1NBQ1g7bUJBQ1U7dUJBRVE7Ozs7QUFrQi9ELFNBQVMsaUJBQWlCLEtBQXFCO0NBRTdDLElBQUksV0FBVyxJQUFJLFlBQVksQ0FBQyxDQUFDLFFBQVEsY0FBYyxFQUFFO0NBQ3pELElBQUksU0FBUyxXQUFXLEdBQ3RCLFdBQVc7Q0FHYixJQUFJLFNBQVMsS0FBSyxRQUFRLEdBQ3hCLFdBQVcsSUFBSTtDQUdqQixPQUFPLFNBQVMsTUFBTSxHQUFHLEVBQUU7QUFDN0I7Ozs7QUFLQSxlQUFzQixrQkFBa0IsU0FBZ0M7Q0FDdEUsSUFBSTtFQUNGLElBQUksQ0FBQyxjQUFjLGNBQ2pCLE1BQU0sY0FBYyxTQUFTO0VBRy9CLElBQUk7RUFFSixJQUFJLFFBQVEsS0FBSztHQUNmLGNBQWMsY0FBYyxVQUFVO0dBQ3RDLElBQUksUUFBUSxTQUFTO0lBQ25CLE1BQU0sY0FBYyxRQUFRLFFBQVEsTUFBTSxHQUFHLENBQUMsQ0FBQyxLQUFLLE1BQWMsRUFBRSxLQUFLLENBQUM7SUFDMUUsY0FBYyxZQUFZLFFBQVEsU0FBUyxD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
|
|
345
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZml4dHVyZS5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi9zcmMvYmluL2ZpeHR1cmUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGNoYWxrIGZyb20gXCJjaGFsa1wiO1xuaW1wb3J0IHByb21wdHMgZnJvbSBcInByb21wdHNcIjtcbmltcG9ydCB7IHogfSBmcm9tIFwiem9kXCI7XG5cbmltcG9ydCB7IFNvbmFtdSB9IGZyb20gXCIuLi9hcGkvc29uYW11XCI7XG5pbXBvcnQgeyBEQiB9IGZyb20gXCIuLi9kYXRhYmFzZS9kYlwiO1xuaW1wb3J0IHsgY3JlYXRlS25leEluc3RhbmNlIH0gZnJvbSBcIi4uL2RhdGFiYXNlL2tuZXhcIjtcbmltcG9ydCB7IEVudGl0eU1hbmFnZXIgfSBmcm9tIFwiLi4vZW50aXR5L2VudGl0eS1tYW5hZ2VyXCI7XG5pbXBvcnQgeyBnZXRTb25hbXVFbnZpcm9ubWVudCB9IGZyb20gXCIuLi9lbnZcIjtcbmltcG9ydCB7IERhdGFFeHBsb3JlciB9IGZyb20gXCIuLi90ZXN0aW5nL2RhdGEtZXhwbG9yZXJcIjtcbmltcG9ydCB7IHR5cGUgRGF0YUV4cGxvcmVyU3RyYXRlZ3kgfSBmcm9tIFwiLi4vdGVzdGluZy9kYXRhLWV4cGxvcmVyXCI7XG5pbXBvcnQgeyBGaXh0dXJlR2VuZXJhdG9yIH0gZnJvbSBcIi4uL3Rlc3RpbmcvZml4dHVyZS1nZW5lcmF0b3JcIjtcblxuaW50ZXJmYWNlIEZpeHR1cmVDb21tYW5kT3B0aW9ucyB7XG4gIF8/OiBzdHJpbmdbXTtcbiAgYWxsPzogYm9vbGVhbjtcbiAgaW5jbHVkZT86IHN0cmluZztcbiAgZXhjbHVkZT86IHN0cmluZztcbiAgY291bnQ/OiBzdHJpbmc7XG4gIFwic2F2ZS10b1wiPzogc3RyaW5nO1xuICBzdHJhdGVneT86IERhdGFFeHBsb3JlclN0cmF0ZWd5O1xuICBsaW1pdD86IHN0cmluZztcbiAgXCJ1c2UtbGxtXCI/OiBib29sZWFuO1xuICBcIm5vLWNhY2hlXCI/OiBib29sZWFuO1xufVxuXG5pbnRlcmZhY2UgU2lnbnVwQm9keSB7XG4gIG5hbWU6IHN0cmluZztcbiAgZW1haWw6IHN0cmluZztcbiAgdXNlcm5hbWU6IHN0cmluZztcbiAgcGFzc3dvcmQ6IHN0cmluZztcbiAgZGlzcGxheV91c2VybmFtZT86IHN0cmluZztcbn1cblxuY29uc3QgU2lnbnVwRXJyb3JSZXNwb25zZSA9IHoub2JqZWN0KHsgY29kZTogei5zdHJpbmcoKS5vcHRpb25hbCgpIH0pLnBhc3N0aHJvdWdoKCk7XG5cbi8qKlxuICogdXNlcm5hbWXsnYQg7J2867CY7KCB7J24IOq3nOy5mSjsmIHrrLjsnpAg7Iuc7J6RLCDsmIHrrLjsnpAv7Iir7J6Q66eMLCAxLTIw7J6QKeyXkCDrp57rj4TroZ0g7KCV6rec7ZmU7ZWp64uI64ukLlxuICovXG5mdW5jdGlvbiBzYW5pdGl6ZVVzZXJuYW1lKHJhdzogc3RyaW5nKTogc3RyaW5nIHtcbiAgLy8g7IaM66y47J6QIOuzgO2ZmCDtm4Qg7JiB66y47J6QL+yIq+yekCDsmbgg66y47J6QIOygnOqxsFxuICBsZXQgdXNlcm5hbWUgPSByYXcudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9bXmEtejAtOV0vZywgXCJcIik7XG4gIGlmICh1c2VybmFtZS5sZW5ndGggPT09IDApIHtcbiAgICB1c2VybmFtZSA9IFwidXNlclwiO1xuICB9XG4gIC8vIOyyqyDquIDsnpDqsIAg7Iir7J6Q66m0ICd1JyDsoJHrkZDslrQg7LaU6rCAXG4gIGlmICgvXlswLTldLy50ZXN0KHVzZXJuYW1lKSkge1xuICAgIHVzZXJuYW1lID0gYHUke3VzZXJuYW1lfWA7XG4gIH1cbiAgLy8gMjDsnpAg7LSI6rO8IOyLnCB0cnVuY2F0ZVxuICByZXR1cm4gdXNlcm5hbWUuc2xpY2UoMCwgMjApO1xufVxuXG4vKipcbiAqIGZpeHR1cmUgZ2VuIOuqheugueyWtCAtIGNvbmUg66mU7YOA642w7J207YSw66W8IO2ZnOyaqe2VmOyXrCDsnpDrj5nsnLzroZwgZml4dHVyZeulvCDsg53shLHtlanri4jri6QuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBmaXh0dXJlR2VuQ29tbWFuZChvcHRpb25zOiBGaXh0dXJlQ29tbWFuZE9wdGlvbnMpIHtcbiAgdHJ5IHtcbiAgICBpZiAoIUVudGl0eU1hbmFnZXIuaXNBdXRvbG9hZGVkKSB7XG4gICAgICBhd2FpdCBFbnRpdHlNYW5hZ2VyLmF1dG9sb2FkKCk7XG4gICAgfVxuXG4gICAgbGV0IGVudGl0eU5hbWVzOiBzdHJpbmdbXTtcblxuICAgIGlmIChvcHRpb25zLmFsbCkge1xuICAgICAgZW50aXR5TmFtZXMgPSBFbnRpdHlNYW5hZ2VyLmdldEFsbElkcygpO1xuICAgICAgaWYgKG9wdGlvbnMuZXhjbHVkZSkge1xuICAgICAgICBjb25zdCBleGNsdWRlTGlzdCA9IG9wdGlvbnMuZXhjbHVkZS5zcGxpdChcIixcIikubWFwKChzOiBzdHJpbmcpID0+IHMudHJpbSgpKTtcbiAgICAgICAgZW50aXR5TmFtZXMgPSBlbnRpdHlOYW1lcy5maWx0ZXIoKG5hbWUpID0+ICFleGNsdWRlTGlzdC5pbmNsdWRlcyhuYW1lKSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChvcHRpb25zLmluY2x1ZGUpIHtcbiAgICAgIGVudGl0eU5hbWVzID0gb3B0aW9ucy5pbmNsdWRlLnNwbGl0KFwiLFwiKS5tYXAoKHM6IHN0cmluZykgPT4gcy50cmltKCkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBwcm9tcHRzKHtcbiAgICAgICAgdHlwZTogXCJtdWx0aXNlbGVjdFwiLFxuICAgICAgICBuYW1lOiBcImVudGl0aWVzXCIsXG4gICAgICAgIG1lc3NhZ2U6IFwiRml4dHVyZeulvCDsg53shLHtlaAgRW50aXR566W8IOyEoO2Dne2VmOyEuOyalDpcIixcbiAgICAgICAgY2hvaWNlczogRW50aXR5TWFuYWdlci5nZXRBbGxJZHMoKS5tYXAoKGlkKSA9PiAoeyB0aXRsZTogaWQsIHZhbHVlOiBpZCB9KSksXG4gICAgICAgIG1pbjogMSxcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoIXJlc3VsdC5lbnRpdGllcyB8fCByZXN1bHQuZW50aXRpZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLnllbGxvdyhcIuy3qOyGjOuQmOyXiOyKteuLiOuLpC5cIikpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGVudGl0eU5hbWVzID0gcmVzdWx0LmVudGl0aWVzO1xuICAgIH1cblxuICAgIGxldCBjb3VudCA9IG9wdGlvbnMuY291bnQgPyBOdW1iZXIucGFyc2VJbnQob3B0aW9ucy5jb3VudCwgMTApIDogNTtcbiAgICBpZiAoIW9wdGlvbnMuY291bnQpIHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHByb21wdHMoe1xuICAgICAgICB0eXBlOiBcIm51bWJlclwiLFxuICAgICAgICBuYW1lOiBcImNvdW50XCIsXG4gICAgICAgIG1lc3NhZ2U6IFwi6rCBIEVudGl0eeuzhCDsg53shLEg6rCc7IiYOlwiLFxuICAgICAgICBpbml0aWFsOiA1LFxuICAgICAgICBtaW46IDEsXG4gICAgICB9KTtcblxuICAgICAgaWYgKCFyZXN1bHQuY291bnQpIHtcbiAgICAgICAgY29uc29sZS5sb2coY2hhbGsueWVsbG93KFwi7Leo7IaM65CY7JeI7Iq164uI64ukLlwiKSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY291bnQgPSByZXN1bHQuY291bnQ7XG4gICAgfVxuXG4gICAgLy8gVXNlciDsl5Tti7Dti7DqsIAg7Y+s7ZWo65CcIOqyveyasDog66Gc6re47J24IOqwgOuKpS/tmZXsnbjsmqkg67aE6riwIOyEoO2DnVxuICAgIGNvbnN0IGhhc1VzZXIgPSBlbnRpdHlOYW1lcy5pbmNsdWRlcyhcIlVzZXJcIik7XG5cbiAgICBpZiAoaGFzVXNlcikge1xuICAgICAgY29uc3QgdXNlck1vZGVSZXN1bHQgPSBhd2FpdCBwcm9tcHRzKHtcbiAgICAgICAgdHlwZTogXCJzZWxlY3RcIixcbiAgICAgICAgbmFtZTogXCJ1c2VyTW9kZVwiLFxuICAgICAgICBtZXNzYWdlOiBcIlVzZXIg7JeU7Yuw7Yuw6rCAIO2PrO2VqOuQmOyWtCDsnojsirXri4jri6QuIOyDneyEsSDrsKnsi53snYQg7ISg7YOd7ZWY7IS47JqUOlwiLFxuICAgICAgICBjaG9pY2VzOiBbXG4gICAgICAgICAgeyB0aXRsZTogXCIxLiDroZzqt7jsnbgg6rCA64ql7ZWcIOyCrOyaqeyekCBmaXh0dXJlIOyDneyEsVwiLCB2YWx1ZTogXCJsb2dpblwiIH0sXG4gICAgICAgICAgeyB0aXRsZTogXCIyLiDtmZXsnbjsmqkg642w7J207YSwKOuhnOq3uOyduCDrtojqsIApIOyDneyEsVwiLCB2YWx1ZTogXCJkdW1teVwiIH0sXG4gICAgICAgIF0sXG4gICAgICB9KTtcblxuICAgICAgaWYgKCF1c2VyTW9kZVJlc3VsdC51c2VyTW9kZSkge1xuICAgICAgICBjb25zb2xlLmxvZyhjaGFsay55ZWxsb3coXCLst6jshozrkJjsl4jsirXri4jri6QuXCIpKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAodXNlck1vZGVSZXN1bHQudXNlck1vZGUgPT09IFwibG9naW5cIikge1xuICAgICAgICAvLyBMTE0g7IKs7JqpIOyXrOu2gFxuICAgICAgICBsZXQgdXNlTExNID0gb3B0aW9uc1tcInVzZS1sbG1cIl0gPz8gZmFsc2U7XG4gICAgICAgIGlmICghb3B0aW9uc1tcInVzZS1sbG1cIl0pIHtcbiAgICAgICAgICBjb25zdCBsbG1SZXN1bHQgPSBhd2FpdCBwcm9tcHRzKHtcbiAgICAgICAgICAgIHR5cGU6IFwiY29uZmlybVwiLFxuICAgICAgICAgICAgbmFtZTogXCJ1c2VMTE1cIixcbiAgICAgICAgICAgIG1lc3NhZ2U6XG4gICAgICAgICAgICAgIFwiTExN7Jy866GcIOuNlCDtmITsi6TsoIHsnbgg642w7J207YSw66W8IOyDneyEse2VoOq5jOyalD8gKGZpeHR1cmVIaW50IOq4sOuwmCwgQU5USFJPUElDX0FQSV9LRVkg7ZWE7JqUKVwiLFxuICAgICAgICAgICAgaW5pdGlhbDogZmFsc2UsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdXNlTExNID0gbGxtUmVzdWx0LnVzZUxMTSA/PyBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGVuYWJsZUxMTUNhY2hlID0gIW9wdGlvbnNbXCJuby1jYWNoZVwiXTtcbiAgICAgICAgY29uc3QgREVGQVVMVF9QQVNTV09SRCA9IFwiVGVzdDEyMzQhXCI7XG5cbiAgICAgICAgLy8g66Gc6re47J24IOqwgOuKpSDqsr3roZzsl5DshJzripQg7ZiE7J6sIO2ZmOqyveydmCDsnb3quLAgRELrpbwgc291cmNlRGLroZwg7IKs7JqpXG4gICAgICAgIGNvbnN0IHNvdXJjZURiID0gREIuZ2V0REIoXCJyXCIpO1xuICAgICAgICBjb25zdCBnZW5lcmF0b3IgPSBuZXcgRml4dHVyZUdlbmVyYXRvcihcbiAgICAgICAgICBzb3VyY2VEYixcbiAgICAgICAgICBzb3VyY2VEYixcbiAgICAgICAgICBnZXRTb25hbXVFbnZpcm9ubWVudCgpLFxuICAgICAgICAgIEVudGl0eU1hbmFnZXIsXG4gICAgICAgICAgeyB1c2VMTE0sIGVuYWJsZUxMTUNhY2hlIH0sXG4gICAgICAgICk7XG5cbiAgICAgICAgY29uc3QgY3JlYXRlZENyZWRlbnRpYWxzOiBBcnJheTx7IGVtYWlsOiBzdHJpbmc7IHBhc3N3b3JkOiBzdHJpbmcgfT4gPSBbXTtcbiAgICAgICAgY29uc3QgYmFzZVBhdGggPSBTb25hbXUuY29uZmlnLnNlcnZlci5hdXRoPy5iYXNlUGF0aCA/PyBcIi9hcGkvYXV0aFwiO1xuXG4gICAgICAgIGlmICh1c2VMTE0pIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgIGNoYWxrLmN5YW4oXG4gICAgICAgICAgICAgIGBcXG5MTE0g66qo65Oc66GcIOuhnOq3uOyduCDqsIDriqXtlZwg7IKs7Jqp7J6QICR7Y291bnR966qFIOyDneyEsSDspJEuLi4gKOy6kOyLsTogJHtlbmFibGVMTE1DYWNoZSA/IFwiT05cIiA6IFwiT0ZGXCJ9KWAsXG4gICAgICAgICAgICApLFxuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc29sZS5sb2coY2hhbGsuY3lhbihgXFxu66Gc6re47J24IOqwgOuKpe2VnCDsgqzsmqnsnpAgJHtjb3VudH3rqoUg7IOd7ISxIOykkS4uLmApKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY291bnQ7IGkrKykge1xuICAgICAgICAgIGNvbnN0IHVzZXJEYXRhID0gYXdhaXQgZ2VuZXJhdG9yLmdlbmVyYXRlKFwiVXNlclwiKTtcblxuICAgICAgICAgIGNvbnN0IG5hbWUgPSBTdHJpbmcodXNlckRhdGEubmFtZSA/PyBcIlwiKTtcbiAgICAgICAgICBjb25zdCBlbWFpbCA9IFN0cmluZyh1c2VyRGF0YS5lbWFpbCA/PyBcIlwiKTtcbiAgICAgICAgICBjb25zdCB1c2VybmFtZSA9IHNhbml0aXplVXNlcm5hbWUoU3RyaW5nKHVzZXJEYXRhLnVzZXJuYW1lID8/IFwiXCIpKTtcbiAgICAgICAgICBjb25zdCBkaXNwbGF5VXNlcm5hbWUgPVxuICAgICAgICAgICAgdXNlckRhdGEuZGlzcGxheV91c2VybmFtZSAhPT0gdW5kZWZpbmVkID8gU3RyaW5nKHVzZXJEYXRhLmRpc3BsYXlfdXNlcm5hbWUpIDogdW5kZWZpbmVkO1xuXG4gICAgICAgICAgY29uc3QgYm9keTogU2lnbnVwQm9keSA9IHtcbiAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICBlbWFpbCxcbiAgICAgICAgICAgIHVzZXJuYW1lLFxuICAgICAgICAgICAgcGFzc3dvcmQ6IERFRkFVTFRfUEFTU1dPUkQsXG4gICAgICAgICAgfTtcbiAgICAgICAgICBpZiAoZGlzcGxheVVzZXJuYW1lICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGJvZHkuZGlzcGxheV91c2VybmFtZSA9IGRpc3BsYXlVc2VybmFtZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCByZXEgPSBuZXcgUmVxdWVzdChgaHR0cDovL2xvY2FsaG9zdCR7YmFzZVBhdGh9L3NpZ24tdXAvZW1haWxgLCB7XG4gICAgICAgICAgICBtZXRob2Q6IFwiUE9TVFwiLFxuICAgICAgICAgICAgaGVhZGVyczogeyBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIiB9LFxuICAgICAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoYm9keSksXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IFNvbmFtdS5hdXRoLmhhbmRsZXIocmVxKTtcblxuICAgICAgICAgIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlRGF0YSA9IFNpZ251cEVycm9yUmVzcG9uc2UucGFyc2UoYXdhaXQgcmVzcG9uc2UuanNvbigpKTtcbiAgICAgICAgICAgIGNvbnN0IGNvZGUgPSByZXNwb25zZURhdGEuY29kZTtcbiAgICAgICAgICAgIGlmIChjb2RlID09PSBcIlVTRVJfQUxSRUFEWV9FWElTVFNcIikge1xuICAgICAgICAgICAgICBjb25zb2xlLmxvZyhjaGFsay55ZWxsb3coYCAg4pqg77iPICAke2VtYWlsfSDsnbTrr7gg7KG07J6sIC0g6rG064SI65yB64uI64ukLmApKTtcbiAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhjaGFsay5yZWQoYCAg4p2MICR7ZW1haWx9IOyDneyEsSDsi6TtjKg6ICR7SlNPTi5zdHJpbmdpZnkocmVzcG9uc2VEYXRhKX1gKSk7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjcmVhdGVkQ3JlZGVudGlhbHMucHVzaCh7IGVtYWlsLCBwYXNzd29yZDogREVGQVVMVF9QQVNTV09SRCB9KTtcbiAgICAgICAgICBjb25zb2xlLmxvZyhjaGFsay5ncmVlbihgICDinIUgJHtlbWFpbH0g7IOd7ISxIOyZhOujjGApKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGVtYWlsX3ZlcmlmaWVkID0gdHJ1ZSDsp4HsoJEg7JeF642w7J207Yq4IChkZXYg7Y647J2YKVxuICAgICAgICBpZiAoY3JlYXRlZENyZWRlbnRpYWxzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBjb25zdCBlbWFpbHMgPSBjcmVhdGVkQ3JlZGVudGlhbHMubWFwKChjKSA9PiBjLmVtYWlsKTtcbiAgICAgICAgICBhd2FpdCBEQi5nZXREQihcIndcIikoXCJ1c2Vyc1wiKS53aGVyZUluKFwiZW1haWxcIiwgZW1haWxzKS51cGRhdGUoeyBlbWFpbF92ZXJpZmllZDogdHJ1ZSB9KTtcbiAgICAgICAgICBjb25zb2xlLmxvZyhjaGFsay5ncmVlbihgXFxuZW1haWxfdmVyaWZpZWQgPSB0cnVlIOyXheuNsOydtO2KuCDsmYTro4xgKSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodXNlTExNKSB7XG4gICAgICAgICAgY29uc3Qgc3RhdHMgPSBnZW5lcmF0b3IuZ2V0TExNQ2FjaGVTdGF0cygpO1xuICAgICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmN5YW4oYFtMTE0gQ2FjaGVdIOy6kOyLnCDtgazquLA6ICR7c3RhdHMuc2l6ZX1gKSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICBjaGFsay5ncmVlbihgXFxu4pyFICR7Y3JlYXRlZENyZWRlbnRpYWxzLmxlbmd0aH3rqoXsnZgg66Gc6re47J24IOqwgOuKpe2VnCDsgqzsmqnsnpAg7IOd7ISxIOyZhOujjGApLFxuICAgICAgICApO1xuICAgICAgICBpZiAoY3JlYXRlZENyZWRlbnRpYWxzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhcIlxcbuyDneyEseuQnCDqs4TsoJUg66qp66GdOlwiKTtcbiAgICAgICAgICBjb25zb2xlLnRhYmxlKGNyZWF0ZWRDcmVkZW50aWFscyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICAvLyB1c2VyTW9kZSA9PT0gXCJkdW1teVwiOiDquLDsobQgZ2VuZXJhdGVCYXRjaCgpIO2dkOumhCDqs4Tsho1cbiAgICB9XG5cbiAgICBsZXQgc2F2ZVRhcmdldCA9IG9wdGlvbnNbXCJzYXZlLXRvXCJdIHx8IFwiZGJcIjtcbiAgICBpZiAoIW9wdGlvbnNbXCJzYXZlLXRvXCJdKSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBwcm9tcHRzKHtcbiAgICAgICAgdHlwZTogXCJzZWxlY3RcIixcbiAgICAgICAgbmFtZTogXCJzYXZlVGFyZ2V0XCIsXG4gICAgICAgIG1lc3NhZ2U6IFwi7KCA7J6lIOuwqeyLnTpcIixcbiAgICAgICAgY2hvaWNlczogW1xuICAgICAgICAgIHsgdGl0bGU6IFwiRml4dHVyZSBEQuyXkCDsoIDsnqVcIiwgdmFsdWU6IFwiZGJcIiB9LFxuICAgICAgICAgIHsgdGl0bGU6IFwi7YyM7J2866GcIOyggOyepSAo7J6Q64+ZIO2MjOydvOuqhSlcIiwgdmFsdWU6IFwiZmlsZVwiIH0sXG4gICAgICAgICAgeyB0aXRsZTogXCLtjIzsnbzroZwg7KCA7J6lICjtjIzsnbzrqoUg7KeA7KCVKVwiLCB2YWx1ZTogXCJmaWxlOmN1c3RvbVwiIH0sXG4gICAgICAgICAgeyB0aXRsZTogXCLsoIDsnqUg7JWIIO2VqCAo7Lac66Cl66eMKVwiLCB2YWx1ZTogXCJub25lXCIgfSxcbiAgICAgICAgXSxcbiAgICAgIH0pO1xuXG4gICAgICBzYXZlVGFyZ2V0ID0gcmVzdWx0LnNhdmVUYXJnZXQ7XG5cbiAgICAgIGlmIChzYXZlVGFyZ2V0ID09PSBcImZpbGU6Y3VzdG9tXCIpIHtcbiAgICAgICAgY29uc3QgZmlsZW5hbWVSZXN1bHQgPSBhd2FpdCBwcm9tcHRzKHtcbiAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICBuYW1lOiBcImZpbGVuYW1lXCIsXG4gICAgICAgICAgbWVzc2FnZTogXCLtjIzsnbzrqoU6XCIsXG4gICAgICAgICAgaW5pdGlhbDogXCJmaXh0dXJlcy5qc29uXCIsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmICghZmlsZW5hbWVSZXN1bHQuZmlsZW5hbWUpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhjaGFsay55ZWxsb3coXCLst6jshozrkJjsl4jsirXri4jri6QuXCIpKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBzYXZlVGFyZ2V0ID0gYGZpbGU6JHtmaWxlbmFtZVJlc3VsdC5maWxlbmFtZX1gO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIExMTSDsgqzsmqkg7Jes67aAIOqysOyglVxuICAgIGxldCB1c2VMTE0gPSBvcHRpb25zW1widXNlLWxsbVwiXSA/PyBmYWxzZTtcbiAgICBpZiAoIW9wdGlvbnNbXCJ1c2UtbGxtXCJdKSB7XG4gICAgICBjb25zdCBsbG1SZXN1bHQgPSBhd2FpdCBwcm9tcHRzKHtcbiAgICAgICAgdHlwZTogXCJjb25maXJtXCIsXG4gICAgICAgIG5hbWU6IFwidXNlTExNXCIsXG4gICAgICAgIG1lc3NhZ2U6XG4gICAgICAgICAgXCJMTE3snLzroZwg642UIO2YhOyLpOyggeyduCDrjbDsnbTthLDrpbwg7IOd7ISx7ZWg6rmM7JqUPyAoZml4dHVyZUhpbnQg6riw67CYLCBBTlRIUk9QSUNfQVBJX0tFWSDtlYTsmpQpXCIsXG4gICAgICAgIGluaXRpYWw6IGZhbHNlLFxuICAgICAgfSk7XG4gICAgICB1c2VMTE0gPSBsbG1SZXN1bHQudXNlTExNID8/IGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IGVuYWJsZUxMTUNhY2hlID0gIW9wdGlvbnNbXCJuby1jYWNoZVwiXTtcblxuICAgIC8vIGZpeHR1cmUgZ2VuOiBmaXh0dXJlIERCIOuCtOyXkOyEnCDssLjsobAg6rSA6rOE66W8IO2VtOqysO2VmOqzoCDsoIDsnqXtlanri4jri6RcbiAgICBjb25zdCBmaXh0dXJlRGIgPSBjcmVhdGVLbmV4SW5zdGFuY2UoU29uYW11LmRiQ29uZmlnLmZpeHR1cmUpO1xuICAgIGNvbnN0IGdlbmVyYXRvciA9IG5ldyBGaXh0dXJlR2VuZXJhdG9yKGZpeHR1cmVEYiwgZml4dHVyZURiLCBcImZpeHR1cmVcIiwgRW50aXR5TWFuYWdlciwge1xuICAgICAgdXNlTExNLFxuICAgICAgZW5hYmxlTExNQ2FjaGUsXG4gICAgfSk7XG5cbiAgICBpZiAodXNlTExNKSB7XG4gICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgY2hhbGsuY3lhbihcbiAgICAgICAgICBgXFxuTExNIOuqqOuTnOuhnCAke2VudGl0eU5hbWVzLmpvaW4oXCIsIFwiKX0g7IOd7ISxIOykkS4uLiAo7LqQ7IuxOiAke2VuYWJsZUxMTUNhY2hlID8gXCJPTlwiIDogXCJPRkZcIn0pYCxcbiAgICAgICAgKSxcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmN5YW4oYFxcbiR7ZW50aXR5TmFtZXMuam9pbihcIiwgXCIpfSDsg53shLEg7KSRLi4uYCkpO1xuICAgIH1cblxuICAgIGNvbnN0IHNwZWNzID0gZW50aXR5TmFtZXMubWFwKChlbnRpdHlOYW1lKSA9PiAoe1xuICAgICAgZW50aXR5OiBlbnRpdHlOYW1lLFxuICAgICAgY291bnQsXG4gICAgICBvdmVycmlkZXM6IHt9LFxuICAgIH0pKTtcblxuICAgIGNvbnN0IHJlc3VsdHMgPSBhd2FpdCBnZW5lcmF0b3IuZ2VuZXJhdGVCYXRjaChzcGVjcyk7XG5cbiAgICBpZiAodXNlTExNKSB7XG4gICAgICBjb25zdCBzdGF0cyA9IGdlbmVyYXRvci5nZXRMTE1DYWNoZVN0YXRzKCk7XG4gICAgICBjb25zb2xlLmxvZyhjaGFsay5jeWFuKGBbTExNIENhY2hlXSDsupDsi5wg7YGs6riwOiAke3N0YXRzLnNpemV9YCkpO1xuICAgIH1cblxuICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyZWVuKGBcXG7inIUgJHtyZXN1bHRzLmxlbmd0aH3qsJwgZml4dHVyZSDsg53shLEg7JmE66OMYCkpO1xuXG4gICAgaWYgKHNhdmVUYXJnZXQgPT09IFwibm9uZVwiKSB7XG4gICAgICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeShyZXN1bHRzLCBudWxsLCAyKSk7XG4gICAgfSBlbHNlIGlmIChzYXZlVGFyZ2V0ID09PSBcImRiXCIpIHtcbiAgICAgIC8vIGdlbmVyYXRlQmF0Y2jqsIAg7J2066+4IERC7JeQIOyggOyepe2WiOycvOuvgOuhnCDrs4Trj4Qg7KCA7J6l7J20IOu2iO2VhOyalO2VqeuLiOuLpC5cbiAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyZWVuKFwiRml4dHVyZSBEQuyXkCDsoIDsnqXrkJjsl4jsirXri4jri6QuXCIpKTtcbiAgICB9IGVsc2UgaWYgKHNhdmVUYXJnZXQuc3RhcnRzV2l0aChcImZpbGVcIikpIHtcbiAgICAgIGNvbnN0IGZzID0gYXdhaXQgaW1wb3J0KFwibm9kZTpmcy9wcm9taXNlc1wiKTtcbiAgICAgIGNvbnN0IHBhdGggPSBhd2FpdCBpbXBvcnQoXCJub2RlOnBhdGhcIik7XG5cbiAgICAgIGNvbnN0IGZpeHR1cmVzRGlyID0gcGF0aC5qb2luKHByb2Nlc3MuY3dkKCksIFwidGVzdFwiLCBcImZpeHR1cmVzXCIpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgZnMuYWNjZXNzKGZpeHR1cmVzRGlyKTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICBhd2FpdCBmcy5ta2RpcihmaXh0dXJlc0RpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgICB9XG5cbiAgICAgIGZvciAoY29uc3QgZW50aXR5TmFtZSBvZiBlbnRpdHlOYW1lcykge1xuICAgICAgICBjb25zdCBlbnRpdHlSZXN1bHRzID0gcmVzdWx0cy5maWx0ZXIoKHIpID0+IHIuZW50aXR5SWQgPT09IGVudGl0eU5hbWUpO1xuXG4gICAgICAgIGlmIChlbnRpdHlSZXN1bHRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGZpbGVuYW1lOiBzdHJpbmc7XG4gICAgICAgIGlmIChzYXZlVGFyZ2V0ID09PSBcImZpbGVcIikge1xuICAgICAgICAgIGNvbnN0IGVudGl0eSA9IEVudGl0eU1hbmFnZXIuZ2V0KGVudGl0eU5hbWUpO1xuICAgICAgICAgIGZpbGVuYW1lID0gYCR7ZW50aXR5LnRhYmxlfS5qc29uYDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBmaWxlbmFtZSA9IHNhdmVUYXJnZXQucmVwbGFjZShcImZpbGU6XCIsIFwiXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZmlsZXBhdGggPSBwYXRoLmpvaW4oZml4dHVyZXNEaXIsIGZpbGVuYW1lKTtcbiAgICAgICAgYXdhaXQgZnMud3JpdGVGaWxlKFxuICAgICAgICAgIGZpbGVwYXRoLFxuICAgICAgICAgIEpTT04uc3RyaW5naWZ5KFxuICAgICAgICAgICAgZW50aXR5UmVzdWx0cy5tYXAoKHIpID0+IHIuZGF0YSksXG4gICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgMixcbiAgICAgICAgICApLFxuICAgICAgICApO1xuICAgICAgICBjb25zb2xlLmxvZyhjaGFsay5ncmVlbihg4pyFICR7ZmlsZXBhdGh9IOyggOyepSDsmYTro4xgKSk7XG4gICAgICB9XG4gICAgfVxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICBjaGFsay5yZWQoXG4gICAgICAgIFwiRml4dHVyZSDsg53shLEg7KSRIOyYpOulmOqwgCDrsJzsg53tlojsirXri4jri6QuXFxuXCIgK1xuICAgICAgICAgIFwi7JuQ7J24OiBFbnRpdHkg7KCV7J2Y64KYIERCIOyXsOqysOydhCDtmZXsnbjtlbTso7zshLjsmpQuXFxuXCIgK1xuICAgICAgICAgIFwi7J6Q7IS47ZWcIOuCtOyaqTpcIixcbiAgICAgICksXG4gICAgICBlcnJvcixcbiAgICApO1xuICAgIHRocm93IGVycm9yO1xuICB9XG59XG5cbi8qKlxuICogZml4dHVyZSBmZXRjaCDrqoXroLnslrQgLSDsi6TsoJwg7Jq07JiBIERC7JeQ7IScIOuNsOydtO2EsOulvCDqsIDsoLjsmYAgZml4dHVyZeuhnCDsoIDsnqXtlanri4jri6QuXG4gKiDqtIDqs4TrkJwg642w7J207YSw64+EIO2VqOq7mCDqsIDsoLjsmKTrr4DroZwg7ZiE7Iuk7KCB7J24IO2FjOyKpO2KuCDrjbDsnbTthLDrpbwg7ZmV67O07ZWgIOyImCDsnojsirXri4jri6QuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBmaXh0dXJlRmV0Y2hDb21tYW5kKG9wdGlvbnM6IEZpeHR1cmVDb21tYW5kT3B0aW9ucykge1xuICB0cnkge1xuICAgIGlmICghRW50aXR5TWFuYWdlci5pc0F1dG9sb2FkZWQpIHtcbiAgICAgIGF3YWl0IEVudGl0eU1hbmFnZXIuYXV0b2xvYWQoKTtcbiAgICB9XG5cbiAgICBsZXQgZW50aXR5TmFtZXM6IHN0cmluZ1tdO1xuXG4gICAgaWYgKG9wdGlvbnMuYWxsKSB7XG4gICAgICBlbnRpdHlOYW1lcyA9IEVudGl0eU1hbmFnZXIuZ2V0QWxsSWRzKCk7XG4gICAgICBpZiAob3B0aW9ucy5leGNsdWRlKSB7XG4gICAgICAgIGNvbnN0IGV4Y2x1ZGVMaXN0ID0gb3B0aW9ucy5leGNsdWRlLnNwbGl0KFwiLFwiKS5tYXAoKHM6IHN0cmluZykgPT4gcy50cmltKCkpO1xuICAgICAgICBlbnRpdHlOYW1lcyA9IGVudGl0eU5hbWVzLmZpbHRlcigobmFtZSkgPT4gIWV4Y2x1ZGVMaXN0LmluY2x1ZGVzKG5hbWUpKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKG9wdGlvbnMuaW5jbHVkZSkge1xuICAgICAgZW50aXR5TmFtZXMgPSBvcHRpb25zLmluY2x1ZGUuc3BsaXQoXCIsXCIpLm1hcCgoczogc3RyaW5nKSA9PiBzLnRyaW0oKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHByb21wdHMoe1xuICAgICAgICB0eXBlOiBcIm11bHRpc2VsZWN0XCIsXG4gICAgICAgIG5hbWU6IFwiZW50aXRpZXNcIixcbiAgICAgICAgbWVzc2FnZTogXCJJbXBvcnTtlaAgRW50aXR566W8IOyEoO2Dne2VmOyEuOyalDpcIixcbiAgICAgICAgY2hvaWNlczogRW50aXR5TWFuYWdlci5nZXRBbGxJZHMoKS5tYXAoKGlkKSA9PiAoeyB0aXRsZTogaWQsIHZhbHVlOiBpZCB9KSksXG4gICAgICAgIG1pbjogMSxcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoIXJlc3VsdC5lbnRpdGllcyB8fCByZXN1bHQuZW50aXRpZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLnllbGxvdyhcIuy3qOyGjOuQmOyXiOyKteuLiOuLpC5cIikpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGVudGl0eU5hbWVzID0gcmVzdWx0LmVudGl0aWVzO1xuICAgIH1cblxuICAgIGNvbnN0IHN0cmF0ZWd5OiBEYXRhRXhwbG9yZXJTdHJhdGVneSA9IG9wdGlvbnMuc3RyYXRlZ3kgPz8gXCJyZWNlbnRcIjtcbiAgICBjb25zdCBsaW1pdCA9IG9wdGlvbnMubGltaXQgPyBOdW1iZXIucGFyc2VJbnQob3B0aW9ucy5saW1pdCwgMTApIDogMTA7XG5cbiAgICAvLyBmaXh0dXJlIGZldGNoOiDtmITsnqwg7ZmY6rK9IOuNsOydtO2EsOulvCBmaXh0dXJlIERC66GcIGltcG9ydO2VqeuLiOuLpFxuICAgIGNvbnN0IHNvdXJjZURiID0gREIuZ2V0REIoXCJyXCIpO1xuICAgIGNvbnN0IGZpeHR1cmVEYiA9IGNyZWF0ZUtuZXhJbnN0YW5jZShTb25hbXUuZGJDb25maWcuZml4dHVyZSk7XG4gICAgY29uc3QgZ2VuZXJhdG9yID0gbmV3IEZpeHR1cmVHZW5lcmF0b3Ioc291cmNlRGIsIGZpeHR1cmVEYiwgXCJmaXh0dXJlXCIsIEVudGl0eU1hbmFnZXIpO1xuXG4gICAgY29uc29sZS5sb2coY2hhbGsuY3lhbihgXFxuJHtlbnRpdHlOYW1lcy5qb2luKFwiLCBcIil9IGltcG9ydCDspJEuLi5gKSk7XG5cbiAgICBmb3IgKGNvbnN0IGVudGl0eU5hbWUgb2YgZW50aXR5TmFtZXMpIHtcbiAgICAgIGNvbnN0IHJlc3VsdHMgPSBhd2FpdCBnZW5lcmF0b3IuaW1wb3J0RnJvbVNvdXJjZShlbnRpdHlOYW1lLCB7XG4gICAgICAgIHN0cmF0ZWd5LFxuICAgICAgICBsaW1pdCxcbiAgICAgICAgaW5jbHVkZVJlbGF0aW9uczogdHJ1ZSxcbiAgICAgICAgbWF4RGVwdGg6IDIsXG4gICAgICB9KTtcblxuICAgICAgY29uc29sZS5sb2coY2hhbGsuZ3JlZW4oYOKchSAke2VudGl0eU5hbWV9OiAke3Jlc3VsdHMubGVuZ3RofeqwnCBpbXBvcnQg7JmE66OMYCkpO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBjb25zb2xlLmVycm9yKFxuICAgICAgY2hhbGsucmVkKFxuICAgICAgICBcIuyLpOygnCBEQuyXkOyEnCDrjbDsnbTthLDrpbwg6rCA7KC47Jik64qUIOykkSDsmKTrpZjqsIAg67Cc7IOd7ZaI7Iq164uI64ukLlxcblwiICtcbiAgICAgICAgICBcIuybkOyduDog7IaM7IqkIERCIOyXsOqysCDshKTsoJUoc29uYW11LmNvbmZpZy50cynsnbTrgpggRW50aXR5IOq0gOqzhCDsoJXsnZjrpbwg7ZmV7J247ZW07KO87IS47JqULlxcblwiICtcbiAgICAgICAgICBcIuyekOyEuO2VnCDrgrTsmqk6XCIsXG4gICAgICApLFxuICAgICAgZXJyb3IsXG4gICAgKTtcbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxufVxuXG4vKipcbiAqIGZpeHR1cmUgZXhwbG9yZSDrqoXroLnslrQgLSBEQuydmCDsi6TsoJwg642w7J207YSw66W8IOyhsO2ajO2VmOyXrCDtmZXsnbjtlanri4jri6QuXG4gKiDsoIDsnqXtlZjsp4Ag7JWK6rOgIOyhsO2ajOunjCDtlZjrr4DroZwg642w7J207YSw66W8IOu5oOultOqyjCDtmZXsnbjtlaAg65WMIOycoOyaqe2VqeuLiOuLpC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGZpeHR1cmVFeHBsb3JlQ29tbWFuZChvcHRpb25zOiBGaXh0dXJlQ29tbWFuZE9wdGlvbnMpIHtcbiAgdHJ5IHtcbiAgICBpZiAoIUVudGl0eU1hbmFnZXIuaXNBdXRvbG9hZGVkKSB7XG4gICAgICBhd2FpdCBFbnRpdHlNYW5hZ2VyLmF1dG9sb2FkKCk7XG4gICAgfVxuXG4gICAgbGV0IGVudGl0eU5hbWUgPSBvcHRpb25zLmluY2x1ZGU7XG5cbiAgICBpZiAoIWVudGl0eU5hbWUpIHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHByb21wdHMoe1xuICAgICAgICB0eXBlOiBcInNlbGVjdFwiLFxuICAgICAgICBuYW1lOiBcImVudGl0eVwiLFxuICAgICAgICBtZXNzYWdlOiBcIu2DkOyDie2VoCBFbnRpdHk6XCIsXG4gICAgICAgIGNob2ljZXM6IEVudGl0eU1hbmFnZXIuZ2V0QWxsSWRzKCkubWFwKChpZCkgPT4gKHsgdGl0bGU6IGlkLCB2YWx1ZTogaWQgfSkpLFxuICAgICAgfSk7XG5cbiAgICAgIGlmICghcmVzdWx0LmVudGl0eSkge1xuICAgICAgICBjb25zb2xlLmxvZyhjaGFsay55ZWxsb3coXCLst6jshozrkJjsl4jsirXri4jri6QuXCIpKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBlbnRpdHlOYW1lID0gcmVzdWx0LmVudGl0eTtcbiAgICB9XG5cbiAgICBpZiAoIWVudGl0eU5hbWUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkVudGl0eSBuYW1lIGlzIHJlcXVpcmVkXCIpO1xuICAgIH1cblxuICAgIGNvbnN0IHN0cmF0ZWd5OiBEYXRhRXhwbG9yZXJTdHJhdGVneSA9IG9wdGlvbnMuc3RyYXRlZ3kgPz8gXCJzYW1wbGVcIjtcbiAgICBjb25zdCBsaW1pdCA9IG9wdGlvbnMubGltaXQgPyBOdW1iZXIucGFyc2VJbnQob3B0aW9ucy5saW1pdCwgMTApIDogMTA7XG5cbiAgICBjb25zdCBkYiA9IERCLmdldERCKFwiclwiKTtcbiAgICBjb25zdCBleHBsb3JlciA9IG5ldyBEYXRhRXhwbG9yZXIoZGIsIEVudGl0eU1hbmFnZXIpO1xuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBleHBsb3Jlci5leHBsb3JlKGVudGl0eU5hbWUsIHsgc3RyYXRlZ3ksIGxpbWl0IH0pO1xuXG4gICAgY29uc29sZS5sb2coY2hhbGsuY3lhbihgXFxuJHtlbnRpdHlOYW1lfSAke2RhdGEubGVuZ3RofeqwnCDsobDtmowg7JmE66OMOmApKTtcbiAgICBjb25zb2xlLnRhYmxlKGRhdGEpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICBjaGFsay5yZWQoXG4gICAgICAgIFwi642w7J207YSwIOyhsO2ajCDspJEg7Jik66WY6rCAIOuwnOyDne2WiOyKteuLiOuLpC5cXG5cIiArXG4gICAgICAgICAgXCLsm5Dsnbg6IERCIOyXsOqysOydtOuCmCBFbnRpdHkg7KCV7J2Y66W8IO2ZleyduO2VtOyjvOyEuOyalC5cXG5cIiArXG4gICAgICAgICAgXCLsnpDshLjtlZwg64K07JqpOlwiLFxuICAgICAgKSxcbiAgICAgIGVycm9yLFxuICAgICk7XG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7WUFJc0M7UUFDSDtVQUNrQjtvQkFDRztTQUNYO21CQUNVO3VCQUVRO0FBdUIvRCxNQUFNLHNCQUFzQixFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDLFlBQVk7Ozs7QUFLbEYsU0FBUyxpQkFBaUIsS0FBcUI7Q0FFN0MsSUFBSSxXQUFXLElBQUksWUFBWSxDQUFDLENBQUMsUUFBUSxjQUFjLEVBQUU7Q0FDekQsSUFBSSxTQUFTLFdBQVcsR0FDdEIsV0FBVztDQUdiLElBQUksU0FBUyxLQUFLLFFBQVEsR0FDeEIsV0FBVyxJQUFJO0NBR2pCLE9BQU8sU0FB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
|
|
@@ -1,2 +1,23 @@
|
|
|
1
|
-
|
|
1
|
+
import { findApiRootPath } from "../utils/utils";
|
|
2
|
+
type TestCommandConfig = {
|
|
3
|
+
server: {
|
|
4
|
+
listen?: {
|
|
5
|
+
host?: string;
|
|
6
|
+
port?: number;
|
|
7
|
+
};
|
|
8
|
+
};
|
|
9
|
+
test?: {
|
|
10
|
+
devRunner?: {
|
|
11
|
+
enabled?: boolean;
|
|
12
|
+
routePrefix?: string;
|
|
13
|
+
};
|
|
14
|
+
};
|
|
15
|
+
};
|
|
16
|
+
export interface TestCommandDependencies {
|
|
17
|
+
fetch: typeof globalThis.fetch;
|
|
18
|
+
findApiRootPath: typeof findApiRootPath;
|
|
19
|
+
loadConfig: (apiRootPath: string) => Promise<TestCommandConfig>;
|
|
20
|
+
}
|
|
21
|
+
export declare function testCommand(dependencies?: TestCommandDependencies): Promise<void>;
|
|
22
|
+
export {};
|
|
2
23
|
//# sourceMappingURL=test-command.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test-command.d.ts","sourceRoot":"","sources":["../../src/bin/test-command.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"test-command.d.ts","sourceRoot":"","sources":["../../src/bin/test-command.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAcjD,KAAK,iBAAiB,GAAG;IACvB,MAAM,EAAE;QACN,MAAM,CAAC,EAAE;YACP,IAAI,CAAC,EAAE,MAAM,CAAC;YACd,IAAI,CAAC,EAAE,MAAM,CAAC;SACf,CAAC;KACH,CAAC;IACF,IAAI,CAAC,EAAE;QACL,SAAS,CAAC,EAAE;YACV,OAAO,CAAC,EAAE,OAAO,CAAC;YAClB,WAAW,CAAC,EAAE,MAAM,CAAC;SACtB,CAAC;KACH,CAAC;CACH,CAAC;AAEF,MAAM,WAAW,uBAAuB;IACtC,KAAK,EAAE,OAAO,UAAU,CAAC,KAAK,CAAC;IAC/B,eAAe,EAAE,OAAO,eAAe,CAAC;IACxC,UAAU,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,OAAO,CAAC,iBAAiB,CAAC,CAAC;CACjE;AAgCD,wBAAsB,WAAW,CAC/B,YAAY,GAAE,uBAAiD,GAC9D,OAAO,CAAC,IAAI,CAAC,CAsIf"}
|
package/dist/bin/test-command.js
CHANGED
|
@@ -1,15 +1,23 @@
|
|
|
1
|
+
import { init_runtime_value, isStringValue } from "../utils/runtime-value.js";
|
|
1
2
|
import { findApiRootPath, init_utils } from "../utils/utils.js";
|
|
2
3
|
import { init_config, loadConfig } from "../api/config.js";
|
|
3
4
|
import chalk from "chalk";
|
|
4
5
|
import path from "node:path";
|
|
5
6
|
//#region src/bin/test-command.ts
|
|
6
7
|
init_config();
|
|
8
|
+
init_runtime_value();
|
|
7
9
|
init_utils();
|
|
8
|
-
|
|
10
|
+
const testCommandDependencies = {
|
|
11
|
+
fetch: globalThis.fetch,
|
|
12
|
+
findApiRootPath,
|
|
13
|
+
loadConfig
|
|
14
|
+
};
|
|
15
|
+
async function loadDevServerConfig(dependencies) {
|
|
9
16
|
const prevVitest = process.env.VITEST;
|
|
10
17
|
process.env.VITEST = "true";
|
|
11
18
|
try {
|
|
12
|
-
|
|
19
|
+
const apiRootPath = dependencies.findApiRootPath();
|
|
20
|
+
return await dependencies.loadConfig(apiRootPath);
|
|
13
21
|
} finally {
|
|
14
22
|
if (prevVitest === void 0) delete process.env.VITEST;
|
|
15
23
|
else process.env.VITEST = prevVitest;
|
|
@@ -26,9 +34,9 @@ function resolveTestBaseUrl(config) {
|
|
|
26
34
|
baseUrl: `http://${host}:${port}${routePrefix}`
|
|
27
35
|
};
|
|
28
36
|
}
|
|
29
|
-
async function testCommand() {
|
|
37
|
+
async function testCommand(dependencies = testCommandDependencies) {
|
|
30
38
|
const args = process.argv.slice(3);
|
|
31
|
-
const config = await loadDevServerConfig();
|
|
39
|
+
const config = await loadDevServerConfig(dependencies);
|
|
32
40
|
const files = [];
|
|
33
41
|
let pattern;
|
|
34
42
|
let showTraces = false;
|
|
@@ -40,7 +48,7 @@ async function testCommand() {
|
|
|
40
48
|
else if (arg === "--status" || arg === "-s") showStatus = true;
|
|
41
49
|
else if (!arg.startsWith("-")) files.push(arg);
|
|
42
50
|
}
|
|
43
|
-
if (showStatus) return testStatusCommand(config);
|
|
51
|
+
if (showStatus) return testStatusCommand(config, dependencies.fetch);
|
|
44
52
|
if (!config.test?.devRunner?.enabled) {
|
|
45
53
|
console.error(chalk.red("devRunner가 활성화되지 않았습니다. sonamu.config.ts에서 test.devRunner.enabled: true 설정이 필요합니다"));
|
|
46
54
|
process.exit(1);
|
|
@@ -51,7 +59,7 @@ async function testCommand() {
|
|
|
51
59
|
if (files.length > 0) payload.files = files;
|
|
52
60
|
if (pattern) payload.pattern = pattern;
|
|
53
61
|
try {
|
|
54
|
-
const response = await fetch(url, {
|
|
62
|
+
const response = await dependencies.fetch(url, {
|
|
55
63
|
method: "POST",
|
|
56
64
|
headers: { "Content-Type": "application/json" },
|
|
57
65
|
body: JSON.stringify(payload)
|
|
@@ -93,7 +101,7 @@ async function testCommand() {
|
|
|
93
101
|
console.log(` ${chalk.dim(path.basename(file))}`);
|
|
94
102
|
for (const trace of traces) {
|
|
95
103
|
const loc = `${path.basename(trace.filePath)}:${trace.lineNumber}`;
|
|
96
|
-
const valueStr =
|
|
104
|
+
const valueStr = isStringValue(trace.value) ? trace.value : JSON.stringify(trace.value, null, 2) ?? "undefined";
|
|
97
105
|
console.log(`\n ${chalk.yellow(`[${trace.key}]`)} ${chalk.dim(loc)}`);
|
|
98
106
|
const indented = valueStr.split("\n").join("\n ");
|
|
99
107
|
console.log(` ${indented}`);
|
|
@@ -130,7 +138,7 @@ function collectTracesFromResults(nodes) {
|
|
|
130
138
|
}
|
|
131
139
|
return result;
|
|
132
140
|
}
|
|
133
|
-
async function testStatusCommand(config) {
|
|
141
|
+
async function testStatusCommand(config, fetchRequest) {
|
|
134
142
|
if (!config.test?.devRunner?.enabled) {
|
|
135
143
|
console.error(chalk.red("devRunner가 활성화되지 않았습니다. sonamu.config.ts에서 test.devRunner.enabled: true 설정이 필요합니다"));
|
|
136
144
|
process.exit(1);
|
|
@@ -138,7 +146,7 @@ async function testStatusCommand(config) {
|
|
|
138
146
|
const { baseUrl } = resolveTestBaseUrl(config);
|
|
139
147
|
const url = `${baseUrl}/status`;
|
|
140
148
|
try {
|
|
141
|
-
const response = await
|
|
149
|
+
const response = await fetchRequest(url);
|
|
142
150
|
if (!response.ok) {
|
|
143
151
|
console.error(chalk.red(`예상하지 못한 응답: ${response.status}`));
|
|
144
152
|
process.exit(1);
|
|
@@ -160,4 +168,4 @@ async function testStatusCommand(config) {
|
|
|
160
168
|
//#endregion
|
|
161
169
|
export { testCommand };
|
|
162
170
|
|
|
163
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC1jb21tYW5kLmpzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9iaW4vdGVzdC1jb21tYW5kLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBwYXRoIGZyb20gXCJub2RlOnBhdGhcIjtcblxuaW1wb3J0IGNoYWxrIGZyb20gXCJjaGFsa1wiO1xuXG5pbXBvcnQgeyB0eXBlIFNvbmFtdUNvbmZpZyB9IGZyb20gXCIuLi9hcGkvY29uZmlnXCI7XG5pbXBvcnQgeyBsb2FkQ29uZmlnIH0gZnJvbSBcIi4uL2FwaS9jb25maWdcIjtcbmltcG9ydCB7IHR5cGUgUnVuUmVzdWx0LCB0eXBlIFRlc3RDYXNlUmVzdWx0IH0gZnJvbSBcIi4uL3Rlc3RpbmdcIjtcbmltcG9ydCB7IGZpbmRBcGlSb290UGF0aCB9IGZyb20gXCIuLi91dGlscy91dGlsc1wiO1xuXG5hc3luYyBmdW5jdGlvbiBsb2FkRGV2U2VydmVyQ29uZmlnKCk6IFByb21pc2U8U29uYW11Q29uZmlnPiB7XG4gIGNvbnN0IHByZXZWaXRlc3QgPSBwcm9jZXNzLmVudi5WSVRFU1Q7XG4gIHByb2Nlc3MuZW52LlZJVEVTVCA9IFwidHJ1ZVwiO1xuICB0cnkge1xuICAgIGNvbnN0IGFwaVJvb3RQYXRoID0gZmluZEFwaVJvb3RQYXRoKCk7XG4gICAgcmV0dXJuIGF3YWl0IGxvYWRDb25maWcoYXBpUm9vdFBhdGgpO1xuICB9IGZpbmFsbHkge1xuICAgIGlmIChwcmV2Vml0ZXN0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGRlbGV0ZSBwcm9jZXNzLmVudi5WSVRFU1Q7XG4gICAgfSBlbHNlIHtcbiAgICAgIHByb2Nlc3MuZW52LlZJVEVTVCA9IHByZXZWaXRlc3Q7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHJlc29sdmVUZXN0QmFzZVVybChjb25maWc6IFNvbmFtdUNvbmZpZyk6IHtcbiAgaG9zdDogc3RyaW5nO1xuICBwb3J0OiBudW1iZXI7XG4gIHJvdXRlUHJlZml4OiBzdHJpbmc7XG4gIGJhc2VVcmw6IHN0cmluZztcbn0ge1xuICBjb25zdCBwb3J0ID0gY29uZmlnLnNlcnZlci5saXN0ZW4/LnBvcnQgPz8gMzAwMDtcbiAgY29uc3QgaG9zdCA9IGNvbmZpZy5zZXJ2ZXIubGlzdGVuPy5ob3N0ID8/IFwibG9jYWxob3N0XCI7XG4gIGNvbnN0IHJvdXRlUHJlZml4ID0gY29uZmlnLnRlc3Q/LmRldlJ1bm5lcj8ucm91dGVQcmVmaXggPz8gXCIvX190ZXN0X19cIjtcbiAgcmV0dXJuIHsgaG9zdCwgcG9ydCwgcm91dGVQcmVmaXgsIGJhc2VVcmw6IGBodHRwOi8vJHtob3N0fToke3BvcnR9JHtyb3V0ZVByZWZpeH1gIH07XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB0ZXN0Q29tbWFuZCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgYXJncyA9IHByb2Nlc3MuYXJndi5zbGljZSgzKTtcblxuICBjb25zdCBjb25maWcgPSBhd2FpdCBsb2FkRGV2U2VydmVyQ29uZmlnKCk7XG5cbiAgLy8gcHJvY2Vzcy5hcmd2IO2MjOyLsTogc29uYW11IHRlc3QgW2ZpbGUuLi5dIC0tcGF0dGVybiBcIuydtOumhFwiIC0tdHJhY2VzIC0tc3RhdHVzXG4gIGNvbnN0IGZpbGVzOiBzdHJpbmdbXSA9IFtdO1xuICBsZXQgcGF0dGVybjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBsZXQgc2hvd1RyYWNlcyA9IGZhbHNlO1xuICBsZXQgc2hvd1N0YXR1cyA9IGZhbHNlO1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYXJncy5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGFyZyA9IGFyZ3NbaV07XG4gICAgaWYgKGFyZyA9PT0gXCItLXBhdHRlcm5cIiB8fCBhcmcgPT09IFwiLXBcIikge1xuICAgICAgcGF0dGVybiA9IGFyZ3NbKytpXTtcbiAgICB9IGVsc2UgaWYgKGFyZyA9PT0gXCItLXRyYWNlc1wiIHx8IGFyZyA9PT0gXCItdFwiKSB7XG4gICAgICBzaG93VHJhY2VzID0gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKGFyZyA9PT0gXCItLXN0YXR1c1wiIHx8IGFyZyA9PT0gXCItc1wiKSB7XG4gICAgICBzaG93U3RhdHVzID0gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKCFhcmcuc3RhcnRzV2l0aChcIi1cIikpIHtcbiAgICAgIGZpbGVzLnB1c2goYXJnKTtcbiAgICB9XG4gIH1cblxuICBpZiAoc2hvd1N0YXR1cykge1xuICAgIHJldHVybiB0ZXN0U3RhdHVzQ29tbWFuZChjb25maWcpO1xuICB9XG5cbiAgaWYgKCFjb25maWcudGVzdD8uZGV2UnVubmVyPy5lbmFibGVkKSB7XG4gICAgY29uc29sZS5lcnJvcihcbiAgICAgIGNoYWxrLnJlZChcbiAgICAgICAgXCJkZXZSdW5uZXLqsIAg7Zmc7ISx7ZmU65CY7KeAIOyViuyVmOyKteuLiOuLpC4gc29uYW11LmNvbmZpZy50c+yXkOyEnCB0ZXN0LmRldlJ1bm5lci5lbmFibGVkOiB0cnVlIOyEpOygleydtCDtlYTsmpTtlanri4jri6RcIixcbiAgICAgICksXG4gICAgKTtcbiAgICBwcm9jZXNzLmV4aXQoMSk7XG4gIH1cblxuICBjb25zdCB7IGJhc2VVcmwgfSA9IHJlc29sdmVUZXN0QmFzZVVybChjb25maWcpO1xuICBjb25zdCB1cmwgPSBgJHtiYXNlVXJsfS9ydW5gO1xuXG4gIGNvbnN0IHBheWxvYWQ6IHsgZmlsZXM/OiBzdHJpbmdbXTsgcGF0dGVybj86IHN0cmluZyB9ID0ge307XG4gIGlmIChmaWxlcy5sZW5ndGggPiAwKSB7XG4gICAgcGF5bG9hZC5maWxlcyA9IGZpbGVzO1xuICB9XG4gIGlmIChwYXR0ZXJuKSB7XG4gICAgcGF5bG9hZC5wYXR0ZXJuID0gcGF0dGVybjtcbiAgfVxuXG4gIHRyeSB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCh1cmwsIHtcbiAgICAgIG1ldGhvZDogXCJQT1NUXCIsXG4gICAgICBoZWFkZXJzOiB7IFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiIH0sXG4gICAgICBib2R5OiBKU09OLnN0cmluZ2lmeShwYXlsb2FkKSxcbiAgICB9KTtcblxuICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT09IDQwNCkge1xuICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgY2hhbGsucmVkKFxuICAgICAgICAgIFwiZGV2UnVubmVy6rCAIO2ZnOyEse2ZlOuQmOyngCDslYrslZjsirXri4jri6QuIHNvbmFtdS5jb25maWcudHPsl5DshJwgdGVzdC5kZXZSdW5uZXIuZW5hYmxlZDogdHJ1ZSDshKTsoJXsnbQg7ZWE7JqU7ZWp64uI64ukXCIsXG4gICAgICAgICksXG4gICAgICApO1xuICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgIH1cblxuICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT09IDUwMCkge1xuICAgICAgY29uc3QgZXJyb3JCb2R5ID0gKGF3YWl0IHJlc3BvbnNlLmpzb24oKSkgYXMgeyBlcnJvcj86IHN0cmluZyB9O1xuICAgICAgY29uc29sZS5lcnJvcihjaGFsay5yZWQoXCJWaXRlc3Qg7J247Iqk7YS07Iqk6rCAIOyVhOyngSDspIDruYTrkJjsp4Ag7JWK7JWY7Iq164uI64ukXCIpKTtcbiAgICAgIGlmIChlcnJvckJvZHkuZXJyb3IpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihjaGFsay5yZWQoZXJyb3JCb2R5LmVycm9yKSk7XG4gICAgICB9XG4gICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgfVxuXG4gICAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgICAgY29uc29sZS5lcnJvcihjaGFsay5yZWQoYOyYiOyDge2VmOyngCDrqrvtlZwg7J2R64u1OiAke3Jlc3BvbnNlLnN0YXR1c31gKSk7XG4gICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgfVxuXG4gICAgY29uc3QgcmVzdWx0ID0gKGF3YWl0IHJlc3BvbnNlLmpzb24oKSkgYXMgUnVuUmVzdWx0O1xuXG4gICAgY29uc3QgeyBwYXNzZWQsIGZhaWxlZDogZmFpbGVkQ291bnQsIHRvdGFsLCBkdXJhdGlvbk1zIH0gPSByZXN1bHQuc3VtbWFyeTtcbiAgICBjb25zdCBwYXNzZWRTdHIgPSBjaGFsay5ncmVlbihgJHtwYXNzZWR9IHBhc3NlZGApO1xuICAgIGNvbnN0IGZhaWxlZFN0ciA9XG4gICAgICBmYWlsZWRDb3VudCA+IDAgPyBjaGFsay5yZWQoYCR7ZmFpbGVkQ291bnR9IGZhaWxlZGApIDogYCR7ZmFpbGVkQ291bnR9IGZhaWxlZGA7XG4gICAgY29uc29sZS5sb2coYFxcblRlc3RzOiAke3Bhc3NlZFN0cn0sICR7ZmFpbGVkU3RyfSwgJHt0b3RhbH0gdG90YWxgKTtcbiAgICBjb25zb2xlLmxvZyhjaGFsay5kaW0oYER1cmF0aW9uOiAke2R1cmF0aW9uTXN9bXNgKSk7XG5cbiAgICBjb25zdCBmYWlsZWRUZXN0cyA9IGNvbGxlY3RGYWlsZWRGcm9tUmVzdWx0cyhyZXN1bHQucmVzdWx0cyk7XG4gICAgaWYgKGZhaWxlZFRlc3RzLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnNvbGUubG9nKGNoYWxrLnJlZC5ib2xkKFwiXFxuRmFpbGVkIHRlc3RzOlwiKSk7XG4gICAgICBmb3IgKGNvbnN0IGYgb2YgZmFpbGVkVGVzdHMpIHtcbiAgICAgICAgY29uc29sZS5sb2coYCAgJHtjaGFsay5yZWQoXCJ4XCIpfSAke2YuZnVsbE5hbWV9ICR7Y2hhbGsuZGltKGAoJHtmLmZpbGV9KWApfWApO1xuICAgICAgICBpZiAoZi5lcnJvcikge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGAgICAgJHtjaGFsay5yZWQoZi5lcnJvci5tZXNzYWdlKX1gKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChzaG93VHJhY2VzKSB7XG4gICAgICBjb25zdCB0ZXN0c1dpdGhUcmFjZXMgPSBjb2xsZWN0VHJhY2VzRnJvbVJlc3VsdHMocmVzdWx0LnJlc3VsdHMpO1xuICAgICAgaWYgKHRlc3RzV2l0aFRyYWNlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmN5YW4uYm9sZChcIlxcblRyYWNlczpcIikpO1xuICAgICAgICBmb3IgKGNvbnN0IHsgdGVzdE5hbWUsIGZpbGUsIHRyYWNlcyB9IG9mIHRlc3RzV2l0aFRyYWNlcykge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGBcXG4gICR7Y2hhbGsuYm9sZCh0ZXN0TmFtZSl9YCk7XG4gICAgICAgICAgY29uc29sZS5sb2coYCAgJHtjaGFsay5kaW0ocGF0aC5iYXNlbmFtZShmaWxlKSl9YCk7XG4gICAgICAgICAgZm9yIChjb25zdCB0cmFjZSBvZiB0cmFjZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IGxvYyA9IGAke3BhdGguYmFzZW5hbWUodHJhY2UuZmlsZVBhdGgpfToke3RyYWNlLmxpbmVOdW1iZXJ9YDtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlU3RyID1cbiAgICAgICAgICAgICAgdHlwZW9mIHRyYWNlLnZhbHVlID09PSBcInN0cmluZ1wiXG4gICAgICAgICAgICAgICAgPyB0cmFjZS52YWx1ZVxuICAgICAgICAgICAgICAgIDogKEpTT04uc3RyaW5naWZ5KHRyYWNlLnZhbHVlLCBudWxsLCAyKSA/PyBcInVuZGVmaW5lZFwiKTtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGBcXG4gICAgJHtjaGFsay55ZWxsb3coYFske3RyYWNlLmtleX1dYCl9ICR7Y2hhbGsuZGltKGxvYyl9YCk7XG4gICAgICAgICAgICBjb25zdCBpbmRlbnRlZCA9IHZhbHVlU3RyLnNwbGl0KFwiXFxuXCIpLmpvaW4oXCJcXG4gICAgXCIpO1xuICAgICAgICAgICAgY29uc29sZS5sb2coYCAgICAke2luZGVudGVkfWApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghcmVzdWx0Lm9rKSB7XG4gICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgfVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBpZiAoZXJyIGluc3RhbmNlb2YgVHlwZUVycm9yICYmIGVyci5jYXVzZSkge1xuICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgY2hhbGsucmVkKFwiZGV2IOyEnOuyhOyXkCDsl7DqsrDtlaAg7IiYIOyXhuyKteuLiOuLpC4gc29uYW11IGRlduqwgCDsi6Ttlokg7KSR7J247KeAIO2ZleyduO2VmOyEuOyalFwiKSxcbiAgICAgICk7XG4gICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgfVxuICAgIHRocm93IGVycjtcbiAgfVxufVxuXG5mdW5jdGlvbiBjb2xsZWN0RmFpbGVkRnJvbVJlc3VsdHMobm9kZXM6IFRlc3RDYXNlUmVzdWx0W10pOiBUZXN0Q2FzZVJlc3VsdFtdIHtcbiAgY29uc3QgcmVzdWx0OiBUZXN0Q2FzZVJlc3VsdFtdID0gW107XG4gIGZvciAoY29uc3Qgbm9kZSBvZiBub2Rlcykge1xuICAgIGlmIChub2RlLmtpbmQgPT09IFwidGVzdFwiICYmIG5vZGUuc3RhdGUgPT09IFwiZmFpbGVkXCIpIHtcbiAgICAgIHJlc3VsdC5wdXNoKG5vZGUpO1xuICAgIH1cbiAgICBpZiAobm9kZS5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICByZXN1bHQucHVzaCguLi5jb2xsZWN0RmFpbGVkRnJvbVJlc3VsdHMobm9kZS5jaGlsZHJlbikpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5mdW5jdGlvbiBjb2xsZWN0VHJhY2VzRnJvbVJlc3VsdHMoXG4gIG5vZGVzOiBUZXN0Q2FzZVJlc3VsdFtdLFxuKTogeyB0ZXN0TmFtZTogc3RyaW5nOyBmaWxlOiBzdHJpbmc7IHRyYWNlczogVGVzdENhc2VSZXN1bHRbXCJ0cmFjZXNcIl0gfVtdIHtcbiAgY29uc3QgcmVzdWx0OiB7IHRlc3ROYW1lOiBzdHJpbmc7IGZpbGU6IHN0cmluZzsgdHJhY2VzOiBUZXN0Q2FzZVJlc3VsdFtcInRyYWNlc1wiXSB9W10gPSBbXTtcbiAgZm9yIChjb25zdCBub2RlIG9mIG5vZGVzKSB7XG4gICAgaWYgKG5vZGUua2luZCA9PT0gXCJ0ZXN0XCIgJiYgbm9kZS50cmFjZXMubGVuZ3RoID4gMCkge1xuICAgICAgcmVzdWx0LnB1c2goeyB0ZXN0TmFtZTogbm9kZS5mdWxsTmFtZSwgZmlsZTogbm9kZS5maWxlLCB0cmFjZXM6IG5vZGUudHJhY2VzIH0pO1xuICAgIH1cbiAgICBpZiAobm9kZS5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICByZXN1bHQucHVzaCguLi5jb2xsZWN0VHJhY2VzRnJvbVJlc3VsdHMobm9kZS5jaGlsZHJlbikpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5hc3luYyBmdW5jdGlvbiB0ZXN0U3RhdHVzQ29tbWFuZChjb25maWc6IFNvbmFtdUNvbmZpZyk6IFByb21pc2U8dm9pZD4ge1xuICBpZiAoIWNvbmZpZy50ZXN0Py5kZXZSdW5uZXI/LmVuYWJsZWQpIHtcbiAgICBjb25zb2xlLmVycm9yKFxuICAgICAgY2hhbGsucmVkKFxuICAgICAgICBcImRldlJ1bm5lcuqwgCDtmZzshLHtmZTrkJjsp4Ag7JWK7JWY7Iq164uI64ukLiBzb25hbXUuY29uZmlnLnRz7JeQ7IScIHRlc3QuZGV2UnVubmVyLmVuYWJsZWQ6IHRydWUg7ISk7KCV7J20IO2VhOyalO2VqeuLiOuLpFwiLFxuICAgICAgKSxcbiAgICApO1xuICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgfVxuXG4gIGNvbnN0IHsgYmFzZVVybCB9ID0gcmVzb2x2ZVRlc3RCYXNlVXJsKGNvbmZpZyk7XG4gIGNvbnN0IHVybCA9IGAke2Jhc2VVcmx9L3N0YXR1c2A7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKHVybCk7XG5cbiAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGNoYWxrLnJlZChg7JiI7IOB7ZWY7KeAIOuqu+2VnCDsnZHri7U6ICR7cmVzcG9uc2Uuc3RhdHVzfWApKTtcbiAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICB9XG5cbiAgICBjb25zdCBzdGF0dXMgPSAoYXdhaXQgcmVzcG9uc2UuanNvbigpKSBhcyB7XG4gICAgICByZWFkeTogYm9vbGVhbjtcbiAgICAgIHJ1bm5pbmc6IGJvb2xlYW47XG4gICAgICBsYXN0UnVuQXQ6IHN0cmluZyB8IG51bGw7XG4gICAgICBzc2VBdmFpbGFibGU6IGJvb2xlYW47XG4gICAgfTtcblxuICAgIGNvbnNvbGUubG9nKGNoYWxrLmJvbGQoXCJEZXZSdW5uZXIg7IOB7YOcOlwiKSk7XG4gICAgY29uc29sZS5sb2coYCAgcmVhZHk6ICAgICAgICAke3N0YXR1cy5yZWFkeSA/IGNoYWxrLmdyZWVuKFwidHJ1ZVwiKSA6IGNoYWxrLnJlZChcImZhbHNlXCIpfWApO1xuICAgIGNvbnNvbGUubG9nKGAgIHJ1bm5pbmc6ICAgICAgJHtzdGF0dXMucnVubmluZyA/IGNoYWxrLnllbGxvdyhcInRydWVcIikgOiBcImZhbHNlXCJ9YCk7XG4gICAgY29uc29sZS5sb2coYCAgbGFzdFJ1bkF0OiAgICAke3N0YXR1cy5sYXN0UnVuQXQgPz8gY2hhbGsuZGltKFwi7JeG7J2MXCIpfWApO1xuICAgIGNvbnNvbGUubG9nKGAgIHNzZUF2YWlsYWJsZTogJHtzdGF0dXMuc3NlQXZhaWxhYmxlID8gY2hhbGsuZ3JlZW4oXCJ0cnVlXCIpIDogXCJmYWxzZVwifWApO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBpZiAoZXJyIGluc3RhbmNlb2YgVHlwZUVycm9yICYmIGVyci5jYXVzZSkge1xuICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgY2hhbGsucmVkKFwiZGV2IOyEnOuyhOyXkCDsl7DqsrDtlaAg7IiYIOyXhuyKteuLiOuLpC4gc29uYW11IGRlduqwgCDsi6Ttlokg7KSR7J247KeAIO2ZleyduO2VmOyEuOyalFwiKSxcbiAgICAgICk7XG4gICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgfVxuICAgIHRocm93IGVycjtcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7OztZQUswQztXQUVNO0FBRWhELGVBQWUsc0JBQTZDO0NBQzFELE1BQU0sYUFBYSxRQUFRLElBQUk7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
|
|
171
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC1jb21tYW5kLmpzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9iaW4vdGVzdC1jb21tYW5kLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBwYXRoIGZyb20gXCJub2RlOnBhdGhcIjtcblxuaW1wb3J0IGNoYWxrIGZyb20gXCJjaGFsa1wiO1xuXG5pbXBvcnQgeyBsb2FkQ29uZmlnIH0gZnJvbSBcIi4uL2FwaS9jb25maWdcIjtcbmltcG9ydCB7IHR5cGUgUnVuUmVzdWx0LCB0eXBlIFRlc3RDYXNlUmVzdWx0IH0gZnJvbSBcIi4uL3Rlc3RpbmdcIjtcbmltcG9ydCB7IGlzU3RyaW5nVmFsdWUgfSBmcm9tIFwiLi4vdXRpbHMvcnVudGltZS12YWx1ZVwiO1xuaW1wb3J0IHsgZmluZEFwaVJvb3RQYXRoIH0gZnJvbSBcIi4uL3V0aWxzL3V0aWxzXCI7XG5cbmludGVyZmFjZSBUZXN0U2VydmVyTG9jYXRpb24ge1xuICBob3N0OiBzdHJpbmc7XG4gIHBvcnQ6IG51bWJlcjtcbiAgcm91dGVQcmVmaXg6IHN0cmluZztcbiAgYmFzZVVybDogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgVGVzdFJ1blBheWxvYWQge1xuICBmaWxlcz86IHN0cmluZ1tdO1xuICBwYXR0ZXJuPzogc3RyaW5nO1xufVxuXG50eXBlIFRlc3RDb21tYW5kQ29uZmlnID0ge1xuICBzZXJ2ZXI6IHtcbiAgICBsaXN0ZW4/OiB7XG4gICAgICBob3N0Pzogc3RyaW5nO1xuICAgICAgcG9ydD86IG51bWJlcjtcbiAgICB9O1xuICB9O1xuICB0ZXN0Pzoge1xuICAgIGRldlJ1bm5lcj86IHtcbiAgICAgIGVuYWJsZWQ/OiBib29sZWFuO1xuICAgICAgcm91dGVQcmVmaXg/OiBzdHJpbmc7XG4gICAgfTtcbiAgfTtcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGVzdENvbW1hbmREZXBlbmRlbmNpZXMge1xuICBmZXRjaDogdHlwZW9mIGdsb2JhbFRoaXMuZmV0Y2g7XG4gIGZpbmRBcGlSb290UGF0aDogdHlwZW9mIGZpbmRBcGlSb290UGF0aDtcbiAgbG9hZENvbmZpZzogKGFwaVJvb3RQYXRoOiBzdHJpbmcpID0+IFByb21pc2U8VGVzdENvbW1hbmRDb25maWc+O1xufVxuXG5jb25zdCB0ZXN0Q29tbWFuZERlcGVuZGVuY2llczogVGVzdENvbW1hbmREZXBlbmRlbmNpZXMgPSB7XG4gIGZldGNoOiBnbG9iYWxUaGlzLmZldGNoLFxuICBmaW5kQXBpUm9vdFBhdGgsXG4gIGxvYWRDb25maWcsXG59O1xuXG5hc3luYyBmdW5jdGlvbiBsb2FkRGV2U2VydmVyQ29uZmlnKFxuICBkZXBlbmRlbmNpZXM6IFRlc3RDb21tYW5kRGVwZW5kZW5jaWVzLFxuKTogUHJvbWlzZTxUZXN0Q29tbWFuZENvbmZpZz4ge1xuICBjb25zdCBwcmV2Vml0ZXN0ID0gcHJvY2Vzcy5lbnYuVklURVNUO1xuICBwcm9jZXNzLmVudi5WSVRFU1QgPSBcInRydWVcIjtcbiAgdHJ5IHtcbiAgICBjb25zdCBhcGlSb290UGF0aCA9IGRlcGVuZGVuY2llcy5maW5kQXBpUm9vdFBhdGgoKTtcbiAgICByZXR1cm4gYXdhaXQgZGVwZW5kZW5jaWVzLmxvYWRDb25maWcoYXBpUm9vdFBhdGgpO1xuICB9IGZpbmFsbHkge1xuICAgIGlmIChwcmV2Vml0ZXN0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGRlbGV0ZSBwcm9jZXNzLmVudi5WSVRFU1Q7XG4gICAgfSBlbHNlIHtcbiAgICAgIHByb2Nlc3MuZW52LlZJVEVTVCA9IHByZXZWaXRlc3Q7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHJlc29sdmVUZXN0QmFzZVVybChjb25maWc6IFRlc3RDb21tYW5kQ29uZmlnKTogVGVzdFNlcnZlckxvY2F0aW9uIHtcbiAgY29uc3QgcG9ydCA9IGNvbmZpZy5zZXJ2ZXIubGlzdGVuPy5wb3J0ID8/IDMwMDA7XG4gIGNvbnN0IGhvc3QgPSBjb25maWcuc2VydmVyLmxpc3Rlbj8uaG9zdCA/PyBcImxvY2FsaG9zdFwiO1xuICBjb25zdCByb3V0ZVByZWZpeCA9IGNvbmZpZy50ZXN0Py5kZXZSdW5uZXI/LnJvdXRlUHJlZml4ID8/IFwiL19fdGVzdF9fXCI7XG4gIHJldHVybiB7IGhvc3QsIHBvcnQsIHJvdXRlUHJlZml4LCBiYXNlVXJsOiBgaHR0cDovLyR7aG9zdH06JHtwb3J0fSR7cm91dGVQcmVmaXh9YCB9O1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdGVzdENvbW1hbmQoXG4gIGRlcGVuZGVuY2llczogVGVzdENvbW1hbmREZXBlbmRlbmNpZXMgPSB0ZXN0Q29tbWFuZERlcGVuZGVuY2llcyxcbik6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBhcmdzID0gcHJvY2Vzcy5hcmd2LnNsaWNlKDMpO1xuXG4gIGNvbnN0IGNvbmZpZyA9IGF3YWl0IGxvYWREZXZTZXJ2ZXJDb25maWcoZGVwZW5kZW5jaWVzKTtcblxuICAvLyBwcm9jZXNzLmFyZ3Yg7YyM7IuxOiBzb25hbXUgdGVzdCBbZmlsZS4uLl0gLS1wYXR0ZXJuIFwi7J2066aEXCIgLS10cmFjZXMgLS1zdGF0dXNcbiAgY29uc3QgZmlsZXM6IHN0cmluZ1tdID0gW107XG4gIGxldCBwYXR0ZXJuOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIGxldCBzaG93VHJhY2VzID0gZmFsc2U7XG4gIGxldCBzaG93U3RhdHVzID0gZmFsc2U7XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgYXJnID0gYXJnc1tpXTtcbiAgICBpZiAoYXJnID09PSBcIi0tcGF0dGVyblwiIHx8IGFyZyA9PT0gXCItcFwiKSB7XG4gICAgICBwYXR0ZXJuID0gYXJnc1srK2ldO1xuICAgIH0gZWxzZSBpZiAoYXJnID09PSBcIi0tdHJhY2VzXCIgfHwgYXJnID09PSBcIi10XCIpIHtcbiAgICAgIHNob3dUcmFjZXMgPSB0cnVlO1xuICAgIH0gZWxzZSBpZiAoYXJnID09PSBcIi0tc3RhdHVzXCIgfHwgYXJnID09PSBcIi1zXCIpIHtcbiAgICAgIHNob3dTdGF0dXMgPSB0cnVlO1xuICAgIH0gZWxzZSBpZiAoIWFyZy5zdGFydHNXaXRoKFwiLVwiKSkge1xuICAgICAgZmlsZXMucHVzaChhcmcpO1xuICAgIH1cbiAgfVxuXG4gIGlmIChzaG93U3RhdHVzKSB7XG4gICAgcmV0dXJuIHRlc3RTdGF0dXNDb21tYW5kKGNvbmZpZywgZGVwZW5kZW5jaWVzLmZldGNoKTtcbiAgfVxuXG4gIGlmICghY29uZmlnLnRlc3Q/LmRldlJ1bm5lcj8uZW5hYmxlZCkge1xuICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICBjaGFsay5yZWQoXG4gICAgICAgIFwiZGV2UnVubmVy6rCAIO2ZnOyEse2ZlOuQmOyngCDslYrslZjsirXri4jri6QuIHNvbmFtdS5jb25maWcudHPsl5DshJwgdGVzdC5kZXZSdW5uZXIuZW5hYmxlZDogdHJ1ZSDshKTsoJXsnbQg7ZWE7JqU7ZWp64uI64ukXCIsXG4gICAgICApLFxuICAgICk7XG4gICAgcHJvY2Vzcy5leGl0KDEpO1xuICB9XG5cbiAgY29uc3QgeyBiYXNlVXJsIH0gPSByZXNvbHZlVGVzdEJhc2VVcmwoY29uZmlnKTtcbiAgY29uc3QgdXJsID0gYCR7YmFzZVVybH0vcnVuYDtcblxuICBjb25zdCBwYXlsb2FkOiBUZXN0UnVuUGF5bG9hZCA9IHt9O1xuICBpZiAoZmlsZXMubGVuZ3RoID4gMCkge1xuICAgIHBheWxvYWQuZmlsZXMgPSBmaWxlcztcbiAgfVxuICBpZiAocGF0dGVybikge1xuICAgIHBheWxvYWQucGF0dGVybiA9IHBhdHRlcm47XG4gIH1cblxuICB0cnkge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZGVwZW5kZW5jaWVzLmZldGNoKHVybCwge1xuICAgICAgbWV0aG9kOiBcIlBPU1RcIixcbiAgICAgIGhlYWRlcnM6IHsgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIgfSxcbiAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHBheWxvYWQpLFxuICAgIH0pO1xuXG4gICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gNDA0KSB7XG4gICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICBjaGFsay5yZWQoXG4gICAgICAgICAgXCJkZXZSdW5uZXLqsIAg7Zmc7ISx7ZmU65CY7KeAIOyViuyVmOyKteuLiOuLpC4gc29uYW11LmNvbmZpZy50c+yXkOyEnCB0ZXN0LmRldlJ1bm5lci5lbmFibGVkOiB0cnVlIOyEpOygleydtCDtlYTsmpTtlanri4jri6RcIixcbiAgICAgICAgKSxcbiAgICAgICk7XG4gICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgfVxuXG4gICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gNTAwKSB7XG4gICAgICBjb25zdCBlcnJvckJvZHkgPVxuICAgICAgICAvKiBTQUZFVFk6IENMSSDtjIzshJzsmYAg67mM65OcIOuPhOq1rCDsnoXroKUg6rOE7JW97J20IOydtCDqsJLsnZgg7YOA7J6F7J2EIOuztOyepe2VnOuLpC4gKi8gKGF3YWl0IHJlc3BvbnNlLmpzb24oKSkgYXMge1xuICAgICAgICAgIGVycm9yPzogc3RyaW5nO1xuICAgICAgICB9O1xuICAgICAgY29uc29sZS5lcnJvcihjaGFsay5yZWQoXCJWaXRlc3Qg7J247Iqk7YS07Iqk6rCAIOyVhOyngSDspIDruYTrkJjsp4Ag7JWK7JWY7Iq164uI64ukXCIpKTtcbiAgICAgIGlmIChlcnJvckJvZHkuZXJyb3IpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihjaGFsay5yZWQoZXJyb3JCb2R5LmVycm9yKSk7XG4gICAgICB9XG4gICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgfVxuXG4gICAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgICAgY29uc29sZS5lcnJvcihjaGFsay5yZWQoYOyYiOyDge2VmOyngCDrqrvtlZwg7J2R64u1OiAke3Jlc3BvbnNlLnN0YXR1c31gKSk7XG4gICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgfVxuXG4gICAgY29uc3QgcmVzdWx0ID1cbiAgICAgIC8qIFNBRkVUWTogQ0xJIO2MjOyEnOyZgCDruYzrk5wg64+E6rWsIOyeheugpSDqs4Tslb3snbQg7J20IOqwkuydmCDtg4DsnoXsnYQg67O07J6l7ZWc64ukLiAqLyAoYXdhaXQgcmVzcG9uc2UuanNvbigpKSBhcyBSdW5SZXN1bHQ7XG5cbiAgICBjb25zdCB7IHBhc3NlZCwgZmFpbGVkOiBmYWlsZWRDb3VudCwgdG90YWwsIGR1cmF0aW9uTXMgfSA9IHJlc3VsdC5zdW1tYXJ5O1xuICAgIGNvbnN0IHBhc3NlZFN0ciA9IGNoYWxrLmdyZWVuKGAke3Bhc3NlZH0gcGFzc2VkYCk7XG4gICAgY29uc3QgZmFpbGVkU3RyID1cbiAgICAgIGZhaWxlZENvdW50ID4gMCA/IGNoYWxrLnJlZChgJHtmYWlsZWRDb3VudH0gZmFpbGVkYCkgOiBgJHtmYWlsZWRDb3VudH0gZmFpbGVkYDtcbiAgICBjb25zb2xlLmxvZyhgXFxuVGVzdHM6ICR7cGFzc2VkU3RyfSwgJHtmYWlsZWRTdHJ9LCAke3RvdGFsfSB0b3RhbGApO1xuICAgIGNvbnNvbGUubG9nKGNoYWxrLmRpbShgRHVyYXRpb246ICR7ZHVyYXRpb25Nc31tc2ApKTtcblxuICAgIGNvbnN0IGZhaWxlZFRlc3RzID0gY29sbGVjdEZhaWxlZEZyb21SZXN1bHRzKHJlc3VsdC5yZXN1bHRzKTtcbiAgICBpZiAoZmFpbGVkVGVzdHMubGVuZ3RoID4gMCkge1xuICAgICAgY29uc29sZS5sb2coY2hhbGsucmVkLmJvbGQoXCJcXG5GYWlsZWQgdGVzdHM6XCIpKTtcbiAgICAgIGZvciAoY29uc3QgZiBvZiBmYWlsZWRUZXN0cykge1xuICAgICAgICBjb25zb2xlLmxvZyhgICAke2NoYWxrLnJlZChcInhcIil9ICR7Zi5mdWxsTmFtZX0gJHtjaGFsay5kaW0oYCgke2YuZmlsZX0pYCl9YCk7XG4gICAgICAgIGlmIChmLmVycm9yKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coYCAgICAke2NoYWxrLnJlZChmLmVycm9yLm1lc3NhZ2UpfWApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHNob3dUcmFjZXMpIHtcbiAgICAgIGNvbnN0IHRlc3RzV2l0aFRyYWNlcyA9IGNvbGxlY3RUcmFjZXNGcm9tUmVzdWx0cyhyZXN1bHQucmVzdWx0cyk7XG4gICAgICBpZiAodGVzdHNXaXRoVHJhY2VzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY29uc29sZS5sb2coY2hhbGsuY3lhbi5ib2xkKFwiXFxuVHJhY2VzOlwiKSk7XG4gICAgICAgIGZvciAoY29uc3QgeyB0ZXN0TmFtZSwgZmlsZSwgdHJhY2VzIH0gb2YgdGVzdHNXaXRoVHJhY2VzKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coYFxcbiAgJHtjaGFsay5ib2xkKHRlc3ROYW1lKX1gKTtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgICAke2NoYWxrLmRpbShwYXRoLmJhc2VuYW1lKGZpbGUpKX1gKTtcbiAgICAgICAgICBmb3IgKGNvbnN0IHRyYWNlIG9mIHRyYWNlcykge1xuICAgICAgICAgICAgY29uc3QgbG9jID0gYCR7cGF0aC5iYXNlbmFtZSh0cmFjZS5maWxlUGF0aCl9OiR7dHJhY2UubGluZU51bWJlcn1gO1xuICAgICAgICAgICAgY29uc3QgdmFsdWVTdHIgPSBpc1N0cmluZ1ZhbHVlKHRyYWNlLnZhbHVlKVxuICAgICAgICAgICAgICA/IHRyYWNlLnZhbHVlXG4gICAgICAgICAgICAgIDogKEpTT04uc3RyaW5naWZ5KHRyYWNlLnZhbHVlLCBudWxsLCAyKSA/PyBcInVuZGVmaW5lZFwiKTtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGBcXG4gICAgJHtjaGFsay55ZWxsb3coYFske3RyYWNlLmtleX1dYCl9ICR7Y2hhbGsuZGltKGxvYyl9YCk7XG4gICAgICAgICAgICBjb25zdCBpbmRlbnRlZCA9IHZhbHVlU3RyLnNwbGl0KFwiXFxuXCIpLmpvaW4oXCJcXG4gICAgXCIpO1xuICAgICAgICAgICAgY29uc29sZS5sb2coYCAgICAke2luZGVudGVkfWApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghcmVzdWx0Lm9rKSB7XG4gICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgfVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBpZiAoZXJyIGluc3RhbmNlb2YgVHlwZUVycm9yICYmIGVyci5jYXVzZSkge1xuICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgY2hhbGsucmVkKFwiZGV2IOyEnOuyhOyXkCDsl7DqsrDtlaAg7IiYIOyXhuyKteuLiOuLpC4gc29uYW11IGRlduqwgCDsi6Ttlokg7KSR7J247KeAIO2ZleyduO2VmOyEuOyalFwiKSxcbiAgICAgICk7XG4gICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgfVxuICAgIHRocm93IGVycjtcbiAgfVxufVxuXG5mdW5jdGlvbiBjb2xsZWN0RmFpbGVkRnJvbVJlc3VsdHMobm9kZXM6IFRlc3RDYXNlUmVzdWx0W10pOiBUZXN0Q2FzZVJlc3VsdFtdIHtcbiAgY29uc3QgcmVzdWx0OiBUZXN0Q2FzZVJlc3VsdFtdID0gW107XG4gIGZvciAoY29uc3Qgbm9kZSBvZiBub2Rlcykge1xuICAgIGlmIChub2RlLmtpbmQgPT09IFwidGVzdFwiICYmIG5vZGUuc3RhdGUgPT09IFwiZmFpbGVkXCIpIHtcbiAgICAgIHJlc3VsdC5wdXNoKG5vZGUpO1xuICAgIH1cbiAgICBpZiAobm9kZS5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICByZXN1bHQucHVzaCguLi5jb2xsZWN0RmFpbGVkRnJvbVJlc3VsdHMobm9kZS5jaGlsZHJlbikpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5mdW5jdGlvbiBjb2xsZWN0VHJhY2VzRnJvbVJlc3VsdHMoXG4gIG5vZGVzOiBUZXN0Q2FzZVJlc3VsdFtdLFxuKTogeyB0ZXN0TmFtZTogc3RyaW5nOyBmaWxlOiBzdHJpbmc7IHRyYWNlczogVGVzdENhc2VSZXN1bHRbXCJ0cmFjZXNcIl0gfVtdIHtcbiAgY29uc3QgcmVzdWx0OiB7IHRlc3ROYW1lOiBzdHJpbmc7IGZpbGU6IHN0cmluZzsgdHJhY2VzOiBUZXN0Q2FzZVJlc3VsdFtcInRyYWNlc1wiXSB9W10gPSBbXTtcbiAgZm9yIChjb25zdCBub2RlIG9mIG5vZGVzKSB7XG4gICAgaWYgKG5vZGUua2luZCA9PT0gXCJ0ZXN0XCIgJiYgbm9kZS50cmFjZXMubGVuZ3RoID4gMCkge1xuICAgICAgcmVzdWx0LnB1c2goeyB0ZXN0TmFtZTogbm9kZS5mdWxsTmFtZSwgZmlsZTogbm9kZS5maWxlLCB0cmFjZXM6IG5vZGUudHJhY2VzIH0pO1xuICAgIH1cbiAgICBpZiAobm9kZS5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICByZXN1bHQucHVzaCguLi5jb2xsZWN0VHJhY2VzRnJvbVJlc3VsdHMobm9kZS5jaGlsZHJlbikpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5hc3luYyBmdW5jdGlvbiB0ZXN0U3RhdHVzQ29tbWFuZChcbiAgY29uZmlnOiBUZXN0Q29tbWFuZENvbmZpZyxcbiAgZmV0Y2hSZXF1ZXN0OiB0eXBlb2YgZ2xvYmFsVGhpcy5mZXRjaCxcbik6IFByb21pc2U8dm9pZD4ge1xuICBpZiAoIWNvbmZpZy50ZXN0Py5kZXZSdW5uZXI/LmVuYWJsZWQpIHtcbiAgICBjb25zb2xlLmVycm9yKFxuICAgICAgY2hhbGsucmVkKFxuICAgICAgICBcImRldlJ1bm5lcuqwgCDtmZzshLHtmZTrkJjsp4Ag7JWK7JWY7Iq164uI64ukLiBzb25hbXUuY29uZmlnLnRz7JeQ7IScIHRlc3QuZGV2UnVubmVyLmVuYWJsZWQ6IHRydWUg7ISk7KCV7J20IO2VhOyalO2VqeuLiOuLpFwiLFxuICAgICAgKSxcbiAgICApO1xuICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgfVxuXG4gIGNvbnN0IHsgYmFzZVVybCB9ID0gcmVzb2x2ZVRlc3RCYXNlVXJsKGNvbmZpZyk7XG4gIGNvbnN0IHVybCA9IGAke2Jhc2VVcmx9L3N0YXR1c2A7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoUmVxdWVzdCh1cmwpO1xuXG4gICAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgICAgY29uc29sZS5lcnJvcihjaGFsay5yZWQoYOyYiOyDge2VmOyngCDrqrvtlZwg7J2R64u1OiAke3Jlc3BvbnNlLnN0YXR1c31gKSk7XG4gICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhdHVzID1cbiAgICAgIC8qIFNBRkVUWTogQ0xJIO2MjOyEnOyZgCDruYzrk5wg64+E6rWsIOyeheugpSDqs4Tslb3snbQg7J20IOqwkuydmCDtg4DsnoXsnYQg67O07J6l7ZWc64ukLiAqLyAoYXdhaXQgcmVzcG9uc2UuanNvbigpKSBhcyB7XG4gICAgICAgIHJlYWR5OiBib29sZWFuO1xuICAgICAgICBydW5uaW5nOiBib29sZWFuO1xuICAgICAgICBsYXN0UnVuQXQ6IHN0cmluZyB8IG51bGw7XG4gICAgICAgIHNzZUF2YWlsYWJsZTogYm9vbGVhbjtcbiAgICAgIH07XG5cbiAgICBjb25zb2xlLmxvZyhjaGFsay5ib2xkKFwiRGV2UnVubmVyIOyDge2DnDpcIikpO1xuICAgIGNvbnNvbGUubG9nKGAgIHJlYWR5OiAgICAgICAgJHtzdGF0dXMucmVhZHkgPyBjaGFsay5ncmVlbihcInRydWVcIikgOiBjaGFsay5yZWQoXCJmYWxzZVwiKX1gKTtcbiAgICBjb25zb2xlLmxvZyhgICBydW5uaW5nOiAgICAgICR7c3RhdHVzLnJ1bm5pbmcgPyBjaGFsay55ZWxsb3coXCJ0cnVlXCIpIDogXCJmYWxzZVwifWApO1xuICAgIGNvbnNvbGUubG9nKGAgIGxhc3RSdW5BdDogICAgJHtzdGF0dXMubGFzdFJ1bkF0ID8/IGNoYWxrLmRpbShcIuyXhuydjFwiKX1gKTtcbiAgICBjb25zb2xlLmxvZyhgICBzc2VBdmFpbGFibGU6ICR7c3RhdHVzLnNzZUF2YWlsYWJsZSA/IGNoYWxrLmdyZWVuKFwidHJ1ZVwiKSA6IFwiZmFsc2VcIn1gKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgaWYgKGVyciBpbnN0YW5jZW9mIFR5cGVFcnJvciAmJiBlcnIuY2F1c2UpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgIGNoYWxrLnJlZChcImRldiDshJzrsoTsl5Ag7Jew6rKw7ZWgIOyImCDsl4bsirXri4jri6QuIHNvbmFtdSBkZXbqsIAg7Iuk7ZaJIOykkeyduOyngCDtmZXsnbjtlZjshLjsmpRcIiksXG4gICAgICApO1xuICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgIH1cbiAgICB0aHJvdyBlcnI7XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O1lBSTBDO21CQUVZO1dBQ047QUFtQ2hELE1BQU0sMEJBQW1EO0NBQ3ZELE9BQU8sV0FBVztDQUNsQjtDQUNBO0FBQ0Y7QUFFQSxlQUFlLG9CQUNiLGNBQzRCO0NBQzVCLE1BQU0sYUFBYSxRQUFRLElBQUk7Q0FDL0IsUUFBUSxJQUFJLFNBQVM7Q0FDckIsSUFBSTtFQUNGLE1BQU0sY0FBYyxhQUFhLGdCQUFnQjtFQUNqRCxPQUFPLE1BQU0sYUFBYSxXQUFXLFdBQVc7Q0FDbEQsVUFBVTtFQUNSLElBQUksZUFBZSxRQUNqQixPQUFPLFFBQVEsSUFBSTtPQUVuQixRQUFRLElBQUksU0FBUztDQUV6QjtBQUNGO0FBRUEsU0FBUyxtQkFBbUIsUUFBK0M7Q0FDekUsTUFBTSxPQUFPLE9BQU8sT0FBTyxRQUFRLFFBQVE7Q0FDM0MsTUFBTSxPQUFPLE9BQU8sT0FBTyxRQUFRLFFBQVE7Q0FDM0MsTUFBTSxjQUFjLE9BQU8sTUFBTSxXQUFXLGVBQWU7Q0FDM0QsT0FBTztFQUFFO0VBQU07RUFBTTtFQUFhLFNBQVMsVUFBVSxLQUFLLEdBQUcsT0FBTztDQUFjO0FBQ3BGO0FBRUEsZUFBc0IsWUFDcEIsZUFBd0MseUJBQ3pCO0NBQ2YsTUFBTSxPQUFPLFFBQVEsS0FBSyxNQUFNLENBQUM7Q0FFakMsTUFBTSxTQUFTLE1BQU0sb0JBQW9CLFlBQVk7Q0FHckQsTUFBTSxRQUFrQixDQUFDO0NBQ3pCLElBQUk7Q0FDSixJQUFJLGFBQWE7Q0FDakIs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
|
|
@@ -1,2 +1,8 @@
|
|
|
1
|
-
export
|
|
1
|
+
export interface TsLoaderRegistrationDependencies {
|
|
2
|
+
registerLoader: (specifier: string, options: {
|
|
3
|
+
parentURL: string;
|
|
4
|
+
}) => void;
|
|
5
|
+
resolveLoaderPath: () => string;
|
|
6
|
+
}
|
|
7
|
+
export declare function ensureTsLoaderRegistered(apiRoot: string, dependencies?: TsLoaderRegistrationDependencies): Promise<void>;
|
|
2
8
|
//# sourceMappingURL=ts-loader-registration.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ts-loader-registration.d.ts","sourceRoot":"","sources":["../../src/bin/ts-loader-registration.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ts-loader-registration.d.ts","sourceRoot":"","sources":["../../src/bin/ts-loader-registration.ts"],"names":[],"mappings":"AAeA,MAAM,WAAW,gCAAgC;IAC/C,cAAc,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE;QAAE,SAAS,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;IAC5E,iBAAiB,EAAE,MAAM,MAAM,CAAC;CACjC;AAsBD,wBAAsB,wBAAwB,CAC5C,OAAO,EAAE,MAAM,EACf,YAAY,GAAE,gCAAmE,GAChF,OAAO,CAAC,IAAI,CAAC,CAaf"}
|
|
@@ -7,19 +7,28 @@ function getTsLoaderRegisterState() {
|
|
|
7
7
|
if (!globalState[tsLoaderRegisterStateKey]) globalState[tsLoaderRegisterStateKey] = { registered: false };
|
|
8
8
|
return globalState[tsLoaderRegisterStateKey];
|
|
9
9
|
}
|
|
10
|
-
async function ensureTsLoaderRegistered(apiRoot) {
|
|
10
|
+
async function ensureTsLoaderRegistered(apiRoot, dependencies = tsLoaderRegistrationDependencies) {
|
|
11
11
|
const state = getTsLoaderRegisterState();
|
|
12
12
|
if (state.registered) return;
|
|
13
|
-
|
|
13
|
+
const loaderPath = dependencies.resolveLoaderPath();
|
|
14
|
+
dependencies.registerLoader(pathToFileURL(loaderPath).href, { parentURL: import.meta.url });
|
|
14
15
|
state.registered = true;
|
|
15
16
|
}
|
|
16
|
-
var tsLoaderRegisterStateKey, require;
|
|
17
|
+
var tsLoaderRegisterStateKey, require, tsLoaderRegistrationDependencies;
|
|
17
18
|
var init_ts_loader_registration = __esmMin((() => {
|
|
18
19
|
tsLoaderRegisterStateKey = Symbol.for("sonamu.ts-loader-register.state");
|
|
19
20
|
require = createRequire(import.meta.url);
|
|
21
|
+
tsLoaderRegistrationDependencies = {
|
|
22
|
+
registerLoader(specifier, options) {
|
|
23
|
+
register(specifier, options);
|
|
24
|
+
},
|
|
25
|
+
resolveLoaderPath() {
|
|
26
|
+
return require.resolve("@sonamu-kit/ts-loader/loader");
|
|
27
|
+
}
|
|
28
|
+
};
|
|
20
29
|
}));
|
|
21
30
|
//#endregion
|
|
22
31
|
init_ts_loader_registration();
|
|
23
32
|
export { ensureTsLoaderRegistered, init_ts_loader_registration };
|
|
24
33
|
|
|
25
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
34
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHMtbG9hZGVyLXJlZ2lzdHJhdGlvbi5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi9zcmMvYmluL3RzLWxvYWRlci1yZWdpc3RyYXRpb24udHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY3JlYXRlUmVxdWlyZSB9IGZyb20gXCJub2RlOm1vZHVsZVwiO1xuaW1wb3J0IHsgcmVnaXN0ZXIgfSBmcm9tIFwibm9kZTptb2R1bGVcIjtcbmltcG9ydCB7IHBhdGhUb0ZpbGVVUkwgfSBmcm9tIFwibm9kZTp1cmxcIjtcblxuY29uc3QgdHNMb2FkZXJSZWdpc3RlclN0YXRlS2V5ID0gU3ltYm9sLmZvcihcInNvbmFtdS50cy1sb2FkZXItcmVnaXN0ZXIuc3RhdGVcIik7XG5jb25zdCByZXF1aXJlID0gY3JlYXRlUmVxdWlyZShpbXBvcnQubWV0YS51cmwpO1xuXG50eXBlIFRzTG9hZGVyUmVnaXN0ZXJTdGF0ZSA9IHtcbiAgcmVnaXN0ZXJlZDogYm9vbGVhbjtcbn07XG5cbnR5cGUgR2xvYmFsV2l0aFRzTG9hZGVyUmVnaXN0ZXJTdGF0ZSA9IHR5cGVvZiBnbG9iYWxUaGlzICYge1xuICBbdHNMb2FkZXJSZWdpc3RlclN0YXRlS2V5XT86IFRzTG9hZGVyUmVnaXN0ZXJTdGF0ZTtcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgVHNMb2FkZXJSZWdpc3RyYXRpb25EZXBlbmRlbmNpZXMge1xuICByZWdpc3RlckxvYWRlcjogKHNwZWNpZmllcjogc3RyaW5nLCBvcHRpb25zOiB7IHBhcmVudFVSTDogc3RyaW5nIH0pID0+IHZvaWQ7XG4gIHJlc29sdmVMb2FkZXJQYXRoOiAoKSA9PiBzdHJpbmc7XG59XG5cbmNvbnN0IHRzTG9hZGVyUmVnaXN0cmF0aW9uRGVwZW5kZW5jaWVzOiBUc0xvYWRlclJlZ2lzdHJhdGlvbkRlcGVuZGVuY2llcyA9IHtcbiAgcmVnaXN0ZXJMb2FkZXIoc3BlY2lmaWVyLCBvcHRpb25zKSB7XG4gICAgcmVnaXN0ZXIoc3BlY2lmaWVyLCBvcHRpb25zKTtcbiAgfSxcbiAgcmVzb2x2ZUxvYWRlclBhdGgoKSB7XG4gICAgcmV0dXJuIHJlcXVpcmUucmVzb2x2ZShcIkBzb25hbXUta2l0L3RzLWxvYWRlci9sb2FkZXJcIik7XG4gIH0sXG59O1xuXG5mdW5jdGlvbiBnZXRUc0xvYWRlclJlZ2lzdGVyU3RhdGUoKTogVHNMb2FkZXJSZWdpc3RlclN0YXRlIHtcbiAgY29uc3QgZ2xvYmFsU3RhdGUgPVxuICAgIC8qIFNBRkVUWTogQ0xJIO2MjOyEnOyZgCDruYzrk5wg64+E6rWsIOyeheugpSDqs4Tslb3snbQg7J20IOqwkuydmCDtg4DsnoXsnYQg67O07J6l7ZWc64ukLiAqLyBnbG9iYWxUaGlzIGFzIEdsb2JhbFdpdGhUc0xvYWRlclJlZ2lzdGVyU3RhdGU7XG5cbiAgaWYgKCFnbG9iYWxTdGF0ZVt0c0xvYWRlclJlZ2lzdGVyU3RhdGVLZXldKSB7XG4gICAgZ2xvYmFsU3RhdGVbdHNMb2FkZXJSZWdpc3RlclN0YXRlS2V5XSA9IHsgcmVnaXN0ZXJlZDogZmFsc2UgfTtcbiAgfVxuXG4gIHJldHVybiBnbG9iYWxTdGF0ZVt0c0xvYWRlclJlZ2lzdGVyU3RhdGVLZXldO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZW5zdXJlVHNMb2FkZXJSZWdpc3RlcmVkKFxuICBhcGlSb290OiBzdHJpbmcsXG4gIGRlcGVuZGVuY2llczogVHNMb2FkZXJSZWdpc3RyYXRpb25EZXBlbmRlbmNpZXMgPSB0c0xvYWRlclJlZ2lzdHJhdGlvbkRlcGVuZGVuY2llcyxcbik6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBzdGF0ZSA9IGdldFRzTG9hZGVyUmVnaXN0ZXJTdGF0ZSgpO1xuICBpZiAoc3RhdGUucmVnaXN0ZXJlZCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZvaWQgYXBpUm9vdDtcbiAgY29uc3QgbG9hZGVyUGF0aCA9IGRlcGVuZGVuY2llcy5yZXNvbHZlTG9hZGVyUGF0aCgpO1xuXG4gIGRlcGVuZGVuY2llcy5yZWdpc3RlckxvYWRlcihwYXRoVG9GaWxlVVJMKGxvYWRlclBhdGgpLmhyZWYsIHtcbiAgICBwYXJlbnRVUkw6IGltcG9ydC5tZXRhLnVybCxcbiAgfSk7XG4gIHN0YXRlLnJlZ2lzdGVyZWQgPSB0cnVlO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7O0FBNkJBLFNBQVMsMkJBQWtEO0NBQ3pELE1BQU0sY0FDOEM7Q0FFcEQsSUFBSSxDQUFDLFlBQVksMkJBQ2YsWUFBWSw0QkFBNEIsRUFBRSxZQUFZLE1BQU07Q0FHOUQsT0FBTyxZQUFZO0FBQ3JCO0FBRUEsZUFBc0IseUJBQ3BCLFNBQ0EsZUFBaUQsa0NBQ2xDO0NBQ2YsTUFBTSxRQUFRLHlCQUF5QjtDQUN2QyxJQUFJLE1BQU0sWUFDUjtDQUlGLE1BQU0sYUFBYSxhQUFhLGtCQUFrQjtDQUVsRCxhQUFhLGVBQWUsY0FBYyxVQUFVLENBQUMsQ0FBQyxNQUFNLEVBQzFELFdBQVcsT0FBTyxLQUFLLElBQ3pCLENBQUM7Q0FDRCxNQUFNLGFBQWE7QUFDckI7OztDQXBETSwyQkFBMkIsT0FBTyxJQUFJLGlDQUFpQztDQUN2RSxVQUFVLGNBQWMsT0FBTyxLQUFLLEdBQUc7Q0FldkMsbUNBQXFFO0VBQ3pFLGVBQWUsV0FBVyxTQUFTO0dBQ2pDLFNBQVMsV0FBVyxPQUFPO0VBQzdCO0VBQ0Esb0JBQW9CO0dBQ2xCLE9BQU8sUUFBUSxRQUFRLDhCQUE4QjtFQUN2RDtDQUNGIn0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"decorator.d.ts","sourceRoot":"","sources":["../../src/cache/decorator.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"decorator.d.ts","sourceRoot":"","sources":["../../src/cache/decorator.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,qBAAqB,EAAE,KAAK,YAAY,EAAE,MAAM,SAAS,CAAC;AAExE,KAAK,eAAe,GAAG;IAAE,WAAW,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,CAAC;AAUzD;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,YAAY,GAAG,IAAI,GAAG,IAAI,CAErE;AAED;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,YAAY,GAAG,IAAI,CAExD;AAoDD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,KAAK,CAAC,OAAO,GAAE,qBAA0B,IAC/C,SAAS,eAAe,EAAE,aAAa,MAAM,EAAE,YAAY,kBAAkB,wBA2BtF"}
|
package/dist/cache/decorator.js
CHANGED
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
import { __esmMin } from "../_virtual/_rolldown/runtime.js";
|
|
2
|
+
import { init_runtime_value, isFunctionValue, isNumberValue, isStringValue } from "../utils/runtime-value.js";
|
|
3
|
+
import { init_runtime_type, isBooleanValue } from "../runtime-type.js";
|
|
2
4
|
import { BaseModelClass, init_base_model } from "../database/base-model.js";
|
|
3
5
|
//#region src/cache/decorator.ts
|
|
6
|
+
function isCacheKeyFactory(keyOption) {
|
|
7
|
+
return isFunctionValue(keyOption);
|
|
8
|
+
}
|
|
4
9
|
/**
|
|
5
10
|
* 캐시 매니저 참조 설정 (내부 사용)
|
|
6
11
|
*/
|
|
@@ -17,8 +22,8 @@ function getCacheManagerRef() {
|
|
|
17
22
|
* 캐시 키 생성
|
|
18
23
|
*/
|
|
19
24
|
function generateCacheKey(modelName, methodName, args, keyOption) {
|
|
20
|
-
if (
|
|
21
|
-
if (
|
|
25
|
+
if (isCacheKeyFactory(keyOption)) return keyOption(...args);
|
|
26
|
+
if (isStringValue(keyOption)) {
|
|
22
27
|
const argsSuffix = serializeArgs(args);
|
|
23
28
|
return argsSuffix ? `${keyOption}:${argsSuffix}` : keyOption;
|
|
24
29
|
}
|
|
@@ -34,7 +39,7 @@ function serializeArgs(args) {
|
|
|
34
39
|
if (args.length === 1) {
|
|
35
40
|
const arg = args[0];
|
|
36
41
|
if (arg === null || arg === void 0) return "";
|
|
37
|
-
if (
|
|
42
|
+
if (isStringValue(arg) || isNumberValue(arg) || isBooleanValue(arg)) return String(arg);
|
|
38
43
|
}
|
|
39
44
|
try {
|
|
40
45
|
return JSON.stringify(args);
|
|
@@ -76,10 +81,12 @@ function cache(options = {}) {
|
|
|
76
81
|
var cacheManagerRef;
|
|
77
82
|
var init_decorator = __esmMin((() => {
|
|
78
83
|
init_base_model();
|
|
84
|
+
init_runtime_type();
|
|
85
|
+
init_runtime_value();
|
|
79
86
|
cacheManagerRef = null;
|
|
80
87
|
}));
|
|
81
88
|
//#endregion
|
|
82
89
|
init_decorator();
|
|
83
90
|
export { cache, getCacheManagerRef, init_decorator, setCacheManagerRef };
|
|
84
91
|
|
|
85
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
92
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVjb3JhdG9yLmpzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jYWNoZS9kZWNvcmF0b3IudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdHlwZSBCYXNlRnJhbWVDbGFzcyB9IGZyb20gXCIuLi9hcGkvYmFzZS1mcmFtZVwiO1xuaW1wb3J0IHsgQmFzZU1vZGVsQ2xhc3MgfSBmcm9tIFwiLi4vZGF0YWJhc2UvYmFzZS1tb2RlbFwiO1xuaW1wb3J0IHsgaXNCb29sZWFuVmFsdWUgfSBmcm9tIFwiLi4vcnVudGltZS10eXBlXCI7XG5pbXBvcnQgeyBpc0Z1bmN0aW9uVmFsdWUsIGlzTnVtYmVyVmFsdWUsIGlzU3RyaW5nVmFsdWUgfSBmcm9tIFwiLi4vdXRpbHMvcnVudGltZS12YWx1ZVwiO1xuaW1wb3J0IHsgdHlwZSBDYWNoZURlY29yYXRvck9wdGlvbnMsIHR5cGUgQ2FjaGVNYW5hZ2VyIH0gZnJvbSBcIi4vdHlwZXNcIjtcblxudHlwZSBEZWNvcmF0b3JUYXJnZXQgPSB7IGNvbnN0cnVjdG9yOiB7IG5hbWU6IHN0cmluZyB9IH07XG50eXBlIENhY2hlS2V5RmFjdG9yeSA9ICguLi5hcmdzOiB1bmtub3duW10pID0+IHN0cmluZztcblxuZnVuY3Rpb24gaXNDYWNoZUtleUZhY3Rvcnkoa2V5T3B0aW9uOiBDYWNoZURlY29yYXRvck9wdGlvbnNbXCJrZXlcIl0pOiBrZXlPcHRpb24gaXMgQ2FjaGVLZXlGYWN0b3J5IHtcbiAgcmV0dXJuIGlzRnVuY3Rpb25WYWx1ZShrZXlPcHRpb24pO1xufVxuXG4vLyDsupDsi5wg66ek64uI7KCAIOywuOyhsCAoU29uYW11LmluaXTsl5DshJwg7ISk7KCV65CoKVxubGV0IGNhY2hlTWFuYWdlclJlZjogQ2FjaGVNYW5hZ2VyIHwgbnVsbCA9IG51bGw7XG5cbi8qKlxuICog7LqQ7IucIOunpOuLiOyggCDssLjsobAg7ISk7KCVICjrgrTrtoAg7IKs7JqpKVxuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0Q2FjaGVNYW5hZ2VyUmVmKG1hbmFnZXI6IENhY2hlTWFuYWdlciB8IG51bGwpOiB2b2lkIHtcbiAgY2FjaGVNYW5hZ2VyUmVmID0gbWFuYWdlcjtcbn1cblxuLyoqXG4gKiDsupDsi5wg66ek64uI7KCAIOywuOyhsCDqsIDsoLjsmKTquLAgKOuCtOu2gCDsgqzsmqkpXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRDYWNoZU1hbmFnZXJSZWYoKTogQ2FjaGVNYW5hZ2VyIHwgbnVsbCB7XG4gIHJldHVybiBjYWNoZU1hbmFnZXJSZWY7XG59XG5cbi8qKlxuICog7LqQ7IucIO2CpCDsg53shLFcbiAqL1xuZnVuY3Rpb24gZ2VuZXJhdGVDYWNoZUtleShcbiAgbW9kZWxOYW1lOiBzdHJpbmcsXG4gIG1ldGhvZE5hbWU6IHN0cmluZyxcbiAgYXJnczogdW5rbm93bltdLFxuICBrZXlPcHRpb24/OiBDYWNoZURlY29yYXRvck9wdGlvbnNbXCJrZXlcIl0sXG4pOiBzdHJpbmcge1xuICAvLyDsu6TsiqTthYAg7YKkIO2VqOyImCDsgqzsmqlcbiAgaWYgKGlzQ2FjaGVLZXlGYWN0b3J5KGtleU9wdGlvbikpIHtcbiAgICByZXR1cm4ga2V5T3B0aW9uKC4uLmFyZ3MpO1xuICB9XG5cbiAgLy8g66y47J6Q7Je0IO2CpCArIGFyZ3Mgc3VmZml4XG4gIGlmIChpc1N0cmluZ1ZhbHVlKGtleU9wdGlvbikpIHtcbiAgICBjb25zdCBhcmdzU3VmZml4ID0gc2VyaWFsaXplQXJncyhhcmdzKTtcbiAgICByZXR1cm4gYXJnc1N1ZmZpeCA/IGAke2tleU9wdGlvbn06JHthcmdzU3VmZml4fWAgOiBrZXlPcHRpb247XG4gIH1cblxuICAvLyDsnpDrj5kg7IOd7ISxOiBNb2RlbE5hbWUubWV0aG9kTmFtZTpzZXJpYWxpemVkQXJnc1xuICBjb25zdCBiYXNlS2V5ID0gYCR7bW9kZWxOYW1lfS4ke21ldGhvZE5hbWV9YDtcbiAgY29uc3QgYXJnc1N1ZmZpeCA9IHNlcmlhbGl6ZUFyZ3MoYXJncyk7XG4gIHJldHVybiBhcmdzU3VmZml4ID8gYCR7YmFzZUtleX06JHthcmdzU3VmZml4fWAgOiBiYXNlS2V5O1xufVxuXG4vKipcbiAqIOyduOyekCDsp4HroKztmZRcbiAqL1xuZnVuY3Rpb24gc2VyaWFsaXplQXJncyhhcmdzOiB1bmtub3duW10pOiBzdHJpbmcge1xuICBpZiAoYXJncy5sZW5ndGggPT09IDApIHJldHVybiBcIlwiO1xuXG4gIC8vIOuLqOydvCBwcmltaXRpdmUg6rCSXG4gIGlmIChhcmdzLmxlbmd0aCA9PT0gMSkge1xuICAgIGNvbnN0IGFyZyA9IGFyZ3NbMF07XG4gICAgaWYgKGFyZyA9PT0gbnVsbCB8fCBhcmcgPT09IHVuZGVmaW5lZCkgcmV0dXJuIFwiXCI7XG4gICAgaWYgKGlzU3RyaW5nVmFsdWUoYXJnKSB8fCBpc051bWJlclZhbHVlKGFyZykgfHwgaXNCb29sZWFuVmFsdWUoYXJnKSkge1xuICAgICAgcmV0dXJuIFN0cmluZyhhcmcpO1xuICAgIH1cbiAgfVxuXG4gIC8vIOuzteyeoe2VnCDqsJLsnYAgSlNPTiDsp4HroKztmZRcbiAgdHJ5IHtcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoYXJncyk7XG4gIH0gY2F0Y2gge1xuICAgIC8vIOyngeugrO2ZlCDsi6TtjKgg7IucIHRvU3RyaW5nIOyCrOyaqVxuICAgIHJldHVybiBhcmdzLm1hcCgoYXJnKSA9PiBTdHJpbmcoYXJnKSkuam9pbihcIjpcIik7XG4gIH1cbn1cblxuLyoqXG4gKiBAY2FjaGUg642w7L2U66CI7J207YSwXG4gKlxuICog66mU7ISc65Oc7J2YIOqysOqzvOulvCDsupDsi7Htlanri4jri6QuXG4gKlxuICogQGV4YW1wbGVcbiAqIGNsYXNzIFVzZXJNb2RlbENsYXNzIGV4dGVuZHMgQmFzZU1vZGVsQ2xhc3M8Li4uPiB7XG4gKiAgIEBjYWNoZSh7IHR0bDogJzEwbScsIHRhZ3M6IFsndXNlciddIH0pXG4gKiAgIEBhcGkoKVxuICogICBhc3luYyBmaW5kQnlJZChzdWJzZXQ6IFVzZXJTdWJzZXRLZXksIGlkOiBzdHJpbmcpIHtcbiAqICAgICBjb25zdCB7IHJvd3MgfSA9IGF3YWl0IHRoaXMuZmluZE1hbnkoc3Vic2V0LCB7IGlkLCBudW06IDEsIHBhZ2U6IDEgfSk7XG4gKiAgICAgcmV0dXJuIHJvd3NbMF07XG4gKiAgIH1cbiAqIH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNhY2hlKG9wdGlvbnM6IENhY2hlRGVjb3JhdG9yT3B0aW9ucyA9IHt9KSB7XG4gIHJldHVybiAoX3RhcmdldDogRGVjb3JhdG9yVGFyZ2V0LCBwcm9wZXJ0eUtleTogc3RyaW5nLCBkZXNjcmlwdG9yOiBQcm9wZXJ0eURlc2NyaXB0b3IpID0+IHtcbiAgICBjb25zdCBvcmlnaW5hbE1ldGhvZCA9IGRlc2NyaXB0b3IudmFsdWU7XG5cbiAgICBkZXNjcmlwdG9yLnZhbHVlID0gYXN5bmMgZnVuY3Rpb24gKHRoaXM6IEJhc2VNb2RlbENsYXNzIHwgQmFzZUZyYW1lQ2xhc3MsIC4uLmFyZ3M6IHVua25vd25bXSkge1xuICAgICAgY29uc3QgbWFuYWdlciA9IGNhY2hlTWFuYWdlclJlZjtcblxuICAgICAgaWYgKCFtYW5hZ2VyKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBcIkNhY2hlTWFuYWdlciBpcyBub3QgaW5pdGlhbGl6ZWQuIFBsZWFzZSBjb25maWd1cmUgJ2NhY2hlJyBpbiBzb25hbXUuY29uZmlnLnRzLlwiLFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBtb2RlbE5hbWUgPSB0aGlzIGluc3RhbmNlb2YgQmFzZU1vZGVsQ2xhc3MgPyB0aGlzLm1vZGVsTmFtZSA6IHRoaXMuZnJhbWVOYW1lO1xuICAgICAgY29uc3QgbWV0aG9kTmFtZSA9IHByb3BlcnR5S2V5O1xuXG4gICAgICBjb25zdCBjYWNoZUtleSA9IGdlbmVyYXRlQ2FjaGVLZXkobW9kZWxOYW1lLCBtZXRob2ROYW1lLCBhcmdzLCBvcHRpb25zLmtleSk7XG4gICAgICBjb25zdCBzdG9yZSA9IG9wdGlvbnMuc3RvcmUgPyBtYW5hZ2VyLnVzZShvcHRpb25zLnN0b3JlKSA6IG1hbmFnZXI7XG5cbiAgICAgIHJldHVybiBzdG9yZS5nZXRPclNldCh7XG4gICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgIGtleTogY2FjaGVLZXksXG4gICAgICAgIGZhY3Rvcnk6ICgpID0+IG9yaWdpbmFsTWV0aG9kLmFwcGx5KHRoaXMsIGFyZ3MpLFxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIHJldHVybiBkZXNjcmlwdG9yO1xuICB9O1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7OztBQVNBLFNBQVMsa0JBQWtCLFdBQXVFO0NBQ2hHLE9BQU8sZ0JBQWdCLFNBQVM7QUFDbEM7Ozs7QUFRQSxTQUFnQixtQkFBbUIsU0FBb0M7Q0FDckUsa0JBQWtCO0FBQ3BCOzs7O0FBS0EsU0FBZ0IscUJBQTBDO0NBQ3hELE9BQU87QUFDVDs7OztBQUtBLFNBQVMsaUJBQ1AsV0FDQSxZQUNBLE1BQ0EsV0FDUTtDQUVSLElBQUksa0JBQWtCLFNBQVMsR0FDN0IsT0FBTyxVQUFVLEdBQUcsSUFBSTtDQUkxQixJQUFJLGNBQWMsU0FBUyxHQUFHO0VBQzVCLE1BQU0sYUFBYSxjQUFjLElBQUk7RUFDckMsT0FBTyxhQUFhLEdBQUcsVUFBVSxHQUFHLGVBQWU7Q0FDckQ7Q0FHQSxNQUFNLFVBQVUsR0FBRyxVQUFVLEdBQUc7Q0FDaEMsTUFBTSxhQUFhLGNBQWMsSUFBSTtDQUNyQyxPQUFPLGFBQWEsR0FBRyxRQUFRLEdBQUcsZUFBZTtBQUNuRDs7OztBQUtBLFNBQVMsY0FBYyxNQUF5QjtDQUM5QyxJQUFJLEtBQUssV0FBVyxHQUFHLE9BQU87Q0FHOUIsSUFBSSxLQUFLLFdBQVcsR0FBRztFQUNyQixNQUFNLE1BQU0sS0FBSztFQUNqQixJQUFJLFFBQVEsUUFBUSxRQUFRLFFBQVcsT0FBTztFQUM5QyxJQUFJLGNBQWMsR0FBRyxLQUFLLGNBQWMsR0FBRyxLQUFLLGVBQWUsR0FBRyxHQUNoRSxPQUFPLE9BQU8sR0FBRztDQUVyQjtDQUdBLElBQUk7RUFDRixPQUFPLEtBQUssVUFBVSxJQUFJO0NBQzVCLFFBQVE7RUFFTixPQUFPLEtBQUssS0FBSyxRQUFRLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUc7Q0FDaEQ7QUFDRjs7Ozs7Ozs7Ozs7Ozs7OztBQWlCQSxTQUFnQixNQUFNLFVBQWlDLENBQUMsR0FBRztDQUN6RCxRQUFRLFNBQTBCLGFBQXFCLGVBQW1DO0VBQ3hGLE1BQU0saUJBQWlCLFdBQVc7RUFFbEMsV0FBVyxRQUFRLGVBQXVELEdBQUcsTUFBaUI7R0FDNUYsTUFBTSxVQUFVO0dBRWhCLElBQUksQ0FBQyxTQUNILE1BQU0sSUFBSSxNQUNSLGdGQUNGO0dBTUYsTUFBTSxXQUFXLGlCQUhDLGdCQUFnQixpQkFBaUIsS0FBSyxZQUFZLEtBQUssV0FHNUIsYUFBWSxNQUFNLFFBQVEsR0FBRztHQUcxRSxRQUZjLFFBQVEsUUFBUSxRQUFRLElBQUksUUFBUSxLQUFLLElBQUksUUFFcEQsQ0FBTSxTQUFTO0lBQ3BCLEdBQUc7SUFDSCxLQUFLO0lBQ0wsZUFBZSxlQUFlLE1BQU0sTUFBTSxJQUFJO0dBQ2hELENBQUM7RUFDSDtFQUVBLE9BQU87Q0FDVDtBQUNGOzs7aUJBMUh1RDttQkFDUDtvQkFDc0M7Q0FXbEYsa0JBQXVDIn0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compress.d.ts","sourceRoot":"","sources":["../../src/compress/compress.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,cAAc,EAAE,KAAK,eAAe,EAAE,MAAM,SAAS,CAAC;AAEpE;;;GAGG;AACH,eAAO,MAAM,eAAe;IAC1B,cAAc;;IAEd,mDAAmD;;;
|
|
1
|
+
{"version":3,"file":"compress.d.ts","sourceRoot":"","sources":["../../src/compress/compress.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,cAAc,EAAE,KAAK,eAAe,EAAE,MAAM,SAAS,CAAC;AAEpE;;;GAGG;AACH,eAAO,MAAM,eAAe;IAC1B,cAAc;;IAEd,mDAAmD;;;4BAO5C,CAAC,IAAI,GAAG,MAAM,GAAG,SAAS,CAAC,EAAE;;IAEpC,8BAA8B;;;4BAOvB,CAAC,IAAI,GAAG,MAAM,GAAG,SAAS,CAAC,EAAE;;IAEpC,sCAAsC;;;4BAM/B,CAAC,MAAM,GAAG,SAAS,CAAC,EAAE;;IAE7B,eAAe;;;4BAKR,CAAC,MAAM,CAAC;;CAEP,CAAC;AAEX;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,cAAc,GAAG,SAAS,GAAG,MAAM,IAAI,KAAK,CAEtF;AAED;;;;;;;;;GASG;AACH,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,cAAc,GAAG,SAAS,EAClC,cAAc,CAAC,EAAE,eAAe,GAC/B,KAAK,GAAG,eAAe,GAAG,SAAS,CASrC"}
|
|
@@ -60,4 +60,4 @@ var init_compress = __esmMin((() => {
|
|
|
60
60
|
init_compress();
|
|
61
61
|
export { CompressPresets, init_compress, isCompressDisabled, toFastifyCompressOption };
|
|
62
62
|
|
|
63
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcHJlc3MuanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbXByZXNzL2NvbXByZXNzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHR5cGUgQ29tcHJlc3NDb25maWcsIHR5cGUgQ29tcHJlc3NPcHRpb25zIH0gZnJvbSBcIi4vdHlwZXNcIjtcblxuLyoqXG4gKiDslZXstpUg7ZSE66as7IWL7J6F64uI64ukLlxuICog7J2867CY7KCB7J24IOyCrOyaqSDsgqzroYDsl5Ag66ee64qUIOuvuOumrCDsoJXsnZjrkJwg7ISk7KCV7J2EIOygnOqzte2VqeuLiOuLpC5cbiAqL1xuZXhwb3J0IGNvbnN0IENvbXByZXNzUHJlc2V0cyA9IHtcbiAgLyoqIOyVley2lSDruYTtmZzshLHtmZQgKi9cbiAgZGlzYWJsZWQ6IGZhbHNlIGFzIGNvbnN0LFxuICAvKiog6riw67O4IOyEpOyglSAodGhyZXNob2xkOiAxMDI0LCBiciA+
|
|
63
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcHJlc3MuanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbXByZXNzL2NvbXByZXNzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHR5cGUgQ29tcHJlc3NDb25maWcsIHR5cGUgQ29tcHJlc3NPcHRpb25zIH0gZnJvbSBcIi4vdHlwZXNcIjtcblxuLyoqXG4gKiDslZXstpUg7ZSE66as7IWL7J6F64uI64ukLlxuICog7J2867CY7KCB7J24IOyCrOyaqSDsgqzroYDsl5Ag66ee64qUIOuvuOumrCDsoJXsnZjrkJwg7ISk7KCV7J2EIOygnOqzte2VqeuLiOuLpC5cbiAqL1xuZXhwb3J0IGNvbnN0IENvbXByZXNzUHJlc2V0cyA9IHtcbiAgLyoqIOyVley2lSDruYTtmZzshLHtmZQgKi9cbiAgZGlzYWJsZWQ6IGZhbHNlIGFzIGNvbnN0LFxuICAvKiog6riw67O4IOyEpOyglSAodGhyZXNob2xkOiAxMDI0LCBiciA+IGd6aXAgPiBkZWZsYXRlKSAqL1xuICBkZWZhdWx0OiB7XG4gICAgdGhyZXNob2xkOiAxMDI0LFxuICAgIGVuY29kaW5nczogLyogU0FGRVRZOiDtmLjstpwg6rK96rOE7J2YIOyEoO2WiSDqsoDspp3qs7wg7IaM7JygIO2DgOyehSDqs4Tslb3snbQg7J20IOqwkuydmCDtg4DsnoXsnYQg67O07J6l7ZWc64ukLiAqLyBbXG4gICAgICBcImJyXCIsXG4gICAgICBcImd6aXBcIixcbiAgICAgIFwiZGVmbGF0ZVwiLFxuICAgIF0gYXMgKFwiYnJcIiB8IFwiZ3ppcFwiIHwgXCJkZWZsYXRlXCIpW10sXG4gIH0sXG4gIC8qKiDsoIHqt7nsoIEg7JWV7LaVICh0aHJlc2hvbGQ6IDI1NikgKi9cbiAgYWdncmVzc2l2ZToge1xuICAgIHRocmVzaG9sZDogMjU2LFxuICAgIGVuY29kaW5nczogLyogU0FGRVRZOiDtmLjstpwg6rK96rOE7J2YIOyEoO2WiSDqsoDspp3qs7wg7IaM7JygIO2DgOyehSDqs4Tslb3snbQg7J20IOqwkuydmCDtg4DsnoXsnYQg67O07J6l7ZWc64ukLiAqLyBbXG4gICAgICBcImJyXCIsXG4gICAgICBcImd6aXBcIixcbiAgICAgIFwiZGVmbGF0ZVwiLFxuICAgIF0gYXMgKFwiYnJcIiB8IFwiZ3ppcFwiIHwgXCJkZWZsYXRlXCIpW10sXG4gIH0sXG4gIC8qKiDrs7TsiJjsoIEg7JWV7LaVICh0aHJlc2hvbGQ6IDQwOTYsIGd6aXDrp4wpICovXG4gIGNvbnNlcnZhdGl2ZToge1xuICAgIHRocmVzaG9sZDogNDA5NixcbiAgICBlbmNvZGluZ3M6IC8qIFNBRkVUWTog7Zi47LacIOqyveqzhOydmCDshKDtlokg6rKA7Kad6rO8IOyGjOycoCDtg4DsnoUg6rOE7JW97J20IOydtCDqsJLsnZgg7YOA7J6F7J2EIOuztOyepe2VnOuLpC4gKi8gW1xuICAgICAgXCJnemlwXCIsXG4gICAgICBcImRlZmxhdGVcIixcbiAgICBdIGFzIChcImd6aXBcIiB8IFwiZGVmbGF0ZVwiKVtdLFxuICB9LFxuICAvKiogZ3ppcOunjCDsgqzsmqkgKi9cbiAgZ3ppcE9ubHk6IHtcbiAgICB0aHJlc2hvbGQ6IDEwMjQsXG4gICAgZW5jb2RpbmdzOiAvKiBTQUZFVFk6IO2YuOy2nCDqsr3qs4TsnZgg7ISg7ZaJIOqygOymneqzvCDshozsnKAg7YOA7J6FIOqzhOyVveydtCDsnbQg6rCS7J2YIO2DgOyeheydhCDrs7TsnqXtlZzri6QuICovIFtcbiAgICAgIFwiZ3ppcFwiLFxuICAgIF0gYXMgW1wiZ3ppcFwiXSxcbiAgfSxcbn0gYXMgY29uc3Q7XG5cbi8qKlxuICogQ29tcHJlc3NDb25maWfqsIAg67mE7Zmc7ISx7ZmUIOyDge2DnOyduOyngCDtmZXsnbjtlanri4jri6QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0NvbXByZXNzRGlzYWJsZWQoY29uZmlnOiBDb21wcmVzc0NvbmZpZyB8IHVuZGVmaW5lZCk6IGNvbmZpZyBpcyBmYWxzZSB7XG4gIHJldHVybiBjb25maWcgPT09IGZhbHNlO1xufVxuXG4vKipcbiAqIENvbXByZXNzQ29uZmln66W8IEZhc3RpZnkgcm91dGUgY29tcHJlc3Mg7Ji17IWY7Jy866GcIOuzgO2ZmO2VqeuLiOuLpC5cbiAqIC0gdW5kZWZpbmVkOiDsoITsl60g7ISk7KCVIOuUsOumhFxuICogLSB0cnVlOiDslZXstpUg7Zmc7ISx7ZmUIChnbG9iYWw6IGZhbHNl7J28IOuVjCDtlbTri7kg65287Jqw7Yq466eMIOyVley2lSkg4oaSIOyghOyXrSDshKTsoJUg7IKs7JqpXG4gKiAtIGZhbHNlOiDruYTtmZzshLHtmZRcbiAqIC0gQ29tcHJlc3NPcHRpb25zOiDshLjrtoAg7Ji17IWYXG4gKlxuICogQHBhcmFtIGNvbmZpZyDrnbzsmrDtirjrs4QgY29tcHJlc3Mg7ISk7KCVXG4gKiBAcGFyYW0gZGVmYXVsdE9wdGlvbnMg7KCE7JetIGNvbXByZXNzIOyEpOyglSAodHJ1ZeydvCDrlYwg7IKs7JqpKVxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9GYXN0aWZ5Q29tcHJlc3NPcHRpb24oXG4gIGNvbmZpZzogQ29tcHJlc3NDb25maWcgfCB1bmRlZmluZWQsXG4gIGRlZmF1bHRPcHRpb25zPzogQ29tcHJlc3NPcHRpb25zLFxuKTogZmFsc2UgfCBDb21wcmVzc09wdGlvbnMgfCB1bmRlZmluZWQge1xuICBpZiAoY29uZmlnID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGlmIChjb25maWcgPT09IHRydWUpIHtcbiAgICAvLyB0cnVl64qUIOyghOyXrSDshKTsoJXsnLzroZwg7JWV7LaVIO2ZnOyEse2ZlCAoZ2xvYmFsOiBmYWxzZeydvCDrlYwg7ZW064u5IOudvOyasO2KuOunjCDslZXstpUpXG4gICAgcmV0dXJuIGRlZmF1bHRPcHRpb25zID8/IHt9O1xuICB9XG4gIHJldHVybiBjb25maWc7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7O0FBK0NBLFNBQWdCLG1CQUFtQixRQUFxRDtDQUN0RixPQUFPLFdBQVc7QUFDcEI7Ozs7Ozs7Ozs7O0FBWUEsU0FBZ0Isd0JBQ2QsUUFDQSxnQkFDcUM7Q0FDckMsSUFBSSxXQUFXLFFBQ2I7Q0FFRixJQUFJLFdBQVcsTUFFYixPQUFPLGtCQUFrQixDQUFDO0NBRTVCLE9BQU87QUFDVDs7O0NBbkVhLGtCQUFrQjs7RUFFN0IsVUFBVTs7RUFFVixTQUFTO0dBQ1AsV0FBVztHQUNYLFdBQWdFO0lBQzlEO0lBQ0E7SUFDQTtHQUNGO0VBQ0Y7O0VBRUEsWUFBWTtHQUNWLFdBQVc7R0FDWCxXQUFnRTtJQUM5RDtJQUNBO0lBQ0E7R0FDRjtFQUNGOztFQUVBLGNBQWM7R0FDWixXQUFXO0dBQ1gsV0FBZ0UsQ0FDOUQsUUFDQSxTQUNGO0VBQ0Y7O0VBRUEsVUFBVTtHQUNSLFdBQVc7R0FDWCxXQUFnRSxDQUM5RCxNQUNGO0VBQ0Y7Q0FDRiJ9
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { type LanguageModel } from "ai";
|
|
1
2
|
import { type Cone, type EntityJson } from "../types/types";
|
|
2
3
|
/**
|
|
3
4
|
* Cone 생성 컨텍스트
|
|
@@ -23,11 +24,23 @@ export type ConeGenerationResult = {
|
|
|
23
24
|
enumCones: Record<string, Cone>;
|
|
24
25
|
tokensUsed: number;
|
|
25
26
|
};
|
|
27
|
+
export type ConeTextGenerator = (request: {
|
|
28
|
+
model: LanguageModel;
|
|
29
|
+
prompt: string;
|
|
30
|
+
}) => Promise<{
|
|
31
|
+
text: string;
|
|
32
|
+
usage?: {
|
|
33
|
+
totalTokens?: number;
|
|
34
|
+
};
|
|
35
|
+
}>;
|
|
36
|
+
export type ConeGeneratorDependencies = {
|
|
37
|
+
generateText?: ConeTextGenerator;
|
|
38
|
+
};
|
|
26
39
|
/**
|
|
27
40
|
* LLM을 사용하여 Entity의 cone 메타데이터를 생성합니다.
|
|
28
41
|
*
|
|
29
42
|
* @param context - Entity 정보와 생성 옵션
|
|
30
43
|
* @returns 생성된 cone 메타데이터
|
|
31
44
|
*/
|
|
32
|
-
export declare function generateCones(context: ConeGenerationContext): Promise<ConeGenerationResult>;
|
|
45
|
+
export declare function generateCones(context: ConeGenerationContext, dependencies?: ConeGeneratorDependencies): Promise<ConeGenerationResult>;
|
|
33
46
|
//# sourceMappingURL=cone-generator.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cone-generator.d.ts","sourceRoot":"","sources":["../../src/cone/cone-generator.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,IAAI,EAAE,KAAK,UAAU,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"cone-generator.d.ts","sourceRoot":"","sources":["../../src/cone/cone-generator.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,IAAI,CAAC;AAExC,OAAO,EAAE,KAAK,IAAI,EAAE,KAAK,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAG5D;;;;GAIG;AACH,MAAM,MAAM,qBAAqB,GAAG;IAClC,MAAM,EAAE,UAAU,CAAC;IACnB,MAAM,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;IAC5B,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACrC,iCAAiC;IACjC,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB,CAAC;AAEF;;;;GAIG;AACH,MAAM,MAAM,oBAAoB,GAAG;IACjC,UAAU,CAAC,EAAE,IAAI,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAChC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAClC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAChC,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG,CAAC,OAAO,EAAE;IACxC,KAAK,EAAE,aAAa,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;CAChB,KAAK,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE;QAAE,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,CAAC,CAAC;AAElE,MAAM,MAAM,yBAAyB,GAAG;IACtC,YAAY,CAAC,EAAE,iBAAiB,CAAC;CAClC,CAAC;AAEF;;;;;GAKG;AACH,wBAAsB,aAAa,CACjC,OAAO,EAAE,qBAAqB,EAC9B,YAAY,GAAE,yBAA8B,GAC3C,OAAO,CAAC,oBAAoB,CAAC,CAmB/B"}
|