sonamu 0.10.12 → 0.10.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/ai/agents/agent.d.ts +1 -1
- package/dist/ai/agents/agent.d.ts.map +1 -1
- package/dist/ai/agents/agent.js +5 -6
- package/dist/ai/agents/types.d.ts +1 -1
- package/dist/ai/agents/types.d.ts.map +1 -1
- package/dist/ai/providers/rtzr/api.js +18 -18
- package/dist/ai/providers/rtzr/error.d.ts.map +1 -1
- package/dist/ai/providers/rtzr/error.js +17 -15
- package/dist/ai/providers/rtzr/model.d.ts.map +1 -1
- package/dist/ai/providers/rtzr/model.js +3 -2
- package/dist/ai/providers/rtzr/options.d.ts.map +1 -1
- package/dist/ai/providers/rtzr/options.js +16 -16
- package/dist/ai/providers/rtzr/provider.d.ts.map +1 -1
- package/dist/ai/providers/rtzr/provider.js +9 -9
- package/dist/ai/providers/rtzr/utils.d.ts.map +1 -1
- package/dist/ai/providers/rtzr/utils.js +1 -1
- package/dist/api/caster.d.ts.map +1 -1
- package/dist/api/caster.js +17 -17
- package/dist/api/code-converters.d.ts +4 -2
- package/dist/api/code-converters.d.ts.map +1 -1
- package/dist/api/code-converters.js +100 -19
- package/dist/api/config.d.ts +16 -1
- package/dist/api/config.d.ts.map +1 -1
- package/dist/api/config.js +28 -21
- package/dist/api/context.d.ts +2 -2
- package/dist/api/context.d.ts.map +1 -1
- package/dist/api/context.js +1 -1
- package/dist/api/decorators.d.ts.map +1 -1
- package/dist/api/decorators.js +18 -11
- package/dist/api/http-validator.d.ts +36 -0
- package/dist/api/http-validator.d.ts.map +1 -0
- package/dist/api/http-validator.js +72 -0
- package/dist/api/index.js +6 -4
- package/dist/api/sonamu.d.ts +59 -20
- package/dist/api/sonamu.d.ts.map +1 -1
- package/dist/api/sonamu.js +250 -106
- package/dist/api/websocket-helpers.d.ts +7 -5
- package/dist/api/websocket-helpers.d.ts.map +1 -1
- package/dist/api/websocket-helpers.js +6 -6
- package/dist/auth/audit-log/builders.d.ts.map +1 -1
- package/dist/auth/audit-log/builders.js +1 -1
- package/dist/auth/audit-log/client-ip.d.ts +1 -1
- package/dist/auth/audit-log/client-ip.d.ts.map +1 -1
- package/dist/auth/audit-log/client-ip.js +4 -2
- package/dist/auth/audit-log/events.d.ts +5 -1
- package/dist/auth/audit-log/events.d.ts.map +1 -1
- package/dist/auth/audit-log/events.js +1 -1
- package/dist/auth/audit-log/plugin.d.ts +0 -8
- package/dist/auth/audit-log/plugin.d.ts.map +1 -1
- package/dist/auth/audit-log/plugin.js +48 -52
- package/dist/auth/audit-log-ingestor.d.ts.map +1 -1
- package/dist/auth/audit-log-ingestor.js +16 -12
- package/dist/auth/auth-generator.d.ts.map +1 -1
- package/dist/auth/auth-generator.js +1 -1
- package/dist/auth/better-auth-request.d.ts.map +1 -1
- package/dist/auth/better-auth-request.js +6 -5
- package/dist/auth/knex-adapter.js +1 -1
- package/dist/auth/plugins/entity-definitions/index.d.ts +13 -1
- package/dist/auth/plugins/entity-definitions/index.d.ts.map +1 -1
- package/dist/auth/plugins/entity-definitions/index.js +1 -1
- package/dist/auth/plugins/wrappers/admin.d.ts +1 -1
- package/dist/bin/build-config.d.ts +25 -0
- package/dist/bin/build-config.d.ts.map +1 -1
- package/dist/bin/build-config.js +105 -2
- package/dist/bin/cli.js +131 -27
- package/dist/bin/compiler-policy.d.ts +3 -0
- package/dist/bin/compiler-policy.d.ts.map +1 -0
- package/dist/bin/compiler-policy.js +24 -0
- package/dist/bin/fixture.d.ts.map +1 -1
- package/dist/bin/fixture.js +5 -3
- package/dist/bin/test-command.d.ts +22 -1
- package/dist/bin/test-command.d.ts.map +1 -1
- package/dist/bin/test-command.js +18 -10
- package/dist/bin/ts-loader-registration.d.ts +7 -1
- package/dist/bin/ts-loader-registration.d.ts.map +1 -1
- package/dist/bin/ts-loader-registration.js +13 -4
- package/dist/cache/decorator.d.ts.map +1 -1
- package/dist/cache/decorator.js +11 -4
- package/dist/compress/compress.d.ts.map +1 -1
- package/dist/compress/compress.js +1 -1
- package/dist/cone/cone-generator.d.ts +14 -1
- package/dist/cone/cone-generator.d.ts.map +1 -1
- package/dist/cone/cone-generator.js +13 -9
- package/dist/database/_batch_update.js +1 -1
- package/dist/database/base-model.d.ts +22 -10
- package/dist/database/base-model.d.ts.map +1 -1
- package/dist/database/base-model.js +26 -16
- package/dist/database/base-model.types.d.ts +15 -3
- package/dist/database/base-model.types.d.ts.map +1 -1
- package/dist/database/db.d.ts +12 -2
- package/dist/database/db.d.ts.map +1 -1
- package/dist/database/db.js +10 -7
- package/dist/database/knex.d.ts.map +1 -1
- package/dist/database/knex.js +17 -14
- package/dist/database/puri.d.ts +11 -9
- package/dist/database/puri.d.ts.map +1 -1
- package/dist/database/puri.js +93 -79
- package/dist/database/puri.types.d.ts +21 -21
- package/dist/database/puri.types.d.ts.map +1 -1
- package/dist/database/puri.types.js +1 -1
- package/dist/database/upsert-builder.d.ts +12 -10
- package/dist/database/upsert-builder.d.ts.map +1 -1
- package/dist/database/upsert-builder.js +20 -12
- package/dist/dict/sd.d.ts.map +1 -1
- package/dist/dict/sd.js +1 -1
- package/dist/dict/sonamu-dictionary.d.ts.map +1 -1
- package/dist/dict/sonamu-dictionary.js +1 -1
- package/dist/dict/utils.d.ts.map +1 -1
- package/dist/dict/utils.js +7 -2
- package/dist/entity/entity-manager.d.ts +13 -4
- package/dist/entity/entity-manager.d.ts.map +1 -1
- package/dist/entity/entity-manager.js +19 -11
- package/dist/entity/entity-template-cone.d.ts +73 -5
- package/dist/entity/entity-template-cone.d.ts.map +1 -1
- package/dist/entity/entity-template-cone.js +4 -2
- package/dist/entity/entity.d.ts +6 -2
- package/dist/entity/entity.d.ts.map +1 -1
- package/dist/entity/entity.js +30 -28
- package/dist/env.d.ts +3 -1
- package/dist/env.d.ts.map +1 -1
- package/dist/env.js +1 -1
- package/dist/exceptions/error-handler.d.ts.map +1 -1
- package/dist/exceptions/error-handler.js +7 -2
- package/dist/exceptions/so-exceptions.d.ts +24 -20
- package/dist/exceptions/so-exceptions.d.ts.map +1 -1
- package/dist/exceptions/so-exceptions.js +4 -2
- package/dist/filter/utils.d.ts +7 -2
- package/dist/filter/utils.d.ts.map +1 -1
- package/dist/filter/utils.js +8 -6
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +12 -6
- package/dist/logger/configure.d.ts.map +1 -1
- package/dist/logger/configure.js +10 -10
- package/dist/migration/code-generation.d.ts.map +1 -1
- package/dist/migration/code-generation.js +50 -46
- package/dist/migration/index-where-predicate.d.ts.map +1 -1
- package/dist/migration/index-where-predicate.js +22 -8
- package/dist/migration/migration-set.d.ts.map +1 -1
- package/dist/migration/migration-set.js +1 -1
- package/dist/migration/migrator.d.ts +3 -2
- package/dist/migration/migrator.d.ts.map +1 -1
- package/dist/migration/migrator.js +27 -21
- package/dist/migration/postgresql-schema-reader.d.ts.map +1 -1
- package/dist/migration/postgresql-schema-reader.js +51 -36
- package/dist/migration/slack-confirm.d.ts.map +1 -1
- package/dist/migration/slack-confirm.js +1 -1
- package/dist/naite/naite-reporter.js +2 -2
- package/dist/naite/naite.d.ts +74 -15
- package/dist/naite/naite.d.ts.map +1 -1
- package/dist/naite/naite.js +5 -19
- package/dist/runtime-type.d.ts +6 -0
- package/dist/runtime-type.d.ts.map +1 -0
- package/dist/runtime-type.js +26 -0
- package/dist/ssr/hmr-opt-out.d.ts +26 -0
- package/dist/ssr/hmr-opt-out.d.ts.map +1 -0
- package/dist/ssr/hmr-opt-out.js +59 -0
- package/dist/ssr/renderer.d.ts.map +1 -1
- package/dist/ssr/renderer.js +4 -1
- package/dist/storage/base-file.js +14 -14
- package/dist/storage/buffered-file.d.ts +2 -2
- package/dist/storage/buffered-file.d.ts.map +1 -1
- package/dist/storage/buffered-file.js +12 -12
- package/dist/storage/s3-driver.d.ts.map +1 -1
- package/dist/storage/s3-driver.js +1 -1
- package/dist/storage/uploaded-file.d.ts +2 -2
- package/dist/storage/uploaded-file.d.ts.map +1 -1
- package/dist/storage/uploaded-file.js +8 -8
- package/dist/stream/sse.js +11 -11
- package/dist/stream/ws-core.d.ts +1 -1
- package/dist/stream/ws-core.d.ts.map +1 -1
- package/dist/stream/ws-delivery.d.ts +1 -1
- package/dist/stream/ws-delivery.d.ts.map +1 -1
- package/dist/stream/ws-delivery.js +6 -4
- package/dist/stream/ws-local-connection-store.d.ts.map +1 -1
- package/dist/stream/ws-local-connection-store.js +4 -2
- package/dist/stream/ws-presence-store.js +1 -1
- package/dist/stream/ws-registry.d.ts +4 -4
- package/dist/stream/ws-registry.d.ts.map +1 -1
- package/dist/stream/ws-registry.js +4 -2
- package/dist/stream/ws-telemetry.d.ts +16 -12
- package/dist/stream/ws-telemetry.d.ts.map +1 -1
- package/dist/stream/ws-telemetry.js +22 -18
- package/dist/stream/ws.d.ts +18 -12
- package/dist/stream/ws.d.ts.map +1 -1
- package/dist/stream/ws.js +26 -22
- package/dist/syncer/api-parser.js +1 -1
- package/dist/syncer/checksum.d.ts.map +1 -1
- package/dist/syncer/checksum.js +7 -8
- package/dist/syncer/code-generator.d.ts.map +1 -1
- package/dist/syncer/code-generator.js +13 -14
- package/dist/syncer/entity-operations.d.ts.map +1 -1
- package/dist/syncer/entity-operations.js +5 -6
- package/dist/syncer/file-copy.d.ts +5 -0
- package/dist/syncer/file-copy.d.ts.map +1 -0
- package/dist/syncer/file-copy.js +36 -0
- package/dist/syncer/file-patterns.d.ts +1 -0
- package/dist/syncer/file-patterns.d.ts.map +1 -1
- package/dist/syncer/file-patterns.js +5 -2
- package/dist/syncer/file-tracking.d.ts.map +1 -1
- package/dist/syncer/file-tracking.js +5 -4
- package/dist/syncer/filesystem-dependencies.d.ts +15 -0
- package/dist/syncer/filesystem-dependencies.d.ts.map +1 -0
- package/dist/syncer/filesystem-dependencies.js +53 -0
- package/dist/syncer/module-loader.d.ts +1 -1
- package/dist/syncer/module-loader.d.ts.map +1 -1
- package/dist/syncer/module-loader.js +6 -4
- package/dist/syncer/syncer-actions.d.ts +4 -0
- package/dist/syncer/syncer-actions.d.ts.map +1 -1
- package/dist/syncer/syncer-actions.js +34 -17
- package/dist/syncer/syncer.d.ts +17 -6
- package/dist/syncer/syncer.d.ts.map +1 -1
- package/dist/syncer/syncer.js +71 -29
- package/dist/syncer/watcher.d.ts.map +1 -1
- package/dist/syncer/watcher.js +3 -3
- package/dist/tasks/decorator.d.ts +6 -6
- package/dist/tasks/decorator.d.ts.map +1 -1
- package/dist/tasks/decorator.js +4 -4
- package/dist/tasks/step-wrapper.d.ts +6 -4
- package/dist/tasks/step-wrapper.d.ts.map +1 -1
- package/dist/tasks/step-wrapper.js +5 -5
- package/dist/tasks/workflow-manager.d.ts.map +1 -1
- package/dist/tasks/workflow-manager.js +13 -7
- package/dist/template/entity-converter.d.ts +1 -1
- package/dist/template/entity-converter.d.ts.map +1 -1
- package/dist/template/entity-converter.js +2 -2
- package/dist/template/helpers.d.ts +8 -6
- package/dist/template/helpers.d.ts.map +1 -1
- package/dist/template/helpers.js +1 -1
- package/dist/template/implementations/generated.template.d.ts.map +1 -1
- package/dist/template/implementations/generated.template.js +4 -4
- package/dist/template/implementations/generated_http.template.d.ts +7 -4
- package/dist/template/implementations/generated_http.template.d.ts.map +1 -1
- package/dist/template/implementations/generated_http.template.js +21 -21
- package/dist/template/implementations/generated_sso.template.d.ts.map +1 -1
- package/dist/template/implementations/generated_sso.template.js +6 -3
- package/dist/template/implementations/http_validators.template.d.ts +18 -0
- package/dist/template/implementations/http_validators.template.d.ts.map +1 -0
- package/dist/template/implementations/http_validators.template.js +127 -0
- package/dist/template/implementations/model.template.d.ts.map +1 -1
- package/dist/template/implementations/model.template.js +1 -1
- package/dist/template/implementations/queries.template.js +1 -1
- package/dist/template/implementations/sd.template.d.ts.map +1 -1
- package/dist/template/implementations/sd.template.js +79 -39
- package/dist/template/implementations/services.template.d.ts.map +1 -1
- package/dist/template/implementations/services.template.js +6 -4
- package/dist/template/implementations/view_form.template.d.ts +6 -1
- package/dist/template/implementations/view_form.template.d.ts.map +1 -1
- package/dist/template/implementations/view_form.template.js +23 -15
- package/dist/template/implementations/view_list.template.d.ts.map +1 -1
- package/dist/template/implementations/view_list.template.js +11 -6
- package/dist/template/template-manager.d.ts.map +1 -1
- package/dist/template/template-manager.js +9 -7
- package/dist/template/template-types.d.ts +12 -5
- package/dist/template/template-types.d.ts.map +1 -1
- package/dist/template/template-types.js +1 -1
- package/dist/template/template.d.ts +2 -2
- package/dist/template/template.d.ts.map +1 -1
- package/dist/template/template.js +6 -4
- package/dist/template/zod-converter.d.ts +0 -19
- package/dist/template/zod-converter.d.ts.map +1 -1
- package/dist/template/zod-converter.js +100 -84
- package/dist/testing/_relation-graph.d.ts.map +1 -1
- package/dist/testing/_relation-graph.js +2 -1
- package/dist/testing/bootstrap.d.ts.map +1 -1
- package/dist/testing/bootstrap.js +9 -6
- package/dist/testing/data-explorer.d.ts +32 -7
- package/dist/testing/data-explorer.d.ts.map +1 -1
- package/dist/testing/data-explorer.js +77 -31
- package/dist/testing/dev-test-routes.d.ts +8 -1
- package/dist/testing/dev-test-routes.d.ts.map +1 -1
- package/dist/testing/dev-test-routes.js +125 -108
- package/dist/testing/dev-vitest-manager.d.ts +54 -8
- package/dist/testing/dev-vitest-manager.d.ts.map +1 -1
- package/dist/testing/dev-vitest-manager.js +24 -9
- package/dist/testing/faker-mappings.d.ts +412 -1
- package/dist/testing/faker-mappings.d.ts.map +1 -1
- package/dist/testing/faker-mappings.js +1 -1
- package/dist/testing/filesystem.d.ts +2 -0
- package/dist/testing/filesystem.d.ts.map +1 -0
- package/dist/testing/filesystem.js +7 -0
- package/dist/testing/fixture-generator.d.ts +25 -8
- package/dist/testing/fixture-generator.d.ts.map +1 -1
- package/dist/testing/fixture-generator.js +132 -73
- package/dist/testing/fixture-loader.d.ts +3 -1
- package/dist/testing/fixture-loader.d.ts.map +1 -1
- package/dist/testing/fixture-loader.js +1 -20
- package/dist/testing/fixture-manager.d.ts +8 -7
- package/dist/testing/fixture-manager.d.ts.map +1 -1
- package/dist/testing/fixture-manager.js +91 -59
- package/dist/testing/global-setup.d.ts.map +1 -1
- package/dist/testing/global-setup.js +5 -2
- package/dist/testing/index.d.ts +2 -0
- package/dist/testing/index.d.ts.map +1 -1
- package/dist/testing/index.js +6 -3
- package/dist/types/types.d.ts +101 -99
- package/dist/types/types.d.ts.map +1 -1
- package/dist/types/types.js +234 -225
- package/dist/ui/ai-api.d.ts.map +1 -1
- package/dist/ui/ai-api.js +1 -1
- package/dist/ui/ai-client.d.ts.map +1 -1
- package/dist/ui/ai-client.js +28 -18
- package/dist/ui/api.d.ts.map +1 -1
- package/dist/ui/api.js +135 -128
- package/dist/ui/async-route.d.ts +3 -0
- package/dist/ui/async-route.d.ts.map +1 -0
- package/dist/ui/async-route.js +12 -0
- package/dist/ui/cdd-service.d.ts +9 -7
- package/dist/ui/cdd-service.d.ts.map +1 -1
- package/dist/ui/cdd-service.js +7 -5
- package/dist/ui/migrations-api.d.ts.map +1 -1
- package/dist/ui/migrations-api.js +17 -15
- package/dist/ui-web/assets/index-DV1AAq6W.js +178 -0
- package/dist/ui-web/index.html +1 -1
- package/dist/utils/formatter.d.ts.map +1 -1
- package/dist/utils/formatter.js +7 -5
- package/dist/utils/fs-utils.d.ts +3 -3
- package/dist/utils/fs-utils.d.ts.map +1 -1
- package/dist/utils/fs-utils.js +6 -6
- package/dist/utils/model.d.ts +3 -5
- package/dist/utils/model.d.ts.map +1 -1
- package/dist/utils/model.js +1 -1
- package/dist/utils/object-utils.d.ts +1 -1
- package/dist/utils/object-utils.d.ts.map +1 -1
- package/dist/utils/object-utils.js +17 -16
- package/dist/utils/process-utils.d.ts.map +1 -1
- package/dist/utils/process-utils.js +4 -2
- package/dist/utils/runtime-value.d.ts +13 -0
- package/dist/utils/runtime-value.d.ts.map +1 -0
- package/dist/utils/runtime-value.js +40 -0
- package/dist/utils/sql-parser.d.ts +8 -1
- package/dist/utils/sql-parser.d.ts.map +1 -1
- package/dist/utils/sql-parser.js +6 -3
- package/dist/utils/type-utils.d.ts.map +1 -1
- package/dist/utils/type-utils.js +10 -8
- package/dist/utils/utils.d.ts +2 -2
- package/dist/utils/utils.d.ts.map +1 -1
- package/dist/utils/utils.js +11 -8
- package/dist/utils/zod-error.d.ts.map +1 -1
- package/dist/utils/zod-error.js +7 -4
- package/dist/vector/chunking.d.ts.map +1 -1
- package/dist/vector/chunking.js +1 -1
- package/dist/vector/embedding.d.ts.map +1 -1
- package/dist/vector/embedding.js +1 -1
- package/dist/vector/types.d.ts +3 -2
- package/dist/vector/types.d.ts.map +1 -1
- package/package.json +5 -3
- package/src/ai/agents/agent.ts +5 -5
- package/src/ai/agents/types.ts +1 -1
- package/src/ai/providers/rtzr/__tests__/model.test.ts +2 -2
- package/src/ai/providers/rtzr/error.ts +5 -3
- package/src/ai/providers/rtzr/model.ts +3 -2
- package/src/ai/providers/rtzr/options.ts +10 -5
- package/src/ai/providers/rtzr/provider.ts +10 -10
- package/src/ai/providers/rtzr/utils.ts +3 -1
- package/src/api/__tests__/config.test.ts +11 -21
- package/src/api/__tests__/sonamu.http-validator.test.ts +512 -0
- package/src/api/__tests__/sonamu.websocket.test.ts +51 -41
- package/src/api/__tests__/zod-compiler-policy.test.ts +95 -0
- package/src/api/caster.ts +6 -8
- package/src/api/code-converters.ts +136 -36
- package/src/api/config.ts +62 -4
- package/src/api/context.ts +3 -3
- package/src/api/decorators.ts +28 -17
- package/src/api/http-validator.ts +149 -0
- package/src/api/sonamu.ts +459 -152
- package/src/api/websocket-helpers.ts +24 -17
- package/src/auth/audit-log/builders.ts +3 -2
- package/src/auth/audit-log/client-ip.ts +4 -2
- package/src/auth/audit-log/events.ts +15 -1
- package/src/auth/audit-log/plugin.ts +129 -200
- package/src/auth/audit-log-ingestor.ts +19 -15
- package/src/auth/auth-generator.ts +10 -5
- package/src/auth/better-auth-request.ts +4 -3
- package/src/auth/knex-adapter.ts +8 -2
- package/src/auth/plugins/entity-definitions/index.ts +6 -5
- package/src/bin/__tests__/http-validator-benchmark.test.ts +94 -0
- package/src/bin/__tests__/test-command.test.ts +9 -15
- package/src/bin/__tests__/ts-loader-register.test.ts +15 -17
- package/src/bin/__tests__/zod-compiler-build.test.ts +307 -0
- package/src/bin/build-config.ts +167 -0
- package/src/bin/cli.ts +153 -36
- package/src/bin/compiler-policy.ts +35 -0
- package/src/bin/fixture.ts +14 -3
- package/src/bin/test-command.ts +74 -29
- package/src/bin/ts-loader-registration.ts +22 -4
- package/src/cache/decorator.ts +10 -3
- package/src/compress/compress.ts +17 -4
- package/src/cone/cone-generator.ts +34 -6
- package/src/database/__tests__/db.test.ts +1 -0
- package/src/database/__tests__/puri.test.ts +16 -15
- package/src/database/__tests__/transaction-scope.test.ts +5 -0
- package/src/database/_batch_update.ts +1 -0
- package/src/database/base-model.ts +81 -50
- package/src/database/base-model.types.ts +6 -6
- package/src/database/db.ts +29 -19
- package/src/database/knex.ts +30 -17
- package/src/database/puri-subset.test-d.ts +17 -0
- package/src/database/puri.ts +181 -143
- package/src/database/puri.types.test-d.ts +31 -1
- package/src/database/puri.types.ts +23 -21
- package/src/database/upsert-builder.ts +75 -53
- package/src/dict/sd.ts +15 -5
- package/src/dict/sonamu-dictionary.ts +6 -6
- package/src/dict/utils.ts +9 -1
- package/src/entity/entity-manager.ts +26 -9
- package/src/entity/entity-template-cone.ts +5 -10
- package/src/entity/entity.ts +50 -34
- package/src/env.ts +7 -3
- package/src/exceptions/error-handler.ts +17 -2
- package/src/exceptions/so-exceptions.ts +26 -20
- package/src/filter/utils.ts +21 -11
- package/src/index.ts +3 -0
- package/src/logger/configure.ts +26 -18
- package/src/migration/__tests__/migrator.test.ts +50 -57
- package/src/migration/code-generation.ts +132 -104
- package/src/migration/index-where-predicate.ts +51 -24
- package/src/migration/migration-set.ts +11 -5
- package/src/migration/migrator.ts +68 -41
- package/src/migration/postgresql-schema-reader.ts +52 -47
- package/src/migration/slack-confirm.ts +17 -15
- package/src/naite/naite-reporter.ts +1 -1
- package/src/naite/naite.ts +97 -24
- package/src/runtime-type.ts +34 -0
- package/src/ssr/hmr-opt-out.ts +78 -0
- package/src/ssr/renderer.ts +6 -0
- package/src/storage/base-file.ts +13 -13
- package/src/storage/buffered-file.ts +11 -11
- package/src/storage/s3-driver.ts +4 -1
- package/src/storage/uploaded-file.ts +8 -8
- package/src/stream/__tests__/ws-contracts.test.ts +4 -2
- package/src/stream/__tests__/ws-telemetry.test.ts +1 -1
- package/src/stream/__tests__/ws.test.ts +30 -6
- package/src/stream/sse.ts +12 -11
- package/src/stream/ws-core.ts +1 -1
- package/src/stream/ws-delivery.ts +16 -7
- package/src/stream/ws-local-connection-store.ts +2 -3
- package/src/stream/ws-presence-store.ts +6 -1
- package/src/stream/ws-registry.ts +16 -7
- package/src/stream/ws-telemetry.ts +66 -43
- package/src/stream/ws.ts +73 -39
- package/src/syncer/__tests__/api-parser.websocket-type-ref.test.ts +3 -2
- package/src/syncer/__tests__/http-validator-registry.test.ts +137 -0
- package/src/syncer/api-parser.ts +67 -27
- package/src/syncer/checksum.ts +17 -11
- package/src/syncer/code-generator.ts +25 -17
- package/src/syncer/entity-operations.ts +3 -5
- package/src/syncer/file-copy.ts +46 -0
- package/src/syncer/file-patterns.ts +11 -8
- package/src/syncer/file-tracking.ts +3 -4
- package/src/syncer/filesystem-dependencies.ts +73 -0
- package/src/syncer/module-loader.ts +8 -4
- package/src/syncer/syncer-actions.ts +56 -18
- package/src/syncer/syncer.ts +116 -43
- package/src/syncer/watcher.ts +8 -4
- package/src/tasks/decorator.ts +20 -12
- package/src/tasks/step-wrapper.ts +19 -9
- package/src/tasks/workflow-manager.ts +15 -9
- package/src/template/__tests__/http_validators.template.test.ts +160 -0
- package/src/template/__tests__/services.template.mutation.test.ts +24 -23
- package/src/template/__tests__/services.template.websocket.test.ts +21 -25
- package/src/template/entity-converter.ts +5 -2
- package/src/template/helpers.ts +8 -9
- package/src/template/implementations/generated.template.ts +5 -4
- package/src/template/implementations/generated_http.template.ts +61 -15
- package/src/template/implementations/generated_sso.template.ts +15 -4
- package/src/template/implementations/http_validators.template.ts +175 -0
- package/src/template/implementations/model.template.ts +3 -1
- package/src/template/implementations/sd.template.ts +81 -41
- package/src/template/implementations/services.template.ts +2 -2
- package/src/template/implementations/view_form.template.ts +56 -39
- package/src/template/implementations/view_list.template.ts +31 -23
- package/src/template/template-manager.ts +15 -13
- package/src/template/template-types.ts +13 -5
- package/src/template/template.ts +4 -3
- package/src/template/zod-converter.ts +206 -91
- package/src/testing/__tests__/dev-test-routes.test.ts +85 -25
- package/src/testing/__tests__/dev-vitest-manager.test.ts +15 -15
- package/src/testing/_relation-graph.ts +4 -1
- package/src/testing/bootstrap.ts +12 -5
- package/src/testing/data-explorer.ts +102 -53
- package/src/testing/dev-test-routes.ts +87 -50
- package/src/testing/dev-vitest-manager.ts +88 -32
- package/src/testing/faker-mappings.ts +2 -2
- package/src/testing/filesystem.ts +1 -0
- package/src/testing/fixture-generator.ts +191 -131
- package/src/testing/fixture-loader.ts +5 -1
- package/src/testing/fixture-manager.ts +129 -90
- package/src/testing/global-setup.ts +7 -3
- package/src/testing/index.ts +5 -0
- package/src/types/__tests__/entity-json-schema-search-text.test.ts +9 -3
- package/src/types/types.ts +184 -158
- package/src/ui/ai-api.ts +9 -7
- package/src/ui/ai-client.ts +61 -56
- package/src/ui/api.ts +727 -616
- package/src/ui/async-route.ts +4 -0
- package/src/ui/cdd-service.ts +35 -12
- package/src/ui/migrations-api.ts +63 -51
- package/src/utils/formatter.ts +7 -3
- package/src/utils/fs-utils.ts +5 -5
- package/src/utils/model.ts +4 -5
- package/src/utils/object-utils.ts +32 -22
- package/src/utils/process-utils.ts +4 -1
- package/src/utils/runtime-value.ts +43 -0
- package/src/utils/sql-parser.ts +13 -6
- package/src/utils/type-utils.ts +9 -7
- package/src/utils/utils.ts +19 -21
- package/src/utils/zod-error.ts +4 -2
- package/src/vector/chunking.ts +6 -1
- package/src/vector/embedding.ts +2 -1
- package/src/vector/types.ts +4 -2
- package/tsdown.api.config.ts +5 -2
- package/dist/ui-web/assets/index-C0m1pk6K.js +0 -177
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { __esmMin } from "../_virtual/_rolldown/runtime.js";
|
|
2
|
+
import { z } from "zod";
|
|
2
3
|
//#region src/testing/dev-vitest-manager.ts
|
|
3
4
|
function mapModuleState(state) {
|
|
4
5
|
switch (state) {
|
|
@@ -101,14 +102,16 @@ function getResultCompletenessScore(node) {
|
|
|
101
102
|
}
|
|
102
103
|
return score;
|
|
103
104
|
}
|
|
104
|
-
function
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
105
|
+
function parseSerializedTraces(values) {
|
|
106
|
+
return values.flatMap((value) => {
|
|
107
|
+
const parsed = serializedTraceSchema.safeParse(value);
|
|
108
|
+
return parsed.success ? [parsed.data] : [];
|
|
109
|
+
});
|
|
108
110
|
}
|
|
109
|
-
var DevVitestManager;
|
|
111
|
+
var DevVitestManager, serializedTraceSchema;
|
|
110
112
|
var init_dev_vitest_manager = __esmMin((() => {
|
|
111
113
|
DevVitestManager = class {
|
|
114
|
+
vitestFactory;
|
|
112
115
|
vitest = null;
|
|
113
116
|
running = false;
|
|
114
117
|
lastRunAt = null;
|
|
@@ -117,6 +120,9 @@ var init_dev_vitest_manager = __esmMin((() => {
|
|
|
117
120
|
closed = false;
|
|
118
121
|
eventListeners = /* @__PURE__ */ new Set();
|
|
119
122
|
currentRunContext = null;
|
|
123
|
+
constructor(vitestFactory) {
|
|
124
|
+
this.vitestFactory = vitestFactory;
|
|
125
|
+
}
|
|
120
126
|
addEventListener(listener) {
|
|
121
127
|
this.eventListeners.add(listener);
|
|
122
128
|
}
|
|
@@ -128,7 +134,9 @@ var init_dev_vitest_manager = __esmMin((() => {
|
|
|
128
134
|
}
|
|
129
135
|
async start(vitestConfigPath) {
|
|
130
136
|
if (this.vitest) return;
|
|
131
|
-
const
|
|
137
|
+
const createVitest = this.vitestFactory ?? (async (...args) => {
|
|
138
|
+
return (await import("vitest/node")).createVitest(...args);
|
|
139
|
+
});
|
|
132
140
|
const viteOverrides = { server: { watch: null } };
|
|
133
141
|
const cliOptions = {
|
|
134
142
|
watch: true,
|
|
@@ -213,7 +221,7 @@ var init_dev_vitest_manager = __esmMin((() => {
|
|
|
213
221
|
const result = await entry.task();
|
|
214
222
|
entry.resolve(result);
|
|
215
223
|
} catch (err) {
|
|
216
|
-
entry.reject(err);
|
|
224
|
+
entry.reject(err instanceof Error ? err : new Error(String(err)));
|
|
217
225
|
}
|
|
218
226
|
}
|
|
219
227
|
} finally {
|
|
@@ -455,7 +463,7 @@ var init_dev_vitest_manager = __esmMin((() => {
|
|
|
455
463
|
}
|
|
456
464
|
const raw = testCase.meta().traces;
|
|
457
465
|
let traces = [];
|
|
458
|
-
if (Array.isArray(raw) && raw.length > 0) traces = raw
|
|
466
|
+
if (Array.isArray(raw) && raw.length > 0) traces = parseSerializedTraces(raw);
|
|
459
467
|
return {
|
|
460
468
|
id: `${file}::${testCase.fullName}`,
|
|
461
469
|
kind: "test",
|
|
@@ -471,9 +479,16 @@ var init_dev_vitest_manager = __esmMin((() => {
|
|
|
471
479
|
};
|
|
472
480
|
}
|
|
473
481
|
};
|
|
482
|
+
serializedTraceSchema = z.object({
|
|
483
|
+
key: z.string(),
|
|
484
|
+
value: z.unknown(),
|
|
485
|
+
filePath: z.string(),
|
|
486
|
+
lineNumber: z.number(),
|
|
487
|
+
at: z.string()
|
|
488
|
+
});
|
|
474
489
|
}));
|
|
475
490
|
//#endregion
|
|
476
491
|
init_dev_vitest_manager();
|
|
477
492
|
export { DevVitestManager, init_dev_vitest_manager };
|
|
478
493
|
|
|
479
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGV2LXZpdGVzdC1tYW5hZ2VyLmpzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90ZXN0aW5nL2Rldi12aXRlc3QtbWFuYWdlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB0eXBlIFVzZXJDb25maWcgYXMgVml0ZVVzZXJDb25maWcgfSBmcm9tIFwidml0ZVwiO1xuaW1wb3J0IHtcbiAgdHlwZSBDbGlPcHRpb25zLFxuICB0eXBlIFJlcG9ydGVyLFxuICB0eXBlIFRlc3RDYXNlLFxuICB0eXBlIFRlc3RNb2R1bGUsXG4gIHR5cGUgVGVzdFJ1blJlc3VsdCxcbiAgdHlwZSBUZXN0U3BlY2lmaWNhdGlvbixcbiAgdHlwZSBUZXN0U3VpdGUsXG4gIHR5cGUgVml0ZXN0LFxufSBmcm9tIFwidml0ZXN0L25vZGVcIjtcblxuaW1wb3J0IHsgdHlwZSBTZXJpYWxpemVkVHJhY2UgfSBmcm9tIFwiLi4vbmFpdGUvbmFpdGVcIjtcblxuLy8g7YWM7Iqk7Yq4IO2VnCDqsbTsnZggdHJhY2Ug66qo7J2MXG5leHBvcnQgdHlwZSBUZXN0Tm9kZUtpbmQgPSBcImZpbGVcIiB8IFwic3VpdGVcIiB8IFwidGVzdFwiO1xuZXhwb3J0IHR5cGUgVGVzdFN0YXRlID0gXCJwYXNzZWRcIiB8IFwiZmFpbGVkXCIgfCBcInNraXBwZWRcIiB8IFwidG9kb1wiIHwgXCJydW5uaW5nXCIgfCBcInVua25vd25cIjtcblxuZXhwb3J0IHR5cGUgVGVzdENhc2VSZXN1bHQgPSB7XG4gIGlkOiBzdHJpbmc7XG4gIGtpbmQ6IFRlc3ROb2RlS2luZDtcbiAgbmFtZTogc3RyaW5nO1xuICBmdWxsTmFtZTogc3RyaW5nO1xuICBmaWxlOiBzdHJpbmc7XG4gIHN0YXRlOiBUZXN0U3RhdGU7XG4gIGR1cmF0aW9uTXM6IG51bWJlciB8IG51bGw7XG4gIGNvdW50czogeyB0b3RhbDogbnVtYmVyOyBwYXNzZWQ6IG51bWJlcjsgZmFpbGVkOiBudW1iZXI7IHNraXBwZWQ6IG51bWJlciB9O1xuICBlcnJvcjogeyBtZXNzYWdlOiBzdHJpbmc7IHN0YWNrPzogc3RyaW5nIH0gfCBudWxsO1xuICB0cmFjZXM6IFNlcmlhbGl6ZWRUcmFjZVtdO1xuICBjaGlsZHJlbjogVGVzdENhc2VSZXN1bHRbXTtcbn07XG5cbmV4cG9ydCB0eXBlIFJ1blJlc3VsdCA9IHtcbiAgb2s6IGJvb2xlYW47XG4gIHN1bW1hcnk6IHtcbiAgICB0b3RhbDogbnVtYmVyO1xuICAgIHBhc3NlZDogbnVtYmVyO1xuICAgIGZhaWxlZDogbnVtYmVyO1xuICAgIHNraXBwZWQ6IG51bWJlcjtcbiAgICBkdXJhdGlvbk1zOiBudW1iZXI7XG4gIH07XG4gIHJlc3VsdHM6IFRlc3RDYXNlUmVzdWx0W107XG59O1xuXG5leHBvcnQgdHlwZSBNYW5hZ2VyU3RhdHVzID0ge1xuICByZWFkeTogYm9vbGVhbjtcbiAgcnVubmluZzogYm9vbGVhbjtcbiAgbGFzdFJ1bkF0OiBzdHJpbmcgfCBudWxsO1xufTtcblxuZXhwb3J0IHR5cGUgVGVzdEV2ZW50TGlzdGVuZXIgPSAoZXZlbnQ6IHN0cmluZywgZGF0YTogdW5rbm93bikgPT4gdm9pZDtcblxudHlwZSBRdWV1ZUVudHJ5ID0ge1xuICBydW5JZDogc3RyaW5nO1xuICB0YXNrOiAoKSA9PiBQcm9taXNlPFJ1blJlc3VsdD47XG4gIHJlc29sdmU6IChyZXN1bHQ6IFJ1blJlc3VsdCkgPT4gdm9pZDtcbiAgcmVqZWN0OiAoZXJyb3I6IHVua25vd24pID0+IHZvaWQ7XG59O1xuXG5leHBvcnQgY2xhc3MgRGV2Vml0ZXN0TWFuYWdlciB7XG4gIHByaXZhdGUgdml0ZXN0OiBWaXRlc3QgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBydW5uaW5nID0gZmFsc2U7XG4gIHByaXZhdGUgbGFzdFJ1bkF0OiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBxdWV1ZTogUXVldWVFbnRyeVtdID0gW107XG4gIHByaXZhdGUgcHJvY2Vzc2luZyA9IGZhbHNlO1xuICBwcml2YXRlIGNsb3NlZCA9IGZhbHNlO1xuICBwcml2YXRlIGV2ZW50TGlzdGVuZXJzID0gbmV3IFNldDxUZXN0RXZlbnRMaXN0ZW5lcj4oKTtcbiAgcHJpdmF0ZSBjdXJyZW50UnVuQ29udGV4dDoge1xuICAgIHJ1bklkOiBzdHJpbmc7XG4gICAgc3RhcnRlZEF0OiBzdHJpbmc7XG4gICAgc3BlY01vZHVsZUlkczogU2V0PHN0cmluZz47XG4gIH0gfCBudWxsID0gbnVsbDtcblxuICBhZGRFdmVudExpc3RlbmVyKGxpc3RlbmVyOiBUZXN0RXZlbnRMaXN0ZW5lcik6IHZvaWQge1xuICAgIHRoaXMuZXZlbnRMaXN0ZW5lcnMuYWRkKGxpc3RlbmVyKTtcbiAgfVxuXG4gIHJlbW92ZUV2ZW50TGlzdGVuZXIobGlzdGVuZXI6IFRlc3RFdmVudExpc3RlbmVyKTogdm9pZCB7XG4gICAgdGhpcy5ldmVudExpc3RlbmVycy5kZWxldGUobGlzdGVuZXIpO1xuICB9XG5cbiAgZW1pdEV2ZW50KGV2ZW50OiBzdHJpbmcsIGRhdGE6IHVua25vd24pOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IGxpc3RlbmVyIG9mIHRoaXMuZXZlbnRMaXN0ZW5lcnMpIHtcbiAgICAgIGxpc3RlbmVyKGV2ZW50LCBkYXRhKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBzdGFydCh2aXRlc3RDb25maWdQYXRoPzogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8g7J2066+4IOyLnOyekeuQnCDqsr3smrAg7KSR67O1IOy0iOq4sO2ZlOulvCDrsKnsp4BcbiAgICBpZiAodGhpcy52aXRlc3QpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB7IGNyZWF0ZVZpdGVzdCB9ID0gYXdhaXQgaW1wb3J0KFwidml0ZXN0L25vZGVcIik7XG5cbiAgICBjb25zdCB2aXRlT3ZlcnJpZGVzOiBWaXRlVXNlckNvbmZpZyA9IHtcbiAgICAgIHNlcnZlcjogeyB3YXRjaDogbnVsbCB9LFxuICAgIH07XG5cbiAgICBjb25zdCBjbGlPcHRpb25zOiBDbGlPcHRpb25zID0ge1xuICAgICAgd2F0Y2g6IHRydWUsXG4gICAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgICAgZm9yY2VSZXJ1blRyaWdnZXJzOiBbXSxcbiAgICAgIGNvbmZpZzogdml0ZXN0Q29uZmlnUGF0aCxcbiAgICAgIGVudjoge1xuICAgICAgICBOT0RFX0VOVjogXCJ0ZXN0XCIsXG4gICAgICB9LFxuICAgIH07XG5cbiAgICBjb25zdCByZWFsdGltZVJlcG9ydGVyID0gdGhpcy5jcmVhdGVSZWFsdGltZVByb2dyZXNzUmVwb3J0ZXIoKTtcbiAgICB2aXRlT3ZlcnJpZGVzLnBsdWdpbnMgPSBbXG4gICAgICAuLi4odml0ZU92ZXJyaWRlcy5wbHVnaW5zID8/IFtdKSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogXCJzb25hbXUtcmVhbHRpbWUtcmVwb3J0ZXJcIixcbiAgICAgICAgY29uZmlndXJlVml0ZXN0KHsgdml0ZXN0OiB2aXRlc3RJbnN0YW5jZSB9OiB7IHZpdGVzdDogVml0ZXN0IH0pIHtcbiAgICAgICAgICBjb25zdCByZXBvcnRlcnMgPSB2aXRlc3RJbnN0YW5jZS5jb25maWcucmVwb3J0ZXJzO1xuICAgICAgICAgIGlmICghcmVwb3J0ZXJzLmluY2x1ZGVzKHJlYWx0aW1lUmVwb3J0ZXIpKSB7XG4gICAgICAgICAgICByZXBvcnRlcnMucHVzaChyZWFsdGltZVJlcG9ydGVyKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIF07XG5cbiAgICBjb25zdCB2aXRlc3QgPSBhd2FpdCBjcmVhdGVWaXRlc3QoXCJ0ZXN0XCIsIGNsaU9wdGlvbnMsIHZpdGVPdmVycmlkZXMpO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB2aXRlc3Quc3RhbmRhbG9uZSgpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgYXdhaXQgdml0ZXN0LmNsb3NlKCk7XG4gICAgICB0aHJvdyBlcnI7XG4gICAgfVxuXG4gICAgdGhpcy52aXRlc3QgPSB2aXRlc3Q7XG4gICAgdGhpcy52aXRlc3Qub25GaWx0ZXJXYXRjaGVkU3BlY2lmaWNhdGlvbigoX3NwZWMpID0+IGZhbHNlKTtcbiAgICB0aGlzLmNsb3NlZCA9IGZhbHNlO1xuICB9XG5cbiAgYXN5bmMgcnVuKG9wdHM6IHsgZmlsZXM/OiBzdHJpbmdbXTsgcGF0dGVybj86IHN0cmluZyB9LCBydW5JZDogc3RyaW5nKTogUHJvbWlzZTxSdW5SZXN1bHQ+IHtcbiAgICBpZiAodGhpcy5jbG9zZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkRldlZpdGVzdE1hbmFnZXIgaXMgYWxyZWFkeSBzaHV0IGRvd25cIik7XG4gICAgfVxuICAgIGlmICghdGhpcy52aXRlc3QpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkRldlZpdGVzdE1hbmFnZXIgaXMgbm90IHN0YXJ0ZWRcIik7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPFJ1blJlc3VsdD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY29uc3QgdGFzayA9ICgpID0+IHRoaXMuZXhlY3V0ZVJ1bihvcHRzLCBydW5JZCk7XG4gICAgICB0aGlzLnF1ZXVlLnB1c2goeyBydW5JZCwgdGFzaywgcmVzb2x2ZSwgcmVqZWN0IH0pO1xuICAgICAgdGhpcy5wcm9jZXNzUXVldWUoKTtcbiAgICB9KTtcbiAgfVxuXG4gIGdldFN0YXR1cygpOiBNYW5hZ2VyU3RhdHVzIHtcbiAgICByZXR1cm4ge1xuICAgICAgcmVhZHk6IHRoaXMudml0ZXN0ICE9PSBudWxsICYmICF0aGlzLmNsb3NlZCxcbiAgICAgIHJ1bm5pbmc6IHRoaXMucnVubmluZyxcbiAgICAgIGxhc3RSdW5BdDogdGhpcy5sYXN0UnVuQXQsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiDrs4Dqsr3rkJwg7YyM7J287J2EIFZpdGVzdCDrqqjrk4gg6re4656Y7ZSE7JeQ7IScIOustO2aqO2ZlO2VqeuLiOuLpC5cbiAgICogaG1yQW5kU3luY+yXkOyEnCDtmLjstpzrkJjslrQg64uk7J2MIO2FjOyKpO2KuCDsi6Ttlokg7IucIOy1nOyLoCDsvZTrk5zrpbwg7IKs7Jqp7ZWY64+E66GdIO2VqeuLiOuLpC5cbiAgICovXG4gIGludmFsaWRhdGVGaWxlcyhmaWxlUGF0aHM6IHN0cmluZ1tdKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnZpdGVzdCB8fCB0aGlzLmNsb3NlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IGZpbGVQYXRoIG9mIGZpbGVQYXRocykge1xuICAgICAgdGhpcy52aXRlc3QuaW52YWxpZGF0ZUZpbGUoZmlsZVBhdGgpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHNodXRkb3duKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLmNsb3NlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmNsb3NlZCA9IHRydWU7XG5cbiAgICAvLyDtgZDsl5Ag64Ko7J2AIOyekeyXheuTpOydhCByZWplY3TtlZjsl6wg7Zi47Lac7J6Q6rCAIOyYgeq1rCDrjIDquLDtlZjsp4Ag7JWK64+E66GdIOygleumrFxuICAgIHdoaWxlICh0aGlzLnF1ZXVlLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IGVudHJ5ID0gdGhpcy5xdWV1ZS5zaGlmdCgpO1xuICAgICAgaWYgKGVudHJ5KSB7XG4gICAgICAgIGVudHJ5LnJlamVjdChuZXcgRXJyb3IoXCJEZXZWaXRlc3RNYW5hZ2VyIGlzIGJlaW5nIHNodXQgZG93blwiKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5ldmVudExpc3RlbmVycy5jbGVhcigpO1xuXG4gICAgaWYgKHRoaXMudml0ZXN0KSB7XG4gICAgICBhd2FpdCB0aGlzLnZpdGVzdC5jbG9zZSgpO1xuICAgICAgdGhpcy52aXRlc3QgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcHJvY2Vzc1F1ZXVlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLnByb2Nlc3NpbmcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5wcm9jZXNzaW5nID0gdHJ1ZTtcblxuICAgIHRyeSB7XG4gICAgICB3aGlsZSAodGhpcy5xdWV1ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnN0IGVudHJ5ID0gdGhpcy5xdWV1ZS5zaGlmdCgpO1xuICAgICAgICBpZiAoIWVudHJ5KSBicmVhaztcbiAgICAgICAgaWYgKHRoaXMuY2xvc2VkKSB7XG4gICAgICAgICAgZW50cnkucmVqZWN0KG5ldyBFcnJvcihcIkRldlZpdGVzdE1hbmFnZXIgaXMgYWxyZWFkeSBzaHV0IGRvd25cIikpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBlbnRyeS50YXNrKCk7XG4gICAgICAgICAgZW50cnkucmVzb2x2ZShyZXN1bHQpO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICBlbnRyeS5yZWplY3QoZXJyKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLnByb2Nlc3NpbmcgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGV4ZWN1dGVSdW4oXG4gICAgb3B0czogeyBmaWxlcz86IHN0cmluZ1tdOyBwYXR0ZXJuPzogc3RyaW5nIH0sXG4gICAgcnVuSWQ6IHN0cmluZyxcbiAgKTogUHJvbWlzZTxSdW5SZXN1bHQ+IHtcbiAgICBjb25zdCB2aXRlc3QgPSB0aGlzLnZpdGVzdDtcbiAgICBpZiAoIXZpdGVzdCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRGV2Vml0ZXN0TWFuYWdlciBpcyBub3Qgc3RhcnRlZFwiKTtcbiAgICB9XG5cbiAgICB0aGlzLnJ1bm5pbmcgPSB0cnVlO1xuICAgIGNvbnN0IHN0YXJ0VGltZSA9IERhdGUubm93KCk7XG5cbiAgICBpZiAob3B0cy5wYXR0ZXJuKSB7XG4gICAgICB2aXRlc3Quc2V0R2xvYmFsVGVzdE5hbWVQYXR0ZXJuKG9wdHMucGF0dGVybik7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHNwZWNzOiBUZXN0U3BlY2lmaWNhdGlvbltdID0gb3B0cy5maWxlc1xuICAgICAgICA/IGF3YWl0IHZpdGVzdC5nbG9iVGVzdFNwZWNpZmljYXRpb25zKG9wdHMuZmlsZXMpXG4gICAgICAgIDogYXdhaXQgdml0ZXN0Lmdsb2JUZXN0U3BlY2lmaWNhdGlvbnMoKTtcblxuICAgICAgY29uc3Qgc3BlY01vZHVsZUlkcyA9IG5ldyBTZXQoc3BlY3MubWFwKChzKSA9PiBzLm1vZHVsZUlkKSk7XG4gICAgICAvLyByb3V0ZXPsl5DshJwg7IOd7ISx7ZWcIHJ1bklk66W8IOq3uOuMgOuhnCDsgqzsmqntlZjsl6wgcnVuU3RhcnRlZC9ydW5Ob2RlUHJvZ3Jlc3MvcnVuQ29tcGxldGVkIOqwhCDsnbzqtIDshLEg67O07J6lXG4gICAgICB0aGlzLmN1cnJlbnRSdW5Db250ZXh0ID0ge1xuICAgICAgICBydW5JZCxcbiAgICAgICAgc3RhcnRlZEF0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICAgIHNwZWNNb2R1bGVJZHMsXG4gICAgICB9O1xuXG4gICAgICBjb25zdCBhbGxUZXN0c1J1biA9ICFvcHRzLmZpbGVzIHx8IG9wdHMuZmlsZXMubGVuZ3RoID09PSAwO1xuICAgICAgY29uc3QgcnVuUmVzdWx0OiBUZXN0UnVuUmVzdWx0ID0gYXdhaXQgdml0ZXN0LnJ1blRlc3RTcGVjaWZpY2F0aW9ucyhzcGVjcywgYWxsVGVzdHNSdW4pO1xuXG4gICAgICBjb25zdCBkdXJhdGlvbk1zID0gRGF0ZS5ub3coKSAtIHN0YXJ0VGltZTtcbiAgICAgIHRoaXMubGFzdFJ1bkF0ID0gbmV3IERhdGUoKS50b0lTT1N0cmluZygpO1xuXG4gICAgICByZXR1cm4gdGhpcy5jb2xsZWN0UmVzdWx0cyhydW5SZXN1bHQsIGR1cmF0aW9uTXMsIHNwZWNNb2R1bGVJZHMpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLmN1cnJlbnRSdW5Db250ZXh0ID0gbnVsbDtcbiAgICAgIGlmIChvcHRzLnBhdHRlcm4pIHtcbiAgICAgICAgdml0ZXN0LnJlc2V0R2xvYmFsVGVzdE5hbWVQYXR0ZXJuKCk7XG4gICAgICB9XG4gICAgICB0aGlzLnJ1bm5pbmcgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZVJlYWx0aW1lUHJvZ3Jlc3NSZXBvcnRlcigpOiBSZXBvcnRlciB7XG4gICAgY29uc3QgZW1pdFByb2dyZXNzID0gKFxuICAgICAga2luZDogXCJmaWxlXCIgfCBcInN1aXRlXCIgfCBcInRlc3RcIixcbiAgICAgIHBoYXNlOiBcInJlYWR5XCIgfCBcInJlc3VsdFwiLFxuICAgICAgZmlsZUlkOiBzdHJpbmcsXG4gICAgICBub2RlSWQ6IHN0cmluZyxcbiAgICAgIHBhcmVudElkOiBzdHJpbmcgfCBudWxsLFxuICAgICAgbm9kZTogVGVzdENhc2VSZXN1bHQsXG4gICAgKSA9PiB7XG4gICAgICBjb25zdCBjdHggPSB0aGlzLmN1cnJlbnRSdW5Db250ZXh0O1xuICAgICAgaWYgKCFjdHgpIHJldHVybjtcbiAgICAgIHRoaXMuZW1pdEV2ZW50KFwicnVuTm9kZVByb2dyZXNzXCIsIHtcbiAgICAgICAgc2NoZW1hVmVyc2lvbjogMSxcbiAgICAgICAgcnVuSWQ6IGN0eC5ydW5JZCxcbiAgICAgICAgc3RhcnRlZEF0OiBjdHguc3RhcnRlZEF0LFxuICAgICAgICBhdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgICBraW5kLFxuICAgICAgICBwaGFzZSxcbiAgICAgICAgZmlsZUlkLFxuICAgICAgICBub2RlSWQsXG4gICAgICAgIHBhcmVudElkLFxuICAgICAgICBub2RlLFxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIHJldHVybiB7XG4gICAgICBvblRlc3RNb2R1bGVRdWV1ZWQ6ICh0ZXN0TW9kdWxlOiBUZXN0TW9kdWxlKSA9PiB7XG4gICAgICAgIGNvbnN0IGN0eCA9IHRoaXMuY3VycmVudFJ1bkNvbnRleHQ7XG4gICAgICAgIGlmICghY3R4IHx8ICFjdHguc3BlY01vZHVsZUlkcy5oYXModGVzdE1vZHVsZS5tb2R1bGVJZCkpIHJldHVybjtcbiAgICAgICAgY29uc3QgZmlsZUlkID0gdGVzdE1vZHVsZS5tb2R1bGVJZDtcbiAgICAgICAgZW1pdFByb2dyZXNzKFxuICAgICAgICAgIFwiZmlsZVwiLFxuICAgICAgICAgIFwicmVhZHlcIixcbiAgICAgICAgICBmaWxlSWQsXG4gICAgICAgICAgZmlsZUlkLFxuICAgICAgICAgIG51bGwsXG4gICAgICAgICAgdGhpcy5idWlsZEZpbGVQcm9ncmVzc05vZGUodGVzdE1vZHVsZSwgXCJyZWFkeVwiKSxcbiAgICAgICAgKTtcbiAgICAgIH0sXG4gICAgICBvblRlc3RNb2R1bGVFbmQ6ICh0ZXN0TW9kdWxlOiBUZXN0TW9kdWxlKSA9PiB7XG4gICAgICAgIGNvbnN0IGN0eCA9IHRoaXMuY3VycmVudFJ1bkNvbnRleHQ7XG4gICAgICAgIGlmICghY3R4IHx8ICFjdHguc3BlY01vZHVsZUlkcy5oYXModGVzdE1vZHVsZS5tb2R1bGVJZCkpIHJldHVybjtcbiAgICAgICAgY29uc3QgZmlsZUlkID0gdGVzdE1vZHVsZS5tb2R1bGVJZDtcbiAgICAgICAgZW1pdFByb2dyZXNzKFwiZmlsZVwiLCBcInJlc3VsdFwiLCBmaWxlSWQsIGZpbGVJZCwgbnVsbCwgdGhpcy5idWlsZEZpbGVOb2RlKHRlc3RNb2R1bGUpKTtcbiAgICAgIH0sXG4gICAgICBvblRlc3RTdWl0ZVJlYWR5OiAodGVzdFN1aXRlOiBUZXN0U3VpdGUpID0+IHtcbiAgICAgICAgY29uc3QgY3R4ID0gdGhpcy5jdXJyZW50UnVuQ29udGV4dDtcbiAgICAgICAgaWYgKCFjdHggfHwgIWN0eC5zcGVjTW9kdWxlSWRzLmhhcyh0ZXN0U3VpdGUubW9kdWxlLm1vZHVsZUlkKSkgcmV0dXJuO1xuICAgICAgICBjb25zdCBmaWxlSWQgPSB0ZXN0U3VpdGUubW9kdWxlLm1vZHVsZUlkO1xuICAgICAgICBjb25zdCBub2RlSWQgPSBgJHtmaWxlSWR9Ojoke3Rlc3RTdWl0ZS5mdWxsTmFtZX1gO1xuICAgICAgICBjb25zdCBwYXJlbnRJZCA9IHRoaXMucmVzb2x2ZVN1aXRlUGFyZW50SWQodGVzdFN1aXRlKTtcbiAgICAgICAgZW1pdFByb2dyZXNzKFxuICAgICAgICAgIFwic3VpdGVcIixcbiAgICAgICAgICBcInJlYWR5XCIsXG4gICAgICAgICAgZmlsZUlkLFxuICAgICAgICAgIG5vZGVJZCxcbiAgICAgICAgICBwYXJlbnRJZCxcbiAgICAgICAgICB0aGlzLmJ1aWxkU3VpdGVQcm9ncmVzc05vZGUodGVzdFN1aXRlLCBcInJlYWR5XCIpLFxuICAgICAgICApO1xuICAgICAgfSxcbiAgICAgIG9uVGVzdFN1aXRlUmVzdWx0OiAodGVzdFN1aXRlOiBUZXN0U3VpdGUpID0+IHtcbiAgICAgICAgY29uc3QgY3R4ID0gdGhpcy5jdXJyZW50UnVuQ29udGV4dDtcbiAgICAgICAgaWYgKCFjdHggfHwgIWN0eC5zcGVjTW9kdWxlSWRzLmhhcyh0ZXN0U3VpdGUubW9kdWxlLm1vZHVsZUlkKSkgcmV0dXJuO1xuICAgICAgICBjb25zdCBmaWxlSWQgPSB0ZXN0U3VpdGUubW9kdWxlLm1vZHVsZUlkO1xuICAgICAgICBjb25zdCBub2RlSWQgPSBgJHtmaWxlSWR9Ojoke3Rlc3RTdWl0ZS5mdWxsTmFtZX1gO1xuICAgICAgICBjb25zdCBwYXJlbnRJZCA9IHRoaXMucmVzb2x2ZVN1aXRlUGFyZW50SWQodGVzdFN1aXRlKTtcbiAgICAgICAgZW1pdFByb2dyZXNzKFxuICAgICAgICAgIFwic3VpdGVcIixcbiAgICAgICAgICBcInJlc3VsdFwiLFxuICAgICAgICAgIGZpbGVJZCxcbiAgICAgICAgICBub2RlSWQsXG4gICAgICAgICAgcGFyZW50SWQsXG4gICAgICAgICAgdGhpcy5idWlsZFN1aXRlTm9kZSh0ZXN0U3VpdGUsIGZpbGVJZCksXG4gICAgICAgICk7XG4gICAgICB9LFxuICAgICAgb25UZXN0Q2FzZVJlYWR5OiAodGVzdENhc2U6IFRlc3RDYXNlKSA9PiB7XG4gICAgICAgIGNvbnN0IGN0eCA9IHRoaXMuY3VycmVudFJ1bkNvbnRleHQ7XG4gICAgICAgIGlmICghY3R4IHx8ICFjdHguc3BlY01vZHVsZUlkcy5oYXModGVzdENhc2UubW9kdWxlLm1vZHVsZUlkKSkgcmV0dXJuO1xuICAgICAgICBjb25zdCBmaWxlSWQgPSB0ZXN0Q2FzZS5tb2R1bGUubW9kdWxlSWQ7XG4gICAgICAgIGNvbnN0IG5vZGVJZCA9IGAke2ZpbGVJZH06OiR7dGVzdENhc2UuZnVsbE5hbWV9YDtcbiAgICAgICAgY29uc3QgcGFyZW50SWQgPSB0aGlzLnJlc29sdmVUZXN0UGFyZW50SWQodGVzdENhc2UpO1xuICAgICAgICBlbWl0UHJvZ3Jlc3MoXG4gICAgICAgICAgXCJ0ZXN0XCIsXG4gICAgICAgICAgXCJyZWFkeVwiLFxuICAgICAgICAgIGZpbGVJZCxcbiAgICAgICAgICBub2RlSWQsXG4gICAgICAgICAgcGFyZW50SWQsXG4gICAgICAgICAgdGhpcy5idWlsZFRlc3RQcm9ncmVzc05vZGUodGVzdENhc2UsIFwicmVhZHlcIiksXG4gICAgICAgICk7XG4gICAgICB9LFxuICAgICAgb25UZXN0Q2FzZVJlc3VsdDogKHRlc3RDYXNlOiBUZXN0Q2FzZSkgPT4ge1xuICAgICAgICBjb25zdCBjdHggPSB0aGlzLmN1cnJlbnRSdW5Db250ZXh0O1xuICAgICAgICBpZiAoIWN0eCB8fCAhY3R4LnNwZWNNb2R1bGVJZHMuaGFzKHRlc3RDYXNlLm1vZHVsZS5tb2R1bGVJZCkpIHJldHVybjtcbiAgICAgICAgY29uc3QgZmlsZUlkID0gdGVzdENhc2UubW9kdWxlLm1vZHVsZUlkO1xuICAgICAgICBjb25zdCBub2RlSWQgPSBgJHtmaWxlSWR9Ojoke3Rlc3RDYXNlLmZ1bGxOYW1lfWA7XG4gICAgICAgIGNvbnN0IHBhcmVudElkID0gdGhpcy5yZXNvbHZlVGVzdFBhcmVudElkKHRlc3RDYXNlKTtcbiAgICAgICAgZW1pdFByb2dyZXNzKFxuICAgICAgICAgIFwidGVzdFwiLFxuICAgICAgICAgIFwicmVzdWx0XCIsXG4gICAgICAgICAgZmlsZUlkLFxuICAgICAgICAgIG5vZGVJZCxcbiAgICAgICAgICBwYXJlbnRJZCxcbiAgICAgICAgICB0aGlzLmJ1aWxkVGVzdE5vZGUodGVzdENhc2UsIGZpbGVJZCksXG4gICAgICAgICk7XG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkRmlsZVByb2dyZXNzTm9kZSh0ZXN0TW9kdWxlOiBUZXN0TW9kdWxlLCBfcGhhc2U6IFwicmVhZHlcIik6IFRlc3RDYXNlUmVzdWx0IHtcbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IHRlc3RNb2R1bGUubW9kdWxlSWQsXG4gICAgICBraW5kOiBcImZpbGVcIixcbiAgICAgIG5hbWU6IHRlc3RNb2R1bGUubW9kdWxlSWQsXG4gICAgICBmdWxsTmFtZTogdGVzdE1vZHVsZS5tb2R1bGVJZCxcbiAgICAgIGZpbGU6IHRlc3RNb2R1bGUubW9kdWxlSWQsXG4gICAgICBzdGF0ZTogXCJydW5uaW5nXCIsXG4gICAgICBkdXJhdGlvbk1zOiBudWxsLFxuICAgICAgY291bnRzOiB7IHRvdGFsOiAwLCBwYXNzZWQ6IDAsIGZhaWxlZDogMCwgc2tpcHBlZDogMCB9LFxuICAgICAgZXJyb3I6IG51bGwsXG4gICAgICB0cmFjZXM6IFtdLFxuICAgICAgY2hpbGRyZW46IFtdLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkU3VpdGVQcm9ncmVzc05vZGUodGVzdFN1aXRlOiBUZXN0U3VpdGUsIF9waGFzZTogXCJyZWFkeVwiKTogVGVzdENhc2VSZXN1bHQge1xuICAgIGNvbnN0IGZpbGVJZCA9IHRlc3RTdWl0ZS5tb2R1bGUubW9kdWxlSWQ7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlkOiBgJHtmaWxlSWR9Ojoke3Rlc3RTdWl0ZS5mdWxsTmFtZX1gLFxuICAgICAga2luZDogXCJzdWl0ZVwiLFxuICAgICAgbmFtZTogdGVzdFN1aXRlLm5hbWUsXG4gICAgICBmdWxsTmFtZTogdGVzdFN1aXRlLmZ1bGxOYW1lLFxuICAgICAgZmlsZTogZmlsZUlkLFxuICAgICAgc3RhdGU6IFwicnVubmluZ1wiLFxuICAgICAgZHVyYXRpb25NczogbnVsbCxcbiAgICAgIGNvdW50czogeyB0b3RhbDogMCwgcGFzc2VkOiAwLCBmYWlsZWQ6IDAsIHNraXBwZWQ6IDAgfSxcbiAgICAgIGVycm9yOiBudWxsLFxuICAgICAgdHJhY2VzOiBbXSxcbiAgICAgIGNoaWxkcmVuOiBbXSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZFRlc3RQcm9ncmVzc05vZGUodGVzdENhc2U6IFRlc3RDYXNlLCBfcGhhc2U6IFwicmVhZHlcIik6IFRlc3RDYXNlUmVzdWx0IHtcbiAgICBjb25zdCBmaWxlSWQgPSB0ZXN0Q2FzZS5tb2R1bGUubW9kdWxlSWQ7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlkOiBgJHtmaWxlSWR9Ojoke3Rlc3RDYXNlLmZ1bGxOYW1lfWAsXG4gICAgICBraW5kOiBcInRlc3RcIixcbiAgICAgIG5hbWU6IHRlc3RDYXNlLm5hbWUsXG4gICAgICBmdWxsTmFtZTogdGVzdENhc2UuZnVsbE5hbWUsXG4gICAgICBmaWxlOiBmaWxlSWQsXG4gICAgICBzdGF0ZTogXCJydW5uaW5nXCIsXG4gICAgICBkdXJhdGlvbk1zOiBudWxsLFxuICAgICAgY291bnRzOiB7IHRvdGFsOiAxLCBwYXNzZWQ6IDAsIGZhaWxlZDogMCwgc2tpcHBlZDogMCB9LFxuICAgICAgZXJyb3I6IG51bGwsXG4gICAgICB0cmFjZXM6IFtdLFxuICAgICAgY2hpbGRyZW46IFtdLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIHJlc29sdmVTdWl0ZVBhcmVudElkKHRlc3RTdWl0ZTogVGVzdFN1aXRlKTogc3RyaW5nIHtcbiAgICBjb25zdCBwYXJlbnQgPSB0ZXN0U3VpdGUucGFyZW50O1xuICAgIGlmIChwYXJlbnQudHlwZSA9PT0gXCJzdWl0ZVwiKSB7XG4gICAgICByZXR1cm4gYCR7dGVzdFN1aXRlLm1vZHVsZS5tb2R1bGVJZH06OiR7cGFyZW50LmZ1bGxOYW1lfWA7XG4gICAgfVxuICAgIHJldHVybiB0ZXN0U3VpdGUubW9kdWxlLm1vZHVsZUlkO1xuICB9XG5cbiAgcHJpdmF0ZSByZXNvbHZlVGVzdFBhcmVudElkKHRlc3RDYXNlOiBUZXN0Q2FzZSk6IHN0cmluZyB7XG4gICAgY29uc3QgcGFyZW50ID0gdGVzdENhc2UucGFyZW50O1xuICAgIGlmIChwYXJlbnQudHlwZSA9PT0gXCJzdWl0ZVwiKSB7XG4gICAgICByZXR1cm4gYCR7dGVzdENhc2UubW9kdWxlLm1vZHVsZUlkfTo6JHtwYXJlbnQuZnVsbE5hbWV9YDtcbiAgICB9XG4gICAgcmV0dXJuIHRlc3RDYXNlLm1vZHVsZS5tb2R1bGVJZDtcbiAgfVxuXG4gIHByaXZhdGUgY29sbGVjdFJlc3VsdHMoXG4gICAgcnVuUmVzdWx0OiBUZXN0UnVuUmVzdWx0LFxuICAgIGR1cmF0aW9uTXM6IG51bWJlcixcbiAgICBzcGVjTW9kdWxlSWRzOiBTZXQ8c3RyaW5nPixcbiAgKTogUnVuUmVzdWx0IHtcbiAgICBjb25zdCByZXN1bHRzQnlGaWxlID0gbmV3IE1hcDxzdHJpbmcsIFRlc3RDYXNlUmVzdWx0PigpO1xuXG4gICAgZm9yIChjb25zdCB0ZXN0TW9kdWxlIG9mIHJ1blJlc3VsdC50ZXN0TW9kdWxlcykge1xuICAgICAgaWYgKCFzcGVjTW9kdWxlSWRzLmhhcyh0ZXN0TW9kdWxlLm1vZHVsZUlkKSkgY29udGludWU7XG4gICAgICBjb25zdCBuZXh0UmVzdWx0ID0gdGhpcy5idWlsZEZpbGVOb2RlKHRlc3RNb2R1bGUpO1xuICAgICAgY29uc3QgZXhpc3RpbmdSZXN1bHQgPSByZXN1bHRzQnlGaWxlLmdldChuZXh0UmVzdWx0LmlkKTtcblxuICAgICAgaWYgKCFleGlzdGluZ1Jlc3VsdCkge1xuICAgICAgICByZXN1bHRzQnlGaWxlLnNldChuZXh0UmVzdWx0LmlkLCBuZXh0UmVzdWx0KTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGV4aXN0aW5nU2NvcmUgPSBnZXRSZXN1bHRDb21wbGV0ZW5lc3NTY29yZShleGlzdGluZ1Jlc3VsdCk7XG4gICAgICBjb25zdCBuZXh0U2NvcmUgPSBnZXRSZXN1bHRDb21wbGV0ZW5lc3NTY29yZShuZXh0UmVzdWx0KTtcbiAgICAgIGlmIChuZXh0U2NvcmUgPj0gZXhpc3RpbmdTY29yZSkge1xuICAgICAgICByZXN1bHRzQnlGaWxlLnNldChuZXh0UmVzdWx0LmlkLCBuZXh0UmVzdWx0KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHRzID0gQXJyYXkuZnJvbShyZXN1bHRzQnlGaWxlLnZhbHVlcygpKTtcbiAgICBjb25zdCBzdW1tYXJ5ID0gYWdncmVnYXRlQ291bnRzKHJlc3VsdHMpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIG9rOiBzdW1tYXJ5LmZhaWxlZCA9PT0gMCxcbiAgICAgIHN1bW1hcnk6IHsgLi4uc3VtbWFyeSwgZHVyYXRpb25NcyB9LFxuICAgICAgcmVzdWx0cyxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZEZpbGVOb2RlKHRlc3RNb2R1bGU6IFRlc3RNb2R1bGUpOiBUZXN0Q2FzZVJlc3VsdCB7XG4gICAgY29uc3QgZmlsZSA9IHRlc3RNb2R1bGUubW9kdWxlSWQ7XG4gICAgY29uc3QgY2hpbGRyZW4gPSB0aGlzLmJ1aWxkQ2hpbGROb2Rlcyh0ZXN0TW9kdWxlLCBmaWxlKTtcbiAgICBjb25zdCBjb3VudHMgPSBhZ2dyZWdhdGVDb3VudHMoY2hpbGRyZW4pO1xuICAgIGNvbnN0IG1vZHVsZVN0YXRlID0gdGVzdE1vZHVsZS5zdGF0ZSgpO1xuICAgIGNvbnN0IGRpYWdub3N0aWMgPSB0ZXN0TW9kdWxlLmRpYWdub3N0aWMoKTtcblxuICAgIHJldHVybiB7XG4gICAgICBpZDogdGVzdE1vZHVsZS5tb2R1bGVJZCxcbiAgICAgIGtpbmQ6IFwiZmlsZVwiLFxuICAgICAgbmFtZTogdGVzdE1vZHVsZS5tb2R1bGVJZCxcbiAgICAgIGZ1bGxOYW1lOiB0ZXN0TW9kdWxlLm1vZHVsZUlkLFxuICAgICAgZmlsZSxcbiAgICAgIHN0YXRlOiBtYXBNb2R1bGVTdGF0ZShtb2R1bGVTdGF0ZSksXG4gICAgICBkdXJhdGlvbk1zOiBkaWFnbm9zdGljLmR1cmF0aW9uID4gMCA/IGRpYWdub3N0aWMuZHVyYXRpb24gOiBudWxsLFxuICAgICAgY291bnRzLFxuICAgICAgZXJyb3I6IG51bGwsXG4gICAgICB0cmFjZXM6IFtdLFxuICAgICAgY2hpbGRyZW4sXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRDaGlsZE5vZGVzKHBhcmVudDogVGVzdE1vZHVsZSB8IFRlc3RTdWl0ZSwgZmlsZTogc3RyaW5nKTogVGVzdENhc2VSZXN1bHRbXSB7XG4gICAgY29uc3QgcmVzdWx0OiBUZXN0Q2FzZVJlc3VsdFtdID0gW107XG4gICAgZm9yIChjb25zdCBjaGlsZCBvZiBwYXJlbnQuY2hpbGRyZW4pIHtcbiAgICAgIGlmIChjaGlsZC50eXBlID09PSBcInN1aXRlXCIpIHtcbiAgICAgICAgcmVzdWx0LnB1c2godGhpcy5idWlsZFN1aXRlTm9kZShjaGlsZCwgZmlsZSkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzdWx0LnB1c2godGhpcy5idWlsZFRlc3ROb2RlKGNoaWxkLCBmaWxlKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkU3VpdGVOb2RlKHN1aXRlOiBUZXN0U3VpdGUsIGZpbGU6IHN0cmluZyk6IFRlc3RDYXNlUmVzdWx0IHtcbiAgICBjb25zdCBjaGlsZHJlbiA9IHRoaXMuYnVpbGRDaGlsZE5vZGVzKHN1aXRlLCBmaWxlKTtcbiAgICBjb25zdCBjb3VudHMgPSBhZ2dyZWdhdGVDb3VudHMoY2hpbGRyZW4pO1xuICAgIGNvbnN0IHN1aXRlU3RhdGUgPSBzdWl0ZS5zdGF0ZSgpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGlkOiBgJHtmaWxlfTo6JHtzdWl0ZS5mdWxsTmFtZX1gLFxuICAgICAga2luZDogXCJzdWl0ZVwiLFxuICAgICAgbmFtZTogc3VpdGUubmFtZSxcbiAgICAgIGZ1bGxOYW1lOiBzdWl0ZS5mdWxsTmFtZSxcbiAgICAgIGZpbGUsXG4gICAgICBzdGF0ZTogbWFwU3VpdGVTdGF0ZShzdWl0ZVN0YXRlKSxcbiAgICAgIGR1cmF0aW9uTXM6IG51bGwsXG4gICAgICBjb3VudHMsXG4gICAgICBlcnJvcjogbnVsbCxcbiAgICAgIHRyYWNlczogW10sXG4gICAgICBjaGlsZHJlbixcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZFRlc3ROb2RlKHRlc3RDYXNlOiBUZXN0Q2FzZSwgZmlsZTogc3RyaW5nKTogVGVzdENhc2VSZXN1bHQge1xuICAgIGNvbnN0IHJlc3VsdCA9IHRlc3RDYXNlLnJlc3VsdCgpO1xuICAgIGNvbnN0IGRpYWdub3N0aWMgPSB0ZXN0Q2FzZS5kaWFnbm9zdGljKCk7XG4gICAgY29uc3Qgc3RhdGUgPSBtYXBUZXN0UmVzdWx0KHJlc3VsdCwgdGVzdENhc2Uub3B0aW9ucy5tb2RlKTtcblxuICAgIGxldCBlcnJvcjogeyBtZXNzYWdlOiBzdHJpbmc7IHN0YWNrPzogc3RyaW5nIH0gfCBudWxsID0gbnVsbDtcbiAgICBpZiAocmVzdWx0LnN0YXRlID09PSBcImZhaWxlZFwiICYmIHJlc3VsdC5lcnJvcnMubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgZmlyc3RFcnJvciA9IHJlc3VsdC5lcnJvcnNbMF07XG4gICAgICBlcnJvciA9IHtcbiAgICAgICAgbWVzc2FnZTogZmlyc3RFcnJvci5tZXNzYWdlID8/IFN0cmluZyhmaXJzdEVycm9yKSxcbiAgICAgICAgc3RhY2s6IGZpcnN0RXJyb3Iuc3RhY2ssXG4gICAgICB9O1xuICAgIH1cblxuICAgIGNvbnN0IHJhdyA9IHRlc3RDYXNlLm1ldGEoKS50cmFjZXM7XG4gICAgbGV0IHRyYWNlczogU2VyaWFsaXplZFRyYWNlW10gPSBbXTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShyYXcpICYmIHJhdy5sZW5ndGggPiAwKSB7XG4gICAgICB0cmFjZXMgPSByYXcuZmlsdGVyKGlzU2VyaWFsaXplZFRyYWNlKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IGAke2ZpbGV9Ojoke3Rlc3RDYXNlLmZ1bGxOYW1lfWAsXG4gICAgICBraW5kOiBcInRlc3RcIixcbiAgICAgIG5hbWU6IHRlc3RDYXNlLm5hbWUsXG4gICAgICBmdWxsTmFtZTogdGVzdENhc2UuZnVsbE5hbWUsXG4gICAgICBmaWxlLFxuICAgICAgc3RhdGUsXG4gICAgICBkdXJhdGlvbk1zOiBkaWFnbm9zdGljID8gZGlhZ25vc3RpYy5kdXJhdGlvbiA6IG51bGwsXG4gICAgICBjb3VudHM6IGNvdW50RnJvbVN0YXRlKHN0YXRlKSxcbiAgICAgIGVycm9yLFxuICAgICAgdHJhY2VzLFxuICAgICAgY2hpbGRyZW46IFtdLFxuICAgIH07XG4gIH1cbn1cblxuZnVuY3Rpb24gbWFwTW9kdWxlU3RhdGUoc3RhdGU6IFwic2tpcHBlZFwiIHwgXCJwZW5kaW5nXCIgfCBcImZhaWxlZFwiIHwgXCJwYXNzZWRcIiB8IFwicXVldWVkXCIpOiBUZXN0U3RhdGUge1xuICBzd2l0Y2ggKHN0YXRlKSB7XG4gICAgY2FzZSBcInBhc3NlZFwiOlxuICAgICAgcmV0dXJuIFwicGFzc2VkXCI7XG4gICAgY2FzZSBcImZhaWxlZFwiOlxuICAgICAgcmV0dXJuIFwiZmFpbGVkXCI7XG4gICAgY2FzZSBcInNraXBwZWRcIjpcbiAgICAgIHJldHVybiBcInNraXBwZWRcIjtcbiAgICBjYXNlIFwicGVuZGluZ1wiOlxuICAgIGNhc2UgXCJxdWV1ZWRcIjpcbiAgICAgIHJldHVybiBcInJ1bm5pbmdcIjtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIFwidW5rbm93blwiO1xuICB9XG59XG5cbmZ1bmN0aW9uIG1hcFN1aXRlU3RhdGUoc3RhdGU6IFwic2tpcHBlZFwiIHwgXCJwZW5kaW5nXCIgfCBcImZhaWxlZFwiIHwgXCJwYXNzZWRcIik6IFRlc3RTdGF0ZSB7XG4gIHN3aXRjaCAoc3RhdGUpIHtcbiAgICBjYXNlIFwicGFzc2VkXCI6XG4gICAgICByZXR1cm4gXCJwYXNzZWRcIjtcbiAgICBjYXNlIFwiZmFpbGVkXCI6XG4gICAgICByZXR1cm4gXCJmYWlsZWRcIjtcbiAgICBjYXNlIFwic2tpcHBlZFwiOlxuICAgICAgcmV0dXJuIFwic2tpcHBlZFwiO1xuICAgIGNhc2UgXCJwZW5kaW5nXCI6XG4gICAgICByZXR1cm4gXCJydW5uaW5nXCI7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBcInVua25vd25cIjtcbiAgfVxufVxuXG5mdW5jdGlvbiBtYXBUZXN0UmVzdWx0KFxuICByZXN1bHQ6IFJldHVyblR5cGU8VGVzdENhc2VbXCJyZXN1bHRcIl0+LFxuICBtb2RlOiBcInJ1blwiIHwgXCJvbmx5XCIgfCBcInNraXBcIiB8IFwidG9kb1wiLFxuKTogVGVzdFN0YXRlIHtcbiAgc3dpdGNoIChyZXN1bHQuc3RhdGUpIHtcbiAgICBjYXNlIFwicGFzc2VkXCI6XG4gICAgICByZXR1cm4gXCJwYXNzZWRcIjtcbiAgICBjYXNlIFwiZmFpbGVkXCI6XG4gICAgICByZXR1cm4gXCJmYWlsZWRcIjtcbiAgICBjYXNlIFwic2tpcHBlZFwiOlxuICAgICAgcmV0dXJuIG1vZGUgPT09IFwidG9kb1wiID8gXCJ0b2RvXCIgOiBcInNraXBwZWRcIjtcbiAgICBjYXNlIFwicGVuZGluZ1wiOlxuICAgICAgcmV0dXJuIFwicnVubmluZ1wiO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gXCJ1bmtub3duXCI7XG4gIH1cbn1cblxuZnVuY3Rpb24gY291bnRGcm9tU3RhdGUoc3RhdGU6IFRlc3RTdGF0ZSk6IHtcbiAgdG90YWw6IG51bWJlcjtcbiAgcGFzc2VkOiBudW1iZXI7XG4gIGZhaWxlZDogbnVtYmVyO1xuICBza2lwcGVkOiBudW1iZXI7XG59IHtcbiAgc3dpdGNoIChzdGF0ZSkge1xuICAgIGNhc2UgXCJwYXNzZWRcIjpcbiAgICAgIHJldHVybiB7IHRvdGFsOiAxLCBwYXNzZWQ6IDEsIGZhaWxlZDogMCwgc2tpcHBlZDogMCB9O1xuICAgIGNhc2UgXCJmYWlsZWRcIjpcbiAgICAgIHJldHVybiB7IHRvdGFsOiAxLCBwYXNzZWQ6IDAsIGZhaWxlZDogMSwgc2tpcHBlZDogMCB9O1xuICAgIGNhc2UgXCJza2lwcGVkXCI6XG4gICAgY2FzZSBcInRvZG9cIjpcbiAgICAgIHJldHVybiB7IHRvdGFsOiAxLCBwYXNzZWQ6IDAsIGZhaWxlZDogMCwgc2tpcHBlZDogMSB9O1xuICAgIGRlZmF1bHQ6XG4gICAgICAvLyBydW5uaW5nL3Vua25vd24g7IOB7YOc64+EIHRvdGFs7JeQIO2PrO2VqO2VmOyXrCDtjIzsnbwg64W465OcIGNvdW50cy50b3RhbOydtCDtlZjsnIQg7ZWp6rOE7JmAIOydvOy5mO2VmOuPhOuhnSDtlahcbiAgICAgIHJldHVybiB7IHRvdGFsOiAxLCBwYXNzZWQ6IDAsIGZhaWxlZDogMCwgc2tpcHBlZDogMCB9O1xuICB9XG59XG5cbmZ1bmN0aW9uIGFnZ3JlZ2F0ZUNvdW50cyhjaGlsZHJlbjogVGVzdENhc2VSZXN1bHRbXSk6IHtcbiAgdG90YWw6IG51bWJlcjtcbiAgcGFzc2VkOiBudW1iZXI7XG4gIGZhaWxlZDogbnVtYmVyO1xuICBza2lwcGVkOiBudW1iZXI7XG59IHtcbiAgbGV0IHRvdGFsID0gMDtcbiAgbGV0IHBhc3NlZCA9IDA7XG4gIGxldCBmYWlsZWQgPSAwO1xuICBsZXQgc2tpcHBlZCA9IDA7XG4gIGZvciAoY29uc3QgY2hpbGQgb2YgY2hpbGRyZW4pIHtcbiAgICB0b3RhbCArPSBjaGlsZC5jb3VudHMudG90YWw7XG4gICAgcGFzc2VkICs9IGNoaWxkLmNvdW50cy5wYXNzZWQ7XG4gICAgZmFpbGVkICs9IGNoaWxkLmNvdW50cy5mYWlsZWQ7XG4gICAgc2tpcHBlZCArPSBjaGlsZC5jb3VudHMuc2tpcHBlZDtcbiAgfVxuICByZXR1cm4geyB0b3RhbCwgcGFzc2VkLCBmYWlsZWQsIHNraXBwZWQgfTtcbn1cblxuZnVuY3Rpb24gZ2V0UmVzdWx0Q29tcGxldGVuZXNzU2NvcmUobm9kZTogVGVzdENhc2VSZXN1bHQpOiBudW1iZXIge1xuICBsZXQgc2NvcmUgPSAwO1xuICAvLyDthYzsiqTtirgg7IiY6rCAIOuNlCDrp47snYAg6rKw6rO866W8IOyasOyEoO2VmOyXrCDspJHrs7Ug7YyM7J28IOuzke2VqSDsi5wg7KCV67O0IOyGkOyLpOydhCDspITsnoXri4jri6QuXG4gIHNjb3JlICs9IG5vZGUuY291bnRzLnRvdGFsICogMTAwMDtcbiAgc2NvcmUgKz0gbm9kZS5jaGlsZHJlbi5sZW5ndGggKiAxMDA7XG4gIGlmIChub2RlLmR1cmF0aW9uTXMgIT09IG51bGwpIHNjb3JlICs9IDEwO1xuXG4gIHN3aXRjaCAobm9kZS5zdGF0ZSkge1xuICAgIGNhc2UgXCJmYWlsZWRcIjpcbiAgICAgIHNjb3JlICs9IDU7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFwicGFzc2VkXCI6XG4gICAgICBzY29yZSArPSA0O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBcInNraXBwZWRcIjpcbiAgICAgIHNjb3JlICs9IDM7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFwidG9kb1wiOlxuICAgICAgc2NvcmUgKz0gMjtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgXCJydW5uaW5nXCI6XG4gICAgICBzY29yZSArPSAxO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBcInVua25vd25cIjpcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICBicmVhaztcbiAgfVxuXG4gIHJldHVybiBzY29yZTtcbn1cblxuZnVuY3Rpb24gaXNTZXJpYWxpemVkVHJhY2UodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBTZXJpYWxpemVkVHJhY2Uge1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSBcIm9iamVjdFwiIHx8IHZhbHVlID09PSBudWxsKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGNvbnN0IHYgPSB2YWx1ZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgcmV0dXJuIChcbiAgICB0eXBlb2Ygdi5rZXkgPT09IFwic3RyaW5nXCIgJiZcbiAgICB0eXBlb2Ygdi5maWxlUGF0aCA9PT0gXCJzdHJpbmdcIiAmJlxuICAgIHR5cGVvZiB2LmxpbmVOdW1iZXIgPT09IFwibnVtYmVyXCIgJiZcbiAgICB0eXBlb2Ygdi5hdCA9PT0gXCJzdHJpbmdcIiAmJlxuICAgIFwidmFsdWVcIiBpbiB2XG4gICk7XG59XG4iXSwibWFwcGluZ3MiOiI7O0FBb2pCQSxTQUFTLGVBQWUsT0FBMEU7Q0FDaEcsUUFBUSxPQUFSO0VBQ0UsS0FBSyxVQUNILE9BQU87RUFDVCxLQUFLLFVBQ0gsT0FBTztFQUNULEtBQUssV0FDSCxPQUFPO0VBQ1QsS0FBSztFQUNMLEtBQUssVUFDSCxPQUFPO0VBQ1QsU0FDRSxPQUFPO0NBQ1g7QUFDRjtBQUVBLFNBQVMsY0FBYyxPQUErRDtDQUNwRixRQUFRLE9BQVI7RUFDRSxLQUFLLFVBQ0gsT0FBTztFQUNULEtBQUssVUFDSCxPQUFPO0VBQ1QsS0FBSyxXQUNILE9BQU87RUFDVCxLQUFLLFdBQ0gsT0FBTztFQUNULFNBQ0UsT0FBTztDQUNYO0FBQ0Y7QUFFQSxTQUFTLGNBQ1AsUUFDQSxNQUNXO0NBQ1gsUUFBUSxPQUFPLE9BQWY7RUFDRSxLQUFLLFVBQ0gsT0FBTztFQUNULEtBQUssVUFDSCxPQUFPO0VBQ1QsS0FBSyxXQUNILE9BQU8sU0FBUyxTQUFTLFNBQVM7RUFDcEMsS0FBSyxXQUNILE9BQU87RUFDVCxTQUNFLE9BQU87Q0FDWDtBQUNGO0FBRUEsU0FBUyxlQUFlLE9BS3RCO0NBQ0EsUUFBUSxPQUFSO0VBQ0UsS0FBSyxVQUNILE9BQU87R0FBRSxPQUFPO0dBQUcsUUFBUTtHQUFHLFFBQVE7R0FBRyxTQUFTO0VBQUU7RUFDdEQsS0FBSyxVQUNILE9BQU87R0FBRSxPQUFPO0dBQUcsUUFBUTtHQUFHLFFBQVE7R0FBRyxTQUFTO0VBQUU7RUFD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
|
|
494
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGV2LXZpdGVzdC1tYW5hZ2VyLmpzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90ZXN0aW5nL2Rldi12aXRlc3QtbWFuYWdlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB0eXBlIFVzZXJDb25maWcgYXMgVml0ZVVzZXJDb25maWcgfSBmcm9tIFwidml0ZVwiO1xuaW1wb3J0IHtcbiAgdHlwZSBDbGlPcHRpb25zLFxuICB0eXBlIFJlcG9ydGVyLFxuICB0eXBlIFRlc3RDYXNlLFxuICB0eXBlIFRlc3RNb2R1bGUsXG4gIHR5cGUgVGVzdFJ1blJlc3VsdCxcbiAgdHlwZSBUZXN0U3BlY2lmaWNhdGlvbixcbiAgdHlwZSBUZXN0U3VpdGUsXG4gIHR5cGUgVml0ZXN0LFxufSBmcm9tIFwidml0ZXN0L25vZGVcIjtcbmltcG9ydCB7IHogfSBmcm9tIFwiem9kXCI7XG5cbmltcG9ydCB7IHR5cGUgU2VyaWFsaXplZFRyYWNlIH0gZnJvbSBcIi4uL25haXRlL25haXRlXCI7XG5cbi8vIO2FjOyKpO2KuCDtlZwg6rG07J2YIHRyYWNlIOuqqOydjFxuZXhwb3J0IHR5cGUgVGVzdE5vZGVLaW5kID0gXCJmaWxlXCIgfCBcInN1aXRlXCIgfCBcInRlc3RcIjtcbmV4cG9ydCB0eXBlIFRlc3RTdGF0ZSA9IFwicGFzc2VkXCIgfCBcImZhaWxlZFwiIHwgXCJza2lwcGVkXCIgfCBcInRvZG9cIiB8IFwicnVubmluZ1wiIHwgXCJ1bmtub3duXCI7XG5cbmV4cG9ydCB0eXBlIFRlc3RDYXNlUmVzdWx0ID0ge1xuICBpZDogc3RyaW5nO1xuICBraW5kOiBUZXN0Tm9kZUtpbmQ7XG4gIG5hbWU6IHN0cmluZztcbiAgZnVsbE5hbWU6IHN0cmluZztcbiAgZmlsZTogc3RyaW5nO1xuICBzdGF0ZTogVGVzdFN0YXRlO1xuICBkdXJhdGlvbk1zOiBudW1iZXIgfCBudWxsO1xuICBjb3VudHM6IFRlc3RDb3VudHM7XG4gIGVycm9yOiB7IG1lc3NhZ2U6IHN0cmluZzsgc3RhY2s/OiBzdHJpbmcgfSB8IG51bGw7XG4gIHRyYWNlczogU2VyaWFsaXplZFRyYWNlW107XG4gIGNoaWxkcmVuOiBUZXN0Q2FzZVJlc3VsdFtdO1xufTtcblxuZXhwb3J0IHR5cGUgVGVzdENvdW50cyA9IHtcbiAgdG90YWw6IG51bWJlcjtcbiAgcGFzc2VkOiBudW1iZXI7XG4gIGZhaWxlZDogbnVtYmVyO1xuICBza2lwcGVkOiBudW1iZXI7XG59O1xuXG5leHBvcnQgdHlwZSBSdW5SZXN1bHQgPSB7XG4gIG9rOiBib29sZWFuO1xuICBzdW1tYXJ5OiB7XG4gICAgdG90YWw6IG51bWJlcjtcbiAgICBwYXNzZWQ6IG51bWJlcjtcbiAgICBmYWlsZWQ6IG51bWJlcjtcbiAgICBza2lwcGVkOiBudW1iZXI7XG4gICAgZHVyYXRpb25NczogbnVtYmVyO1xuICB9O1xuICByZXN1bHRzOiBUZXN0Q2FzZVJlc3VsdFtdO1xufTtcblxuZXhwb3J0IHR5cGUgTWFuYWdlclN0YXR1cyA9IHtcbiAgcmVhZHk6IGJvb2xlYW47XG4gIHJ1bm5pbmc6IGJvb2xlYW47XG4gIGxhc3RSdW5BdDogc3RyaW5nIHwgbnVsbDtcbn07XG5cbmV4cG9ydCB0eXBlIFRlc3RFdmVudFBheWxvYWQgPVxuICB8IHsgc2NoZW1hVmVyc2lvbjogbnVtYmVyOyBydW5JZDogc3RyaW5nOyBxdWV1ZWRBdDogc3RyaW5nOyByZXF1ZXN0OiBSdW5SZXF1ZXN0IH1cbiAgfCB7IHNjaGVtYVZlcnNpb246IG51bWJlcjsgcnVuSWQ6IHN0cmluZzsgc3RhcnRlZEF0OiBzdHJpbmcgfVxuICB8IHtcbiAgICAgIHNjaGVtYVZlcnNpb246IG51bWJlcjtcbiAgICAgIHJ1bklkOiBzdHJpbmc7XG4gICAgICBzdGFydGVkQXQ6IHN0cmluZztcbiAgICAgIGZpbmlzaGVkQXQ6IHN0cmluZztcbiAgICAgIHJlc3VsdDogUnVuUmVzdWx0O1xuICAgIH1cbiAgfCB7XG4gICAgICBzY2hlbWFWZXJzaW9uOiBudW1iZXI7XG4gICAgICBydW5JZDogc3RyaW5nO1xuICAgICAgZmluaXNoZWRBdDogc3RyaW5nO1xuICAgICAgZXJyb3I6IHsgbWVzc2FnZTogc3RyaW5nOyBzdGFjaz86IHN0cmluZyB9O1xuICAgIH1cbiAgfCB7XG4gICAgICBzY2hlbWFWZXJzaW9uOiAxO1xuICAgICAgcnVuSWQ6IHN0cmluZztcbiAgICAgIHN0YXJ0ZWRBdDogc3RyaW5nO1xuICAgICAgYXQ6IHN0cmluZztcbiAgICAgIGtpbmQ6IFRlc3ROb2RlS2luZDtcbiAgICAgIHBoYXNlOiBcInJlYWR5XCIgfCBcInJlc3VsdFwiO1xuICAgICAgZmlsZUlkOiBzdHJpbmc7XG4gICAgICBub2RlSWQ6IHN0cmluZztcbiAgICAgIHBhcmVudElkOiBzdHJpbmcgfCBudWxsO1xuICAgICAgbm9kZTogVGVzdENhc2VSZXN1bHQ7XG4gICAgfTtcblxuZXhwb3J0IHR5cGUgUnVuUmVxdWVzdCA9IHsgZmlsZXM/OiBzdHJpbmdbXTsgcGF0dGVybj86IHN0cmluZyB9O1xuZXhwb3J0IHR5cGUgVGVzdEV2ZW50TGlzdGVuZXIgPSAoZXZlbnQ6IHN0cmluZywgZGF0YTogVGVzdEV2ZW50UGF5bG9hZCkgPT4gdm9pZDtcblxudHlwZSBRdWV1ZUVudHJ5ID0ge1xuICBydW5JZDogc3RyaW5nO1xuICB0YXNrOiAoKSA9PiBQcm9taXNlPFJ1blJlc3VsdD47XG4gIHJlc29sdmU6IChyZXN1bHQ6IFJ1blJlc3VsdCkgPT4gdm9pZDtcbiAgcmVqZWN0OiAoZXJyb3I6IEVycm9yKSA9PiB2b2lkO1xufTtcblxuZXhwb3J0IHR5cGUgTWFuYWdlZFZpdGVzdCA9IFBpY2s8XG4gIFZpdGVzdCxcbiAgfCBcInN0YW5kYWxvbmVcIlxuICB8IFwiY2xvc2VcIlxuICB8IFwib25GaWx0ZXJXYXRjaGVkU3BlY2lmaWNhdGlvblwiXG4gIHwgXCJpbnZhbGlkYXRlRmlsZVwiXG4gIHwgXCJnbG9iVGVzdFNwZWNpZmljYXRpb25zXCJcbiAgfCBcInJ1blRlc3RTcGVjaWZpY2F0aW9uc1wiXG4gIHwgXCJzZXRHbG9iYWxUZXN0TmFtZVBhdHRlcm5cIlxuICB8IFwicmVzZXRHbG9iYWxUZXN0TmFtZVBhdHRlcm5cIlxuPjtcblxuZXhwb3J0IHR5cGUgRGV2Vml0ZXN0RmFjdG9yeSA9IChcbiAgbW9kZTogXCJ0ZXN0XCIsXG4gIG9wdGlvbnM6IENsaU9wdGlvbnMsXG4gIHZpdGVPdmVycmlkZXM6IFZpdGVVc2VyQ29uZmlnLFxuKSA9PiBQcm9taXNlPE1hbmFnZWRWaXRlc3Q+O1xuXG5leHBvcnQgY2xhc3MgRGV2Vml0ZXN0TWFuYWdlciB7XG4gIHByaXZhdGUgdml0ZXN0OiBNYW5hZ2VkVml0ZXN0IHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgcnVubmluZyA9IGZhbHNlO1xuICBwcml2YXRlIGxhc3RSdW5BdDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgcXVldWU6IFF1ZXVlRW50cnlbXSA9IFtdO1xuICBwcml2YXRlIHByb2Nlc3NpbmcgPSBmYWxzZTtcbiAgcHJpdmF0ZSBjbG9zZWQgPSBmYWxzZTtcbiAgcHJpdmF0ZSBldmVudExpc3RlbmVycyA9IG5ldyBTZXQ8VGVzdEV2ZW50TGlzdGVuZXI+KCk7XG4gIHByaXZhdGUgY3VycmVudFJ1bkNvbnRleHQ6IHtcbiAgICBydW5JZDogc3RyaW5nO1xuICAgIHN0YXJ0ZWRBdDogc3RyaW5nO1xuICAgIHNwZWNNb2R1bGVJZHM6IFNldDxzdHJpbmc+O1xuICB9IHwgbnVsbCA9IG51bGw7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSB2aXRlc3RGYWN0b3J5PzogRGV2Vml0ZXN0RmFjdG9yeSkge31cblxuICBhZGRFdmVudExpc3RlbmVyKGxpc3RlbmVyOiBUZXN0RXZlbnRMaXN0ZW5lcik6IHZvaWQge1xuICAgIHRoaXMuZXZlbnRMaXN0ZW5lcnMuYWRkKGxpc3RlbmVyKTtcbiAgfVxuXG4gIHJlbW92ZUV2ZW50TGlzdGVuZXIobGlzdGVuZXI6IFRlc3RFdmVudExpc3RlbmVyKTogdm9pZCB7XG4gICAgdGhpcy5ldmVudExpc3RlbmVycy5kZWxldGUobGlzdGVuZXIpO1xuICB9XG5cbiAgZW1pdEV2ZW50KGV2ZW50OiBzdHJpbmcsIGRhdGE6IFRlc3RFdmVudFBheWxvYWQpOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IGxpc3RlbmVyIG9mIHRoaXMuZXZlbnRMaXN0ZW5lcnMpIHtcbiAgICAgIGxpc3RlbmVyKGV2ZW50LCBkYXRhKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBzdGFydCh2aXRlc3RDb25maWdQYXRoPzogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8g7J2066+4IOyLnOyekeuQnCDqsr3smrAg7KSR67O1IOy0iOq4sO2ZlOulvCDrsKnsp4BcbiAgICBpZiAodGhpcy52aXRlc3QpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBjcmVhdGVWaXRlc3QgPVxuICAgICAgdGhpcy52aXRlc3RGYWN0b3J5ID8/XG4gICAgICAoYXN5bmMgKC4uLmFyZ3M6IFBhcmFtZXRlcnM8RGV2Vml0ZXN0RmFjdG9yeT4pID0+IHtcbiAgICAgICAgY29uc3Qgdml0ZXN0TW9kdWxlID0gYXdhaXQgaW1wb3J0KFwidml0ZXN0L25vZGVcIik7XG4gICAgICAgIHJldHVybiB2aXRlc3RNb2R1bGUuY3JlYXRlVml0ZXN0KC4uLmFyZ3MpO1xuICAgICAgfSk7XG5cbiAgICBjb25zdCB2aXRlT3ZlcnJpZGVzOiBWaXRlVXNlckNvbmZpZyA9IHtcbiAgICAgIHNlcnZlcjogeyB3YXRjaDogbnVsbCB9LFxuICAgIH07XG5cbiAgICBjb25zdCBjbGlPcHRpb25zOiBDbGlPcHRpb25zID0ge1xuICAgICAgd2F0Y2g6IHRydWUsXG4gICAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgICAgZm9yY2VSZXJ1blRyaWdnZXJzOiBbXSxcbiAgICAgIGNvbmZpZzogdml0ZXN0Q29uZmlnUGF0aCxcbiAgICAgIGVudjoge1xuICAgICAgICBOT0RFX0VOVjogXCJ0ZXN0XCIsXG4gICAgICB9LFxuICAgIH07XG5cbiAgICBjb25zdCByZWFsdGltZVJlcG9ydGVyID0gdGhpcy5jcmVhdGVSZWFsdGltZVByb2dyZXNzUmVwb3J0ZXIoKTtcbiAgICB2aXRlT3ZlcnJpZGVzLnBsdWdpbnMgPSBbXG4gICAgICAuLi4odml0ZU92ZXJyaWRlcy5wbHVnaW5zID8/IFtdKSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogXCJzb25hbXUtcmVhbHRpbWUtcmVwb3J0ZXJcIixcbiAgICAgICAgY29uZmlndXJlVml0ZXN0KHsgdml0ZXN0OiB2aXRlc3RJbnN0YW5jZSB9OiB7IHZpdGVzdDogVml0ZXN0IH0pIHtcbiAgICAgICAgICBjb25zdCByZXBvcnRlcnMgPSB2aXRlc3RJbnN0YW5jZS5jb25maWcucmVwb3J0ZXJzO1xuICAgICAgICAgIGlmICghcmVwb3J0ZXJzLmluY2x1ZGVzKHJlYWx0aW1lUmVwb3J0ZXIpKSB7XG4gICAgICAgICAgICByZXBvcnRlcnMucHVzaChyZWFsdGltZVJlcG9ydGVyKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIF07XG5cbiAgICBjb25zdCB2aXRlc3QgPSBhd2FpdCBjcmVhdGVWaXRlc3QoXCJ0ZXN0XCIsIGNsaU9wdGlvbnMsIHZpdGVPdmVycmlkZXMpO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB2aXRlc3Quc3RhbmRhbG9uZSgpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgYXdhaXQgdml0ZXN0LmNsb3NlKCk7XG4gICAgICB0aHJvdyBlcnI7XG4gICAgfVxuXG4gICAgdGhpcy52aXRlc3QgPSB2aXRlc3Q7XG4gICAgdGhpcy52aXRlc3Qub25GaWx0ZXJXYXRjaGVkU3BlY2lmaWNhdGlvbigoX3NwZWMpID0+IGZhbHNlKTtcbiAgICB0aGlzLmNsb3NlZCA9IGZhbHNlO1xuICB9XG5cbiAgYXN5bmMgcnVuKG9wdHM6IHsgZmlsZXM/OiBzdHJpbmdbXTsgcGF0dGVybj86IHN0cmluZyB9LCBydW5JZDogc3RyaW5nKTogUHJvbWlzZTxSdW5SZXN1bHQ+IHtcbiAgICBpZiAodGhpcy5jbG9zZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkRldlZpdGVzdE1hbmFnZXIgaXMgYWxyZWFkeSBzaHV0IGRvd25cIik7XG4gICAgfVxuICAgIGlmICghdGhpcy52aXRlc3QpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkRldlZpdGVzdE1hbmFnZXIgaXMgbm90IHN0YXJ0ZWRcIik7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPFJ1blJlc3VsdD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY29uc3QgdGFzayA9ICgpID0+IHRoaXMuZXhlY3V0ZVJ1bihvcHRzLCBydW5JZCk7XG4gICAgICB0aGlzLnF1ZXVlLnB1c2goeyBydW5JZCwgdGFzaywgcmVzb2x2ZSwgcmVqZWN0IH0pO1xuICAgICAgdGhpcy5wcm9jZXNzUXVldWUoKTtcbiAgICB9KTtcbiAgfVxuXG4gIGdldFN0YXR1cygpOiBNYW5hZ2VyU3RhdHVzIHtcbiAgICByZXR1cm4ge1xuICAgICAgcmVhZHk6IHRoaXMudml0ZXN0ICE9PSBudWxsICYmICF0aGlzLmNsb3NlZCxcbiAgICAgIHJ1bm5pbmc6IHRoaXMucnVubmluZyxcbiAgICAgIGxhc3RSdW5BdDogdGhpcy5sYXN0UnVuQXQsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiDrs4Dqsr3rkJwg7YyM7J287J2EIFZpdGVzdCDrqqjrk4gg6re4656Y7ZSE7JeQ7IScIOustO2aqO2ZlO2VqeuLiOuLpC5cbiAgICogaG1yQW5kU3luY+yXkOyEnCDtmLjstpzrkJjslrQg64uk7J2MIO2FjOyKpO2KuCDsi6Ttlokg7IucIOy1nOyLoCDsvZTrk5zrpbwg7IKs7Jqp7ZWY64+E66GdIO2VqeuLiOuLpC5cbiAgICovXG4gIGludmFsaWRhdGVGaWxlcyhmaWxlUGF0aHM6IHN0cmluZ1tdKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnZpdGVzdCB8fCB0aGlzLmNsb3NlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IGZpbGVQYXRoIG9mIGZpbGVQYXRocykge1xuICAgICAgdGhpcy52aXRlc3QuaW52YWxpZGF0ZUZpbGUoZmlsZVBhdGgpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHNodXRkb3duKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLmNsb3NlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmNsb3NlZCA9IHRydWU7XG5cbiAgICAvLyDtgZDsl5Ag64Ko7J2AIOyekeyXheuTpOydhCByZWplY3TtlZjsl6wg7Zi47Lac7J6Q6rCAIOyYgeq1rCDrjIDquLDtlZjsp4Ag7JWK64+E66GdIOygleumrFxuICAgIHdoaWxlICh0aGlzLnF1ZXVlLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IGVudHJ5ID0gdGhpcy5xdWV1ZS5zaGlmdCgpO1xuICAgICAgaWYgKGVudHJ5KSB7XG4gICAgICAgIGVudHJ5LnJlamVjdChuZXcgRXJyb3IoXCJEZXZWaXRlc3RNYW5hZ2VyIGlzIGJlaW5nIHNodXQgZG93blwiKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5ldmVudExpc3RlbmVycy5jbGVhcigpO1xuXG4gICAgaWYgKHRoaXMudml0ZXN0KSB7XG4gICAgICBhd2FpdCB0aGlzLnZpdGVzdC5jbG9zZSgpO1xuICAgICAgdGhpcy52aXRlc3QgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcHJvY2Vzc1F1ZXVlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLnByb2Nlc3NpbmcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5wcm9jZXNzaW5nID0gdHJ1ZTtcblxuICAgIHRyeSB7XG4gICAgICB3aGlsZSAodGhpcy5xdWV1ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnN0IGVudHJ5ID0gdGhpcy5xdWV1ZS5zaGlmdCgpO1xuICAgICAgICBpZiAoIWVudHJ5KSBicmVhaztcbiAgICAgICAgaWYgKHRoaXMuY2xvc2VkKSB7XG4gICAgICAgICAgZW50cnkucmVqZWN0KG5ldyBFcnJvcihcIkRldlZpdGVzdE1hbmFnZXIgaXMgYWxyZWFkeSBzaHV0IGRvd25cIikpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBlbnRyeS50YXNrKCk7XG4gICAgICAgICAgZW50cnkucmVzb2x2ZShyZXN1bHQpO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICBlbnRyeS5yZWplY3QoZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIgOiBuZXcgRXJyb3IoU3RyaW5nKGVycikpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLnByb2Nlc3NpbmcgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGV4ZWN1dGVSdW4oXG4gICAgb3B0czogeyBmaWxlcz86IHN0cmluZ1tdOyBwYXR0ZXJuPzogc3RyaW5nIH0sXG4gICAgcnVuSWQ6IHN0cmluZyxcbiAgKTogUHJvbWlzZTxSdW5SZXN1bHQ+IHtcbiAgICBjb25zdCB2aXRlc3QgPSB0aGlzLnZpdGVzdDtcbiAgICBpZiAoIXZpdGVzdCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRGV2Vml0ZXN0TWFuYWdlciBpcyBub3Qgc3RhcnRlZFwiKTtcbiAgICB9XG5cbiAgICB0aGlzLnJ1bm5pbmcgPSB0cnVlO1xuICAgIGNvbnN0IHN0YXJ0VGltZSA9IERhdGUubm93KCk7XG5cbiAgICBpZiAob3B0cy5wYXR0ZXJuKSB7XG4gICAgICB2aXRlc3Quc2V0R2xvYmFsVGVzdE5hbWVQYXR0ZXJuKG9wdHMucGF0dGVybik7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHNwZWNzOiBUZXN0U3BlY2lmaWNhdGlvbltdID0gb3B0cy5maWxlc1xuICAgICAgICA/IGF3YWl0IHZpdGVzdC5nbG9iVGVzdFNwZWNpZmljYXRpb25zKG9wdHMuZmlsZXMpXG4gICAgICAgIDogYXdhaXQgdml0ZXN0Lmdsb2JUZXN0U3BlY2lmaWNhdGlvbnMoKTtcblxuICAgICAgY29uc3Qgc3BlY01vZHVsZUlkcyA9IG5ldyBTZXQoc3BlY3MubWFwKChzKSA9PiBzLm1vZHVsZUlkKSk7XG4gICAgICAvLyByb3V0ZXPsl5DshJwg7IOd7ISx7ZWcIHJ1bklk66W8IOq3uOuMgOuhnCDsgqzsmqntlZjsl6wgcnVuU3RhcnRlZC9ydW5Ob2RlUHJvZ3Jlc3MvcnVuQ29tcGxldGVkIOqwhCDsnbzqtIDshLEg67O07J6lXG4gICAgICB0aGlzLmN1cnJlbnRSdW5Db250ZXh0ID0ge1xuICAgICAgICBydW5JZCxcbiAgICAgICAgc3RhcnRlZEF0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICAgIHNwZWNNb2R1bGVJZHMsXG4gICAgICB9O1xuXG4gICAgICBjb25zdCBhbGxUZXN0c1J1biA9ICFvcHRzLmZpbGVzIHx8IG9wdHMuZmlsZXMubGVuZ3RoID09PSAwO1xuICAgICAgY29uc3QgcnVuUmVzdWx0OiBUZXN0UnVuUmVzdWx0ID0gYXdhaXQgdml0ZXN0LnJ1blRlc3RTcGVjaWZpY2F0aW9ucyhzcGVjcywgYWxsVGVzdHNSdW4pO1xuXG4gICAgICBjb25zdCBkdXJhdGlvbk1zID0gRGF0ZS5ub3coKSAtIHN0YXJ0VGltZTtcbiAgICAgIHRoaXMubGFzdFJ1bkF0ID0gbmV3IERhdGUoKS50b0lTT1N0cmluZygpO1xuXG4gICAgICByZXR1cm4gdGhpcy5jb2xsZWN0UmVzdWx0cyhydW5SZXN1bHQsIGR1cmF0aW9uTXMsIHNwZWNNb2R1bGVJZHMpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLmN1cnJlbnRSdW5Db250ZXh0ID0gbnVsbDtcbiAgICAgIGlmIChvcHRzLnBhdHRlcm4pIHtcbiAgICAgICAgdml0ZXN0LnJlc2V0R2xvYmFsVGVzdE5hbWVQYXR0ZXJuKCk7XG4gICAgICB9XG4gICAgICB0aGlzLnJ1bm5pbmcgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZVJlYWx0aW1lUHJvZ3Jlc3NSZXBvcnRlcigpOiBSZXBvcnRlciB7XG4gICAgY29uc3QgZW1pdFByb2dyZXNzID0gKFxuICAgICAga2luZDogXCJmaWxlXCIgfCBcInN1aXRlXCIgfCBcInRlc3RcIixcbiAgICAgIHBoYXNlOiBcInJlYWR5XCIgfCBcInJlc3VsdFwiLFxuICAgICAgZmlsZUlkOiBzdHJpbmcsXG4gICAgICBub2RlSWQ6IHN0cmluZyxcbiAgICAgIHBhcmVudElkOiBzdHJpbmcgfCBudWxsLFxuICAgICAgbm9kZTogVGVzdENhc2VSZXN1bHQsXG4gICAgKSA9PiB7XG4gICAgICBjb25zdCBjdHggPSB0aGlzLmN1cnJlbnRSdW5Db250ZXh0O1xuICAgICAgaWYgKCFjdHgpIHJldHVybjtcbiAgICAgIHRoaXMuZW1pdEV2ZW50KFwicnVuTm9kZVByb2dyZXNzXCIsIHtcbiAgICAgICAgc2NoZW1hVmVyc2lvbjogMSxcbiAgICAgICAgcnVuSWQ6IGN0eC5ydW5JZCxcbiAgICAgICAgc3RhcnRlZEF0OiBjdHguc3RhcnRlZEF0LFxuICAgICAgICBhdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgICBraW5kLFxuICAgICAgICBwaGFzZSxcbiAgICAgICAgZmlsZUlkLFxuICAgICAgICBub2RlSWQsXG4gICAgICAgIHBhcmVudElkLFxuICAgICAgICBub2RlLFxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIHJldHVybiB7XG4gICAgICBvblRlc3RNb2R1bGVRdWV1ZWQ6ICh0ZXN0TW9kdWxlOiBUZXN0TW9kdWxlKSA9PiB7XG4gICAgICAgIGNvbnN0IGN0eCA9IHRoaXMuY3VycmVudFJ1bkNvbnRleHQ7XG4gICAgICAgIGlmICghY3R4IHx8ICFjdHguc3BlY01vZHVsZUlkcy5oYXModGVzdE1vZHVsZS5tb2R1bGVJZCkpIHJldHVybjtcbiAgICAgICAgY29uc3QgZmlsZUlkID0gdGVzdE1vZHVsZS5tb2R1bGVJZDtcbiAgICAgICAgZW1pdFByb2dyZXNzKFxuICAgICAgICAgIFwiZmlsZVwiLFxuICAgICAgICAgIFwicmVhZHlcIixcbiAgICAgICAgICBmaWxlSWQsXG4gICAgICAgICAgZmlsZUlkLFxuICAgICAgICAgIG51bGwsXG4gICAgICAgICAgdGhpcy5idWlsZEZpbGVQcm9ncmVzc05vZGUodGVzdE1vZHVsZSwgXCJyZWFkeVwiKSxcbiAgICAgICAgKTtcbiAgICAgIH0sXG4gICAgICBvblRlc3RNb2R1bGVFbmQ6ICh0ZXN0TW9kdWxlOiBUZXN0TW9kdWxlKSA9PiB7XG4gICAgICAgIGNvbnN0IGN0eCA9IHRoaXMuY3VycmVudFJ1bkNvbnRleHQ7XG4gICAgICAgIGlmICghY3R4IHx8ICFjdHguc3BlY01vZHVsZUlkcy5oYXModGVzdE1vZHVsZS5tb2R1bGVJZCkpIHJldHVybjtcbiAgICAgICAgY29uc3QgZmlsZUlkID0gdGVzdE1vZHVsZS5tb2R1bGVJZDtcbiAgICAgICAgZW1pdFByb2dyZXNzKFwiZmlsZVwiLCBcInJlc3VsdFwiLCBmaWxlSWQsIGZpbGVJZCwgbnVsbCwgdGhpcy5idWlsZEZpbGVOb2RlKHRlc3RNb2R1bGUpKTtcbiAgICAgIH0sXG4gICAgICBvblRlc3RTdWl0ZVJlYWR5OiAodGVzdFN1aXRlOiBUZXN0U3VpdGUpID0+IHtcbiAgICAgICAgY29uc3QgY3R4ID0gdGhpcy5jdXJyZW50UnVuQ29udGV4dDtcbiAgICAgICAgaWYgKCFjdHggfHwgIWN0eC5zcGVjTW9kdWxlSWRzLmhhcyh0ZXN0U3VpdGUubW9kdWxlLm1vZHVsZUlkKSkgcmV0dXJuO1xuICAgICAgICBjb25zdCBmaWxlSWQgPSB0ZXN0U3VpdGUubW9kdWxlLm1vZHVsZUlkO1xuICAgICAgICBjb25zdCBub2RlSWQgPSBgJHtmaWxlSWR9Ojoke3Rlc3RTdWl0ZS5mdWxsTmFtZX1gO1xuICAgICAgICBjb25zdCBwYXJlbnRJZCA9IHRoaXMucmVzb2x2ZVN1aXRlUGFyZW50SWQodGVzdFN1aXRlKTtcbiAgICAgICAgZW1pdFByb2dyZXNzKFxuICAgICAgICAgIFwic3VpdGVcIixcbiAgICAgICAgICBcInJlYWR5XCIsXG4gICAgICAgICAgZmlsZUlkLFxuICAgICAgICAgIG5vZGVJZCxcbiAgICAgICAgICBwYXJlbnRJZCxcbiAgICAgICAgICB0aGlzLmJ1aWxkU3VpdGVQcm9ncmVzc05vZGUodGVzdFN1aXRlLCBcInJlYWR5XCIpLFxuICAgICAgICApO1xuICAgICAgfSxcbiAgICAgIG9uVGVzdFN1aXRlUmVzdWx0OiAodGVzdFN1aXRlOiBUZXN0U3VpdGUpID0+IHtcbiAgICAgICAgY29uc3QgY3R4ID0gdGhpcy5jdXJyZW50UnVuQ29udGV4dDtcbiAgICAgICAgaWYgKCFjdHggfHwgIWN0eC5zcGVjTW9kdWxlSWRzLmhhcyh0ZXN0U3VpdGUubW9kdWxlLm1vZHVsZUlkKSkgcmV0dXJuO1xuICAgICAgICBjb25zdCBmaWxlSWQgPSB0ZXN0U3VpdGUubW9kdWxlLm1vZHVsZUlkO1xuICAgICAgICBjb25zdCBub2RlSWQgPSBgJHtmaWxlSWR9Ojoke3Rlc3RTdWl0ZS5mdWxsTmFtZX1gO1xuICAgICAgICBjb25zdCBwYXJlbnRJZCA9IHRoaXMucmVzb2x2ZVN1aXRlUGFyZW50SWQodGVzdFN1aXRlKTtcbiAgICAgICAgZW1pdFByb2dyZXNzKFxuICAgICAgICAgIFwic3VpdGVcIixcbiAgICAgICAgICBcInJlc3VsdFwiLFxuICAgICAgICAgIGZpbGVJZCxcbiAgICAgICAgICBub2RlSWQsXG4gICAgICAgICAgcGFyZW50SWQsXG4gICAgICAgICAgdGhpcy5idWlsZFN1aXRlTm9kZSh0ZXN0U3VpdGUsIGZpbGVJZCksXG4gICAgICAgICk7XG4gICAgICB9LFxuICAgICAgb25UZXN0Q2FzZVJlYWR5OiAodGVzdENhc2U6IFRlc3RDYXNlKSA9PiB7XG4gICAgICAgIGNvbnN0IGN0eCA9IHRoaXMuY3VycmVudFJ1bkNvbnRleHQ7XG4gICAgICAgIGlmICghY3R4IHx8ICFjdHguc3BlY01vZHVsZUlkcy5oYXModGVzdENhc2UubW9kdWxlLm1vZHVsZUlkKSkgcmV0dXJuO1xuICAgICAgICBjb25zdCBmaWxlSWQgPSB0ZXN0Q2FzZS5tb2R1bGUubW9kdWxlSWQ7XG4gICAgICAgIGNvbnN0IG5vZGVJZCA9IGAke2ZpbGVJZH06OiR7dGVzdENhc2UuZnVsbE5hbWV9YDtcbiAgICAgICAgY29uc3QgcGFyZW50SWQgPSB0aGlzLnJlc29sdmVUZXN0UGFyZW50SWQodGVzdENhc2UpO1xuICAgICAgICBlbWl0UHJvZ3Jlc3MoXG4gICAgICAgICAgXCJ0ZXN0XCIsXG4gICAgICAgICAgXCJyZWFkeVwiLFxuICAgICAgICAgIGZpbGVJZCxcbiAgICAgICAgICBub2RlSWQsXG4gICAgICAgICAgcGFyZW50SWQsXG4gICAgICAgICAgdGhpcy5idWlsZFRlc3RQcm9ncmVzc05vZGUodGVzdENhc2UsIFwicmVhZHlcIiksXG4gICAgICAgICk7XG4gICAgICB9LFxuICAgICAgb25UZXN0Q2FzZVJlc3VsdDogKHRlc3RDYXNlOiBUZXN0Q2FzZSkgPT4ge1xuICAgICAgICBjb25zdCBjdHggPSB0aGlzLmN1cnJlbnRSdW5Db250ZXh0O1xuICAgICAgICBpZiAoIWN0eCB8fCAhY3R4LnNwZWNNb2R1bGVJZHMuaGFzKHRlc3RDYXNlLm1vZHVsZS5tb2R1bGVJZCkpIHJldHVybjtcbiAgICAgICAgY29uc3QgZmlsZUlkID0gdGVzdENhc2UubW9kdWxlLm1vZHVsZUlkO1xuICAgICAgICBjb25zdCBub2RlSWQgPSBgJHtmaWxlSWR9Ojoke3Rlc3RDYXNlLmZ1bGxOYW1lfWA7XG4gICAgICAgIGNvbnN0IHBhcmVudElkID0gdGhpcy5yZXNvbHZlVGVzdFBhcmVudElkKHRlc3RDYXNlKTtcbiAgICAgICAgZW1pdFByb2dyZXNzKFxuICAgICAgICAgIFwidGVzdFwiLFxuICAgICAgICAgIFwicmVzdWx0XCIsXG4gICAgICAgICAgZmlsZUlkLFxuICAgICAgICAgIG5vZGVJZCxcbiAgICAgICAgICBwYXJlbnRJZCxcbiAgICAgICAgICB0aGlzLmJ1aWxkVGVzdE5vZGUodGVzdENhc2UsIGZpbGVJZCksXG4gICAgICAgICk7XG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkRmlsZVByb2dyZXNzTm9kZSh0ZXN0TW9kdWxlOiBUZXN0TW9kdWxlLCBfcGhhc2U6IFwicmVhZHlcIik6IFRlc3RDYXNlUmVzdWx0IHtcbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IHRlc3RNb2R1bGUubW9kdWxlSWQsXG4gICAgICBraW5kOiBcImZpbGVcIixcbiAgICAgIG5hbWU6IHRlc3RNb2R1bGUubW9kdWxlSWQsXG4gICAgICBmdWxsTmFtZTogdGVzdE1vZHVsZS5tb2R1bGVJZCxcbiAgICAgIGZpbGU6IHRlc3RNb2R1bGUubW9kdWxlSWQsXG4gICAgICBzdGF0ZTogXCJydW5uaW5nXCIsXG4gICAgICBkdXJhdGlvbk1zOiBudWxsLFxuICAgICAgY291bnRzOiB7IHRvdGFsOiAwLCBwYXNzZWQ6IDAsIGZhaWxlZDogMCwgc2tpcHBlZDogMCB9LFxuICAgICAgZXJyb3I6IG51bGwsXG4gICAgICB0cmFjZXM6IFtdLFxuICAgICAgY2hpbGRyZW46IFtdLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkU3VpdGVQcm9ncmVzc05vZGUodGVzdFN1aXRlOiBUZXN0U3VpdGUsIF9waGFzZTogXCJyZWFkeVwiKTogVGVzdENhc2VSZXN1bHQge1xuICAgIGNvbnN0IGZpbGVJZCA9IHRlc3RTdWl0ZS5tb2R1bGUubW9kdWxlSWQ7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlkOiBgJHtmaWxlSWR9Ojoke3Rlc3RTdWl0ZS5mdWxsTmFtZX1gLFxuICAgICAga2luZDogXCJzdWl0ZVwiLFxuICAgICAgbmFtZTogdGVzdFN1aXRlLm5hbWUsXG4gICAgICBmdWxsTmFtZTogdGVzdFN1aXRlLmZ1bGxOYW1lLFxuICAgICAgZmlsZTogZmlsZUlkLFxuICAgICAgc3RhdGU6IFwicnVubmluZ1wiLFxuICAgICAgZHVyYXRpb25NczogbnVsbCxcbiAgICAgIGNvdW50czogeyB0b3RhbDogMCwgcGFzc2VkOiAwLCBmYWlsZWQ6IDAsIHNraXBwZWQ6IDAgfSxcbiAgICAgIGVycm9yOiBudWxsLFxuICAgICAgdHJhY2VzOiBbXSxcbiAgICAgIGNoaWxkcmVuOiBbXSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZFRlc3RQcm9ncmVzc05vZGUodGVzdENhc2U6IFRlc3RDYXNlLCBfcGhhc2U6IFwicmVhZHlcIik6IFRlc3RDYXNlUmVzdWx0IHtcbiAgICBjb25zdCBmaWxlSWQgPSB0ZXN0Q2FzZS5tb2R1bGUubW9kdWxlSWQ7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlkOiBgJHtmaWxlSWR9Ojoke3Rlc3RDYXNlLmZ1bGxOYW1lfWAsXG4gICAgICBraW5kOiBcInRlc3RcIixcbiAgICAgIG5hbWU6IHRlc3RDYXNlLm5hbWUsXG4gICAgICBmdWxsTmFtZTogdGVzdENhc2UuZnVsbE5hbWUsXG4gICAgICBmaWxlOiBmaWxlSWQsXG4gICAgICBzdGF0ZTogXCJydW5uaW5nXCIsXG4gICAgICBkdXJhdGlvbk1zOiBudWxsLFxuICAgICAgY291bnRzOiB7IHRvdGFsOiAxLCBwYXNzZWQ6IDAsIGZhaWxlZDogMCwgc2tpcHBlZDogMCB9LFxuICAgICAgZXJyb3I6IG51bGwsXG4gICAgICB0cmFjZXM6IFtdLFxuICAgICAgY2hpbGRyZW46IFtdLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIHJlc29sdmVTdWl0ZVBhcmVudElkKHRlc3RTdWl0ZTogVGVzdFN1aXRlKTogc3RyaW5nIHtcbiAgICBjb25zdCBwYXJlbnQgPSB0ZXN0U3VpdGUucGFyZW50O1xuICAgIGlmIChwYXJlbnQudHlwZSA9PT0gXCJzdWl0ZVwiKSB7XG4gICAgICByZXR1cm4gYCR7dGVzdFN1aXRlLm1vZHVsZS5tb2R1bGVJZH06OiR7cGFyZW50LmZ1bGxOYW1lfWA7XG4gICAgfVxuICAgIHJldHVybiB0ZXN0U3VpdGUubW9kdWxlLm1vZHVsZUlkO1xuICB9XG5cbiAgcHJpdmF0ZSByZXNvbHZlVGVzdFBhcmVudElkKHRlc3RDYXNlOiBUZXN0Q2FzZSk6IHN0cmluZyB7XG4gICAgY29uc3QgcGFyZW50ID0gdGVzdENhc2UucGFyZW50O1xuICAgIGlmIChwYXJlbnQudHlwZSA9PT0gXCJzdWl0ZVwiKSB7XG4gICAgICByZXR1cm4gYCR7dGVzdENhc2UubW9kdWxlLm1vZHVsZUlkfTo6JHtwYXJlbnQuZnVsbE5hbWV9YDtcbiAgICB9XG4gICAgcmV0dXJuIHRlc3RDYXNlLm1vZHVsZS5tb2R1bGVJZDtcbiAgfVxuXG4gIHByaXZhdGUgY29sbGVjdFJlc3VsdHMoXG4gICAgcnVuUmVzdWx0OiBUZXN0UnVuUmVzdWx0LFxuICAgIGR1cmF0aW9uTXM6IG51bWJlcixcbiAgICBzcGVjTW9kdWxlSWRzOiBTZXQ8c3RyaW5nPixcbiAgKTogUnVuUmVzdWx0IHtcbiAgICBjb25zdCByZXN1bHRzQnlGaWxlID0gbmV3IE1hcDxzdHJpbmcsIFRlc3RDYXNlUmVzdWx0PigpO1xuXG4gICAgZm9yIChjb25zdCB0ZXN0TW9kdWxlIG9mIHJ1blJlc3VsdC50ZXN0TW9kdWxlcykge1xuICAgICAgaWYgKCFzcGVjTW9kdWxlSWRzLmhhcyh0ZXN0TW9kdWxlLm1vZHVsZUlkKSkgY29udGludWU7XG4gICAgICBjb25zdCBuZXh0UmVzdWx0ID0gdGhpcy5idWlsZEZpbGVOb2RlKHRlc3RNb2R1bGUpO1xuICAgICAgY29uc3QgZXhpc3RpbmdSZXN1bHQgPSByZXN1bHRzQnlGaWxlLmdldChuZXh0UmVzdWx0LmlkKTtcblxuICAgICAgaWYgKCFleGlzdGluZ1Jlc3VsdCkge1xuICAgICAgICByZXN1bHRzQnlGaWxlLnNldChuZXh0UmVzdWx0LmlkLCBuZXh0UmVzdWx0KTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGV4aXN0aW5nU2NvcmUgPSBnZXRSZXN1bHRDb21wbGV0ZW5lc3NTY29yZShleGlzdGluZ1Jlc3VsdCk7XG4gICAgICBjb25zdCBuZXh0U2NvcmUgPSBnZXRSZXN1bHRDb21wbGV0ZW5lc3NTY29yZShuZXh0UmVzdWx0KTtcbiAgICAgIGlmIChuZXh0U2NvcmUgPj0gZXhpc3RpbmdTY29yZSkge1xuICAgICAgICByZXN1bHRzQnlGaWxlLnNldChuZXh0UmVzdWx0LmlkLCBuZXh0UmVzdWx0KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHRzID0gQXJyYXkuZnJvbShyZXN1bHRzQnlGaWxlLnZhbHVlcygpKTtcbiAgICBjb25zdCBzdW1tYXJ5ID0gYWdncmVnYXRlQ291bnRzKHJlc3VsdHMpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIG9rOiBzdW1tYXJ5LmZhaWxlZCA9PT0gMCxcbiAgICAgIHN1bW1hcnk6IHsgLi4uc3VtbWFyeSwgZHVyYXRpb25NcyB9LFxuICAgICAgcmVzdWx0cyxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZEZpbGVOb2RlKHRlc3RNb2R1bGU6IFRlc3RNb2R1bGUpOiBUZXN0Q2FzZVJlc3VsdCB7XG4gICAgY29uc3QgZmlsZSA9IHRlc3RNb2R1bGUubW9kdWxlSWQ7XG4gICAgY29uc3QgY2hpbGRyZW4gPSB0aGlzLmJ1aWxkQ2hpbGROb2Rlcyh0ZXN0TW9kdWxlLCBmaWxlKTtcbiAgICBjb25zdCBjb3VudHMgPSBhZ2dyZWdhdGVDb3VudHMoY2hpbGRyZW4pO1xuICAgIGNvbnN0IG1vZHVsZVN0YXRlID0gdGVzdE1vZHVsZS5zdGF0ZSgpO1xuICAgIGNvbnN0IGRpYWdub3N0aWMgPSB0ZXN0TW9kdWxlLmRpYWdub3N0aWMoKTtcblxuICAgIHJldHVybiB7XG4gICAgICBpZDogdGVzdE1vZHVsZS5tb2R1bGVJZCxcbiAgICAgIGtpbmQ6IFwiZmlsZVwiLFxuICAgICAgbmFtZTogdGVzdE1vZHVsZS5tb2R1bGVJZCxcbiAgICAgIGZ1bGxOYW1lOiB0ZXN0TW9kdWxlLm1vZHVsZUlkLFxuICAgICAgZmlsZSxcbiAgICAgIHN0YXRlOiBtYXBNb2R1bGVTdGF0ZShtb2R1bGVTdGF0ZSksXG4gICAgICBkdXJhdGlvbk1zOiBkaWFnbm9zdGljLmR1cmF0aW9uID4gMCA/IGRpYWdub3N0aWMuZHVyYXRpb24gOiBudWxsLFxuICAgICAgY291bnRzLFxuICAgICAgZXJyb3I6IG51bGwsXG4gICAgICB0cmFjZXM6IFtdLFxuICAgICAgY2hpbGRyZW4sXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRDaGlsZE5vZGVzKHBhcmVudDogVGVzdE1vZHVsZSB8IFRlc3RTdWl0ZSwgZmlsZTogc3RyaW5nKTogVGVzdENhc2VSZXN1bHRbXSB7XG4gICAgY29uc3QgcmVzdWx0OiBUZXN0Q2FzZVJlc3VsdFtdID0gW107XG4gICAgZm9yIChjb25zdCBjaGlsZCBvZiBwYXJlbnQuY2hpbGRyZW4pIHtcbiAgICAgIGlmIChjaGlsZC50eXBlID09PSBcInN1aXRlXCIpIHtcbiAgICAgICAgcmVzdWx0LnB1c2godGhpcy5idWlsZFN1aXRlTm9kZShjaGlsZCwgZmlsZSkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzdWx0LnB1c2godGhpcy5idWlsZFRlc3ROb2RlKGNoaWxkLCBmaWxlKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkU3VpdGVOb2RlKHN1aXRlOiBUZXN0U3VpdGUsIGZpbGU6IHN0cmluZyk6IFRlc3RDYXNlUmVzdWx0IHtcbiAgICBjb25zdCBjaGlsZHJlbiA9IHRoaXMuYnVpbGRDaGlsZE5vZGVzKHN1aXRlLCBmaWxlKTtcbiAgICBjb25zdCBjb3VudHMgPSBhZ2dyZWdhdGVDb3VudHMoY2hpbGRyZW4pO1xuICAgIGNvbnN0IHN1aXRlU3RhdGUgPSBzdWl0ZS5zdGF0ZSgpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGlkOiBgJHtmaWxlfTo6JHtzdWl0ZS5mdWxsTmFtZX1gLFxuICAgICAga2luZDogXCJzdWl0ZVwiLFxuICAgICAgbmFtZTogc3VpdGUubmFtZSxcbiAgICAgIGZ1bGxOYW1lOiBzdWl0ZS5mdWxsTmFtZSxcbiAgICAgIGZpbGUsXG4gICAgICBzdGF0ZTogbWFwU3VpdGVTdGF0ZShzdWl0ZVN0YXRlKSxcbiAgICAgIGR1cmF0aW9uTXM6IG51bGwsXG4gICAgICBjb3VudHMsXG4gICAgICBlcnJvcjogbnVsbCxcbiAgICAgIHRyYWNlczogW10sXG4gICAgICBjaGlsZHJlbixcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZFRlc3ROb2RlKHRlc3RDYXNlOiBUZXN0Q2FzZSwgZmlsZTogc3RyaW5nKTogVGVzdENhc2VSZXN1bHQge1xuICAgIGNvbnN0IHJlc3VsdCA9IHRlc3RDYXNlLnJlc3VsdCgpO1xuICAgIGNvbnN0IGRpYWdub3N0aWMgPSB0ZXN0Q2FzZS5kaWFnbm9zdGljKCk7XG4gICAgY29uc3Qgc3RhdGUgPSBtYXBUZXN0UmVzdWx0KHJlc3VsdCwgdGVzdENhc2Uub3B0aW9ucy5tb2RlKTtcblxuICAgIGxldCBlcnJvcjogeyBtZXNzYWdlOiBzdHJpbmc7IHN0YWNrPzogc3RyaW5nIH0gfCBudWxsID0gbnVsbDtcbiAgICBpZiAocmVzdWx0LnN0YXRlID09PSBcImZhaWxlZFwiICYmIHJlc3VsdC5lcnJvcnMubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgZmlyc3RFcnJvciA9IHJlc3VsdC5lcnJvcnNbMF07XG4gICAgICBlcnJvciA9IHtcbiAgICAgICAgbWVzc2FnZTogZmlyc3RFcnJvci5tZXNzYWdlID8/IFN0cmluZyhmaXJzdEVycm9yKSxcbiAgICAgICAgc3RhY2s6IGZpcnN0RXJyb3Iuc3RhY2ssXG4gICAgICB9O1xuICAgIH1cblxuICAgIGNvbnN0IHJhdyA9IHRlc3RDYXNlLm1ldGEoKS50cmFjZXM7XG4gICAgbGV0IHRyYWNlczogU2VyaWFsaXplZFRyYWNlW10gPSBbXTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShyYXcpICYmIHJhdy5sZW5ndGggPiAwKSB7XG4gICAgICB0cmFjZXMgPSBwYXJzZVNlcmlhbGl6ZWRUcmFjZXMocmF3KTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IGAke2ZpbGV9Ojoke3Rlc3RDYXNlLmZ1bGxOYW1lfWAsXG4gICAgICBraW5kOiBcInRlc3RcIixcbiAgICAgIG5hbWU6IHRlc3RDYXNlLm5hbWUsXG4gICAgICBmdWxsTmFtZTogdGVzdENhc2UuZnVsbE5hbWUsXG4gICAgICBmaWxlLFxuICAgICAgc3RhdGUsXG4gICAgICBkdXJhdGlvbk1zOiBkaWFnbm9zdGljID8gZGlhZ25vc3RpYy5kdXJhdGlvbiA6IG51bGwsXG4gICAgICBjb3VudHM6IGNvdW50RnJvbVN0YXRlKHN0YXRlKSxcbiAgICAgIGVycm9yLFxuICAgICAgdHJhY2VzLFxuICAgICAgY2hpbGRyZW46IFtdLFxuICAgIH07XG4gIH1cbn1cblxuZnVuY3Rpb24gbWFwTW9kdWxlU3RhdGUoc3RhdGU6IFwic2tpcHBlZFwiIHwgXCJwZW5kaW5nXCIgfCBcImZhaWxlZFwiIHwgXCJwYXNzZWRcIiB8IFwicXVldWVkXCIpOiBUZXN0U3RhdGUge1xuICBzd2l0Y2ggKHN0YXRlKSB7XG4gICAgY2FzZSBcInBhc3NlZFwiOlxuICAgICAgcmV0dXJuIFwicGFzc2VkXCI7XG4gICAgY2FzZSBcImZhaWxlZFwiOlxuICAgICAgcmV0dXJuIFwiZmFpbGVkXCI7XG4gICAgY2FzZSBcInNraXBwZWRcIjpcbiAgICAgIHJldHVybiBcInNraXBwZWRcIjtcbiAgICBjYXNlIFwicGVuZGluZ1wiOlxuICAgIGNhc2UgXCJxdWV1ZWRcIjpcbiAgICAgIHJldHVybiBcInJ1bm5pbmdcIjtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIFwidW5rbm93blwiO1xuICB9XG59XG5cbmZ1bmN0aW9uIG1hcFN1aXRlU3RhdGUoc3RhdGU6IFwic2tpcHBlZFwiIHwgXCJwZW5kaW5nXCIgfCBcImZhaWxlZFwiIHwgXCJwYXNzZWRcIik6IFRlc3RTdGF0ZSB7XG4gIHN3aXRjaCAoc3RhdGUpIHtcbiAgICBjYXNlIFwicGFzc2VkXCI6XG4gICAgICByZXR1cm4gXCJwYXNzZWRcIjtcbiAgICBjYXNlIFwiZmFpbGVkXCI6XG4gICAgICByZXR1cm4gXCJmYWlsZWRcIjtcbiAgICBjYXNlIFwic2tpcHBlZFwiOlxuICAgICAgcmV0dXJuIFwic2tpcHBlZFwiO1xuICAgIGNhc2UgXCJwZW5kaW5nXCI6XG4gICAgICByZXR1cm4gXCJydW5uaW5nXCI7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBcInVua25vd25cIjtcbiAgfVxufVxuXG5mdW5jdGlvbiBtYXBUZXN0UmVzdWx0KFxuICByZXN1bHQ6IFJldHVyblR5cGU8VGVzdENhc2VbXCJyZXN1bHRcIl0+LFxuICBtb2RlOiBcInJ1blwiIHwgXCJvbmx5XCIgfCBcInNraXBcIiB8IFwidG9kb1wiLFxuKTogVGVzdFN0YXRlIHtcbiAgc3dpdGNoIChyZXN1bHQuc3RhdGUpIHtcbiAgICBjYXNlIFwicGFzc2VkXCI6XG4gICAgICByZXR1cm4gXCJwYXNzZWRcIjtcbiAgICBjYXNlIFwiZmFpbGVkXCI6XG4gICAgICByZXR1cm4gXCJmYWlsZWRcIjtcbiAgICBjYXNlIFwic2tpcHBlZFwiOlxuICAgICAgcmV0dXJuIG1vZGUgPT09IFwidG9kb1wiID8gXCJ0b2RvXCIgOiBcInNraXBwZWRcIjtcbiAgICBjYXNlIFwicGVuZGluZ1wiOlxuICAgICAgcmV0dXJuIFwicnVubmluZ1wiO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gXCJ1bmtub3duXCI7XG4gIH1cbn1cblxuZnVuY3Rpb24gY291bnRGcm9tU3RhdGUoc3RhdGU6IFRlc3RTdGF0ZSk6IFRlc3RDb3VudHMge1xuICBzd2l0Y2ggKHN0YXRlKSB7XG4gICAgY2FzZSBcInBhc3NlZFwiOlxuICAgICAgcmV0dXJuIHsgdG90YWw6IDEsIHBhc3NlZDogMSwgZmFpbGVkOiAwLCBza2lwcGVkOiAwIH07XG4gICAgY2FzZSBcImZhaWxlZFwiOlxuICAgICAgcmV0dXJuIHsgdG90YWw6IDEsIHBhc3NlZDogMCwgZmFpbGVkOiAxLCBza2lwcGVkOiAwIH07XG4gICAgY2FzZSBcInNraXBwZWRcIjpcbiAgICBjYXNlIFwidG9kb1wiOlxuICAgICAgcmV0dXJuIHsgdG90YWw6IDEsIHBhc3NlZDogMCwgZmFpbGVkOiAwLCBza2lwcGVkOiAxIH07XG4gICAgZGVmYXVsdDpcbiAgICAgIC8vIHJ1bm5pbmcvdW5rbm93biDsg4Htg5zrj4QgdG90YWzsl5Ag7Y+s7ZWo7ZWY7JesIO2MjOydvCDrhbjrk5wgY291bnRzLnRvdGFs7J20IO2VmOychCDtlanqs4TsmYAg7J287LmY7ZWY64+E66GdIO2VqFxuICAgICAgcmV0dXJuIHsgdG90YWw6IDEsIHBhc3NlZDogMCwgZmFpbGVkOiAwLCBza2lwcGVkOiAwIH07XG4gIH1cbn1cblxuZnVuY3Rpb24gYWdncmVnYXRlQ291bnRzKGNoaWxkcmVuOiBUZXN0Q2FzZVJlc3VsdFtdKTogVGVzdENvdW50cyB7XG4gIGxldCB0b3RhbCA9IDA7XG4gIGxldCBwYXNzZWQgPSAwO1xuICBsZXQgZmFpbGVkID0gMDtcbiAgbGV0IHNraXBwZWQgPSAwO1xuICBmb3IgKGNvbnN0IGNoaWxkIG9mIGNoaWxkcmVuKSB7XG4gICAgdG90YWwgKz0gY2hpbGQuY291bnRzLnRvdGFsO1xuICAgIHBhc3NlZCArPSBjaGlsZC5jb3VudHMucGFzc2VkO1xuICAgIGZhaWxlZCArPSBjaGlsZC5jb3VudHMuZmFpbGVkO1xuICAgIHNraXBwZWQgKz0gY2hpbGQuY291bnRzLnNraXBwZWQ7XG4gIH1cbiAgcmV0dXJuIHsgdG90YWwsIHBhc3NlZCwgZmFpbGVkLCBza2lwcGVkIH07XG59XG5cbmZ1bmN0aW9uIGdldFJlc3VsdENvbXBsZXRlbmVzc1Njb3JlKG5vZGU6IFRlc3RDYXNlUmVzdWx0KTogbnVtYmVyIHtcbiAgbGV0IHNjb3JlID0gMDtcbiAgLy8g7YWM7Iqk7Yq4IOyImOqwgCDrjZQg66eO7J2AIOqysOqzvOulvCDsmrDshKDtlZjsl6wg7KSR67O1IO2MjOydvCDrs5Htlakg7IucIOygleuztCDshpDsi6TsnYQg7KSE7J6F64uI64ukLlxuICBzY29yZSArPSBub2RlLmNvdW50cy50b3RhbCAqIDEwMDA7XG4gIHNjb3JlICs9IG5vZGUuY2hpbGRyZW4ubGVuZ3RoICogMTAwO1xuICBpZiAobm9kZS5kdXJhdGlvbk1zICE9PSBudWxsKSBzY29yZSArPSAxMDtcblxuICBzd2l0Y2ggKG5vZGUuc3RhdGUpIHtcbiAgICBjYXNlIFwiZmFpbGVkXCI6XG4gICAgICBzY29yZSArPSA1O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBcInBhc3NlZFwiOlxuICAgICAgc2NvcmUgKz0gNDtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgXCJza2lwcGVkXCI6XG4gICAgICBzY29yZSArPSAzO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBcInRvZG9cIjpcbiAgICAgIHNjb3JlICs9IDI7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFwicnVubmluZ1wiOlxuICAgICAgc2NvcmUgKz0gMTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgXCJ1bmtub3duXCI6XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgYnJlYWs7XG4gIH1cblxuICByZXR1cm4gc2NvcmU7XG59XG5cbmNvbnN0IHNlcmlhbGl6ZWRUcmFjZVNjaGVtYSA9IHoub2JqZWN0KHtcbiAga2V5OiB6LnN0cmluZygpLFxuICB2YWx1ZTogei51bmtub3duKCksXG4gIGZpbGVQYXRoOiB6LnN0cmluZygpLFxuICBsaW5lTnVtYmVyOiB6Lm51bWJlcigpLFxuICBhdDogei5zdHJpbmcoKSxcbn0pO1xuXG50eXBlIFNlcmlhbGl6ZWRUcmFjZUNhbmRpZGF0ZSA9IG9iamVjdCB8IHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCBiaWdpbnQgfCBzeW1ib2wgfCBudWxsO1xuXG5mdW5jdGlvbiBwYXJzZVNlcmlhbGl6ZWRUcmFjZXModmFsdWVzOiByZWFkb25seSBTZXJpYWxpemVkVHJhY2VDYW5kaWRhdGVbXSk6IFNlcmlhbGl6ZWRUcmFjZVtdIHtcbiAgcmV0dXJuIHZhbHVlcy5mbGF0TWFwKCh2YWx1ZSkgPT4ge1xuICAgIGNvbnN0IHBhcnNlZCA9IHNlcmlhbGl6ZWRUcmFjZVNjaGVtYS5zYWZlUGFyc2UodmFsdWUpO1xuICAgIHJldHVybiBwYXJzZWQuc3VjY2VzcyA/IFtwYXJzZWQuZGF0YV0gOiBbXTtcbiAgfSk7XG59XG4iXSwibWFwcGluZ3MiOiI7OztBQW1uQkEsU0FBUyxlQUFlLE9BQTBFO0NBQ2hHLFFBQVEsT0FBUjtFQUNFLEtBQUssVUFDSCxPQUFPO0VBQ1QsS0FBSyxVQUNILE9BQU87RUFDVCxLQUFLLFdBQ0gsT0FBTztFQUNULEtBQUs7RUFDTCxLQUFLLFVBQ0gsT0FBTztFQUNULFNBQ0UsT0FBTztDQUNYO0FBQ0Y7QUFFQSxTQUFTLGNBQWMsT0FBK0Q7Q0FDcEYsUUFBUSxPQUFSO0VBQ0UsS0FBSyxVQUNILE9BQU87RUFDVCxLQUFLLFVBQ0gsT0FBTztFQUNULEtBQUssV0FDSCxPQUFPO0VBQ1QsS0FBSyxXQUNILE9BQU87RUFDVCxTQUNFLE9BQU87Q0FDWDtBQUNGO0FBRUEsU0FBUyxjQUNQLFFBQ0EsTUFDVztDQUNYLFFBQVEsT0FBTyxPQUFmO0VBQ0UsS0FBSyxVQUNILE9BQU87RUFDVCxLQUFLLFVBQ0gsT0FBTztFQUNULEtBQUssV0FDSCxPQUFPLFNBQVMsU0FBUyxTQUFTO0VBQ3BDLEtBQUssV0FDSCxPQUFPO0VBQ1QsU0FDRSxPQUFPO0NBQ1g7QUFDRjtBQUVBLFNBQVMsZUFBZSxPQUE4QjtDQUNwRCxRQUFRLE9BQVI7RUFDRSxLQUFLLFVBQ0gsT0FBTztHQUFFLE9BQU87R0FBRyxRQUFRO0dBQUcsUUFBUTtHQUFHLFNBQVM7RUFBRTtFQUN0RCxLQUFLLFVBQ0gsT0FBTztHQUFFLE9BQU87R0FBRyxRQUFRO0dBQUcsUUFBUTtHQUFHLFNBQVM7RUFBRTtFQUN0RCxLQUFLO0VBQ0wsS0FBSyxRQUNILE9BQU87R0FBRSxPQUFPO0dBQUcsUUFBUTtHQUFHLFFBQVE7R0FBRyxTQUFTO0VBQUU7RUFDdEQsU0FFRSxPQUFPO0dBQUUsT0FBTztHQUFHLFFBQVE7R0FBRyxRQUFRO0dBQUcsU0FBUztFQUFFO0NBQ3hEO0FBQ0Y7QUFFQSxTQUFTLGdCQUFnQixVQUF3QztDQUMvRCxJQUFJ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
|
|
@@ -16,5 +16,416 @@ export type FakerMappings = {
|
|
|
16
16
|
type_defaults: Record<string, FakerMappingConfig>;
|
|
17
17
|
};
|
|
18
18
|
};
|
|
19
|
-
export declare const fakerMappings:
|
|
19
|
+
export declare const fakerMappings: {
|
|
20
|
+
ko: {
|
|
21
|
+
field_patterns: {
|
|
22
|
+
email: {
|
|
23
|
+
faker: string;
|
|
24
|
+
comment: string;
|
|
25
|
+
};
|
|
26
|
+
username: {
|
|
27
|
+
faker: string;
|
|
28
|
+
comment: string;
|
|
29
|
+
};
|
|
30
|
+
name: {
|
|
31
|
+
faker: string;
|
|
32
|
+
comment: string;
|
|
33
|
+
};
|
|
34
|
+
firstname: {
|
|
35
|
+
faker: string;
|
|
36
|
+
comment: string;
|
|
37
|
+
};
|
|
38
|
+
lastname: {
|
|
39
|
+
faker: string;
|
|
40
|
+
comment: string;
|
|
41
|
+
};
|
|
42
|
+
phone: {
|
|
43
|
+
faker: string;
|
|
44
|
+
comment: string;
|
|
45
|
+
};
|
|
46
|
+
mobile: {
|
|
47
|
+
faker: string;
|
|
48
|
+
comment: string;
|
|
49
|
+
};
|
|
50
|
+
address: {
|
|
51
|
+
faker: string;
|
|
52
|
+
comment: string;
|
|
53
|
+
};
|
|
54
|
+
city: {
|
|
55
|
+
faker: string;
|
|
56
|
+
comment: string;
|
|
57
|
+
};
|
|
58
|
+
country: {
|
|
59
|
+
faker: string;
|
|
60
|
+
comment: string;
|
|
61
|
+
};
|
|
62
|
+
zipcode: {
|
|
63
|
+
faker: string;
|
|
64
|
+
comment: string;
|
|
65
|
+
};
|
|
66
|
+
company: {
|
|
67
|
+
faker: string;
|
|
68
|
+
comment: string;
|
|
69
|
+
};
|
|
70
|
+
department: {
|
|
71
|
+
faker: string;
|
|
72
|
+
comment: string;
|
|
73
|
+
};
|
|
74
|
+
position: {
|
|
75
|
+
faker: string;
|
|
76
|
+
comment: string;
|
|
77
|
+
};
|
|
78
|
+
jobtitle: {
|
|
79
|
+
faker: string;
|
|
80
|
+
comment: string;
|
|
81
|
+
};
|
|
82
|
+
birthdate: {
|
|
83
|
+
faker: string;
|
|
84
|
+
comment: string;
|
|
85
|
+
};
|
|
86
|
+
title: {
|
|
87
|
+
faker: string;
|
|
88
|
+
comment: string;
|
|
89
|
+
};
|
|
90
|
+
description: {
|
|
91
|
+
faker: string;
|
|
92
|
+
comment: string;
|
|
93
|
+
};
|
|
94
|
+
content: {
|
|
95
|
+
faker: string;
|
|
96
|
+
comment: string;
|
|
97
|
+
};
|
|
98
|
+
url: {
|
|
99
|
+
faker: string;
|
|
100
|
+
comment: string;
|
|
101
|
+
};
|
|
102
|
+
image: {
|
|
103
|
+
faker: string;
|
|
104
|
+
comment: string;
|
|
105
|
+
};
|
|
106
|
+
avatar: {
|
|
107
|
+
faker: string;
|
|
108
|
+
comment: string;
|
|
109
|
+
};
|
|
110
|
+
uuid: {
|
|
111
|
+
faker: string;
|
|
112
|
+
comment: string;
|
|
113
|
+
};
|
|
114
|
+
salary: {
|
|
115
|
+
faker: string;
|
|
116
|
+
comment: string;
|
|
117
|
+
};
|
|
118
|
+
budget: {
|
|
119
|
+
faker: string;
|
|
120
|
+
comment: string;
|
|
121
|
+
};
|
|
122
|
+
price: {
|
|
123
|
+
faker: string;
|
|
124
|
+
comment: string;
|
|
125
|
+
};
|
|
126
|
+
amount: {
|
|
127
|
+
faker: string;
|
|
128
|
+
comment: string;
|
|
129
|
+
};
|
|
130
|
+
cost: {
|
|
131
|
+
faker: string;
|
|
132
|
+
comment: string;
|
|
133
|
+
};
|
|
134
|
+
employeenumber: {
|
|
135
|
+
faker: string;
|
|
136
|
+
comment: string;
|
|
137
|
+
};
|
|
138
|
+
code: {
|
|
139
|
+
faker: string;
|
|
140
|
+
comment: string;
|
|
141
|
+
};
|
|
142
|
+
count: {
|
|
143
|
+
faker: string;
|
|
144
|
+
comment: string;
|
|
145
|
+
};
|
|
146
|
+
quantity: {
|
|
147
|
+
faker: string;
|
|
148
|
+
comment: string;
|
|
149
|
+
};
|
|
150
|
+
mimetype: {
|
|
151
|
+
faker: string;
|
|
152
|
+
comment: string;
|
|
153
|
+
};
|
|
154
|
+
};
|
|
155
|
+
type_defaults: {
|
|
156
|
+
string: {
|
|
157
|
+
faker: string;
|
|
158
|
+
comment: string;
|
|
159
|
+
};
|
|
160
|
+
integer: {
|
|
161
|
+
faker: string;
|
|
162
|
+
comment: string;
|
|
163
|
+
};
|
|
164
|
+
numeric: {
|
|
165
|
+
faker: string;
|
|
166
|
+
comment: string;
|
|
167
|
+
};
|
|
168
|
+
boolean: {
|
|
169
|
+
faker: string;
|
|
170
|
+
comment: string;
|
|
171
|
+
};
|
|
172
|
+
date: {
|
|
173
|
+
faker: string;
|
|
174
|
+
comment: string;
|
|
175
|
+
};
|
|
176
|
+
uuid: {
|
|
177
|
+
faker: string;
|
|
178
|
+
comment: string;
|
|
179
|
+
};
|
|
180
|
+
json: {
|
|
181
|
+
faker: string;
|
|
182
|
+
comment: string;
|
|
183
|
+
};
|
|
184
|
+
};
|
|
185
|
+
};
|
|
186
|
+
en: {
|
|
187
|
+
field_patterns: {
|
|
188
|
+
email: {
|
|
189
|
+
faker: string;
|
|
190
|
+
comment: string;
|
|
191
|
+
};
|
|
192
|
+
username: {
|
|
193
|
+
faker: string;
|
|
194
|
+
comment: string;
|
|
195
|
+
};
|
|
196
|
+
name: {
|
|
197
|
+
faker: string;
|
|
198
|
+
comment: string;
|
|
199
|
+
};
|
|
200
|
+
firstname: {
|
|
201
|
+
faker: string;
|
|
202
|
+
comment: string;
|
|
203
|
+
};
|
|
204
|
+
lastname: {
|
|
205
|
+
faker: string;
|
|
206
|
+
comment: string;
|
|
207
|
+
};
|
|
208
|
+
phone: {
|
|
209
|
+
faker: string;
|
|
210
|
+
comment: string;
|
|
211
|
+
};
|
|
212
|
+
mobile: {
|
|
213
|
+
faker: string;
|
|
214
|
+
comment: string;
|
|
215
|
+
};
|
|
216
|
+
address: {
|
|
217
|
+
faker: string;
|
|
218
|
+
comment: string;
|
|
219
|
+
};
|
|
220
|
+
city: {
|
|
221
|
+
faker: string;
|
|
222
|
+
comment: string;
|
|
223
|
+
};
|
|
224
|
+
country: {
|
|
225
|
+
faker: string;
|
|
226
|
+
comment: string;
|
|
227
|
+
};
|
|
228
|
+
zipcode: {
|
|
229
|
+
faker: string;
|
|
230
|
+
comment: string;
|
|
231
|
+
};
|
|
232
|
+
company: {
|
|
233
|
+
faker: string;
|
|
234
|
+
comment: string;
|
|
235
|
+
};
|
|
236
|
+
department: {
|
|
237
|
+
faker: string;
|
|
238
|
+
comment: string;
|
|
239
|
+
};
|
|
240
|
+
position: {
|
|
241
|
+
faker: string;
|
|
242
|
+
comment: string;
|
|
243
|
+
};
|
|
244
|
+
jobtitle: {
|
|
245
|
+
faker: string;
|
|
246
|
+
comment: string;
|
|
247
|
+
};
|
|
248
|
+
birthdate: {
|
|
249
|
+
faker: string;
|
|
250
|
+
comment: string;
|
|
251
|
+
};
|
|
252
|
+
title: {
|
|
253
|
+
faker: string;
|
|
254
|
+
comment: string;
|
|
255
|
+
};
|
|
256
|
+
description: {
|
|
257
|
+
faker: string;
|
|
258
|
+
comment: string;
|
|
259
|
+
};
|
|
260
|
+
content: {
|
|
261
|
+
faker: string;
|
|
262
|
+
comment: string;
|
|
263
|
+
};
|
|
264
|
+
url: {
|
|
265
|
+
faker: string;
|
|
266
|
+
comment: string;
|
|
267
|
+
};
|
|
268
|
+
image: {
|
|
269
|
+
faker: string;
|
|
270
|
+
comment: string;
|
|
271
|
+
};
|
|
272
|
+
avatar: {
|
|
273
|
+
faker: string;
|
|
274
|
+
comment: string;
|
|
275
|
+
};
|
|
276
|
+
uuid: {
|
|
277
|
+
faker: string;
|
|
278
|
+
comment: string;
|
|
279
|
+
};
|
|
280
|
+
salary: {
|
|
281
|
+
faker: string;
|
|
282
|
+
comment: string;
|
|
283
|
+
};
|
|
284
|
+
budget: {
|
|
285
|
+
faker: string;
|
|
286
|
+
comment: string;
|
|
287
|
+
};
|
|
288
|
+
price: {
|
|
289
|
+
faker: string;
|
|
290
|
+
comment: string;
|
|
291
|
+
};
|
|
292
|
+
amount: {
|
|
293
|
+
faker: string;
|
|
294
|
+
comment: string;
|
|
295
|
+
};
|
|
296
|
+
cost: {
|
|
297
|
+
faker: string;
|
|
298
|
+
comment: string;
|
|
299
|
+
};
|
|
300
|
+
employeenumber: {
|
|
301
|
+
faker: string;
|
|
302
|
+
comment: string;
|
|
303
|
+
};
|
|
304
|
+
code: {
|
|
305
|
+
faker: string;
|
|
306
|
+
comment: string;
|
|
307
|
+
};
|
|
308
|
+
count: {
|
|
309
|
+
faker: string;
|
|
310
|
+
comment: string;
|
|
311
|
+
};
|
|
312
|
+
quantity: {
|
|
313
|
+
faker: string;
|
|
314
|
+
comment: string;
|
|
315
|
+
};
|
|
316
|
+
mimetype: {
|
|
317
|
+
faker: string;
|
|
318
|
+
comment: string;
|
|
319
|
+
};
|
|
320
|
+
};
|
|
321
|
+
type_defaults: {
|
|
322
|
+
string: {
|
|
323
|
+
faker: string;
|
|
324
|
+
comment: string;
|
|
325
|
+
};
|
|
326
|
+
integer: {
|
|
327
|
+
faker: string;
|
|
328
|
+
comment: string;
|
|
329
|
+
};
|
|
330
|
+
numeric: {
|
|
331
|
+
faker: string;
|
|
332
|
+
comment: string;
|
|
333
|
+
};
|
|
334
|
+
boolean: {
|
|
335
|
+
faker: string;
|
|
336
|
+
comment: string;
|
|
337
|
+
};
|
|
338
|
+
date: {
|
|
339
|
+
faker: string;
|
|
340
|
+
comment: string;
|
|
341
|
+
};
|
|
342
|
+
uuid: {
|
|
343
|
+
faker: string;
|
|
344
|
+
comment: string;
|
|
345
|
+
};
|
|
346
|
+
json: {
|
|
347
|
+
faker: string;
|
|
348
|
+
comment: string;
|
|
349
|
+
};
|
|
350
|
+
};
|
|
351
|
+
};
|
|
352
|
+
ja: {
|
|
353
|
+
field_patterns: {
|
|
354
|
+
email: {
|
|
355
|
+
faker: string;
|
|
356
|
+
comment: string;
|
|
357
|
+
};
|
|
358
|
+
username: {
|
|
359
|
+
faker: string;
|
|
360
|
+
comment: string;
|
|
361
|
+
};
|
|
362
|
+
name: {
|
|
363
|
+
faker: string;
|
|
364
|
+
comment: string;
|
|
365
|
+
};
|
|
366
|
+
firstname: {
|
|
367
|
+
faker: string;
|
|
368
|
+
comment: string;
|
|
369
|
+
};
|
|
370
|
+
lastname: {
|
|
371
|
+
faker: string;
|
|
372
|
+
comment: string;
|
|
373
|
+
};
|
|
374
|
+
phone: {
|
|
375
|
+
faker: string;
|
|
376
|
+
comment: string;
|
|
377
|
+
};
|
|
378
|
+
mobile: {
|
|
379
|
+
faker: string;
|
|
380
|
+
comment: string;
|
|
381
|
+
};
|
|
382
|
+
address: {
|
|
383
|
+
faker: string;
|
|
384
|
+
comment: string;
|
|
385
|
+
};
|
|
386
|
+
city: {
|
|
387
|
+
faker: string;
|
|
388
|
+
comment: string;
|
|
389
|
+
};
|
|
390
|
+
company: {
|
|
391
|
+
faker: string;
|
|
392
|
+
comment: string;
|
|
393
|
+
};
|
|
394
|
+
title: {
|
|
395
|
+
faker: string;
|
|
396
|
+
comment: string;
|
|
397
|
+
};
|
|
398
|
+
salary: {
|
|
399
|
+
faker: string;
|
|
400
|
+
comment: string;
|
|
401
|
+
};
|
|
402
|
+
budget: {
|
|
403
|
+
faker: string;
|
|
404
|
+
comment: string;
|
|
405
|
+
};
|
|
406
|
+
};
|
|
407
|
+
type_defaults: {
|
|
408
|
+
string: {
|
|
409
|
+
faker: string;
|
|
410
|
+
comment: string;
|
|
411
|
+
};
|
|
412
|
+
integer: {
|
|
413
|
+
faker: string;
|
|
414
|
+
comment: string;
|
|
415
|
+
};
|
|
416
|
+
numeric: {
|
|
417
|
+
faker: string;
|
|
418
|
+
comment: string;
|
|
419
|
+
};
|
|
420
|
+
boolean: {
|
|
421
|
+
faker: string;
|
|
422
|
+
comment: string;
|
|
423
|
+
};
|
|
424
|
+
date: {
|
|
425
|
+
faker: string;
|
|
426
|
+
comment: string;
|
|
427
|
+
};
|
|
428
|
+
};
|
|
429
|
+
};
|
|
430
|
+
};
|
|
20
431
|
//# sourceMappingURL=faker-mappings.d.ts.map
|