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
|
@@ -71,6 +71,7 @@ describe("ExtractColumnType", () => {
|
|
|
71
71
|
type Tables = { users: MockSchema["users"] };
|
|
72
72
|
type Result = ExtractColumnType<Tables, "users.id">;
|
|
73
73
|
|
|
74
|
+
// SAFETY: 테스트 입력은 선언된 타입 검증 시나리오에 맞게 고정됩니다.
|
|
74
75
|
const result = {} as Result;
|
|
75
76
|
expectTypeOf(result).toEqualTypeOf<number>();
|
|
76
77
|
});
|
|
@@ -79,6 +80,7 @@ describe("ExtractColumnType", () => {
|
|
|
79
80
|
type Tables = { users: MockSchema["users"] };
|
|
80
81
|
type Result = ExtractColumnType<Tables, "users.department_id">;
|
|
81
82
|
|
|
83
|
+
// SAFETY: 테스트 입력은 선언된 타입 검증 시나리오에 맞게 고정됩니다.
|
|
82
84
|
const result = {} as Result;
|
|
83
85
|
expectTypeOf(result).toEqualTypeOf<number | null>();
|
|
84
86
|
});
|
|
@@ -87,6 +89,7 @@ describe("ExtractColumnType", () => {
|
|
|
87
89
|
type Tables = { users: MockSchema["users"] };
|
|
88
90
|
type Result = ExtractColumnType<Tables, "id">;
|
|
89
91
|
|
|
92
|
+
// SAFETY: 테스트 입력은 선언된 타입 검증 시나리오에 맞게 고정됩니다.
|
|
90
93
|
const result = {} as Result;
|
|
91
94
|
expectTypeOf(result).toEqualTypeOf<number>();
|
|
92
95
|
});
|
|
@@ -100,6 +103,7 @@ describe("ExtractColumnType", () => {
|
|
|
100
103
|
};
|
|
101
104
|
type Result = ExtractColumnType<Tables, "department.id">;
|
|
102
105
|
|
|
106
|
+
// SAFETY: 테스트 입력은 선언된 타입 검증 시나리오에 맞게 고정됩니다.
|
|
103
107
|
const result = {} as Result;
|
|
104
108
|
expectTypeOf(result).toEqualTypeOf<number>();
|
|
105
109
|
});
|
|
@@ -113,6 +117,7 @@ describe("ExtractColumnType", () => {
|
|
|
113
117
|
};
|
|
114
118
|
type Result = ExtractColumnType<Tables, "department.id">;
|
|
115
119
|
|
|
120
|
+
// SAFETY: 테스트 입력은 선언된 타입 검증 시나리오에 맞게 고정됩니다.
|
|
116
121
|
const result = {} as Result;
|
|
117
122
|
expectTypeOf(result).toEqualTypeOf<number | null>();
|
|
118
123
|
});
|
|
@@ -124,6 +129,7 @@ describe("ExtractColumnType", () => {
|
|
|
124
129
|
};
|
|
125
130
|
type Result = ExtractColumnType<Tables, "employee.salary">;
|
|
126
131
|
|
|
132
|
+
// SAFETY: 테스트 입력은 선언된 타입 검증 시나리오에 맞게 고정됩니다.
|
|
127
133
|
const result = {} as Result;
|
|
128
134
|
expectTypeOf(result).toEqualTypeOf<string | null>();
|
|
129
135
|
});
|
|
@@ -138,6 +144,7 @@ describe("ExtractColumnType", () => {
|
|
|
138
144
|
};
|
|
139
145
|
type Result = ExtractColumnType<Tables, "company.id">;
|
|
140
146
|
|
|
147
|
+
// SAFETY: 테스트 입력은 선언된 타입 검증 시나리오에 맞게 고정됩니다.
|
|
141
148
|
const result = {} as Result;
|
|
142
149
|
expectTypeOf(result).toEqualTypeOf<number>();
|
|
143
150
|
});
|
|
@@ -158,6 +165,7 @@ describe("ParseSelectObject", () => {
|
|
|
158
165
|
};
|
|
159
166
|
type Result = ParseSelectObject<Tables, Select>;
|
|
160
167
|
|
|
168
|
+
// SAFETY: 테스트 입력은 선언된 타입 검증 시나리오에 맞게 고정됩니다.
|
|
161
169
|
const result = {} as Result;
|
|
162
170
|
expectTypeOf(result).toEqualTypeOf<{
|
|
163
171
|
id: number;
|
|
@@ -173,6 +181,7 @@ describe("ParseSelectObject", () => {
|
|
|
173
181
|
};
|
|
174
182
|
type Result = ParseSelectObject<Tables, Select>;
|
|
175
183
|
|
|
184
|
+
// SAFETY: 테스트 입력은 선언된 타입 검증 시나리오에 맞게 고정됩니다.
|
|
176
185
|
const result = {} as Result;
|
|
177
186
|
expectTypeOf(result).toEqualTypeOf<{
|
|
178
187
|
id: number;
|
|
@@ -194,6 +203,7 @@ describe("ParseSelectObject", () => {
|
|
|
194
203
|
};
|
|
195
204
|
type Result = ParseSelectObject<Tables, Select>;
|
|
196
205
|
|
|
206
|
+
// SAFETY: 테스트 입력은 선언된 타입 검증 시나리오에 맞게 고정됩니다.
|
|
197
207
|
const result = {} as Result;
|
|
198
208
|
expectTypeOf(result).toEqualTypeOf<{
|
|
199
209
|
id: number;
|
|
@@ -216,6 +226,7 @@ describe("ParseSelectObject", () => {
|
|
|
216
226
|
};
|
|
217
227
|
type Result = ParseSelectObject<Tables, Select>;
|
|
218
228
|
|
|
229
|
+
// SAFETY: 테스트 입력은 선언된 타입 검증 시나리오에 맞게 고정됩니다.
|
|
219
230
|
const result = {} as Result;
|
|
220
231
|
expectTypeOf(result).toEqualTypeOf<{
|
|
221
232
|
id: number;
|
|
@@ -244,6 +255,7 @@ describe("ParseSelectObject", () => {
|
|
|
244
255
|
};
|
|
245
256
|
type Result = ParseSelectObject<Tables, Select>;
|
|
246
257
|
|
|
258
|
+
// SAFETY: 테스트 입력은 선언된 타입 검증 시나리오에 맞게 고정됩니다.
|
|
247
259
|
const result = {} as Result;
|
|
248
260
|
expectTypeOf(result).toEqualTypeOf<{
|
|
249
261
|
id: number;
|
|
@@ -270,6 +282,7 @@ describe("ParseSelectObject", () => {
|
|
|
270
282
|
};
|
|
271
283
|
type Result = ParseSelectObject<Tables, Select>;
|
|
272
284
|
|
|
285
|
+
// SAFETY: 테스트 입력은 선언된 타입 검증 시나리오에 맞게 고정됩니다.
|
|
273
286
|
const result = {} as Result;
|
|
274
287
|
expectTypeOf(result).toEqualTypeOf<{
|
|
275
288
|
id: number;
|
|
@@ -294,6 +307,7 @@ describe("ParseSelectObject", () => {
|
|
|
294
307
|
};
|
|
295
308
|
type Result = ParseSelectObject<Tables, Select>;
|
|
296
309
|
|
|
310
|
+
// SAFETY: 테스트 입력은 선언된 타입 검증 시나리오에 맞게 고정됩니다.
|
|
297
311
|
const result = {} as Result;
|
|
298
312
|
// employee 객체가 null이 아닐 때만 접근하므로, salary의 원래 nullability 유지
|
|
299
313
|
expectTypeOf(result).toEqualTypeOf<{
|
|
@@ -325,6 +339,7 @@ describe("ParseSelectObject", () => {
|
|
|
325
339
|
};
|
|
326
340
|
type Result = ParseSelectObject<Tables, Select>;
|
|
327
341
|
|
|
342
|
+
// SAFETY: 테스트 입력은 선언된 타입 검증 시나리오에 맞게 고정됩니다.
|
|
328
343
|
const result = {} as Result;
|
|
329
344
|
expectTypeOf(result).toEqualTypeOf<{
|
|
330
345
|
id: number;
|
|
@@ -359,6 +374,7 @@ describe("ParseSelectObject", () => {
|
|
|
359
374
|
};
|
|
360
375
|
type Result = ParseSelectObject<Tables, Select>;
|
|
361
376
|
|
|
377
|
+
// SAFETY: 테스트 입력은 선언된 타입 검증 시나리오에 맞게 고정됩니다.
|
|
362
378
|
const result = {} as Result;
|
|
363
379
|
expectTypeOf(result).toEqualTypeOf<{
|
|
364
380
|
id: number;
|
|
@@ -404,6 +420,7 @@ describe("ParseSelectObject", () => {
|
|
|
404
420
|
};
|
|
405
421
|
type Result = ParseSelectObject<Tables, Select>;
|
|
406
422
|
|
|
423
|
+
// SAFETY: 테스트 입력은 선언된 타입 검증 시나리오에 맞게 고정됩니다.
|
|
407
424
|
const result = {} as Result;
|
|
408
425
|
expectTypeOf(result).toEqualTypeOf<{
|
|
409
426
|
id: number;
|
|
@@ -440,6 +457,7 @@ describe("ParseSelectObject", () => {
|
|
|
440
457
|
};
|
|
441
458
|
type Result = ParseSelectObject<Tables, Select>;
|
|
442
459
|
|
|
460
|
+
// SAFETY: 테스트 입력은 선언된 타입 검증 시나리오에 맞게 고정됩니다.
|
|
443
461
|
const result = {} as Result;
|
|
444
462
|
expectTypeOf(result).toEqualTypeOf<{
|
|
445
463
|
id: number;
|
|
@@ -524,7 +542,7 @@ describe("JsonColumns and JsonSupersetValue", () => {
|
|
|
524
542
|
// @ts-expect-error undefined cannot be serialized as a JSONB containment value.
|
|
525
543
|
const undefinedRoot: PreferencesValue = undefined;
|
|
526
544
|
|
|
527
|
-
const unknownValue: unknown = { notifications: { email: true } };
|
|
545
|
+
const unknownValue: unknown = structuredClone({ notifications: { email: true } });
|
|
528
546
|
// @ts-expect-error unknown must be narrowed before it can be used as a containment value.
|
|
529
547
|
const unknownRoot: PreferencesValue = unknownValue;
|
|
530
548
|
|
|
@@ -536,6 +554,7 @@ describe("JsonColumns and JsonSupersetValue", () => {
|
|
|
536
554
|
expectTypeOf(unknownRoot).toExtend<PreferencesValue>();
|
|
537
555
|
|
|
538
556
|
type Query = Puri<MockSchema, Tables, MockSchema["users"]>;
|
|
557
|
+
// SAFETY: 테스트 입력은 선언된 타입 검증 시나리오에 맞게 고정됩니다.
|
|
539
558
|
const query = {} as Query;
|
|
540
559
|
|
|
541
560
|
expectTypeOf(
|
|
@@ -575,6 +594,7 @@ describe("JsonColumns and JsonSupersetValue", () => {
|
|
|
575
594
|
describe("Puri locking methods", () => {
|
|
576
595
|
it("forUpdate 체이닝 후 first 결과 타입을 유지한다", () => {
|
|
577
596
|
type Query = Puri<MockSchema, { users: MockSchema["users"] }, MockSchema["users"]>;
|
|
597
|
+
// SAFETY: 테스트 입력은 선언된 타입 검증 시나리오에 맞게 고정됩니다.
|
|
578
598
|
const query = {} as Query;
|
|
579
599
|
|
|
580
600
|
const result = query.where("id", 1).forUpdate().first();
|
|
@@ -584,6 +604,7 @@ describe("Puri locking methods", () => {
|
|
|
584
604
|
|
|
585
605
|
it("forShare 체이닝 후 first 결과 타입을 유지한다", () => {
|
|
586
606
|
type Query = Puri<MockSchema, { users: MockSchema["users"] }, MockSchema["users"]>;
|
|
607
|
+
// SAFETY: 테스트 입력은 선언된 타입 검증 시나리오에 맞게 고정됩니다.
|
|
587
608
|
const query = {} as Query;
|
|
588
609
|
|
|
589
610
|
const result = query.where("id", 1).forShare().first();
|
|
@@ -595,6 +616,7 @@ describe("Puri locking methods", () => {
|
|
|
595
616
|
describe("Puri orderBy methods", () => {
|
|
596
617
|
it("단일 컬럼 null ordering과 체이닝 타입을 지원한다", () => {
|
|
597
618
|
type Query = Puri<MockSchema, { users: MockSchema["users"] }, MockSchema["users"]>;
|
|
619
|
+
// SAFETY: 테스트 입력은 선언된 타입 검증 시나리오에 맞게 고정됩니다.
|
|
598
620
|
const query = {} as Query;
|
|
599
621
|
|
|
600
622
|
expectTypeOf(query.orderBy("id")).toEqualTypeOf<Query>();
|
|
@@ -605,6 +627,7 @@ describe("Puri orderBy methods", () => {
|
|
|
605
627
|
|
|
606
628
|
it("여러 컬럼 orderBy item 배열을 지원한다", () => {
|
|
607
629
|
type Query = Puri<MockSchema, { users: MockSchema["users"] }, MockSchema["users"]>;
|
|
630
|
+
// SAFETY: 테스트 입력은 선언된 타입 검증 시나리오에 맞게 고정됩니다.
|
|
608
631
|
const query = {} as Query;
|
|
609
632
|
|
|
610
633
|
expectTypeOf(query.orderBy(["name", "email"])).toEqualTypeOf<Query>();
|
|
@@ -620,6 +643,7 @@ describe("Puri orderBy methods", () => {
|
|
|
620
643
|
it("select 결과 컬럼을 orderBy에 사용할 수 있다", () => {
|
|
621
644
|
type Result = { post_count: number };
|
|
622
645
|
type Query = Puri<MockSchema, { users: MockSchema["users"] }, Result>;
|
|
646
|
+
// SAFETY: 테스트 입력은 선언된 타입 검증 시나리오에 맞게 고정됩니다.
|
|
623
647
|
const query = {} as Query;
|
|
624
648
|
|
|
625
649
|
expectTypeOf(query.orderBy("post_count", "desc", "last")).toEqualTypeOf<Query>();
|
|
@@ -631,6 +655,7 @@ describe("Puri orderBy methods", () => {
|
|
|
631
655
|
|
|
632
656
|
it("SqlExpression orderBy를 지원한다", () => {
|
|
633
657
|
type Query = Puri<MockSchema, { users: MockSchema["users"] }, MockSchema["users"]>;
|
|
658
|
+
// SAFETY: 테스트 입력은 선언된 타입 검증 시나리오에 맞게 고정됩니다.
|
|
634
659
|
const query = {} as Query;
|
|
635
660
|
const expression = Puri.rawNumber("COUNT(*)");
|
|
636
661
|
|
|
@@ -643,6 +668,7 @@ describe("Puri orderBy methods", () => {
|
|
|
643
668
|
|
|
644
669
|
it("잘못된 direction, nulls, column은 거부한다", () => {
|
|
645
670
|
type Query = Puri<MockSchema, { users: MockSchema["users"] }, MockSchema["users"]>;
|
|
671
|
+
// SAFETY: 테스트 입력은 선언된 타입 검증 시나리오에 맞게 고정됩니다.
|
|
646
672
|
const query = {} as Query;
|
|
647
673
|
|
|
648
674
|
// @ts-expect-error direction은 asc/desc만 허용한다.
|
|
@@ -665,6 +691,7 @@ describe("Puri orderBy methods", () => {
|
|
|
665
691
|
describe("Puri ensureJoin methods", () => {
|
|
666
692
|
it("ensureJoin 이후 alias 컬럼을 타입 안전하게 사용할 수 있다", () => {
|
|
667
693
|
type Query = Puri<MockSchema, { users: MockSchema["users"] }, MockSchema["users"]>;
|
|
694
|
+
// SAFETY: 테스트 입력은 선언된 타입 검증 시나리오에 맞게 고정됩니다.
|
|
668
695
|
const query = {} as Query;
|
|
669
696
|
|
|
670
697
|
const joined = query.ensureJoin(
|
|
@@ -681,6 +708,7 @@ describe("Puri ensureJoin methods", () => {
|
|
|
681
708
|
|
|
682
709
|
it("ensureLeftJoin은 nullable FK의 객체 타입을 유지한다", () => {
|
|
683
710
|
type Query = Puri<MockSchema, { users: MockSchema["users"] }, MockSchema["users"]>;
|
|
711
|
+
// SAFETY: 테스트 입력은 선언된 타입 검증 시나리오에 맞게 고정됩니다.
|
|
684
712
|
const query = {} as Query;
|
|
685
713
|
|
|
686
714
|
const result = query
|
|
@@ -695,6 +723,7 @@ describe("Puri ensureJoin methods", () => {
|
|
|
695
723
|
|
|
696
724
|
it("ensureLeftJoin은 non-null FK의 객체를 non-null로 추론한다", () => {
|
|
697
725
|
type Query = Puri<MockSchema, { employees: MockSchema["employees"] }, MockSchema["employees"]>;
|
|
726
|
+
// SAFETY: 테스트 입력은 선언된 타입 검증 시나리오에 맞게 고정됩니다.
|
|
698
727
|
const query = {} as Query;
|
|
699
728
|
|
|
700
729
|
const result = query
|
|
@@ -709,6 +738,7 @@ describe("Puri ensureJoin methods", () => {
|
|
|
709
738
|
|
|
710
739
|
it("ensureJoin은 callback 형식을 허용하지 않는다", () => {
|
|
711
740
|
type Query = Puri<MockSchema, { users: MockSchema["users"] }, MockSchema["users"]>;
|
|
741
|
+
// SAFETY: 테스트 입력은 선언된 타입 검증 시나리오에 맞게 고정됩니다.
|
|
712
742
|
const query = {} as Query;
|
|
713
743
|
|
|
714
744
|
// @ts-expect-error callback JOIN은 동일성을 판정할 수 없으므로 지원하지 않는다.
|
|
@@ -38,7 +38,7 @@ type VectorColumnKeys<T> = T extends { [K in VectorKey]: readonly (infer V)[] }
|
|
|
38
38
|
? V & string
|
|
39
39
|
: never;
|
|
40
40
|
|
|
41
|
-
export type VectorColumns<TTables extends
|
|
41
|
+
export type VectorColumns<TTables extends object> =
|
|
42
42
|
| {
|
|
43
43
|
[TAlias in keyof TTables]: `${TAlias & string}.${VectorColumnKeys<TTables[TAlias]>}`;
|
|
44
44
|
}[keyof TTables]
|
|
@@ -47,7 +47,7 @@ export type VectorColumns<TTables extends Record<string, any>> =
|
|
|
47
47
|
// __json__ 메타데이터에서 JSON 컬럼 추출
|
|
48
48
|
type JsonColumnKeys<T> = T extends { [K in JsonKey]: readonly (infer J)[] } ? J & string : never;
|
|
49
49
|
|
|
50
|
-
export type JsonColumns<TTables extends
|
|
50
|
+
export type JsonColumns<TTables extends object> =
|
|
51
51
|
| {
|
|
52
52
|
[TAlias in keyof TTables]: `${TAlias & string}.${JsonColumnKeys<TTables[TAlias]>}`;
|
|
53
53
|
}[keyof TTables]
|
|
@@ -93,13 +93,15 @@ export type PuriTable<T> = Omit<StripVirtual<T>, VirtualKey>;
|
|
|
93
93
|
export type OmitInternalTypeKeys<T> = Omit<T, InternalTypeKeys>;
|
|
94
94
|
|
|
95
95
|
// TTables의 모든 테이블에서 사용 가능한 컬럼 경로
|
|
96
|
-
export type AvailableColumns<TTables extends
|
|
96
|
+
export type AvailableColumns<TTables extends object> = (
|
|
97
97
|
| {
|
|
98
98
|
[TAlias in keyof TTables]: `${TAlias & string}.${ColumnKeys<TTables[TAlias]>}`;
|
|
99
99
|
}[keyof TTables]
|
|
100
100
|
| (IsSingleKey<TTables> extends true
|
|
101
101
|
? ColumnKeys<TTables[keyof TTables]> // 단일 테이블이면 컬럼명만도 허용
|
|
102
|
-
: never)
|
|
102
|
+
: never)
|
|
103
|
+
) &
|
|
104
|
+
string;
|
|
103
105
|
|
|
104
106
|
// 숫자 타입 컬럼만 추출하는 유틸리티 타입
|
|
105
107
|
type NumericColumnKeys<T> = {
|
|
@@ -108,7 +110,7 @@ type NumericColumnKeys<T> = {
|
|
|
108
110
|
string;
|
|
109
111
|
|
|
110
112
|
// TTables의 모든 테이블에서 숫자 타입 컬럼만 추출
|
|
111
|
-
export type NumericColumns<TTables extends
|
|
113
|
+
export type NumericColumns<TTables extends object> =
|
|
112
114
|
| {
|
|
113
115
|
[TAlias in keyof TTables]: `${TAlias & string}.${NumericColumnKeys<TTables[TAlias]>}`;
|
|
114
116
|
}[keyof TTables]
|
|
@@ -117,30 +119,30 @@ export type NumericColumns<TTables extends Record<string, any>> =
|
|
|
117
119
|
: never);
|
|
118
120
|
|
|
119
121
|
// Group By, Order By, Having 등에서 선택 가능한 컬럼
|
|
120
|
-
export type ResultAvailableColumns<TTables extends
|
|
122
|
+
export type ResultAvailableColumns<TTables extends object, TResult = any> =
|
|
121
123
|
| AvailableColumns<TTables>
|
|
122
124
|
| `${keyof TResult & string}`;
|
|
123
125
|
|
|
124
126
|
// Select 값 타입 확장 (단일 컬럼 또는 SQL 표현식)
|
|
125
|
-
export type SelectValue<TTables extends
|
|
127
|
+
export type SelectValue<TTables extends object> =
|
|
126
128
|
| AvailableColumns<TTables>
|
|
127
129
|
| SqlExpression<"string" | "number" | "boolean" | "date" | "string[]">;
|
|
128
130
|
|
|
129
131
|
// 중첩 Select 객체 타입 (재귀적)
|
|
130
132
|
// 예: { parent: { id: "parent.id", name: "parent.name" } }
|
|
131
|
-
export type NestedSelectObject<TTables extends
|
|
133
|
+
export type NestedSelectObject<TTables extends object> = {
|
|
132
134
|
[key: string]: SelectValue<TTables> | NestedSelectObject<TTables>;
|
|
133
135
|
};
|
|
134
136
|
|
|
135
137
|
// Select 객체 타입 (flat 또는 중첩 허용)
|
|
136
|
-
export type SelectObject<TTables extends
|
|
138
|
+
export type SelectObject<TTables extends object> = NestedSelectObject<TTables>;
|
|
137
139
|
|
|
138
140
|
// 값이 중첩 객체인지 판별하는 헬퍼 타입
|
|
139
141
|
type IsNestedObject<T> = T extends string
|
|
140
142
|
? false
|
|
141
143
|
: T extends SqlExpression<any>
|
|
142
144
|
? false
|
|
143
|
-
: T extends
|
|
145
|
+
: T extends object
|
|
144
146
|
? true
|
|
145
147
|
: false;
|
|
146
148
|
|
|
@@ -201,13 +203,13 @@ type JoinPath<Prefix extends string, Key extends string> = Prefix extends ""
|
|
|
201
203
|
// }
|
|
202
204
|
// })
|
|
203
205
|
export type ParseSelectObject<
|
|
204
|
-
TTables extends
|
|
206
|
+
TTables extends object,
|
|
205
207
|
TSelect extends SelectObject<TTables>,
|
|
206
208
|
> = ParseSelectObjectWithPath<TTables, TSelect, "">;
|
|
207
209
|
|
|
208
210
|
// 경로를 추적하면서 Select 결과 타입을 추론합니다.
|
|
209
211
|
type ParseSelectObjectWithPath<
|
|
210
|
-
TTables extends
|
|
212
|
+
TTables extends object,
|
|
211
213
|
TSelect extends SelectObject<TTables>,
|
|
212
214
|
Prefix extends string,
|
|
213
215
|
> = Expand<{
|
|
@@ -236,7 +238,7 @@ type ParseSelectObjectWithPath<
|
|
|
236
238
|
// ParseSelectObjectWithPath와 거의 동일하나, 마지막에 ExtractColumnType 대신 ExtractColumnTypeRaw를 사용하여
|
|
237
239
|
// 필드 레벨에서 중복으로 | null이 추가되는 것을 방지합니다.
|
|
238
240
|
type ParseSelectObjectInner<
|
|
239
|
-
TTables extends
|
|
241
|
+
TTables extends object,
|
|
240
242
|
TSelect extends SelectObject<TTables>,
|
|
241
243
|
Prefix extends string,
|
|
242
244
|
> = Expand<{
|
|
@@ -264,7 +266,7 @@ type ParseSelectObjectInner<
|
|
|
264
266
|
// 컬럼 경로에서 타입을 추출합니다. LeftJoinedMarker가 있으면 | null을 추가합니다.
|
|
265
267
|
// 최상위 select 필드에서 사용됩니다.
|
|
266
268
|
export type ExtractColumnType<
|
|
267
|
-
TTables extends
|
|
269
|
+
TTables extends object,
|
|
268
270
|
Path extends string,
|
|
269
271
|
> = Path extends `${infer TAlias}.${infer TColumn}`
|
|
270
272
|
? TAlias extends keyof TTables
|
|
@@ -283,7 +285,7 @@ export type ExtractColumnType<
|
|
|
283
285
|
// 컬럼 경로에서 타입을 추출합니다. leftJoin 여부와 관계없이 원본 타입을 반환합니다.
|
|
284
286
|
// 중첩 객체 내부 필드에서 사용됩니다. (객체 레벨에서 이미 | null 처리가 완료되었으므로)
|
|
285
287
|
type ExtractColumnTypeRaw<
|
|
286
|
-
TTables extends
|
|
288
|
+
TTables extends object,
|
|
287
289
|
Path extends string,
|
|
288
290
|
> = Path extends `${infer TAlias}.${infer TColumn}`
|
|
289
291
|
? TAlias extends keyof TTables
|
|
@@ -299,12 +301,12 @@ type ExtractColumnTypeRaw<
|
|
|
299
301
|
|
|
300
302
|
// Where 조건 객체 타입
|
|
301
303
|
// 예: { "u.id": 1, "u.status": "active" }
|
|
302
|
-
export type WhereCondition<TTables extends
|
|
304
|
+
export type WhereCondition<TTables extends object> = {
|
|
303
305
|
[key in AvailableColumns<TTables>]?: ExtractColumnType<TTables, key & string>;
|
|
304
306
|
};
|
|
305
307
|
|
|
306
308
|
// Fulltext index 컬럼 추출 타입
|
|
307
|
-
export type FulltextColumns<TTables extends
|
|
309
|
+
export type FulltextColumns<TTables extends object> = {
|
|
308
310
|
[TAlias in keyof TTables]: TTables[TAlias] extends {
|
|
309
311
|
[K in FulltextKey]: readonly (infer Col)[];
|
|
310
312
|
}
|
|
@@ -338,7 +340,7 @@ export type Expand<T> = T extends any[]
|
|
|
338
340
|
? { [K in keyof T]: T[K] }
|
|
339
341
|
: T;
|
|
340
342
|
|
|
341
|
-
type IsSingleKey<TTables extends
|
|
343
|
+
type IsSingleKey<TTables extends object> = keyof TTables extends infer K
|
|
342
344
|
? K extends keyof TTables
|
|
343
345
|
? keyof TTables extends K // 역방향 체크로 단일 키 확인
|
|
344
346
|
? true
|
|
@@ -346,7 +348,7 @@ type IsSingleKey<TTables extends Record<string, any>> = keyof TTables extends in
|
|
|
346
348
|
: false
|
|
347
349
|
: false;
|
|
348
350
|
|
|
349
|
-
export type SingleTableValue<TTables extends
|
|
351
|
+
export type SingleTableValue<TTables extends object> =
|
|
350
352
|
IsSingleKey<TTables> extends true ? TTables[keyof TTables] : never;
|
|
351
353
|
|
|
352
354
|
// __hasDefault__에 포함된 키들을 PuriTable<T>의 키로 제한
|
|
@@ -393,7 +395,7 @@ export type OnConflictTarget = string | string[];
|
|
|
393
395
|
// ON CONFLICT 액션 타입
|
|
394
396
|
// - "nothing": DO NOTHING
|
|
395
397
|
// - { update: [...] }: DO UPDATE
|
|
396
|
-
export type OnConflictAction<TTables extends
|
|
398
|
+
export type OnConflictAction<TTables extends object> =
|
|
397
399
|
| "nothing"
|
|
398
400
|
| {
|
|
399
401
|
update:
|
|
@@ -411,7 +413,7 @@ type UnionToIntersection<U> = (U extends any ? (k: U) => void : never) extends (
|
|
|
411
413
|
: never;
|
|
412
414
|
|
|
413
415
|
// SelectAll 시 모든 조인된 테이블의 컬럼 포함
|
|
414
|
-
export type SelectAllResult<TTables extends
|
|
416
|
+
export type SelectAllResult<TTables extends object> = UnionToIntersection<
|
|
415
417
|
{
|
|
416
418
|
[K in keyof TTables]: TTables[K] extends infer T
|
|
417
419
|
? T extends LeftJoinedMarker
|