sonamu 0.10.11 → 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 +133 -29
- 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 +13 -7
- 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 +61 -36
- package/dist/migration/migrator.d.ts.map +1 -1
- package/dist/migration/migrator.js +276 -167
- 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/migration/types.d.ts +54 -0
- package/dist/migration/types.d.ts.map +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 +146 -210
- 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 +3 -0
- package/dist/ui/migrations-api.d.ts.map +1 -0
- package/dist/ui/migrations-api.js +215 -0
- package/dist/ui-web/assets/index-D3QNH-Dv.css +1 -0
- package/dist/ui-web/assets/index-DV1AAq6W.js +178 -0
- package/dist/ui-web/index.html +2 -2
- 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 +11 -7
- 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 +155 -38
- 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 +392 -244
- package/src/migration/postgresql-schema-reader.ts +52 -47
- package/src/migration/slack-confirm.ts +17 -15
- package/src/migration/types.ts +57 -0
- 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 +726 -770
- package/src/ui/async-route.ts +4 -0
- package/src/ui/cdd-service.ts +35 -12
- package/src/ui/migrations-api.ts +381 -0
- 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-CJf8uJYf.js +0 -176
- package/dist/ui-web/assets/index-GMMIVGja.css +0 -1
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { __esmMin } from "../_virtual/_rolldown/runtime.js";
|
|
2
|
-
import {
|
|
2
|
+
import { init_filesystem_dependencies, syncerFilesystem } from "./filesystem-dependencies.js";
|
|
3
3
|
//#region src/syncer/file-tracking.ts
|
|
4
4
|
/**
|
|
5
5
|
* 우리가 디스크에 write한 path를 등록합니다. write 직후 호출하세요.
|
|
6
6
|
* 디스크에서 mtime을 직접 읽어 정확한 값으로 등록합니다.
|
|
7
7
|
*/
|
|
8
8
|
async function trackWritten(filePath) {
|
|
9
|
-
const fileStat = await stat(filePath);
|
|
9
|
+
const fileStat = await syncerFilesystem.stat(filePath);
|
|
10
10
|
fileWrittenAt.set(filePath, fileStat.mtimeMs);
|
|
11
11
|
}
|
|
12
12
|
/**
|
|
@@ -16,14 +16,15 @@ async function trackWritten(filePath) {
|
|
|
16
16
|
async function isLastChangedByMe(filePath) {
|
|
17
17
|
const registered = fileWrittenAt.get(filePath);
|
|
18
18
|
if (registered === void 0) return false;
|
|
19
|
-
return (await stat(filePath)).mtimeMs <= registered;
|
|
19
|
+
return (await syncerFilesystem.stat(filePath)).mtimeMs <= registered;
|
|
20
20
|
}
|
|
21
21
|
var fileWrittenAt;
|
|
22
22
|
var init_file_tracking = __esmMin((() => {
|
|
23
|
+
init_filesystem_dependencies();
|
|
23
24
|
fileWrittenAt = /* @__PURE__ */ new Map();
|
|
24
25
|
}));
|
|
25
26
|
//#endregion
|
|
26
27
|
init_file_tracking();
|
|
27
28
|
export { fileWrittenAt, init_file_tracking, isLastChangedByMe, trackWritten };
|
|
28
29
|
|
|
29
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
30
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS10cmFja2luZy5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi9zcmMvc3luY2VyL2ZpbGUtdHJhY2tpbmcudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdHlwZSBBYnNvbHV0ZVBhdGggfSBmcm9tIFwiLi4vdXRpbHMvcGF0aC11dGlsc1wiO1xuaW1wb3J0IHsgc3luY2VyRmlsZXN5c3RlbSB9IGZyb20gXCIuL2ZpbGVzeXN0ZW0tZGVwZW5kZW5jaWVzXCI7XG5cbmV4cG9ydCBjb25zdCBmaWxlV3JpdHRlbkF0ID0gbmV3IE1hcDxBYnNvbHV0ZVBhdGgsIG51bWJlcj4oKTtcblxuLyoqXG4gKiDsmrDrpqzqsIAg65SU7Iqk7YGs7JeQIHdyaXRl7ZWcIHBhdGjrpbwg65Ox66Gd7ZWp64uI64ukLiB3cml0ZSDsp4Htm4Qg7Zi47Lac7ZWY7IS47JqULlxuICog65SU7Iqk7YGs7JeQ7IScIG10aW1l7J2EIOyngeygkSDsnb3slrQg7KCV7ZmV7ZWcIOqwkuycvOuhnCDrk7HroZ3tlanri4jri6QuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB0cmFja1dyaXR0ZW4oZmlsZVBhdGg6IEFic29sdXRlUGF0aCk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBmaWxlU3RhdCA9IGF3YWl0IHN5bmNlckZpbGVzeXN0ZW0uc3RhdChmaWxlUGF0aCk7XG4gIGZpbGVXcml0dGVuQXQuc2V0KGZpbGVQYXRoLCBmaWxlU3RhdC5tdGltZU1zKTtcbn1cblxuLyoqXG4gKiDso7zslrTsp4QgcGF0aOqwgCDqsIDsnqUg7LWc6re8IOyasOumrCB3cml0ZSDsnbTtm4TroZwg7Jm467aA7JeQ7IScIOyImOygleuQnCDsoIEg7JeG64qU7KeAIO2ZleyduO2VqeuLiOuLpC5cbiAqIHRydWXrqbQgXCLrgrTqsIAg7JO0IOq3uOuMgOuhnCDrgqjslYTsnojsnYxcIiwgZmFsc2XrqbQgXCLsmbjrtoDsl5DshJwg7IiY7KCV65CQ6rGw64KYIOyasOumrOqwgCDsk7Qg7KCBIOyXhuydjFwiLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaXNMYXN0Q2hhbmdlZEJ5TWUoZmlsZVBhdGg6IEFic29sdXRlUGF0aCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICBjb25zdCByZWdpc3RlcmVkID0gZmlsZVdyaXR0ZW5BdC5nZXQoZmlsZVBhdGgpO1xuICBpZiAocmVnaXN0ZXJlZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGNvbnN0IGZpbGVTdGF0ID0gYXdhaXQgc3luY2VyRmlsZXN5c3RlbS5zdGF0KGZpbGVQYXRoKTtcbiAgcmV0dXJuIGZpbGVTdGF0Lm10aW1lTXMgPD0gcmVnaXN0ZXJlZDtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQVNBLGVBQXNCLGFBQWEsVUFBdUM7Q0FDeEUsTUFBTSxXQUFXLE1BQU0saUJBQWlCLEtBQUssUUFBUTtDQUNyRCxjQUFjLElBQUksVUFBVSxTQUFTLE9BQU87QUFDOUM7Ozs7O0FBTUEsZUFBc0Isa0JBQWtCLFVBQTBDO0NBQ2hGLE1BQU0sYUFBYSxjQUFjLElBQUksUUFBUTtDQUM3QyxJQUFJLGVBQWUsUUFDakIsT0FBTztDQUdULFFBQU8sTUFEZ0IsaUJBQWlCLEtBQUssUUFBUSxFQUM5QyxDQUFTLFdBQVc7QUFDN0I7Ozs4QkF4QjREO0NBRS9DLGdDQUFnQixJQUFJLElBQTBCIn0=
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { type MakeDirectoryOptions, type PathLike, type RmOptions, type Stats } from "node:fs";
|
|
2
|
+
export type SyncerFilesystemDependencies = {
|
|
3
|
+
access(path: PathLike, mode?: number): Promise<void>;
|
|
4
|
+
mkdir(path: PathLike, options?: MakeDirectoryOptions): Promise<string | undefined>;
|
|
5
|
+
readFile(path: PathLike, encoding: BufferEncoding): Promise<string>;
|
|
6
|
+
rm(path: PathLike, options?: RmOptions): Promise<void>;
|
|
7
|
+
stat(path: PathLike): Promise<Stats>;
|
|
8
|
+
unlink(path: PathLike): Promise<void>;
|
|
9
|
+
writeFile(path: PathLike, data: string | NodeJS.ArrayBufferView, encoding?: BufferEncoding): Promise<void>;
|
|
10
|
+
};
|
|
11
|
+
export declare const syncerFilesystem: SyncerFilesystemDependencies;
|
|
12
|
+
export declare function syncerFileExists(path: PathLike): Promise<boolean>;
|
|
13
|
+
/** 테스트와 임베딩 환경에서 Syncer의 파일시스템 경계를 교체합니다. */
|
|
14
|
+
export declare function configureSyncerFilesystem(dependencies: Partial<SyncerFilesystemDependencies>): () => void;
|
|
15
|
+
//# sourceMappingURL=filesystem-dependencies.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"filesystem-dependencies.d.ts","sourceRoot":"","sources":["../../src/syncer/filesystem-dependencies.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,oBAAoB,EACzB,KAAK,QAAQ,EACb,KAAK,SAAS,EACd,KAAK,KAAK,EACX,MAAM,SAAS,CAAC;AAGjB,MAAM,MAAM,4BAA4B,GAAG;IACzC,MAAM,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACrD,KAAK,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,CAAC,EAAE,oBAAoB,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;IACnF,QAAQ,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACpE,EAAE,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,CAAC,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACvD,IAAI,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;IACrC,MAAM,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACtC,SAAS,CACP,IAAI,EAAE,QAAQ,EACd,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC,eAAe,EACrC,QAAQ,CAAC,EAAE,cAAc,GACxB,OAAO,CAAC,IAAI,CAAC,CAAC;CAClB,CAAC;AAYF,eAAO,MAAM,gBAAgB,EAAE,4BAA8C,CAAC;AAE9E,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,CAOvE;AAED,6CAA6C;AAC7C,wBAAgB,yBAAyB,CACvC,YAAY,EAAE,OAAO,CAAC,4BAA4B,CAAC,GAClD,MAAM,IAAI,CAyBZ"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { __esmMin } from "../_virtual/_rolldown/runtime.js";
|
|
2
|
+
import { access, mkdir, readFile, rm, stat, unlink, writeFile } from "node:fs/promises";
|
|
3
|
+
import { constants } from "node:fs";
|
|
4
|
+
//#region src/syncer/filesystem-dependencies.ts
|
|
5
|
+
async function syncerFileExists(path) {
|
|
6
|
+
try {
|
|
7
|
+
await syncerFilesystem.access(path, constants.F_OK);
|
|
8
|
+
return true;
|
|
9
|
+
} catch {
|
|
10
|
+
return false;
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
/** 테스트와 임베딩 환경에서 Syncer의 파일시스템 경계를 교체합니다. */
|
|
14
|
+
function configureSyncerFilesystem(dependencies) {
|
|
15
|
+
const restorers = [];
|
|
16
|
+
const override = (key) => {
|
|
17
|
+
if (!(key in dependencies)) return;
|
|
18
|
+
const previousDependency = syncerFilesystem[key];
|
|
19
|
+
Object.assign(syncerFilesystem, { [key]: dependencies[key] });
|
|
20
|
+
restorers.push(() => Object.assign(syncerFilesystem, { [key]: previousDependency }));
|
|
21
|
+
};
|
|
22
|
+
override("access");
|
|
23
|
+
override("mkdir");
|
|
24
|
+
override("readFile");
|
|
25
|
+
override("rm");
|
|
26
|
+
override("stat");
|
|
27
|
+
override("unlink");
|
|
28
|
+
override("writeFile");
|
|
29
|
+
let configured = true;
|
|
30
|
+
return () => {
|
|
31
|
+
if (!configured) return;
|
|
32
|
+
configured = false;
|
|
33
|
+
for (const restore of restorers) restore();
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
var defaults, syncerFilesystem;
|
|
37
|
+
var init_filesystem_dependencies = __esmMin((() => {
|
|
38
|
+
defaults = {
|
|
39
|
+
access: (path, mode) => access(path, mode),
|
|
40
|
+
mkdir: (path, options) => mkdir(path, options),
|
|
41
|
+
readFile: (path, encoding) => readFile(path, encoding),
|
|
42
|
+
rm: (path, options) => rm(path, options),
|
|
43
|
+
stat: (path) => stat(path),
|
|
44
|
+
unlink: (path) => unlink(path),
|
|
45
|
+
writeFile: (path, data, encoding) => writeFile(path, data, encoding)
|
|
46
|
+
};
|
|
47
|
+
syncerFilesystem = { ...defaults };
|
|
48
|
+
}));
|
|
49
|
+
//#endregion
|
|
50
|
+
init_filesystem_dependencies();
|
|
51
|
+
export { configureSyncerFilesystem, init_filesystem_dependencies, syncerFileExists, syncerFilesystem };
|
|
52
|
+
|
|
53
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZXN5c3RlbS1kZXBlbmRlbmNpZXMuanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3N5bmNlci9maWxlc3lzdGVtLWRlcGVuZGVuY2llcy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBjb25zdGFudHMsXG4gIHR5cGUgTWFrZURpcmVjdG9yeU9wdGlvbnMsXG4gIHR5cGUgUGF0aExpa2UsXG4gIHR5cGUgUm1PcHRpb25zLFxuICB0eXBlIFN0YXRzLFxufSBmcm9tIFwibm9kZTpmc1wiO1xuaW1wb3J0IHsgYWNjZXNzLCBta2RpciwgcmVhZEZpbGUsIHJtLCBzdGF0LCB1bmxpbmssIHdyaXRlRmlsZSB9IGZyb20gXCJub2RlOmZzL3Byb21pc2VzXCI7XG5cbmV4cG9ydCB0eXBlIFN5bmNlckZpbGVzeXN0ZW1EZXBlbmRlbmNpZXMgPSB7XG4gIGFjY2VzcyhwYXRoOiBQYXRoTGlrZSwgbW9kZT86IG51bWJlcik6IFByb21pc2U8dm9pZD47XG4gIG1rZGlyKHBhdGg6IFBhdGhMaWtlLCBvcHRpb25zPzogTWFrZURpcmVjdG9yeU9wdGlvbnMpOiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD47XG4gIHJlYWRGaWxlKHBhdGg6IFBhdGhMaWtlLCBlbmNvZGluZzogQnVmZmVyRW5jb2RpbmcpOiBQcm9taXNlPHN0cmluZz47XG4gIHJtKHBhdGg6IFBhdGhMaWtlLCBvcHRpb25zPzogUm1PcHRpb25zKTogUHJvbWlzZTx2b2lkPjtcbiAgc3RhdChwYXRoOiBQYXRoTGlrZSk6IFByb21pc2U8U3RhdHM+O1xuICB1bmxpbmsocGF0aDogUGF0aExpa2UpOiBQcm9taXNlPHZvaWQ+O1xuICB3cml0ZUZpbGUoXG4gICAgcGF0aDogUGF0aExpa2UsXG4gICAgZGF0YTogc3RyaW5nIHwgTm9kZUpTLkFycmF5QnVmZmVyVmlldyxcbiAgICBlbmNvZGluZz86IEJ1ZmZlckVuY29kaW5nLFxuICApOiBQcm9taXNlPHZvaWQ+O1xufTtcblxuY29uc3QgZGVmYXVsdHM6IFN5bmNlckZpbGVzeXN0ZW1EZXBlbmRlbmNpZXMgPSB7XG4gIGFjY2VzczogKHBhdGgsIG1vZGUpID0+IGFjY2VzcyhwYXRoLCBtb2RlKSxcbiAgbWtkaXI6IChwYXRoLCBvcHRpb25zKSA9PiBta2RpcihwYXRoLCBvcHRpb25zKSxcbiAgcmVhZEZpbGU6IChwYXRoLCBlbmNvZGluZykgPT4gcmVhZEZpbGUocGF0aCwgZW5jb2RpbmcpLFxuICBybTogKHBhdGgsIG9wdGlvbnMpID0+IHJtKHBhdGgsIG9wdGlvbnMpLFxuICBzdGF0OiAocGF0aCkgPT4gc3RhdChwYXRoKSxcbiAgdW5saW5rOiAocGF0aCkgPT4gdW5saW5rKHBhdGgpLFxuICB3cml0ZUZpbGU6IChwYXRoLCBkYXRhLCBlbmNvZGluZykgPT4gd3JpdGVGaWxlKHBhdGgsIGRhdGEsIGVuY29kaW5nKSxcbn07XG5cbmV4cG9ydCBjb25zdCBzeW5jZXJGaWxlc3lzdGVtOiBTeW5jZXJGaWxlc3lzdGVtRGVwZW5kZW5jaWVzID0geyAuLi5kZWZhdWx0cyB9O1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc3luY2VyRmlsZUV4aXN0cyhwYXRoOiBQYXRoTGlrZSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICB0cnkge1xuICAgIGF3YWl0IHN5bmNlckZpbGVzeXN0ZW0uYWNjZXNzKHBhdGgsIGNvbnN0YW50cy5GX09LKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbi8qKiDthYzsiqTtirjsmYAg7J6E67Kg65SpIO2ZmOqyveyXkOyEnCBTeW5jZXLsnZgg7YyM7J287Iuc7Iqk7YWcIOqyveqzhOulvCDqtZDssrTtlanri4jri6QuICovXG5leHBvcnQgZnVuY3Rpb24gY29uZmlndXJlU3luY2VyRmlsZXN5c3RlbShcbiAgZGVwZW5kZW5jaWVzOiBQYXJ0aWFsPFN5bmNlckZpbGVzeXN0ZW1EZXBlbmRlbmNpZXM+LFxuKTogKCkgPT4gdm9pZCB7XG4gIGNvbnN0IHJlc3RvcmVyczogQXJyYXk8KCkgPT4gdm9pZD4gPSBbXTtcbiAgY29uc3Qgb3ZlcnJpZGUgPSA8S2V5IGV4dGVuZHMga2V5b2YgU3luY2VyRmlsZXN5c3RlbURlcGVuZGVuY2llcz4oa2V5OiBLZXkpOiB2b2lkID0+IHtcbiAgICBpZiAoIShrZXkgaW4gZGVwZW5kZW5jaWVzKSkgcmV0dXJuO1xuXG4gICAgY29uc3QgcHJldmlvdXNEZXBlbmRlbmN5ID0gc3luY2VyRmlsZXN5c3RlbVtrZXldO1xuICAgIE9iamVjdC5hc3NpZ24oc3luY2VyRmlsZXN5c3RlbSwgeyBba2V5XTogZGVwZW5kZW5jaWVzW2tleV0gfSk7XG4gICAgcmVzdG9yZXJzLnB1c2goKCkgPT4gT2JqZWN0LmFzc2lnbihzeW5jZXJGaWxlc3lzdGVtLCB7IFtrZXldOiBwcmV2aW91c0RlcGVuZGVuY3kgfSkpO1xuICB9O1xuXG4gIG92ZXJyaWRlKFwiYWNjZXNzXCIpO1xuICBvdmVycmlkZShcIm1rZGlyXCIpO1xuICBvdmVycmlkZShcInJlYWRGaWxlXCIpO1xuICBvdmVycmlkZShcInJtXCIpO1xuICBvdmVycmlkZShcInN0YXRcIik7XG4gIG92ZXJyaWRlKFwidW5saW5rXCIpO1xuICBvdmVycmlkZShcIndyaXRlRmlsZVwiKTtcblxuICBsZXQgY29uZmlndXJlZCA9IHRydWU7XG4gIHJldHVybiAoKSA9PiB7XG4gICAgaWYgKCFjb25maWd1cmVkKSByZXR1cm47XG4gICAgY29uZmlndXJlZCA9IGZhbHNlO1xuXG4gICAgZm9yIChjb25zdCByZXN0b3JlIG9mIHJlc3RvcmVycykgcmVzdG9yZSgpO1xuICB9O1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7O0FBbUNBLGVBQXNCLGlCQUFpQixNQUFrQztDQUN2RSxJQUFJO0VBQ0YsTUFBTSxpQkFBaUIsT0FBTyxNQUFNLFVBQVUsSUFBSTtFQUNsRCxPQUFPO0NBQ1QsUUFBUTtFQUNOLE9BQU87Q0FDVDtBQUNGOztBQUdBLFNBQWdCLDBCQUNkLGNBQ1k7Q0FDWixNQUFNLFlBQStCLENBQUM7Q0FDdEMsTUFBTSxZQUE0RCxRQUFtQjtFQUNuRixJQUFJLEVBQUUsT0FBTyxlQUFlO0VBRTVCLE1BQU0scUJBQXFCLGlCQUFpQjtFQUM1QyxPQUFPLE9BQU8sa0JBQWtCLEdBQUcsTUFBTSxhQUFhLEtBQUssQ0FBQztFQUM1RCxVQUFVLFdBQVcsT0FBTyxPQUFPLGtCQUFrQixHQUFHLE1BQU0sbUJBQW1CLENBQUMsQ0FBQztDQUNyRjtDQUVBLFNBQVMsUUFBUTtDQUNqQixTQUFTLE9BQU87Q0FDaEIsU0FBUyxVQUFVO0NBQ25CLFNBQVMsSUFBSTtDQUNiLFNBQVMsTUFBTTtDQUNmLFNBQVMsUUFBUTtDQUNqQixTQUFTLFdBQVc7Q0FFcEIsSUFBSSxhQUFhO0NBQ2pCLGFBQWE7RUFDWCxJQUFJLENBQUMsWUFBWTtFQUNqQixhQUFhO0VBRWIsS0FBSyxNQUFNLFdBQVcsV0FBVyxRQUFRO0NBQzNDO0FBQ0Y7OztDQWpETSxXQUF5QztFQUM3QyxTQUFTLE1BQU0sU0FBUyxPQUFPLE1BQU0sSUFBSTtFQUN6QyxRQUFRLE1BQU0sWUFBWSxNQUFNLE1BQU0sT0FBTztFQUM3QyxXQUFXLE1BQU0sYUFBYSxTQUFTLE1BQU0sUUFBUTtFQUNyRCxLQUFLLE1BQU0sWUFBWSxHQUFHLE1BQU0sT0FBTztFQUN2QyxPQUFPLFNBQVMsS0FBSyxJQUFJO0VBQ3pCLFNBQVMsU0FBUyxPQUFPLElBQUk7RUFDN0IsWUFBWSxNQUFNLE1BQU0sYUFBYSxVQUFVLE1BQU0sTUFBTSxRQUFRO0NBQ3JFO0NBRWEsbUJBQWlELEVBQUUsR0FBRyxTQUFTIn0=
|
|
@@ -27,5 +27,5 @@ export declare function loadTypes(): Promise<LoadedTypes>;
|
|
|
27
27
|
/**
|
|
28
28
|
* *.workflow.ts 파일들에서 Workflow 메타데이터를 로드합니다.
|
|
29
29
|
*/
|
|
30
|
-
export declare function loadWorkflows(): Promise<Map<string, WorkflowMetadata[]>>;
|
|
30
|
+
export declare function loadWorkflows(): Promise<Map<string, WorkflowMetadata<unknown, unknown, unknown>[]>>;
|
|
31
31
|
//# sourceMappingURL=module-loader.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"module-loader.d.ts","sourceRoot":"","sources":["../../src/syncer/module-loader.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAErD,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"module-loader.d.ts","sourceRoot":"","sources":["../../src/syncer/module-loader.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAErD,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAQ3D,MAAM,MAAM,UAAU,GAAG,WAAW,EAAE,CAAC;AAEvC,MAAM,MAAM,WAAW,GAAG;IAAE,CAAC,QAAQ,EAAE,MAAM,GAAG,CAAC,CAAC,OAAO,CAAA;CAAE,CAAC;AAE5D,MAAM,MAAM,YAAY,GAAG;IACzB,CAAC,SAAS,EAAE,MAAM,GAAG,cAAc,GAAG,cAAc,CAAC;CACtD,CAAC;AAEF;;;;GAIG;AACH,wBAAsB,QAAQ,IAAI,OAAO,CAAC,UAAU,CAAC,CAkCpD;AAED;;GAEG;AACH,wBAAsB,UAAU,IAAI,OAAO,CAAC,YAAY,CAAC,CAmBxD;AAED;;GAEG;AACH,wBAAsB,SAAS,IAAI,OAAO,CAAC,WAAW,CAAC,CAoBtD;AAED;;GAEG;AACH,wBAAsB,aAAa,wEA6BlC"}
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import { __esmMin } from "../_virtual/_rolldown/runtime.js";
|
|
2
|
+
import { init_runtime_value, isFunctionValue, isObjectValue } from "../utils/runtime-value.js";
|
|
2
3
|
import { globAsync, init_async_utils } from "../utils/async-utils.js";
|
|
3
4
|
import { Sonamu, init_sonamu } from "../api/sonamu.js";
|
|
4
5
|
import { importMembers, init_esm_utils } from "../utils/esm-utils.js";
|
|
5
6
|
import { init_path_utils, runtimePath } from "../utils/path-utils.js";
|
|
6
7
|
import { init_api_parser, readApisFromFile } from "./api-parser.js";
|
|
7
|
-
import { z
|
|
8
|
+
import { z } from "zod";
|
|
8
9
|
import path from "path";
|
|
9
10
|
//#region src/syncer/module-loader.ts
|
|
10
11
|
/**
|
|
@@ -43,7 +44,7 @@ async function loadTypes() {
|
|
|
43
44
|
const types = {};
|
|
44
45
|
for (const filePath of typePaths) {
|
|
45
46
|
const importedMembers = await importMembers(filePath);
|
|
46
|
-
for (const { name, value } of importedMembers) if (value instanceof z
|
|
47
|
+
for (const { name, value } of importedMembers) if (value instanceof z.ZodType) types[name] = value;
|
|
47
48
|
}
|
|
48
49
|
return types;
|
|
49
50
|
}
|
|
@@ -56,7 +57,7 @@ async function loadWorkflows() {
|
|
|
56
57
|
for (const filePath of workflowPaths) {
|
|
57
58
|
const importedMembers = await importMembers(filePath);
|
|
58
59
|
workflows.set(filePath, importedMembers.filter(({ value }) => {
|
|
59
|
-
return
|
|
60
|
+
return isObjectValue(value) && value !== null && "type" in value && value.type === "workflow" && "fn" in value && isFunctionValue(value.fn);
|
|
60
61
|
}).map(({ value }) => {
|
|
61
62
|
return value;
|
|
62
63
|
}));
|
|
@@ -68,10 +69,11 @@ var init_module_loader = __esmMin((() => {
|
|
|
68
69
|
init_async_utils();
|
|
69
70
|
init_esm_utils();
|
|
70
71
|
init_path_utils();
|
|
72
|
+
init_runtime_value();
|
|
71
73
|
init_api_parser();
|
|
72
74
|
}));
|
|
73
75
|
//#endregion
|
|
74
76
|
init_module_loader();
|
|
75
77
|
export { init_module_loader, loadApis, loadModels, loadTypes, loadWorkflows };
|
|
76
78
|
|
|
77
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
79
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kdWxlLWxvYWRlci5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi9zcmMvc3luY2VyL21vZHVsZS1sb2FkZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHBhdGggZnJvbSBcInBhdGhcIjtcblxuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIjtcblxuaW1wb3J0IHsgdHlwZSBCYXNlRnJhbWVDbGFzcyB9IGZyb20gXCIuLi9hcGkvYmFzZS1mcmFtZVwiO1xuaW1wb3J0IHsgdHlwZSBFeHRlbmRlZEFwaSB9IGZyb20gXCIuLi9hcGkvZGVjb3JhdG9yc1wiO1xuaW1wb3J0IHsgU29uYW11IH0gZnJvbSBcIi4uL2FwaS9zb25hbXVcIjtcbmltcG9ydCB7IHR5cGUgQmFzZU1vZGVsQ2xhc3MgfSBmcm9tIFwiLi4vZGF0YWJhc2UvYmFzZS1tb2RlbFwiO1xuaW1wb3J0IHsgdHlwZSBXb3JrZmxvd01ldGFkYXRhIH0gZnJvbSBcIi4uL3Rhc2tzL2RlY29yYXRvclwiO1xuaW1wb3J0IHsgZ2xvYkFzeW5jIH0gZnJvbSBcIi4uL3V0aWxzL2FzeW5jLXV0aWxzXCI7XG5pbXBvcnQgeyBpbXBvcnRNZW1iZXJzIH0gZnJvbSBcIi4uL3V0aWxzL2VzbS11dGlsc1wiO1xuaW1wb3J0IHsgcnVudGltZVBhdGggfSBmcm9tIFwiLi4vdXRpbHMvcGF0aC11dGlsc1wiO1xuaW1wb3J0IHsgdHlwZSBBYnNvbHV0ZVBhdGggfSBmcm9tIFwiLi4vdXRpbHMvcGF0aC11dGlsc1wiO1xuaW1wb3J0IHsgaXNGdW5jdGlvblZhbHVlLCBpc09iamVjdFZhbHVlIH0gZnJvbSBcIi4uL3V0aWxzL3J1bnRpbWUtdmFsdWVcIjtcbmltcG9ydCB7IHJlYWRBcGlzRnJvbUZpbGUgfSBmcm9tIFwiLi9hcGktcGFyc2VyXCI7XG5cbmV4cG9ydCB0eXBlIExvYWRlZEFwaXMgPSBFeHRlbmRlZEFwaVtdO1xuXG5leHBvcnQgdHlwZSBMb2FkZWRUeXBlcyA9IHsgW3R5cGVOYW1lOiBzdHJpbmddOiB6LlpvZFR5cGUgfTtcblxuZXhwb3J0IHR5cGUgTG9hZGVkTW9kZWxzID0ge1xuICBbbW9kZWxOYW1lOiBzdHJpbmddOiBCYXNlTW9kZWxDbGFzcyB8IEJhc2VGcmFtZUNsYXNzO1xufTtcblxuLyoqXG4gKiAqLm1vZGVsLnRz7JmAICouZnJhbWUudHMg7YyM7J2865Ok7JeQ7IScIEFQSSDrqZTshozrk5zrpbwg7YyM7Iux7ZWY7JesIOuhnOuTnO2VqeuLiOuLpC5cbiAqIHJlZ2lzdGVyZWRBcGlz7JeQIEFQSeqwgCDrk7HroZ3rkJjslrQg7J6I7Ja07JW8IO2VmOq4sCDrlYzrrLjsl5AsICoubW9kZWwudHMg7YyM7J2865Ok7J2EIOuovOyggCBpbXBvcnTtlbTslbwg7ZWp64uI64ukLlxuICog65Sw65287IScIGxvYWRNb2RlbHMoKeulvCDrqLzsoIAg7Zi47Lac7ZW07JW8IO2VqeuLiOuLpC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxvYWRBcGlzKCk6IFByb21pc2U8TG9hZGVkQXBpcz4ge1xuICAvLyDslpjripQg7Yq57J207ZWY6rKM64+EIO2ZmOqyveyXkCDrlLDrnbwgLnRz64KYIC5qc+ulvCBpbXBvcnTtlZjripQg6rK97Jqw6rCAIOyVhOuLiOqzoCxcbiAgLy8g7YOA7J6F7J20IOyCtOyVhOyeiOuKlCAudHMg7IaM7IqkIOy9lOuTnOunjOydhCDsnb3slrTslbwg7ZWp64uI64ukLlxuICAvLyDsnbTqsoPsnYAgZGV27ISc67KEKGhvdCByZWxvYWQp6rCAIOyVhOuLjCBwcm9kdWN0aW9uIO2ZmOqyveyXkOyEnOuPhCDrj5nsnbztlanri4jri6QuXG4gIC8vIOuqqOuNuOuTpOydmCAudHMg7YyM7J287J20IOyeiOyWtOyVvCDsnbTrpbwg7J297Ja07IScIOudvOyasO2KuOulvCDrk7HroZ3tlaAg7IiYIOyeiOyWtOyalCFcbiAgY29uc3QgbW9kZWxQYXRoc1BhdHRlcm4gPSBwYXRoLmpvaW4oXG4gICAgU29uYW11LmFwaVJvb3RQYXRoLFxuICAgIFwic3JjL2FwcGxpY2F0aW9uLyoqLyoue21vZGVsLGZyYW1lfS50c1wiLCAvLyAhISBydW50aW1lUGF0aCDslYgg7JSAIOyjvOydmCAhIVxuICApO1xuICBjb25zdCBtb2RlbFBhdGhzID1cbiAgICAvKiBTQUZFVFk6IFR5cGVTY3JpcHQgQVNUIO2MjOyLseqzvCDrj5nquLDtmZQg7J6F66ClIOqzhOyVveydtCDsnbQg6rCS7J2YIO2DgOyeheydhCDrs7TsnqXtlZzri6QuICovIChhd2FpdCBnbG9iQXN5bmMoXG4gICAgICBtb2RlbFBhdGhzUGF0dGVybixcbiAgICApKSBhcyBBYnNvbHV0ZVBhdGhbXTtcblxuICBjb25zdCBhcGlzOiBMb2FkZWRBcGlzID0gW107XG4gIGZvciAoY29uc3QgZmlsZVBhdGggb2YgbW9kZWxQYXRocykge1xuICAgIGNvbnN0IHBhcnNlZEFwaXMgPSBhd2FpdCByZWFkQXBpc0Zyb21GaWxlKGZpbGVQYXRoKTtcbiAgICBhcGlzLnB1c2goLi4ucGFyc2VkQXBpcyk7XG4gIH1cbiAgLy8gY29uc29sZS5sb2coXG4gIC8vICAgY2hhbGsuZ3JheShgW0xvYWRpbmddIExvYWRlZCBBUElzIGZyb20gXCIqLm1vZGVsLnRzXCIgZmlsZXM6ICR7Y291bnR9IGZpbGVzLmApXG4gIC8vICk7XG5cbiAgZm9yIChjb25zdCBhcGkgb2YgYXBpcykge1xuICAgIGlmIChhcGkucGF0aCA9PT0gXCJcIikge1xuICAgICAgLy8gYXBp7J2YIOqyveuhnChwYXRoKeqwgCBcIu2FhSDruYTslrTsnojsnYxcIuyduCDsg4Htg5zsnoXri4jri6QuXG4gICAgICAvLyDsnbTripQgQGFwaeyZgCDtlajqu5gg7IKs7Jqp7ZW07JW8IO2VmOuKlCDrjbDsvZTroIjsnbTthLDqsIAgQGFwaSDsl4bsnbQg67aZ7J2AIOyDge2ZqeyeheuLiOuLpC5cbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYEFQSSAke2FwaS5tb2RlbE5hbWV9LiR7YXBpLm1ldGhvZE5hbWV9IGhhcyBubyBwYXRoLiBQbGVhc2UgYXR0YWNoIEBhcGkgZGVjb3JhdG9yIHRvIHRoZSBtZXRob2QuYCxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGFwaXM7XG59XG5cbi8qKlxuICogKi5tb2RlbC50c+yZgCAqLmZyYW1lLnRzIO2MjOydvOuTpOyXkOyEnCBNb2RlbC9GcmFtZSDtgbTrnpjsiqQg7J247Iqk7YS07Iqk66W8IOuhnOuTnO2VqeuLiOuLpC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxvYWRNb2RlbHMoKTogUHJvbWlzZTxMb2FkZWRNb2RlbHM+IHtcbiAgY29uc3QgbW9kZWxQYXRoc1BhdHRlcm4gPSBwYXRoLmpvaW4oXG4gICAgU29uYW11LmFwaVJvb3RQYXRoLFxuICAgIHJ1bnRpbWVQYXRoKFwic3JjL2FwcGxpY2F0aW9uLyoqLyoue21vZGVsLGZyYW1lfS50c1wiKSxcbiAgKTtcbiAgY29uc3QgbW9kZWxQYXRocyA9IGF3YWl0IGdsb2JBc3luYyhtb2RlbFBhdGhzUGF0dGVybik7XG5cbiAgY29uc3QgbW9kZWxzOiBMb2FkZWRNb2RlbHMgPSB7fTtcbiAgZm9yIChjb25zdCBmaWxlUGF0aCBvZiBtb2RlbFBhdGhzKSB7XG4gICAgY29uc3QgaW1wb3J0ZWRNZW1iZXJzID0gYXdhaXQgaW1wb3J0TWVtYmVyczxCYXNlTW9kZWxDbGFzcyB8IEJhc2VGcmFtZUNsYXNzPihmaWxlUGF0aCk7XG5cbiAgICBmb3IgKGNvbnN0IHsgbmFtZSwgdmFsdWUgfSBvZiBpbXBvcnRlZE1lbWJlcnMpIHtcbiAgICAgIGlmIChuYW1lLmVuZHNXaXRoKFwiTW9kZWxcIikgfHwgbmFtZS5lbmRzV2l0aChcIkZyYW1lXCIpKSB7XG4gICAgICAgIG1vZGVsc1tuYW1lXSA9IHZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBtb2RlbHM7XG59XG5cbi8qKlxuICogKi50eXBlcy50c+yZgCAqLmdlbmVyYXRlZC50cyDtjIzsnbzrk6Tsl5DshJwgWm9kIOyKpO2CpOuniOulvCDroZzrk5ztlanri4jri6QuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBsb2FkVHlwZXMoKTogUHJvbWlzZTxMb2FkZWRUeXBlcz4ge1xuICBjb25zdCB0eXBlUGF0aHNQYXR0ZXJucyA9IFtcbiAgICBwYXRoLmpvaW4oU29uYW11LmFwaVJvb3RQYXRoLCBydW50aW1lUGF0aChcInNyYy9hcHBsaWNhdGlvbi8qKi8qLnR5cGVzLnRzXCIpKSxcbiAgICBwYXRoLmpvaW4oU29uYW11LmFwaVJvb3RQYXRoLCBydW50aW1lUGF0aChcInNyYy9hcHBsaWNhdGlvbi8qKi8qLmdlbmVyYXRlZC50c1wiKSksXG4gIF07XG4gIGNvbnN0IHR5cGVQYXRocyA9IChcbiAgICBhd2FpdCBQcm9taXNlLmFsbCh0eXBlUGF0aHNQYXR0ZXJucy5tYXAoKHBhdHRlcm4pID0+IGdsb2JBc3luYyhwYXR0ZXJuKSkpXG4gICkuZmxhdCgpO1xuXG4gIGNvbnN0IHR5cGVzOiBMb2FkZWRUeXBlcyA9IHt9O1xuICBmb3IgKGNvbnN0IGZpbGVQYXRoIG9mIHR5cGVQYXRocykge1xuICAgIGNvbnN0IGltcG9ydGVkTWVtYmVycyA9IGF3YWl0IGltcG9ydE1lbWJlcnM8ei5ab2RUeXBlPihmaWxlUGF0aCk7XG4gICAgZm9yIChjb25zdCB7IG5hbWUsIHZhbHVlIH0gb2YgaW1wb3J0ZWRNZW1iZXJzKSB7XG4gICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiB6LlpvZFR5cGUpIHtcbiAgICAgICAgdHlwZXNbbmFtZV0gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gdHlwZXM7XG59XG5cbi8qKlxuICogKi53b3JrZmxvdy50cyDtjIzsnbzrk6Tsl5DshJwgV29ya2Zsb3cg66mU7YOA642w7J207YSw66W8IOuhnOuTnO2VqeuLiOuLpC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxvYWRXb3JrZmxvd3MoKSB7XG4gIGNvbnN0IHdvcmtmbG93UGF0aHNQYXR0ZXJuID0gcGF0aC5qb2luKFxuICAgIFNvbmFtdS5hcGlSb290UGF0aCxcbiAgICBydW50aW1lUGF0aChcInNyYy9hcHBsaWNhdGlvbi8qKi8qLndvcmtmbG93LnRzXCIpLFxuICApO1xuICBjb25zdCB3b3JrZmxvd1BhdGhzID0gYXdhaXQgZ2xvYkFzeW5jKHdvcmtmbG93UGF0aHNQYXR0ZXJuKTtcbiAgY29uc3Qgd29ya2Zsb3dzOiBNYXA8c3RyaW5nLCBXb3JrZmxvd01ldGFkYXRhW10+ID0gbmV3IE1hcCgpO1xuICBmb3IgKGNvbnN0IGZpbGVQYXRoIG9mIHdvcmtmbG93UGF0aHMpIHtcbiAgICBjb25zdCBpbXBvcnRlZE1lbWJlcnMgPSBhd2FpdCBpbXBvcnRNZW1iZXJzKGZpbGVQYXRoKTtcbiAgICB3b3JrZmxvd3Muc2V0KFxuICAgICAgZmlsZVBhdGgsXG4gICAgICBpbXBvcnRlZE1lbWJlcnNcbiAgICAgICAgLmZpbHRlcigoeyB2YWx1ZSB9KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIGlzT2JqZWN0VmFsdWUodmFsdWUpICYmXG4gICAgICAgICAgICB2YWx1ZSAhPT0gbnVsbCAmJlxuICAgICAgICAgICAgXCJ0eXBlXCIgaW4gdmFsdWUgJiZcbiAgICAgICAgICAgIHZhbHVlLnR5cGUgPT09IFwid29ya2Zsb3dcIiAmJlxuICAgICAgICAgICAgXCJmblwiIGluIHZhbHVlICYmXG4gICAgICAgICAgICBpc0Z1bmN0aW9uVmFsdWUodmFsdWUuZm4pXG4gICAgICAgICAgKTtcbiAgICAgICAgfSlcbiAgICAgICAgLm1hcCgoeyB2YWx1ZSB9KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIC8qIFNBRkVUWTogVHlwZVNjcmlwdCBBU1Qg7YyM7Iux6rO8IOuPmeq4sO2ZlCDsnoXroKUg6rOE7JW97J20IOydtCDqsJLsnZgg7YOA7J6F7J2EIOuztOyepe2VnOuLpC4gKi8gdmFsdWUgYXMgV29ya2Zsb3dNZXRhZGF0YTtcbiAgICAgICAgfSksXG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiB3b3JrZmxvd3M7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7OztBQTZCQSxlQUFzQixXQUFnQztDQVNwRCxNQUFNLGFBQ3dELE1BQU0sVUFMMUMsS0FBSyxLQUM3QixPQUFPLGFBQ1AsdUNBSUUsQ0FDRjtDQUVGLE1BQU0sT0FBbUIsQ0FBQztDQUMxQixLQUFLLE1BQU0sWUFBWSxZQUFZO0VBQ2pDLE1BQU0sYUFBYSxNQUFNLGlCQUFpQixRQUFRO0VBQ2xELEtBQUssS0FBSyxHQUFHLFVBQVU7Q0FDekI7Q0FLQSxLQUFLLE1BQU0sT0FBTyxNQUNoQixJQUFJLElBQUksU0FBUyxJQUdmLE1BQU0sSUFBSSxNQUNSLE9BQU8sSUFBSSxVQUFVLEdBQUcsSUFBSSxXQUFXLDBEQUN6QztDQUlKLE9BQU87QUFDVDs7OztBQUtBLGVBQXNCLGFBQW9DO0NBS3hELE1BQU0sYUFBYSxNQUFNLFVBSkMsS0FBSyxLQUM3QixPQUFPLGFBQ1AsWUFBWSx1Q0FBdUMsQ0FFbEIsQ0FBaUI7Q0FFcEQsTUFBTSxTQUF1QixDQUFDO0NBQzlCLEtBQUssTUFBTSxZQUFZLFlBQVk7RUFDakMsTUFBTSxrQkFBa0IsTUFBTSxjQUErQyxRQUFRO0VBRXJGLEtBQUssTUFBTSxFQUFFLE1BQU0sV0FBVyxpQkFDNUIsSUFBSSxLQUFLLFNBQVMsT0FBTyxLQUFLLEtBQUssU0FBUyxPQUFPLEdBQ2pELE9BQU8sUUFBUTtDQUdyQjtDQUVBLE9BQU87QUFDVDs7OztBQUtBLGVBQXNCLFlBQWtDO0NBQ3RELE1BQU0sb0JBQW9CLENBQ3hCLEtBQUssS0FBSyxPQUFPLGFBQWEsWUFBWSwrQkFBK0IsQ0FBQyxHQUMxRSxLQUFLLEtBQUssT0FBTyxhQUFhLFlBQVksbUNBQW1DLENBQUMsQ0FDaEY7Q0FDQSxNQUFNLGFBQ0osTUFBTSxRQUFRLElBQUksa0JBQWtCLEtBQUssWUFBWSxVQUFVLE9BQU8sQ0FBQyxDQUFDLEVBQUEsQ0FDeEUsS0FBSztDQUVQLE1BQU0sUUFBcUIsQ0FBQztDQUM1QixLQUFLLE1BQU0sWUFBWSxXQUFXO0VBQ2hDLE1BQU0sa0JBQWtCLE1BQU0sY0FBeUIsUUFBUTtFQUMvRCxLQUFLLE1BQU0sRUFBRSxNQUFNLFdBQVcsaUJBQzVCLElBQUksaUJBQWlCLEVBQUUsU0FDckIsTUFBTSxRQUFRO0NBR3BCO0NBRUEsT0FBTztBQUNUOzs7O0FBS0EsZUFBc0IsZ0JBQWdCO0NBS3BDLE1BQU0sZ0JBQWdCLE1BQU0sVUFKQyxLQUFLLEtBQ2hDLE9BQU8sYUFDUCxZQUFZLGtDQUFrQyxDQUVWLENBQW9CO0NBQzFELE1BQU0sNEJBQTZDLElBQUksSUFBSTtDQUMzRCxLQUFLLE1BQU0sWUFBWSxlQUFlO0VBQ3BDLE1BQU0sa0JBQWtCLE1BQU0sY0FBYyxRQUFRO0VBQ3BELFVBQVUsSUFDUixVQUNBLGdCQUNHLFFBQVEsRUFBRSxZQUFZO0dBQ3JCLE9BQ0UsY0FBYyxLQUFLLEtBQ25CLFVBQVUsUUFDVixVQUFVLFNBQ1YsTUFBTSxTQUFTLGNBQ2YsUUFBUSxTQUNSLGdCQUFnQixNQUFNLEVBQUU7RUFFNUIsQ0FBQyxDQUFDLENBQ0QsS0FBSyxFQUFFLFlBQVk7R0FDbEIsT0FBa0U7RUFDcEUsQ0FBQyxDQUNMO0NBQ0Y7Q0FFQSxPQUFPO0FBQ1Q7O2FBNUlzQztrQkFHVTtnQkFDRTtpQkFDRDtvQkFFc0I7aUJBQ3hCIn0=
|
|
@@ -24,6 +24,10 @@ export declare function actionGenerateSchemas(): Promise<AbsolutePath[]>;
|
|
|
24
24
|
* @returns 생성된 파일 경로.
|
|
25
25
|
*/
|
|
26
26
|
export declare function actionGenerateHttps(): Promise<AbsolutePath>;
|
|
27
|
+
/**
|
|
28
|
+
* 최종 REST caster를 담는 API 전용 validator registry를 재생성합니다.
|
|
29
|
+
*/
|
|
30
|
+
export declare function actionGenerateHttpValidators(): Promise<AbsolutePath>;
|
|
27
31
|
/**
|
|
28
32
|
* queries.generated.ts 재생성합니다.
|
|
29
33
|
* @returns 생성된 파일 경로 배열.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"syncer-actions.d.ts","sourceRoot":"","sources":["../../src/syncer/syncer-actions.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"syncer-actions.d.ts","sourceRoot":"","sources":["../../src/syncer/syncer-actions.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,KAAK,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAKlE,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAQxD,wBAAsB,gBAAgB,kBAcrC;AAED;;;;GAIG;AACH,wBAAsB,sBAAsB,CAC1C,WAAW,EAAE;IACX,WAAW,EAAE,iBAAiB,CAAC;CAChC,EAAE,GACF,OAAO,CAAC,YAAY,EAAE,CAAC,CAazB;AAED;;;GAGG;AACH,wBAAsB,0BAA0B,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAE1F;AAED;;;GAGG;AACH,wBAAsB,qBAAqB,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC,CAOrE;AAED;;;GAGG;AACH,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,YAAY,CAAC,CAQjE;AAED;;GAEG;AACH,wBAAsB,4BAA4B,IAAI,OAAO,CAAC,YAAY,CAAC,CAmB1E;AAED;;;GAGG;AACH,wBAAsB,wBAAwB,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC,CAExE;AAED;;;;;;GAMG;AACH,wBAAsB,uCAAuC,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC,CAWvF;AAED;;;;;;;GAOG;AACH,wBAAsB,wBAAwB,CAAC,OAAO,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAoCzF;AAED;;;;;GAKG;AACH,wBAAsB,oCAAoC,IAAI,OAAO,CAAC,IAAI,CAAC,CAiE1E;AAED;;;;;;;;GAQG;AACH,wBAAsB,0BAA0B,IAAI,OAAO,CAAC,IAAI,CAAC,CAwBhE"}
|
|
@@ -1,23 +1,24 @@
|
|
|
1
1
|
import { __esmMin } from "../_virtual/_rolldown/runtime.js";
|
|
2
|
+
import { init_runtime_value, isObjectValue } from "../utils/runtime-value.js";
|
|
2
3
|
import { AlreadyProcessedException, init_so_exceptions } from "../exceptions/so-exceptions.js";
|
|
3
4
|
import { init_controller, isTest } from "../utils/controller.js";
|
|
4
5
|
import { formatCode, init_formatter } from "../utils/formatter.js";
|
|
5
|
-
import { copyFileWithReplaceCoreToShared, exists, init_fs_utils } from "../utils/fs-utils.js";
|
|
6
6
|
import { Sonamu, init_sonamu } from "../api/sonamu.js";
|
|
7
7
|
import { Naite, init_naite } from "../naite/naite.js";
|
|
8
|
+
import { init_filesystem_dependencies, syncerFileExists, syncerFilesystem } from "./filesystem-dependencies.js";
|
|
8
9
|
import { init_file_tracking, trackWritten } from "./file-tracking.js";
|
|
9
10
|
import { generateTemplate, init_code_generator } from "./code-generator.js";
|
|
11
|
+
import { copyFileWithReplaceCoreToShared, init_file_copy } from "./file-copy.js";
|
|
10
12
|
import assert from "assert";
|
|
11
13
|
import path, { dirname } from "path";
|
|
12
14
|
import chalk from "chalk";
|
|
13
|
-
import { mkdir, readFile, writeFile } from "fs/promises";
|
|
14
15
|
//#region src/syncer/syncer-actions.ts
|
|
15
16
|
async function actionSyncConfig() {
|
|
16
17
|
const { host, port } = Sonamu.config.server.listen ?? {};
|
|
17
18
|
const content = `API_HOST=${host ?? "localhost"}\nAPI_PORT=${port ?? 3e3}`;
|
|
18
19
|
Naite.t("actionSyncConfig", { content });
|
|
19
|
-
await Promise.all([...Sonamu.config.sync.targets.map(
|
|
20
|
-
|
|
20
|
+
await Promise.all([...Sonamu.config.sync.targets.map((target) => {
|
|
21
|
+
return syncerFilesystem.writeFile(path.join(Sonamu.appRootPath, target, ".sonamu.env"), content);
|
|
21
22
|
}), generateTemplate("generated_sso", {}, { overwrite: true })]);
|
|
22
23
|
}
|
|
23
24
|
/**
|
|
@@ -53,6 +54,20 @@ async function actionGenerateHttps() {
|
|
|
53
54
|
return res;
|
|
54
55
|
}
|
|
55
56
|
/**
|
|
57
|
+
* 최종 REST caster를 담는 API 전용 validator registry를 재생성합니다.
|
|
58
|
+
*/
|
|
59
|
+
async function actionGenerateHttpValidators() {
|
|
60
|
+
const registryPath = path.join(Sonamu.apiRootPath, "src/application/sonamu.validators.generated.ts");
|
|
61
|
+
const policy = Sonamu.config.validation?.zodCompiler;
|
|
62
|
+
if (!(isObjectValue(policy) && policy !== null && policy.api === "aot")) {
|
|
63
|
+
if (await syncerFileExists(registryPath)) await syncerFilesystem.unlink(registryPath);
|
|
64
|
+
return registryPath;
|
|
65
|
+
}
|
|
66
|
+
const [generatedPath] = await generateTemplate("http_validators", {}, { overwrite: true });
|
|
67
|
+
assert(generatedPath);
|
|
68
|
+
return generatedPath;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
56
71
|
* queries.generated.ts 재생성합니다.
|
|
57
72
|
* @returns 생성된 파일 경로 배열.
|
|
58
73
|
*/
|
|
@@ -88,7 +103,7 @@ async function actionSyncFilesToTargets(tsPaths) {
|
|
|
88
103
|
return (await Promise.all(targets.map(async (target) => Promise.all(tsPaths.map(async (realSrc) => {
|
|
89
104
|
const dst = realSrc.replace(`/${apiDir}/`, `/${target}/`).replace("/application/", "/services/");
|
|
90
105
|
const dir = dirname(dst);
|
|
91
|
-
if (!await
|
|
106
|
+
if (!await syncerFileExists(dir)) await syncerFilesystem.mkdir(dir, { recursive: true });
|
|
92
107
|
await copyFileWithReplaceCoreToShared(realSrc, dst, [
|
|
93
108
|
"/**",
|
|
94
109
|
" * @generated",
|
|
@@ -109,24 +124,24 @@ async function actionSyncFilesToTargets(tsPaths) {
|
|
|
109
124
|
async function actionCopySharedToTargetsIfNotExists() {
|
|
110
125
|
const { targets } = Sonamu.config.sync;
|
|
111
126
|
const dictUtilsPath = path.join(import.meta.dirname.replace("/dist/", "/src/"), "../dict/utils.ts");
|
|
112
|
-
const dictUtilsCode = await
|
|
127
|
+
const dictUtilsCode = await syncerFileExists(dictUtilsPath) ? await syncerFilesystem.readFile(dictUtilsPath, "utf-8") : "";
|
|
113
128
|
const convertMap = {
|
|
114
129
|
baseUrl: Sonamu.config.server.baseUrl ?? `http://${Sonamu.config.server.listen?.host ?? "localhost"}:${Sonamu.config.server.listen?.port ?? 3e3}`,
|
|
115
130
|
dictUtils: dictUtilsCode
|
|
116
131
|
};
|
|
117
132
|
for (const target of targets) {
|
|
118
133
|
const srcPath = path.join(import.meta.dirname.replace("/dist/", "/src/"), `../shared/${target}.shared.ts.txt`);
|
|
119
|
-
if (!await
|
|
120
|
-
if (!await
|
|
121
|
-
const fullText = await readFile(srcPath, "utf-8");
|
|
134
|
+
if (!await syncerFileExists(srcPath)) continue;
|
|
135
|
+
if (!await syncerFileExists(path.join(Sonamu.appRootPath, target))) throw new Error(`Tried to copy sonamu.shared.ts to target '${target}' but the target directory does not exist. Please check your project directory structure.`);
|
|
136
|
+
const fullText = await syncerFilesystem.readFile(srcPath, "utf-8");
|
|
122
137
|
const convertedText = Object.entries(convertMap).reduce((acc, [key, value]) => acc.replace(`$[[${key}]]`, value), fullText);
|
|
123
138
|
const destPath = path.join(Sonamu.appRootPath, target, "src/services/sonamu.shared.ts");
|
|
124
|
-
if (!await
|
|
125
|
-
await mkdir(path.dirname(destPath), { recursive: true });
|
|
139
|
+
if (!await syncerFileExists(path.dirname(destPath))) {
|
|
140
|
+
await syncerFilesystem.mkdir(path.dirname(destPath), { recursive: true });
|
|
126
141
|
console.warn(`Created directory '${path.dirname(destPath)}' because it did not exist.`);
|
|
127
142
|
}
|
|
128
|
-
if (await
|
|
129
|
-
await writeFile(destPath, await formatCode(convertedText, destPath));
|
|
143
|
+
if (await syncerFileExists(destPath)) continue;
|
|
144
|
+
await syncerFilesystem.writeFile(destPath, await formatCode(convertedText, destPath));
|
|
130
145
|
!isTest() && console.log(chalk.bold("Copied: ") + chalk.blue(path.relative(Sonamu.appRootPath, destPath)));
|
|
131
146
|
}
|
|
132
147
|
}
|
|
@@ -156,7 +171,7 @@ async function actionSyncSonamuDictionary() {
|
|
|
156
171
|
*/
|
|
157
172
|
async function syncLocaleFiles(target, apiI18nDir, locales) {
|
|
158
173
|
const targetI18nDir = path.join(Sonamu.appRootPath, target, "src/i18n");
|
|
159
|
-
await mkdir(targetI18nDir, { recursive: true });
|
|
174
|
+
await syncerFilesystem.mkdir(targetI18nDir, { recursive: true });
|
|
160
175
|
for (const locale of locales) {
|
|
161
176
|
const sourceFile = path.join(apiI18nDir, `${locale}.ts`);
|
|
162
177
|
const targetFile = path.join(targetI18nDir, `${locale}.ts`);
|
|
@@ -176,12 +191,14 @@ var init_syncer_actions = __esmMin((() => {
|
|
|
176
191
|
init_naite();
|
|
177
192
|
init_controller();
|
|
178
193
|
init_formatter();
|
|
179
|
-
|
|
194
|
+
init_runtime_value();
|
|
180
195
|
init_code_generator();
|
|
196
|
+
init_file_copy();
|
|
181
197
|
init_file_tracking();
|
|
198
|
+
init_filesystem_dependencies();
|
|
182
199
|
}));
|
|
183
200
|
//#endregion
|
|
184
201
|
init_syncer_actions();
|
|
185
|
-
export { actionCopySharedToTargetsIfNotExists, actionGenerateHttps, actionGenerateInitialTypes, actionGenerateSchemas, actionGenerateServices, actionGenerateSsrEntryServerIfNotExists, actionGenerateSsrQueries, actionSyncConfig, actionSyncFilesToTargets, actionSyncSonamuDictionary, init_syncer_actions };
|
|
202
|
+
export { actionCopySharedToTargetsIfNotExists, actionGenerateHttpValidators, actionGenerateHttps, actionGenerateInitialTypes, actionGenerateSchemas, actionGenerateServices, actionGenerateSsrEntryServerIfNotExists, actionGenerateSsrQueries, actionSyncConfig, actionSyncFilesToTargets, actionSyncSonamuDictionary, init_syncer_actions };
|
|
186
203
|
|
|
187
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3luY2VyLWFjdGlvbnMuanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3N5bmNlci9zeW5jZXItYWN0aW9ucy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNzZXJ0IGZyb20gXCJhc3NlcnRcIjtcbmltcG9ydCB7IG1rZGlyLCByZWFkRmlsZSwgd3JpdGVGaWxlIH0gZnJvbSBcImZzL3Byb21pc2VzXCI7XG5pbXBvcnQgcGF0aCwgeyBkaXJuYW1lIH0gZnJvbSBcInBhdGhcIjtcblxuaW1wb3J0IGNoYWxrIGZyb20gXCJjaGFsa1wiO1xuXG5pbXBvcnQgeyBTb25hbXUgfSBmcm9tIFwiLi4vYXBpL3NvbmFtdVwiO1xuaW1wb3J0IHsgdHlwZSBFbnRpdHlOYW1lc1JlY29yZCB9IGZyb20gXCIuLi9lbnRpdHkvZW50aXR5LW1hbmFnZXJcIjtcbmltcG9ydCB7IEFscmVhZHlQcm9jZXNzZWRFeGNlcHRpb24gfSBmcm9tIFwiLi4vZXhjZXB0aW9ucy9zby1leGNlcHRpb25zXCI7XG5pbXBvcnQgeyBOYWl0ZSB9IGZyb20gXCIuLi9uYWl0ZS9uYWl0ZVwiO1xuaW1wb3J0IHsgaXNUZXN0IH0gZnJvbSBcIi4uL3V0aWxzL2NvbnRyb2xsZXJcIjtcbmltcG9ydCB7IGZvcm1hdENvZGUgfSBmcm9tIFwiLi4vdXRpbHMvZm9ybWF0dGVyXCI7XG5pbXBvcnQgeyBjb3B5RmlsZVdpdGhSZXBsYWNlQ29yZVRvU2hhcmVkLCBleGlzdHMgfSBmcm9tIFwiLi4vdXRpbHMvZnMtdXRpbHNcIjtcbmltcG9ydCB7IHR5cGUgQWJzb2x1dGVQYXRoIH0gZnJvbSBcIi4uL3V0aWxzL3BhdGgtdXRpbHNcIjtcbmltcG9ydCB7IGdlbmVyYXRlVGVtcGxhdGUgfSBmcm9tIFwiLi9jb2RlLWdlbmVyYXRvclwiO1xuaW1wb3J0IHsgdHJhY2tXcml0dGVuIH0gZnJvbSBcIi4vZmlsZS10cmFja2luZ1wiO1xuXG4vLyB3ZWIvLnNvbmFtdS5lbnYg7JeQIO2YhOyerCDshKTsoJXqsJIg7KCA7J6lXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYWN0aW9uU3luY0NvbmZpZygpIHtcbiAgY29uc3QgeyBob3N0LCBwb3J0IH0gPSBTb25hbXUuY29uZmlnLnNlcnZlci5saXN0ZW4gPz8ge307XG4gIGNvbnN0IGNvbnRlbnQgPSBgQVBJX0hPU1Q9JHtob3N0ID8/IFwibG9jYWxob3N0XCJ9XFxuQVBJX1BPUlQ9JHtwb3J0ID8/IDMwMDB9YDtcblxuICBOYWl0ZS50KFwiYWN0aW9uU3luY0NvbmZpZ1wiLCB7IGNvbnRlbnQgfSk7XG4gIGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAuLi5Tb25hbXUuY29uZmlnLnN5bmMudGFyZ2V0cy5tYXAoYXN5bmMgKHRhcmdldCkgPT4ge1xuICAgICAgYXdhaXQgd3JpdGVGaWxlKHBhdGguam9pbihTb25hbXUuYXBwUm9vdFBhdGgsIHRhcmdldCwgXCIuc29uYW11LmVudlwiKSwgY29udGVudCk7XG4gICAgfSksXG4gICAgZ2VuZXJhdGVUZW1wbGF0ZShcImdlbmVyYXRlZF9zc29cIiwge30sIHsgb3ZlcndyaXRlOiB0cnVlIH0pLFxuICBdKTtcbn1cblxuLyoqXG4gKiBzZXJ2aWNlcy5nZW5lcmF0ZWQudHPrpbwg7IOd7ISx7ZWp64uI64ukLlxuICogQHBhcmFtIHBhcmFtc0FycmF5XG4gKiBAcmV0dXJucyDsg53shLHrkJwg7YyM7J28IOqyveuhnCDrsLDsl7QuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhY3Rpb25HZW5lcmF0ZVNlcnZpY2VzKFxuICBwYXJhbXNBcnJheToge1xuICAgIG5hbWVzUmVjb3JkOiBFbnRpdHlOYW1lc1JlY29yZDtcbiAgfVtdLFxuKTogUHJvbWlzZTxBYnNvbHV0ZVBhdGhbXT4ge1xuICBOYWl0ZS50KFwiYWN0aW9uR2VuZXJhdGVTZXJ2aWNlc1wiLCBwYXJhbXNBcnJheSk7XG5cbiAgLy8gc2VydmljZXMuZ2VuZXJhdGVkLnRzIO2Gte2VqSDtjIzsnbwg7IOd7ISxXG4gIGNvbnN0IHNlcnZpY2VzRmlsZSA9IGF3YWl0IGdlbmVyYXRlVGVtcGxhdGUoXG4gICAgXCJzZXJ2aWNlc1wiLFxuICAgIHt9LFxuICAgIHtcbiAgICAgIG92ZXJ3cml0ZTogdHJ1ZSxcbiAgICB9LFxuICApO1xuXG4gIHJldHVybiBbLi4uc2VydmljZXNGaWxlXTtcbn1cblxuLyoqXG4gKiBFbnRpdHnsl5Ag65S466awIOy0iOq4sCB0eXBlcy50c+ulvCDrp4zrk6TslrTspI3ri4jri6QuXG4gKiBAcGFyYW0gZW50aXR5SWRcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFjdGlvbkdlbmVyYXRlSW5pdGlhbFR5cGVzKGVudGl0eUlkOiBzdHJpbmcpOiBQcm9taXNlPEFic29sdXRlUGF0aFtdPiB7XG4gIHJldHVybiBnZW5lcmF0ZVRlbXBsYXRlKFwiaW5pdF90eXBlc1wiLCB7IGVudGl0eUlkIH0pO1xufVxuXG4vKipcbiAqIHNvbmFtdS5nZW5lcmF0ZWQudHPsmYAgc29uYW11LmdlbmVyYXRlZC5zc28udHPrpbwg7IOd7ISx7ZWp64uI64ukLlxuICogQHJldHVybnMg7IOd7ISx65CcIO2MjOydvCDqsr3roZwg67Cw7Je0LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYWN0aW9uR2VuZXJhdGVTY2hlbWFzKCk6IFByb21pc2U8QWJzb2x1dGVQYXRoW10+IHtcbiAgcmV0dXJuIChcbiAgICBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICBnZW5lcmF0ZVRlbXBsYXRlKFwiZ2VuZXJhdGVkX3Nzb1wiLCB7fSwgeyBvdmVyd3JpdGU6IHRydWUgfSksXG4gICAgICBnZW5lcmF0ZVRlbXBsYXRlKFwiZ2VuZXJhdGVkXCIsIHt9LCB7IG92ZXJ3cml0ZTogdHJ1ZSB9KSxcbiAgICBdKVxuICApLmZsYXQoKTtcbn1cblxuLyoqXG4gKiBzb25hbXUuZ2VuZXJhdGVkLmh0dHDrpbwg7IOd7ISx7ZWp64uI64ukLlxuICogQHJldHVybnMg7IOd7ISx65CcIO2MjOydvCDqsr3roZwuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhY3Rpb25HZW5lcmF0ZUh0dHBzKCk6IFByb21pc2U8QWJzb2x1dGVQYXRoPiB7XG4gIGNvbnN0IFtyZXNdID0gYXdhaXQgZ2VuZXJhdGVUZW1wbGF0ZShcbiAgICBcImdlbmVyYXRlZF9odHRwXCIsXG4gICAgeyBlbnRpdHlJZDogXCJkdW1teVwiIH0sXG4gICAgeyBvdmVyd3JpdGU6IHRydWUgfSxcbiAgKTtcbiAgYXNzZXJ0KHJlcyk7XG4gIHJldHVybiByZXM7XG59XG5cbi8qKlxuICogcXVlcmllcy5nZW5lcmF0ZWQudHMg7J6s7IOd7ISx7ZWp64uI64ukLlxuICogQHJldHVybnMg7IOd7ISx65CcIO2MjOydvCDqsr3roZwg67Cw7Je0LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYWN0aW9uR2VuZXJhdGVTc3JRdWVyaWVzKCk6IFByb21pc2U8QWJzb2x1dGVQYXRoW10+IHtcbiAgcmV0dXJuIGdlbmVyYXRlVGVtcGxhdGUoXCJxdWVyaWVzXCIsIHt9LCB7IG92ZXJ3cml0ZTogdHJ1ZSB9KTtcbn1cblxuLyoqXG4gKiBlbnRyeS1zZXJ2ZXIuZ2VuZXJhdGVkLnRzeOulvCDsg53shLHtlanri4jri6QuXG4gKiDri6Trpbgg7JWh7IWY65Ok6rO8IOuLrOumrCwg7J2066+4IO2MjOydvOydtCDsnojsnLzrqbQg6re464OlIOuGlOuRoeuLiOuLpC4g6re4656Y7IScIO2VqOyImCDsnbTrpoQg64Gd7JeQIOyNqOuGqOyWtOyalCDjhY5cbiAqIOyeheugpSDsnZjsobQg7JeG64qUIOygleyggSDsvZTrk5zrnbwg66ek67KIIG92ZXJ3cml0ZeuKlCBtdGltZeunjCDqsLHsi6DtlZjripQg7J2Y66+4IOyXhuuKlCDrj5nsnpEuXG4gKiDthZztlIzrpr8g7J6Q7LK06rCAIOuzgOqyveuQnCDqsr3smrAoU29uYW11IOyXheq3uOugiOydtOuTnCnsl5DripQg7IKs7Jqp7J6Q6rCAIO2MjOydvOydhCDsgq3soJztlZwg65KkIHN5bmProZwg7J6s7IOd7ISxLlxuICogQHJldHVybnMg7IOd7ISx65CcIO2MjOydvCDqsr3roZwg67Cw7Je0ICjsnbTrr7gg7J6I7Jy866m0IOu5iCDrsLDsl7QpLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYWN0aW9uR2VuZXJhdGVTc3JFbnRyeVNlcnZlcklmTm90RXhpc3RzKCk6IFByb21pc2U8QWJzb2x1dGVQYXRoW10+IHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gYXdhaXQgZ2VuZXJhdGVUZW1wbGF0ZShcImVudHJ5X3NlcnZlclwiLCB7fSwgeyBvdmVyd3JpdGU6IGZhbHNlIH0pO1xuICB9IGNhdGNoIChlKSB7XG4gICAgLy8gZ2VuZXJhdGVUZW1wbGF0ZeydgCBvdmVyd3JpdGU6IGZhbHNl7JeQ7IScIO2MjOydvOydtCDsnbTrr7gg7J6I7Jy866m0IOyYiOyZuOulvCDrjZjsp5Hri4jri6QuXG4gICAgLy8gSWZOb3RFeGlzdHMg7J2Y66+47IOBIFwi6re464OlIOuGlOuRlOuLpFwi6rCAIOygleyDgeydtOuvgOuhnCDruYgg67Cw7Je066GcIOuzgO2ZmO2VqeuLiOuLpC5cbiAgICBpZiAoZSBpbnN0YW5jZW9mIEFscmVhZHlQcm9jZXNzZWRFeGNlcHRpb24pIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgdGhyb3cgZTtcbiAgfVxufVxuXG4vKipcbiAqIOyjvOyWtOynhCAudHMg7YyM7J2865OkKGFwaeyXkCDsnojri6Tqs6Ag6rCA7KCVKeydhCDrqqjrk6Ag7YOA6rKfIOuUlOugie2GoOumrOydmCBzZXJ2aWNlc+yXkCDqsJbri6Qg65Gh64uI64ukLlxuICog7J2065WMIOuCtOu2gOydmCBzb25hbXUgaW1wb3J064qUIHNvbmFtdS5zaGFyZWQudHMgaW1wb3J066GcIOy5mO2ZmOuQmOqzoCxcbiAqIOqyveuhnOydmCAvYXBwbGljYXRpb24v7J2AIC9zZXJ2aWNlcy/roZwg7LmY7ZmY65Cp64uI64ukLlxuICpcbiAqIEBwYXJhbSB0c1BhdGhzIOuzteyCrO2VoCDtjIzsnbzrk6TsnZgg7KCI64yAIOqyveuhnFxuICogQHJldHVybnMg6rCBIO2DgOqyn+yXkCDrs7XsgqzrkJwg7YyM7J2865Ok7J2YIOygiOuMgCDqsr3roZwg67Cw7Je0IChmbGF0KS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFjdGlvblN5bmNGaWxlc1RvVGFyZ2V0cyh0c1BhdGhzOiBBYnNvbHV0ZVBhdGhbXSk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgY29uc3QgeyB0YXJnZXRzIH0gPSBTb25hbXUuY29uZmlnLnN5bmM7XG4gIGNvbnN0IHsgZGlyOiBhcGlEaXIgfSA9IFNvbmFtdS5jb25maWcuYXBpO1xuXG4gIHJldHVybiAoXG4gICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICB0YXJnZXRzLm1hcChhc3luYyAodGFyZ2V0KSA9PlxuICAgICAgICBQcm9taXNlLmFsbChcbiAgICAgICAgICB0c1BhdGhzLm1hcChhc3luYyAocmVhbFNyYykgPT4ge1xuICAgICAgICAgICAgY29uc3QgZHN0ID0gcmVhbFNyY1xuICAgICAgICAgICAgICAucmVwbGFjZShgLyR7YXBpRGlyfS9gLCBgLyR7dGFyZ2V0fS9gKVxuICAgICAgICAgICAgICAucmVwbGFjZShcIi9hcHBsaWNhdGlvbi9cIiwgXCIvc2VydmljZXMvXCIpO1xuICAgICAgICAgICAgY29uc3QgZGlyID0gZGlybmFtZShkc3QpO1xuICAgICAgICAgICAgaWYgKCEoYXdhaXQgZXhpc3RzKGRpcikpKSB7XG4gICAgICAgICAgICAgIGF3YWl0IG1rZGlyKGRpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBzeW5jSGVhZGVyID0gW1xuICAgICAgICAgICAgICBcIi8qKlwiLFxuICAgICAgICAgICAgICBcIiAqIEBnZW5lcmF0ZWRcIixcbiAgICAgICAgICAgICAgXCIgKiBBUEnsl5DshJwg64+Z6riw7ZmU65CcIO2MjOydvOyeheuLiOuLpC4g7KeB7KCRIOyImOygle2VmOyngCDrp4jshLjsmpQuXCIsXG4gICAgICAgICAgICAgIFwiICovXCIsXG4gICAgICAgICAgICBdLmpvaW4oXCJcXG5cIik7XG4gICAgICAgICAgICBhd2FpdCBjb3B5RmlsZVdpdGhSZXBsYWNlQ29yZVRvU2hhcmVkKHJlYWxTcmMsIGRzdCwgc3luY0hlYWRlcik7XG4gICAgICAgICAgICBhd2FpdCB0cmFja1dyaXR0ZW4oZHN0IGFzIEFic29sdXRlUGF0aCk7XG4gICAgICAgICAgICAhaXNUZXN0KCkgJiZcbiAgICAgICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICAgICAgY2hhbGsuYm9sZChcIkNvcGllZDogXCIpICsgY2hhbGsuYmx1ZShkc3QucmVwbGFjZShgJHtTb25hbXUuYXBwUm9vdFBhdGh9L2AsIFwiXCIpKSxcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHJldHVybiBkc3Q7XG4gICAgICAgICAgfSksXG4gICAgICAgICksXG4gICAgICApLFxuICAgIClcbiAgKS5mbGF0KCk7XG59XG5cbi8qKlxuICogc2hhcmVkIO2FnO2UjOumv+ycvOuhnOu2gO2EsCBzb25hbXUuc2hhcmVkLnRzIO2MjOydvOydhCDrp4zrk6TslrTshJwg66qo65OgIO2DgOqynyDrlJTroInthqDrpqzsl5Ag6rCW64ukIOuRoeuLiOuLpC5cbiAqIO2MjOydvOydhCDrp4zrk5zripQg6rO87KCV7JeQ7IScIOyXrOufrCDsuZjtmZgg6rCA6rO17J20IOydvOyWtOuCqeuLiOuLpC5cbiAqXG4gKiDri6Trpbgg7JWh7IWY65Ok6rO8IOuLrOumrCwg7J2066+4IO2MjOydvOydtCDsnojsnLzrqbQg6re464OlIOuGlOuRoeuLiOuLpC4g6re4656Y7IScIO2VqOyImCDsnbTrpoQg64Gd7JeQIOyNqOuGqOyWtOyalCDjhY5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFjdGlvbkNvcHlTaGFyZWRUb1RhcmdldHNJZk5vdEV4aXN0cygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgeyB0YXJnZXRzIH0gPSBTb25hbXUuY29uZmlnLnN5bmM7XG5cbiAgLy8gcGx1cmFsLnRzIOuCtOyaqeydhCDsnb3slrTshJwgc2hhcmVkIO2MjOydvOyXkCDsgr3snoXtlanri4jri6QuXG4gIGNvbnN0IGRpY3RVdGlsc1BhdGggPSBwYXRoLmpvaW4oXG4gICAgaW1wb3J0Lm1ldGEuZGlybmFtZS5yZXBsYWNlKFwiL2Rpc3QvXCIsIFwiL3NyYy9cIiksXG4gICAgXCIuLi9kaWN0L3V0aWxzLnRzXCIsXG4gICk7XG4gIGNvbnN0IGRpY3RVdGlsc0NvZGUgPSAoYXdhaXQgZXhpc3RzKGRpY3RVdGlsc1BhdGgpKSA/IGF3YWl0IHJlYWRGaWxlKGRpY3RVdGlsc1BhdGgsIFwidXRmLThcIikgOiBcIlwiO1xuXG4gIC8vIO2KueyglSDrs4DsiJgg7LmY7ZmY7J2EIOychO2VtOyEnCDsgqzsmqntlanri4jri6QuXG4gIGNvbnN0IGNvbnZlcnRNYXAgPSB7XG4gICAgYmFzZVVybDpcbiAgICAgIFNvbmFtdS5jb25maWcuc2VydmVyLmJhc2VVcmwgPz9cbiAgICAgIGBodHRwOi8vJHtTb25hbXUuY29uZmlnLnNlcnZlci5saXN0ZW4/Lmhvc3QgPz8gXCJsb2NhbGhvc3RcIn06JHtTb25hbXUuY29uZmlnLnNlcnZlci5saXN0ZW4/LnBvcnQgPz8gMzAwMH1gLFxuICAgIGRpY3RVdGlsczogZGljdFV0aWxzQ29kZSxcbiAgfTtcblxuICBmb3IgKGNvbnN0IHRhcmdldCBvZiB0YXJnZXRzKSB7XG4gICAgLy8g7KeA6riIIOqwgOyguOqwgOugpOuKlCDsnbQg7YyM7J287J2AIFNvbmFtdSDsvZTrk5zrsqDsnbTsiqTsnZgg7J2867aA7J6F64uI64ukLlxuICAgIC8vIOq3uOufsOuNsCBkaXN0IOyGjSDruYzrk5zrkJwg7IaM7IqkIOy9lOuTnCDtjIzsnbzsnbQg7ZWE7JqU7ZWcIOqyg+ydtCDslYTri4jqs6AsIHNyY+yXkOunjCDsnojripQg7YWN7Iqk7Yq4IO2MjOydvOydtCDtlYTsmpTtlanri4jri6QuXG4gICAgLy8g65Sw65287IScIC9zcmMv7JeQ7IScIOywvuyKteuLiOuLpC5cbiAgICBjb25zdCBzcmNQYXRoID0gcGF0aC5qb2luKFxuICAgICAgaW1wb3J0Lm1ldGEuZGlybmFtZS5yZXBsYWNlKFwiL2Rpc3QvXCIsIFwiL3NyYy9cIiksXG4gICAgICBgLi4vc2hhcmVkLyR7dGFyZ2V0fS5zaGFyZWQudHMudHh0YCxcbiAgICApO1xuICAgIGlmICghKGF3YWl0IGV4aXN0cyhzcmNQYXRoKSkpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAoIShhd2FpdCBleGlzdHMocGF0aC5qb2luKFNvbmFtdS5hcHBSb290UGF0aCwgdGFyZ2V0KSkpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBUcmllZCB0byBjb3B5IHNvbmFtdS5zaGFyZWQudHMgdG8gdGFyZ2V0ICcke3RhcmdldH0nIGJ1dCB0aGUgdGFyZ2V0IGRpcmVjdG9yeSBkb2VzIG5vdCBleGlzdC4gUGxlYXNlIGNoZWNrIHlvdXIgcHJvamVjdCBkaXJlY3Rvcnkgc3RydWN0dXJlLmAsXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IGZ1bGxUZXh0ID0gYXdhaXQgcmVhZEZpbGUoc3JjUGF0aCwgXCJ1dGYtOFwiKTtcbiAgICBjb25zdCBjb252ZXJ0ZWRUZXh0ID0gT2JqZWN0LmVudHJpZXMoY29udmVydE1hcCkucmVkdWNlKFxuICAgICAgKGFjYywgW2tleSwgdmFsdWVdKSA9PiBhY2MucmVwbGFjZShgJFtbJHtrZXl9XV1gLCB2YWx1ZSksXG4gICAgICBmdWxsVGV4dCxcbiAgICApO1xuXG4gICAgLy8g7J206rG0IO2UhOuhnOygne2KuOyXkCAudHMg7IaM7IqkIOy9lOuTnCDtjIzsnbzsnYQg7IOd7ISx7ZWY64qUIOqyg+ydtOuvgOuhnCBzcmPsnZggLnRzIOqyveuhnOuhnCDqsJHri4jri6QuXG4gICAgY29uc3QgZGVzdFBhdGggPSBwYXRoLmpvaW4oU29uYW11LmFwcFJvb3RQYXRoLCB0YXJnZXQsIFwic3JjL3NlcnZpY2VzL3NvbmFtdS5zaGFyZWQudHNcIik7XG5cbiAgICAvLyDsoJXrp5Ag7Zi57Iuc64KY7KeA66eMIHRhcmdldCDrlJTroInthqDrpqzripQg7J6I7Ja064+EIHNyYy9zZXJ2aWNlcyDrlJTroInthqDrpqzripQg7JeG7J2EIOyImCDsnojsnLzrr4DroZwg66+466asIOyDneyEse2VtOykjeuLiOuLpC5cbiAgICBpZiAoIShhd2FpdCBleGlzdHMocGF0aC5kaXJuYW1lKGRlc3RQYXRoKSkpKSB7XG4gICAgICBhd2FpdCBta2RpcihwYXRoLmRpcm5hbWUoZGVzdFBhdGgpLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAgIGNvbnNvbGUud2FybihgQ3JlYXRlZCBkaXJlY3RvcnkgJyR7cGF0aC5kaXJuYW1lKGRlc3RQYXRoKX0nIGJlY2F1c2UgaXQgZGlkIG5vdCBleGlzdC5gKTtcbiAgICB9XG5cbiAgICAvLyDtjIzsnbzsnbQg7J2066+4IOyhtOyerO2VmOuptCDqsbTrhIjrnIHri4jri6QuXG4gICAgLy8gc29uYW11LnNoYXJlZC50c+uKlCDtlITroZzsoJ3tirjsl5DshJwg7J6Q7Jyg66Gt6rKMIOy7pOyKpO2EsOuniOydtOynle2VoCDsiJgg7J6I7Ja07JW8IO2VmOuvgOuhnCxcbiAgICAvLyDstZzstIggMe2ajOunjCDsg53shLHtlZjqs6Ag7J207ZuE7JeQ64qUIOuNruyWtOyTsOyngCDslYrsirXri4jri6QuXG4gICAgLy8g7YWc7ZSM66a/IOuCtOyaqSgkW1tkaWN0VXRpbHNdXSDrk7Ep7J20IOuzgOqyveuQmOyXiOydhCDrlYwg67CY7JiB7J20IO2VhOyalO2VmOuptCxcbiAgICAvLyDtlbTri7kg7YyM7J287J2EIOyCreygnO2VnCDrkqQgYHBucG0gc29uYW11IHN5bmNg66GcIOyerOyDneyEse2VmOuptCDrkKnri4jri6QuXG4gICAgaWYgKGF3YWl0IGV4aXN0cyhkZXN0UGF0aCkpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGF3YWl0IHdyaXRlRmlsZShkZXN0UGF0aCwgYXdhaXQgZm9ybWF0Q29kZShjb252ZXJ0ZWRUZXh0LCBkZXN0UGF0aCkpO1xuICAgICFpc1Rlc3QoKSAmJlxuICAgICAgY29uc29sZS5sb2coY2hhbGsuYm9sZChcIkNvcGllZDogXCIpICsgY2hhbGsuYmx1ZShwYXRoLnJlbGF0aXZlKFNvbmFtdS5hcHBSb290UGF0aCwgZGVzdFBhdGgpKSk7XG4gIH1cbn1cblxuLyoqXG4gKiBTb25hbXUgRGljdGlvbmFyeShTRCnrpbwg66qo65OgIO2DgOqynyhhcGkgKyB3ZWIvYXBwIOuTsSnsl5Ag64+Z6riw7ZmU7ZWp64uI64ukLlxuICpcbiAqIOqwgSDtg4Dqsp/sl5Ag64yA7ZW0OlxuICogLSB0YXJnZXTsnbQgYXBp6rCAIOyVhOuLiOuptCDsgqzsmqnsnpAg7J6R7ISxIGxvY2FsZSDtjIzsnbwoa28udHMvZW4udHMvLi4uKeydhCBhcGkg4oaSIHRhcmdldOycvOuhnCDrs7XsgqxcbiAqIC0gc2Qg7YWc7ZSM66a/7J2EIOugjOuNlOunge2VtOyEnCBzZC5nZW5lcmF0ZWQudHMg7IOd7ISxIChvdmVyd3JpdGUpXG4gKlxuICog7ZWcIO2DgOqyn+yXkOyEnCDsi6TtjKjtlbTrj4Qg64uk66W4IO2DgOqyn+ydgCDqs4Tsho0g7KeE7ZaJ7ZWp64uI64ukLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYWN0aW9uU3luY1NvbmFtdURpY3Rpb25hcnkoKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHsgdGFyZ2V0cyB9ID0gU29uYW11LmNvbmZpZy5zeW5jO1xuICBjb25zdCBpMThuQ29uZmlnID0gU29uYW11LmNvbmZpZy5pMThuO1xuXG4gIGNvbnN0IHRhcmdldExpc3QgPSBbXCJhcGlcIiwgLi4udGFyZ2V0c10gYXMgKFwiYXBpXCIgfCBcIndlYlwiIHwgXCJhcHBcIilbXTtcblxuICBjb25zdCBhcGlJMThuRGlyID0gcGF0aC5qb2luKFNvbmFtdS5hcHBSb290UGF0aCwgU29uYW11LmNvbmZpZy5hcGkuZGlyLCBcInNyYy9pMThuXCIpO1xuXG4gIGZvciAoY29uc3QgdGFyZ2V0IG9mIHRhcmdldExpc3QpIHtcbiAgICB0cnkge1xuICAgICAgLy8gd2ViL2FwcOydmCDqsr3smrAgbG9jYWxlIO2MjOydvOuTpOydhCBhcGnsl5DshJwg67O17IKsXG4gICAgICBpZiAodGFyZ2V0ICE9PSBcImFwaVwiKSB7XG4gICAgICAgIGF3YWl0IHN5bmNMb2NhbGVGaWxlcyh0YXJnZXQsIGFwaUkxOG5EaXIsIGkxOG5Db25maWcuc3VwcG9ydGVkTG9jYWxlcyk7XG4gICAgICB9XG5cbiAgICAgIGF3YWl0IGdlbmVyYXRlVGVtcGxhdGUoXCJzZFwiLCB7IHRhcmdldCB9LCB7IG92ZXJ3cml0ZTogdHJ1ZSB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGBGYWlsZWQgdG8gZ2VuZXJhdGUgU0QgdGVtcGxhdGUgZm9yICR7dGFyZ2V0fTpgLCBlKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBhcGnsnZggbG9jYWxlIO2MjOydvOydhCB3ZWIvYXBw7Jy866GcIOuzteyCrO2VqeuLiOuLpC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gc3luY0xvY2FsZUZpbGVzKFxuICB0YXJnZXQ6IHN0cmluZyxcbiAgYXBpSTE4bkRpcjogc3RyaW5nLFxuICBsb2NhbGVzOiBzdHJpbmdbXSxcbik6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCB0YXJnZXRJMThuRGlyID0gcGF0aC5qb2luKFNvbmFtdS5hcHBSb290UGF0aCwgdGFyZ2V0LCBcInNyYy9pMThuXCIpO1xuXG4gIC8vIOuUlOugie2GoOumrOqwgCDsl4bsnLzrqbQg7IOd7ISxXG4gIGF3YWl0IG1rZGlyKHRhcmdldEkxOG5EaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuXG4gIGZvciAoY29uc3QgbG9jYWxlIG9mIGxvY2FsZXMpIHtcbiAgICBjb25zdCBzb3VyY2VGaWxlID0gcGF0aC5qb2luKGFwaUkxOG5EaXIsIGAke2xvY2FsZX0udHNgKTtcbiAgICBjb25zdCB0YXJnZXRGaWxlID0gcGF0aC5qb2luKHRhcmdldEkxOG5EaXIsIGAke2xvY2FsZX0udHNgKTtcblxuICAgIGNvbnN0IHN5bmNIZWFkZXIgPSBbXG4gICAgICBcIi8qKlwiLFxuICAgICAgXCIgKiBAZ2VuZXJhdGVkXCIsXG4gICAgICBcIiAqIEFQSeyXkOyEnCDrj5nquLDtmZTrkJwg7YyM7J287J6F64uI64ukLiDsp4HsoJEg7IiY7KCV7ZWY7KeAIOuniOyEuOyalC5cIixcbiAgICAgIFwiICovXCIsXG4gICAgXS5qb2luKFwiXFxuXCIpO1xuICAgIGF3YWl0IGNvcHlGaWxlV2l0aFJlcGxhY2VDb3JlVG9TaGFyZWQoc291cmNlRmlsZSwgdGFyZ2V0RmlsZSwgc3luY0hlYWRlcik7XG4gICAgYXdhaXQgdHJhY2tXcml0dGVuKHRhcmdldEZpbGUgYXMgQWJzb2x1dGVQYXRoKTtcbiAgICAhaXNUZXN0KCkgJiZcbiAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmJvbGQoXCJDb3BpZWQ6IFwiKSArIGNoYWxrLmN5YW4oYCR7dGFyZ2V0fS9zcmMvaTE4bi8ke2xvY2FsZX0udHNgKSk7XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7QUFrQkEsZUFBc0IsbUJBQW1CO0NBQ3ZDLE1BQU0sRUFBRSxNQUFNLFNBQVMsT0FBTyxPQUFPLE9BQU8sVUFBVSxDQUFDO0NBQ3ZELE1BQU0sVUFBVSxZQUFZLFFBQVEsWUFBWSxhQUFhLFFBQVE7Q0FFckUsTUFBTSxFQUFFLG9CQUFvQixFQUFFLFFBQVEsQ0FBQztDQUN2QyxNQUFNLFFBQVEsSUFBSSxDQUNoQixHQUFHLE9BQU8sT0FBTyxLQUFLLFFBQVEsSUFBSSxPQUFPLFdBQVc7RUFDbEQsTUFBTSxVQUFVLEtBQUssS0FBSyxPQUFPLGFBQWEsUUFBUSxhQUFhLEdBQUcsT0FBTztDQUMvRSxDQUFDLEdBQ0QsaUJBQWlCLGlCQUFpQixDQUFDLEdBQUcsRUFBRSxXQUFXLEtBQUssQ0FBQyxDQUMzRCxDQUFDO0FBQ0g7Ozs7OztBQU9BLGVBQXNCLHVCQUNwQixhQUd5QjtDQUN6QixNQUFNLEVBQUUsMEJBQTBCLFdBQVc7Q0FXN0MsT0FBTyxDQUFDLEdBQUcsTUFSZ0Is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
|
|
204
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3luY2VyLWFjdGlvbnMuanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3N5bmNlci9zeW5jZXItYWN0aW9ucy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNzZXJ0IGZyb20gXCJhc3NlcnRcIjtcbmltcG9ydCBwYXRoLCB7IGRpcm5hbWUgfSBmcm9tIFwicGF0aFwiO1xuXG5pbXBvcnQgY2hhbGsgZnJvbSBcImNoYWxrXCI7XG5cbmltcG9ydCB7IFNvbmFtdSB9IGZyb20gXCIuLi9hcGkvc29uYW11XCI7XG5pbXBvcnQgeyB0eXBlIEVudGl0eU5hbWVzUmVjb3JkIH0gZnJvbSBcIi4uL2VudGl0eS9lbnRpdHktbWFuYWdlclwiO1xuaW1wb3J0IHsgQWxyZWFkeVByb2Nlc3NlZEV4Y2VwdGlvbiB9IGZyb20gXCIuLi9leGNlcHRpb25zL3NvLWV4Y2VwdGlvbnNcIjtcbmltcG9ydCB7IE5haXRlIH0gZnJvbSBcIi4uL25haXRlL25haXRlXCI7XG5pbXBvcnQgeyBpc1Rlc3QgfSBmcm9tIFwiLi4vdXRpbHMvY29udHJvbGxlclwiO1xuaW1wb3J0IHsgZm9ybWF0Q29kZSB9IGZyb20gXCIuLi91dGlscy9mb3JtYXR0ZXJcIjtcbmltcG9ydCB7IHR5cGUgQWJzb2x1dGVQYXRoIH0gZnJvbSBcIi4uL3V0aWxzL3BhdGgtdXRpbHNcIjtcbmltcG9ydCB7IGlzT2JqZWN0VmFsdWUgfSBmcm9tIFwiLi4vdXRpbHMvcnVudGltZS12YWx1ZVwiO1xuaW1wb3J0IHsgZ2VuZXJhdGVUZW1wbGF0ZSB9IGZyb20gXCIuL2NvZGUtZ2VuZXJhdG9yXCI7XG5pbXBvcnQgeyBjb3B5RmlsZVdpdGhSZXBsYWNlQ29yZVRvU2hhcmVkIH0gZnJvbSBcIi4vZmlsZS1jb3B5XCI7XG5pbXBvcnQgeyB0cmFja1dyaXR0ZW4gfSBmcm9tIFwiLi9maWxlLXRyYWNraW5nXCI7XG5pbXBvcnQgeyBzeW5jZXJGaWxlRXhpc3RzLCBzeW5jZXJGaWxlc3lzdGVtIH0gZnJvbSBcIi4vZmlsZXN5c3RlbS1kZXBlbmRlbmNpZXNcIjtcblxuLy8gd2ViLy5zb25hbXUuZW52IOyXkCDtmITsnqwg7ISk7KCV6rCSIOyggOyepVxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFjdGlvblN5bmNDb25maWcoKSB7XG4gIGNvbnN0IHsgaG9zdCwgcG9ydCB9ID0gU29uYW11LmNvbmZpZy5zZXJ2ZXIubGlzdGVuID8/IHt9O1xuICBjb25zdCBjb250ZW50ID0gYEFQSV9IT1NUPSR7aG9zdCA/PyBcImxvY2FsaG9zdFwifVxcbkFQSV9QT1JUPSR7cG9ydCA/PyAzMDAwfWA7XG5cbiAgTmFpdGUudChcImFjdGlvblN5bmNDb25maWdcIiwgeyBjb250ZW50IH0pO1xuICBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgLi4uU29uYW11LmNvbmZpZy5zeW5jLnRhcmdldHMubWFwKCh0YXJnZXQpID0+IHtcbiAgICAgIHJldHVybiBzeW5jZXJGaWxlc3lzdGVtLndyaXRlRmlsZShcbiAgICAgICAgcGF0aC5qb2luKFNvbmFtdS5hcHBSb290UGF0aCwgdGFyZ2V0LCBcIi5zb25hbXUuZW52XCIpLFxuICAgICAgICBjb250ZW50LFxuICAgICAgKTtcbiAgICB9KSxcbiAgICBnZW5lcmF0ZVRlbXBsYXRlKFwiZ2VuZXJhdGVkX3Nzb1wiLCB7fSwgeyBvdmVyd3JpdGU6IHRydWUgfSksXG4gIF0pO1xufVxuXG4vKipcbiAqIHNlcnZpY2VzLmdlbmVyYXRlZC50c+ulvCDsg53shLHtlanri4jri6QuXG4gKiBAcGFyYW0gcGFyYW1zQXJyYXlcbiAqIEByZXR1cm5zIOyDneyEseuQnCDtjIzsnbwg6rK966GcIOuwsOyXtC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFjdGlvbkdlbmVyYXRlU2VydmljZXMoXG4gIHBhcmFtc0FycmF5OiB7XG4gICAgbmFtZXNSZWNvcmQ6IEVudGl0eU5hbWVzUmVjb3JkO1xuICB9W10sXG4pOiBQcm9taXNlPEFic29sdXRlUGF0aFtdPiB7XG4gIE5haXRlLnQoXCJhY3Rpb25HZW5lcmF0ZVNlcnZpY2VzXCIsIHBhcmFtc0FycmF5KTtcblxuICAvLyBzZXJ2aWNlcy5nZW5lcmF0ZWQudHMg7Ya17ZWpIO2MjOydvCDsg53shLFcbiAgY29uc3Qgc2VydmljZXNGaWxlID0gYXdhaXQgZ2VuZXJhdGVUZW1wbGF0ZShcbiAgICBcInNlcnZpY2VzXCIsXG4gICAge30sXG4gICAge1xuICAgICAgb3ZlcndyaXRlOiB0cnVlLFxuICAgIH0sXG4gICk7XG5cbiAgcmV0dXJuIFsuLi5zZXJ2aWNlc0ZpbGVdO1xufVxuXG4vKipcbiAqIEVudGl0eeyXkCDrlLjrprAg7LSI6riwIHR5cGVzLnRz66W8IOunjOuTpOyWtOykjeuLiOuLpC5cbiAqIEBwYXJhbSBlbnRpdHlJZFxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYWN0aW9uR2VuZXJhdGVJbml0aWFsVHlwZXMoZW50aXR5SWQ6IHN0cmluZyk6IFByb21pc2U8QWJzb2x1dGVQYXRoW10+IHtcbiAgcmV0dXJuIGdlbmVyYXRlVGVtcGxhdGUoXCJpbml0X3R5cGVzXCIsIHsgZW50aXR5SWQgfSk7XG59XG5cbi8qKlxuICogc29uYW11LmdlbmVyYXRlZC50c+yZgCBzb25hbXUuZ2VuZXJhdGVkLnNzby50c+ulvCDsg53shLHtlanri4jri6QuXG4gKiBAcmV0dXJucyDsg53shLHrkJwg7YyM7J28IOqyveuhnCDrsLDsl7QuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhY3Rpb25HZW5lcmF0ZVNjaGVtYXMoKTogUHJvbWlzZTxBYnNvbHV0ZVBhdGhbXT4ge1xuICByZXR1cm4gKFxuICAgIGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAgIGdlbmVyYXRlVGVtcGxhdGUoXCJnZW5lcmF0ZWRfc3NvXCIsIHt9LCB7IG92ZXJ3cml0ZTogdHJ1ZSB9KSxcbiAgICAgIGdlbmVyYXRlVGVtcGxhdGUoXCJnZW5lcmF0ZWRcIiwge30sIHsgb3ZlcndyaXRlOiB0cnVlIH0pLFxuICAgIF0pXG4gICkuZmxhdCgpO1xufVxuXG4vKipcbiAqIHNvbmFtdS5nZW5lcmF0ZWQuaHR0cOulvCDsg53shLHtlanri4jri6QuXG4gKiBAcmV0dXJucyDsg53shLHrkJwg7YyM7J28IOqyveuhnC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFjdGlvbkdlbmVyYXRlSHR0cHMoKTogUHJvbWlzZTxBYnNvbHV0ZVBhdGg+IHtcbiAgY29uc3QgW3Jlc10gPSBhd2FpdCBnZW5lcmF0ZVRlbXBsYXRlKFxuICAgIFwiZ2VuZXJhdGVkX2h0dHBcIixcbiAgICB7IGVudGl0eUlkOiBcImR1bW15XCIgfSxcbiAgICB7IG92ZXJ3cml0ZTogdHJ1ZSB9LFxuICApO1xuICBhc3NlcnQocmVzKTtcbiAgcmV0dXJuIHJlcztcbn1cblxuLyoqXG4gKiDstZzsooUgUkVTVCBjYXN0ZXLrpbwg64u064qUIEFQSSDsoITsmqkgdmFsaWRhdG9yIHJlZ2lzdHJ566W8IOyerOyDneyEse2VqeuLiOuLpC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFjdGlvbkdlbmVyYXRlSHR0cFZhbGlkYXRvcnMoKTogUHJvbWlzZTxBYnNvbHV0ZVBhdGg+IHtcbiAgY29uc3QgcmVnaXN0cnlQYXRoID1cbiAgICAvKiBTQUZFVFk6IFR5cGVTY3JpcHQgQVNUIO2MjOyLseqzvCDrj5nquLDtmZQg7J6F66ClIOqzhOyVveydtCDsnbQg6rCS7J2YIO2DgOyeheydhCDrs7TsnqXtlZzri6QuICovIHBhdGguam9pbihcbiAgICAgIFNvbmFtdS5hcGlSb290UGF0aCxcbiAgICAgIFwic3JjL2FwcGxpY2F0aW9uL3NvbmFtdS52YWxpZGF0b3JzLmdlbmVyYXRlZC50c1wiLFxuICAgICkgYXMgQWJzb2x1dGVQYXRoO1xuICBjb25zdCBwb2xpY3kgPSBTb25hbXUuY29uZmlnLnZhbGlkYXRpb24/LnpvZENvbXBpbGVyO1xuICBjb25zdCBpc0FvdCA9IGlzT2JqZWN0VmFsdWUocG9saWN5KSAmJiBwb2xpY3kgIT09IG51bGwgJiYgcG9saWN5LmFwaSA9PT0gXCJhb3RcIjtcbiAgaWYgKCFpc0FvdCkge1xuICAgIC8vIG9wdC1vdXQvSklUIOyghO2ZmCDrkqQgQU9UIGNvbXBpbGUgaW1wb3J06rCAIOyVoO2UjOumrOy8gOydtOyFmOyXkCDrgqjsp4Ag7JWK64+E66GdIOyCsOy2nOusvOuPhCDtlajqu5gg7KCV66as7ZWp64uI64ukLlxuICAgIGlmIChhd2FpdCBzeW5jZXJGaWxlRXhpc3RzKHJlZ2lzdHJ5UGF0aCkpIHtcbiAgICAgIGF3YWl0IHN5bmNlckZpbGVzeXN0ZW0udW5saW5rKHJlZ2lzdHJ5UGF0aCk7XG4gICAgfVxuICAgIHJldHVybiByZWdpc3RyeVBhdGg7XG4gIH1cblxuICBjb25zdCBbZ2VuZXJhdGVkUGF0aF0gPSBhd2FpdCBnZW5lcmF0ZVRlbXBsYXRlKFwiaHR0cF92YWxpZGF0b3JzXCIsIHt9LCB7IG92ZXJ3cml0ZTogdHJ1ZSB9KTtcbiAgYXNzZXJ0KGdlbmVyYXRlZFBhdGgpO1xuICByZXR1cm4gZ2VuZXJhdGVkUGF0aDtcbn1cblxuLyoqXG4gKiBxdWVyaWVzLmdlbmVyYXRlZC50cyDsnqzsg53shLHtlanri4jri6QuXG4gKiBAcmV0dXJucyDsg53shLHrkJwg7YyM7J28IOqyveuhnCDrsLDsl7QuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhY3Rpb25HZW5lcmF0ZVNzclF1ZXJpZXMoKTogUHJvbWlzZTxBYnNvbHV0ZVBhdGhbXT4ge1xuICByZXR1cm4gZ2VuZXJhdGVUZW1wbGF0ZShcInF1ZXJpZXNcIiwge30sIHsgb3ZlcndyaXRlOiB0cnVlIH0pO1xufVxuXG4vKipcbiAqIGVudHJ5LXNlcnZlci5nZW5lcmF0ZWQudHN466W8IOyDneyEse2VqeuLiOuLpC5cbiAqIOuLpOuluCDslaHshZjrk6Tqs7wg64us66asLCDsnbTrr7gg7YyM7J287J20IOyeiOycvOuptCDqt7jrg6Ug64aU65Gh64uI64ukLiDqt7jrnpjshJwg7ZWo7IiYIOydtOumhCDrgZ3sl5Ag7I2o64ao7Ja07JqUIOOFjlxuICog7J6F66ClIOydmOyhtCDsl4bripQg7KCV7KCBIOy9lOuTnOudvCDrp6Trsoggb3ZlcndyaXRl64qUIG10aW1l66eMIOqwseyLoO2VmOuKlCDsnZjrr7gg7JeG64qUIOuPmeyekS5cbiAqIO2FnO2UjOumvyDsnpDssrTqsIAg67OA6rK965CcIOqyveyasChTb25hbXUg7JeF6re466CI7J2065OcKeyXkOuKlCDsgqzsmqnsnpDqsIAg7YyM7J287J2EIOyCreygnO2VnCDrkqQgc3luY+uhnCDsnqzsg53shLEuXG4gKiBAcmV0dXJucyDsg53shLHrkJwg7YyM7J28IOqyveuhnCDrsLDsl7QgKOydtOuvuCDsnojsnLzrqbQg67mIIOuwsOyXtCkuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhY3Rpb25HZW5lcmF0ZVNzckVudHJ5U2VydmVySWZOb3RFeGlzdHMoKTogUHJvbWlzZTxBYnNvbHV0ZVBhdGhbXT4ge1xuICB0cnkge1xuICAgIHJldHVybiBhd2FpdCBnZW5lcmF0ZVRlbXBsYXRlKFwiZW50cnlfc2VydmVyXCIsIHt9LCB7IG92ZXJ3cml0ZTogZmFsc2UgfSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICAvLyBnZW5lcmF0ZVRlbXBsYXRl7J2AIG92ZXJ3cml0ZTogZmFsc2Xsl5DshJwg7YyM7J287J20IOydtOuvuCDsnojsnLzrqbQg7JiI7Jm466W8IOuNmOynkeuLiOuLpC5cbiAgICAvLyBJZk5vdEV4aXN0cyDsnZjrr7jsg4EgXCLqt7jrg6Ug64aU65GU64ukXCLqsIAg7KCV7IOB7J2066+A66GcIOu5iCDrsLDsl7TroZwg67OA7ZmY7ZWp64uI64ukLlxuICAgIGlmIChlIGluc3RhbmNlb2YgQWxyZWFkeVByb2Nlc3NlZEV4Y2VwdGlvbikge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgICB0aHJvdyBlO1xuICB9XG59XG5cbi8qKlxuICog7KO87Ja07KeEIC50cyDtjIzsnbzrk6QoYXBp7JeQIOyeiOuLpOqzoCDqsIDsoJUp7J2EIOuqqOuToCDtg4Dqsp8g65SU66CJ7Yag66as7J2YIHNlcnZpY2Vz7JeQIOqwluuLpCDrkaHri4jri6QuXG4gKiDsnbTrlYwg64K067aA7J2YIHNvbmFtdSBpbXBvcnTripQgc29uYW11LnNoYXJlZC50cyBpbXBvcnTroZwg7LmY7ZmY65CY6rOgLFxuICog6rK966Gc7J2YIC9hcHBsaWNhdGlvbi/snYAgL3NlcnZpY2VzL+uhnCDsuZjtmZjrkKnri4jri6QuXG4gKlxuICogQHBhcmFtIHRzUGF0aHMg67O17IKs7ZWgIO2MjOydvOuTpOydmCDsoIjrjIAg6rK966GcXG4gKiBAcmV0dXJucyDqsIEg7YOA6rKf7JeQIOuzteyCrOuQnCDtjIzsnbzrk6TsnZgg7KCI64yAIOqyveuhnCDrsLDsl7QgKGZsYXQpLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYWN0aW9uU3luY0ZpbGVzVG9UYXJnZXRzKHRzUGF0aHM6IEFic29sdXRlUGF0aFtdKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICBjb25zdCB7IHRhcmdldHMgfSA9IFNvbmFtdS5jb25maWcuc3luYztcbiAgY29uc3QgeyBkaXI6IGFwaURpciB9ID0gU29uYW11LmNvbmZpZy5hcGk7XG5cbiAgcmV0dXJuIChcbiAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgIHRhcmdldHMubWFwKGFzeW5jICh0YXJnZXQpID0+XG4gICAgICAgIFByb21pc2UuYWxsKFxuICAgICAgICAgIHRzUGF0aHMubWFwKGFzeW5jIChyZWFsU3JjKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBkc3QgPSByZWFsU3JjXG4gICAgICAgICAgICAgIC5yZXBsYWNlKGAvJHthcGlEaXJ9L2AsIGAvJHt0YXJnZXR9L2ApXG4gICAgICAgICAgICAgIC5yZXBsYWNlKFwiL2FwcGxpY2F0aW9uL1wiLCBcIi9zZXJ2aWNlcy9cIik7XG4gICAgICAgICAgICBjb25zdCBkaXIgPSBkaXJuYW1lKGRzdCk7XG4gICAgICAgICAgICBpZiAoIShhd2FpdCBzeW5jZXJGaWxlRXhpc3RzKGRpcikpKSB7XG4gICAgICAgICAgICAgIGF3YWl0IHN5bmNlckZpbGVzeXN0ZW0ubWtkaXIoZGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHN5bmNIZWFkZXIgPSBbXG4gICAgICAgICAgICAgIFwiLyoqXCIsXG4gICAgICAgICAgICAgIFwiICogQGdlbmVyYXRlZFwiLFxuICAgICAgICAgICAgICBcIiAqIEFQSeyXkOyEnCDrj5nquLDtmZTrkJwg7YyM7J287J6F64uI64ukLiDsp4HsoJEg7IiY7KCV7ZWY7KeAIOuniOyEuOyalC5cIixcbiAgICAgICAgICAgICAgXCIgKi9cIixcbiAgICAgICAgICAgIF0uam9pbihcIlxcblwiKTtcbiAgICAgICAgICAgIGF3YWl0IGNvcHlGaWxlV2l0aFJlcGxhY2VDb3JlVG9TaGFyZWQocmVhbFNyYywgZHN0LCBzeW5jSGVhZGVyKTtcbiAgICAgICAgICAgIGF3YWl0IHRyYWNrV3JpdHRlbihcbiAgICAgICAgICAgICAgLyogU0FGRVRZOiBUeXBlU2NyaXB0IEFTVCDtjIzsi7Hqs7wg64+Z6riw7ZmUIOyeheugpSDqs4Tslb3snbQg7J20IOqwkuydmCDtg4DsnoXsnYQg67O07J6l7ZWc64ukLiAqLyBkc3QgYXMgQWJzb2x1dGVQYXRoLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICFpc1Rlc3QoKSAmJlxuICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgICAgICBjaGFsay5ib2xkKFwiQ29waWVkOiBcIikgKyBjaGFsay5ibHVlKGRzdC5yZXBsYWNlKGAke1NvbmFtdS5hcHBSb290UGF0aH0vYCwgXCJcIikpLFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgcmV0dXJuIGRzdDtcbiAgICAgICAgICB9KSxcbiAgICAgICAgKSxcbiAgICAgICksXG4gICAgKVxuICApLmZsYXQoKTtcbn1cblxuLyoqXG4gKiBzaGFyZWQg7YWc7ZSM66a/7Jy866Gc67aA7YSwIHNvbmFtdS5zaGFyZWQudHMg7YyM7J287J2EIOunjOuTpOyWtOyEnCDrqqjrk6Ag7YOA6rKfIOuUlOugie2GoOumrOyXkCDqsJbri6Qg65Gh64uI64ukLlxuICog7YyM7J287J2EIOunjOuTnOuKlCDqs7zsoJXsl5DshJwg7Jes65+sIOy5mO2ZmCDqsIDqs7XsnbQg7J287Ja064Kp64uI64ukLlxuICpcbiAqIOuLpOuluCDslaHshZjrk6Tqs7wg64us66asLCDsnbTrr7gg7YyM7J287J20IOyeiOycvOuptCDqt7jrg6Ug64aU65Gh64uI64ukLiDqt7jrnpjshJwg7ZWo7IiYIOydtOumhCDrgZ3sl5Ag7I2o64ao7Ja07JqUIOOFjlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYWN0aW9uQ29weVNoYXJlZFRvVGFyZ2V0c0lmTm90RXhpc3RzKCk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCB7IHRhcmdldHMgfSA9IFNvbmFtdS5jb25maWcuc3luYztcblxuICAvLyBwbHVyYWwudHMg64K07Jqp7J2EIOydveyWtOyEnCBzaGFyZWQg7YyM7J287JeQIOyCveyehe2VqeuLiOuLpC5cbiAgY29uc3QgZGljdFV0aWxzUGF0aCA9IHBhdGguam9pbihcbiAgICBpbXBvcnQubWV0YS5kaXJuYW1lLnJlcGxhY2UoXCIvZGlzdC9cIiwgXCIvc3JjL1wiKSxcbiAgICBcIi4uL2RpY3QvdXRpbHMudHNcIixcbiAgKTtcbiAgY29uc3QgZGljdFV0aWxzQ29kZSA9IChhd2FpdCBzeW5jZXJGaWxlRXhpc3RzKGRpY3RVdGlsc1BhdGgpKVxuICAgID8gYXdhaXQgc3luY2VyRmlsZXN5c3RlbS5yZWFkRmlsZShkaWN0VXRpbHNQYXRoLCBcInV0Zi04XCIpXG4gICAgOiBcIlwiO1xuXG4gIC8vIO2KueyglSDrs4DsiJgg7LmY7ZmY7J2EIOychO2VtOyEnCDsgqzsmqntlanri4jri6QuXG4gIGNvbnN0IGNvbnZlcnRNYXAgPSB7XG4gICAgYmFzZVVybDpcbiAgICAgIFNvbmFtdS5jb25maWcuc2VydmVyLmJhc2VVcmwgPz9cbiAgICAgIGBodHRwOi8vJHtTb25hbXUuY29uZmlnLnNlcnZlci5saXN0ZW4/Lmhvc3QgPz8gXCJsb2NhbGhvc3RcIn06JHtTb25hbXUuY29uZmlnLnNlcnZlci5saXN0ZW4/LnBvcnQgPz8gMzAwMH1gLFxuICAgIGRpY3RVdGlsczogZGljdFV0aWxzQ29kZSxcbiAgfTtcblxuICBmb3IgKGNvbnN0IHRhcmdldCBvZiB0YXJnZXRzKSB7XG4gICAgLy8g7KeA6riIIOqwgOyguOqwgOugpOuKlCDsnbQg7YyM7J287J2AIFNvbmFtdSDsvZTrk5zrsqDsnbTsiqTsnZgg7J2867aA7J6F64uI64ukLlxuICAgIC8vIOq3uOufsOuNsCBkaXN0IOyGjSDruYzrk5zrkJwg7IaM7IqkIOy9lOuTnCDtjIzsnbzsnbQg7ZWE7JqU7ZWcIOqyg+ydtCDslYTri4jqs6AsIHNyY+yXkOunjCDsnojripQg7YWN7Iqk7Yq4IO2MjOydvOydtCDtlYTsmpTtlanri4jri6QuXG4gICAgLy8g65Sw65287IScIC9zcmMv7JeQ7IScIOywvuyKteuLiOuLpC5cbiAgICBjb25zdCBzcmNQYXRoID0gcGF0aC5qb2luKFxuICAgICAgaW1wb3J0Lm1ldGEuZGlybmFtZS5yZXBsYWNlKFwiL2Rpc3QvXCIsIFwiL3NyYy9cIiksXG4gICAgICBgLi4vc2hhcmVkLyR7dGFyZ2V0fS5zaGFyZWQudHMudHh0YCxcbiAgICApO1xuICAgIGlmICghKGF3YWl0IHN5bmNlckZpbGVFeGlzdHMoc3JjUGF0aCkpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgaWYgKCEoYXdhaXQgc3luY2VyRmlsZUV4aXN0cyhwYXRoLmpvaW4oU29uYW11LmFwcFJvb3RQYXRoLCB0YXJnZXQpKSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYFRyaWVkIHRvIGNvcHkgc29uYW11LnNoYXJlZC50cyB0byB0YXJnZXQgJyR7dGFyZ2V0fScgYnV0IHRoZSB0YXJnZXQgZGlyZWN0b3J5IGRvZXMgbm90IGV4aXN0LiBQbGVhc2UgY2hlY2sgeW91ciBwcm9qZWN0IGRpcmVjdG9yeSBzdHJ1Y3R1cmUuYCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgZnVsbFRleHQgPSBhd2FpdCBzeW5jZXJGaWxlc3lzdGVtLnJlYWRGaWxlKHNyY1BhdGgsIFwidXRmLThcIik7XG4gICAgY29uc3QgY29udmVydGVkVGV4dCA9IE9iamVjdC5lbnRyaWVzKGNvbnZlcnRNYXApLnJlZHVjZShcbiAgICAgIChhY2MsIFtrZXksIHZhbHVlXSkgPT4gYWNjLnJlcGxhY2UoYCRbWyR7a2V5fV1dYCwgdmFsdWUpLFxuICAgICAgZnVsbFRleHQsXG4gICAgKTtcblxuICAgIC8vIOydtOqxtCDtlITroZzsoJ3tirjsl5AgLnRzIOyGjOyKpCDsvZTrk5wg7YyM7J287J2EIOyDneyEse2VmOuKlCDqsoPsnbTrr4DroZwgc3Jj7J2YIC50cyDqsr3roZzroZwg6rCR64uI64ukLlxuICAgIGNvbnN0IGRlc3RQYXRoID0gcGF0aC5qb2luKFNvbmFtdS5hcHBSb290UGF0aCwgdGFyZ2V0LCBcInNyYy9zZXJ2aWNlcy9zb25hbXUuc2hhcmVkLnRzXCIpO1xuXG4gICAgLy8g7KCV66eQIO2YueyLnOuCmOyngOunjCB0YXJnZXQg65SU66CJ7Yag66as64qUIOyeiOyWtOuPhCBzcmMvc2VydmljZXMg65SU66CJ7Yag66as64qUIOyXhuydhCDsiJgg7J6I7Jy866+A66GcIOuvuOumrCDsg53shLHtlbTspI3ri4jri6QuXG4gICAgaWYgKCEoYXdhaXQgc3luY2VyRmlsZUV4aXN0cyhwYXRoLmRpcm5hbWUoZGVzdFBhdGgpKSkpIHtcbiAgICAgIGF3YWl0IHN5bmNlckZpbGVzeXN0ZW0ubWtkaXIocGF0aC5kaXJuYW1lKGRlc3RQYXRoKSwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgICBjb25zb2xlLndhcm4oYENyZWF0ZWQgZGlyZWN0b3J5ICcke3BhdGguZGlybmFtZShkZXN0UGF0aCl9JyBiZWNhdXNlIGl0IGRpZCBub3QgZXhpc3QuYCk7XG4gICAgfVxuXG4gICAgLy8g7YyM7J287J20IOydtOuvuCDsobTsnqztlZjrqbQg6rG064SI65yB64uI64ukLlxuICAgIC8vIHNvbmFtdS5zaGFyZWQudHPripQg7ZSE66Gc7KCd7Yq47JeQ7IScIOyekOycoOuhreqyjCDsu6TsiqTthLDrp4jsnbTsp5XtlaAg7IiYIOyeiOyWtOyVvCDtlZjrr4DroZwsXG4gICAgLy8g7LWc7LSIIDHtmozrp4wg7IOd7ISx7ZWY6rOgIOydtO2bhOyXkOuKlCDrja7slrTsk7Dsp4Ag7JWK7Iq164uI64ukLlxuICAgIC8vIO2FnO2UjOumvyDrgrTsmqkoJFtbZGljdFV0aWxzXV0g65OxKeydtCDrs4Dqsr3rkJjsl4jsnYQg65WMIOuwmOyYgeydtCDtlYTsmpTtlZjrqbQsXG4gICAgLy8g7ZW064u5IO2MjOydvOydhCDsgq3soJztlZwg65KkIGBwbnBtIHNvbmFtdSBzeW5jYOuhnCDsnqzsg53shLHtlZjrqbQg65Cp64uI64ukLlxuICAgIGlmIChhd2FpdCBzeW5jZXJGaWxlRXhpc3RzKGRlc3RQYXRoKSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgYXdhaXQgc3luY2VyRmlsZXN5c3RlbS53cml0ZUZpbGUoZGVzdFBhdGgsIGF3YWl0IGZvcm1hdENvZGUoY29udmVydGVkVGV4dCwgZGVzdFBhdGgpKTtcbiAgICAhaXNUZXN0KCkgJiZcbiAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmJvbGQoXCJDb3BpZWQ6IFwiKSArIGNoYWxrLmJsdWUocGF0aC5yZWxhdGl2ZShTb25hbXUuYXBwUm9vdFBhdGgsIGRlc3RQYXRoKSkpO1xuICB9XG59XG5cbi8qKlxuICogU29uYW11IERpY3Rpb25hcnkoU0Qp66W8IOuqqOuToCDtg4Dqsp8oYXBpICsgd2ViL2FwcCDrk7Ep7JeQIOuPmeq4sO2ZlO2VqeuLiOuLpC5cbiAqXG4gKiDqsIEg7YOA6rKf7JeQIOuMgO2VtDpcbiAqIC0gdGFyZ2V07J20IGFwaeqwgCDslYTri4jrqbQg7IKs7Jqp7J6QIOyekeyEsSBsb2NhbGUg7YyM7J28KGtvLnRzL2VuLnRzLy4uLinsnYQgYXBpIOKGkiB0YXJnZXTsnLzroZwg67O17IKsXG4gKiAtIHNkIO2FnO2UjOumv+ydhCDroIzrjZTrp4HtlbTshJwgc2QuZ2VuZXJhdGVkLnRzIOyDneyEsSAob3ZlcndyaXRlKVxuICpcbiAqIO2VnCDtg4Dqsp/sl5DshJwg7Iuk7Yyo7ZW064+EIOuLpOuluCDtg4Dqsp/snYAg6rOE7IaNIOynhO2Wie2VqeuLiOuLpC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFjdGlvblN5bmNTb25hbXVEaWN0aW9uYXJ5KCk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCB7IHRhcmdldHMgfSA9IFNvbmFtdS5jb25maWcuc3luYztcbiAgY29uc3QgaTE4bkNvbmZpZyA9IFNvbmFtdS5jb25maWcuaTE4bjtcblxuICBjb25zdCB0YXJnZXRMaXN0ID1cbiAgICAvKiBTQUZFVFk6IFR5cGVTY3JpcHQgQVNUIO2MjOyLseqzvCDrj5nquLDtmZQg7J6F66ClIOqzhOyVveydtCDsnbQg6rCS7J2YIO2DgOyeheydhCDrs7TsnqXtlZzri6QuICovIFtcbiAgICAgIFwiYXBpXCIsXG4gICAgICAuLi50YXJnZXRzLFxuICAgIF0gYXMgKFwiYXBpXCIgfCBcIndlYlwiIHwgXCJhcHBcIilbXTtcblxuICBjb25zdCBhcGlJMThuRGlyID0gcGF0aC5qb2luKFNvbmFtdS5hcHBSb290UGF0aCwgU29uYW11LmNvbmZpZy5hcGkuZGlyLCBcInNyYy9pMThuXCIpO1xuXG4gIGZvciAoY29uc3QgdGFyZ2V0IG9mIHRhcmdldExpc3QpIHtcbiAgICB0cnkge1xuICAgICAgLy8gd2ViL2FwcOydmCDqsr3smrAgbG9jYWxlIO2MjOydvOuTpOydhCBhcGnsl5DshJwg67O17IKsXG4gICAgICBpZiAodGFyZ2V0ICE9PSBcImFwaVwiKSB7XG4gICAgICAgIGF3YWl0IHN5bmNMb2NhbGVGaWxlcyh0YXJnZXQsIGFwaUkxOG5EaXIsIGkxOG5Db25maWcuc3VwcG9ydGVkTG9jYWxlcyk7XG4gICAgICB9XG5cbiAgICAgIGF3YWl0IGdlbmVyYXRlVGVtcGxhdGUoXCJzZFwiLCB7IHRhcmdldCB9LCB7IG92ZXJ3cml0ZTogdHJ1ZSB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGBGYWlsZWQgdG8gZ2VuZXJhdGUgU0QgdGVtcGxhdGUgZm9yICR7dGFyZ2V0fTpgLCBlKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBhcGnsnZggbG9jYWxlIO2MjOydvOydhCB3ZWIvYXBw7Jy866GcIOuzteyCrO2VqeuLiOuLpC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gc3luY0xvY2FsZUZpbGVzKFxuICB0YXJnZXQ6IHN0cmluZyxcbiAgYXBpSTE4bkRpcjogc3RyaW5nLFxuICBsb2NhbGVzOiBzdHJpbmdbXSxcbik6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCB0YXJnZXRJMThuRGlyID0gcGF0aC5qb2luKFNvbmFtdS5hcHBSb290UGF0aCwgdGFyZ2V0LCBcInNyYy9pMThuXCIpO1xuXG4gIC8vIOuUlOugie2GoOumrOqwgCDsl4bsnLzrqbQg7IOd7ISxXG4gIGF3YWl0IHN5bmNlckZpbGVzeXN0ZW0ubWtkaXIodGFyZ2V0STE4bkRpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG5cbiAgZm9yIChjb25zdCBsb2NhbGUgb2YgbG9jYWxlcykge1xuICAgIGNvbnN0IHNvdXJjZUZpbGUgPSBwYXRoLmpvaW4oYXBpSTE4bkRpciwgYCR7bG9jYWxlfS50c2ApO1xuICAgIGNvbnN0IHRhcmdldEZpbGUgPSBwYXRoLmpvaW4odGFyZ2V0STE4bkRpciwgYCR7bG9jYWxlfS50c2ApO1xuXG4gICAgY29uc3Qgc3luY0hlYWRlciA9IFtcbiAgICAgIFwiLyoqXCIsXG4gICAgICBcIiAqIEBnZW5lcmF0ZWRcIixcbiAgICAgIFwiICogQVBJ7JeQ7IScIOuPmeq4sO2ZlOuQnCDtjIzsnbzsnoXri4jri6QuIOyngeygkSDsiJjsoJXtlZjsp4Ag66eI7IS47JqULlwiLFxuICAgICAgXCIgKi9cIixcbiAgICBdLmpvaW4oXCJcXG5cIik7XG4gICAgYXdhaXQgY29weUZpbGVXaXRoUmVwbGFjZUNvcmVUb1NoYXJlZChzb3VyY2VGaWxlLCB0YXJnZXRGaWxlLCBzeW5jSGVhZGVyKTtcbiAgICBhd2FpdCB0cmFja1dyaXR0ZW4oXG4gICAgICAvKiBTQUZFVFk6IFR5cGVTY3JpcHQgQVNUIO2MjOyLseqzvCDrj5nquLDtmZQg7J6F66ClIOqzhOyVveydtCDsnbQg6rCS7J2YIO2DgOyeheydhCDrs7TsnqXtlZzri6QuICovIHRhcmdldEZpbGUgYXMgQWJzb2x1dGVQYXRoLFxuICAgICk7XG4gICAgIWlzVGVzdCgpICYmXG4gICAgICBjb25zb2xlLmxvZyhjaGFsay5ib2xkKFwiQ29waWVkOiBcIikgKyBjaGFsay5jeWFuKGAke3RhcmdldH0vc3JjL2kxOG4vJHtsb2NhbGV9LnRzYCkpO1xuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7OztBQW1CQSxlQUFzQixtQkFBbUI7Q0FDdkMsTUFBTSxFQUFFLE1BQU0sU0FBUyxPQUFPLE9BQU8sT0FBTyxVQUFVLENBQUM7Q0FDdkQsTUFBTSxVQUFVLFlBQVksUUFBUSxZQUFZLGFBQWEsUUFBUTtDQUVyRSxNQUFNLEVBQUUsb0JBQW9CLEVBQUUsUUFBUSxDQUFDO0NBQ3ZDLE1BQU0sUUFBUSxJQUFJLENBQ2hCLEdBQUcsT0FBTyxPQUFPLEtBQUssUUFBUSxLQUFLLFdBQVc7RUFDNUMsT0FBTyxpQkFBaUIsVUFDdEIsS0FBSyxLQUFLLE9BQU8sYUFBYSxRQUFRLGFBQWEsR0FDbkQsT0FDRjtDQUNGLENBQUMsR0FDRCxpQkFBaUIsaUJBQWlCLENBQUMsR0FBRyxFQUFFLFdBQVcsS0FBSyxDQUFDLENBQzNELENBQUM7QUFDSDs7Ozs7O0FBT0EsZUFBc0IsdUJBQ3BCLGFBR3lCO0NBQ3pCLE1BQU0sRUFBRSwwQkFBMEIsV0FBVztDQVc3QyxPQUFPLENBQUMsR0FBRyxNQVJnQixpQkFDekIsWUFDQSxDQUFDLEdBQ0QsRUFDRSxXQUFXLEtBQ2IsQ0FDRixDQUV1QjtBQUN6Qjs7Ozs7QUFNQSxlQUFzQiwyQkFBMkIsVUFBMkM7Q0FDMUYsT0FBTyxpQkFBaUIsY0FBYyxFQUFFLFNBQVMsQ0FBQztBQUNwRDs7Ozs7QUFN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
|
package/dist/syncer/syncer.d.ts
CHANGED
|
@@ -6,23 +6,34 @@ import { type GenerateOptions, type PathAndCode } from "../types/types";
|
|
|
6
6
|
import { TemplateKey } from "../types/types";
|
|
7
7
|
import { type TemplateOptions } from "../types/types";
|
|
8
8
|
import { type AbsolutePath } from "../utils/path-utils";
|
|
9
|
+
import { findChangedFilesUsingChecksums, renewChecksums } from "./checksum";
|
|
9
10
|
import { type FileType } from "./file-patterns";
|
|
10
11
|
import { type LoadedApis, type LoadedModels, type LoadedTypes } from "./module-loader";
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
12
|
+
import * as SyncerActions from "./syncer-actions";
|
|
13
|
+
type DiffGroupKey = FileType | "unknown";
|
|
14
|
+
type DiffGroups = Partial<Record<DiffGroupKey, AbsolutePath[]>>;
|
|
15
|
+
export interface SyncerDependencies {
|
|
16
|
+
actionCopySharedToTargetsIfNotExists: typeof SyncerActions.actionCopySharedToTargetsIfNotExists;
|
|
17
|
+
actionGenerateHttpValidators: typeof SyncerActions.actionGenerateHttpValidators;
|
|
18
|
+
actionGenerateSsrEntryServerIfNotExists: typeof SyncerActions.actionGenerateSsrEntryServerIfNotExists;
|
|
19
|
+
findChangedFilesUsingChecksums: typeof findChangedFilesUsingChecksums;
|
|
20
|
+
renewChecksums: typeof renewChecksums;
|
|
21
|
+
}
|
|
14
22
|
export declare class Syncer {
|
|
23
|
+
private readonly dependencies;
|
|
15
24
|
apis: LoadedApis;
|
|
16
25
|
types: LoadedTypes;
|
|
17
26
|
models: LoadedModels;
|
|
18
27
|
workflows: Map<string, WorkflowMetadata[]>;
|
|
19
28
|
eventEmitter: EventEmitter;
|
|
29
|
+
constructor(dependencies?: SyncerDependencies);
|
|
20
30
|
/**
|
|
21
31
|
* 체크섬이 변경된 부분에 대해 싱크를 진행합니다.
|
|
22
32
|
* dev 서버가 처음 떴을 때, sonamu sync 할 때 실행됩니다. 이후에는 hmrAndSync 경로를 타요.
|
|
23
33
|
* @returns
|
|
24
34
|
*/
|
|
25
35
|
sync(): Promise<void>;
|
|
36
|
+
private reconcileHttpValidatorRegistry;
|
|
26
37
|
/**
|
|
27
38
|
* 강제 풀-싱크: lock을 무시하고 처음부터 다시 싱크합니다.
|
|
28
39
|
*
|
|
@@ -64,13 +75,13 @@ export declare class Syncer {
|
|
|
64
75
|
doSyncActions(diffFilePaths: AbsolutePath[]): Promise<{
|
|
65
76
|
diffTypes: FileType[];
|
|
66
77
|
}>;
|
|
67
|
-
calculateDiffGroups(diffFiles: AbsolutePath[]):
|
|
78
|
+
calculateDiffGroups(diffFiles: AbsolutePath[]): Partial<Record<DiffGroupKey, `/${string}`[]>>;
|
|
68
79
|
private changeMatcher;
|
|
69
80
|
handleTruthSourceChanges(diffGroups: DiffGroups): Promise<void>;
|
|
70
81
|
handleImplementationChanges(diffGroups: DiffGroups): Promise<void>;
|
|
71
82
|
handleAuxiliarySymbolChanges(diffGroups: DiffGroups): Promise<void>;
|
|
72
|
-
handleConfigChanges(
|
|
73
|
-
handleSonamuDictionaryRelatedChanges(
|
|
83
|
+
handleConfigChanges(): Promise<void>;
|
|
84
|
+
handleSonamuDictionaryRelatedChanges(): Promise<void>;
|
|
74
85
|
handleDrifts(drifts: AbsolutePath[]): Promise<void>;
|
|
75
86
|
/**
|
|
76
87
|
* 주어진 엔티티와 템플릿 키에 대해, 생성된 코드가 존재하는지 확인합니다.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"syncer.d.ts","sourceRoot":"","sources":["../../src/syncer/syncer.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"syncer.d.ts","sourceRoot":"","sources":["../../src/syncer/syncer.ts"],"names":[],"mappings":"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"}
|