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
|
@@ -2,7 +2,7 @@ import { __esmMin } from "../_virtual/_rolldown/runtime.js";
|
|
|
2
2
|
import { createSSEFactory, init_sse } from "../stream/sse.js";
|
|
3
3
|
import { Sonamu, init_sonamu } from "../api/sonamu.js";
|
|
4
4
|
import { DevVitestManager, init_dev_vitest_manager } from "./dev-vitest-manager.js";
|
|
5
|
-
import { z
|
|
5
|
+
import { z } from "zod";
|
|
6
6
|
import { randomUUID } from "crypto";
|
|
7
7
|
//#region src/testing/dev-test-routes.ts
|
|
8
8
|
function toPathPrefix(basePath) {
|
|
@@ -24,11 +24,6 @@ function relativizeNode(node, basePath) {
|
|
|
24
24
|
children: node.children.map((c) => relativizeNode(c, prefix))
|
|
25
25
|
};
|
|
26
26
|
}
|
|
27
|
-
function isRunNodeProgressData(data) {
|
|
28
|
-
if (typeof data !== "object" || data === null) return false;
|
|
29
|
-
const d = data;
|
|
30
|
-
return d.schemaVersion === 1 && typeof d.runId === "string" && typeof d.startedAt === "string" && typeof d.at === "string" && (d.kind === "file" || d.kind === "suite" || d.kind === "test") && (d.phase === "ready" || d.phase === "result") && typeof d.fileId === "string" && typeof d.nodeId === "string" && (d.parentId === null || typeof d.parentId === "string") && typeof d.node === "object" && d.node !== null;
|
|
31
|
-
}
|
|
32
27
|
function relativizeResult(result, basePath) {
|
|
33
28
|
const prefix = toPathPrefix(basePath);
|
|
34
29
|
return {
|
|
@@ -36,19 +31,24 @@ function relativizeResult(result, basePath) {
|
|
|
36
31
|
results: result.results.map((n) => relativizeNode(n, prefix))
|
|
37
32
|
};
|
|
38
33
|
}
|
|
39
|
-
async function registerDevTestRoutes(server, config) {
|
|
34
|
+
async function registerDevTestRoutes(server, config, dependencies) {
|
|
40
35
|
const prefix = config.routePrefix ?? "/__test__";
|
|
41
|
-
const
|
|
36
|
+
const defaultManager = dependencies?.manager === void 0 ? new DevVitestManager() : null;
|
|
37
|
+
const manager = dependencies?.manager ?? defaultManager;
|
|
38
|
+
if (manager === null) throw new Error("DevVitestManager dependency is unavailable");
|
|
42
39
|
await manager.start(config.vitestConfigPath);
|
|
43
|
-
Sonamu.devVitestManager =
|
|
44
|
-
const sseAvailable = !!Sonamu.config.server.plugins?.sse;
|
|
40
|
+
if (defaultManager !== null) Sonamu.devVitestManager = defaultManager;
|
|
41
|
+
const sseAvailable = dependencies?.sseAvailable ?? !!Sonamu.config.server.plugins?.sse;
|
|
45
42
|
if (sseAvailable) server.get(`${prefix}/events`, (request, reply) => {
|
|
46
43
|
const sse = createSSEFactory(request.socket, reply, TestEventSchema);
|
|
47
44
|
const status = manager.getStatus();
|
|
48
45
|
sse.publish("snapshot", {
|
|
49
46
|
schemaVersion: SCHEMA_VERSION,
|
|
50
47
|
serverTime: (/* @__PURE__ */ new Date()).toISOString(),
|
|
51
|
-
status
|
|
48
|
+
status: {
|
|
49
|
+
...status,
|
|
50
|
+
sseAvailable
|
|
51
|
+
}
|
|
52
52
|
});
|
|
53
53
|
const heartbeatTimer = setInterval(() => {
|
|
54
54
|
sse.publish("heartbeat", {
|
|
@@ -56,19 +56,26 @@ async function registerDevTestRoutes(server, config) {
|
|
|
56
56
|
at: (/* @__PURE__ */ new Date()).toISOString()
|
|
57
57
|
});
|
|
58
58
|
}, HEARTBEAT_INTERVAL_MS);
|
|
59
|
-
const basePath = Sonamu.apiRootPath;
|
|
59
|
+
const basePath = dependencies?.apiRootPath ?? Sonamu.apiRootPath;
|
|
60
60
|
const listener = (event, data) => {
|
|
61
|
-
const
|
|
61
|
+
const parsedKey = TestEventNameSchema.safeParse(event);
|
|
62
|
+
if (!parsedKey.success) return;
|
|
63
|
+
const key = parsedKey.data;
|
|
62
64
|
if (key === "runNodeProgress") {
|
|
63
|
-
|
|
65
|
+
const progressEnvelope = TestEventSchema.partial().safeParse({ runNodeProgress: data });
|
|
66
|
+
if (!progressEnvelope.success || progressEnvelope.data.runNodeProgress === void 0) return;
|
|
67
|
+
const progress = progressEnvelope.data.runNodeProgress;
|
|
64
68
|
const relativized = {
|
|
65
|
-
...
|
|
66
|
-
node: relativizeNode(
|
|
69
|
+
...progress,
|
|
70
|
+
node: relativizeNode(progress.node, basePath)
|
|
67
71
|
};
|
|
68
72
|
sse.publish(key, relativized);
|
|
69
73
|
return;
|
|
70
74
|
}
|
|
71
|
-
|
|
75
|
+
const parsedEnvelope = TestEventSchema.partial().safeParse({ [key]: data });
|
|
76
|
+
if (!parsedEnvelope.success || parsedEnvelope.data[key] === void 0) return;
|
|
77
|
+
const parsedData = parsedEnvelope.data[key];
|
|
78
|
+
sse.publish(key, parsedData);
|
|
72
79
|
};
|
|
73
80
|
manager.addEventListener(listener);
|
|
74
81
|
let cleaned = false;
|
|
@@ -82,19 +89,8 @@ async function registerDevTestRoutes(server, config) {
|
|
|
82
89
|
request.socket.on("error", cleanup);
|
|
83
90
|
});
|
|
84
91
|
server.post(`${prefix}/run`, async (request, reply) => {
|
|
85
|
-
if (!Sonamu.devVitestManager) {
|
|
86
|
-
reply.status(503);
|
|
87
|
-
return {
|
|
88
|
-
ok: false,
|
|
89
|
-
error: "DevVitestManager is not initialized"
|
|
90
|
-
};
|
|
91
|
-
}
|
|
92
92
|
const runId = randomUUID();
|
|
93
|
-
const
|
|
94
|
-
const runRequest = {
|
|
95
|
-
files: body?.files,
|
|
96
|
-
pattern: body?.pattern
|
|
97
|
-
};
|
|
93
|
+
const runRequest = RunRequestSchema.parse(request.body ?? {});
|
|
98
94
|
manager.emitEvent("runQueued", {
|
|
99
95
|
schemaVersion: SCHEMA_VERSION,
|
|
100
96
|
runId,
|
|
@@ -108,7 +104,7 @@ async function registerDevTestRoutes(server, config) {
|
|
|
108
104
|
runId,
|
|
109
105
|
startedAt
|
|
110
106
|
});
|
|
111
|
-
const result = relativizeResult(await
|
|
107
|
+
const result = relativizeResult(await manager.run(runRequest, runId), dependencies?.apiRootPath ?? Sonamu.apiRootPath);
|
|
112
108
|
const finishedAt = (/* @__PURE__ */ new Date()).toISOString();
|
|
113
109
|
manager.emitEvent("runCompleted", {
|
|
114
110
|
schemaVersion: SCHEMA_VERSION,
|
|
@@ -138,20 +134,16 @@ async function registerDevTestRoutes(server, config) {
|
|
|
138
134
|
});
|
|
139
135
|
server.get(`${prefix}/status`, async () => {
|
|
140
136
|
return {
|
|
141
|
-
...
|
|
142
|
-
ready: false,
|
|
143
|
-
running: false,
|
|
144
|
-
lastRunAt: null
|
|
145
|
-
},
|
|
137
|
+
...manager.getStatus(),
|
|
146
138
|
sseAvailable
|
|
147
139
|
};
|
|
148
140
|
});
|
|
149
141
|
server.addHook("onClose", async () => {
|
|
150
|
-
await
|
|
151
|
-
Sonamu.devVitestManager = null;
|
|
142
|
+
await manager.shutdown();
|
|
143
|
+
if (defaultManager !== null) Sonamu.devVitestManager = null;
|
|
152
144
|
});
|
|
153
145
|
}
|
|
154
|
-
var SCHEMA_VERSION, HEARTBEAT_INTERVAL_MS, SerializedTraceSchema, TestCaseResultSchema, TestEventSchema;
|
|
146
|
+
var SCHEMA_VERSION, HEARTBEAT_INTERVAL_MS, SerializedTraceSchema, TestCaseResultSchema, RunResultSchema, RunRequestSchema, TestEventSchema, TestEventNameSchema;
|
|
155
147
|
//#endregion
|
|
156
148
|
__esmMin((() => {
|
|
157
149
|
init_sonamu();
|
|
@@ -159,24 +151,24 @@ __esmMin((() => {
|
|
|
159
151
|
init_dev_vitest_manager();
|
|
160
152
|
SCHEMA_VERSION = 1;
|
|
161
153
|
HEARTBEAT_INTERVAL_MS = 3e4;
|
|
162
|
-
SerializedTraceSchema = z
|
|
163
|
-
key: z
|
|
164
|
-
value: z
|
|
165
|
-
filePath: z
|
|
166
|
-
lineNumber: z
|
|
167
|
-
at: z
|
|
154
|
+
SerializedTraceSchema = z.object({
|
|
155
|
+
key: z.string(),
|
|
156
|
+
value: z.unknown(),
|
|
157
|
+
filePath: z.string(),
|
|
158
|
+
lineNumber: z.number(),
|
|
159
|
+
at: z.string()
|
|
168
160
|
});
|
|
169
|
-
TestCaseResultSchema = z
|
|
170
|
-
id: z
|
|
171
|
-
kind: z
|
|
161
|
+
TestCaseResultSchema = z.lazy(() => z.object({
|
|
162
|
+
id: z.string(),
|
|
163
|
+
kind: z.enum([
|
|
172
164
|
"file",
|
|
173
165
|
"suite",
|
|
174
166
|
"test"
|
|
175
167
|
]),
|
|
176
|
-
name: z
|
|
177
|
-
fullName: z
|
|
178
|
-
file: z
|
|
179
|
-
state: z
|
|
168
|
+
name: z.string(),
|
|
169
|
+
fullName: z.string(),
|
|
170
|
+
file: z.string(),
|
|
171
|
+
state: z.enum([
|
|
180
172
|
"passed",
|
|
181
173
|
"failed",
|
|
182
174
|
"skipped",
|
|
@@ -184,82 +176,107 @@ __esmMin((() => {
|
|
|
184
176
|
"running",
|
|
185
177
|
"unknown"
|
|
186
178
|
]),
|
|
187
|
-
durationMs: z
|
|
188
|
-
counts: z
|
|
189
|
-
total: z
|
|
190
|
-
passed: z
|
|
191
|
-
failed: z
|
|
192
|
-
skipped: z
|
|
179
|
+
durationMs: z.number().nullable(),
|
|
180
|
+
counts: z.object({
|
|
181
|
+
total: z.number(),
|
|
182
|
+
passed: z.number(),
|
|
183
|
+
failed: z.number(),
|
|
184
|
+
skipped: z.number()
|
|
193
185
|
}),
|
|
194
|
-
error: z
|
|
195
|
-
message: z
|
|
196
|
-
stack: z
|
|
186
|
+
error: z.object({
|
|
187
|
+
message: z.string(),
|
|
188
|
+
stack: z.string().optional()
|
|
197
189
|
}).nullable(),
|
|
198
|
-
traces: z
|
|
199
|
-
children: z
|
|
190
|
+
traces: z.array(SerializedTraceSchema),
|
|
191
|
+
children: z.array(TestCaseResultSchema)
|
|
200
192
|
}));
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
193
|
+
RunResultSchema = z.object({
|
|
194
|
+
ok: z.boolean(),
|
|
195
|
+
summary: z.object({
|
|
196
|
+
total: z.number(),
|
|
197
|
+
passed: z.number(),
|
|
198
|
+
failed: z.number(),
|
|
199
|
+
skipped: z.number(),
|
|
200
|
+
durationMs: z.number()
|
|
201
|
+
}),
|
|
202
|
+
results: z.array(TestCaseResultSchema)
|
|
203
|
+
});
|
|
204
|
+
RunRequestSchema = z.object({
|
|
205
|
+
files: z.array(z.string()).optional(),
|
|
206
|
+
pattern: z.string().optional()
|
|
207
|
+
});
|
|
208
|
+
TestEventSchema = z.object({
|
|
209
|
+
snapshot: z.object({
|
|
210
|
+
schemaVersion: z.number(),
|
|
211
|
+
serverTime: z.string(),
|
|
212
|
+
status: z.object({
|
|
213
|
+
ready: z.boolean(),
|
|
214
|
+
running: z.boolean(),
|
|
215
|
+
lastRunAt: z.string().nullable(),
|
|
216
|
+
sseAvailable: z.boolean()
|
|
209
217
|
})
|
|
210
218
|
}),
|
|
211
|
-
runQueued: z
|
|
212
|
-
schemaVersion: z
|
|
213
|
-
runId: z
|
|
214
|
-
queuedAt: z
|
|
215
|
-
request: z
|
|
216
|
-
files: z
|
|
217
|
-
pattern: z
|
|
219
|
+
runQueued: z.object({
|
|
220
|
+
schemaVersion: z.number(),
|
|
221
|
+
runId: z.string(),
|
|
222
|
+
queuedAt: z.string(),
|
|
223
|
+
request: z.object({
|
|
224
|
+
files: z.array(z.string()).optional(),
|
|
225
|
+
pattern: z.string().optional()
|
|
218
226
|
})
|
|
219
227
|
}),
|
|
220
|
-
runStarted: z
|
|
221
|
-
schemaVersion: z
|
|
222
|
-
runId: z
|
|
223
|
-
startedAt: z
|
|
228
|
+
runStarted: z.object({
|
|
229
|
+
schemaVersion: z.number(),
|
|
230
|
+
runId: z.string(),
|
|
231
|
+
startedAt: z.string()
|
|
224
232
|
}),
|
|
225
|
-
runCompleted: z
|
|
226
|
-
schemaVersion: z
|
|
227
|
-
runId: z
|
|
228
|
-
startedAt: z
|
|
229
|
-
finishedAt: z
|
|
230
|
-
result:
|
|
233
|
+
runCompleted: z.object({
|
|
234
|
+
schemaVersion: z.number(),
|
|
235
|
+
runId: z.string(),
|
|
236
|
+
startedAt: z.string(),
|
|
237
|
+
finishedAt: z.string(),
|
|
238
|
+
result: RunResultSchema
|
|
231
239
|
}),
|
|
232
|
-
runErrored: z
|
|
233
|
-
schemaVersion: z
|
|
234
|
-
runId: z
|
|
235
|
-
finishedAt: z
|
|
236
|
-
error: z
|
|
237
|
-
message: z
|
|
238
|
-
stack: z
|
|
240
|
+
runErrored: z.object({
|
|
241
|
+
schemaVersion: z.number(),
|
|
242
|
+
runId: z.string(),
|
|
243
|
+
finishedAt: z.string(),
|
|
244
|
+
error: z.object({
|
|
245
|
+
message: z.string(),
|
|
246
|
+
stack: z.string().optional()
|
|
239
247
|
})
|
|
240
248
|
}),
|
|
241
|
-
runNodeProgress: z
|
|
242
|
-
schemaVersion: z
|
|
243
|
-
runId: z
|
|
244
|
-
startedAt: z
|
|
245
|
-
at: z
|
|
246
|
-
kind: z
|
|
249
|
+
runNodeProgress: z.object({
|
|
250
|
+
schemaVersion: z.literal(1),
|
|
251
|
+
runId: z.string(),
|
|
252
|
+
startedAt: z.string(),
|
|
253
|
+
at: z.string(),
|
|
254
|
+
kind: z.enum([
|
|
247
255
|
"file",
|
|
248
256
|
"suite",
|
|
249
257
|
"test"
|
|
250
258
|
]),
|
|
251
|
-
phase: z
|
|
252
|
-
fileId: z
|
|
253
|
-
nodeId: z
|
|
254
|
-
parentId: z
|
|
259
|
+
phase: z.enum(["ready", "result"]),
|
|
260
|
+
fileId: z.string(),
|
|
261
|
+
nodeId: z.string(),
|
|
262
|
+
parentId: z.string().nullable(),
|
|
255
263
|
node: TestCaseResultSchema
|
|
256
264
|
}),
|
|
257
|
-
heartbeat: z
|
|
258
|
-
schemaVersion: z
|
|
259
|
-
at: z
|
|
265
|
+
heartbeat: z.object({
|
|
266
|
+
schemaVersion: z.number(),
|
|
267
|
+
at: z.string()
|
|
260
268
|
})
|
|
261
269
|
});
|
|
270
|
+
TestEventNameSchema = z.enum([
|
|
271
|
+
"snapshot",
|
|
272
|
+
"runQueued",
|
|
273
|
+
"runStarted",
|
|
274
|
+
"runCompleted",
|
|
275
|
+
"runErrored",
|
|
276
|
+
"runNodeProgress",
|
|
277
|
+
"heartbeat"
|
|
278
|
+
]);
|
|
262
279
|
}))();
|
|
263
280
|
export { registerDevTestRoutes };
|
|
264
281
|
|
|
265
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGV2LXRlc3Qtcm91dGVzLmpzIiwibmFtZXMiOlsieiJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90ZXN0aW5nL2Rldi10ZXN0LXJvdXRlcy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyByYW5kb21VVUlEIH0gZnJvbSBcImNyeXB0b1wiO1xuXG5pbXBvcnQgeyB0eXBlIEZhc3RpZnlJbnN0YW5jZSB9IGZyb20gXCJmYXN0aWZ5XCI7XG5pbXBvcnQgeyB6IH0gZnJvbSBcInpvZFwiO1xuXG5pbXBvcnQgeyB0eXBlIFNvbmFtdURldlJ1bm5lckNvbmZpZyB9IGZyb20gXCIuLi9hcGkvY29uZmlnXCI7XG5pbXBvcnQgeyBTb25hbXUgfSBmcm9tIFwiLi4vYXBpL3NvbmFtdVwiO1xuaW1wb3J0IHsgdHlwZSBTZXJpYWxpemVkVHJhY2UgfSBmcm9tIFwiLi4vbmFpdGUvbmFpdGVcIjtcbmltcG9ydCB7IGNyZWF0ZVNTRUZhY3RvcnkgfSBmcm9tIFwiLi4vc3RyZWFtL3NzZVwiO1xuaW1wb3J0IHsgdHlwZSBTU0VDb25uZWN0aW9uIH0gZnJvbSBcIi4uL3N0cmVhbS9zc2VcIjtcbmltcG9ydCB7IHR5cGUgTWFuYWdlclN0YXR1cywgdHlwZSBSdW5SZXN1bHQsIHR5cGUgVGVzdENhc2VSZXN1bHQgfSBmcm9tIFwiLi9kZXYtdml0ZXN0LW1hbmFnZXJcIjtcbmltcG9ydCB7IERldlZpdGVzdE1hbmFnZXIgfSBmcm9tIFwiLi9kZXYtdml0ZXN0LW1hbmFnZXJcIjtcblxuY29uc3QgU0NIRU1BX1ZFUlNJT04gPSAxO1xuY29uc3QgSEVBUlRCRUFUX0lOVEVSVkFMX01TID0gMzBfMDAwO1xuXG5jb25zdCBTZXJpYWxpemVkVHJhY2VTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIGtleTogei5zdHJpbmcoKSxcbiAgdmFsdWU6IHoudW5rbm93bigpLFxuICBmaWxlUGF0aDogei5zdHJpbmcoKSxcbiAgbGluZU51bWJlcjogei5udW1iZXIoKSxcbiAgYXQ6IHouc3RyaW5nKCksXG59KTtcblxuY29uc3QgVGVzdENhc2VSZXN1bHRTY2hlbWE6IHouWm9kVHlwZTxUZXN0Q2FzZVJlc3VsdD4gPSB6LmxhenkoKCkgPT5cbiAgei5vYmplY3Qoe1xuICAgIGlkOiB6LnN0cmluZygpLFxuICAgIGtpbmQ6IHouZW51bShbXCJmaWxlXCIsIFwic3VpdGVcIiwgXCJ0ZXN0XCJdKSxcbiAgICBuYW1lOiB6LnN0cmluZygpLFxuICAgIGZ1bGxOYW1lOiB6LnN0cmluZygpLFxuICAgIGZpbGU6IHouc3RyaW5nKCksXG4gICAgc3RhdGU6IHouZW51bShbXCJwYXNzZWRcIiwgXCJmYWlsZWRcIiwgXCJza2lwcGVkXCIsIFwidG9kb1wiLCBcInJ1bm5pbmdcIiwgXCJ1bmtub3duXCJdKSxcbiAgICBkdXJhdGlvbk1zOiB6Lm51bWJlcigpLm51bGxhYmxlKCksXG4gICAgY291bnRzOiB6Lm9iamVjdCh7XG4gICAgICB0b3RhbDogei5udW1iZXIoKSxcbiAgICAgIHBhc3NlZDogei5udW1iZXIoKSxcbiAgICAgIGZhaWxlZDogei5udW1iZXIoKSxcbiAgICAgIHNraXBwZWQ6IHoubnVtYmVyKCksXG4gICAgfSksXG4gICAgZXJyb3I6IHpcbiAgICAgIC5vYmplY3Qoe1xuICAgICAgICBtZXNzYWdlOiB6LnN0cmluZygpLFxuICAgICAgICBzdGFjazogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgICAgfSlcbiAgICAgIC5udWxsYWJsZSgpLFxuICAgIHRyYWNlczogei5hcnJheShTZXJpYWxpemVkVHJhY2VTY2hlbWEpLFxuICAgIGNoaWxkcmVuOiB6LmFycmF5KFRlc3RDYXNlUmVzdWx0U2NoZW1hKSxcbiAgfSksXG4pO1xuXG5jb25zdCBUZXN0RXZlbnRTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIHNuYXBzaG90OiB6Lm9iamVjdCh7XG4gICAgc2NoZW1hVmVyc2lvbjogei5udW1iZXIoKSxcbiAgICBzZXJ2ZXJUaW1lOiB6LnN0cmluZygpLFxuICAgIHN0YXR1czogei5vYmplY3Qoe1xuICAgICAgcmVhZHk6IHouYm9vbGVhbigpLFxuICAgICAgcnVubmluZzogei5ib29sZWFuKCksXG4gICAgICBsYXN0UnVuQXQ6IHouc3RyaW5nKCkubnVsbGFibGUoKSxcbiAgICB9KSxcbiAgfSksXG4gIHJ1blF1ZXVlZDogei5vYmplY3Qoe1xuICAgIHNjaGVtYVZlcnNpb246IHoubnVtYmVyKCksXG4gICAgcnVuSWQ6IHouc3RyaW5nKCksXG4gICAgcXVldWVkQXQ6IHouc3RyaW5nKCksXG4gICAgcmVxdWVzdDogei5vYmplY3Qoe1xuICAgICAgZmlsZXM6IHouYXJyYXkoei5zdHJpbmcoKSkub3B0aW9uYWwoKSxcbiAgICAgIHBhdHRlcm46IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICB9KSxcbiAgfSksXG4gIHJ1blN0YXJ0ZWQ6IHoub2JqZWN0KHtcbiAgICBzY2hlbWFWZXJzaW9uOiB6Lm51bWJlcigpLFxuICAgIHJ1bklkOiB6LnN0cmluZygpLFxuICAgIHN0YXJ0ZWRBdDogei5zdHJpbmcoKSxcbiAgfSksXG4gIHJ1bkNvbXBsZXRlZDogei5vYmplY3Qoe1xuICAgIHNjaGVtYVZlcnNpb246IHoubnVtYmVyKCksXG4gICAgcnVuSWQ6IHouc3RyaW5nKCksXG4gICAgc3RhcnRlZEF0OiB6LnN0cmluZygpLFxuICAgIGZpbmlzaGVkQXQ6IHouc3RyaW5nKCksXG4gICAgcmVzdWx0OiB6LnJlY29yZCh6LnN0cmluZygpLCB6LnVua25vd24oKSksXG4gIH0pLFxuICBydW5FcnJvcmVkOiB6Lm9iamVjdCh7XG4gICAgc2NoZW1hVmVyc2lvbjogei5udW1iZXIoKSxcbiAgICBydW5JZDogei5zdHJpbmcoKSxcbiAgICBmaW5pc2hlZEF0OiB6LnN0cmluZygpLFxuICAgIGVycm9yOiB6Lm9iamVjdCh7XG4gICAgICBtZXNzYWdlOiB6LnN0cmluZygpLFxuICAgICAgc3RhY2s6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICB9KSxcbiAgfSksXG4gIHJ1bk5vZGVQcm9ncmVzczogei5vYmplY3Qoe1xuICAgIHNjaGVtYVZlcnNpb246IHoubGl0ZXJhbCgxKSxcbiAgICBydW5JZDogei5zdHJpbmcoKSxcbiAgICBzdGFydGVkQXQ6IHouc3RyaW5nKCksXG4gICAgYXQ6IHouc3RyaW5nKCksXG4gICAga2luZDogei5lbnVtKFtcImZpbGVcIiwgXCJzdWl0ZVwiLCBcInRlc3RcIl0pLFxuICAgIHBoYXNlOiB6LmVudW0oW1wicmVhZHlcIiwgXCJyZXN1bHRcIl0pLFxuICAgIGZpbGVJZDogei5zdHJpbmcoKSxcbiAgICBub2RlSWQ6IHouc3RyaW5nKCksXG4gICAgcGFyZW50SWQ6IHouc3RyaW5nKCkubnVsbGFibGUoKSxcbiAgICBub2RlOiBUZXN0Q2FzZVJlc3VsdFNjaGVtYSxcbiAgfSksXG4gIGhlYXJ0YmVhdDogei5vYmplY3Qoe1xuICAgIHNjaGVtYVZlcnNpb246IHoubnVtYmVyKCksXG4gICAgYXQ6IHouc3RyaW5nKCksXG4gIH0pLFxufSk7XG5cbnR5cGUgVGVzdEV2ZW50cyA9IHouaW5mZXI8dHlwZW9mIFRlc3RFdmVudFNjaGVtYT47XG5cbmZ1bmN0aW9uIHRvUGF0aFByZWZpeChiYXNlUGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGJhc2VQYXRoLmVuZHNXaXRoKFwiL1wiKSA/IGJhc2VQYXRoIDogYCR7YmFzZVBhdGh9L2A7XG59XG5cbmZ1bmN0aW9uIHJlbGF0aXZpemVUcmFjZSh0cmFjZTogU2VyaWFsaXplZFRyYWNlLCBwcmVmaXg6IHN0cmluZyk6IFNlcmlhbGl6ZWRUcmFjZSB7XG4gIHJldHVybiB7IC4uLnRyYWNlLCBmaWxlUGF0aDogdHJhY2UuZmlsZVBhdGgucmVwbGFjZShwcmVmaXgsIFwiXCIpIH07XG59XG5cbmZ1bmN0aW9uIHJlbGF0aXZpemVOb2RlKG5vZGU6IFRlc3RDYXNlUmVzdWx0LCBiYXNlUGF0aDogc3RyaW5nKTogVGVzdENhc2VSZXN1bHQge1xuICBjb25zdCBwcmVmaXggPSB0b1BhdGhQcmVmaXgoYmFzZVBhdGgpO1xuICByZXR1cm4ge1xuICAgIC4uLm5vZGUsXG4gICAgbmFtZTogbm9kZS5uYW1lLnJlcGxhY2UocHJlZml4LCBcIlwiKSxcbiAgICBmaWxlOiBub2RlLmZpbGUucmVwbGFjZShwcmVmaXgsIFwiXCIpLFxuICAgIHRyYWNlczogbm9kZS50cmFjZXMubWFwKCh0KSA9PiByZWxhdGl2aXplVHJhY2UodCwgcHJlZml4KSksXG4gICAgY2hpbGRyZW46IG5vZGUuY2hpbGRyZW4ubWFwKChjKSA9PiByZWxhdGl2aXplTm9kZShjLCBwcmVmaXgpKSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gaXNSdW5Ob2RlUHJvZ3Jlc3NEYXRhKGRhdGE6IHVua25vd24pOiBkYXRhIGlzIFRlc3RFdmVudHNbXCJydW5Ob2RlUHJvZ3Jlc3NcIl0ge1xuICBpZiAodHlwZW9mIGRhdGEgIT09IFwib2JqZWN0XCIgfHwgZGF0YSA9PT0gbnVsbCkgcmV0dXJuIGZhbHNlO1xuICBjb25zdCBkID0gZGF0YSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgcmV0dXJuIChcbiAgICBkLnNjaGVtYVZlcnNpb24gPT09IDEgJiZcbiAgICB0eXBlb2YgZC5ydW5JZCA9PT0gXCJzdHJpbmdcIiAmJlxuICAgIHR5cGVvZiBkLnN0YXJ0ZWRBdCA9PT0gXCJzdHJpbmdcIiAmJlxuICAgIHR5cGVvZiBkLmF0ID09PSBcInN0cmluZ1wiICYmXG4gICAgKGQua2luZCA9PT0gXCJmaWxlXCIgfHwgZC5raW5kID09PSBcInN1aXRlXCIgfHwgZC5raW5kID09PSBcInRlc3RcIikgJiZcbiAgICAoZC5waGFzZSA9PT0gXCJyZWFkeVwiIHx8IGQucGhhc2UgPT09IFwicmVzdWx0XCIpICYmXG4gICAgdHlwZW9mIGQuZmlsZUlkID09PSBcInN0cmluZ1wiICYmXG4gICAgdHlwZW9mIGQubm9kZUlkID09PSBcInN0cmluZ1wiICYmXG4gICAgKGQucGFyZW50SWQgPT09IG51bGwgfHwgdHlwZW9mIGQucGFyZW50SWQgPT09IFwic3RyaW5nXCIpICYmXG4gICAgdHlwZW9mIGQubm9kZSA9PT0gXCJvYmplY3RcIiAmJlxuICAgIGQubm9kZSAhPT0gbnVsbFxuICApO1xufVxuXG5mdW5jdGlvbiByZWxhdGl2aXplUmVzdWx0KHJlc3VsdDogUnVuUmVzdWx0LCBiYXNlUGF0aDogc3RyaW5nKTogUnVuUmVzdWx0IHtcbiAgY29uc3QgcHJlZml4ID0gdG9QYXRoUHJlZml4KGJhc2VQYXRoKTtcbiAgcmV0dXJuIHtcbiAgICAuLi5yZXN1bHQsXG4gICAgcmVzdWx0czogcmVzdWx0LnJlc3VsdHMubWFwKChuKSA9PiByZWxhdGl2aXplTm9kZShuLCBwcmVmaXgpKSxcbiAgfTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlZ2lzdGVyRGV2VGVzdFJvdXRlcyhcbiAgc2VydmVyOiBGYXN0aWZ5SW5zdGFuY2UsXG4gIGNvbmZpZzogU29uYW11RGV2UnVubmVyQ29uZmlnLFxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHByZWZpeCA9IGNvbmZpZy5yb3V0ZVByZWZpeCA/PyBcIi9fX3Rlc3RfX1wiO1xuXG4gIGNvbnN0IG1hbmFnZXIgPSBuZXcgRGV2Vml0ZXN0TWFuYWdlcigpO1xuICBhd2FpdCBtYW5hZ2VyLnN0YXJ0KGNvbmZpZy52aXRlc3RDb25maWdQYXRoKTtcbiAgU29uYW11LmRldlZpdGVzdE1hbmFnZXIgPSBtYW5hZ2VyO1xuXG4gIGNvbnN0IHNzZUF2YWlsYWJsZSA9ICEhU29uYW11LmNvbmZpZy5zZXJ2ZXIucGx1Z2lucz8uc3NlO1xuXG4gIGlmIChzc2VBdmFpbGFibGUpIHtcbiAgICBzZXJ2ZXIuZ2V0KGAke3ByZWZpeH0vZXZlbnRzYCwgKHJlcXVlc3QsIHJlcGx5KTogdm9pZCA9PiB7XG4gICAgICBjb25zdCBzc2U6IFNTRUNvbm5lY3Rpb248dHlwZW9mIFRlc3RFdmVudFNjaGVtYT4gPSBjcmVhdGVTU0VGYWN0b3J5KFxuICAgICAgICByZXF1ZXN0LnNvY2tldCxcbiAgICAgICAgcmVwbHksXG4gICAgICAgIFRlc3RFdmVudFNjaGVtYSxcbiAgICAgICk7XG5cbiAgICAgIGNvbnN0IHN0YXR1czogTWFuYWdlclN0YXR1cyA9IG1hbmFnZXIuZ2V0U3RhdHVzKCk7XG4gICAgICBzc2UucHVibGlzaChcInNuYXBzaG90XCIsIHtcbiAgICAgICAgc2NoZW1hVmVyc2lvbjogU0NIRU1BX1ZFUlNJT04sXG4gICAgICAgIHNlcnZlclRpbWU6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgICAgc3RhdHVzLFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IGhlYXJ0YmVhdFRpbWVyID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgICBzc2UucHVibGlzaChcImhlYXJ0YmVhdFwiLCB7XG4gICAgICAgICAgc2NoZW1hVmVyc2lvbjogU0NIRU1BX1ZFUlNJT04sXG4gICAgICAgICAgYXQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgICAgfSk7XG4gICAgICB9LCBIRUFSVEJFQVRfSU5URVJWQUxfTVMpO1xuXG4gICAgICBjb25zdCBiYXNlUGF0aCA9IFNvbmFtdS5hcGlSb290UGF0aDtcbiAgICAgIGNvbnN0IGxpc3RlbmVyID0gKGV2ZW50OiBzdHJpbmcsIGRhdGE6IHVua25vd24pID0+IHtcbiAgICAgICAgY29uc3Qga2V5ID0gZXZlbnQgYXMga2V5b2YgVGVzdEV2ZW50cztcbiAgICAgICAgaWYgKGtleSA9PT0gXCJydW5Ob2RlUHJvZ3Jlc3NcIikge1xuICAgICAgICAgIGlmICghaXNSdW5Ob2RlUHJvZ3Jlc3NEYXRhKGRhdGEpKSByZXR1cm47XG4gICAgICAgICAgY29uc3QgcmVsYXRpdml6ZWQgPSB7XG4gICAgICAgICAgICAuLi5kYXRhLFxuICAgICAgICAgICAgbm9kZTogcmVsYXRpdml6ZU5vZGUoZGF0YS5ub2RlLCBiYXNlUGF0aCksXG4gICAgICAgICAgfTtcbiAgICAgICAgICBzc2UucHVibGlzaChrZXksIHJlbGF0aXZpemVkKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgc3NlLnB1Ymxpc2goa2V5LCBkYXRhIGFzIFRlc3RFdmVudHNbdHlwZW9mIGtleV0pO1xuICAgICAgfTtcbiAgICAgIG1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihsaXN0ZW5lcik7XG5cbiAgICAgIGxldCBjbGVhbmVkID0gZmFsc2U7XG4gICAgICBjb25zdCBjbGVhbnVwID0gKCkgPT4ge1xuICAgICAgICBpZiAoY2xlYW5lZCkgcmV0dXJuO1xuICAgICAgICBjbGVhbmVkID0gdHJ1ZTtcbiAgICAgICAgY2xlYXJJbnRlcnZhbChoZWFydGJlYXRUaW1lcik7XG4gICAgICAgIG1hbmFnZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcihsaXN0ZW5lcik7XG4gICAgICB9O1xuICAgICAgcmVxdWVzdC5zb2NrZXQub24oXCJjbG9zZVwiLCBjbGVhbnVwKTtcbiAgICAgIHJlcXVlc3Quc29ja2V0Lm9uKFwiZXJyb3JcIiwgY2xlYW51cCk7XG4gICAgfSk7XG4gIH1cblxuICBzZXJ2ZXIucG9zdChgJHtwcmVmaXh9L3J1bmAsIGFzeW5jIChyZXF1ZXN0LCByZXBseSkgPT4ge1xuICAgIGlmICghU29uYW11LmRldlZpdGVzdE1hbmFnZXIpIHtcbiAgICAgIHJlcGx5LnN0YXR1cyg1MDMpO1xuICAgICAgcmV0dXJuIHsgb2s6IGZhbHNlLCBlcnJvcjogXCJEZXZWaXRlc3RNYW5hZ2VyIGlzIG5vdCBpbml0aWFsaXplZFwiIH07XG4gICAgfVxuXG4gICAgY29uc3QgcnVuSWQgPSByYW5kb21VVUlEKCk7XG4gICAgY29uc3QgYm9keSA9IHJlcXVlc3QuYm9keSBhcyB7IGZpbGVzPzogc3RyaW5nW107IHBhdHRlcm4/OiBzdHJpbmcgfSB8IG51bGw7XG4gICAgY29uc3QgcnVuUmVxdWVzdCA9IHtcbiAgICAgIGZpbGVzOiBib2R5Py5maWxlcyxcbiAgICAgIHBhdHRlcm46IGJvZHk/LnBhdHRlcm4sXG4gICAgfTtcblxuICAgIG1hbmFnZXIuZW1pdEV2ZW50KFwicnVuUXVldWVkXCIsIHtcbiAgICAgIHNjaGVtYVZlcnNpb246IFNDSEVNQV9WRVJTSU9OLFxuICAgICAgcnVuSWQsXG4gICAgICBxdWV1ZWRBdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgcmVxdWVzdDogcnVuUmVxdWVzdCxcbiAgICB9KTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBzdGFydGVkQXQgPSBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCk7XG4gICAgICBtYW5hZ2VyLmVtaXRFdmVudChcInJ1blN0YXJ0ZWRcIiwge1xuICAgICAgICBzY2hlbWFWZXJzaW9uOiBTQ0hFTUFfVkVSU0lPTixcbiAgICAgICAgcnVuSWQsXG4gICAgICAgIHN0YXJ0ZWRBdCxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCByYXdSZXN1bHQ6IFJ1blJlc3VsdCA9IGF3YWl0IFNvbmFtdS5kZXZWaXRlc3RNYW5hZ2VyLnJ1bihydW5SZXF1ZXN0LCBydW5JZCk7XG4gICAgICBjb25zdCByZXN1bHQgPSByZWxhdGl2aXplUmVzdWx0KHJhd1Jlc3VsdCwgU29uYW11LmFwaVJvb3RQYXRoKTtcblxuICAgICAgY29uc3QgZmluaXNoZWRBdCA9IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKTtcbiAgICAgIG1hbmFnZXIuZW1pdEV2ZW50KFwicnVuQ29tcGxldGVkXCIsIHtcbiAgICAgICAgc2NoZW1hVmVyc2lvbjogU0NIRU1BX1ZFUlNJT04sXG4gICAgICAgIHJ1bklkLFxuICAgICAgICBzdGFydGVkQXQsXG4gICAgICAgIGZpbmlzaGVkQXQsXG4gICAgICAgIHJlc3VsdCxcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY29uc3QgZmluaXNoZWRBdCA9IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKTtcbiAgICAgIG1hbmFnZXIuZW1pdEV2ZW50KFwicnVuRXJyb3JlZFwiLCB7XG4gICAgICAgIHNjaGVtYVZlcnNpb246IFNDSEVNQV9WRVJTSU9OLFxuICAgICAgICBydW5JZCxcbiAgICAgICAgZmluaXNoZWRBdCxcbiAgICAgICAgZXJyb3I6IHtcbiAgICAgICAgICBtZXNzYWdlOiBlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogU3RyaW5nKGVyciksXG4gICAgICAgICAgc3RhY2s6IGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLnN0YWNrIDogdW5kZWZpbmVkLFxuICAgICAgICB9LFxuICAgICAgfSk7XG5cbiAgICAgIHJlcGx5LnN0YXR1cyg1MDApO1xuICAgICAgcmV0dXJuIHsgb2s6IGZhbHNlLCBlcnJvcjogZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6IFN0cmluZyhlcnIpIH07XG4gICAgfVxuICB9KTtcblxuICBzZXJ2ZXIuZ2V0KGAke3ByZWZpeH0vc3RhdHVzYCwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHN0YXR1czogTWFuYWdlclN0YXR1cyA9IFNvbmFtdS5kZXZWaXRlc3RNYW5hZ2VyPy5nZXRTdGF0dXMoKSA/PyB7XG4gICAgICByZWFkeTogZmFsc2UsXG4gICAgICBydW5uaW5nOiBmYWxzZSxcbiAgICAgIGxhc3RSdW5BdDogbnVsbCxcbiAgICB9O1xuICAgIHJldHVybiB7IC4uLnN0YXR1cywgc3NlQXZhaWxhYmxlIH07XG4gIH0pO1xuXG4gIHNlcnZlci5hZGRIb29rKFwib25DbG9zZVwiLCBhc3luYyAoKSA9PiB7XG4gICAgYXdhaXQgU29uYW11LmRldlZpdGVzdE1hbmFnZXI/LnNodXRkb3duKCk7XG4gICAgU29uYW11LmRldlZpdGVzdE1hbmFnZXIgPSBudWxsO1xuICB9KTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQThHQSxTQUFTLGFBQWEsVUFBMEI7Q0FDOUMsT0FBTyxTQUFTLFNBQVMsR0FBRyxJQUFJLFdBQVcsR0FBRyxTQUFTO0FBQ3pEO0FBRUEsU0FBUyxnQkFBZ0IsT0FBd0IsUUFBaUM7Q0FDaEYsT0FBTztFQUFFLEdBQUc7RUFBTyxVQUFVLE1BQU0sU0FBUyxRQUFRLFFBQVEsRUFBRTtDQUFFO0FBQ2xFO0FBRUEsU0FBUyxlQUFl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
|
|
282
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGV2LXRlc3Qtcm91dGVzLmpzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90ZXN0aW5nL2Rldi10ZXN0LXJvdXRlcy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyByYW5kb21VVUlEIH0gZnJvbSBcImNyeXB0b1wiO1xuXG5pbXBvcnQgeyB0eXBlIEZhc3RpZnlJbnN0YW5jZSB9IGZyb20gXCJmYXN0aWZ5XCI7XG5pbXBvcnQgeyB6IH0gZnJvbSBcInpvZFwiO1xuXG5pbXBvcnQgeyB0eXBlIFNvbmFtdURldlJ1bm5lckNvbmZpZyB9IGZyb20gXCIuLi9hcGkvY29uZmlnXCI7XG5pbXBvcnQgeyBTb25hbXUgfSBmcm9tIFwiLi4vYXBpL3NvbmFtdVwiO1xuaW1wb3J0IHsgdHlwZSBTZXJpYWxpemVkVHJhY2UgfSBmcm9tIFwiLi4vbmFpdGUvbmFpdGVcIjtcbmltcG9ydCB7IGNyZWF0ZVNTRUZhY3RvcnkgfSBmcm9tIFwiLi4vc3RyZWFtL3NzZVwiO1xuaW1wb3J0IHsgdHlwZSBTU0VDb25uZWN0aW9uIH0gZnJvbSBcIi4uL3N0cmVhbS9zc2VcIjtcbmltcG9ydCB7XG4gIHR5cGUgTWFuYWdlclN0YXR1cyxcbiAgdHlwZSBSdW5SZXN1bHQsXG4gIHR5cGUgVGVzdENhc2VSZXN1bHQsXG4gIHR5cGUgVGVzdEV2ZW50UGF5bG9hZCxcbn0gZnJvbSBcIi4vZGV2LXZpdGVzdC1tYW5hZ2VyXCI7XG5pbXBvcnQgeyBEZXZWaXRlc3RNYW5hZ2VyIH0gZnJvbSBcIi4vZGV2LXZpdGVzdC1tYW5hZ2VyXCI7XG5cbmNvbnN0IFNDSEVNQV9WRVJTSU9OID0gMTtcbmNvbnN0IEhFQVJUQkVBVF9JTlRFUlZBTF9NUyA9IDMwXzAwMDtcblxuZXhwb3J0IHR5cGUgRGV2VGVzdFJvdXRlTWFuYWdlciA9IFBpY2s8XG4gIERldlZpdGVzdE1hbmFnZXIsXG4gIHwgXCJzdGFydFwiXG4gIHwgXCJydW5cIlxuICB8IFwiZ2V0U3RhdHVzXCJcbiAgfCBcImVtaXRFdmVudFwiXG4gIHwgXCJhZGRFdmVudExpc3RlbmVyXCJcbiAgfCBcInJlbW92ZUV2ZW50TGlzdGVuZXJcIlxuICB8IFwic2h1dGRvd25cIlxuPjtcblxuZXhwb3J0IHR5cGUgRGV2VGVzdFJvdXRlRGVwZW5kZW5jaWVzID0ge1xuICBtYW5hZ2VyPzogRGV2VGVzdFJvdXRlTWFuYWdlcjtcbiAgYXBpUm9vdFBhdGg/OiBzdHJpbmc7XG4gIHNzZUF2YWlsYWJsZT86IGJvb2xlYW47XG59O1xuXG5jb25zdCBTZXJpYWxpemVkVHJhY2VTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIGtleTogei5zdHJpbmcoKSxcbiAgdmFsdWU6IHoudW5rbm93bigpLFxuICBmaWxlUGF0aDogei5zdHJpbmcoKSxcbiAgbGluZU51bWJlcjogei5udW1iZXIoKSxcbiAgYXQ6IHouc3RyaW5nKCksXG59KTtcblxuY29uc3QgVGVzdENhc2VSZXN1bHRTY2hlbWE6IHouWm9kVHlwZTxUZXN0Q2FzZVJlc3VsdD4gPSB6LmxhenkoKCkgPT5cbiAgei5vYmplY3Qoe1xuICAgIGlkOiB6LnN0cmluZygpLFxuICAgIGtpbmQ6IHouZW51bShbXCJmaWxlXCIsIFwic3VpdGVcIiwgXCJ0ZXN0XCJdKSxcbiAgICBuYW1lOiB6LnN0cmluZygpLFxuICAgIGZ1bGxOYW1lOiB6LnN0cmluZygpLFxuICAgIGZpbGU6IHouc3RyaW5nKCksXG4gICAgc3RhdGU6IHouZW51bShbXCJwYXNzZWRcIiwgXCJmYWlsZWRcIiwgXCJza2lwcGVkXCIsIFwidG9kb1wiLCBcInJ1bm5pbmdcIiwgXCJ1bmtub3duXCJdKSxcbiAgICBkdXJhdGlvbk1zOiB6Lm51bWJlcigpLm51bGxhYmxlKCksXG4gICAgY291bnRzOiB6Lm9iamVjdCh7XG4gICAgICB0b3RhbDogei5udW1iZXIoKSxcbiAgICAgIHBhc3NlZDogei5udW1iZXIoKSxcbiAgICAgIGZhaWxlZDogei5udW1iZXIoKSxcbiAgICAgIHNraXBwZWQ6IHoubnVtYmVyKCksXG4gICAgfSksXG4gICAgZXJyb3I6IHpcbiAgICAgIC5vYmplY3Qoe1xuICAgICAgICBtZXNzYWdlOiB6LnN0cmluZygpLFxuICAgICAgICBzdGFjazogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgICAgfSlcbiAgICAgIC5udWxsYWJsZSgpLFxuICAgIHRyYWNlczogei5hcnJheShTZXJpYWxpemVkVHJhY2VTY2hlbWEpLFxuICAgIGNoaWxkcmVuOiB6LmFycmF5KFRlc3RDYXNlUmVzdWx0U2NoZW1hKSxcbiAgfSksXG4pO1xuXG5jb25zdCBSdW5SZXN1bHRTY2hlbWE6IHouWm9kVHlwZTxSdW5SZXN1bHQ+ID0gei5vYmplY3Qoe1xuICBvazogei5ib29sZWFuKCksXG4gIHN1bW1hcnk6IHoub2JqZWN0KHtcbiAgICB0b3RhbDogei5udW1iZXIoKSxcbiAgICBwYXNzZWQ6IHoubnVtYmVyKCksXG4gICAgZmFpbGVkOiB6Lm51bWJlcigpLFxuICAgIHNraXBwZWQ6IHoubnVtYmVyKCksXG4gICAgZHVyYXRpb25Nczogei5udW1iZXIoKSxcbiAgfSksXG4gIHJlc3VsdHM6IHouYXJyYXkoVGVzdENhc2VSZXN1bHRTY2hlbWEpLFxufSk7XG5jb25zdCBSdW5SZXF1ZXN0U2NoZW1hID0gei5vYmplY3Qoe1xuICBmaWxlczogei5hcnJheSh6LnN0cmluZygpKS5vcHRpb25hbCgpLFxuICBwYXR0ZXJuOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG59KTtcblxuY29uc3QgVGVzdEV2ZW50U2NoZW1hID0gei5vYmplY3Qoe1xuICBzbmFwc2hvdDogei5vYmplY3Qoe1xuICAgIHNjaGVtYVZlcnNpb246IHoubnVtYmVyKCksXG4gICAgc2VydmVyVGltZTogei5zdHJpbmcoKSxcbiAgICBzdGF0dXM6IHoub2JqZWN0KHtcbiAgICAgIHJlYWR5OiB6LmJvb2xlYW4oKSxcbiAgICAgIHJ1bm5pbmc6IHouYm9vbGVhbigpLFxuICAgICAgbGFzdFJ1bkF0OiB6LnN0cmluZygpLm51bGxhYmxlKCksXG4gICAgICBzc2VBdmFpbGFibGU6IHouYm9vbGVhbigpLFxuICAgIH0pLFxuICB9KSxcbiAgcnVuUXVldWVkOiB6Lm9iamVjdCh7XG4gICAgc2NoZW1hVmVyc2lvbjogei5udW1iZXIoKSxcbiAgICBydW5JZDogei5zdHJpbmcoKSxcbiAgICBxdWV1ZWRBdDogei5zdHJpbmcoKSxcbiAgICByZXF1ZXN0OiB6Lm9iamVjdCh7XG4gICAgICBmaWxlczogei5hcnJheSh6LnN0cmluZygpKS5vcHRpb25hbCgpLFxuICAgICAgcGF0dGVybjogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgIH0pLFxuICB9KSxcbiAgcnVuU3RhcnRlZDogei5vYmplY3Qoe1xuICAgIHNjaGVtYVZlcnNpb246IHoubnVtYmVyKCksXG4gICAgcnVuSWQ6IHouc3RyaW5nKCksXG4gICAgc3RhcnRlZEF0OiB6LnN0cmluZygpLFxuICB9KSxcbiAgcnVuQ29tcGxldGVkOiB6Lm9iamVjdCh7XG4gICAgc2NoZW1hVmVyc2lvbjogei5udW1iZXIoKSxcbiAgICBydW5JZDogei5zdHJpbmcoKSxcbiAgICBzdGFydGVkQXQ6IHouc3RyaW5nKCksXG4gICAgZmluaXNoZWRBdDogei5zdHJpbmcoKSxcbiAgICByZXN1bHQ6IFJ1blJlc3VsdFNjaGVtYSxcbiAgfSksXG4gIHJ1bkVycm9yZWQ6IHoub2JqZWN0KHtcbiAgICBzY2hlbWFWZXJzaW9uOiB6Lm51bWJlcigpLFxuICAgIHJ1bklkOiB6LnN0cmluZygpLFxuICAgIGZpbmlzaGVkQXQ6IHouc3RyaW5nKCksXG4gICAgZXJyb3I6IHoub2JqZWN0KHtcbiAgICAgIG1lc3NhZ2U6IHouc3RyaW5nKCksXG4gICAgICBzdGFjazogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgIH0pLFxuICB9KSxcbiAgcnVuTm9kZVByb2dyZXNzOiB6Lm9iamVjdCh7XG4gICAgc2NoZW1hVmVyc2lvbjogei5saXRlcmFsKDEpLFxuICAgIHJ1bklkOiB6LnN0cmluZygpLFxuICAgIHN0YXJ0ZWRBdDogei5zdHJpbmcoKSxcbiAgICBhdDogei5zdHJpbmcoKSxcbiAgICBraW5kOiB6LmVudW0oW1wiZmlsZVwiLCBcInN1aXRlXCIsIFwidGVzdFwiXSksXG4gICAgcGhhc2U6IHouZW51bShbXCJyZWFkeVwiLCBcInJlc3VsdFwiXSksXG4gICAgZmlsZUlkOiB6LnN0cmluZygpLFxuICAgIG5vZGVJZDogei5zdHJpbmcoKSxcbiAgICBwYXJlbnRJZDogei5zdHJpbmcoKS5udWxsYWJsZSgpLFxuICAgIG5vZGU6IFRlc3RDYXNlUmVzdWx0U2NoZW1hLFxuICB9KSxcbiAgaGVhcnRiZWF0OiB6Lm9iamVjdCh7XG4gICAgc2NoZW1hVmVyc2lvbjogei5udW1iZXIoKSxcbiAgICBhdDogei5zdHJpbmcoKSxcbiAgfSksXG59KTtcblxudHlwZSBUZXN0RXZlbnRzID0gei5pbmZlcjx0eXBlb2YgVGVzdEV2ZW50U2NoZW1hPjtcbmNvbnN0IFRlc3RFdmVudE5hbWVTY2hlbWEgPSB6LmVudW0oW1xuICBcInNuYXBzaG90XCIsXG4gIFwicnVuUXVldWVkXCIsXG4gIFwicnVuU3RhcnRlZFwiLFxuICBcInJ1bkNvbXBsZXRlZFwiLFxuICBcInJ1bkVycm9yZWRcIixcbiAgXCJydW5Ob2RlUHJvZ3Jlc3NcIixcbiAgXCJoZWFydGJlYXRcIixcbl0pO1xuXG5mdW5jdGlvbiB0b1BhdGhQcmVmaXgoYmFzZVBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBiYXNlUGF0aC5lbmRzV2l0aChcIi9cIikgPyBiYXNlUGF0aCA6IGAke2Jhc2VQYXRofS9gO1xufVxuXG5mdW5jdGlvbiByZWxhdGl2aXplVHJhY2UodHJhY2U6IFNlcmlhbGl6ZWRUcmFjZSwgcHJlZml4OiBzdHJpbmcpOiBTZXJpYWxpemVkVHJhY2Uge1xuICByZXR1cm4geyAuLi50cmFjZSwgZmlsZVBhdGg6IHRyYWNlLmZpbGVQYXRoLnJlcGxhY2UocHJlZml4LCBcIlwiKSB9O1xufVxuXG5mdW5jdGlvbiByZWxhdGl2aXplTm9kZShub2RlOiBUZXN0Q2FzZVJlc3VsdCwgYmFzZVBhdGg6IHN0cmluZyk6IFRlc3RDYXNlUmVzdWx0IHtcbiAgY29uc3QgcHJlZml4ID0gdG9QYXRoUHJlZml4KGJhc2VQYXRoKTtcbiAgcmV0dXJuIHtcbiAgICAuLi5ub2RlLFxuICAgIG5hbWU6IG5vZGUubmFtZS5yZXBsYWNlKHByZWZpeCwgXCJcIiksXG4gICAgZmlsZTogbm9kZS5maWxlLnJlcGxhY2UocHJlZml4LCBcIlwiKSxcbiAgICB0cmFjZXM6IG5vZGUudHJhY2VzLm1hcCgodCkgPT4gcmVsYXRpdml6ZVRyYWNlKHQsIHByZWZpeCkpLFxuICAgIGNoaWxkcmVuOiBub2RlLmNoaWxkcmVuLm1hcCgoYykgPT4gcmVsYXRpdml6ZU5vZGUoYywgcHJlZml4KSksXG4gIH07XG59XG5cbmZ1bmN0aW9uIHJlbGF0aXZpemVSZXN1bHQocmVzdWx0OiBSdW5SZXN1bHQsIGJhc2VQYXRoOiBzdHJpbmcpOiBSdW5SZXN1bHQge1xuICBjb25zdCBwcmVmaXggPSB0b1BhdGhQcmVmaXgoYmFzZVBhdGgpO1xuICByZXR1cm4ge1xuICAgIC4uLnJlc3VsdCxcbiAgICByZXN1bHRzOiByZXN1bHQucmVzdWx0cy5tYXAoKG4pID0+IHJlbGF0aXZpemVOb2RlKG4sIHByZWZpeCkpLFxuICB9O1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVnaXN0ZXJEZXZUZXN0Um91dGVzKFxuICBzZXJ2ZXI6IEZhc3RpZnlJbnN0YW5jZSxcbiAgY29uZmlnOiBTb25hbXVEZXZSdW5uZXJDb25maWcsXG4gIGRlcGVuZGVuY2llcz86IERldlRlc3RSb3V0ZURlcGVuZGVuY2llcyxcbik6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBwcmVmaXggPSBjb25maWcucm91dGVQcmVmaXggPz8gXCIvX190ZXN0X19cIjtcblxuICBjb25zdCBkZWZhdWx0TWFuYWdlciA9IGRlcGVuZGVuY2llcz8ubWFuYWdlciA9PT0gdW5kZWZpbmVkID8gbmV3IERldlZpdGVzdE1hbmFnZXIoKSA6IG51bGw7XG4gIGNvbnN0IG1hbmFnZXIgPSBkZXBlbmRlbmNpZXM/Lm1hbmFnZXIgPz8gZGVmYXVsdE1hbmFnZXI7XG4gIGlmIChtYW5hZ2VyID09PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiRGV2Vml0ZXN0TWFuYWdlciBkZXBlbmRlbmN5IGlzIHVuYXZhaWxhYmxlXCIpO1xuICB9XG4gIGF3YWl0IG1hbmFnZXIuc3RhcnQoY29uZmlnLnZpdGVzdENvbmZpZ1BhdGgpO1xuICBpZiAoZGVmYXVsdE1hbmFnZXIgIT09IG51bGwpIHtcbiAgICBTb25hbXUuZGV2Vml0ZXN0TWFuYWdlciA9IGRlZmF1bHRNYW5hZ2VyO1xuICB9XG5cbiAgY29uc3Qgc3NlQXZhaWxhYmxlID0gZGVwZW5kZW5jaWVzPy5zc2VBdmFpbGFibGUgPz8gISFTb25hbXUuY29uZmlnLnNlcnZlci5wbHVnaW5zPy5zc2U7XG5cbiAgaWYgKHNzZUF2YWlsYWJsZSkge1xuICAgIHNlcnZlci5nZXQoYCR7cHJlZml4fS9ldmVudHNgLCAocmVxdWVzdCwgcmVwbHkpOiB2b2lkID0+IHtcbiAgICAgIGNvbnN0IHNzZTogU1NFQ29ubmVjdGlvbjx0eXBlb2YgVGVzdEV2ZW50U2NoZW1hPiA9IGNyZWF0ZVNTRUZhY3RvcnkoXG4gICAgICAgIHJlcXVlc3Quc29ja2V0LFxuICAgICAgICByZXBseSxcbiAgICAgICAgVGVzdEV2ZW50U2NoZW1hLFxuICAgICAgKTtcblxuICAgICAgY29uc3Qgc3RhdHVzOiBNYW5hZ2VyU3RhdHVzID0gbWFuYWdlci5nZXRTdGF0dXMoKTtcbiAgICAgIHNzZS5wdWJsaXNoKFwic25hcHNob3RcIiwge1xuICAgICAgICBzY2hlbWFWZXJzaW9uOiBTQ0hFTUFfVkVSU0lPTixcbiAgICAgICAgc2VydmVyVGltZTogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgICAvLyBVSeuKlCBIVFRQIHN0YXR1c+yZgCDqsJnsnYAg7ZiV7YOc66W8IOq4sOuMgO2VmOuvgOuhnCBTU0Ug7Iqk64OF7IO37JeQ64+EIHNzZUF2YWlsYWJsZeydhCDtj6ztlajtlanri4jri6QuXG4gICAgICAgIHN0YXR1czogeyAuLi5zdGF0dXMsIHNzZUF2YWlsYWJsZSB9LFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IGhlYXJ0YmVhdFRpbWVyID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgICBzc2UucHVibGlzaChcImhlYXJ0YmVhdFwiLCB7XG4gICAgICAgICAgc2NoZW1hVmVyc2lvbjogU0NIRU1BX1ZFUlNJT04sXG4gICAgICAgICAgYXQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgICAgfSk7XG4gICAgICB9LCBIRUFSVEJFQVRfSU5URVJWQUxfTVMpO1xuXG4gICAgICBjb25zdCBiYXNlUGF0aCA9IGRlcGVuZGVuY2llcz8uYXBpUm9vdFBhdGggPz8gU29uYW11LmFwaVJvb3RQYXRoO1xuICAgICAgY29uc3QgbGlzdGVuZXIgPSAoZXZlbnQ6IHN0cmluZywgZGF0YTogVGVzdEV2ZW50UGF5bG9hZCkgPT4ge1xuICAgICAgICBjb25zdCBwYXJzZWRLZXkgPSBUZXN0RXZlbnROYW1lU2NoZW1hLnNhZmVQYXJzZShldmVudCk7XG4gICAgICAgIGlmICghcGFyc2VkS2V5LnN1Y2Nlc3MpIHJldHVybjtcbiAgICAgICAgY29uc3Qga2V5ID0gcGFyc2VkS2V5LmRhdGE7XG4gICAgICAgIGlmIChrZXkgPT09IFwicnVuTm9kZVByb2dyZXNzXCIpIHtcbiAgICAgICAgICBjb25zdCBwcm9ncmVzc0VudmVsb3BlID0gVGVzdEV2ZW50U2NoZW1hLnBhcnRpYWwoKS5zYWZlUGFyc2UoeyBydW5Ob2RlUHJvZ3Jlc3M6IGRhdGEgfSk7XG4gICAgICAgICAgaWYgKCFwcm9ncmVzc0VudmVsb3BlLnN1Y2Nlc3MgfHwgcHJvZ3Jlc3NFbnZlbG9wZS5kYXRhLnJ1bk5vZGVQcm9ncmVzcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IHByb2dyZXNzID0gcHJvZ3Jlc3NFbnZlbG9wZS5kYXRhLnJ1bk5vZGVQcm9ncmVzcztcbiAgICAgICAgICBjb25zdCByZWxhdGl2aXplZCA9IHtcbiAgICAgICAgICAgIC4uLnByb2dyZXNzLFxuICAgICAgICAgICAgbm9kZTogcmVsYXRpdml6ZU5vZGUocHJvZ3Jlc3Mubm9kZSwgYmFzZVBhdGgpLFxuICAgICAgICAgIH07XG4gICAgICAgICAgc3NlLnB1Ymxpc2goa2V5LCByZWxhdGl2aXplZCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHBhcnNlZEVudmVsb3BlID0gVGVzdEV2ZW50U2NoZW1hLnBhcnRpYWwoKS5zYWZlUGFyc2UoeyBba2V5XTogZGF0YSB9KTtcbiAgICAgICAgaWYgKCFwYXJzZWRFbnZlbG9wZS5zdWNjZXNzIHx8IHBhcnNlZEVudmVsb3BlLmRhdGFba2V5XSA9PT0gdW5kZWZpbmVkKSByZXR1cm47XG4gICAgICAgIGNvbnN0IHBhcnNlZERhdGEgPSBwYXJzZWRFbnZlbG9wZS5kYXRhW2tleV07XG4gICAgICAgIC8vIFNBRkVUWToga2V57JmAIHBheWxvYWTripQg6rCZ7J2AIFRlc3RFdmVudFNjaGVtYSDtla3rqqnsnLzroZwg7ZWo6ruYIOqygOymneuQmOyXiOyKteuLiOuLpC5cbiAgICAgICAgc3NlLnB1Ymxpc2goa2V5LCBwYXJzZWREYXRhIGFzIFRlc3RFdmVudHNbdHlwZW9mIGtleV0pO1xuICAgICAgfTtcbiAgICAgIG1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihsaXN0ZW5lcik7XG5cbiAgICAgIGxldCBjbGVhbmVkID0gZmFsc2U7XG4gICAgICBjb25zdCBjbGVhbnVwID0gKCkgPT4ge1xuICAgICAgICBpZiAoY2xlYW5lZCkgcmV0dXJuO1xuICAgICAgICBjbGVhbmVkID0gdHJ1ZTtcbiAgICAgICAgY2xlYXJJbnRlcnZhbChoZWFydGJlYXRUaW1lcik7XG4gICAgICAgIG1hbmFnZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcihsaXN0ZW5lcik7XG4gICAgICB9O1xuICAgICAgcmVxdWVzdC5zb2NrZXQub24oXCJjbG9zZVwiLCBjbGVhbnVwKTtcbiAgICAgIHJlcXVlc3Quc29ja2V0Lm9uKFwiZXJyb3JcIiwgY2xlYW51cCk7XG4gICAgfSk7XG4gIH1cblxuICBzZXJ2ZXIucG9zdChgJHtwcmVmaXh9L3J1bmAsIGFzeW5jIChyZXF1ZXN0LCByZXBseSkgPT4ge1xuICAgIGNvbnN0IHJ1bklkID0gcmFuZG9tVVVJRCgpO1xuICAgIGNvbnN0IHJ1blJlcXVlc3QgPSBSdW5SZXF1ZXN0U2NoZW1hLnBhcnNlKHJlcXVlc3QuYm9keSA/PyB7fSk7XG5cbiAgICBtYW5hZ2VyLmVtaXRFdmVudChcInJ1blF1ZXVlZFwiLCB7XG4gICAgICBzY2hlbWFWZXJzaW9uOiBTQ0hFTUFfVkVSU0lPTixcbiAgICAgIHJ1bklkLFxuICAgICAgcXVldWVkQXQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgIHJlcXVlc3Q6IHJ1blJlcXVlc3QsXG4gICAgfSk7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3Qgc3RhcnRlZEF0ID0gbmV3IERhdGUoKS50b0lTT1N0cmluZygpO1xuICAgICAgbWFuYWdlci5lbWl0RXZlbnQoXCJydW5TdGFydGVkXCIsIHtcbiAgICAgICAgc2NoZW1hVmVyc2lvbjogU0NIRU1BX1ZFUlNJT04sXG4gICAgICAgIHJ1bklkLFxuICAgICAgICBzdGFydGVkQXQsXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgcmF3UmVzdWx0OiBSdW5SZXN1bHQgPSBhd2FpdCBtYW5hZ2VyLnJ1bihydW5SZXF1ZXN0LCBydW5JZCk7XG4gICAgICBjb25zdCByZXN1bHQgPSByZWxhdGl2aXplUmVzdWx0KHJhd1Jlc3VsdCwgZGVwZW5kZW5jaWVzPy5hcGlSb290UGF0aCA/PyBTb25hbXUuYXBpUm9vdFBhdGgpO1xuXG4gICAgICBjb25zdCBmaW5pc2hlZEF0ID0gbmV3IERhdGUoKS50b0lTT1N0cmluZygpO1xuICAgICAgbWFuYWdlci5lbWl0RXZlbnQoXCJydW5Db21wbGV0ZWRcIiwge1xuICAgICAgICBzY2hlbWFWZXJzaW9uOiBTQ0hFTUFfVkVSU0lPTixcbiAgICAgICAgcnVuSWQsXG4gICAgICAgIHN0YXJ0ZWRBdCxcbiAgICAgICAgZmluaXNoZWRBdCxcbiAgICAgICAgcmVzdWx0LFxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjb25zdCBmaW5pc2hlZEF0ID0gbmV3IERhdGUoKS50b0lTT1N0cmluZygpO1xuICAgICAgbWFuYWdlci5lbWl0RXZlbnQoXCJydW5FcnJvcmVkXCIsIHtcbiAgICAgICAgc2NoZW1hVmVyc2lvbjogU0NIRU1BX1ZFUlNJT04sXG4gICAgICAgIHJ1bklkLFxuICAgICAgICBmaW5pc2hlZEF0LFxuICAgICAgICBlcnJvcjoge1xuICAgICAgICAgIG1lc3NhZ2U6IGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiBTdHJpbmcoZXJyKSxcbiAgICAgICAgICBzdGFjazogZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIuc3RhY2sgOiB1bmRlZmluZWQsXG4gICAgICAgIH0sXG4gICAgICB9KTtcblxuICAgICAgcmVwbHkuc3RhdHVzKDUwMCk7XG4gICAgICByZXR1cm4geyBvazogZmFsc2UsIGVycm9yOiBlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogU3RyaW5nKGVycikgfTtcbiAgICB9XG4gIH0pO1xuXG4gIHNlcnZlci5nZXQoYCR7cHJlZml4fS9zdGF0dXNgLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3Qgc3RhdHVzOiBNYW5hZ2VyU3RhdHVzID0gbWFuYWdlci5nZXRTdGF0dXMoKTtcbiAgICByZXR1cm4geyAuLi5zdGF0dXMsIHNzZUF2YWlsYWJsZSB9O1xuICB9KTtcblxuICBzZXJ2ZXIuYWRkSG9vayhcIm9uQ2xvc2VcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGF3YWl0IG1hbmFnZXIuc2h1dGRvd24oKTtcbiAgICBpZiAoZGVmYXVsdE1hbmFnZXIgIT09IG51bGwpIHtcbiAgICAgIFNvbmFtdS5kZXZWaXRlc3RNYW5hZ2VyID0gbnVsbDtcbiAgICB9XG4gIH0pO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBOEpBLFNBQVMsYUFBYSxVQUEwQjtDQUM5QyxPQUFPLFNBQVMsU0FBUyxHQUFHLElBQUksV0FBVyxHQUFHLFNBQVM7QUFDekQ7QUFFQSxTQUFTLGdCQUFnQixPQUF3QixRQUFpQztDQUNoRixPQUFPO0VBQUUsR0FBRztFQUFPLFVBQVUsTUFBTSxTQUFTLFFBQVEsUUFBUSxFQUFFO0NBQUU7QUFDbEU7QUFFQSxTQUFTLGVBQWUsTUFBc0IsVUFBa0M7Q0FDOUUsTUFBTSxTQUFTLGFBQWEsUUFBUTtDQUNwQyxPQUFPO0VBQ0wsR0FBRztFQUNILE1BQU0sS0FBSyxLQUFLLFFBQVEsUUFBUSxFQUFFO0VBQ2xDLE1BQU0sS0FBSyxLQUFLLFFBQVEsUUFBUSxFQUFFO0VBQ2xDLFFBQVEsS0FBSyxPQUFPLEtBQUssTUFBTSxnQkFBZ0IsR0FBRyxNQUFNLENBQUM7RUFDekQsVUFBVSxLQUFLLFNBQVMsS0FBSyxNQUFNLGVBQWUsR0FBRyxNQUFNLENBQUM7Q0FDOUQ7QUFDRjtBQUVBLFNBQVMsaUJBQWlCLFFBQW1CLFVBQTZCO0NBQ3hFLE1BQU0sU0FBUyxhQUFhLFFBQVE7Q0FDcEMsT0FBTztFQUNMLEdBQUc7RUFDSCxTQUFTLE9BQU8sUUFBUSxLQUFLLE1BQU0sZUFBZSxHQUFHLE1BQU0sQ0FBQztDQUM5RDtBQUNGO0FBRUEsZUFBc0Isc0JBQ3BCLFFBQ0EsUUFDQSxjQUNlO0NBQ2YsTUFBTSxTQUFTLE9BQU8sZUFBZTtDQUVyQyxNQUFNLGlCQUFpQixjQUFjLFlBQVksU0FBWSxJQUFJLGlCQUFpQixJQUFJO0NBQ3RGLE1BQU0sVUFBVSxjQUFjLFdBQVc7Q0FDekMsSUFBSSxZQUFZLE1BQ2QsTUFBTSxJQUFJLE1BQU0sNENBQTRDO0NBRTlELE1BQU0sUUFBUSxNQUFNLE9BQU8sZ0JBQWdCO0NBQzNDLElBQUksbUJBQW1CLE1BQ3JCLE9BQU8sbUJBQW1CO0NB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
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { type UserConfig as ViteUserConfig } from "vite";
|
|
2
|
+
import { type CliOptions, type Vitest } from "vitest/node";
|
|
1
3
|
import { type SerializedTrace } from "../naite/naite";
|
|
2
4
|
export type TestNodeKind = "file" | "suite" | "test";
|
|
3
5
|
export type TestState = "passed" | "failed" | "skipped" | "todo" | "running" | "unknown";
|
|
@@ -9,12 +11,7 @@ export type TestCaseResult = {
|
|
|
9
11
|
file: string;
|
|
10
12
|
state: TestState;
|
|
11
13
|
durationMs: number | null;
|
|
12
|
-
counts:
|
|
13
|
-
total: number;
|
|
14
|
-
passed: number;
|
|
15
|
-
failed: number;
|
|
16
|
-
skipped: number;
|
|
17
|
-
};
|
|
14
|
+
counts: TestCounts;
|
|
18
15
|
error: {
|
|
19
16
|
message: string;
|
|
20
17
|
stack?: string;
|
|
@@ -22,6 +19,12 @@ export type TestCaseResult = {
|
|
|
22
19
|
traces: SerializedTrace[];
|
|
23
20
|
children: TestCaseResult[];
|
|
24
21
|
};
|
|
22
|
+
export type TestCounts = {
|
|
23
|
+
total: number;
|
|
24
|
+
passed: number;
|
|
25
|
+
failed: number;
|
|
26
|
+
skipped: number;
|
|
27
|
+
};
|
|
25
28
|
export type RunResult = {
|
|
26
29
|
ok: boolean;
|
|
27
30
|
summary: {
|
|
@@ -38,8 +41,50 @@ export type ManagerStatus = {
|
|
|
38
41
|
running: boolean;
|
|
39
42
|
lastRunAt: string | null;
|
|
40
43
|
};
|
|
41
|
-
export type
|
|
44
|
+
export type TestEventPayload = {
|
|
45
|
+
schemaVersion: number;
|
|
46
|
+
runId: string;
|
|
47
|
+
queuedAt: string;
|
|
48
|
+
request: RunRequest;
|
|
49
|
+
} | {
|
|
50
|
+
schemaVersion: number;
|
|
51
|
+
runId: string;
|
|
52
|
+
startedAt: string;
|
|
53
|
+
} | {
|
|
54
|
+
schemaVersion: number;
|
|
55
|
+
runId: string;
|
|
56
|
+
startedAt: string;
|
|
57
|
+
finishedAt: string;
|
|
58
|
+
result: RunResult;
|
|
59
|
+
} | {
|
|
60
|
+
schemaVersion: number;
|
|
61
|
+
runId: string;
|
|
62
|
+
finishedAt: string;
|
|
63
|
+
error: {
|
|
64
|
+
message: string;
|
|
65
|
+
stack?: string;
|
|
66
|
+
};
|
|
67
|
+
} | {
|
|
68
|
+
schemaVersion: 1;
|
|
69
|
+
runId: string;
|
|
70
|
+
startedAt: string;
|
|
71
|
+
at: string;
|
|
72
|
+
kind: TestNodeKind;
|
|
73
|
+
phase: "ready" | "result";
|
|
74
|
+
fileId: string;
|
|
75
|
+
nodeId: string;
|
|
76
|
+
parentId: string | null;
|
|
77
|
+
node: TestCaseResult;
|
|
78
|
+
};
|
|
79
|
+
export type RunRequest = {
|
|
80
|
+
files?: string[];
|
|
81
|
+
pattern?: string;
|
|
82
|
+
};
|
|
83
|
+
export type TestEventListener = (event: string, data: TestEventPayload) => void;
|
|
84
|
+
export type ManagedVitest = Pick<Vitest, "standalone" | "close" | "onFilterWatchedSpecification" | "invalidateFile" | "globTestSpecifications" | "runTestSpecifications" | "setGlobalTestNamePattern" | "resetGlobalTestNamePattern">;
|
|
85
|
+
export type DevVitestFactory = (mode: "test", options: CliOptions, viteOverrides: ViteUserConfig) => Promise<ManagedVitest>;
|
|
42
86
|
export declare class DevVitestManager {
|
|
87
|
+
private readonly vitestFactory?;
|
|
43
88
|
private vitest;
|
|
44
89
|
private running;
|
|
45
90
|
private lastRunAt;
|
|
@@ -48,9 +93,10 @@ export declare class DevVitestManager {
|
|
|
48
93
|
private closed;
|
|
49
94
|
private eventListeners;
|
|
50
95
|
private currentRunContext;
|
|
96
|
+
constructor(vitestFactory?: DevVitestFactory | undefined);
|
|
51
97
|
addEventListener(listener: TestEventListener): void;
|
|
52
98
|
removeEventListener(listener: TestEventListener): void;
|
|
53
|
-
emitEvent(event: string, data:
|
|
99
|
+
emitEvent(event: string, data: TestEventPayload): void;
|
|
54
100
|
start(vitestConfigPath?: string): Promise<void>;
|
|
55
101
|
run(opts: {
|
|
56
102
|
files?: string[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dev-vitest-manager.d.ts","sourceRoot":"","sources":["../../src/testing/dev-vitest-manager.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"dev-vitest-manager.d.ts","sourceRoot":"","sources":["../../src/testing/dev-vitest-manager.ts"],"names":[],"mappings":"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"}
|