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,3 +1,12 @@
|
|
|
1
|
+
import {
|
|
2
|
+
isBigIntValue,
|
|
3
|
+
isFunctionValue,
|
|
4
|
+
isNumberValue,
|
|
5
|
+
isObjectValue,
|
|
6
|
+
isStringValue,
|
|
7
|
+
isSymbolValue,
|
|
8
|
+
} from "./runtime-value";
|
|
9
|
+
|
|
1
10
|
type Primitive = string | number | boolean | null | undefined;
|
|
2
11
|
|
|
3
12
|
type TypedArray =
|
|
@@ -84,8 +93,8 @@ export interface SerializableCheckResult {
|
|
|
84
93
|
* isSerializable({ fn: () => {} }) // { valid: false, reason: "Function at fn" }
|
|
85
94
|
* isSerializable({ deep: { nested: Promise.resolve() } }) // { valid: false, reason: "Promise at deep.nested" }
|
|
86
95
|
*/
|
|
87
|
-
export function isSerializable(
|
|
88
|
-
value:
|
|
96
|
+
export function isSerializable<Value>(
|
|
97
|
+
value: Value,
|
|
89
98
|
path: string[] = [],
|
|
90
99
|
seen: WeakSet<object> = new WeakSet(),
|
|
91
100
|
): SerializableCheckResult {
|
|
@@ -94,23 +103,26 @@ export function isSerializable(
|
|
|
94
103
|
return { valid: true };
|
|
95
104
|
}
|
|
96
105
|
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
106
|
+
if (
|
|
107
|
+
isStringValue(value) ||
|
|
108
|
+
isNumberValue(value) ||
|
|
109
|
+
value === true ||
|
|
110
|
+
value === false ||
|
|
111
|
+
value === undefined ||
|
|
112
|
+
isBigIntValue(value)
|
|
113
|
+
) {
|
|
102
114
|
return { valid: true };
|
|
103
115
|
}
|
|
104
116
|
|
|
105
|
-
if (
|
|
117
|
+
if (isFunctionValue(value)) {
|
|
106
118
|
return { valid: false, reason: `Function at ${formatPath(path)}` };
|
|
107
119
|
}
|
|
108
|
-
if (
|
|
120
|
+
if (isSymbolValue(value)) {
|
|
109
121
|
return { valid: false, reason: `Symbol at ${formatPath(path)}` };
|
|
110
122
|
}
|
|
111
123
|
|
|
112
|
-
if (
|
|
113
|
-
const obj = value
|
|
124
|
+
if (isObjectValue(value)) {
|
|
125
|
+
const obj = value;
|
|
114
126
|
|
|
115
127
|
if (obj instanceof Promise) {
|
|
116
128
|
return { valid: false, reason: `Promise at ${formatPath(path)}` };
|
|
@@ -126,7 +138,7 @@ export function isSerializable(
|
|
|
126
138
|
if (obj instanceof WeakSet) {
|
|
127
139
|
return { valid: false, reason: `WeakSet at ${formatPath(path)}` };
|
|
128
140
|
}
|
|
129
|
-
if (
|
|
141
|
+
if ("WeakRef" in globalThis && obj instanceof WeakRef) {
|
|
130
142
|
return { valid: false, reason: `WeakRef at ${formatPath(path)}` };
|
|
131
143
|
}
|
|
132
144
|
|
|
@@ -179,13 +191,11 @@ export function isSerializable(
|
|
|
179
191
|
|
|
180
192
|
// Vitest는 Error를 허용하지만 속성은 직렬화 필요
|
|
181
193
|
if (obj instanceof Error) {
|
|
182
|
-
const
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
seen,
|
|
188
|
-
);
|
|
194
|
+
const errorEntries = Object.entries(obj).filter(
|
|
195
|
+
([key]) => !["name", "message", "stack"].includes(key),
|
|
196
|
+
);
|
|
197
|
+
for (const [key, nestedValue] of errorEntries) {
|
|
198
|
+
const result = isSerializable(nestedValue, [...path, key], seen);
|
|
189
199
|
if (!result.valid) return result;
|
|
190
200
|
}
|
|
191
201
|
return { valid: true };
|
|
@@ -201,14 +211,14 @@ export function isSerializable(
|
|
|
201
211
|
};
|
|
202
212
|
}
|
|
203
213
|
|
|
204
|
-
for (const key of Object.
|
|
205
|
-
const result = isSerializable(
|
|
214
|
+
for (const [key, nestedValue] of Object.entries(obj)) {
|
|
215
|
+
const result = isSerializable(nestedValue, [...path, key], seen);
|
|
206
216
|
if (!result.valid) return result;
|
|
207
217
|
}
|
|
208
218
|
return { valid: true };
|
|
209
219
|
}
|
|
210
220
|
|
|
211
|
-
return { valid: false, reason: `Unknown
|
|
221
|
+
return { valid: false, reason: `Unknown value at ${formatPath(path)}` };
|
|
212
222
|
}
|
|
213
223
|
|
|
214
224
|
function formatPath(path: string[]): string {
|
|
@@ -4,6 +4,8 @@ import { promisify } from "util";
|
|
|
4
4
|
|
|
5
5
|
import chalk from "chalk";
|
|
6
6
|
|
|
7
|
+
import { isStringValue } from "./runtime-value";
|
|
8
|
+
|
|
7
9
|
const execFileAsync = promisify(execFile);
|
|
8
10
|
|
|
9
11
|
/**
|
|
@@ -16,7 +18,7 @@ export async function execute(
|
|
|
16
18
|
options?: ExecFileOptions,
|
|
17
19
|
): Promise<string> {
|
|
18
20
|
const { stdout } = await execFileAsync(bin, args, options);
|
|
19
|
-
return
|
|
21
|
+
return isStringValue(stdout) ? stdout : stdout.toString();
|
|
20
22
|
}
|
|
21
23
|
|
|
22
24
|
/**
|
|
@@ -37,6 +39,7 @@ export async function runWithGracefulShutdown(
|
|
|
37
39
|
waitForUpTo: 20000,
|
|
38
40
|
},
|
|
39
41
|
): Promise<void> {
|
|
42
|
+
// SAFETY: 선행 분기와 함수 계약이 이 타입을 보장합니다.
|
|
40
43
|
let isRunning = true as boolean;
|
|
41
44
|
|
|
42
45
|
const abortController = new AbortController();
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
function hasPrimitiveTag<Value>(value: Value, tag: string): boolean {
|
|
2
|
+
return Object.prototype.toString.call(value) === tag && Object(value) !== value;
|
|
3
|
+
}
|
|
4
|
+
|
|
5
|
+
/** 런타임 값이 원시 문자열인지 판별합니다. */
|
|
6
|
+
export function isStringValue<Value>(value: Value): value is Value & string {
|
|
7
|
+
return hasPrimitiveTag(value, "[object String]");
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
/** 런타임 값이 원시 숫자인지 판별합니다. */
|
|
11
|
+
export function isNumberValue<Value>(value: Value): value is Value & number {
|
|
12
|
+
return hasPrimitiveTag(value, "[object Number]");
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
/** 런타임 값이 원시 심벌인지 판별합니다. */
|
|
16
|
+
export function isSymbolValue<Value>(value: Value): value is Value & symbol {
|
|
17
|
+
return hasPrimitiveTag(value, "[object Symbol]");
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
/** 런타임 값이 원시 bigint인지 판별합니다. */
|
|
21
|
+
export function isBigIntValue<Value>(value: Value): value is Value & bigint {
|
|
22
|
+
return hasPrimitiveTag(value, "[object BigInt]");
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/** 런타임 값이 함수인지 판별합니다. */
|
|
26
|
+
export function isFunctionValue<Value>(value: Value): value is Value & CallableFunction {
|
|
27
|
+
try {
|
|
28
|
+
const tag = Object.prototype.toString.call(value);
|
|
29
|
+
return (
|
|
30
|
+
tag === "[object Function]" ||
|
|
31
|
+
tag === "[object AsyncFunction]" ||
|
|
32
|
+
tag === "[object GeneratorFunction]" ||
|
|
33
|
+
tag === "[object AsyncGeneratorFunction]"
|
|
34
|
+
);
|
|
35
|
+
} catch {
|
|
36
|
+
return false;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
/** null과 함수를 제외한 객체 표현인지 판별합니다. */
|
|
41
|
+
export function isObjectValue<Value>(value: Value): value is Value & object {
|
|
42
|
+
return value !== null && Object(value) === value && !isFunctionValue(value);
|
|
43
|
+
}
|
package/src/utils/sql-parser.ts
CHANGED
|
@@ -9,15 +9,21 @@ import {
|
|
|
9
9
|
} from "node-sql-parser";
|
|
10
10
|
import { unique } from "radashi";
|
|
11
11
|
|
|
12
|
+
import { isObjectValue, isStringValue } from "./runtime-value";
|
|
12
13
|
import { nonNullable } from "./utils";
|
|
13
14
|
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
15
|
+
type ParserColumnRef = Omit<ColumnRef, "table"> & {
|
|
16
|
+
table?: string | { type: string; value: string } | null;
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
export function getTableName(expr: ParserColumnRef) {
|
|
20
|
+
const table = expr.table;
|
|
21
|
+
if (isStringValue(table)) {
|
|
22
|
+
return table;
|
|
19
23
|
}
|
|
20
|
-
return
|
|
24
|
+
return isObjectValue(table) && "value" in table && isStringValue(table.value)
|
|
25
|
+
? table.value
|
|
26
|
+
: null;
|
|
21
27
|
}
|
|
22
28
|
|
|
23
29
|
// where 조건에 사용된 테이블명을 추출
|
|
@@ -29,6 +35,7 @@ export function getTableNamesFromWhere(ast: AST | AST[]): string[] {
|
|
|
29
35
|
|
|
30
36
|
const extractTableName = (expr: Expr | ExpressionValue): string[] => {
|
|
31
37
|
if (expr.type === "column_ref") {
|
|
38
|
+
// SAFETY: 선행 분기와 함수 계약이 이 타입을 보장합니다.
|
|
32
39
|
const table = getTableName(expr as ColumnRef);
|
|
33
40
|
return table ? [table] : [];
|
|
34
41
|
} else if (expr.type === "binary_expr" && "left" in expr) {
|
package/src/utils/type-utils.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { isObjectValue } from "./runtime-value";
|
|
1
2
|
// 타입을 펼쳐서 보여주는 유틸리티 (객체에만 사용해야 함)
|
|
2
3
|
type Expand<T> = T extends infer O ? { [K in keyof O]: O[K] } : never;
|
|
3
4
|
|
|
@@ -32,9 +33,9 @@ export function withProp<T extends object, P extends string, V>(
|
|
|
32
33
|
const result = structuredClone(obj);
|
|
33
34
|
|
|
34
35
|
// oxlint-disable-next-line @typescript-eslint/no-explicit-any -- 범용 배열 요소 타입
|
|
35
|
-
const setDeep = (current: any,
|
|
36
|
-
if (
|
|
37
|
-
const [key, ...rest] =
|
|
36
|
+
const setDeep = (current: any, pathKeys: string[]): void => {
|
|
37
|
+
if (pathKeys.length === 0) return;
|
|
38
|
+
const [key, ...rest] = pathKeys;
|
|
38
39
|
|
|
39
40
|
if (rest.length === 0) {
|
|
40
41
|
if (Array.isArray(current)) {
|
|
@@ -45,21 +46,22 @@ export function withProp<T extends object, P extends string, V>(
|
|
|
45
46
|
current[key] = value;
|
|
46
47
|
}
|
|
47
48
|
} else {
|
|
48
|
-
if (!(key in current) ||
|
|
49
|
+
if (!(key in current) || !isObjectValue(current[key])) {
|
|
49
50
|
current[key] = {};
|
|
50
51
|
}
|
|
51
52
|
if (Array.isArray(current[key])) {
|
|
52
53
|
// oxlint-disable-next-line @typescript-eslint/no-explicit-any -- 범용 배열 요소 타입
|
|
53
54
|
current[key].forEach((item: any) => {
|
|
54
|
-
setDeep(item, rest
|
|
55
|
+
setDeep(item, rest);
|
|
55
56
|
});
|
|
56
57
|
} else {
|
|
57
|
-
setDeep(current[key], rest
|
|
58
|
+
setDeep(current[key], rest);
|
|
58
59
|
}
|
|
59
60
|
}
|
|
60
61
|
};
|
|
61
62
|
|
|
62
|
-
setDeep(result, keys
|
|
63
|
+
setDeep(result, keys);
|
|
64
|
+
// SAFETY: 선행 분기와 함수 계약이 이 타입을 보장합니다.
|
|
63
65
|
return result as SetPath<T, P, V>;
|
|
64
66
|
}
|
|
65
67
|
|
package/src/utils/utils.ts
CHANGED
|
@@ -4,9 +4,11 @@ import path from "path";
|
|
|
4
4
|
import { type FastifyRequest } from "fastify";
|
|
5
5
|
|
|
6
6
|
import { type AbsolutePath } from "./path-utils";
|
|
7
|
+
import { isObjectValue } from "./runtime-value";
|
|
7
8
|
|
|
8
9
|
export function findAppRootPath(): AbsolutePath {
|
|
9
10
|
const apiRootPath = findApiRootPath();
|
|
11
|
+
// SAFETY: 선행 분기와 함수 계약이 이 타입을 보장합니다.
|
|
10
12
|
return path.dirname(apiRootPath) as AbsolutePath;
|
|
11
13
|
}
|
|
12
14
|
|
|
@@ -15,15 +17,18 @@ export function findApiRootPath(): AbsolutePath {
|
|
|
15
17
|
// 하지만 workspace 쓰면 process.cwd() 하면 되는데... 이건 나중에 협의 후 수정하는걸로
|
|
16
18
|
const workspacePath = process.env.PNPM_SCRIPT_SRC_DIR ?? process.env.INIT_CWD;
|
|
17
19
|
if (nonNullable(workspacePath)) {
|
|
20
|
+
// SAFETY: 선행 분기와 함수 계약이 이 타입을 보장합니다.
|
|
18
21
|
return workspacePath as AbsolutePath;
|
|
19
22
|
}
|
|
20
23
|
|
|
21
24
|
if (nonNullable(process.env.PNPM_PACKAGE_NAME)) {
|
|
25
|
+
// SAFETY: 선행 분기와 함수 계약이 이 타입을 보장합니다.
|
|
22
26
|
return process.cwd().split(path.sep).join(path.sep) as AbsolutePath;
|
|
23
27
|
}
|
|
24
28
|
|
|
25
29
|
const cwdPackagePath = path.join(process.cwd(), "package.json");
|
|
26
30
|
if (fs.existsSync(cwdPackagePath)) {
|
|
31
|
+
// SAFETY: 선행 분기와 함수 계약이 이 타입을 보장합니다.
|
|
27
32
|
return process.cwd().split(path.sep).join(path.sep) as AbsolutePath;
|
|
28
33
|
}
|
|
29
34
|
|
|
@@ -35,6 +40,7 @@ export function findApiRootPath(): AbsolutePath {
|
|
|
35
40
|
|
|
36
41
|
do {
|
|
37
42
|
if (fs.existsSync(path.join(dir, "/package.json"))) {
|
|
43
|
+
// SAFETY: 선행 분기와 함수 계약이 이 타입을 보장합니다.
|
|
38
44
|
return dir.split(path.sep).join(path.sep) as AbsolutePath;
|
|
39
45
|
}
|
|
40
46
|
dir = dir.split(path.sep).slice(0, -1).join(path.sep);
|
|
@@ -91,26 +97,18 @@ export function differenceWith<T>(
|
|
|
91
97
|
return arr1.filter((itemA) => !arr2.some((itemB) => comparator(itemA, itemB)));
|
|
92
98
|
}
|
|
93
99
|
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
// 원본 보존을 위해 defaultObj 복사
|
|
100
|
+
export function merge<T extends object>(defaultObj: T, userObj: T): T {
|
|
101
|
+
// 원본을 보존하면서 사용자 설정의 own enumerable 속성만 병합합니다.
|
|
97
102
|
const result = { ...defaultObj };
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
for (const key
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
if (isPlainObject(userValue) && isPlainObject(defaultValue)) {
|
|
108
|
-
result[key] = merge(defaultValue, userValue);
|
|
109
|
-
} else {
|
|
110
|
-
// 그 외의 경우 userObj의 값으로 덮어쓰기
|
|
111
|
-
result[key] = userValue;
|
|
112
|
-
}
|
|
113
|
-
}
|
|
103
|
+
const defaultEntries = new Map(Object.entries(defaultObj));
|
|
104
|
+
|
|
105
|
+
for (const [key, userValue] of Object.entries(userObj)) {
|
|
106
|
+
const defaultValue = defaultEntries.get(key);
|
|
107
|
+
const mergedValue =
|
|
108
|
+
isPlainObject(userValue) && isPlainObject(defaultValue)
|
|
109
|
+
? merge(defaultValue, userValue)
|
|
110
|
+
: userValue;
|
|
111
|
+
Object.assign(result, { [key]: mergedValue });
|
|
114
112
|
}
|
|
115
113
|
|
|
116
114
|
return result;
|
|
@@ -118,10 +116,10 @@ export function merge<T extends Record<string, any>>(defaultObj: T, userObj: T):
|
|
|
118
116
|
|
|
119
117
|
// plain object 판별 헬퍼 함수
|
|
120
118
|
// (배열, null, Date 등을 제외한 순수 객체만 true)
|
|
121
|
-
export function isPlainObject(value:
|
|
119
|
+
export function isPlainObject<Value>(value: Value): value is Value & object {
|
|
122
120
|
return (
|
|
123
121
|
value !== null &&
|
|
124
|
-
|
|
122
|
+
isObjectValue(value) &&
|
|
125
123
|
!Array.isArray(value) &&
|
|
126
124
|
Object.prototype.toString.call(value) === "[object Object]"
|
|
127
125
|
);
|
package/src/utils/zod-error.ts
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { type z } from "zod";
|
|
2
2
|
|
|
3
|
+
import { isNumberValue, isSymbolValue } from "./runtime-value";
|
|
4
|
+
|
|
3
5
|
type ValidationError = {
|
|
4
6
|
path: string[];
|
|
5
7
|
message: string;
|
|
@@ -8,11 +10,11 @@ type ValidationError = {
|
|
|
8
10
|
export function humanizeZodError(error: z.ZodError): ValidationError[] {
|
|
9
11
|
return error.issues.map(({ path: originPath, message }) => {
|
|
10
12
|
const path = originPath.map((item) => {
|
|
11
|
-
if (
|
|
13
|
+
if (isSymbolValue(item)) {
|
|
12
14
|
return item.description ?? item.toString();
|
|
13
15
|
}
|
|
14
16
|
|
|
15
|
-
if (
|
|
17
|
+
if (isNumberValue(item)) {
|
|
16
18
|
return `[${item}]`;
|
|
17
19
|
}
|
|
18
20
|
|
package/src/vector/chunking.ts
CHANGED
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
import { DEFAULT_VECTOR_CONFIG } from "./config";
|
|
2
2
|
import { type Chunk, type ChunkingConfig } from "./types";
|
|
3
3
|
|
|
4
|
+
interface ExtractedChunk {
|
|
5
|
+
chunk: string;
|
|
6
|
+
length: number;
|
|
7
|
+
}
|
|
8
|
+
|
|
4
9
|
/**
|
|
5
10
|
* 텍스트 청킹
|
|
6
11
|
* - 현재 가이드에서는 400토큰 이하만 저장하므로 기본적으로 사용하지 않음
|
|
@@ -69,7 +74,7 @@ export class Chunking {
|
|
|
69
74
|
return Math.ceil(text.length / effectiveChunkSize);
|
|
70
75
|
}
|
|
71
76
|
|
|
72
|
-
private extractChunk(text: string):
|
|
77
|
+
private extractChunk(text: string): ExtractedChunk {
|
|
73
78
|
if (text.length <= this.config.chunkSize) {
|
|
74
79
|
return { chunk: text, length: text.length };
|
|
75
80
|
}
|
package/src/vector/embedding.ts
CHANGED
|
@@ -139,7 +139,8 @@ class EmbeddingClass {
|
|
|
139
139
|
const model = openai.embeddingModel(openaiConfig.model);
|
|
140
140
|
|
|
141
141
|
const { embeddings, usage } = await embedMany({
|
|
142
|
-
model:
|
|
142
|
+
model:
|
|
143
|
+
/* SAFETY: 호출 경계의 선행 검증과 소유 타입 계약이 이 값의 타입을 보장한다. */ model as EmbeddingModel,
|
|
143
144
|
values: texts,
|
|
144
145
|
});
|
|
145
146
|
|
package/src/vector/types.ts
CHANGED
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
* pgvector 통합을 위한 타입 정의
|
|
3
3
|
*/
|
|
4
4
|
|
|
5
|
+
import { type JsonValue } from "../types/types";
|
|
6
|
+
|
|
5
7
|
/** 임베딩 제공자 */
|
|
6
8
|
export type EmbeddingProvider = "voyage" | "openai";
|
|
7
9
|
|
|
@@ -24,14 +26,14 @@ export interface Chunk {
|
|
|
24
26
|
}
|
|
25
27
|
|
|
26
28
|
/** 벡터 검색 결과 */
|
|
27
|
-
export interface VectorSearchResult<T = Record<string,
|
|
29
|
+
export interface VectorSearchResult<T = Record<string, JsonValue>> {
|
|
28
30
|
id: number | string;
|
|
29
31
|
similarity: number;
|
|
30
32
|
data: T;
|
|
31
33
|
}
|
|
32
34
|
|
|
33
35
|
/** 하이브리드 검색 결과 (Vector + FTS) */
|
|
34
|
-
export interface HybridSearchResult<T = Record<string,
|
|
36
|
+
export interface HybridSearchResult<T = Record<string, JsonValue>> extends VectorSearchResult<T> {
|
|
35
37
|
vectorScore?: number;
|
|
36
38
|
ftsScore?: number;
|
|
37
39
|
}
|
package/tsdown.api.config.ts
CHANGED
|
@@ -6,9 +6,12 @@ import { defineConfig } from "tsdown";
|
|
|
6
6
|
const srcRoot = path.resolve(process.cwd(), "src");
|
|
7
7
|
const ignoredSuffixes = [".test.ts", ".test-hold.ts", ".ignore.ts", ".d.ts"];
|
|
8
8
|
const ignoredDirectories = new Set(["__mocks__", "_templates", "wasted_src"]);
|
|
9
|
+
interface BuildEntries {
|
|
10
|
+
[entryName: string]: string;
|
|
11
|
+
}
|
|
9
12
|
|
|
10
|
-
function collectEntries(directory: string):
|
|
11
|
-
const entries:
|
|
13
|
+
function collectEntries(directory: string): BuildEntries {
|
|
14
|
+
const entries: BuildEntries = {};
|
|
12
15
|
|
|
13
16
|
for (const entry of readdirSync(directory)) {
|
|
14
17
|
if (ignoredDirectories.has(entry)) {
|