sonamu 0.8.26 → 0.9.0
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/bin/cli.js +60 -13
- package/dist/_virtual/rolldown_runtime.js +39 -0
- package/dist/ai/agents/agent.d.ts +3 -3
- package/dist/ai/agents/agent.d.ts.map +1 -1
- package/dist/ai/agents/agent.js +76 -73
- package/dist/ai/agents/index.js +3 -3
- package/dist/ai/agents/types.d.ts +3 -3
- package/dist/ai/agents/types.d.ts.map +1 -1
- package/dist/ai/agents/types.js +1 -3
- package/dist/ai/index.js +3 -2
- package/dist/ai/providers/rtzr/api.js +25 -25
- package/dist/ai/providers/rtzr/error.js +25 -26
- package/dist/ai/providers/rtzr/index.js +5 -5
- package/dist/ai/providers/rtzr/model.d.ts +1 -1
- package/dist/ai/providers/rtzr/model.d.ts.map +1 -1
- package/dist/ai/providers/rtzr/model.js +117 -133
- package/dist/ai/providers/rtzr/options.d.ts.map +1 -1
- package/dist/ai/providers/rtzr/options.js +35 -41
- package/dist/ai/providers/rtzr/provider.d.ts +1 -1
- package/dist/ai/providers/rtzr/provider.d.ts.map +1 -1
- package/dist/ai/providers/rtzr/provider.js +53 -51
- package/dist/ai/providers/rtzr/utils.d.ts.map +1 -1
- package/dist/ai/providers/rtzr/utils.js +84 -84
- package/dist/api/base-frame.d.ts +2 -2
- package/dist/api/base-frame.d.ts.map +1 -1
- package/dist/api/base-frame.js +29 -19
- package/dist/api/caster.d.ts +1 -1
- package/dist/api/caster.d.ts.map +1 -1
- package/dist/api/caster.js +51 -61
- package/dist/api/code-converters.d.ts +4 -3
- package/dist/api/code-converters.d.ts.map +1 -1
- package/dist/api/code-converters.js +226 -249
- package/dist/api/config.d.ts +17 -17
- package/dist/api/config.d.ts.map +1 -1
- package/dist/api/config.js +37 -30
- package/dist/api/context.d.ts +10 -10
- package/dist/api/context.d.ts.map +1 -1
- package/dist/api/context.js +8 -2
- package/dist/api/decorators.d.ts +8 -8
- package/dist/api/decorators.d.ts.map +1 -1
- package/dist/api/decorators.js +245 -268
- package/dist/api/index.js +39 -7
- package/dist/api/secret.js +22 -15
- package/dist/api/sonamu.d.ts +15 -15
- package/dist/api/sonamu.d.ts.map +1 -1
- package/dist/api/sonamu.js +1012 -1131
- package/dist/api/validator.js +88 -79
- package/dist/auth/auth-generator.d.ts.map +1 -1
- package/dist/auth/auth-generator.js +203 -200
- package/dist/auth/better-auth-entities.d.ts +2 -2
- package/dist/auth/better-auth-entities.d.ts.map +1 -1
- package/dist/auth/better-auth-entities.js +369 -429
- package/dist/auth/index.js +21 -6
- package/dist/auth/knex-adapter.d.ts +2 -2
- package/dist/auth/knex-adapter.d.ts.map +1 -1
- package/dist/auth/knex-adapter.js +153 -157
- package/dist/auth/plugins/entity-definitions/admin.d.ts +1 -1
- package/dist/auth/plugins/entity-definitions/admin.d.ts.map +1 -1
- package/dist/auth/plugins/entity-definitions/admin.js +58 -56
- package/dist/auth/plugins/entity-definitions/anonymous.d.ts +1 -1
- package/dist/auth/plugins/entity-definitions/anonymous.d.ts.map +1 -1
- package/dist/auth/plugins/entity-definitions/anonymous.js +20 -20
- package/dist/auth/plugins/entity-definitions/api-key.d.ts +1 -1
- package/dist/auth/plugins/entity-definitions/api-key.d.ts.map +1 -1
- package/dist/auth/plugins/entity-definitions/api-key.js +185 -196
- package/dist/auth/plugins/entity-definitions/index.d.ts +1 -1
- package/dist/auth/plugins/entity-definitions/index.d.ts.map +1 -1
- package/dist/auth/plugins/entity-definitions/index.js +26 -29
- package/dist/auth/plugins/entity-definitions/jwt.d.ts +1 -1
- package/dist/auth/plugins/entity-definitions/jwt.d.ts.map +1 -1
- package/dist/auth/plugins/entity-definitions/jwt.js +62 -64
- package/dist/auth/plugins/entity-definitions/organization.d.ts +1 -1
- package/dist/auth/plugins/entity-definitions/organization.d.ts.map +1 -1
- package/dist/auth/plugins/entity-definitions/organization.js +362 -421
- package/dist/auth/plugins/entity-definitions/passkey.d.ts +1 -1
- package/dist/auth/plugins/entity-definitions/passkey.d.ts.map +1 -1
- package/dist/auth/plugins/entity-definitions/passkey.js +115 -126
- package/dist/auth/plugins/entity-definitions/phone-number.d.ts +1 -1
- package/dist/auth/plugins/entity-definitions/phone-number.d.ts.map +1 -1
- package/dist/auth/plugins/entity-definitions/phone-number.js +31 -40
- package/dist/auth/plugins/entity-definitions/sso.d.ts +1 -1
- package/dist/auth/plugins/entity-definitions/sso.d.ts.map +1 -1
- package/dist/auth/plugins/entity-definitions/sso.js +94 -107
- package/dist/auth/plugins/entity-definitions/two-factor.d.ts +1 -1
- package/dist/auth/plugins/entity-definitions/two-factor.d.ts.map +1 -1
- package/dist/auth/plugins/entity-definitions/two-factor.js +78 -92
- package/dist/auth/plugins/entity-definitions/types.d.ts +1 -1
- package/dist/auth/plugins/entity-definitions/types.d.ts.map +1 -1
- package/dist/auth/plugins/entity-definitions/types.js +1 -10
- package/dist/auth/plugins/entity-definitions/username.d.ts +1 -1
- package/dist/auth/plugins/entity-definitions/username.d.ts.map +1 -1
- package/dist/auth/plugins/entity-definitions/username.js +31 -40
- package/dist/auth/plugins/index.js +12 -3
- package/dist/auth/plugins/wrappers/admin.d.ts +2 -2
- package/dist/auth/plugins/wrappers/admin.d.ts.map +1 -1
- package/dist/auth/plugins/wrappers/admin.js +28 -29
- package/dist/auth/plugins/wrappers/anonymous.d.ts +2 -1
- package/dist/auth/plugins/wrappers/anonymous.d.ts.map +1 -1
- package/dist/auth/plugins/wrappers/anonymous.js +23 -22
- package/dist/auth/plugins/wrappers/api-key.d.ts +2 -1
- package/dist/auth/plugins/wrappers/api-key.d.ts.map +1 -1
- package/dist/auth/plugins/wrappers/api-key.js +39 -34
- package/dist/auth/plugins/wrappers/index.js +11 -11
- package/dist/auth/plugins/wrappers/jwt.d.ts +2 -1
- package/dist/auth/plugins/wrappers/jwt.d.ts.map +1 -1
- package/dist/auth/plugins/wrappers/jwt.js +31 -26
- package/dist/auth/plugins/wrappers/organization.d.ts +2 -1
- package/dist/auth/plugins/wrappers/organization.d.ts.map +1 -1
- package/dist/auth/plugins/wrappers/organization.js +65 -62
- package/dist/auth/plugins/wrappers/passkey.d.ts +2 -1
- package/dist/auth/plugins/wrappers/passkey.d.ts.map +1 -1
- package/dist/auth/plugins/wrappers/passkey.js +33 -28
- package/dist/auth/plugins/wrappers/phone-number.d.ts.map +1 -1
- package/dist/auth/plugins/wrappers/phone-number.js +26 -23
- package/dist/auth/plugins/wrappers/sso.d.ts.map +1 -1
- package/dist/auth/plugins/wrappers/sso.js +37 -31
- package/dist/auth/plugins/wrappers/two-factor.d.ts.map +1 -1
- package/dist/auth/plugins/wrappers/two-factor.js +31 -28
- package/dist/auth/plugins/wrappers/username.d.ts.map +1 -1
- package/dist/auth/plugins/wrappers/username.js +23 -23
- package/dist/bin/build-config.js +31 -31
- package/dist/bin/cli.js +1063 -1204
- package/dist/bin/fixture.d.ts.map +1 -1
- package/dist/bin/fixture.js +266 -259
- package/dist/bin/hmr-hook-register.d.ts.map +1 -1
- package/dist/bin/hmr-hook-register.js +19 -18
- package/dist/bin/test-command.d.ts.map +1 -1
- package/dist/bin/test-command.js +180 -177
- package/dist/bin/ts-loader-register.js +13 -6
- package/dist/bin/ts-loader-registration.d.ts.map +1 -1
- package/dist/bin/ts-loader-registration.js +28 -38
- package/dist/cache/cache-manager.d.ts +1 -1
- package/dist/cache/cache-manager.d.ts.map +1 -1
- package/dist/cache/cache-manager.js +20 -15
- package/dist/cache/decorator.d.ts +1 -1
- package/dist/cache/decorator.d.ts.map +1 -1
- package/dist/cache/decorator.js +84 -76
- package/dist/cache/drivers.js +21 -34
- package/dist/cache/index.js +10 -7
- package/dist/cache/types.d.ts +2 -2
- package/dist/cache/types.d.ts.map +1 -1
- package/dist/cache/types.js +1 -6
- package/dist/cache-control/cache-control.d.ts +2 -2
- package/dist/cache-control/cache-control.d.ts.map +1 -1
- package/dist/cache-control/cache-control.js +106 -122
- package/dist/cache-control/types.d.ts +2 -2
- package/dist/cache-control/types.d.ts.map +1 -1
- package/dist/cache-control/types.js +1 -19
- package/dist/compress/compress.d.ts +1 -1
- package/dist/compress/compress.d.ts.map +1 -1
- package/dist/compress/compress.js +58 -56
- package/dist/compress/index.js +7 -2
- package/dist/compress/types.js +1 -11
- package/dist/cone/cone-generator.d.ts +1 -1
- package/dist/cone/cone-generator.d.ts.map +1 -1
- package/dist/cone/cone-generator.js +216 -219
- package/dist/database/_batch_update.d.ts +1 -1
- package/dist/database/_batch_update.d.ts.map +1 -1
- package/dist/database/_batch_update.js +107 -102
- package/dist/database/base-model.d.ts +8 -9
- package/dist/database/base-model.d.ts.map +1 -1
- package/dist/database/base-model.js +371 -392
- package/dist/database/base-model.types.d.ts +5 -5
- package/dist/database/base-model.types.d.ts.map +1 -1
- package/dist/database/base-model.types.js +1 -20
- package/dist/database/db.d.ts +5 -2
- package/dist/database/db.d.ts.map +1 -1
- package/dist/database/db.js +185 -171
- package/dist/database/knex.d.ts +1 -1
- package/dist/database/knex.d.ts.map +1 -1
- package/dist/database/knex.js +48 -42
- package/dist/database/puri-subset.types.d.ts +6 -7
- package/dist/database/puri-subset.types.d.ts.map +1 -1
- package/dist/database/puri-subset.types.js +1 -16
- package/dist/database/puri-wrapper.d.ts +6 -6
- package/dist/database/puri-wrapper.d.ts.map +1 -1
- package/dist/database/puri-wrapper.js +99 -101
- package/dist/database/puri.d.ts +4 -5
- package/dist/database/puri.d.ts.map +1 -1
- package/dist/database/puri.js +1021 -1227
- package/dist/database/puri.types.d.ts +6 -6
- package/dist/database/puri.types.d.ts.map +1 -1
- package/dist/database/puri.types.js +15 -6
- package/dist/database/transaction-context.d.ts +2 -2
- package/dist/database/transaction-context.d.ts.map +1 -1
- package/dist/database/transaction-context.js +22 -13
- package/dist/database/upsert-builder.d.ts +3 -3
- package/dist/database/upsert-builder.d.ts.map +1 -1
- package/dist/database/upsert-builder.js +405 -465
- package/dist/dict/en.js +72 -74
- package/dist/dict/index.js +13 -13
- package/dist/dict/ko.js +72 -74
- package/dist/dict/rc-keys.js +150 -168
- package/dist/dict/sd.d.ts +3 -1
- package/dist/dict/sd.d.ts.map +1 -1
- package/dist/dict/sd.js +54 -40
- package/dist/dict/sonamu-dictionary.d.ts +1 -1
- package/dist/dict/sonamu-dictionary.d.ts.map +1 -1
- package/dist/dict/sonamu-dictionary.js +887 -955
- package/dist/dict/types.js +1 -7
- package/dist/dict/utils.js +26 -24
- package/dist/entity/entity-manager.d.ts +9 -9
- package/dist/entity/entity-manager.d.ts.map +1 -1
- package/dist/entity/entity-manager.js +226 -223
- package/dist/entity/entity-template-cone.d.ts +1 -1
- package/dist/entity/entity-template-cone.d.ts.map +1 -1
- package/dist/entity/entity-template-cone.js +152 -151
- package/dist/entity/entity.d.ts.map +1 -1
- package/dist/entity/entity.js +952 -1089
- package/dist/exceptions/error-handler.d.ts +1 -1
- package/dist/exceptions/error-handler.d.ts.map +1 -1
- package/dist/exceptions/error-handler.js +32 -27
- package/dist/exceptions/so-exceptions.d.ts +1 -1
- package/dist/exceptions/so-exceptions.d.ts.map +1 -1
- package/dist/exceptions/so-exceptions.js +61 -68
- package/dist/filter/index.js +9 -3
- package/dist/filter/types.js +92 -88
- package/dist/filter/utils.d.ts +1 -1
- package/dist/filter/utils.d.ts.map +1 -1
- package/dist/filter/utils.js +147 -161
- package/dist/index.js +87 -40
- package/dist/logger/category.d.ts.map +1 -1
- package/dist/logger/category.js +30 -29
- package/dist/logger/configure.d.ts.map +1 -1
- package/dist/logger/configure.js +83 -107
- package/dist/migration/code-generation.d.ts +2 -2
- package/dist/migration/code-generation.d.ts.map +1 -1
- package/dist/migration/code-generation.js +1385 -1578
- package/dist/migration/migration-set.d.ts +1 -1
- package/dist/migration/migration-set.d.ts.map +1 -1
- package/dist/migration/migration-set.js +177 -227
- package/dist/migration/migrator.d.ts +4 -3
- package/dist/migration/migrator.d.ts.map +1 -1
- package/dist/migration/migrator.js +340 -345
- package/dist/migration/postgresql-schema-reader.d.ts +2 -2
- package/dist/migration/postgresql-schema-reader.d.ts.map +1 -1
- package/dist/migration/postgresql-schema-reader.js +506 -564
- package/dist/migration/slack-confirm.d.ts +2 -2
- package/dist/migration/slack-confirm.d.ts.map +1 -1
- package/dist/migration/slack-confirm.js +205 -193
- package/dist/migration/types.d.ts +2 -2
- package/dist/migration/types.d.ts.map +1 -1
- package/dist/migration/types.js +1 -3
- package/dist/naite/messaging-types.d.ts +1 -0
- package/dist/naite/messaging-types.d.ts.map +1 -1
- package/dist/naite/messaging-types.js +1 -7
- package/dist/naite/naite-reporter.d.ts +2 -2
- package/dist/naite/naite-reporter.d.ts.map +1 -1
- package/dist/naite/naite-reporter.js +127 -120
- package/dist/naite/naite.d.ts +3 -2
- package/dist/naite/naite.d.ts.map +1 -1
- package/dist/naite/naite.js +266 -300
- package/dist/ssr/index.d.ts +2 -2
- package/dist/ssr/index.d.ts.map +1 -1
- package/dist/ssr/index.js +13 -3
- package/dist/ssr/registry.d.ts +1 -1
- package/dist/ssr/registry.d.ts.map +1 -1
- package/dist/ssr/registry.js +45 -37
- package/dist/ssr/renderer.d.ts +4 -4
- package/dist/ssr/renderer.d.ts.map +1 -1
- package/dist/ssr/renderer.js +84 -91
- package/dist/ssr/types.d.ts +2 -2
- package/dist/ssr/types.d.ts.map +1 -1
- package/dist/ssr/types.js +1 -3
- package/dist/storage/base-file.js +54 -41
- 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 +51 -44
- package/dist/storage/drivers.d.ts +2 -2
- package/dist/storage/drivers.d.ts.map +1 -1
- package/dist/storage/drivers.js +12 -7
- package/dist/storage/index.js +14 -7
- package/dist/storage/s3-driver.d.ts +2 -2
- package/dist/storage/s3-driver.d.ts.map +1 -1
- package/dist/storage/s3-driver.js +52 -48
- package/dist/storage/storage-manager.d.ts +2 -2
- package/dist/storage/storage-manager.d.ts.map +1 -1
- package/dist/storage/storage-manager.js +33 -25
- package/dist/storage/types.d.ts +2 -2
- package/dist/storage/types.d.ts.map +1 -1
- package/dist/storage/types.js +1 -5
- package/dist/storage/uploaded-file.d.ts +1 -1
- package/dist/storage/uploaded-file.d.ts.map +1 -1
- package/dist/storage/uploaded-file.js +45 -35
- package/dist/stream/index.js +7 -2
- package/dist/stream/sse.d.ts +2 -2
- package/dist/stream/sse.d.ts.map +1 -1
- package/dist/stream/sse.js +72 -67
- package/dist/syncer/api-parser.d.ts +1 -1
- package/dist/syncer/api-parser.d.ts.map +1 -1
- package/dist/syncer/api-parser.js +224 -245
- package/dist/syncer/checksum.d.ts +1 -1
- package/dist/syncer/checksum.d.ts.map +1 -1
- package/dist/syncer/checksum.js +86 -72
- package/dist/syncer/code-generator.d.ts +2 -2
- package/dist/syncer/code-generator.d.ts.map +1 -1
- package/dist/syncer/code-generator.js +154 -160
- package/dist/syncer/entity-operations.d.ts +1 -1
- package/dist/syncer/entity-operations.d.ts.map +1 -1
- package/dist/syncer/entity-operations.js +63 -54
- package/dist/syncer/file-patterns.d.ts +1 -1
- package/dist/syncer/file-patterns.d.ts.map +1 -1
- package/dist/syncer/file-patterns.js +38 -38
- package/dist/syncer/index.js +19 -8
- package/dist/syncer/module-loader.d.ts +5 -5
- package/dist/syncer/module-loader.d.ts.map +1 -1
- package/dist/syncer/module-loader.js +83 -78
- package/dist/syncer/syncer-actions.d.ts +2 -2
- package/dist/syncer/syncer-actions.d.ts.map +1 -1
- package/dist/syncer/syncer-actions.js +76 -91
- package/dist/syncer/syncer.d.ts +7 -6
- package/dist/syncer/syncer.d.ts.map +1 -1
- package/dist/syncer/syncer.js +426 -492
- package/dist/tasks/decorator.d.ts +3 -3
- package/dist/tasks/decorator.d.ts.map +1 -1
- package/dist/tasks/decorator.js +32 -28
- package/dist/tasks/step-wrapper.d.ts +1 -1
- package/dist/tasks/step-wrapper.d.ts.map +1 -1
- package/dist/tasks/step-wrapper.js +42 -41
- package/dist/tasks/workflow-manager.d.ts +2 -2
- package/dist/tasks/workflow-manager.d.ts.map +1 -1
- package/dist/tasks/workflow-manager.js +192 -221
- 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 +103 -103
- package/dist/template/helpers.d.ts.map +1 -1
- package/dist/template/helpers.js +163 -163
- package/dist/template/implementations/entity.template.d.ts +1 -1
- package/dist/template/implementations/entity.template.d.ts.map +1 -1
- package/dist/template/implementations/entity.template.js +76 -85
- package/dist/template/implementations/entry-server.template.d.ts +1 -1
- package/dist/template/implementations/entry-server.template.d.ts.map +1 -1
- package/dist/template/implementations/entry-server.template.js +32 -27
- package/dist/template/implementations/generated.template.d.ts +1 -1
- package/dist/template/implementations/generated.template.d.ts.map +1 -1
- package/dist/template/implementations/generated.template.js +254 -275
- package/dist/template/implementations/generated_http.template.d.ts +2 -2
- package/dist/template/implementations/generated_http.template.d.ts.map +1 -1
- package/dist/template/implementations/generated_http.template.js +114 -133
- package/dist/template/implementations/generated_sso.template.d.ts.map +1 -1
- package/dist/template/implementations/generated_sso.template.js +249 -275
- package/dist/template/implementations/init_types.template.d.ts +1 -1
- package/dist/template/implementations/init_types.template.d.ts.map +1 -1
- package/dist/template/implementations/init_types.template.js +40 -34
- package/dist/template/implementations/model.template.d.ts +1 -1
- package/dist/template/implementations/model.template.d.ts.map +1 -1
- package/dist/template/implementations/model.template.js +56 -53
- package/dist/template/implementations/model_test.template.d.ts +1 -1
- package/dist/template/implementations/model_test.template.d.ts.map +1 -1
- package/dist/template/implementations/model_test.template.js +32 -24
- package/dist/template/implementations/queries.template.d.ts +1 -1
- package/dist/template/implementations/queries.template.d.ts.map +1 -1
- package/dist/template/implementations/queries.template.js +84 -89
- package/dist/template/implementations/sd.template.d.ts +1 -1
- package/dist/template/implementations/sd.template.d.ts.map +1 -1
- package/dist/template/implementations/sd.template.js +137 -144
- package/dist/template/implementations/services.template.d.ts +1 -1
- package/dist/template/implementations/services.template.d.ts.map +1 -1
- package/dist/template/implementations/services.template.js +164 -189
- package/dist/template/implementations/view_form.template.d.ts +1 -1
- package/dist/template/implementations/view_form.template.d.ts.map +1 -1
- package/dist/template/implementations/view_form.template.js +258 -285
- package/dist/template/implementations/view_id_all_select.template.d.ts +1 -1
- package/dist/template/implementations/view_id_all_select.template.d.ts.map +1 -1
- package/dist/template/implementations/view_id_all_select.template.js +31 -25
- package/dist/template/implementations/view_list.template.d.ts +1 -1
- package/dist/template/implementations/view_list.template.d.ts.map +1 -1
- package/dist/template/implementations/view_list.template.js +304 -355
- package/dist/template/implementations/view_search_input.template.d.ts +1 -1
- package/dist/template/implementations/view_search_input.template.d.ts.map +1 -1
- package/dist/template/implementations/view_search_input.template.js +31 -27
- package/dist/template/index.js +21 -7
- package/dist/template/template-manager.d.ts +1 -1
- package/dist/template/template-manager.d.ts.map +1 -1
- package/dist/template/template-manager.js +132 -123
- package/dist/template/template-types.js +8 -6
- package/dist/template/template.d.ts +2 -2
- package/dist/template/template.d.ts.map +1 -1
- package/dist/template/template.js +73 -68
- package/dist/template/zod-converter.d.ts.map +1 -1
- package/dist/template/zod-converter.js +603 -657
- package/dist/testing/_relation-graph.d.ts +1 -1
- package/dist/testing/_relation-graph.d.ts.map +1 -1
- package/dist/testing/_relation-graph.js +93 -88
- package/dist/testing/bootstrap.d.ts +22 -13
- package/dist/testing/bootstrap.d.ts.map +1 -1
- package/dist/testing/bootstrap.js +114 -114
- package/dist/testing/data-explorer.d.ts +3 -3
- package/dist/testing/data-explorer.d.ts.map +1 -1
- package/dist/testing/data-explorer.js +237 -265
- package/dist/testing/dev-test-routes.d.ts +2 -2
- package/dist/testing/dev-test-routes.d.ts.map +1 -1
- package/dist/testing/dev-test-routes.js +258 -249
- package/dist/testing/dev-vitest-manager.d.ts +1 -1
- package/dist/testing/dev-vitest-manager.d.ts.map +1 -1
- package/dist/testing/dev-vitest-manager.js +514 -539
- package/dist/testing/faker-mappings.js +422 -420
- package/dist/testing/fixture-generator.d.ts +3 -3
- package/dist/testing/fixture-generator.d.ts.map +1 -1
- package/dist/testing/fixture-generator.js +1216 -1346
- package/dist/testing/fixture-loader.js +26 -25
- package/dist/testing/fixture-manager.d.ts +3 -3
- package/dist/testing/fixture-manager.d.ts.map +1 -1
- package/dist/testing/fixture-manager.js +706 -776
- package/dist/testing/global-setup.js +53 -49
- package/dist/testing/index.js +19 -11
- package/dist/testing/naite-vitest-reporter.js +18 -13
- package/dist/testing/parallel-db-manager.d.ts +1 -1
- package/dist/testing/parallel-db-manager.d.ts.map +1 -1
- package/dist/testing/parallel-db-manager.js +63 -78
- package/dist/testing/vitest-helpers.d.ts +1 -1
- package/dist/testing/vitest-helpers.d.ts.map +1 -1
- package/dist/testing/vitest-helpers.js +37 -33
- package/dist/types/types.d.ts +28 -28
- package/dist/types/types.d.ts.map +1 -1
- package/dist/types/types.js +764 -890
- package/dist/ui/ai-api.d.ts +1 -1
- package/dist/ui/ai-api.d.ts.map +1 -1
- package/dist/ui/ai-api.js +52 -42
- package/dist/ui/ai-client.d.ts +1 -2
- package/dist/ui/ai-client.d.ts.map +1 -1
- package/dist/ui/ai-client.js +353 -388
- package/dist/ui/api.d.ts +1 -1
- package/dist/ui/api.d.ts.map +1 -1
- package/dist/ui/api.js +903 -1145
- package/dist/ui/cdd-service.d.ts +1 -1
- package/dist/ui/cdd-service.d.ts.map +1 -1
- package/dist/ui/cdd-service.js +406 -407
- package/dist/ui/cdd-types.js +1 -3
- package/dist/ui-web/assets/index-C-Zz-wYg.css +1 -0
- package/dist/ui-web/assets/index-DejDON8K.js +238 -0
- package/dist/ui-web/index.html +3 -3
- package/dist/utils/async-utils.js +57 -45
- package/dist/utils/console-util.d.ts.map +1 -1
- package/dist/utils/console-util.js +104 -87
- package/dist/utils/controller.js +26 -19
- package/dist/utils/esm-utils.js +49 -38
- package/dist/utils/formatter.d.ts +1 -2
- package/dist/utils/formatter.d.ts.map +1 -1
- package/dist/utils/formatter.js +89 -115
- package/dist/utils/fs-utils.d.ts.map +1 -1
- package/dist/utils/fs-utils.js +68 -65
- package/dist/utils/lodash-able.js +11 -4
- package/dist/utils/model.d.ts +1 -1
- package/dist/utils/model.d.ts.map +1 -1
- package/dist/utils/model.js +21 -19
- package/dist/utils/object-utils.js +148 -186
- package/dist/utils/path-utils.js +67 -57
- package/dist/utils/process-utils.d.ts.map +1 -1
- package/dist/utils/process-utils.js +37 -31
- package/dist/utils/sql-parser.d.ts +1 -1
- package/dist/utils/sql-parser.d.ts.map +1 -1
- package/dist/utils/sql-parser.js +40 -40
- package/dist/utils/type-utils.js +44 -43
- package/dist/utils/utils.d.ts +2 -3
- package/dist/utils/utils.d.ts.map +1 -1
- package/dist/utils/utils.js +81 -93
- package/dist/utils/zod-error.d.ts +1 -1
- package/dist/utils/zod-error.d.ts.map +1 -1
- package/dist/utils/zod-error.js +24 -17
- package/dist/vector/chunking.d.ts +1 -1
- package/dist/vector/chunking.d.ts.map +1 -1
- package/dist/vector/chunking.js +100 -94
- package/dist/vector/config.d.ts +1 -1
- package/dist/vector/config.d.ts.map +1 -1
- package/dist/vector/config.js +76 -78
- package/dist/vector/embedding.d.ts +1 -1
- package/dist/vector/embedding.d.ts.map +1 -1
- package/dist/vector/embedding.js +128 -125
- package/dist/vector/index.js +5 -5
- package/dist/vector/types.js +1 -5
- package/package.json +31 -36
- package/src/ai/agents/agent.ts +12 -5
- package/src/ai/agents/types.ts +5 -5
- package/src/ai/providers/rtzr/model.ts +8 -10
- package/src/ai/providers/rtzr/options.ts +2 -1
- package/src/ai/providers/rtzr/provider.ts +5 -3
- package/src/ai/providers/rtzr/utils.ts +2 -7
- package/src/api/__tests__/config.test.ts +15 -8
- package/src/api/base-frame.ts +5 -3
- package/src/api/caster.ts +7 -6
- package/src/api/code-converters.ts +23 -26
- package/src/api/config.ts +23 -17
- package/src/api/context.ts +18 -11
- package/src/api/decorators.ts +17 -18
- package/src/api/sonamu.ts +44 -49
- package/src/auth/auth-generator.ts +4 -6
- package/src/auth/better-auth-entities.ts +3 -2
- package/src/auth/knex-adapter.ts +6 -5
- package/src/auth/plugins/entity-definitions/admin.ts +1 -1
- package/src/auth/plugins/entity-definitions/anonymous.ts +1 -1
- package/src/auth/plugins/entity-definitions/api-key.ts +1 -1
- package/src/auth/plugins/entity-definitions/index.ts +1 -1
- package/src/auth/plugins/entity-definitions/jwt.ts +1 -1
- package/src/auth/plugins/entity-definitions/organization.ts +1 -1
- package/src/auth/plugins/entity-definitions/passkey.ts +1 -1
- package/src/auth/plugins/entity-definitions/phone-number.ts +1 -1
- package/src/auth/plugins/entity-definitions/sso.ts +1 -1
- package/src/auth/plugins/entity-definitions/two-factor.ts +1 -1
- package/src/auth/plugins/entity-definitions/types.ts +1 -1
- package/src/auth/plugins/entity-definitions/username.ts +1 -1
- package/src/auth/plugins/wrappers/admin.ts +3 -1
- package/src/auth/plugins/wrappers/anonymous.ts +3 -1
- package/src/auth/plugins/wrappers/api-key.ts +3 -1
- package/src/auth/plugins/wrappers/jwt.ts +3 -1
- package/src/auth/plugins/wrappers/organization.ts +3 -1
- package/src/auth/plugins/wrappers/passkey.ts +3 -1
- package/src/auth/plugins/wrappers/phone-number.ts +3 -1
- package/src/auth/plugins/wrappers/sso.ts +2 -1
- package/src/auth/plugins/wrappers/two-factor.ts +3 -1
- package/src/auth/plugins/wrappers/username.ts +3 -1
- package/src/bin/__tests__/ts-loader-register.test.ts +7 -12
- package/src/bin/build-config.ts +3 -3
- package/src/bin/cli.ts +27 -25
- package/src/bin/fixture.ts +4 -2
- package/src/bin/hmr-hook-register.ts +1 -0
- package/src/bin/test-command.ts +4 -2
- package/src/bin/ts-loader-registration.ts +6 -22
- package/src/cache/cache-manager.ts +2 -1
- package/src/cache/decorator.ts +2 -2
- package/src/cache/types.ts +3 -3
- package/src/cache-control/cache-control.ts +3 -2
- package/src/cache-control/types.ts +2 -2
- package/src/compress/compress.ts +1 -1
- package/src/cone/cone-generator.ts +5 -3
- package/src/database/_batch_update.ts +1 -1
- package/src/database/base-model.ts +20 -14
- package/src/database/base-model.types.ts +12 -11
- package/src/database/db.ts +56 -21
- package/src/database/knex.ts +2 -2
- package/src/database/puri-subset.test-d.ts +33 -32
- package/src/database/puri-subset.types.ts +6 -7
- package/src/database/puri-wrapper.ts +29 -26
- package/src/database/puri.ts +36 -34
- package/src/database/puri.types.test-d.ts +6 -5
- package/src/database/puri.types.ts +9 -12
- package/src/database/transaction-context.ts +2 -2
- package/src/database/upsert-builder.ts +17 -10
- package/src/dict/sd.ts +17 -4
- package/src/dict/sonamu-dictionary.ts +23 -17
- package/src/entity/entity-manager.ts +9 -7
- package/src/entity/entity-template-cone.ts +10 -3
- package/src/entity/entity.ts +20 -16
- package/src/exceptions/error-handler.ts +2 -1
- package/src/exceptions/so-exceptions.ts +1 -1
- package/src/filter/utils.ts +3 -2
- package/src/logger/category.ts +1 -0
- package/src/logger/configure.ts +5 -5
- package/src/migration/__tests__/code-generation.search-text.test.ts +2 -3
- package/src/migration/code-generation.ts +26 -25
- package/src/migration/migration-set.ts +16 -18
- package/src/migration/migrator.ts +38 -33
- package/src/migration/postgresql-schema-reader.ts +12 -12
- package/src/migration/slack-confirm.ts +5 -4
- package/src/migration/types.ts +2 -2
- package/src/naite/messaging-types.ts +1 -1
- package/src/naite/naite-reporter.ts +5 -3
- package/src/naite/naite.ts +12 -7
- package/src/shared/app.shared.ts.txt +2 -2
- package/src/shared/web.shared.ts.txt +2 -2
- package/src/skills/AGENTS.md +19 -18
- package/src/skills/commands/sonamu-skills.md +9 -9
- package/src/skills/sonamu/SKILL.md +111 -104
- package/src/skills/sonamu/ai-agents.md +27 -26
- package/src/skills/sonamu/api.md +81 -69
- package/src/skills/sonamu/auth-migration.md +13 -27
- package/src/skills/sonamu/auth-plugins.md +41 -31
- package/src/skills/sonamu/auth.md +30 -24
- package/src/skills/sonamu/cdd.md +26 -17
- package/src/skills/sonamu/cone.md +50 -50
- package/src/skills/sonamu/config.md +74 -51
- package/src/skills/sonamu/create-sonamu.md +31 -19
- package/src/skills/sonamu/database.md +43 -26
- package/src/skills/sonamu/entity-basic.md +61 -61
- package/src/skills/sonamu/entity-relations.md +84 -80
- package/src/skills/sonamu/entity-validation-checklist.md +19 -15
- package/src/skills/sonamu/fixture-cli.md +52 -30
- package/src/skills/sonamu/framework-change.md +9 -7
- package/src/skills/sonamu/frontend.md +64 -82
- package/src/skills/sonamu/i18n.md +45 -37
- package/src/skills/sonamu/migration.md +54 -31
- package/src/skills/sonamu/model.md +98 -66
- package/src/skills/sonamu/naite.md +34 -32
- package/src/skills/sonamu/project-init.md +28 -8
- package/src/skills/sonamu/puri.md +82 -91
- package/src/skills/sonamu/scaffolding.md +44 -32
- package/src/skills/sonamu/skill-contribution.md +50 -45
- package/src/skills/sonamu/subset.md +13 -13
- package/src/skills/sonamu/tasks.md +73 -58
- package/src/skills/sonamu/testing-devrunner.md +56 -36
- package/src/skills/sonamu/testing.md +23 -58
- package/src/skills/sonamu/upsert.md +32 -31
- package/src/skills/sonamu/vector.md +37 -36
- package/src/ssr/index.ts +2 -12
- package/src/ssr/registry.ts +1 -1
- package/src/ssr/renderer.ts +7 -5
- package/src/ssr/types.ts +2 -2
- package/src/storage/buffered-file.ts +4 -2
- package/src/storage/drivers.ts +3 -2
- package/src/storage/s3-driver.ts +7 -4
- package/src/storage/storage-manager.ts +3 -2
- package/src/storage/types.ts +3 -2
- package/src/storage/uploaded-file.ts +1 -1
- package/src/stream/sse.ts +2 -2
- package/src/syncer/api-parser.ts +8 -5
- package/src/syncer/checksum.ts +9 -5
- package/src/syncer/code-generator.ts +16 -8
- package/src/syncer/entity-operations.ts +5 -3
- package/src/syncer/file-patterns.ts +2 -1
- package/src/syncer/module-loader.ts +9 -6
- package/src/syncer/syncer-actions.ts +5 -3
- package/src/syncer/syncer.ts +18 -24
- package/src/tasks/decorator.ts +10 -8
- package/src/tasks/step-wrapper.ts +1 -1
- package/src/tasks/workflow-manager.ts +18 -15
- package/src/template/__tests__/generated.template.search-text.test.ts +1 -0
- package/src/template/entity-converter.ts +4 -2
- package/src/template/generated.template.test-d.ts +2 -1
- package/src/template/helpers.ts +5 -2
- package/src/template/implementations/entity.template.ts +9 -8
- package/src/template/implementations/entry-server.template.ts +1 -1
- package/src/template/implementations/generated.template.ts +21 -29
- package/src/template/implementations/generated_http.template.ts +9 -6
- package/src/template/implementations/generated_sso.template.ts +6 -4
- package/src/template/implementations/init_types.template.ts +3 -2
- package/src/template/implementations/model.template.ts +4 -2
- package/src/template/implementations/model_test.template.ts +3 -2
- package/src/template/implementations/queries.template.ts +6 -14
- package/src/template/implementations/sd.template.ts +4 -2
- package/src/template/implementations/services.template.ts +7 -11
- package/src/template/implementations/view_form.template.ts +5 -3
- package/src/template/implementations/view_id_all_select.template.ts +3 -2
- package/src/template/implementations/view_list.template.ts +7 -5
- package/src/template/implementations/view_search_input.template.ts +3 -2
- package/src/template/template-manager.ts +4 -3
- package/src/template/template.ts +4 -3
- package/src/template/zod-converter.ts +10 -7
- package/src/testing/__tests__/dev-test-routes.test.ts +3 -2
- package/src/testing/__tests__/dev-vitest-manager.test.ts +1 -0
- package/src/testing/_relation-graph.ts +2 -2
- package/src/testing/bootstrap.ts +55 -27
- package/src/testing/data-explorer.ts +5 -4
- package/src/testing/dev-test-routes.ts +8 -5
- package/src/testing/dev-vitest-manager.ts +13 -12
- package/src/testing/fixture-generator.ts +11 -17
- package/src/testing/fixture-manager.ts +21 -17
- package/src/testing/parallel-db-manager.ts +2 -1
- package/src/testing/vitest-helpers.ts +2 -1
- package/src/types/__tests__/entity-json-schema-search-text.test.ts +1 -0
- package/src/types/types.ts +8 -8
- package/src/typings/knex.d.ts +4 -4
- package/src/ui/ai-api.ts +5 -3
- package/src/ui/ai-client.ts +6 -5
- package/src/ui/api.ts +25 -23
- package/src/ui/cdd-service.ts +12 -11
- package/src/utils/console-util.ts +3 -1
- package/src/utils/formatter.ts +94 -102
- package/src/utils/fs-utils.ts +2 -1
- package/src/utils/model.ts +2 -2
- package/src/utils/object-utils.ts +3 -3
- package/src/utils/process-utils.ts +2 -1
- package/src/utils/sql-parser.ts +10 -1
- package/src/utils/type-utils.ts +3 -3
- package/src/utils/utils.ts +9 -7
- package/src/utils/zod-error.ts +1 -1
- package/src/vector/chunking.ts +1 -1
- package/src/vector/config.ts +1 -1
- package/src/vector/embedding.ts +11 -9
- package/tsdown.api.config.ts +50 -0
- package/.swcrc.project-default +0 -18
- package/dist/api/__tests__/config.test.js +0 -189
- package/dist/bin/__tests__/test-command.test.js +0 -112
- package/dist/bin/__tests__/ts-loader-register.test.js +0 -45
- package/dist/database/puri-subset.test-d.js +0 -89
- package/dist/database/puri.types.test-d.js +0 -129
- package/dist/migration/__tests__/code-generation.search-text.test.js +0 -435
- package/dist/template/__tests__/generated.template.search-text.test.js +0 -99
- package/dist/template/generated.template.test-d.js +0 -24
- package/dist/testing/__tests__/dev-test-routes.test.js +0 -144
- package/dist/testing/__tests__/dev-vitest-manager.test.js +0 -152
- package/dist/types/__tests__/entity-json-schema-search-text.test.js +0 -256
- package/dist/typings/knex.d.js +0 -3
- package/dist/ui-web/assets/index-CKo0Z2Iu.css +0 -1
- package/dist/ui-web/assets/index-DK-2aacv.js +0 -257
|
@@ -1,144 +0,0 @@
|
|
|
1
|
-
import Fastify from "fastify";
|
|
2
|
-
import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
|
|
3
|
-
// vi.hoisted를 사용하여 mock 객체를 vi.mock 호이스팅 이전에 초기화
|
|
4
|
-
const mockManager = vi.hoisted(()=>({
|
|
5
|
-
start: vi.fn(),
|
|
6
|
-
run: vi.fn(),
|
|
7
|
-
getStatus: vi.fn(),
|
|
8
|
-
shutdown: vi.fn()
|
|
9
|
-
}));
|
|
10
|
-
// DevVitestManager를 모킹하여 new DevVitestManager()가 mockManager 인스턴스를 반환하도록 설정
|
|
11
|
-
vi.mock("../dev-vitest-manager", ()=>{
|
|
12
|
-
// biome-ignore lint/complexity/useArrowFunction: vi.fn 생성자 모킹에는 function 키워드가 필요
|
|
13
|
-
const MockDevVitestManager = vi.fn(function() {
|
|
14
|
-
return mockManager;
|
|
15
|
-
});
|
|
16
|
-
return {
|
|
17
|
-
DevVitestManager: MockDevVitestManager
|
|
18
|
-
};
|
|
19
|
-
});
|
|
20
|
-
import { registerDevTestRoutes } from "../dev-test-routes.js";
|
|
21
|
-
const defaultConfig = {
|
|
22
|
-
enabled: true,
|
|
23
|
-
routePrefix: "/__test__"
|
|
24
|
-
};
|
|
25
|
-
const okRunResult = {
|
|
26
|
-
ok: true,
|
|
27
|
-
summary: {
|
|
28
|
-
total: 3,
|
|
29
|
-
passed: 2,
|
|
30
|
-
failed: 0,
|
|
31
|
-
skipped: 1,
|
|
32
|
-
durationMs: 42
|
|
33
|
-
},
|
|
34
|
-
failed: [],
|
|
35
|
-
traces: []
|
|
36
|
-
};
|
|
37
|
-
const okStatus = {
|
|
38
|
-
ready: true,
|
|
39
|
-
running: false,
|
|
40
|
-
lastRunAt: null
|
|
41
|
-
};
|
|
42
|
-
describe("registerDevTestRoutes", ()=>{
|
|
43
|
-
let app;
|
|
44
|
-
beforeEach(async ()=>{
|
|
45
|
-
vi.clearAllMocks();
|
|
46
|
-
app = Fastify();
|
|
47
|
-
mockManager.start.mockResolvedValue(undefined);
|
|
48
|
-
mockManager.run.mockResolvedValue(okRunResult);
|
|
49
|
-
mockManager.getStatus.mockReturnValue(okStatus);
|
|
50
|
-
mockManager.shutdown.mockResolvedValue(undefined);
|
|
51
|
-
await registerDevTestRoutes(app, defaultConfig);
|
|
52
|
-
});
|
|
53
|
-
afterEach(async ()=>{
|
|
54
|
-
await app.close();
|
|
55
|
-
});
|
|
56
|
-
it("라우트 등록 시 manager.start()가 호출된다", ()=>{
|
|
57
|
-
expect(mockManager.start).toHaveBeenCalledTimes(1);
|
|
58
|
-
});
|
|
59
|
-
describe("POST /__test__/run", ()=>{
|
|
60
|
-
it("정상 실행 시 RunResult를 반환한다", async ()=>{
|
|
61
|
-
const res = await app.inject({
|
|
62
|
-
method: "POST",
|
|
63
|
-
url: "/__test__/run",
|
|
64
|
-
payload: {}
|
|
65
|
-
});
|
|
66
|
-
expect(res.statusCode).toBe(200);
|
|
67
|
-
const body = res.json();
|
|
68
|
-
expect(body.ok).toBe(true);
|
|
69
|
-
expect(body.summary.total).toBe(3);
|
|
70
|
-
expect(body.summary.skipped).toBe(1);
|
|
71
|
-
});
|
|
72
|
-
it("files와 pattern을 manager.run()에 전달한다", async ()=>{
|
|
73
|
-
await app.inject({
|
|
74
|
-
method: "POST",
|
|
75
|
-
url: "/__test__/run",
|
|
76
|
-
payload: {
|
|
77
|
-
files: [
|
|
78
|
-
"foo.test.ts"
|
|
79
|
-
],
|
|
80
|
-
pattern: "my test"
|
|
81
|
-
}
|
|
82
|
-
});
|
|
83
|
-
expect(mockManager.run).toHaveBeenCalledWith({
|
|
84
|
-
files: [
|
|
85
|
-
"foo.test.ts"
|
|
86
|
-
],
|
|
87
|
-
pattern: "my test"
|
|
88
|
-
});
|
|
89
|
-
});
|
|
90
|
-
it("manager.run()이 오류를 던지면 500을 반환한다", async ()=>{
|
|
91
|
-
mockManager.run.mockRejectedValueOnce(new Error("DevVitestManager is not started"));
|
|
92
|
-
const res = await app.inject({
|
|
93
|
-
method: "POST",
|
|
94
|
-
url: "/__test__/run",
|
|
95
|
-
payload: {}
|
|
96
|
-
});
|
|
97
|
-
expect(res.statusCode).toBe(500);
|
|
98
|
-
const body = res.json();
|
|
99
|
-
expect(body.ok).toBe(false);
|
|
100
|
-
expect(body.error).toContain("not started");
|
|
101
|
-
});
|
|
102
|
-
});
|
|
103
|
-
describe("GET /__test__/status", ()=>{
|
|
104
|
-
it("ManagerStatus 구조를 반환한다", async ()=>{
|
|
105
|
-
const res = await app.inject({
|
|
106
|
-
method: "GET",
|
|
107
|
-
url: "/__test__/status"
|
|
108
|
-
});
|
|
109
|
-
expect(res.statusCode).toBe(200);
|
|
110
|
-
const body = res.json();
|
|
111
|
-
expect(body).toMatchObject({
|
|
112
|
-
ready: true,
|
|
113
|
-
running: false,
|
|
114
|
-
lastRunAt: null
|
|
115
|
-
});
|
|
116
|
-
});
|
|
117
|
-
});
|
|
118
|
-
describe("server.close() onClose hook", ()=>{
|
|
119
|
-
it("서버 종료 시 manager.shutdown()이 호출된다", async ()=>{
|
|
120
|
-
await app.close();
|
|
121
|
-
expect(mockManager.shutdown).toHaveBeenCalledTimes(1);
|
|
122
|
-
});
|
|
123
|
-
});
|
|
124
|
-
describe("커스텀 routePrefix", ()=>{
|
|
125
|
-
it("routePrefix가 지정되면 해당 경로에 라우트가 등록된다", async ()=>{
|
|
126
|
-
const customApp = Fastify();
|
|
127
|
-
mockManager.start.mockResolvedValue(undefined);
|
|
128
|
-
mockManager.getStatus.mockReturnValue(okStatus);
|
|
129
|
-
mockManager.shutdown.mockResolvedValue(undefined);
|
|
130
|
-
await registerDevTestRoutes(customApp, {
|
|
131
|
-
enabled: true,
|
|
132
|
-
routePrefix: "/api/test"
|
|
133
|
-
});
|
|
134
|
-
const res = await customApp.inject({
|
|
135
|
-
method: "GET",
|
|
136
|
-
url: "/api/test/status"
|
|
137
|
-
});
|
|
138
|
-
expect(res.statusCode).toBe(200);
|
|
139
|
-
await customApp.close();
|
|
140
|
-
});
|
|
141
|
-
});
|
|
142
|
-
});
|
|
143
|
-
|
|
144
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90ZXN0aW5nL19fdGVzdHNfXy9kZXYtdGVzdC1yb3V0ZXMudGVzdC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgRmFzdGlmeSBmcm9tIFwiZmFzdGlmeVwiO1xuaW1wb3J0IHsgYWZ0ZXJFYWNoLCBiZWZvcmVFYWNoLCBkZXNjcmliZSwgZXhwZWN0LCBpdCwgdmkgfSBmcm9tIFwidml0ZXN0XCI7XG5pbXBvcnQgdHlwZSB7IE1hbmFnZXJTdGF0dXMsIFJ1blJlc3VsdCB9IGZyb20gXCIuLi9kZXYtdml0ZXN0LW1hbmFnZXJcIjtcblxuLy8gdmkuaG9pc3RlZOulvCDsgqzsmqntlZjsl6wgbW9jayDqsJ3ssrTrpbwgdmkubW9jayDtmLjsnbTsiqTtjIUg7J207KCE7JeQIOy0iOq4sO2ZlFxuY29uc3QgbW9ja01hbmFnZXIgPSB2aS5ob2lzdGVkKCgpID0+ICh7XG4gIHN0YXJ0OiB2aS5mbigpLFxuICBydW46IHZpLmZuKCksXG4gIGdldFN0YXR1czogdmkuZm4oKSxcbiAgc2h1dGRvd246IHZpLmZuKCksXG59KSk7XG5cbi8vIERldlZpdGVzdE1hbmFnZXLrpbwg66qo7YK57ZWY7JesIG5ldyBEZXZWaXRlc3RNYW5hZ2VyKCnqsIAgbW9ja01hbmFnZXIg7J247Iqk7YS07Iqk66W8IOuwmO2ZmO2VmOuPhOuhnSDshKTsoJVcbnZpLm1vY2soXCIuLi9kZXYtdml0ZXN0LW1hbmFnZXJcIiwgKCkgPT4ge1xuICAvLyBiaW9tZS1pZ25vcmUgbGludC9jb21wbGV4aXR5L3VzZUFycm93RnVuY3Rpb246IHZpLmZuIOyDneyEseyekCDrqqjtgrnsl5DripQgZnVuY3Rpb24g7YKk7JuM65Oc6rCAIO2VhOyalFxuICBjb25zdCBNb2NrRGV2Vml0ZXN0TWFuYWdlciA9IHZpLmZuKGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gbW9ja01hbmFnZXI7XG4gIH0pO1xuICByZXR1cm4geyBEZXZWaXRlc3RNYW5hZ2VyOiBNb2NrRGV2Vml0ZXN0TWFuYWdlciB9O1xufSk7XG5cbmltcG9ydCB7IHJlZ2lzdGVyRGV2VGVzdFJvdXRlcyB9IGZyb20gXCIuLi9kZXYtdGVzdC1yb3V0ZXNcIjtcblxuY29uc3QgZGVmYXVsdENvbmZpZyA9IHtcbiAgZW5hYmxlZDogdHJ1ZSBhcyBjb25zdCxcbiAgcm91dGVQcmVmaXg6IFwiL19fdGVzdF9fXCIsXG59O1xuXG5jb25zdCBva1J1blJlc3VsdDogUnVuUmVzdWx0ID0ge1xuICBvazogdHJ1ZSxcbiAgc3VtbWFyeTogeyB0b3RhbDogMywgcGFzc2VkOiAyLCBmYWlsZWQ6IDAsIHNraXBwZWQ6IDEsIGR1cmF0aW9uTXM6IDQyIH0sXG4gIGZhaWxlZDogW10sXG4gIHRyYWNlczogW10sXG59O1xuXG5jb25zdCBva1N0YXR1czogTWFuYWdlclN0YXR1cyA9IHtcbiAgcmVhZHk6IHRydWUsXG4gIHJ1bm5pbmc6IGZhbHNlLFxuICBsYXN0UnVuQXQ6IG51bGwsXG59O1xuXG5kZXNjcmliZShcInJlZ2lzdGVyRGV2VGVzdFJvdXRlc1wiLCAoKSA9PiB7XG4gIGxldCBhcHA6IFJldHVyblR5cGU8dHlwZW9mIEZhc3RpZnk+O1xuXG4gIGJlZm9yZUVhY2goYXN5bmMgKCkgPT4ge1xuICAgIHZpLmNsZWFyQWxsTW9ja3MoKTtcbiAgICBhcHAgPSBGYXN0aWZ5KCk7XG4gICAgbW9ja01hbmFnZXIuc3RhcnQubW9ja1Jlc29sdmVkVmFsdWUodW5kZWZpbmVkKTtcbiAgICBtb2NrTWFuYWdlci5ydW4ubW9ja1Jlc29sdmVkVmFsdWUob2tSdW5SZXN1bHQpO1xuICAgIG1vY2tNYW5hZ2VyLmdldFN0YXR1cy5tb2NrUmV0dXJuVmFsdWUob2tTdGF0dXMpO1xuICAgIG1vY2tNYW5hZ2VyLnNodXRkb3duLm1vY2tSZXNvbHZlZFZhbHVlKHVuZGVmaW5lZCk7XG4gICAgYXdhaXQgcmVnaXN0ZXJEZXZUZXN0Um91dGVzKGFwcCwgZGVmYXVsdENvbmZpZyk7XG4gIH0pO1xuXG4gIGFmdGVyRWFjaChhc3luYyAoKSA9PiB7XG4gICAgYXdhaXQgYXBwLmNsb3NlKCk7XG4gIH0pO1xuXG4gIGl0KFwi65287Jqw7Yq4IOuTseuhnSDsi5wgbWFuYWdlci5zdGFydCgp6rCAIO2YuOy2nOuQnOuLpFwiLCAoKSA9PiB7XG4gICAgZXhwZWN0KG1vY2tNYW5hZ2VyLnN0YXJ0KS50b0hhdmVCZWVuQ2FsbGVkVGltZXMoMSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKFwiUE9TVCAvX190ZXN0X18vcnVuXCIsICgpID0+IHtcbiAgICBpdChcIuygleyDgSDsi6Ttlokg7IucIFJ1blJlc3VsdOulvCDrsJjtmZjtlZzri6RcIiwgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgcmVzID0gYXdhaXQgYXBwLmluamVjdCh7XG4gICAgICAgIG1ldGhvZDogXCJQT1NUXCIsXG4gICAgICAgIHVybDogXCIvX190ZXN0X18vcnVuXCIsXG4gICAgICAgIHBheWxvYWQ6IHt9LFxuICAgICAgfSk7XG5cbiAgICAgIGV4cGVjdChyZXMuc3RhdHVzQ29kZSkudG9CZSgyMDApO1xuICAgICAgY29uc3QgYm9keSA9IHJlcy5qc29uKCk7XG4gICAgICBleHBlY3QoYm9keS5vaykudG9CZSh0cnVlKTtcbiAgICAgIGV4cGVjdChib2R5LnN1bW1hcnkudG90YWwpLnRvQmUoMyk7XG4gICAgICBleHBlY3QoYm9keS5zdW1tYXJ5LnNraXBwZWQpLnRvQmUoMSk7XG4gICAgfSk7XG5cbiAgICBpdChcImZpbGVz7JmAIHBhdHRlcm7snYQgbWFuYWdlci5ydW4oKeyXkCDsoITri6ztlZzri6RcIiwgYXN5bmMgKCkgPT4ge1xuICAgICAgYXdhaXQgYXBwLmluamVjdCh7XG4gICAgICAgIG1ldGhvZDogXCJQT1NUXCIsXG4gICAgICAgIHVybDogXCIvX190ZXN0X18vcnVuXCIsXG4gICAgICAgIHBheWxvYWQ6IHsgZmlsZXM6IFtcImZvby50ZXN0LnRzXCJdLCBwYXR0ZXJuOiBcIm15IHRlc3RcIiB9LFxuICAgICAgfSk7XG5cbiAgICAgIGV4cGVjdChtb2NrTWFuYWdlci5ydW4pLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKHtcbiAgICAgICAgZmlsZXM6IFtcImZvby50ZXN0LnRzXCJdLFxuICAgICAgICBwYXR0ZXJuOiBcIm15IHRlc3RcIixcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoXCJtYW5hZ2VyLnJ1bigp7J20IOyYpOulmOulvCDrjZjsp4DrqbQgNTAw7J2EIOuwmO2ZmO2VnOuLpFwiLCBhc3luYyAoKSA9PiB7XG4gICAgICBtb2NrTWFuYWdlci5ydW4ubW9ja1JlamVjdGVkVmFsdWVPbmNlKG5ldyBFcnJvcihcIkRldlZpdGVzdE1hbmFnZXIgaXMgbm90IHN0YXJ0ZWRcIikpO1xuXG4gICAgICBjb25zdCByZXMgPSBhd2FpdCBhcHAuaW5qZWN0KHtcbiAgICAgICAgbWV0aG9kOiBcIlBPU1RcIixcbiAgICAgICAgdXJsOiBcIi9fX3Rlc3RfXy9ydW5cIixcbiAgICAgICAgcGF5bG9hZDoge30sXG4gICAgICB9KTtcblxuICAgICAgZXhwZWN0KHJlcy5zdGF0dXNDb2RlKS50b0JlKDUwMCk7XG4gICAgICBjb25zdCBib2R5ID0gcmVzLmpzb24oKTtcbiAgICAgIGV4cGVjdChib2R5Lm9rKS50b0JlKGZhbHNlKTtcbiAgICAgIGV4cGVjdChib2R5LmVycm9yKS50b0NvbnRhaW4oXCJub3Qgc3RhcnRlZFwiKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoXCJHRVQgL19fdGVzdF9fL3N0YXR1c1wiLCAoKSA9PiB7XG4gICAgaXQoXCJNYW5hZ2VyU3RhdHVzIOq1rOyhsOulvCDrsJjtmZjtlZzri6RcIiwgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgcmVzID0gYXdhaXQgYXBwLmluamVjdCh7XG4gICAgICAgIG1ldGhvZDogXCJHRVRcIixcbiAgICAgICAgdXJsOiBcIi9fX3Rlc3RfXy9zdGF0dXNcIixcbiAgICAgIH0pO1xuXG4gICAgICBleHBlY3QocmVzLnN0YXR1c0NvZGUpLnRvQmUoMjAwKTtcbiAgICAgIGNvbnN0IGJvZHkgPSByZXMuanNvbigpO1xuICAgICAgZXhwZWN0KGJvZHkpLnRvTWF0Y2hPYmplY3Qoe1xuICAgICAgICByZWFkeTogdHJ1ZSxcbiAgICAgICAgcnVubmluZzogZmFsc2UsXG4gICAgICAgIGxhc3RSdW5BdDogbnVsbCxcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZShcInNlcnZlci5jbG9zZSgpIG9uQ2xvc2UgaG9va1wiLCAoKSA9PiB7XG4gICAgaXQoXCLshJzrsoQg7KKF66OMIOyLnCBtYW5hZ2VyLnNodXRkb3duKCnsnbQg7Zi47Lac65Cc64ukXCIsIGFzeW5jICgpID0+IHtcbiAgICAgIGF3YWl0IGFwcC5jbG9zZSgpO1xuICAgICAgZXhwZWN0KG1vY2tNYW5hZ2VyLnNodXRkb3duKS50b0hhdmVCZWVuQ2FsbGVkVGltZXMoMSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKFwi7Luk7Iqk7YWAIHJvdXRlUHJlZml4XCIsICgpID0+IHtcbiAgICBpdChcInJvdXRlUHJlZml46rCAIOyngOygleuQmOuptCDtlbTri7kg6rK966Gc7JeQIOudvOyasO2KuOqwgCDrk7HroZ3rkJzri6RcIiwgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgY3VzdG9tQXBwID0gRmFzdGlmeSgpO1xuICAgICAgbW9ja01hbmFnZXIuc3RhcnQubW9ja1Jlc29sdmVkVmFsdWUodW5kZWZpbmVkKTtcbiAgICAgIG1vY2tNYW5hZ2VyLmdldFN0YXR1cy5tb2NrUmV0dXJuVmFsdWUob2tTdGF0dXMpO1xuICAgICAgbW9ja01hbmFnZXIuc2h1dGRvd24ubW9ja1Jlc29sdmVkVmFsdWUodW5kZWZpbmVkKTtcblxuICAgICAgYXdhaXQgcmVnaXN0ZXJEZXZUZXN0Um91dGVzKGN1c3RvbUFwcCwge1xuICAgICAgICBlbmFibGVkOiB0cnVlLFxuICAgICAgICByb3V0ZVByZWZpeDogXCIvYXBpL3Rlc3RcIixcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCByZXMgPSBhd2FpdCBjdXN0b21BcHAuaW5qZWN0KHsgbWV0aG9kOiBcIkdFVFwiLCB1cmw6IFwiL2FwaS90ZXN0L3N0YXR1c1wiIH0pO1xuICAgICAgZXhwZWN0KHJlcy5zdGF0dXNDb2RlKS50b0JlKDIwMCk7XG5cbiAgICAgIGF3YWl0IGN1c3RvbUFwcC5jbG9zZSgpO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl0sIm5hbWVzIjpbIkZhc3RpZnkiLCJhZnRlckVhY2giLCJiZWZvcmVFYWNoIiwiZGVzY3JpYmUiLCJleHBlY3QiLCJpdCIsInZpIiwibW9ja01hbmFnZXIiLCJob2lzdGVkIiwic3RhcnQiLCJmbiIsInJ1biIsImdldFN0YXR1cyIsInNodXRkb3duIiwibW9jayIsIk1vY2tEZXZWaXRlc3RNYW5hZ2VyIiwiRGV2Vml0ZXN0TWFuYWdlciIsInJlZ2lzdGVyRGV2VGVzdFJvdXRlcyIsImRlZmF1bHRDb25maWciLCJlbmFibGVkIiwicm91dGVQcmVmaXgiLCJva1J1blJlc3VsdCIsIm9rIiwic3VtbWFyeSIsInRvdGFsIiwicGFzc2VkIiwiZmFpbGVkIiwic2tpcHBlZCIsImR1cmF0aW9uTXMiLCJ0cmFjZXMiLCJva1N0YXR1cyIsInJlYWR5IiwicnVubmluZyIsImxhc3RSdW5BdCIsImFwcCIsImNsZWFyQWxsTW9ja3MiLCJtb2NrUmVzb2x2ZWRWYWx1ZSIsInVuZGVmaW5lZCIsIm1vY2tSZXR1cm5WYWx1ZSIsImNsb3NlIiwidG9IYXZlQmVlbkNhbGxlZFRpbWVzIiwicmVzIiwiaW5qZWN0IiwibWV0aG9kIiwidXJsIiwicGF5bG9hZCIsInN0YXR1c0NvZGUiLCJ0b0JlIiwiYm9keSIsImpzb24iLCJmaWxlcyIsInBhdHRlcm4iLCJ0b0hhdmVCZWVuQ2FsbGVkV2l0aCIsIm1vY2tSZWplY3RlZFZhbHVlT25jZSIsIkVycm9yIiwiZXJyb3IiLCJ0b0NvbnRhaW4iLCJ0b01hdGNoT2JqZWN0IiwiY3VzdG9tQXBwIl0sIm1hcHBpbmdzIjoiQUFBQSxPQUFPQSxhQUFhLFVBQVU7QUFDOUIsU0FBU0MsU0FBUyxFQUFFQyxVQUFVLEVBQUVDLFFBQVEsRUFBRUMs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
|
|
@@ -1,152 +0,0 @@
|
|
|
1
|
-
import { beforeEach, describe, expect, it, vi } from "vitest";
|
|
2
|
-
// vitest/node 모킹 - createVitest가 mock Vitest 인스턴스를 반환하도록 설정
|
|
3
|
-
const mockVitest = {
|
|
4
|
-
onFilterWatchedSpecification: vi.fn(),
|
|
5
|
-
setGlobalTestNamePattern: vi.fn(),
|
|
6
|
-
resetGlobalTestNamePattern: vi.fn(),
|
|
7
|
-
globTestSpecifications: vi.fn(),
|
|
8
|
-
runTestSpecifications: vi.fn(),
|
|
9
|
-
close: vi.fn()
|
|
10
|
-
};
|
|
11
|
-
vi.mock("vitest/node", ()=>({
|
|
12
|
-
createVitest: vi.fn().mockResolvedValue(mockVitest)
|
|
13
|
-
}));
|
|
14
|
-
import { DevVitestManager } from "../dev-vitest-manager.js";
|
|
15
|
-
describe("DevVitestManager", ()=>{
|
|
16
|
-
let manager;
|
|
17
|
-
beforeEach(()=>{
|
|
18
|
-
vi.clearAllMocks();
|
|
19
|
-
manager = new DevVitestManager();
|
|
20
|
-
// 기본 mock: 빈 테스트 결과
|
|
21
|
-
const mockTestModule = {
|
|
22
|
-
moduleId: "test.ts",
|
|
23
|
-
children: {
|
|
24
|
-
allTests: ()=>[]
|
|
25
|
-
}
|
|
26
|
-
};
|
|
27
|
-
mockVitest.globTestSpecifications.mockResolvedValue([]);
|
|
28
|
-
mockVitest.runTestSpecifications.mockResolvedValue({
|
|
29
|
-
testModules: [
|
|
30
|
-
mockTestModule
|
|
31
|
-
]
|
|
32
|
-
});
|
|
33
|
-
mockVitest.close.mockResolvedValue(undefined);
|
|
34
|
-
});
|
|
35
|
-
it("start()가 vitest 인스턴스를 초기화한다", async ()=>{
|
|
36
|
-
await manager.start();
|
|
37
|
-
expect(mockVitest.onFilterWatchedSpecification).toHaveBeenCalledWith(expect.any(Function));
|
|
38
|
-
const status = manager.getStatus();
|
|
39
|
-
expect(status.ready).toBe(true);
|
|
40
|
-
expect(status.running).toBe(false);
|
|
41
|
-
});
|
|
42
|
-
it("run()이 테스트를 실행하고 결과를 반환한다", async ()=>{
|
|
43
|
-
await manager.start();
|
|
44
|
-
const result = await manager.run({});
|
|
45
|
-
expect(result.ok).toBe(true);
|
|
46
|
-
expect(result.summary.total).toBe(0);
|
|
47
|
-
});
|
|
48
|
-
it("동시 run() 2회 호출은 순차적으로 실행된다", async ()=>{
|
|
49
|
-
await manager.start();
|
|
50
|
-
const order = [];
|
|
51
|
-
mockVitest.runTestSpecifications.mockImplementationOnce(async ()=>{
|
|
52
|
-
order.push(1);
|
|
53
|
-
await new Promise((r)=>setTimeout(r, 10));
|
|
54
|
-
return {
|
|
55
|
-
testModules: [
|
|
56
|
-
{
|
|
57
|
-
moduleId: "a.ts",
|
|
58
|
-
children: {
|
|
59
|
-
allTests: ()=>[]
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
]
|
|
63
|
-
};
|
|
64
|
-
}).mockImplementationOnce(async ()=>{
|
|
65
|
-
order.push(2);
|
|
66
|
-
return {
|
|
67
|
-
testModules: [
|
|
68
|
-
{
|
|
69
|
-
moduleId: "b.ts",
|
|
70
|
-
children: {
|
|
71
|
-
allTests: ()=>[]
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
]
|
|
75
|
-
};
|
|
76
|
-
});
|
|
77
|
-
const [r1, r2] = await Promise.all([
|
|
78
|
-
manager.run({}),
|
|
79
|
-
manager.run({})
|
|
80
|
-
]);
|
|
81
|
-
expect(order).toEqual([
|
|
82
|
-
1,
|
|
83
|
-
2
|
|
84
|
-
]); // 병렬이 아닌 순차 실행
|
|
85
|
-
expect(r1.ok).toBe(true);
|
|
86
|
-
expect(r2.ok).toBe(true);
|
|
87
|
-
});
|
|
88
|
-
it("오류 발생 시에도 pattern이 finally에서 항상 리셋된다", async ()=>{
|
|
89
|
-
await manager.start();
|
|
90
|
-
mockVitest.runTestSpecifications.mockRejectedValueOnce(new Error("boom"));
|
|
91
|
-
await expect(manager.run({
|
|
92
|
-
pattern: "my-pattern"
|
|
93
|
-
})).rejects.toThrow("boom");
|
|
94
|
-
expect(mockVitest.setGlobalTestNamePattern).toHaveBeenCalledWith("my-pattern");
|
|
95
|
-
expect(mockVitest.resetGlobalTestNamePattern).toHaveBeenCalled();
|
|
96
|
-
});
|
|
97
|
-
it("shutdown() 이후 재호출은 멱등성을 보장한다", async ()=>{
|
|
98
|
-
await manager.start();
|
|
99
|
-
await manager.shutdown();
|
|
100
|
-
await manager.shutdown(); // 오류 없이 재호출 가능
|
|
101
|
-
expect(mockVitest.close).toHaveBeenCalledTimes(1);
|
|
102
|
-
});
|
|
103
|
-
it("shutdown() 이후 run() 호출은 오류를 던진다", async ()=>{
|
|
104
|
-
await manager.start();
|
|
105
|
-
await manager.shutdown();
|
|
106
|
-
await expect(manager.run({})).rejects.toThrow("shut down");
|
|
107
|
-
});
|
|
108
|
-
it("files 미지정 시 globTestSpecifications를 인수 없이 호출한다", async ()=>{
|
|
109
|
-
await manager.start();
|
|
110
|
-
await manager.run({});
|
|
111
|
-
expect(mockVitest.globTestSpecifications).toHaveBeenCalledWith();
|
|
112
|
-
});
|
|
113
|
-
it("files 지정 시 globTestSpecifications를 files 인수와 함께 호출한다", async ()=>{
|
|
114
|
-
await manager.start();
|
|
115
|
-
await manager.run({
|
|
116
|
-
files: [
|
|
117
|
-
"foo.test.ts"
|
|
118
|
-
]
|
|
119
|
-
});
|
|
120
|
-
expect(mockVitest.globTestSpecifications).toHaveBeenCalledWith([
|
|
121
|
-
"foo.test.ts"
|
|
122
|
-
]);
|
|
123
|
-
});
|
|
124
|
-
it("동일 moduleId 결과가 중복되어도 최종 results는 파일당 1건만 유지한다", async ()=>{
|
|
125
|
-
await manager.start();
|
|
126
|
-
mockVitest.globTestSpecifications.mockResolvedValue([
|
|
127
|
-
{
|
|
128
|
-
moduleId: "dup.test.ts"
|
|
129
|
-
}
|
|
130
|
-
]);
|
|
131
|
-
const createModule = (duration)=>({
|
|
132
|
-
moduleId: "dup.test.ts",
|
|
133
|
-
children: [],
|
|
134
|
-
state: ()=>"passed",
|
|
135
|
-
diagnostic: ()=>({
|
|
136
|
-
duration
|
|
137
|
-
})
|
|
138
|
-
});
|
|
139
|
-
mockVitest.runTestSpecifications.mockResolvedValue({
|
|
140
|
-
testModules: [
|
|
141
|
-
createModule(10),
|
|
142
|
-
createModule(25)
|
|
143
|
-
]
|
|
144
|
-
});
|
|
145
|
-
const result = await manager.run({});
|
|
146
|
-
expect(result.results).toHaveLength(1);
|
|
147
|
-
expect(result.results[0]?.id).toBe("dup.test.ts");
|
|
148
|
-
expect(result.results[0]?.durationMs).toBe(25);
|
|
149
|
-
});
|
|
150
|
-
});
|
|
151
|
-
|
|
152
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90ZXN0aW5nL19fdGVzdHNfXy9kZXYtdml0ZXN0LW1hbmFnZXIudGVzdC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBiZWZvcmVFYWNoLCBkZXNjcmliZSwgZXhwZWN0LCBpdCwgdmkgfSBmcm9tIFwidml0ZXN0XCI7XG5cbi8vIHZpdGVzdC9ub2RlIOuqqO2CuSAtIGNyZWF0ZVZpdGVzdOqwgCBtb2NrIFZpdGVzdCDsnbjsiqTthLTsiqTrpbwg67CY7ZmY7ZWY64+E66GdIOyEpOyglVxuY29uc3QgbW9ja1ZpdGVzdCA9IHtcbiAgb25GaWx0ZXJXYXRjaGVkU3BlY2lmaWNhdGlvbjogdmkuZm4oKSxcbiAgc2V0R2xvYmFsVGVzdE5hbWVQYXR0ZXJuOiB2aS5mbigpLFxuICByZXNldEdsb2JhbFRlc3ROYW1lUGF0dGVybjogdmkuZm4oKSxcbiAgZ2xvYlRlc3RTcGVjaWZpY2F0aW9uczogdmkuZm4oKSxcbiAgcnVuVGVzdFNwZWNpZmljYXRpb25zOiB2aS5mbigpLFxuICBjbG9zZTogdmkuZm4oKSxcbn07XG5cbnZpLm1vY2soXCJ2aXRlc3Qvbm9kZVwiLCAoKSA9PiAoe1xuICBjcmVhdGVWaXRlc3Q6IHZpLmZuKCkubW9ja1Jlc29sdmVkVmFsdWUobW9ja1ZpdGVzdCksXG59KSk7XG5cbmltcG9ydCB7IERldlZpdGVzdE1hbmFnZXIgfSBmcm9tIFwiLi4vZGV2LXZpdGVzdC1tYW5hZ2VyXCI7XG5cbmRlc2NyaWJlKFwiRGV2Vml0ZXN0TWFuYWdlclwiLCAoKSA9PiB7XG4gIGxldCBtYW5hZ2VyOiBEZXZWaXRlc3RNYW5hZ2VyO1xuXG4gIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgIHZpLmNsZWFyQWxsTW9ja3MoKTtcbiAgICBtYW5hZ2VyID0gbmV3IERldlZpdGVzdE1hbmFnZXIoKTtcblxuICAgIC8vIOq4sOuzuCBtb2NrOiDruYgg7YWM7Iqk7Yq4IOqysOqzvFxuICAgIGNvbnN0IG1vY2tUZXN0TW9kdWxlID0ge1xuICAgICAgbW9kdWxlSWQ6IFwidGVzdC50c1wiLFxuICAgICAgY2hpbGRyZW46IHtcbiAgICAgICAgYWxsVGVzdHM6ICgpID0+IFtdLFxuICAgICAgfSxcbiAgICB9O1xuICAgIG1vY2tWaXRlc3QuZ2xvYlRlc3RTcGVjaWZpY2F0aW9ucy5tb2NrUmVzb2x2ZWRWYWx1ZShbXSk7XG4gICAgbW9ja1ZpdGVzdC5ydW5UZXN0U3BlY2lmaWNhdGlvbnMubW9ja1Jlc29sdmVkVmFsdWUoe1xuICAgICAgdGVzdE1vZHVsZXM6IFttb2NrVGVzdE1vZHVsZV0sXG4gICAgfSk7XG4gICAgbW9ja1ZpdGVzdC5jbG9zZS5tb2NrUmVzb2x2ZWRWYWx1ZSh1bmRlZmluZWQpO1xuICB9KTtcblxuICBpdChcInN0YXJ0KCnqsIAgdml0ZXN0IOyduOyKpO2EtOyKpOulvCDstIjquLDtmZTtlZzri6RcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGF3YWl0IG1hbmFnZXIuc3RhcnQoKTtcbiAgICBleHBlY3QobW9ja1ZpdGVzdC5vbkZpbHRlcldhdGNoZWRTcGVjaWZpY2F0aW9uKS50b0hhdmVCZWVuQ2FsbGVkV2l0aChleHBlY3QuYW55KEZ1bmN0aW9uKSk7XG4gICAgY29uc3Qgc3RhdHVzID0gbWFuYWdlci5nZXRTdGF0dXMoKTtcbiAgICBleHBlY3Qoc3RhdHVzLnJlYWR5KS50b0JlKHRydWUpO1xuICAgIGV4cGVjdChzdGF0dXMucnVubmluZykudG9CZShmYWxzZSk7XG4gIH0pO1xuXG4gIGl0KFwicnVuKCnsnbQg7YWM7Iqk7Yq466W8IOyLpO2Wie2VmOqzoCDqsrDqs7zrpbwg67CY7ZmY7ZWc64ukXCIsIGFzeW5jICgpID0+IHtcbiAgICBhd2FpdCBtYW5hZ2VyLnN0YXJ0KCk7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgbWFuYWdlci5ydW4oe30pO1xuICAgIGV4cGVjdChyZXN1bHQub2spLnRvQmUodHJ1ZSk7XG4gICAgZXhwZWN0KHJlc3VsdC5zdW1tYXJ5LnRvdGFsKS50b0JlKDApO1xuICB9KTtcblxuICBpdChcIuuPmeyLnCBydW4oKSAy7ZqMIO2YuOy2nOydgCDsiJzssKjsoIHsnLzroZwg7Iuk7ZaJ65Cc64ukXCIsIGFzeW5jICgpID0+IHtcbiAgICBhd2FpdCBtYW5hZ2VyLnN0YXJ0KCk7XG4gICAgY29uc3Qgb3JkZXI6IG51bWJlcltdID0gW107XG5cbiAgICBtb2NrVml0ZXN0LnJ1blRlc3RTcGVjaWZpY2F0aW9uc1xuICAgICAgLm1vY2tJbXBsZW1lbnRhdGlvbk9uY2UoYXN5bmMgKCkgPT4ge1xuICAgICAgICBvcmRlci5wdXNoKDEpO1xuICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZTx2b2lkPigocikgPT4gc2V0VGltZW91dChyLCAxMCkpO1xuICAgICAgICByZXR1cm4geyB0ZXN0TW9kdWxlczogW3sgbW9kdWxlSWQ6IFwiYS50c1wiLCBjaGlsZHJlbjogeyBhbGxUZXN0czogKCkgPT4gW10gfSB9XSB9O1xuICAgICAgfSlcbiAgICAgIC5tb2NrSW1wbGVtZW50YXRpb25PbmNlKGFzeW5jICgpID0+IHtcbiAgICAgICAgb3JkZXIucHVzaCgyKTtcbiAgICAgICAgcmV0dXJuIHsgdGVzdE1vZHVsZXM6IFt7IG1vZHVsZUlkOiBcImIudHNcIiwgY2hpbGRyZW46IHsgYWxsVGVzdHM6ICgpID0+IFtdIH0gfV0gfTtcbiAgICAgIH0pO1xuXG4gICAgY29uc3QgW3IxLCByMl0gPSBhd2FpdCBQcm9taXNlLmFsbChbbWFuYWdlci5ydW4oe30pLCBtYW5hZ2VyLnJ1bih7fSldKTtcblxuICAgIGV4cGVjdChvcmRlcikudG9FcXVhbChbMSwgMl0pOyAvLyDrs5HroKzsnbQg7JWE64uMIOyInOywqCDsi6TtlolcbiAgICBleHBlY3QocjEub2spLnRvQmUodHJ1ZSk7XG4gICAgZXhwZWN0KHIyLm9rKS50b0JlKHRydWUpO1xuICB9KTtcblxuICBpdChcIuyYpOulmCDrsJzsg50g7Iuc7JeQ64+EIHBhdHRlcm7snbQgZmluYWxseeyXkOyEnCDtla3sg4Eg66as7IWL65Cc64ukXCIsIGFzeW5jICgpID0+IHtcbiAgICBhd2FpdCBtYW5hZ2VyLnN0YXJ0KCk7XG4gICAgbW9ja1ZpdGVzdC5ydW5UZXN0U3BlY2lmaWNhdGlvbnMubW9ja1JlamVjdGVkVmFsdWVPbmNlKG5ldyBFcnJvcihcImJvb21cIikpO1xuXG4gICAgYXdhaXQgZXhwZWN0KG1hbmFnZXIucnVuKHsgcGF0dGVybjogXCJteS1wYXR0ZXJuXCIgfSkpLnJlamVjdHMudG9UaHJvdyhcImJvb21cIik7XG5cbiAgICBleHBlY3QobW9ja1ZpdGVzdC5zZXRHbG9iYWxUZXN0TmFtZVBhdHRlcm4pLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKFwibXktcGF0dGVyblwiKTtcbiAgICBleHBlY3QobW9ja1ZpdGVzdC5yZXNldEdsb2JhbFRlc3ROYW1lUGF0dGVybikudG9IYXZlQmVlbkNhbGxlZCgpO1xuICB9KTtcblxuICBpdChcInNodXRkb3duKCkg7J207ZuEIOyerO2YuOy2nOydgCDrqbHrk7HshLHsnYQg67O07J6l7ZWc64ukXCIsIGFzeW5jICgpID0+IHtcbiAgICBhd2FpdCBtYW5hZ2VyLnN0YXJ0KCk7XG4gICAgYXdhaXQgbWFuYWdlci5zaHV0ZG93bigpO1xuICAgIGF3YWl0IG1hbmFnZXIuc2h1dGRvd24oKTsgLy8g7Jik66WYIOyXhuydtCDsnqztmLjstpwg6rCA64qlXG4gICAgZXhwZWN0KG1vY2tWaXRlc3QuY2xvc2UpLnRvSGF2ZUJlZW5DYWxsZWRUaW1lcygxKTtcbiAgfSk7XG5cbiAgaXQoXCJzaHV0ZG93bigpIOydtO2bhCBydW4oKSDtmLjstpzsnYAg7Jik66WY66W8IOuNmOynhOuLpFwiLCBhc3luYyAoKSA9PiB7XG4gICAgYXdhaXQgbWFuYWdlci5zdGFydCgpO1xuICAgIGF3YWl0IG1hbmFnZXIuc2h1dGRvd24oKTtcbiAgICBhd2FpdCBleHBlY3QobWFuYWdlci5ydW4oe30pKS5yZWplY3RzLnRvVGhyb3coXCJzaHV0IGRvd25cIik7XG4gIH0pO1xuXG4gIGl0KFwiZmlsZXMg66+47KeA7KCVIOyLnCBnbG9iVGVzdFNwZWNpZmljYXRpb25z66W8IOyduOyImCDsl4bsnbQg7Zi47Lac7ZWc64ukXCIsIGFzeW5jICgpID0+IHtcbiAgICBhd2FpdCBtYW5hZ2VyLnN0YXJ0KCk7XG4gICAgYXdhaXQgbWFuYWdlci5ydW4oe30pO1xuICAgIGV4cGVjdChtb2NrVml0ZXN0Lmdsb2JUZXN0U3BlY2lmaWNhdGlvbnMpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKCk7XG4gIH0pO1xuXG4gIGl0KFwiZmlsZXMg7KeA7KCVIOyLnCBnbG9iVGVzdFNwZWNpZmljYXRpb25z66W8IGZpbGVzIOyduOyImOyZgCDtlajqu5gg7Zi47Lac7ZWc64ukXCIsIGFzeW5jICgpID0+IHtcbiAgICBhd2FpdCBtYW5hZ2VyLnN0YXJ0KCk7XG4gICAgYXdhaXQgbWFuYWdlci5ydW4oeyBmaWxlczogW1wiZm9vLnRlc3QudHNcIl0gfSk7XG4gICAgZXhwZWN0KG1vY2tWaXRlc3QuZ2xvYlRlc3RTcGVjaWZpY2F0aW9ucykudG9IYXZlQmVlbkNhbGxlZFdpdGgoW1wiZm9vLnRlc3QudHNcIl0pO1xuICB9KTtcblxuICBpdChcIuuPmeydvCBtb2R1bGVJZCDqsrDqs7zqsIAg7KSR67O165CY7Ja064+EIOy1nOyihSByZXN1bHRz64qUIO2MjOydvOuLuSAx6rG066eMIOycoOyngO2VnOuLpFwiLCBhc3luYyAoKSA9PiB7XG4gICAgYXdhaXQgbWFuYWdlci5zdGFydCgpO1xuICAgIG1vY2tWaXRlc3QuZ2xvYlRlc3RTcGVjaWZpY2F0aW9ucy5tb2NrUmVzb2x2ZWRWYWx1ZShbeyBtb2R1bGVJZDogXCJkdXAudGVzdC50c1wiIH1dKTtcblxuICAgIGNvbnN0IGNyZWF0ZU1vZHVsZSA9IChkdXJhdGlvbjogbnVtYmVyKSA9PiAoe1xuICAgICAgbW9kdWxlSWQ6IFwiZHVwLnRlc3QudHNcIixcbiAgICAgIGNoaWxkcmVuOiBbXSxcbiAgICAgIHN0YXRlOiAoKSA9PiBcInBhc3NlZFwiIGFzIGNvbnN0LFxuICAgICAgZGlhZ25vc3RpYzogKCkgPT4gKHsgZHVyYXRpb24gfSksXG4gICAgfSk7XG5cbiAgICBtb2NrVml0ZXN0LnJ1blRlc3RTcGVjaWZpY2F0aW9ucy5tb2NrUmVzb2x2ZWRWYWx1ZSh7XG4gICAgICB0ZXN0TW9kdWxlczogW2NyZWF0ZU1vZHVsZSgxMCksIGNyZWF0ZU1vZHVsZSgyNSldLFxuICAgIH0pO1xuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgbWFuYWdlci5ydW4oe30pO1xuICAgIGV4cGVjdChyZXN1bHQucmVzdWx0cykudG9IYXZlTGVuZ3RoKDEpO1xuICAgIGV4cGVjdChyZXN1bHQucmVzdWx0c1swXT8uaWQpLnRvQmUoXCJkdXAudGVzdC50c1wiKTtcbiAgICBleHBlY3QocmVzdWx0LnJlc3VsdHNbMF0/LmR1cmF0aW9uTXMpLnRvQmUoMjUpO1xuICB9KTtcbn0pO1xuIl0sIm5hbWVzIjpbImJlZm9yZUVhY2giLCJkZXNjcmliZSIsImV4cGVjdCIsIml0IiwidmkiLCJtb2NrVml0ZXN0Iiwib25GaWx0ZXJXYXRjaGVkU3BlY2lmaWNhdGlvbiIsImZuIiwic2V0R2xvYmFsVGVzdE5hbWVQYXR0ZXJuIiwicmVzZXRHbG9iYWxUZXN0TmFtZVBhdHRlcm4iLCJnbG9iVGVzdFNwZWNpZmljYXRpb25zIiwicnVuVGVzdFNwZWNpZmljYXRpb25zIiwiY2xvc2UiLCJtb2NrIiwiY3JlYXRlVml0ZXN0IiwibW9ja1Jlc29sdmVkVmFsdWUiLCJEZXZWaXRlc3RNYW5hZ2VyIiwibWFuYWdlciIsImNsZWFyQWxsTW9ja3MiLCJtb2NrVGVzdE1vZHVsZSIsIm1vZHVsZUlkIiwiY2hpbGRyZW4iLCJhbGxUZXN0cyIsInRlc3RNb2R1bGVzIiwidW5kZWZpbmVkIiwic3RhcnQiLCJ0b0hhdmVCZWVuQ2FsbGVkV2l0aCIsImFueSIsIkZ1bmN0aW9uIiwic3RhdHVzIiwiZ2V0U3RhdHVzIiwicmVhZHkiLCJ0b0JlIiwicnVubmluZyIsInJlc3VsdCIsInJ1biIsIm9rIiwic3VtbWFyeSIsInRvdGFsIiwib3JkZXIiLCJtb2NrSW1wbGVtZW50YXRpb25PbmNlIiwicHVzaCIsIlByb21pc2UiLCJyIiwic2V0VGltZW91dCIsInIxIiwicjIiLCJhbGwiLCJ0b0VxdWFsIiwibW9ja1JlamVjdGVkVmFsdWVPbmNlIiwiRXJyb3IiLCJwYXR0ZXJuIiwicmVqZWN0cyIsInRvVGhyb3ciLCJ0b0hhdmVCZWVuQ2FsbGVkIiwic2h1dGRvd24iLCJ0b0hhdmVCZWVuQ2FsbGVkVGltZXMiLCJmaWxlcyIsImNyZWF0ZU1vZHVsZSIsImR1cmF0aW9uIiwic3RhdGUiLCJkaWFnbm9zdGljIiwicmVzdWx0cyIsInRvSGF2ZUxlbmd0aCIsImlkIiwiZHVyYXRpb25NcyJdLCJtYXBwaW5ncyI6IkFBQUEsU0FBU0EsVUFBVSxFQUFFQyxRQUFRLEVBQUVDLE1BQU0sRUFBRUMsRUFBRSxFQUFFQyxFQUFFLFFBQVEsU0FBUztBQUU5RCw0REFBNEQ7QUFDNUQsTUFBTUMsYUFBYTtJQUNqQkMsOEJBQThCRixHQUFHRyxFQUFFO0lBQ25DQywwQkFBMEJKLEdBQUdHLEVBQUU7SUFDL0JFLDRCQUE0QkwsR0FBR0csRUFBRTtJQUNqQ0csd0JBQXdCTixHQUFHRyxFQUFFO0lBQzdCSSx1QkFBdUJQLEdBQUdHLEVBQUU7SUFDNUJLLE9BQU9SLEdBQUdHLEVBQUU7QUFDZDtBQUVBSCxHQUFHUyxJQUFJLENBQUMsZUFBZSxJQUFPLENBQUE7UUFDNUJDLGNBQWNWLEdBQUdHLEVBQUUsR0FBR1EsaUJBQWlCLENBQUNWO0lBQzFDLENBQUE7QUFFQSxTQUFTVyxnQkFBZ0IsUUFBUSwyQkFBd0I7QUFFekRmLFNBQVMsb0JBQW9CO0lBQzNCLElBQUlnQjtJQUVKakIsV0FBVztRQUNUSSxHQUFHYyxhQUFhO1FBQ2hCRCxVQUFVLElBQUlEO1FBRWQsb0JBQW9CO1FBQ3BCLE1BQU1HLGlCQUFpQjtZQUNyQkMsVUFBVTtZQUNWQyxVQUFVO2dCQUNSQyxVQUFVLElBQU0sRUFBRTtZQUNwQjtRQUNGO1FBQ0FqQixXQUFXSyxzQkFBc0IsQ0FBQ0ssaUJBQWlCLENBQUMsRUFBRTtRQUN0RFYsV0FBV00scUJBQXFCLENBQUNJLGlCQUFpQixDQUFD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
|
|
@@ -1,256 +0,0 @@
|
|
|
1
|
-
import { describe, expect, test } from "vitest";
|
|
2
|
-
import { z } from "zod";
|
|
3
|
-
import { EntityJsonSchema, isSearchTextJsonSourceZodType, TemplateOptions } from "../types.js";
|
|
4
|
-
function createBaseEntity() {
|
|
5
|
-
return {
|
|
6
|
-
id: "SearchTextTest",
|
|
7
|
-
title: "SearchText Test",
|
|
8
|
-
table: "search_text_tests",
|
|
9
|
-
props: [
|
|
10
|
-
{
|
|
11
|
-
name: "id",
|
|
12
|
-
type: "integer"
|
|
13
|
-
},
|
|
14
|
-
{
|
|
15
|
-
name: "title",
|
|
16
|
-
type: "string"
|
|
17
|
-
},
|
|
18
|
-
{
|
|
19
|
-
name: "tags",
|
|
20
|
-
type: "string[]"
|
|
21
|
-
},
|
|
22
|
-
{
|
|
23
|
-
name: "aliases",
|
|
24
|
-
type: "json",
|
|
25
|
-
id: "StringArray"
|
|
26
|
-
},
|
|
27
|
-
{
|
|
28
|
-
name: "search_text",
|
|
29
|
-
type: "searchText",
|
|
30
|
-
sourceColumns: [
|
|
31
|
-
{
|
|
32
|
-
name: "title",
|
|
33
|
-
caseInsensitive: true
|
|
34
|
-
}
|
|
35
|
-
]
|
|
36
|
-
}
|
|
37
|
-
],
|
|
38
|
-
indexes: [
|
|
39
|
-
{
|
|
40
|
-
type: "index",
|
|
41
|
-
name: "search_text_tests_search_text_index",
|
|
42
|
-
using: "gin",
|
|
43
|
-
columns: [
|
|
44
|
-
{
|
|
45
|
-
name: "search_text",
|
|
46
|
-
opclass: "gin_trgm_ops"
|
|
47
|
-
}
|
|
48
|
-
]
|
|
49
|
-
}
|
|
50
|
-
],
|
|
51
|
-
subsets: {
|
|
52
|
-
A: [
|
|
53
|
-
"id",
|
|
54
|
-
"title",
|
|
55
|
-
"tags",
|
|
56
|
-
"aliases",
|
|
57
|
-
"search_text"
|
|
58
|
-
]
|
|
59
|
-
},
|
|
60
|
-
enums: {}
|
|
61
|
-
};
|
|
62
|
-
}
|
|
63
|
-
describe("EntityJsonSchema searchText/opclass validation", ()=>{
|
|
64
|
-
test("opclass known/free string과 vectorOps 하위호환을 허용해야 한다", ()=>{
|
|
65
|
-
const knownOpclass = createBaseEntity();
|
|
66
|
-
const knownResult = EntityJsonSchema.safeParse(knownOpclass);
|
|
67
|
-
expect(knownResult.success).toBe(true);
|
|
68
|
-
const freeOpclass = createBaseEntity();
|
|
69
|
-
freeOpclass.indexes[0] = {
|
|
70
|
-
...freeOpclass.indexes[0],
|
|
71
|
-
columns: [
|
|
72
|
-
{
|
|
73
|
-
name: "search_text",
|
|
74
|
-
opclass: "custom_text_ops"
|
|
75
|
-
}
|
|
76
|
-
]
|
|
77
|
-
};
|
|
78
|
-
const freeResult = EntityJsonSchema.safeParse(freeOpclass);
|
|
79
|
-
expect(freeResult.success).toBe(true);
|
|
80
|
-
const legacyVectorOps = createBaseEntity();
|
|
81
|
-
legacyVectorOps.indexes[0] = {
|
|
82
|
-
type: "hnsw",
|
|
83
|
-
name: "search_text_tests_embedding_hnsw",
|
|
84
|
-
columns: [
|
|
85
|
-
{
|
|
86
|
-
name: "embedding",
|
|
87
|
-
vectorOps: "vector_cosine_ops"
|
|
88
|
-
}
|
|
89
|
-
],
|
|
90
|
-
m: 16,
|
|
91
|
-
efConstruction: 64
|
|
92
|
-
};
|
|
93
|
-
const legacyResult = EntityJsonSchema.safeParse(legacyVectorOps);
|
|
94
|
-
expect(legacyResult.success).toBe(true);
|
|
95
|
-
});
|
|
96
|
-
test("searchText source column 존재/타입 검증이 동작해야 한다", ()=>{
|
|
97
|
-
const unknownSource = createBaseEntity();
|
|
98
|
-
unknownSource.props[4] = {
|
|
99
|
-
name: "search_text",
|
|
100
|
-
type: "searchText",
|
|
101
|
-
sourceColumns: [
|
|
102
|
-
{
|
|
103
|
-
name: "missing_col",
|
|
104
|
-
caseInsensitive: true
|
|
105
|
-
}
|
|
106
|
-
]
|
|
107
|
-
};
|
|
108
|
-
const unknownResult = EntityJsonSchema.safeParse(unknownSource);
|
|
109
|
-
expect(unknownResult.success).toBe(false);
|
|
110
|
-
const unsupportedSourceType = createBaseEntity();
|
|
111
|
-
unsupportedSourceType.props[4] = {
|
|
112
|
-
name: "search_text",
|
|
113
|
-
type: "searchText",
|
|
114
|
-
sourceColumns: [
|
|
115
|
-
{
|
|
116
|
-
name: "id",
|
|
117
|
-
caseInsensitive: true
|
|
118
|
-
}
|
|
119
|
-
]
|
|
120
|
-
};
|
|
121
|
-
const unsupportedResult = EntityJsonSchema.safeParse(unsupportedSourceType);
|
|
122
|
-
expect(unsupportedResult.success).toBe(false);
|
|
123
|
-
});
|
|
124
|
-
test("schema 단계에서는 searchText json source id naming을 강제하지 않아야 한다", ()=>{
|
|
125
|
-
const nullableWrapper = createBaseEntity();
|
|
126
|
-
nullableWrapper.props[3] = {
|
|
127
|
-
name: "aliases",
|
|
128
|
-
type: "json",
|
|
129
|
-
id: "NullableStringArray"
|
|
130
|
-
};
|
|
131
|
-
nullableWrapper.props[4] = {
|
|
132
|
-
name: "search_text",
|
|
133
|
-
type: "searchText",
|
|
134
|
-
sourceColumns: [
|
|
135
|
-
{
|
|
136
|
-
name: "aliases",
|
|
137
|
-
caseInsensitive: true
|
|
138
|
-
}
|
|
139
|
-
]
|
|
140
|
-
};
|
|
141
|
-
const wrapperResult = EntityJsonSchema.safeParse(nullableWrapper);
|
|
142
|
-
expect(wrapperResult.success).toBe(true);
|
|
143
|
-
const nullableElement = createBaseEntity();
|
|
144
|
-
nullableElement.props[3] = {
|
|
145
|
-
name: "aliases",
|
|
146
|
-
type: "json",
|
|
147
|
-
id: "StringNullableArray"
|
|
148
|
-
};
|
|
149
|
-
nullableElement.props[4] = {
|
|
150
|
-
name: "search_text",
|
|
151
|
-
type: "searchText",
|
|
152
|
-
sourceColumns: [
|
|
153
|
-
{
|
|
154
|
-
name: "aliases",
|
|
155
|
-
caseInsensitive: true
|
|
156
|
-
}
|
|
157
|
-
]
|
|
158
|
-
};
|
|
159
|
-
const nullableElementResult = EntityJsonSchema.safeParse(nullableElement);
|
|
160
|
-
expect(nullableElementResult.success).toBe(true);
|
|
161
|
-
const customNamedType = createBaseEntity();
|
|
162
|
-
customNamedType.props[3] = {
|
|
163
|
-
name: "aliases",
|
|
164
|
-
type: "json",
|
|
165
|
-
id: "CustomAliasType"
|
|
166
|
-
};
|
|
167
|
-
customNamedType.props[4] = {
|
|
168
|
-
name: "search_text",
|
|
169
|
-
type: "searchText",
|
|
170
|
-
sourceColumns: [
|
|
171
|
-
{
|
|
172
|
-
name: "aliases",
|
|
173
|
-
caseInsensitive: true
|
|
174
|
-
}
|
|
175
|
-
]
|
|
176
|
-
};
|
|
177
|
-
const customNamedTypeResult = EntityJsonSchema.safeParse(customNamedType);
|
|
178
|
-
expect(customNamedTypeResult.success).toBe(true);
|
|
179
|
-
});
|
|
180
|
-
test("TemplateOptions.entity 경로도 searchText source 검증을 동일하게 적용해야 한다", ()=>{
|
|
181
|
-
const validEntity = createBaseEntity();
|
|
182
|
-
const validTemplateEntity = {
|
|
183
|
-
entityId: validEntity.id,
|
|
184
|
-
title: validEntity.title,
|
|
185
|
-
table: validEntity.table,
|
|
186
|
-
props: validEntity.props,
|
|
187
|
-
indexes: validEntity.indexes,
|
|
188
|
-
subsets: validEntity.subsets,
|
|
189
|
-
enums: validEntity.enums
|
|
190
|
-
};
|
|
191
|
-
const validResult = TemplateOptions.shape.entity.safeParse(validTemplateEntity);
|
|
192
|
-
expect(validResult.success).toBe(true);
|
|
193
|
-
const invalidEntity = createBaseEntity();
|
|
194
|
-
invalidEntity.props[4] = {
|
|
195
|
-
name: "search_text",
|
|
196
|
-
type: "searchText",
|
|
197
|
-
sourceColumns: [
|
|
198
|
-
{
|
|
199
|
-
name: "missing_col",
|
|
200
|
-
caseInsensitive: true
|
|
201
|
-
}
|
|
202
|
-
]
|
|
203
|
-
};
|
|
204
|
-
const invalidTemplateEntity = {
|
|
205
|
-
entityId: invalidEntity.id,
|
|
206
|
-
title: invalidEntity.title,
|
|
207
|
-
table: invalidEntity.table,
|
|
208
|
-
props: invalidEntity.props,
|
|
209
|
-
indexes: invalidEntity.indexes,
|
|
210
|
-
subsets: invalidEntity.subsets,
|
|
211
|
-
enums: invalidEntity.enums
|
|
212
|
-
};
|
|
213
|
-
const invalidResult = TemplateOptions.shape.entity.safeParse(invalidTemplateEntity);
|
|
214
|
-
expect(invalidResult.success).toBe(false);
|
|
215
|
-
});
|
|
216
|
-
test("TemplateOptions.entity 경로도 json id naming에 의존하지 않아야 한다", ()=>{
|
|
217
|
-
const customNamedType = createBaseEntity();
|
|
218
|
-
customNamedType.props[3] = {
|
|
219
|
-
name: "aliases",
|
|
220
|
-
type: "json",
|
|
221
|
-
id: "CustomAliasType"
|
|
222
|
-
};
|
|
223
|
-
customNamedType.props[4] = {
|
|
224
|
-
name: "search_text",
|
|
225
|
-
type: "searchText",
|
|
226
|
-
sourceColumns: [
|
|
227
|
-
{
|
|
228
|
-
name: "aliases",
|
|
229
|
-
caseInsensitive: true
|
|
230
|
-
}
|
|
231
|
-
]
|
|
232
|
-
};
|
|
233
|
-
const customTemplateEntity = {
|
|
234
|
-
entityId: customNamedType.id,
|
|
235
|
-
title: customNamedType.title,
|
|
236
|
-
table: customNamedType.table,
|
|
237
|
-
props: customNamedType.props,
|
|
238
|
-
indexes: customNamedType.indexes,
|
|
239
|
-
subsets: customNamedType.subsets,
|
|
240
|
-
enums: customNamedType.enums
|
|
241
|
-
};
|
|
242
|
-
const customTemplateResult = TemplateOptions.shape.entity.safeParse(customTemplateEntity);
|
|
243
|
-
expect(customTemplateResult.success).toBe(true);
|
|
244
|
-
});
|
|
245
|
-
test("searchText json source Zod 구조 검증 유틸이 wrapper/element 타입을 정확히 판정해야 한다", ()=>{
|
|
246
|
-
expect(isSearchTextJsonSourceZodType(z.array(z.string()))).toBe(true);
|
|
247
|
-
expect(isSearchTextJsonSourceZodType(z.array(z.string()).optional())).toBe(true);
|
|
248
|
-
expect(isSearchTextJsonSourceZodType(z.array(z.string()).nullable())).toBe(true);
|
|
249
|
-
expect(isSearchTextJsonSourceZodType(z.array(z.string()).nullish())).toBe(true);
|
|
250
|
-
expect(isSearchTextJsonSourceZodType(z.array(z.string().nullable()))).toBe(false);
|
|
251
|
-
expect(isSearchTextJsonSourceZodType(z.array(z.number()))).toBe(false);
|
|
252
|
-
expect(isSearchTextJsonSourceZodType(z.string())).toBe(false);
|
|
253
|
-
});
|
|
254
|
-
});
|
|
255
|
-
|
|
256
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90eXBlcy9fX3Rlc3RzX18vZW50aXR5LWpzb24tc2NoZW1hLXNlYXJjaC10ZXh0LnRlc3QudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZGVzY3JpYmUsIGV4cGVjdCwgdGVzdCB9IGZyb20gXCJ2aXRlc3RcIjtcbmltcG9ydCB7IHogfSBmcm9tIFwiem9kXCI7XG5pbXBvcnQgeyBFbnRpdHlKc29uU2NoZW1hLCBpc1NlYXJjaFRleHRKc29uU291cmNlWm9kVHlwZSwgVGVtcGxhdGVPcHRpb25zIH0gZnJvbSBcIi4uL3R5cGVzXCI7XG5cbmZ1bmN0aW9uIGNyZWF0ZUJhc2VFbnRpdHkoKSB7XG4gIHJldHVybiB7XG4gICAgaWQ6IFwiU2VhcmNoVGV4dFRlc3RcIixcbiAgICB0aXRsZTogXCJTZWFyY2hUZXh0IFRlc3RcIixcbiAgICB0YWJsZTogXCJzZWFyY2hfdGV4dF90ZXN0c1wiLFxuICAgIHByb3BzOiBbXG4gICAgICB7IG5hbWU6IFwiaWRcIiwgdHlwZTogXCJpbnRlZ2VyXCIgfSxcbiAgICAgIHsgbmFtZTogXCJ0aXRsZVwiLCB0eXBlOiBcInN0cmluZ1wiIH0sXG4gICAgICB7IG5hbWU6IFwidGFnc1wiLCB0eXBlOiBcInN0cmluZ1tdXCIgfSxcbiAgICAgIHsgbmFtZTogXCJhbGlhc2VzXCIsIHR5cGU6IFwianNvblwiLCBpZDogXCJTdHJpbmdBcnJheVwiIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6IFwic2VhcmNoX3RleHRcIixcbiAgICAgICAgdHlwZTogXCJzZWFyY2hUZXh0XCIsXG4gICAgICAgIHNvdXJjZUNvbHVtbnM6IFt7IG5hbWU6IFwidGl0bGVcIiwgY2FzZUluc2Vuc2l0aXZlOiB0cnVlIH1dLFxuICAgICAgfSxcbiAgICBdLFxuICAgIGluZGV4ZXM6IFtcbiAgICAgIHtcbiAgICAgICAgdHlwZTogXCJpbmRleFwiLFxuICAgICAgICBuYW1lOiBcInNlYXJjaF90ZXh0X3Rlc3RzX3NlYXJjaF90ZXh0X2luZGV4XCIsXG4gICAgICAgIHVzaW5nOiBcImdpblwiLFxuICAgICAgICBjb2x1bW5zOiBbeyBuYW1lOiBcInNlYXJjaF90ZXh0XCIsIG9wY2xhc3M6IFwiZ2luX3RyZ21fb3BzXCIgfV0sXG4gICAgICB9LFxuICAgIF0sXG4gICAgc3Vic2V0czoge1xuICAgICAgQTogW1wiaWRcIiwgXCJ0aXRsZVwiLCBcInRhZ3NcIiwgXCJhbGlhc2VzXCIsIFwic2VhcmNoX3RleHRcIl0sXG4gICAgfSxcbiAgICBlbnVtczoge30sXG4gIH0gYXMgY29uc3Q7XG59XG5cbmRlc2NyaWJlKFwiRW50aXR5SnNvblNjaGVtYSBzZWFyY2hUZXh0L29wY2xhc3MgdmFsaWRhdGlvblwiLCAoKSA9PiB7XG4gIHRlc3QoXCJvcGNsYXNzIGtub3duL2ZyZWUgc3RyaW5n6rO8IHZlY3Rvck9wcyDtlZjsnITtmLjtmZjsnYQg7ZeI7Jqp7ZW07JW8IO2VnOuLpFwiLCAoKSA9PiB7XG4gICAgY29uc3Qga25vd25PcGNsYXNzID0gY3JlYXRlQmFzZUVudGl0eSgpO1xuICAgIGNvbnN0IGtub3duUmVzdWx0ID0gRW50aXR5SnNvblNjaGVtYS5zYWZlUGFyc2Uoa25vd25PcGNsYXNzKTtcbiAgICBleHBlY3Qoa25vd25SZXN1bHQuc3VjY2VzcykudG9CZSh0cnVlKTtcblxuICAgIGNvbnN0IGZyZWVPcGNsYXNzID0gY3JlYXRlQmFzZUVudGl0eSgpO1xuICAgIGZyZWVPcGNsYXNzLmluZGV4ZXNbMF0gPSB7XG4gICAgICAuLi5mcmVlT3BjbGFzcy5pbmRleGVzWzBdLFxuICAgICAgY29sdW1uczogW3sgbmFtZTogXCJzZWFyY2hfdGV4dFwiLCBvcGNsYXNzOiBcImN1c3RvbV90ZXh0X29wc1wiIH1dLFxuICAgIH07XG4gICAgY29uc3QgZnJlZVJlc3VsdCA9IEVudGl0eUpzb25TY2hlbWEuc2FmZVBhcnNlKGZyZWVPcGNsYXNzKTtcbiAgICBleHBlY3QoZnJlZVJlc3VsdC5zdWNjZXNzKS50b0JlKHRydWUpO1xuXG4gICAgY29uc3QgbGVnYWN5VmVjdG9yT3BzID0gY3JlYXRlQmFzZUVudGl0eSgpO1xuICAgIGxlZ2FjeVZlY3Rvck9wcy5pbmRleGVzWzBdID0ge1xuICAgICAgdHlwZTogXCJobnN3XCIsXG4gICAgICBuYW1lOiBcInNlYXJjaF90ZXh0X3Rlc3RzX2VtYmVkZGluZ19obnN3XCIsXG4gICAgICBjb2x1bW5zOiBbeyBuYW1lOiBcImVtYmVkZGluZ1wiLCB2ZWN0b3JPcHM6IFwidmVjdG9yX2Nvc2luZV9vcHNcIiB9XSxcbiAgICAgIG06IDE2LFxuICAgICAgZWZDb25zdHJ1Y3Rpb246IDY0LFxuICAgIH07XG4gICAgY29uc3QgbGVnYWN5UmVzdWx0ID0gRW50aXR5SnNvblNjaGVtYS5zYWZlUGFyc2UobGVnYWN5VmVjdG9yT3BzKTtcbiAgICBleHBlY3QobGVnYWN5UmVzdWx0LnN1Y2Nlc3MpLnRvQmUodHJ1ZSk7XG4gIH0pO1xuXG4gIHRlc3QoXCJzZWFyY2hUZXh0IHNvdXJjZSBjb2x1bW4g7KG07J6sL+2DgOyehSDqsoDspp3snbQg64+Z7J6R7ZW07JW8IO2VnOuLpFwiLCAoKSA9PiB7XG4gICAgY29uc3QgdW5rbm93blNvdXJjZSA9IGNyZWF0ZUJhc2VFbnRpdHkoKTtcbiAgICB1bmtub3duU291cmNlLnByb3BzWzRdID0ge1xuICAgICAgbmFtZTogXCJzZWFyY2hfdGV4dFwiLFxuICAgICAgdHlwZTogXCJzZWFyY2hUZXh0XCIsXG4gICAgICBzb3VyY2VDb2x1bW5zOiBbeyBuYW1lOiBcIm1pc3NpbmdfY29sXCIsIGNhc2VJbnNlbnNpdGl2ZTogdHJ1ZSB9XSxcbiAgICB9O1xuICAgIGNvbnN0IHVua25vd25SZXN1bHQgPSBFbnRpdHlKc29uU2NoZW1hLnNhZmVQYXJzZSh1bmtub3duU291cmNlKTtcbiAgICBleHBlY3QodW5rbm93blJlc3VsdC5zdWNjZXNzKS50b0JlKGZhbHNlKTtcblxuICAgIGNvbnN0IHVuc3VwcG9ydGVkU291cmNlVHlwZSA9IGNyZWF0ZUJhc2VFbnRpdHkoKTtcbiAgICB1bnN1cHBvcnRlZFNvdXJjZVR5cGUucHJvcHNbNF0gPSB7XG4gICAgICBuYW1lOiBcInNlYXJjaF90ZXh0XCIsXG4gICAgICB0eXBlOiBcInNlYXJjaFRleHRcIixcbiAgICAgIHNvdXJjZUNvbHVtbnM6IFt7IG5hbWU6IFwiaWRcIiwgY2FzZUluc2Vuc2l0aXZlOiB0cnVlIH1dLFxuICAgIH07XG4gICAgY29uc3QgdW5zdXBwb3J0ZWRSZXN1bHQgPSBFbnRpdHlKc29uU2NoZW1hLnNhZmVQYXJzZSh1bnN1cHBvcnRlZFNvdXJjZVR5cGUpO1xuICAgIGV4cGVjdCh1bnN1cHBvcnRlZFJlc3VsdC5zdWNjZXNzKS50b0JlKGZhbHNlKTtcbiAgfSk7XG5cbiAgdGVzdChcInNjaGVtYSDri6jqs4Tsl5DshJzripQgc2VhcmNoVGV4dCBqc29uIHNvdXJjZSBpZCBuYW1pbmfsnYQg6rCV7KCc7ZWY7KeAIOyViuyVhOyVvCDtlZzri6RcIiwgKCkgPT4ge1xuICAgIGNvbnN0IG51bGxhYmxlV3JhcHBlciA9IGNyZWF0ZUJhc2VFbnRpdHkoKTtcbiAgICBudWxsYWJsZVdyYXBwZXIucHJvcHNbM10gPSB7IG5hbWU6IFwiYWxpYXNlc1wiLCB0eXBlOiBcImpzb25cIiwgaWQ6IFwiTnVsbGFibGVTdHJpbmdBcnJheVwiIH07XG4gICAgbnVsbGFibGVXcmFwcGVyLnByb3BzWzRdID0ge1xuICAgICAgbmFtZTogXCJzZWFyY2hfdGV4dFwiLFxuICAgICAgdHlwZTogXCJzZWFyY2hUZXh0XCIsXG4gICAgICBzb3VyY2VDb2x1bW5zOiBbeyBuYW1lOiBcImFsaWFzZXNcIiwgY2FzZUluc2Vuc2l0aXZlOiB0cnVlIH1dLFxuICAgIH07XG4gICAgY29uc3Qgd3JhcHBlclJlc3VsdCA9IEVudGl0eUpzb25TY2hlbWEuc2FmZVBhcnNlKG51bGxhYmxlV3JhcHBlcik7XG4gICAgZXhwZWN0KHdyYXBwZXJSZXN1bHQuc3VjY2VzcykudG9CZSh0cnVlKTtcblxuICAgIGNvbnN0IG51bGxhYmxlRWxlbWVudCA9IGNyZWF0ZUJhc2VFbnRpdHkoKTtcbiAgICBudWxsYWJsZUVsZW1lbnQucHJvcHNbM10gPSB7IG5hbWU6IFwiYWxpYXNlc1wiLCB0eXBlOiBcImpzb25cIiwgaWQ6IFwiU3RyaW5nTnVsbGFibGVBcnJheVwiIH07XG4gICAgbnVsbGFibGVFbGVtZW50LnByb3BzWzRdID0ge1xuICAgICAgbmFtZTogXCJzZWFyY2hfdGV4dFwiLFxuICAgICAgdHlwZTogXCJzZWFyY2hUZXh0XCIsXG4gICAgICBzb3VyY2VDb2x1bW5zOiBbeyBuYW1lOiBcImFsaWFzZXNcIiwgY2FzZUluc2Vuc2l0aXZlOiB0cnVlIH1dLFxuICAgIH07XG4gICAgY29uc3QgbnVsbGFibGVFbGVtZW50UmVzdWx0ID0gRW50aXR5SnNvblNjaGVtYS5zYWZlUGFyc2UobnVsbGFibGVFbGVtZW50KTtcbiAgICBleHBlY3QobnVsbGFibGVFbGVtZW50UmVzdWx0LnN1Y2Nlc3MpLnRvQmUodHJ1ZSk7XG5cbiAgICBjb25zdCBjdXN0b21OYW1lZFR5cGUgPSBjcmVhdGVCYXNlRW50aXR5KCk7XG4gICAgY3VzdG9tTmFtZWRUeXBlLnByb3BzWzNdID0geyBuYW1lOiBcImFsaWFzZXNcIiwgdHlwZTogXCJqc29uXCIsIGlkOiBcIkN1c3RvbUFsaWFzVHlwZVwiIH07XG4gICAgY3VzdG9tTmFtZWRUeXBlLnByb3BzWzRdID0ge1xuICAgICAgbmFtZTogXCJzZWFyY2hfdGV4dFwiLFxuICAgICAgdHlwZTogXCJzZWFyY2hUZXh0XCIsXG4gICAgICBzb3VyY2VDb2x1bW5zOiBbeyBuYW1lOiBcImFsaWFzZXNcIiwgY2FzZUluc2Vuc2l0aXZlOiB0cnVlIH1dLFxuICAgIH07XG4gICAgY29uc3QgY3VzdG9tTmFtZWRUeXBlUmVzdWx0ID0gRW50aXR5SnNvblNjaGVtYS5zYWZlUGFyc2UoY3VzdG9tTmFtZWRUeXBlKTtcbiAgICBleHBlY3QoY3VzdG9tTmFtZWRUeXBlUmVzdWx0LnN1Y2Nlc3MpLnRvQmUodHJ1ZSk7XG4gIH0pO1xuXG4gIHRlc3QoXCJUZW1wbGF0ZU9wdGlvbnMuZW50aXR5IOqyveuhnOuPhCBzZWFyY2hUZXh0IHNvdXJjZSDqsoDspp3snYQg64+Z7J287ZWY6rKMIOyggeyaqe2VtOyVvCDtlZzri6RcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHZhbGlkRW50aXR5ID0gY3JlYXRlQmFzZUVudGl0eSgpO1xuICAgIGNvbnN0IHZhbGlkVGVtcGxhdGVFbnRpdHkgPSB7XG4gICAgICBlbnRpdHlJZDogdmFsaWRFbnRpdHkuaWQsXG4gICAgICB0aXRsZTogdmFsaWRFbnRpdHkudGl0bGUsXG4gICAgICB0YWJsZTogdmFsaWRFbnRpdHkudGFibGUsXG4gICAgICBwcm9wczogdmFsaWRFbnRpdHkucHJvcHMsXG4gICAgICBpbmRleGVzOiB2YWxpZEVudGl0eS5pbmRleGVzLFxuICAgICAgc3Vic2V0czogdmFsaWRFbnRpdHkuc3Vic2V0cyxcbiAgICAgIGVudW1zOiB2YWxpZEVudGl0eS5lbnVtcyxcbiAgICB9O1xuICAgIGNvbnN0IHZhbGlkUmVzdWx0ID0gVGVtcGxhdGVPcHRpb25zLnNoYXBlLmVudGl0eS5zYWZlUGFyc2UodmFsaWRUZW1wbGF0ZUVudGl0eSk7XG4gICAgZXhwZWN0KHZhbGlkUmVzdWx0LnN1Y2Nlc3MpLnRvQmUodHJ1ZSk7XG5cbiAgICBjb25zdCBpbnZhbGlkRW50aXR5ID0gY3JlYXRlQmFzZUVudGl0eSgpO1xuICAgIGludmFsaWRFbnRpdHkucHJvcHNbNF0gPSB7XG4gICAgICBuYW1lOiBcInNlYXJjaF90ZXh0XCIsXG4gICAgICB0eXBlOiBcInNlYXJjaFRleHRcIixcbiAgICAgIHNvdXJjZUNvbHVtbnM6IFt7IG5hbWU6IFwibWlzc2luZ19jb2xcIiwgY2FzZUluc2Vuc2l0aXZlOiB0cnVlIH1dLFxuICAgIH07XG4gICAgY29uc3QgaW52YWxpZFRlbXBsYXRlRW50aXR5ID0ge1xuICAgICAgZW50aXR5SWQ6IGludmFsaWRFbnRpdHkuaWQsXG4gICAgICB0aXRsZTogaW52YWxpZEVudGl0eS50aXRsZSxcbiAgICAgIHRhYmxlOiBpbnZhbGlkRW50aXR5LnRhYmxlLFxuICAgICAgcHJvcHM6IGludmFsaWRFbnRpdHkucHJvcHMsXG4gICAgICBpbmRleGVzOiBpbnZhbGlkRW50aXR5LmluZGV4ZXMsXG4gICAgICBzdWJzZXRzOiBpbnZhbGlkRW50aXR5LnN1YnNldHMsXG4gICAgICBlbnVtczogaW52YWxpZEVudGl0eS5lbnVtcyxcbiAgICB9O1xuICAgIGNvbnN0IGludmFsaWRSZXN1bHQgPSBUZW1wbGF0ZU9wdGlvbnMuc2hhcGUuZW50aXR5LnNhZmVQYXJzZShpbnZhbGlkVGVtcGxhdGVFbnRpdHkpO1xuICAgIGV4cGVjdChpbnZhbGlkUmVzdWx0LnN1Y2Nlc3MpLnRvQmUoZmFsc2UpO1xuICB9KTtcblxuICB0ZXN0KFwiVGVtcGxhdGVPcHRpb25zLmVudGl0eSDqsr3roZzrj4QganNvbiBpZCBuYW1pbmfsl5Ag7J2Y7KG07ZWY7KeAIOyViuyVhOyVvCDtlZzri6RcIiwgKCkgPT4ge1xuICAgIGNvbnN0IGN1c3RvbU5hbWVkVHlwZSA9IGNyZWF0ZUJhc2VFbnRpdHkoKTtcbiAgICBjdXN0b21OYW1lZFR5cGUucHJvcHNbM10gPSB7IG5hbWU6IFwiYWxpYXNlc1wiLCB0eXBlOiBcImpzb25cIiwgaWQ6IFwiQ3VzdG9tQWxpYXNUeXBlXCIgfTtcbiAgICBjdXN0b21OYW1lZFR5cGUucHJvcHNbNF0gPSB7XG4gICAgICBuYW1lOiBcInNlYXJjaF90ZXh0XCIsXG4gICAgICB0eXBlOiBcInNlYXJjaFRleHRcIixcbiAgICAgIHNvdXJjZUNvbHVtbnM6IFt7IG5hbWU6IFwiYWxpYXNlc1wiLCBjYXNlSW5zZW5zaXRpdmU6IHRydWUgfV0sXG4gICAgfTtcblxuICAgIGNvbnN0IGN1c3RvbVRlbXBsYXRlRW50aXR5ID0ge1xuICAgICAgZW50aXR5SWQ6IGN1c3RvbU5hbWVkVHlwZS5pZCxcbiAgICAgIHRpdGxlOiBjdXN0b21OYW1lZFR5cGUudGl0bGUsXG4gICAgICB0YWJsZTogY3VzdG9tTmFtZWRUeXBlLnRhYmxlLFxuICAgICAgcHJvcHM6IGN1c3RvbU5hbWVkVHlwZS5wcm9wcyxcbiAgICAgIGluZGV4ZXM6IGN1c3RvbU5hbWVkVHlwZS5pbmRleGVzLFxuICAgICAgc3Vic2V0czogY3VzdG9tTmFtZWRUeXBlLnN1YnNldHMsXG4gICAgICBlbnVtczogY3VzdG9tTmFtZWRUeXBlLmVudW1zLFxuICAgIH07XG4gICAgY29uc3QgY3VzdG9tVGVtcGxhdGVSZXN1bHQgPSBUZW1wbGF0ZU9wdGlvbnMuc2hhcGUuZW50aXR5LnNhZmVQYXJzZShjdXN0b21UZW1wbGF0ZUVudGl0eSk7XG4gICAgZXhwZWN0KGN1c3RvbVRlbXBsYXRlUmVzdWx0LnN1Y2Nlc3MpLnRvQmUodHJ1ZSk7XG4gIH0pO1xuXG4gIHRlc3QoXCJzZWFyY2hUZXh0IGpzb24gc291cmNlIFpvZCDqtazsobAg6rKA7KadIOycoO2LuOydtCB3cmFwcGVyL2VsZW1lbnQg7YOA7J6F7J2EIOygle2Zle2eiCDtjJDsoJXtlbTslbwg7ZWc64ukXCIsICgpID0+IHtcbiAgICBleHBlY3QoaXNTZWFyY2hUZXh0SnNvblNvdXJjZVpvZFR5cGUoei5hcnJheSh6LnN0cmluZygpKSkpLnRvQmUodHJ1ZSk7XG4gICAgZXhwZWN0KGlzU2VhcmNoVGV4dEpzb25Tb3VyY2Vab2RUeXBlKHouYXJyYXkoei5zdHJpbmcoKSkub3B0aW9uYWwoKSkpLnRvQmUodHJ1ZSk7XG4gICAgZXhwZWN0KGlzU2VhcmNoVGV4dEpzb25Tb3VyY2Vab2RUeXBlKHouYXJyYXkoei5zdHJpbmcoKSkubnVsbGFibGUoKSkpLnRvQmUodHJ1ZSk7XG4gICAgZXhwZWN0KGlzU2VhcmNoVGV4dEpzb25Tb3VyY2Vab2RUeXBlKHouYXJyYXkoei5zdHJpbmcoKSkubnVsbGlzaCgpKSkudG9CZSh0cnVlKTtcblxuICAgIGV4cGVjdChpc1NlYXJjaFRleHRKc29uU291cmNlWm9kVHlwZSh6LmFycmF5KHouc3RyaW5nKCkubnVsbGFibGUoKSkpKS50b0JlKGZhbHNlKTtcbiAgICBleHBlY3QoaXNTZWFyY2hUZXh0SnNvblNvdXJjZVpvZFR5cGUoei5hcnJheSh6Lm51bWJlcigpKSkpLnRvQmUoZmFsc2UpO1xuICAgIGV4cGVjdChpc1NlYXJjaFRleHRKc29uU291cmNlWm9kVHlwZSh6LnN0cmluZygpKSkudG9CZShmYWxzZSk7XG4gIH0pO1xufSk7XG4iXSwibmFtZXMiOlsiZGVzY3JpYmUiLCJleHBlY3QiLCJ0ZXN0IiwieiIsIkVudGl0eUpzb25TY2hlbWEiLCJpc1NlYXJjaFRleHRKc29uU291cmNlWm9kVHlwZSIsIlRlbXBsYXRlT3B0aW9ucyIsImNyZWF0ZUJhc2VFbnRpdHkiLCJpZCIsInRpdGxlIiwidGFibGUiLCJwcm9wcyIsIm5hbWUiLCJ0eXBlIiwic291cmNlQ29sdW1ucyIsImNhc2VJbnNlbnNpdGl2ZSIsImluZGV4ZXMiLCJ1c2luZyIsImNvbHVtbnMiLCJvcGNsYXNzIiwic3Vic2V0cyIsIkEiLCJlbnVtcyIsImtub3duT3BjbGFzcyIsImtub3duUmVzdWx0Iiwic2FmZVBhcnNlIiwic3VjY2VzcyIsInRvQmUiLCJmcmVlT3BjbGFzcyIsImZyZWVSZXN1bHQiLCJsZWdhY3lWZWN0b3JPcHMiLCJ2ZWN0b3JPcHMiLCJtIiwiZWZDb25zdHJ1Y3Rpb24iLCJsZWdhY3lSZXN1bHQiLCJ1bmtub3duU291cmNlIiwidW5rbm93blJlc3VsdCIsInVuc3VwcG9ydGVkU291cmNlVHlwZSIsInVuc3VwcG9ydGVkUmVzdWx0IiwibnVsbGFibGVXcmFwcGVyIiwid3JhcHBlclJlc3VsdCIsIm51bGxhYmxlRWxlbWVudCIsIm51bGxhYmxlRWxlbWVudFJlc3VsdCIsImN1c3RvbU5hbWVkVHlwZSIsImN1c3RvbU5hbWVkVHlwZVJlc3VsdCIsInZhbGlkRW50aXR5IiwidmFsaWRUZW1wbGF0ZUVudGl0eSIsImVudGl0eUlkIiwidmFsaWRSZXN1bHQiLCJzaGFwZSIsImVudGl0eSIsImludmFsaWRFbnRpdHkiLCJpbnZhbGlkVGVtcGxhdGVFbnRpdHkiLCJpbnZhbGlkUmVzdWx0IiwiY3VzdG9tVGVtcGxhdGVFbnRpdHkiLCJjdXN0b21UZW1wbGF0ZVJlc3VsdCIsImFycmF5Iiwic3RyaW5nIiwib3B0aW9uYWwiLCJudWxsYWJsZSIsIm51bGxpc2giLCJudW1iZXIiXSwibWFwcGluZ3MiOiJBQUFBLFNBQVNBLFFBQVEsRUFBRUMsTUFBTSxFQUFFQyxJQUFJLFFBQVEsU0FBUztBQUNoRCxTQUFTQyxDQUFDLFFBQVEsTUFBTTtBQUN4QixTQUFTQyxnQkFBZ0IsRUFBRUMsNkJBQTZCLEVBQUVDLGVBQWUsUUFBUSxjQUFXO0FBRTVGLFNBQVNDO0lBQ1AsT0FBTztRQUNMQyxJQUFJO1FBQ0pDLE9BQU87UUFDUEMsT0FBTztRQUNQQyxPQUFPO1lBQ0w7Z0JBQUVDLE1BQU07Z0JBQU1DLE1BQU07WUFBVTtZQUM5QjtnQkFBRUQsTUFBTTtnQkFBU0MsTUFBTTtZQUFTO1lBQ2hDO2dCQUFFRCxNQUFNO2dCQUFRQyxNQUFNO1lBQVc7WUFDakM7Z0JBQUVELE1BQU07Z0JBQVdDLE1BQU07Z0JBQVFMLElBQUk7WUFBYztZQUNuRDtnQkFDRUksTUFBTTtnQkFDTkMsTUFBTTtnQkFDTkMsZUFBZTtvQkFBQzt3QkFBRUYsTUFBTTt3QkFBU0csaUJBQWlCO29CQUFLO2lCQUFFO1lBQzNEO1NBQ0Q7UUFDREMsU0FBUztZQUNQO2dCQUNFSCxNQUFNO2dCQUNORCxNQUFNO2dCQUNOSyxPQUFPO2dCQUNQQyxTQUFTO29CQUFDO3dCQUFFTixNQUFNO3dCQUFlTyxTQUFTO29CQUFlO2lCQUFFO1lBQzdEO1NBQ0Q7UUFDREMsU0FBUztZQUNQQyxHQUFHO2dCQUFDO2dCQUFNO2dCQUFTO2dCQUFRO2dCQUFXO2FBQWM7UUFDdEQ7UUFDQUMsT0FBTyxDQUFDO0lBQ1Y7QUFDRjtBQUVBdEIsU0FBUyxrREFBa0Q7SUFDekRFLEtBQUssc0RBQXNEO1FBQ3pELE1BQU1xQixlQUFlaEI7UUFDckIsTUFBTWlCLGNBQWNwQixpQkFBaUJxQixTQUFTLENBQUNGO1FBQy9DdEIsT0FBT3VCLFlBQVlFLE9BQU8sRUFBRUMsSUFBSSxDQUFDO1FBRWpDLE1BQU1DLGNBQWNyQjtRQUNwQnFCLFlBQVla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
|
package/dist/typings/knex.d.js
DELETED
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
/** biome-ignore-all lint/correctness/noUnusedImports: d.ts */ /** biome-ignore-all lint/suspicious/noExplicitAny: d.ts */ /** biome-ignore-all lint/correctness/noUnusedVariables: d.ts */ export { };
|
|
2
|
-
|
|
3
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90eXBpbmdzL2tuZXguZC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiogYmlvbWUtaWdub3JlLWFsbCBsaW50L2NvcnJlY3RuZXNzL25vVW51c2VkSW1wb3J0czogZC50cyAqL1xuLyoqIGJpb21lLWlnbm9yZS1hbGwgbGludC9zdXNwaWNpb3VzL25vRXhwbGljaXRBbnk6IGQudHMgKi9cbi8qKiBiaW9tZS1pZ25vcmUtYWxsIGxpbnQvY29ycmVjdG5lc3Mvbm9VbnVzZWRWYXJpYWJsZXM6IGQudHMgKi9cblxuaW1wb3J0IHR5cGUgeyBLbmV4IH0gZnJvbSBcImtuZXhcIjtcblxuZGVjbGFyZSBtb2R1bGUgXCJrbmV4XCIge1xuICBuYW1lc3BhY2UgS25leCB7XG4gICAgaW50ZXJmYWNlIFF1ZXJ5QnVpbGRlciB7XG4gICAgICBjb2x1bW5JbmZvPFRSZWNvcmQ+KGNvbHVtbj86IGtleW9mIFRSZWNvcmQpOiBQcm9taXNlPEtuZXguQ29sdW1uSW5mbyB8IENvbHVtbkluZm9zT2JqPjtcblxuICAgICAgd2hlcmVCZXR3ZWVuPFRSZWNvcmQsIFRSZXN1bHQ+KFxuICAgICAgICBjb2x1bW5OYW1lOiBzdHJpbmcsXG4gICAgICAgIHJhbmdlOiByZWFkb25seSBbYW55LCBhbnldLFxuICAgICAgKTogS25leC5RdWVyeUJ1aWxkZXI7XG4gICAgfVxuXG4gICAgdHlwZSBDb2x1bW5JbmZvc09iaiA9IHtcbiAgICAgIFtjb2x1bW5OYW1lOiBzdHJpbmddOiBLbmV4LkNvbHVtbkluZm87XG4gICAgfTtcbiAgfVxufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDREQUE0RCxHQUM1RCx5REFBeUQsR0FDekQsOERBQThELEdBRTlELFdBQWlDIn0=
|