semola 0.5.1 → 0.5.3
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/README.md +144 -29
- package/dist/api/core/index.cjs +206 -0
- package/dist/api/core/index.d.cts +21 -0
- package/dist/api/core/index.d.cts.map +1 -0
- package/dist/api/core/index.d.mts +21 -0
- package/dist/api/core/index.d.mts.map +1 -0
- package/dist/api/core/index.mjs +208 -0
- package/dist/api/core/index.mjs.map +1 -0
- package/dist/api/core/types.d.cts +107 -0
- package/dist/api/core/types.d.cts.map +1 -0
- package/dist/api/core/types.d.mts +107 -0
- package/dist/api/core/types.d.mts.map +1 -0
- package/dist/api/middleware/index.cjs +8 -0
- package/dist/api/middleware/index.d.cts +11 -0
- package/dist/api/middleware/index.d.cts.map +1 -0
- package/dist/api/middleware/index.d.mts +11 -0
- package/dist/api/middleware/index.d.mts.map +1 -0
- package/dist/api/middleware/index.mjs +10 -0
- package/dist/api/middleware/index.mjs.map +1 -0
- package/dist/api/middleware/types.d.cts +16 -0
- package/dist/api/middleware/types.d.cts.map +1 -0
- package/dist/api/middleware/types.d.mts +16 -0
- package/dist/api/middleware/types.d.mts.map +1 -0
- package/dist/api/openapi/index.cjs +254 -0
- package/dist/api/openapi/index.mjs +256 -0
- package/dist/api/openapi/index.mjs.map +1 -0
- package/dist/api/openapi/types.d.cts +60 -0
- package/dist/api/openapi/types.d.cts.map +1 -0
- package/dist/api/openapi/types.d.mts +60 -0
- package/dist/api/openapi/types.d.mts.map +1 -0
- package/dist/api/validation/index.cjs +64 -0
- package/dist/api/validation/index.mjs +61 -0
- package/dist/api/validation/index.mjs.map +1 -0
- package/dist/cache/types.d.cts +17 -0
- package/dist/cache/types.d.cts.map +1 -0
- package/dist/cache/types.d.mts +17 -0
- package/dist/cache/types.d.mts.map +1 -0
- package/dist/cron/builder/index.cjs +166 -0
- package/dist/cron/builder/index.d.cts +28 -0
- package/dist/cron/builder/index.d.cts.map +1 -0
- package/dist/cron/builder/index.d.mts +28 -0
- package/dist/cron/builder/index.d.mts.map +1 -0
- package/dist/cron/builder/index.mjs +163 -0
- package/dist/cron/builder/index.mjs.map +1 -0
- package/dist/cron/builder/types.cjs +27 -0
- package/dist/cron/builder/types.d.cts +79 -0
- package/dist/cron/builder/types.d.cts.map +1 -0
- package/dist/cron/builder/types.d.mts +79 -0
- package/dist/cron/builder/types.d.mts.map +1 -0
- package/dist/cron/builder/types.mjs +28 -0
- package/dist/cron/builder/types.mjs.map +1 -0
- package/dist/cron/core/index.cjs +308 -0
- package/dist/cron/core/index.d.cts +39 -0
- package/dist/cron/core/index.d.cts.map +1 -0
- package/dist/cron/core/index.d.mts +39 -0
- package/dist/cron/core/index.d.mts.map +1 -0
- package/dist/cron/core/index.mjs +310 -0
- package/dist/cron/core/index.mjs.map +1 -0
- package/dist/cron/core/scanner.cjs +237 -0
- package/dist/cron/core/scanner.mjs +238 -0
- package/dist/cron/core/scanner.mjs.map +1 -0
- package/dist/cron/core/types.d.cts +11 -0
- package/dist/cron/core/types.d.cts.map +1 -0
- package/dist/cron/core/types.d.mts +11 -0
- package/dist/cron/core/types.d.mts.map +1 -0
- package/dist/errors/types.d.cts +5 -0
- package/dist/errors/types.d.cts.map +1 -0
- package/dist/errors/types.d.mts +5 -0
- package/dist/errors/types.d.mts.map +1 -0
- package/dist/i18n/types.d.cts +13 -0
- package/dist/i18n/types.d.cts.map +1 -0
- package/dist/i18n/types.d.mts +13 -0
- package/dist/i18n/types.d.mts.map +1 -0
- package/dist/lib/api/index.cjs +5 -0
- package/dist/lib/api/index.d.cts +5 -0
- package/dist/lib/api/index.d.mts +5 -0
- package/dist/lib/api/index.mjs +3 -0
- package/dist/lib/cache/index.cjs +74 -0
- package/dist/lib/cache/index.d.cts +36 -0
- package/dist/lib/cache/index.d.cts.map +1 -0
- package/dist/lib/cache/index.d.mts +36 -0
- package/dist/lib/cache/index.d.mts.map +1 -0
- package/dist/lib/cache/index.mjs +75 -0
- package/dist/lib/cache/index.mjs.map +1 -0
- package/dist/lib/cron/index.cjs +13 -0
- package/dist/lib/cron/index.d.cts +4 -0
- package/dist/lib/cron/index.d.mts +4 -0
- package/dist/lib/cron/index.mjs +4 -0
- package/dist/lib/errors/index.cjs +30 -0
- package/dist/lib/errors/index.d.cts +13 -0
- package/dist/lib/errors/index.d.cts.map +1 -0
- package/dist/lib/errors/index.d.mts +13 -0
- package/dist/lib/errors/index.d.mts.map +1 -0
- package/dist/lib/errors/index.mjs +28 -0
- package/dist/lib/errors/index.mjs.map +1 -0
- package/dist/lib/i18n/index.cjs +42 -0
- package/dist/lib/i18n/index.d.cts +20 -0
- package/dist/lib/i18n/index.d.cts.map +1 -0
- package/dist/lib/i18n/index.d.mts +20 -0
- package/dist/lib/i18n/index.d.mts.map +1 -0
- package/dist/lib/i18n/index.mjs +43 -0
- package/dist/lib/i18n/index.mjs.map +1 -0
- package/dist/lib/logging/index.cjs +18 -0
- package/dist/lib/logging/index.d.cts +7 -0
- package/dist/lib/logging/index.d.mts +7 -0
- package/dist/lib/logging/index.mjs +5 -0
- package/dist/lib/orm/index.cjs +20 -0
- package/dist/lib/orm/index.d.cts +7 -0
- package/dist/lib/orm/index.d.mts +7 -0
- package/dist/lib/orm/index.mjs +6 -0
- package/dist/lib/policy/index.cjs +99 -0
- package/dist/lib/policy/index.d.cts +21 -0
- package/dist/lib/policy/index.d.cts.map +1 -0
- package/dist/lib/policy/index.d.mts +21 -0
- package/dist/lib/policy/index.d.mts.map +1 -0
- package/dist/lib/policy/index.mjs +81 -0
- package/dist/lib/policy/index.mjs.map +1 -0
- package/dist/lib/prompts/index.cjs +409 -0
- package/dist/lib/prompts/index.d.cts +31 -0
- package/dist/lib/prompts/index.d.cts.map +1 -0
- package/dist/lib/prompts/index.d.mts +31 -0
- package/dist/lib/prompts/index.d.mts.map +1 -0
- package/dist/lib/prompts/index.mjs +405 -0
- package/dist/lib/prompts/index.mjs.map +1 -0
- package/dist/lib/pubsub/index.cjs +117 -0
- package/dist/lib/pubsub/index.d.cts +36 -0
- package/dist/lib/pubsub/index.d.cts.map +1 -0
- package/dist/lib/pubsub/index.d.mts +36 -0
- package/dist/lib/pubsub/index.d.mts.map +1 -0
- package/dist/lib/pubsub/index.mjs +118 -0
- package/dist/lib/pubsub/index.mjs.map +1 -0
- package/dist/lib/queue/index.cjs +182 -0
- package/dist/lib/queue/index.d.cts +32 -0
- package/dist/lib/queue/index.d.cts.map +1 -0
- package/dist/lib/queue/index.d.mts +32 -0
- package/dist/lib/queue/index.d.mts.map +1 -0
- package/dist/lib/queue/index.mjs +183 -0
- package/dist/lib/queue/index.mjs.map +1 -0
- package/dist/lib/workflow/index.cjs +534 -0
- package/dist/lib/workflow/index.d.cts +7 -0
- package/dist/lib/workflow/index.d.cts.map +1 -0
- package/dist/lib/workflow/index.d.mts +7 -0
- package/dist/lib/workflow/index.d.mts.map +1 -0
- package/dist/lib/workflow/index.mjs +535 -0
- package/dist/lib/workflow/index.mjs.map +1 -0
- package/dist/logging/core/index.cjs +99 -0
- package/dist/logging/core/index.d.cts +26 -0
- package/dist/logging/core/index.d.cts.map +1 -0
- package/dist/logging/core/index.d.mts +26 -0
- package/dist/logging/core/index.d.mts.map +1 -0
- package/dist/logging/core/index.mjs +99 -0
- package/dist/logging/core/index.mjs.map +1 -0
- package/dist/logging/core/types.cjs +10 -0
- package/dist/logging/core/types.d.cts +22 -0
- package/dist/logging/core/types.d.cts.map +1 -0
- package/dist/logging/core/types.d.mts +22 -0
- package/dist/logging/core/types.d.mts.map +1 -0
- package/dist/logging/core/types.mjs +12 -0
- package/dist/logging/core/types.mjs.map +1 -0
- package/dist/logging/formatter/index.cjs +119 -0
- package/dist/logging/formatter/index.d.cts +27 -0
- package/dist/logging/formatter/index.d.cts.map +1 -0
- package/dist/logging/formatter/index.d.mts +27 -0
- package/dist/logging/formatter/index.d.mts.map +1 -0
- package/dist/logging/formatter/index.mjs +115 -0
- package/dist/logging/formatter/index.mjs.map +1 -0
- package/dist/logging/formatter/types.d.cts +5 -0
- package/dist/logging/formatter/types.d.cts.map +1 -0
- package/dist/logging/formatter/types.d.mts +5 -0
- package/dist/logging/formatter/types.d.mts.map +1 -0
- package/dist/logging/provider/index.cjs +165 -0
- package/dist/logging/provider/index.d.cts +28 -0
- package/dist/logging/provider/index.d.cts.map +1 -0
- package/dist/logging/provider/index.d.mts +28 -0
- package/dist/logging/provider/index.d.mts.map +1 -0
- package/dist/logging/provider/index.mjs +165 -0
- package/dist/logging/provider/index.mjs.map +1 -0
- package/dist/logging/provider/types.d.cts +23 -0
- package/dist/logging/provider/types.d.cts.map +1 -0
- package/dist/logging/provider/types.d.mts +23 -0
- package/dist/logging/provider/types.d.mts.map +1 -0
- package/dist/node_modules/@standard-schema/spec/dist/index.d.cts +80 -0
- package/dist/node_modules/@standard-schema/spec/dist/index.d.cts.map +1 -0
- package/dist/node_modules/@standard-schema/spec/dist/index.d.mts +80 -0
- package/dist/node_modules/@standard-schema/spec/dist/index.d.mts.map +1 -0
- package/dist/orm/column.cjs +137 -0
- package/dist/orm/column.d.cts +121 -0
- package/dist/orm/column.d.cts.map +1 -0
- package/dist/orm/column.d.mts +121 -0
- package/dist/orm/column.d.mts.map +1 -0
- package/dist/orm/column.mjs +132 -0
- package/dist/orm/column.mjs.map +1 -0
- package/dist/orm/dialect/index.cjs +14 -0
- package/dist/orm/dialect/index.mjs +16 -0
- package/dist/orm/dialect/index.mjs.map +1 -0
- package/dist/orm/dialect/mysql.cjs +31 -0
- package/dist/orm/dialect/mysql.mjs +33 -0
- package/dist/orm/dialect/mysql.mjs.map +1 -0
- package/dist/orm/dialect/postgres.cjs +23 -0
- package/dist/orm/dialect/postgres.mjs +25 -0
- package/dist/orm/dialect/postgres.mjs.map +1 -0
- package/dist/orm/dialect/sqlite.cjs +31 -0
- package/dist/orm/dialect/sqlite.mjs +33 -0
- package/dist/orm/dialect/sqlite.mjs.map +1 -0
- package/dist/orm/dialect/utils.cjs +8 -0
- package/dist/orm/dialect/utils.mjs +10 -0
- package/dist/orm/dialect/utils.mjs.map +1 -0
- package/dist/orm/internal/table-columns.cjs +31 -0
- package/dist/orm/internal/table-columns.mjs +32 -0
- package/dist/orm/internal/table-columns.mjs.map +1 -0
- package/dist/orm/internal/table-lookup.cjs +35 -0
- package/dist/orm/internal/table-lookup.mjs +35 -0
- package/dist/orm/internal/table-lookup.mjs.map +1 -0
- package/dist/orm/internal/table-relations.cjs +28 -0
- package/dist/orm/internal/table-relations.mjs +29 -0
- package/dist/orm/internal/table-relations.mjs.map +1 -0
- package/dist/orm/migration/config.cjs +7 -0
- package/dist/orm/migration/config.d.cts +7 -0
- package/dist/orm/migration/config.d.cts.map +1 -0
- package/dist/orm/migration/config.d.mts +7 -0
- package/dist/orm/migration/config.d.mts.map +1 -0
- package/dist/orm/migration/config.mjs +8 -0
- package/dist/orm/migration/config.mjs.map +1 -0
- package/dist/orm/migration/types.d.cts +20 -0
- package/dist/orm/migration/types.d.cts.map +1 -0
- package/dist/orm/migration/types.d.mts +20 -0
- package/dist/orm/migration/types.d.mts.map +1 -0
- package/dist/orm/orm.cjs +41 -0
- package/dist/orm/orm.d.cts +18 -0
- package/dist/orm/orm.d.cts.map +1 -0
- package/dist/orm/orm.d.mts +18 -0
- package/dist/orm/orm.d.mts.map +1 -0
- package/dist/orm/orm.mjs +43 -0
- package/dist/orm/orm.mjs.map +1 -0
- package/dist/orm/relation.cjs +18 -0
- package/dist/orm/relation.d.cts +8 -0
- package/dist/orm/relation.d.cts.map +1 -0
- package/dist/orm/relation.d.mts +8 -0
- package/dist/orm/relation.d.mts.map +1 -0
- package/dist/orm/relation.mjs +19 -0
- package/dist/orm/relation.mjs.map +1 -0
- package/dist/orm/runtime/builders/mutations.cjs +29 -0
- package/dist/orm/runtime/builders/mutations.mjs +28 -0
- package/dist/orm/runtime/builders/mutations.mjs.map +1 -0
- package/dist/orm/runtime/builders/select.cjs +18 -0
- package/dist/orm/runtime/builders/select.mjs +19 -0
- package/dist/orm/runtime/builders/select.mjs.map +1 -0
- package/dist/orm/runtime/client.cjs +90 -0
- package/dist/orm/runtime/client.mjs +92 -0
- package/dist/orm/runtime/client.mjs.map +1 -0
- package/dist/orm/runtime/context.cjs +49 -0
- package/dist/orm/runtime/context.mjs +51 -0
- package/dist/orm/runtime/context.mjs.map +1 -0
- package/dist/orm/runtime/dialect/index.cjs +11 -0
- package/dist/orm/runtime/dialect/index.mjs +13 -0
- package/dist/orm/runtime/dialect/index.mjs.map +1 -0
- package/dist/orm/runtime/dialect/mysql.cjs +95 -0
- package/dist/orm/runtime/dialect/mysql.mjs +97 -0
- package/dist/orm/runtime/dialect/mysql.mjs.map +1 -0
- package/dist/orm/runtime/dialect/postgres.cjs +51 -0
- package/dist/orm/runtime/dialect/postgres.mjs +53 -0
- package/dist/orm/runtime/dialect/postgres.mjs.map +1 -0
- package/dist/orm/runtime/dialect/sqlite.cjs +4 -0
- package/dist/orm/runtime/dialect/sqlite.mjs +7 -0
- package/dist/orm/runtime/dialect/sqlite.mjs.map +1 -0
- package/dist/orm/runtime/errors.cjs +19 -0
- package/dist/orm/runtime/errors.mjs +21 -0
- package/dist/orm/runtime/errors.mjs.map +1 -0
- package/dist/orm/runtime/hydrate/many.cjs +46 -0
- package/dist/orm/runtime/hydrate/many.mjs +48 -0
- package/dist/orm/runtime/hydrate/many.mjs.map +1 -0
- package/dist/orm/runtime/hydrate/one.cjs +38 -0
- package/dist/orm/runtime/hydrate/one.mjs +40 -0
- package/dist/orm/runtime/hydrate/one.mjs.map +1 -0
- package/dist/orm/runtime/hydrate.cjs +49 -0
- package/dist/orm/runtime/hydrate.mjs +51 -0
- package/dist/orm/runtime/hydrate.mjs.map +1 -0
- package/dist/orm/runtime/rows.cjs +30 -0
- package/dist/orm/runtime/rows.mjs +31 -0
- package/dist/orm/runtime/rows.mjs.map +1 -0
- package/dist/orm/runtime/utils.cjs +27 -0
- package/dist/orm/runtime/utils.mjs +27 -0
- package/dist/orm/runtime/utils.mjs.map +1 -0
- package/dist/orm/sql/parse-array.cjs +64 -0
- package/dist/orm/sql/parse-array.mjs +66 -0
- package/dist/orm/sql/parse-array.mjs.map +1 -0
- package/dist/orm/sql/plan/select.cjs +36 -0
- package/dist/orm/sql/plan/select.mjs +38 -0
- package/dist/orm/sql/plan/select.mjs.map +1 -0
- package/dist/orm/sql/plan/where/operators.cjs +95 -0
- package/dist/orm/sql/plan/where/operators.mjs +97 -0
- package/dist/orm/sql/plan/where/operators.mjs.map +1 -0
- package/dist/orm/sql/plan/where.cjs +59 -0
- package/dist/orm/sql/plan/where.mjs +61 -0
- package/dist/orm/sql/plan/where.mjs.map +1 -0
- package/dist/orm/sql/serialize/clauses.cjs +36 -0
- package/dist/orm/sql/serialize/clauses.mjs +37 -0
- package/dist/orm/sql/serialize/clauses.mjs.map +1 -0
- package/dist/orm/sql/serialize/joins.cjs +31 -0
- package/dist/orm/sql/serialize/joins.mjs +33 -0
- package/dist/orm/sql/serialize/joins.mjs.map +1 -0
- package/dist/orm/sql/serialize/values.cjs +30 -0
- package/dist/orm/sql/serialize/values.mjs +32 -0
- package/dist/orm/sql/serialize/values.mjs.map +1 -0
- package/dist/orm/sql/serialize/where/predicate.cjs +73 -0
- package/dist/orm/sql/serialize/where/predicate.mjs +75 -0
- package/dist/orm/sql/serialize/where/predicate.mjs.map +1 -0
- package/dist/orm/sql/serialize/where/tree.cjs +26 -0
- package/dist/orm/sql/serialize/where/tree.mjs +28 -0
- package/dist/orm/sql/serialize/where/tree.mjs.map +1 -0
- package/dist/orm/sql/serialize/where.cjs +10 -0
- package/dist/orm/sql/serialize/where.mjs +12 -0
- package/dist/orm/sql/serialize/where.mjs.map +1 -0
- package/dist/orm/sql/serialize.cjs +24 -0
- package/dist/orm/sql/serialize.mjs +25 -0
- package/dist/orm/sql/serialize.mjs.map +1 -0
- package/dist/orm/table.cjs +12 -0
- package/dist/orm/table.d.cts +12 -0
- package/dist/orm/table.d.cts.map +1 -0
- package/dist/orm/table.d.mts +12 -0
- package/dist/orm/table.d.mts.map +1 -0
- package/dist/orm/table.mjs +14 -0
- package/dist/orm/table.mjs.map +1 -0
- package/dist/orm/types.d.cts +183 -0
- package/dist/orm/types.d.cts.map +1 -0
- package/dist/orm/types.d.mts +183 -0
- package/dist/orm/types.d.mts.map +1 -0
- package/dist/policy/helpers.cjs +206 -0
- package/dist/policy/helpers.d.cts +50 -0
- package/dist/policy/helpers.d.cts.map +1 -0
- package/dist/policy/helpers.d.mts +50 -0
- package/dist/policy/helpers.d.mts.map +1 -0
- package/dist/policy/helpers.mjs +190 -0
- package/dist/policy/helpers.mjs.map +1 -0
- package/dist/policy/types.d.cts +16 -0
- package/dist/policy/types.d.cts.map +1 -0
- package/dist/policy/types.d.mts +16 -0
- package/dist/policy/types.d.mts.map +1 -0
- package/dist/prompts/core/keys.cjs +165 -0
- package/dist/prompts/core/keys.mjs +167 -0
- package/dist/prompts/core/keys.mjs.map +1 -0
- package/dist/prompts/core/runtime.cjs +104 -0
- package/dist/prompts/core/runtime.mjs +106 -0
- package/dist/prompts/core/runtime.mjs.map +1 -0
- package/dist/prompts/core/session.cjs +98 -0
- package/dist/prompts/core/session.mjs +100 -0
- package/dist/prompts/core/session.mjs.map +1 -0
- package/dist/prompts/core/types.d.cts +21 -0
- package/dist/prompts/core/types.d.cts.map +1 -0
- package/dist/prompts/core/types.d.mts +21 -0
- package/dist/prompts/core/types.d.mts.map +1 -0
- package/dist/prompts/types.d.cts +52 -0
- package/dist/prompts/types.d.cts.map +1 -0
- package/dist/prompts/types.d.mts +52 -0
- package/dist/prompts/types.d.mts.map +1 -0
- package/dist/pubsub/types.d.cts +10 -0
- package/dist/pubsub/types.d.cts.map +1 -0
- package/dist/pubsub/types.d.mts +10 -0
- package/dist/pubsub/types.d.mts.map +1 -0
- package/dist/queue/types.d.cts +47 -0
- package/dist/queue/types.d.cts.map +1 -0
- package/dist/queue/types.d.mts +47 -0
- package/dist/queue/types.d.mts.map +1 -0
- package/dist/workflow/types.d.cts +83 -0
- package/dist/workflow/types.d.cts.map +1 -0
- package/dist/workflow/types.d.mts +83 -0
- package/dist/workflow/types.d.mts.map +1 -0
- package/package.json +112 -16
- package/dist/lib/api/core/index.d.ts +0 -15
- package/dist/lib/api/core/index.d.ts.map +0 -1
- package/dist/lib/api/core/index.js +0 -218
- package/dist/lib/api/core/index.js.map +0 -1
- package/dist/lib/api/core/index.test.d.ts +0 -2
- package/dist/lib/api/core/index.test.d.ts.map +0 -1
- package/dist/lib/api/core/index.test.js +0 -219
- package/dist/lib/api/core/index.test.js.map +0 -1
- package/dist/lib/api/core/types.d.ts +0 -109
- package/dist/lib/api/core/types.d.ts.map +0 -1
- package/dist/lib/api/core/types.js +0 -2
- package/dist/lib/api/core/types.js.map +0 -1
- package/dist/lib/api/index.d.ts +0 -5
- package/dist/lib/api/index.d.ts.map +0 -1
- package/dist/lib/api/index.js +0 -3
- package/dist/lib/api/index.js.map +0 -1
- package/dist/lib/api/middleware/index.d.ts +0 -7
- package/dist/lib/api/middleware/index.d.ts.map +0 -1
- package/dist/lib/api/middleware/index.js +0 -7
- package/dist/lib/api/middleware/index.js.map +0 -1
- package/dist/lib/api/middleware/index.test.d.ts +0 -2
- package/dist/lib/api/middleware/index.test.d.ts.map +0 -1
- package/dist/lib/api/middleware/index.test.js +0 -67
- package/dist/lib/api/middleware/index.test.js.map +0 -1
- package/dist/lib/api/middleware/types.d.ts +0 -12
- package/dist/lib/api/middleware/types.d.ts.map +0 -1
- package/dist/lib/api/middleware/types.js +0 -2
- package/dist/lib/api/middleware/types.js.map +0 -1
- package/dist/lib/api/openapi/index.d.ts +0 -31
- package/dist/lib/api/openapi/index.d.ts.map +0 -1
- package/dist/lib/api/openapi/index.js +0 -284
- package/dist/lib/api/openapi/index.js.map +0 -1
- package/dist/lib/api/openapi/index.test.d.ts +0 -2
- package/dist/lib/api/openapi/index.test.d.ts.map +0 -1
- package/dist/lib/api/openapi/index.test.js +0 -359
- package/dist/lib/api/openapi/index.test.js.map +0 -1
- package/dist/lib/api/openapi/types.d.ts +0 -57
- package/dist/lib/api/openapi/types.d.ts.map +0 -1
- package/dist/lib/api/openapi/types.js +0 -5
- package/dist/lib/api/openapi/types.js.map +0 -1
- package/dist/lib/api/validation/index.d.ts +0 -33
- package/dist/lib/api/validation/index.d.ts.map +0 -1
- package/dist/lib/api/validation/index.js +0 -92
- package/dist/lib/api/validation/index.js.map +0 -1
- package/dist/lib/api/validation/index.test.d.ts +0 -2
- package/dist/lib/api/validation/index.test.d.ts.map +0 -1
- package/dist/lib/api/validation/index.test.js +0 -135
- package/dist/lib/api/validation/index.test.js.map +0 -1
- package/dist/lib/cache/index.d.ts +0 -25
- package/dist/lib/cache/index.d.ts.map +0 -1
- package/dist/lib/cache/index.js +0 -62
- package/dist/lib/cache/index.js.map +0 -1
- package/dist/lib/cache/index.test.d.ts +0 -2
- package/dist/lib/cache/index.test.d.ts.map +0 -1
- package/dist/lib/cache/index.test.js +0 -314
- package/dist/lib/cache/index.test.js.map +0 -1
- package/dist/lib/cache/types.d.ts +0 -5
- package/dist/lib/cache/types.d.ts.map +0 -1
- package/dist/lib/cache/types.js +0 -2
- package/dist/lib/cache/types.js.map +0 -1
- package/dist/lib/errors/index.d.ts +0 -9
- package/dist/lib/errors/index.d.ts.map +0 -1
- package/dist/lib/errors/index.js +0 -25
- package/dist/lib/errors/index.js.map +0 -1
- package/dist/lib/errors/index.test.d.ts +0 -2
- package/dist/lib/errors/index.test.d.ts.map +0 -1
- package/dist/lib/errors/index.test.js +0 -197
- package/dist/lib/errors/index.test.js.map +0 -1
- package/dist/lib/errors/types.d.ts +0 -2
- package/dist/lib/errors/types.d.ts.map +0 -1
- package/dist/lib/errors/types.js +0 -2
- package/dist/lib/errors/types.js.map +0 -1
- package/dist/lib/i18n/index.d.ts +0 -18
- package/dist/lib/i18n/index.d.ts.map +0 -1
- package/dist/lib/i18n/index.js +0 -38
- package/dist/lib/i18n/index.js.map +0 -1
- package/dist/lib/i18n/index.test.d.ts +0 -2
- package/dist/lib/i18n/index.test.d.ts.map +0 -1
- package/dist/lib/i18n/index.test.js +0 -402
- package/dist/lib/i18n/index.test.js.map +0 -1
- package/dist/lib/i18n/types.d.ts +0 -15
- package/dist/lib/i18n/types.d.ts.map +0 -1
- package/dist/lib/i18n/types.js +0 -2
- package/dist/lib/i18n/types.js.map +0 -1
- package/dist/lib/policy/index.d.ts +0 -9
- package/dist/lib/policy/index.d.ts.map +0 -1
- package/dist/lib/policy/index.js +0 -51
- package/dist/lib/policy/index.js.map +0 -1
- package/dist/lib/policy/index.test.d.ts +0 -2
- package/dist/lib/policy/index.test.d.ts.map +0 -1
- package/dist/lib/policy/index.test.js +0 -328
- package/dist/lib/policy/index.test.js.map +0 -1
- package/dist/lib/policy/types.d.ts +0 -27
- package/dist/lib/policy/types.d.ts.map +0 -1
- package/dist/lib/policy/types.js +0 -2
- package/dist/lib/policy/types.js.map +0 -1
- package/dist/lib/pubsub/index.d.ts +0 -23
- package/dist/lib/pubsub/index.d.ts.map +0 -1
- package/dist/lib/pubsub/index.js +0 -55
- package/dist/lib/pubsub/index.js.map +0 -1
- package/dist/lib/pubsub/index.test.d.ts +0 -2
- package/dist/lib/pubsub/index.test.d.ts.map +0 -1
- package/dist/lib/pubsub/index.test.js +0 -550
- package/dist/lib/pubsub/index.test.js.map +0 -1
- package/dist/lib/pubsub/types.d.ts +0 -7
- package/dist/lib/pubsub/types.d.ts.map +0 -1
- package/dist/lib/pubsub/types.js +0 -2
- package/dist/lib/pubsub/types.js.map +0 -1
- package/dist/lib/queue/index.d.ts +0 -28
- package/dist/lib/queue/index.d.ts.map +0 -1
- package/dist/lib/queue/index.js +0 -211
- package/dist/lib/queue/index.js.map +0 -1
- package/dist/lib/queue/index.test.d.ts +0 -2
- package/dist/lib/queue/index.test.d.ts.map +0 -1
- package/dist/lib/queue/index.test.js +0 -740
- package/dist/lib/queue/index.test.js.map +0 -1
- package/dist/lib/queue/types.d.ts +0 -52
- package/dist/lib/queue/types.d.ts.map +0 -1
- package/dist/lib/queue/types.js +0 -2
- package/dist/lib/queue/types.js.map +0 -1
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
//#region src/lib/orm/sql/serialize/clauses.ts
|
|
2
|
+
function buildLimitClause(sql, limit, offset, dialect) {
|
|
3
|
+
if (limit != null && offset != null) return sql`LIMIT ${limit} OFFSET ${offset}`;
|
|
4
|
+
if (limit != null) return sql`LIMIT ${limit}`;
|
|
5
|
+
if (offset != null) {
|
|
6
|
+
if (dialect === "mysql") return sql`LIMIT 18446744073709551615 OFFSET ${offset}`;
|
|
7
|
+
if (dialect === "sqlite") return sql`LIMIT -1 OFFSET ${offset}`;
|
|
8
|
+
return sql`OFFSET ${offset}`;
|
|
9
|
+
}
|
|
10
|
+
return sql``;
|
|
11
|
+
}
|
|
12
|
+
function buildOrderByClause(sql, table, plan) {
|
|
13
|
+
if (plan.orderBy.length === 0) return sql``;
|
|
14
|
+
const fragments = [];
|
|
15
|
+
for (const { key, direction } of plan.orderBy) {
|
|
16
|
+
const col = table.columns[key];
|
|
17
|
+
if (!col) continue;
|
|
18
|
+
if (direction === "desc") {
|
|
19
|
+
fragments.push(sql`${sql(col.meta.sqlName)} DESC`);
|
|
20
|
+
continue;
|
|
21
|
+
}
|
|
22
|
+
fragments.push(sql`${sql(col.meta.sqlName)} ASC`);
|
|
23
|
+
}
|
|
24
|
+
const firstOrderBy = fragments[0];
|
|
25
|
+
if (!firstOrderBy) return sql``;
|
|
26
|
+
let joined = firstOrderBy;
|
|
27
|
+
for (let index = 1; index < fragments.length; index++) {
|
|
28
|
+
const fragment = fragments[index];
|
|
29
|
+
if (!fragment) continue;
|
|
30
|
+
joined = sql`${joined}, ${fragment}`;
|
|
31
|
+
}
|
|
32
|
+
return sql`ORDER BY ${joined}`;
|
|
33
|
+
}
|
|
34
|
+
//#endregion
|
|
35
|
+
exports.buildLimitClause = buildLimitClause;
|
|
36
|
+
exports.buildOrderByClause = buildOrderByClause;
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
//#region src/lib/orm/sql/serialize/clauses.ts
|
|
2
|
+
function buildLimitClause(sql, limit, offset, dialect) {
|
|
3
|
+
if (limit != null && offset != null) return sql`LIMIT ${limit} OFFSET ${offset}`;
|
|
4
|
+
if (limit != null) return sql`LIMIT ${limit}`;
|
|
5
|
+
if (offset != null) {
|
|
6
|
+
if (dialect === "mysql") return sql`LIMIT 18446744073709551615 OFFSET ${offset}`;
|
|
7
|
+
if (dialect === "sqlite") return sql`LIMIT -1 OFFSET ${offset}`;
|
|
8
|
+
return sql`OFFSET ${offset}`;
|
|
9
|
+
}
|
|
10
|
+
return sql``;
|
|
11
|
+
}
|
|
12
|
+
function buildOrderByClause(sql, table, plan) {
|
|
13
|
+
if (plan.orderBy.length === 0) return sql``;
|
|
14
|
+
const fragments = [];
|
|
15
|
+
for (const { key, direction } of plan.orderBy) {
|
|
16
|
+
const col = table.columns[key];
|
|
17
|
+
if (!col) continue;
|
|
18
|
+
if (direction === "desc") {
|
|
19
|
+
fragments.push(sql`${sql(col.meta.sqlName)} DESC`);
|
|
20
|
+
continue;
|
|
21
|
+
}
|
|
22
|
+
fragments.push(sql`${sql(col.meta.sqlName)} ASC`);
|
|
23
|
+
}
|
|
24
|
+
const firstOrderBy = fragments[0];
|
|
25
|
+
if (!firstOrderBy) return sql``;
|
|
26
|
+
let joined = firstOrderBy;
|
|
27
|
+
for (let index = 1; index < fragments.length; index++) {
|
|
28
|
+
const fragment = fragments[index];
|
|
29
|
+
if (!fragment) continue;
|
|
30
|
+
joined = sql`${joined}, ${fragment}`;
|
|
31
|
+
}
|
|
32
|
+
return sql`ORDER BY ${joined}`;
|
|
33
|
+
}
|
|
34
|
+
//#endregion
|
|
35
|
+
export { buildLimitClause, buildOrderByClause };
|
|
36
|
+
|
|
37
|
+
//# sourceMappingURL=clauses.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"clauses.mjs","names":[],"sources":["../../../../src/lib/orm/sql/serialize/clauses.ts"],"sourcesContent":["import type { SQL, TransactionSQL } from \"bun\";\nimport type { Table } from \"../../table.js\";\nimport type { ColDefs, Dialect, SelectPlan } from \"../../types.js\";\n\nexport function buildLimitClause(\n sql: SQL | TransactionSQL,\n limit?: number,\n offset?: number,\n dialect?: Dialect,\n) {\n if (limit != null && offset != null) {\n return sql`LIMIT ${limit} OFFSET ${offset}`;\n }\n\n if (limit != null) {\n return sql`LIMIT ${limit}`;\n }\n\n if (offset != null) {\n if (dialect === \"mysql\") {\n return sql`LIMIT 18446744073709551615 OFFSET ${offset}`;\n }\n\n if (dialect === \"sqlite\") {\n return sql`LIMIT -1 OFFSET ${offset}`;\n }\n\n return sql`OFFSET ${offset}`;\n }\n\n return sql``;\n}\n\nexport function buildOrderByClause<T extends ColDefs>(\n sql: SQL | TransactionSQL,\n table: Table<T>,\n plan: SelectPlan<T>,\n) {\n if (plan.orderBy.length === 0) {\n return sql``;\n }\n\n const fragments: SQL.Query<unknown>[] = [];\n\n for (const { key, direction } of plan.orderBy) {\n const col = table.columns[key];\n\n if (!col) {\n continue;\n }\n\n if (direction === \"desc\") {\n fragments.push(sql`${sql(col.meta.sqlName)} DESC`);\n continue;\n }\n\n fragments.push(sql`${sql(col.meta.sqlName)} ASC`);\n }\n\n const firstOrderBy = fragments[0];\n\n if (!firstOrderBy) {\n return sql``;\n }\n\n let joined = firstOrderBy;\n\n for (let index = 1; index < fragments.length; index++) {\n const fragment = fragments[index];\n\n if (!fragment) {\n continue;\n }\n\n joined = sql`${joined}, ${fragment}`;\n }\n\n return sql`ORDER BY ${joined}`;\n}\n"],"mappings":";AAIA,SAAgB,iBACd,KACA,OACA,QACA,SACA;AACA,KAAI,SAAS,QAAQ,UAAU,KAC7B,QAAO,GAAG,SAAS,MAAM,UAAU;AAGrC,KAAI,SAAS,KACX,QAAO,GAAG,SAAS;AAGrB,KAAI,UAAU,MAAM;AAClB,MAAI,YAAY,QACd,QAAO,GAAG,qCAAqC;AAGjD,MAAI,YAAY,SACd,QAAO,GAAG,mBAAmB;AAG/B,SAAO,GAAG,UAAU;;AAGtB,QAAO,GAAG;;AAGZ,SAAgB,mBACd,KACA,OACA,MACA;AACA,KAAI,KAAK,QAAQ,WAAW,EAC1B,QAAO,GAAG;CAGZ,MAAM,YAAkC,EAAE;AAE1C,MAAK,MAAM,EAAE,KAAK,eAAe,KAAK,SAAS;EAC7C,MAAM,MAAM,MAAM,QAAQ;AAE1B,MAAI,CAAC,IACH;AAGF,MAAI,cAAc,QAAQ;AACxB,aAAU,KAAK,GAAG,GAAG,IAAI,IAAI,KAAK,QAAQ,CAAC,OAAO;AAClD;;AAGF,YAAU,KAAK,GAAG,GAAG,IAAI,IAAI,KAAK,QAAQ,CAAC,MAAM;;CAGnD,MAAM,eAAe,UAAU;AAE/B,KAAI,CAAC,aACH,QAAO,GAAG;CAGZ,IAAI,SAAS;AAEb,MAAK,IAAI,QAAQ,GAAG,QAAQ,UAAU,QAAQ,SAAS;EACrD,MAAM,WAAW,UAAU;AAE3B,MAAI,CAAC,SACH;AAGF,WAAS,GAAG,GAAG,OAAO,IAAI;;AAG5B,QAAO,GAAG,YAAY"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
const require_table_lookup = require("../../internal/table-lookup.cjs");
|
|
2
|
+
const require_table_relations = require("../../internal/table-relations.cjs");
|
|
3
|
+
//#region src/lib/orm/sql/serialize/joins.ts
|
|
4
|
+
function buildJoinClauses(sql, table, relations, plan) {
|
|
5
|
+
if (plan.joins.length === 0) return sql``;
|
|
6
|
+
let joinClause = sql``;
|
|
7
|
+
const basePk = require_table_lookup.getPrimaryKeyColumn(table);
|
|
8
|
+
if (!basePk) return joinClause;
|
|
9
|
+
for (const [joinIndex, join] of plan.joins.entries()) {
|
|
10
|
+
const rel = relations[join.relationKey];
|
|
11
|
+
if (!rel) continue;
|
|
12
|
+
const target = rel.table();
|
|
13
|
+
const targetPk = require_table_lookup.getPrimaryKeyColumn(target);
|
|
14
|
+
if (!targetPk) continue;
|
|
15
|
+
const targetAlias = `${join.relationKey}_${joinIndex}`;
|
|
16
|
+
if (rel.kind === "one") {
|
|
17
|
+
joinClause = sql`${joinClause} LEFT JOIN ${sql(target.tableName)} AS ${sql(targetAlias)} ON ${sql(table.tableName)}.${sql(rel.foreignKey)} = ${sql(targetAlias)}.${sql(targetPk.col.meta.sqlName)}`;
|
|
18
|
+
continue;
|
|
19
|
+
}
|
|
20
|
+
let foreignSqlName = rel.foreignKey;
|
|
21
|
+
if (!foreignSqlName) {
|
|
22
|
+
const inferredForeignSqlName = require_table_relations.findManyForeignKeyByReference(target, basePk.col);
|
|
23
|
+
if (inferredForeignSqlName) foreignSqlName = inferredForeignSqlName;
|
|
24
|
+
}
|
|
25
|
+
if (!foreignSqlName) continue;
|
|
26
|
+
joinClause = sql`${joinClause} LEFT JOIN ${sql(target.tableName)} AS ${sql(targetAlias)} ON ${sql(targetAlias)}.${sql(foreignSqlName)} = ${sql(table.tableName)}.${sql(basePk.col.meta.sqlName)}`;
|
|
27
|
+
}
|
|
28
|
+
return joinClause;
|
|
29
|
+
}
|
|
30
|
+
//#endregion
|
|
31
|
+
exports.buildJoinClauses = buildJoinClauses;
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { getPrimaryKeyColumn } from "../../internal/table-lookup.mjs";
|
|
2
|
+
import { findManyForeignKeyByReference } from "../../internal/table-relations.mjs";
|
|
3
|
+
//#region src/lib/orm/sql/serialize/joins.ts
|
|
4
|
+
function buildJoinClauses(sql, table, relations, plan) {
|
|
5
|
+
if (plan.joins.length === 0) return sql``;
|
|
6
|
+
let joinClause = sql``;
|
|
7
|
+
const basePk = getPrimaryKeyColumn(table);
|
|
8
|
+
if (!basePk) return joinClause;
|
|
9
|
+
for (const [joinIndex, join] of plan.joins.entries()) {
|
|
10
|
+
const rel = relations[join.relationKey];
|
|
11
|
+
if (!rel) continue;
|
|
12
|
+
const target = rel.table();
|
|
13
|
+
const targetPk = getPrimaryKeyColumn(target);
|
|
14
|
+
if (!targetPk) continue;
|
|
15
|
+
const targetAlias = `${join.relationKey}_${joinIndex}`;
|
|
16
|
+
if (rel.kind === "one") {
|
|
17
|
+
joinClause = sql`${joinClause} LEFT JOIN ${sql(target.tableName)} AS ${sql(targetAlias)} ON ${sql(table.tableName)}.${sql(rel.foreignKey)} = ${sql(targetAlias)}.${sql(targetPk.col.meta.sqlName)}`;
|
|
18
|
+
continue;
|
|
19
|
+
}
|
|
20
|
+
let foreignSqlName = rel.foreignKey;
|
|
21
|
+
if (!foreignSqlName) {
|
|
22
|
+
const inferredForeignSqlName = findManyForeignKeyByReference(target, basePk.col);
|
|
23
|
+
if (inferredForeignSqlName) foreignSqlName = inferredForeignSqlName;
|
|
24
|
+
}
|
|
25
|
+
if (!foreignSqlName) continue;
|
|
26
|
+
joinClause = sql`${joinClause} LEFT JOIN ${sql(target.tableName)} AS ${sql(targetAlias)} ON ${sql(targetAlias)}.${sql(foreignSqlName)} = ${sql(table.tableName)}.${sql(basePk.col.meta.sqlName)}`;
|
|
27
|
+
}
|
|
28
|
+
return joinClause;
|
|
29
|
+
}
|
|
30
|
+
//#endregion
|
|
31
|
+
export { buildJoinClauses };
|
|
32
|
+
|
|
33
|
+
//# sourceMappingURL=joins.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"joins.mjs","names":[],"sources":["../../../../src/lib/orm/sql/serialize/joins.ts"],"sourcesContent":["import type { SQL, TransactionSQL } from \"bun\";\nimport {\n findManyForeignKeyByReference,\n getPrimaryKeyColumn,\n} from \"../../internal/table.js\";\nimport type { Table } from \"../../table.js\";\nimport type { ColDefs, RelationDefs, SelectPlan } from \"../../types.js\";\n\nexport function buildJoinClauses<T extends ColDefs>(\n sql: SQL | TransactionSQL,\n table: Table<T>,\n relations: RelationDefs,\n plan: SelectPlan<T>,\n) {\n if (plan.joins.length === 0) {\n return sql``;\n }\n\n let joinClause = sql``;\n const basePk = getPrimaryKeyColumn(table);\n\n if (!basePk) {\n return joinClause;\n }\n\n for (const [joinIndex, join] of plan.joins.entries()) {\n const rel = relations[join.relationKey];\n\n if (!rel) {\n continue;\n }\n\n const target = rel.table();\n const targetPk = getPrimaryKeyColumn(target);\n\n if (!targetPk) {\n continue;\n }\n\n const targetAlias = `${join.relationKey}_${joinIndex}`;\n\n if (rel.kind === \"one\") {\n joinClause = sql`${joinClause} LEFT JOIN ${sql(target.tableName)} AS ${sql(targetAlias)} ON ${sql(table.tableName)}.${sql(rel.foreignKey)} = ${sql(targetAlias)}.${sql(targetPk.col.meta.sqlName)}`;\n continue;\n }\n\n let foreignSqlName = rel.foreignKey;\n\n if (!foreignSqlName) {\n const inferredForeignSqlName = findManyForeignKeyByReference(\n target,\n basePk.col,\n );\n\n if (inferredForeignSqlName) {\n foreignSqlName = inferredForeignSqlName;\n }\n }\n\n if (!foreignSqlName) {\n continue;\n }\n\n joinClause = sql`${joinClause} LEFT JOIN ${sql(target.tableName)} AS ${sql(targetAlias)} ON ${sql(targetAlias)}.${sql(foreignSqlName)} = ${sql(table.tableName)}.${sql(basePk.col.meta.sqlName)}`;\n }\n\n return joinClause;\n}\n"],"mappings":";;;AAQA,SAAgB,iBACd,KACA,OACA,WACA,MACA;AACA,KAAI,KAAK,MAAM,WAAW,EACxB,QAAO,GAAG;CAGZ,IAAI,aAAa,GAAG;CACpB,MAAM,SAAS,oBAAoB,MAAM;AAEzC,KAAI,CAAC,OACH,QAAO;AAGT,MAAK,MAAM,CAAC,WAAW,SAAS,KAAK,MAAM,SAAS,EAAE;EACpD,MAAM,MAAM,UAAU,KAAK;AAE3B,MAAI,CAAC,IACH;EAGF,MAAM,SAAS,IAAI,OAAO;EAC1B,MAAM,WAAW,oBAAoB,OAAO;AAE5C,MAAI,CAAC,SACH;EAGF,MAAM,cAAc,GAAG,KAAK,YAAY,GAAG;AAE3C,MAAI,IAAI,SAAS,OAAO;AACtB,gBAAa,GAAG,GAAG,WAAW,aAAa,IAAI,OAAO,UAAU,CAAC,MAAM,IAAI,YAAY,CAAC,MAAM,IAAI,MAAM,UAAU,CAAC,GAAG,IAAI,IAAI,WAAW,CAAC,KAAK,IAAI,YAAY,CAAC,GAAG,IAAI,SAAS,IAAI,KAAK,QAAQ;AACjM;;EAGF,IAAI,iBAAiB,IAAI;AAEzB,MAAI,CAAC,gBAAgB;GACnB,MAAM,yBAAyB,8BAC7B,QACA,OAAO,IACR;AAED,OAAI,uBACF,kBAAiB;;AAIrB,MAAI,CAAC,eACH;AAGF,eAAa,GAAG,GAAG,WAAW,aAAa,IAAI,OAAO,UAAU,CAAC,MAAM,IAAI,YAAY,CAAC,MAAM,IAAI,YAAY,CAAC,GAAG,IAAI,eAAe,CAAC,KAAK,IAAI,MAAM,UAAU,CAAC,GAAG,IAAI,OAAO,IAAI,KAAK,QAAQ;;AAGjM,QAAO"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
//#region src/lib/orm/sql/serialize/values.ts
|
|
2
|
+
function escapePostgresArrayString(value) {
|
|
3
|
+
return value.replaceAll("\\", "\\\\").replaceAll("\"", "\\\"");
|
|
4
|
+
}
|
|
5
|
+
function toPostgresArrayLiteral(value) {
|
|
6
|
+
if (value.length === 0) return "{}";
|
|
7
|
+
return `{${value.map((item) => {
|
|
8
|
+
if (item === null || item === void 0) return "NULL";
|
|
9
|
+
if (typeof item === "number") return String(item);
|
|
10
|
+
if (typeof item === "boolean") return item ? "TRUE" : "FALSE";
|
|
11
|
+
if (item instanceof Date) return `"${escapePostgresArrayString(item.toISOString())}"`;
|
|
12
|
+
return `"${escapePostgresArrayString(String(item))}"`;
|
|
13
|
+
}).join(",")}}`;
|
|
14
|
+
}
|
|
15
|
+
function mapDataToSqlRow(table, data, dialectAdapter) {
|
|
16
|
+
const row = {};
|
|
17
|
+
for (const jsKey in data) {
|
|
18
|
+
const value = data[jsKey];
|
|
19
|
+
const col = table.columns[jsKey];
|
|
20
|
+
if (!col) continue;
|
|
21
|
+
if (dialectAdapter.dialect === "postgres" && col.meta.isSqlArray && Array.isArray(value)) {
|
|
22
|
+
row[col.meta.sqlName] = toPostgresArrayLiteral(value);
|
|
23
|
+
continue;
|
|
24
|
+
}
|
|
25
|
+
row[col.meta.sqlName] = dialectAdapter.serializeValue(col.kind, value);
|
|
26
|
+
}
|
|
27
|
+
return row;
|
|
28
|
+
}
|
|
29
|
+
//#endregion
|
|
30
|
+
exports.mapDataToSqlRow = mapDataToSqlRow;
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
//#region src/lib/orm/sql/serialize/values.ts
|
|
2
|
+
function escapePostgresArrayString(value) {
|
|
3
|
+
return value.replaceAll("\\", "\\\\").replaceAll("\"", "\\\"");
|
|
4
|
+
}
|
|
5
|
+
function toPostgresArrayLiteral(value) {
|
|
6
|
+
if (value.length === 0) return "{}";
|
|
7
|
+
return `{${value.map((item) => {
|
|
8
|
+
if (item === null || item === void 0) return "NULL";
|
|
9
|
+
if (typeof item === "number") return String(item);
|
|
10
|
+
if (typeof item === "boolean") return item ? "TRUE" : "FALSE";
|
|
11
|
+
if (item instanceof Date) return `"${escapePostgresArrayString(item.toISOString())}"`;
|
|
12
|
+
return `"${escapePostgresArrayString(String(item))}"`;
|
|
13
|
+
}).join(",")}}`;
|
|
14
|
+
}
|
|
15
|
+
function mapDataToSqlRow(table, data, dialectAdapter) {
|
|
16
|
+
const row = {};
|
|
17
|
+
for (const jsKey in data) {
|
|
18
|
+
const value = data[jsKey];
|
|
19
|
+
const col = table.columns[jsKey];
|
|
20
|
+
if (!col) continue;
|
|
21
|
+
if (dialectAdapter.dialect === "postgres" && col.meta.isSqlArray && Array.isArray(value)) {
|
|
22
|
+
row[col.meta.sqlName] = toPostgresArrayLiteral(value);
|
|
23
|
+
continue;
|
|
24
|
+
}
|
|
25
|
+
row[col.meta.sqlName] = dialectAdapter.serializeValue(col.kind, value);
|
|
26
|
+
}
|
|
27
|
+
return row;
|
|
28
|
+
}
|
|
29
|
+
//#endregion
|
|
30
|
+
export { mapDataToSqlRow };
|
|
31
|
+
|
|
32
|
+
//# sourceMappingURL=values.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"values.mjs","names":[],"sources":["../../../../src/lib/orm/sql/serialize/values.ts"],"sourcesContent":["import type { Table } from \"../../table.js\";\nimport type { ColDefs, DialectAdapter } from \"../../types.js\";\n\nfunction escapePostgresArrayString(value: string) {\n return value.replaceAll(\"\\\\\", \"\\\\\\\\\").replaceAll('\"', '\\\\\"');\n}\n\nfunction toPostgresArrayLiteral(value: unknown[]) {\n if (value.length === 0) {\n return \"{}\";\n }\n\n const items = value.map((item) => {\n if (item === null || item === undefined) {\n return \"NULL\";\n }\n\n if (typeof item === \"number\") {\n return String(item);\n }\n\n if (typeof item === \"boolean\") {\n return item ? \"TRUE\" : \"FALSE\";\n }\n\n if (item instanceof Date) {\n return `\"${escapePostgresArrayString(item.toISOString())}\"`;\n }\n\n return `\"${escapePostgresArrayString(String(item))}\"`;\n });\n\n return `{${items.join(\",\")}}`;\n}\n\nexport function mapDataToSqlRow<T extends ColDefs>(\n table: Table<T>,\n data: Record<string, unknown>,\n dialectAdapter: DialectAdapter,\n) {\n const row: Record<string, unknown> = {};\n\n for (const jsKey in data) {\n const value = data[jsKey];\n\n const col = table.columns[jsKey];\n\n if (!col) {\n continue;\n }\n\n if (\n dialectAdapter.dialect === \"postgres\" &&\n col.meta.isSqlArray &&\n Array.isArray(value)\n ) {\n row[col.meta.sqlName] = toPostgresArrayLiteral(value);\n continue;\n }\n\n row[col.meta.sqlName] = dialectAdapter.serializeValue(col.kind, value);\n }\n\n return row;\n}\n"],"mappings":";AAGA,SAAS,0BAA0B,OAAe;AAChD,QAAO,MAAM,WAAW,MAAM,OAAO,CAAC,WAAW,MAAK,OAAM;;AAG9D,SAAS,uBAAuB,OAAkB;AAChD,KAAI,MAAM,WAAW,EACnB,QAAO;AAuBT,QAAO,IApBO,MAAM,KAAK,SAAS;AAChC,MAAI,SAAS,QAAQ,SAAS,KAAA,EAC5B,QAAO;AAGT,MAAI,OAAO,SAAS,SAClB,QAAO,OAAO,KAAK;AAGrB,MAAI,OAAO,SAAS,UAClB,QAAO,OAAO,SAAS;AAGzB,MAAI,gBAAgB,KAClB,QAAO,IAAI,0BAA0B,KAAK,aAAa,CAAC,CAAC;AAG3D,SAAO,IAAI,0BAA0B,OAAO,KAAK,CAAC,CAAC;GACnD,CAEe,KAAK,IAAI,CAAC;;AAG7B,SAAgB,gBACd,OACA,MACA,gBACA;CACA,MAAM,MAA+B,EAAE;AAEvC,MAAK,MAAM,SAAS,MAAM;EACxB,MAAM,QAAQ,KAAK;EAEnB,MAAM,MAAM,MAAM,QAAQ;AAE1B,MAAI,CAAC,IACH;AAGF,MACE,eAAe,YAAY,cAC3B,IAAI,KAAK,cACT,MAAM,QAAQ,MAAM,EACpB;AACA,OAAI,IAAI,KAAK,WAAW,uBAAuB,MAAM;AACrD;;AAGF,MAAI,IAAI,KAAK,WAAW,eAAe,eAAe,IAAI,MAAM,MAAM;;AAGxE,QAAO"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
//#region src/lib/orm/sql/serialize/where/predicate.ts
|
|
2
|
+
function toColumnValue(table, key, value, dialectAdapter) {
|
|
3
|
+
const col = table.columns[key];
|
|
4
|
+
if (!col) return {
|
|
5
|
+
exists: false,
|
|
6
|
+
kind: null,
|
|
7
|
+
serialized: value,
|
|
8
|
+
sqlName: key
|
|
9
|
+
};
|
|
10
|
+
return {
|
|
11
|
+
exists: true,
|
|
12
|
+
kind: col.kind,
|
|
13
|
+
serialized: dialectAdapter.serializeValue(col.kind, value),
|
|
14
|
+
sqlName: col.meta.sqlName
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
function serializeWherePredicate(sql, table, predicate, dialectAdapter) {
|
|
18
|
+
const { exists, kind, serialized, sqlName } = toColumnValue(table, predicate.key, predicate.value, dialectAdapter);
|
|
19
|
+
if (!exists) return null;
|
|
20
|
+
const column = sql(sqlName);
|
|
21
|
+
switch (predicate.op) {
|
|
22
|
+
case "eq": return sql`${column} = ${serialized}`;
|
|
23
|
+
case "neq": return sql`${column} != ${serialized}`;
|
|
24
|
+
case "gt": return sql`${column} > ${serialized}`;
|
|
25
|
+
case "gte": return sql`${column} >= ${serialized}`;
|
|
26
|
+
case "lt": return sql`${column} < ${serialized}`;
|
|
27
|
+
case "lte": return sql`${column} <= ${serialized}`;
|
|
28
|
+
case "like": {
|
|
29
|
+
const likeValue = predicate.value;
|
|
30
|
+
if (typeof likeValue !== "object" || likeValue === null) return null;
|
|
31
|
+
const mode = Reflect.get(likeValue, "mode");
|
|
32
|
+
const val = Reflect.get(likeValue, "value");
|
|
33
|
+
if (mode !== "startsWith" && mode !== "endsWith" && mode !== "contains") return null;
|
|
34
|
+
if (typeof val !== "string") return null;
|
|
35
|
+
const pattern = dialectAdapter.renderLikePattern(mode, val);
|
|
36
|
+
if (dialectAdapter.likeKeyword === "ILIKE") return sql`${column} ILIKE ${pattern}`;
|
|
37
|
+
return sql`${column} LIKE ${pattern}`;
|
|
38
|
+
}
|
|
39
|
+
case "in": {
|
|
40
|
+
if (!Array.isArray(predicate.value)) return null;
|
|
41
|
+
if (predicate.value.length === 0) return null;
|
|
42
|
+
const values = new Array(predicate.value.length);
|
|
43
|
+
for (let index = 0; index < predicate.value.length; index++) {
|
|
44
|
+
const item = predicate.value[index];
|
|
45
|
+
if (!kind) {
|
|
46
|
+
values[index] = item;
|
|
47
|
+
continue;
|
|
48
|
+
}
|
|
49
|
+
values[index] = dialectAdapter.serializeValue(kind, item);
|
|
50
|
+
}
|
|
51
|
+
return sql`${column} IN ${sql(values)}`;
|
|
52
|
+
}
|
|
53
|
+
case "not_in": {
|
|
54
|
+
if (!Array.isArray(predicate.value)) return null;
|
|
55
|
+
if (predicate.value.length === 0) return null;
|
|
56
|
+
const values = new Array(predicate.value.length);
|
|
57
|
+
for (let index = 0; index < predicate.value.length; index++) {
|
|
58
|
+
const item = predicate.value[index];
|
|
59
|
+
if (!kind) {
|
|
60
|
+
values[index] = item;
|
|
61
|
+
continue;
|
|
62
|
+
}
|
|
63
|
+
values[index] = dialectAdapter.serializeValue(kind, item);
|
|
64
|
+
}
|
|
65
|
+
return sql`${column} NOT IN ${sql(values)}`;
|
|
66
|
+
}
|
|
67
|
+
case "is_null": return sql`${column} IS NULL`;
|
|
68
|
+
case "is_not_null": return sql`${column} IS NOT NULL`;
|
|
69
|
+
default: return null;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
//#endregion
|
|
73
|
+
exports.serializeWherePredicate = serializeWherePredicate;
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
//#region src/lib/orm/sql/serialize/where/predicate.ts
|
|
2
|
+
function toColumnValue(table, key, value, dialectAdapter) {
|
|
3
|
+
const col = table.columns[key];
|
|
4
|
+
if (!col) return {
|
|
5
|
+
exists: false,
|
|
6
|
+
kind: null,
|
|
7
|
+
serialized: value,
|
|
8
|
+
sqlName: key
|
|
9
|
+
};
|
|
10
|
+
return {
|
|
11
|
+
exists: true,
|
|
12
|
+
kind: col.kind,
|
|
13
|
+
serialized: dialectAdapter.serializeValue(col.kind, value),
|
|
14
|
+
sqlName: col.meta.sqlName
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
function serializeWherePredicate(sql, table, predicate, dialectAdapter) {
|
|
18
|
+
const { exists, kind, serialized, sqlName } = toColumnValue(table, predicate.key, predicate.value, dialectAdapter);
|
|
19
|
+
if (!exists) return null;
|
|
20
|
+
const column = sql(sqlName);
|
|
21
|
+
switch (predicate.op) {
|
|
22
|
+
case "eq": return sql`${column} = ${serialized}`;
|
|
23
|
+
case "neq": return sql`${column} != ${serialized}`;
|
|
24
|
+
case "gt": return sql`${column} > ${serialized}`;
|
|
25
|
+
case "gte": return sql`${column} >= ${serialized}`;
|
|
26
|
+
case "lt": return sql`${column} < ${serialized}`;
|
|
27
|
+
case "lte": return sql`${column} <= ${serialized}`;
|
|
28
|
+
case "like": {
|
|
29
|
+
const likeValue = predicate.value;
|
|
30
|
+
if (typeof likeValue !== "object" || likeValue === null) return null;
|
|
31
|
+
const mode = Reflect.get(likeValue, "mode");
|
|
32
|
+
const val = Reflect.get(likeValue, "value");
|
|
33
|
+
if (mode !== "startsWith" && mode !== "endsWith" && mode !== "contains") return null;
|
|
34
|
+
if (typeof val !== "string") return null;
|
|
35
|
+
const pattern = dialectAdapter.renderLikePattern(mode, val);
|
|
36
|
+
if (dialectAdapter.likeKeyword === "ILIKE") return sql`${column} ILIKE ${pattern}`;
|
|
37
|
+
return sql`${column} LIKE ${pattern}`;
|
|
38
|
+
}
|
|
39
|
+
case "in": {
|
|
40
|
+
if (!Array.isArray(predicate.value)) return null;
|
|
41
|
+
if (predicate.value.length === 0) return null;
|
|
42
|
+
const values = new Array(predicate.value.length);
|
|
43
|
+
for (let index = 0; index < predicate.value.length; index++) {
|
|
44
|
+
const item = predicate.value[index];
|
|
45
|
+
if (!kind) {
|
|
46
|
+
values[index] = item;
|
|
47
|
+
continue;
|
|
48
|
+
}
|
|
49
|
+
values[index] = dialectAdapter.serializeValue(kind, item);
|
|
50
|
+
}
|
|
51
|
+
return sql`${column} IN ${sql(values)}`;
|
|
52
|
+
}
|
|
53
|
+
case "not_in": {
|
|
54
|
+
if (!Array.isArray(predicate.value)) return null;
|
|
55
|
+
if (predicate.value.length === 0) return null;
|
|
56
|
+
const values = new Array(predicate.value.length);
|
|
57
|
+
for (let index = 0; index < predicate.value.length; index++) {
|
|
58
|
+
const item = predicate.value[index];
|
|
59
|
+
if (!kind) {
|
|
60
|
+
values[index] = item;
|
|
61
|
+
continue;
|
|
62
|
+
}
|
|
63
|
+
values[index] = dialectAdapter.serializeValue(kind, item);
|
|
64
|
+
}
|
|
65
|
+
return sql`${column} NOT IN ${sql(values)}`;
|
|
66
|
+
}
|
|
67
|
+
case "is_null": return sql`${column} IS NULL`;
|
|
68
|
+
case "is_not_null": return sql`${column} IS NOT NULL`;
|
|
69
|
+
default: return null;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
//#endregion
|
|
73
|
+
export { serializeWherePredicate };
|
|
74
|
+
|
|
75
|
+
//# sourceMappingURL=predicate.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"predicate.mjs","names":[],"sources":["../../../../../src/lib/orm/sql/serialize/where/predicate.ts"],"sourcesContent":["import type { SQL, TransactionSQL } from \"bun\";\nimport type { Table } from \"../../../table.js\";\nimport type {\n ColDefs,\n DialectAdapter,\n WherePredicate,\n} from \"../../../types.js\";\n\nfunction toColumnValue(\n table: Table<ColDefs>,\n key: string,\n value: unknown,\n dialectAdapter: DialectAdapter,\n) {\n const col = table.columns[key];\n\n if (!col) {\n return {\n exists: false,\n kind: null,\n serialized: value,\n sqlName: key,\n };\n }\n\n return {\n exists: true,\n kind: col.kind,\n serialized: dialectAdapter.serializeValue(col.kind, value),\n sqlName: col.meta.sqlName,\n };\n}\n\nexport function serializeWherePredicate<T extends ColDefs>(\n sql: SQL | TransactionSQL,\n table: Table<T>,\n predicate: WherePredicate<T>,\n dialectAdapter: DialectAdapter,\n) {\n const { exists, kind, serialized, sqlName } = toColumnValue(\n table,\n predicate.key,\n predicate.value,\n dialectAdapter,\n );\n\n if (!exists) {\n return null;\n }\n\n const column = sql(sqlName);\n\n switch (predicate.op) {\n case \"eq\":\n return sql`${column} = ${serialized}`;\n\n case \"neq\":\n return sql`${column} != ${serialized}`;\n\n case \"gt\":\n return sql`${column} > ${serialized}`;\n\n case \"gte\":\n return sql`${column} >= ${serialized}`;\n\n case \"lt\":\n return sql`${column} < ${serialized}`;\n\n case \"lte\":\n return sql`${column} <= ${serialized}`;\n\n case \"like\": {\n const likeValue = predicate.value;\n\n if (typeof likeValue !== \"object\" || likeValue === null) {\n return null;\n }\n\n const mode = Reflect.get(likeValue, \"mode\");\n const val = Reflect.get(likeValue, \"value\");\n\n if (mode !== \"startsWith\" && mode !== \"endsWith\" && mode !== \"contains\") {\n return null;\n }\n\n if (typeof val !== \"string\") {\n return null;\n }\n\n const pattern = dialectAdapter.renderLikePattern(mode, val);\n\n if (dialectAdapter.likeKeyword === \"ILIKE\") {\n return sql`${column} ILIKE ${pattern}`;\n }\n\n return sql`${column} LIKE ${pattern}`;\n }\n\n case \"in\": {\n if (!Array.isArray(predicate.value)) {\n return null;\n }\n\n if (predicate.value.length === 0) {\n return null;\n }\n\n const values: unknown[] = new Array(predicate.value.length);\n\n for (let index = 0; index < predicate.value.length; index++) {\n const item = predicate.value[index];\n\n if (!kind) {\n values[index] = item;\n continue;\n }\n\n values[index] = dialectAdapter.serializeValue(kind, item);\n }\n\n return sql`${column} IN ${sql(values)}`;\n }\n\n case \"not_in\": {\n if (!Array.isArray(predicate.value)) {\n return null;\n }\n\n if (predicate.value.length === 0) {\n return null;\n }\n\n const values: unknown[] = new Array(predicate.value.length);\n\n for (let index = 0; index < predicate.value.length; index++) {\n const item = predicate.value[index];\n\n if (!kind) {\n values[index] = item;\n continue;\n }\n\n values[index] = dialectAdapter.serializeValue(kind, item);\n }\n\n return sql`${column} NOT IN ${sql(values)}`;\n }\n\n case \"is_null\":\n return sql`${column} IS NULL`;\n\n case \"is_not_null\":\n return sql`${column} IS NOT NULL`;\n\n default:\n return null;\n }\n}\n"],"mappings":";AAQA,SAAS,cACP,OACA,KACA,OACA,gBACA;CACA,MAAM,MAAM,MAAM,QAAQ;AAE1B,KAAI,CAAC,IACH,QAAO;EACL,QAAQ;EACR,MAAM;EACN,YAAY;EACZ,SAAS;EACV;AAGH,QAAO;EACL,QAAQ;EACR,MAAM,IAAI;EACV,YAAY,eAAe,eAAe,IAAI,MAAM,MAAM;EAC1D,SAAS,IAAI,KAAK;EACnB;;AAGH,SAAgB,wBACd,KACA,OACA,WACA,gBACA;CACA,MAAM,EAAE,QAAQ,MAAM,YAAY,YAAY,cAC5C,OACA,UAAU,KACV,UAAU,OACV,eACD;AAED,KAAI,CAAC,OACH,QAAO;CAGT,MAAM,SAAS,IAAI,QAAQ;AAE3B,SAAQ,UAAU,IAAlB;EACE,KAAK,KACH,QAAO,GAAG,GAAG,OAAO,KAAK;EAE3B,KAAK,MACH,QAAO,GAAG,GAAG,OAAO,MAAM;EAE5B,KAAK,KACH,QAAO,GAAG,GAAG,OAAO,KAAK;EAE3B,KAAK,MACH,QAAO,GAAG,GAAG,OAAO,MAAM;EAE5B,KAAK,KACH,QAAO,GAAG,GAAG,OAAO,KAAK;EAE3B,KAAK,MACH,QAAO,GAAG,GAAG,OAAO,MAAM;EAE5B,KAAK,QAAQ;GACX,MAAM,YAAY,UAAU;AAE5B,OAAI,OAAO,cAAc,YAAY,cAAc,KACjD,QAAO;GAGT,MAAM,OAAO,QAAQ,IAAI,WAAW,OAAO;GAC3C,MAAM,MAAM,QAAQ,IAAI,WAAW,QAAQ;AAE3C,OAAI,SAAS,gBAAgB,SAAS,cAAc,SAAS,WAC3D,QAAO;AAGT,OAAI,OAAO,QAAQ,SACjB,QAAO;GAGT,MAAM,UAAU,eAAe,kBAAkB,MAAM,IAAI;AAE3D,OAAI,eAAe,gBAAgB,QACjC,QAAO,GAAG,GAAG,OAAO,SAAS;AAG/B,UAAO,GAAG,GAAG,OAAO,QAAQ;;EAG9B,KAAK,MAAM;AACT,OAAI,CAAC,MAAM,QAAQ,UAAU,MAAM,CACjC,QAAO;AAGT,OAAI,UAAU,MAAM,WAAW,EAC7B,QAAO;GAGT,MAAM,SAAoB,IAAI,MAAM,UAAU,MAAM,OAAO;AAE3D,QAAK,IAAI,QAAQ,GAAG,QAAQ,UAAU,MAAM,QAAQ,SAAS;IAC3D,MAAM,OAAO,UAAU,MAAM;AAE7B,QAAI,CAAC,MAAM;AACT,YAAO,SAAS;AAChB;;AAGF,WAAO,SAAS,eAAe,eAAe,MAAM,KAAK;;AAG3D,UAAO,GAAG,GAAG,OAAO,MAAM,IAAI,OAAO;;EAGvC,KAAK,UAAU;AACb,OAAI,CAAC,MAAM,QAAQ,UAAU,MAAM,CACjC,QAAO;AAGT,OAAI,UAAU,MAAM,WAAW,EAC7B,QAAO;GAGT,MAAM,SAAoB,IAAI,MAAM,UAAU,MAAM,OAAO;AAE3D,QAAK,IAAI,QAAQ,GAAG,QAAQ,UAAU,MAAM,QAAQ,SAAS;IAC3D,MAAM,OAAO,UAAU,MAAM;AAE7B,QAAI,CAAC,MAAM;AACT,YAAO,SAAS;AAChB;;AAGF,WAAO,SAAS,eAAe,eAAe,MAAM,KAAK;;AAG3D,UAAO,GAAG,GAAG,OAAO,UAAU,IAAI,OAAO;;EAG3C,KAAK,UACH,QAAO,GAAG,GAAG,OAAO;EAEtB,KAAK,cACH,QAAO,GAAG,GAAG,OAAO;EAEtB,QACE,QAAO"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
const require_predicate = require("./predicate.cjs");
|
|
2
|
+
//#region src/lib/orm/sql/serialize/where/tree.ts
|
|
3
|
+
function serializeWhereNode(sql, table, node, dialectAdapter) {
|
|
4
|
+
if (node.kind === "predicate") return require_predicate.serializeWherePredicate(sql, table, node, dialectAdapter);
|
|
5
|
+
const fragments = [];
|
|
6
|
+
for (const child of node.nodes) {
|
|
7
|
+
const fragment = serializeWhereNode(sql, table, child, dialectAdapter);
|
|
8
|
+
if (!fragment) continue;
|
|
9
|
+
fragments.push(fragment);
|
|
10
|
+
}
|
|
11
|
+
const firstNode = fragments[0];
|
|
12
|
+
if (!firstNode) return null;
|
|
13
|
+
let joined = firstNode;
|
|
14
|
+
for (let index = 1; index < fragments.length; index++) {
|
|
15
|
+
const fragment = fragments[index];
|
|
16
|
+
if (!fragment) continue;
|
|
17
|
+
if (node.kind === "or") {
|
|
18
|
+
joined = sql`${joined} OR ${fragment}`;
|
|
19
|
+
continue;
|
|
20
|
+
}
|
|
21
|
+
joined = sql`${joined} AND ${fragment}`;
|
|
22
|
+
}
|
|
23
|
+
return sql`(${joined})`;
|
|
24
|
+
}
|
|
25
|
+
//#endregion
|
|
26
|
+
exports.serializeWhereNode = serializeWhereNode;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { serializeWherePredicate } from "./predicate.mjs";
|
|
2
|
+
//#region src/lib/orm/sql/serialize/where/tree.ts
|
|
3
|
+
function serializeWhereNode(sql, table, node, dialectAdapter) {
|
|
4
|
+
if (node.kind === "predicate") return serializeWherePredicate(sql, table, node, dialectAdapter);
|
|
5
|
+
const fragments = [];
|
|
6
|
+
for (const child of node.nodes) {
|
|
7
|
+
const fragment = serializeWhereNode(sql, table, child, dialectAdapter);
|
|
8
|
+
if (!fragment) continue;
|
|
9
|
+
fragments.push(fragment);
|
|
10
|
+
}
|
|
11
|
+
const firstNode = fragments[0];
|
|
12
|
+
if (!firstNode) return null;
|
|
13
|
+
let joined = firstNode;
|
|
14
|
+
for (let index = 1; index < fragments.length; index++) {
|
|
15
|
+
const fragment = fragments[index];
|
|
16
|
+
if (!fragment) continue;
|
|
17
|
+
if (node.kind === "or") {
|
|
18
|
+
joined = sql`${joined} OR ${fragment}`;
|
|
19
|
+
continue;
|
|
20
|
+
}
|
|
21
|
+
joined = sql`${joined} AND ${fragment}`;
|
|
22
|
+
}
|
|
23
|
+
return sql`(${joined})`;
|
|
24
|
+
}
|
|
25
|
+
//#endregion
|
|
26
|
+
export { serializeWhereNode };
|
|
27
|
+
|
|
28
|
+
//# sourceMappingURL=tree.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tree.mjs","names":[],"sources":["../../../../../src/lib/orm/sql/serialize/where/tree.ts"],"sourcesContent":["import type { SQL, TransactionSQL } from \"bun\";\nimport type { Table } from \"../../../table.js\";\nimport type { ColDefs, DialectAdapter, WhereNode } from \"../../../types.js\";\nimport { serializeWherePredicate } from \"./predicate.js\";\n\nexport function serializeWhereNode<T extends ColDefs>(\n sql: SQL | TransactionSQL,\n table: Table<T>,\n node: WhereNode<T>,\n dialectAdapter: DialectAdapter,\n): SQL.Query<unknown> | null {\n if (node.kind === \"predicate\") {\n return serializeWherePredicate(sql, table, node, dialectAdapter);\n }\n\n const fragments: SQL.Query<unknown>[] = [];\n\n for (const child of node.nodes) {\n const fragment = serializeWhereNode(sql, table, child, dialectAdapter);\n\n if (!fragment) {\n continue;\n }\n\n fragments.push(fragment);\n }\n\n const firstNode = fragments[0];\n\n if (!firstNode) {\n return null;\n }\n\n let joined = firstNode;\n\n for (let index = 1; index < fragments.length; index++) {\n const fragment = fragments[index];\n\n if (!fragment) {\n continue;\n }\n\n if (node.kind === \"or\") {\n joined = sql`${joined} OR ${fragment}`;\n continue;\n }\n\n joined = sql`${joined} AND ${fragment}`;\n }\n\n return sql`(${joined})`;\n}\n"],"mappings":";;AAKA,SAAgB,mBACd,KACA,OACA,MACA,gBAC2B;AAC3B,KAAI,KAAK,SAAS,YAChB,QAAO,wBAAwB,KAAK,OAAO,MAAM,eAAe;CAGlE,MAAM,YAAkC,EAAE;AAE1C,MAAK,MAAM,SAAS,KAAK,OAAO;EAC9B,MAAM,WAAW,mBAAmB,KAAK,OAAO,OAAO,eAAe;AAEtE,MAAI,CAAC,SACH;AAGF,YAAU,KAAK,SAAS;;CAG1B,MAAM,YAAY,UAAU;AAE5B,KAAI,CAAC,UACH,QAAO;CAGT,IAAI,SAAS;AAEb,MAAK,IAAI,QAAQ,GAAG,QAAQ,UAAU,QAAQ,SAAS;EACrD,MAAM,WAAW,UAAU;AAE3B,MAAI,CAAC,SACH;AAGF,MAAI,KAAK,SAAS,MAAM;AACtB,YAAS,GAAG,GAAG,OAAO,MAAM;AAC5B;;AAGF,WAAS,GAAG,GAAG,OAAO,OAAO;;AAG/B,QAAO,GAAG,IAAI,OAAO"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
const require_tree = require("./where/tree.cjs");
|
|
2
|
+
//#region src/lib/orm/sql/serialize/where.ts
|
|
3
|
+
function buildWhereFragment(sql, table, node, dialectAdapter) {
|
|
4
|
+
if (!node) return sql``;
|
|
5
|
+
const fragment = require_tree.serializeWhereNode(sql, table, node, dialectAdapter);
|
|
6
|
+
if (!fragment) return sql``;
|
|
7
|
+
return sql`WHERE ${fragment}`;
|
|
8
|
+
}
|
|
9
|
+
//#endregion
|
|
10
|
+
exports.buildWhereFragment = buildWhereFragment;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { serializeWhereNode } from "./where/tree.mjs";
|
|
2
|
+
//#region src/lib/orm/sql/serialize/where.ts
|
|
3
|
+
function buildWhereFragment(sql, table, node, dialectAdapter) {
|
|
4
|
+
if (!node) return sql``;
|
|
5
|
+
const fragment = serializeWhereNode(sql, table, node, dialectAdapter);
|
|
6
|
+
if (!fragment) return sql``;
|
|
7
|
+
return sql`WHERE ${fragment}`;
|
|
8
|
+
}
|
|
9
|
+
//#endregion
|
|
10
|
+
export { buildWhereFragment };
|
|
11
|
+
|
|
12
|
+
//# sourceMappingURL=where.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"where.mjs","names":[],"sources":["../../../../src/lib/orm/sql/serialize/where.ts"],"sourcesContent":["import type { SQL, TransactionSQL } from \"bun\";\nimport type { Table } from \"../../table.js\";\nimport type { ColDefs, DialectAdapter, WhereNode } from \"../../types.js\";\nimport { serializeWhereNode } from \"./where/tree.js\";\n\nexport function buildWhereFragment<T extends ColDefs>(\n sql: SQL | TransactionSQL,\n table: Table<T>,\n node: WhereNode<T> | undefined,\n dialectAdapter: DialectAdapter,\n) {\n if (!node) {\n return sql``;\n }\n\n const fragment = serializeWhereNode(sql, table, node, dialectAdapter);\n\n if (!fragment) {\n return sql``;\n }\n\n return sql`WHERE ${fragment}`;\n}\n"],"mappings":";;AAKA,SAAgB,mBACd,KACA,OACA,MACA,gBACA;AACA,KAAI,CAAC,KACH,QAAO,GAAG;CAGZ,MAAM,WAAW,mBAAmB,KAAK,OAAO,MAAM,eAAe;AAErE,KAAI,CAAC,SACH,QAAO,GAAG;AAGZ,QAAO,GAAG,SAAS"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
const require_table_columns = require("../internal/table-columns.cjs");
|
|
2
|
+
const require_where = require("./plan/where.cjs");
|
|
3
|
+
const require_select = require("./plan/select.cjs");
|
|
4
|
+
const require_clauses = require("./serialize/clauses.cjs");
|
|
5
|
+
const require_joins = require("./serialize/joins.cjs");
|
|
6
|
+
const require_where$1 = require("./serialize/where.cjs");
|
|
7
|
+
require("./serialize/values.cjs");
|
|
8
|
+
//#region src/lib/orm/sql/serialize.ts
|
|
9
|
+
function serializeSelectPlan(sql, table, relations, plan, dialectAdapter) {
|
|
10
|
+
const joins = require_joins.buildJoinClauses(sql, table, relations, plan);
|
|
11
|
+
const where = require_where$1.buildWhereFragment(sql, table, plan.where, dialectAdapter);
|
|
12
|
+
const orderBy = require_clauses.buildOrderByClause(sql, table, plan);
|
|
13
|
+
const limitOffset = require_clauses.buildLimitClause(sql, plan.page.limit, plan.page.offset, dialectAdapter.dialect);
|
|
14
|
+
return sql`SELECT ${require_table_columns.buildSelectColumns(sql, table)} FROM ${sql(table.tableName)} ${joins} ${where} ${orderBy} ${limitOffset}`;
|
|
15
|
+
}
|
|
16
|
+
function serializeWhereInput(sql, table, where, dialectAdapter) {
|
|
17
|
+
return require_where$1.buildWhereFragment(sql, table, require_where.buildWhereNode(where), dialectAdapter);
|
|
18
|
+
}
|
|
19
|
+
function serializeSelectInput(sql, table, relations, input, dialectAdapter) {
|
|
20
|
+
return serializeSelectPlan(sql, table, relations, require_select.buildSelectPlan(input), dialectAdapter);
|
|
21
|
+
}
|
|
22
|
+
//#endregion
|
|
23
|
+
exports.serializeSelectInput = serializeSelectInput;
|
|
24
|
+
exports.serializeWhereInput = serializeWhereInput;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { buildSelectColumns } from "../internal/table-columns.mjs";
|
|
2
|
+
import { buildWhereNode } from "./plan/where.mjs";
|
|
3
|
+
import { buildSelectPlan } from "./plan/select.mjs";
|
|
4
|
+
import { buildLimitClause, buildOrderByClause } from "./serialize/clauses.mjs";
|
|
5
|
+
import { buildJoinClauses } from "./serialize/joins.mjs";
|
|
6
|
+
import { buildWhereFragment } from "./serialize/where.mjs";
|
|
7
|
+
import "./serialize/values.mjs";
|
|
8
|
+
//#region src/lib/orm/sql/serialize.ts
|
|
9
|
+
function serializeSelectPlan(sql, table, relations, plan, dialectAdapter) {
|
|
10
|
+
const joins = buildJoinClauses(sql, table, relations, plan);
|
|
11
|
+
const where = buildWhereFragment(sql, table, plan.where, dialectAdapter);
|
|
12
|
+
const orderBy = buildOrderByClause(sql, table, plan);
|
|
13
|
+
const limitOffset = buildLimitClause(sql, plan.page.limit, plan.page.offset, dialectAdapter.dialect);
|
|
14
|
+
return sql`SELECT ${buildSelectColumns(sql, table)} FROM ${sql(table.tableName)} ${joins} ${where} ${orderBy} ${limitOffset}`;
|
|
15
|
+
}
|
|
16
|
+
function serializeWhereInput(sql, table, where, dialectAdapter) {
|
|
17
|
+
return buildWhereFragment(sql, table, buildWhereNode(where), dialectAdapter);
|
|
18
|
+
}
|
|
19
|
+
function serializeSelectInput(sql, table, relations, input, dialectAdapter) {
|
|
20
|
+
return serializeSelectPlan(sql, table, relations, buildSelectPlan(input), dialectAdapter);
|
|
21
|
+
}
|
|
22
|
+
//#endregion
|
|
23
|
+
export { serializeSelectInput, serializeWhereInput };
|
|
24
|
+
|
|
25
|
+
//# sourceMappingURL=serialize.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serialize.mjs","names":[],"sources":["../../../src/lib/orm/sql/serialize.ts"],"sourcesContent":["import type { SQL, TransactionSQL } from \"bun\";\nimport { buildSelectColumns } from \"../internal/table.js\";\nimport type { Table } from \"../table.js\";\nimport type {\n ColDefs,\n DialectAdapter,\n RelationDefs,\n SelectInput,\n SelectPlan,\n WhereInput,\n} from \"../types.js\";\nimport { buildSelectPlan, buildWhereNode } from \"./plan.js\";\nimport { buildLimitClause, buildOrderByClause } from \"./serialize/clauses.js\";\nimport { buildJoinClauses } from \"./serialize/joins.js\";\nimport { buildWhereFragment } from \"./serialize/where.js\";\n\nexport { mapDataToSqlRow } from \"./serialize/values.js\";\n\nexport function serializeWherePlan<T extends ColDefs>(\n sql: SQL | TransactionSQL,\n table: Table<T>,\n plan: SelectPlan<T>,\n dialectAdapter: DialectAdapter,\n) {\n return buildWhereFragment(sql, table, plan.where, dialectAdapter);\n}\n\nexport function serializeSelectPlan<T extends ColDefs>(\n sql: SQL | TransactionSQL,\n table: Table<T>,\n relations: RelationDefs,\n plan: SelectPlan<T>,\n dialectAdapter: DialectAdapter,\n) {\n const joins = buildJoinClauses(sql, table, relations, plan);\n const where = buildWhereFragment(sql, table, plan.where, dialectAdapter);\n const orderBy = buildOrderByClause(sql, table, plan);\n const limitOffset = buildLimitClause(\n sql,\n plan.page.limit,\n plan.page.offset,\n dialectAdapter.dialect,\n );\n const columns = buildSelectColumns(sql, table);\n\n return sql`SELECT ${columns} FROM ${sql(table.tableName)} ${joins} ${where} ${orderBy} ${limitOffset}`;\n}\n\nexport function serializeWhereInput<T extends ColDefs>(\n sql: SQL | TransactionSQL,\n table: Table<T>,\n where: WhereInput<T> | undefined,\n dialectAdapter: DialectAdapter,\n) {\n return buildWhereFragment(sql, table, buildWhereNode(where), dialectAdapter);\n}\n\nexport function serializeSelectInput<T extends ColDefs, TRels>(\n sql: SQL | TransactionSQL,\n table: Table<T>,\n relations: RelationDefs,\n input: SelectInput<T, TRels>,\n dialectAdapter: DialectAdapter,\n) {\n return serializeSelectPlan(\n sql,\n table,\n relations,\n buildSelectPlan(input),\n dialectAdapter,\n );\n}\n"],"mappings":";;;;;;;;AA2BA,SAAgB,oBACd,KACA,OACA,WACA,MACA,gBACA;CACA,MAAM,QAAQ,iBAAiB,KAAK,OAAO,WAAW,KAAK;CAC3D,MAAM,QAAQ,mBAAmB,KAAK,OAAO,KAAK,OAAO,eAAe;CACxE,MAAM,UAAU,mBAAmB,KAAK,OAAO,KAAK;CACpD,MAAM,cAAc,iBAClB,KACA,KAAK,KAAK,OACV,KAAK,KAAK,QACV,eAAe,QAChB;AAGD,QAAO,GAAG,UAFM,mBAAmB,KAAK,MAAM,CAElB,QAAQ,IAAI,MAAM,UAAU,CAAC,GAAG,MAAM,GAAG,MAAM,GAAG,QAAQ,GAAG;;AAG3F,SAAgB,oBACd,KACA,OACA,OACA,gBACA;AACA,QAAO,mBAAmB,KAAK,OAAO,eAAe,MAAM,EAAE,eAAe;;AAG9E,SAAgB,qBACd,KACA,OACA,WACA,OACA,gBACA;AACA,QAAO,oBACL,KACA,OACA,WACA,gBAAgB,MAAM,EACtB,eACD"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
//#region src/lib/orm/table.ts
|
|
2
|
+
var Table = class {
|
|
3
|
+
constructor(tableName, columns) {
|
|
4
|
+
this.tableName = tableName;
|
|
5
|
+
this.columns = columns;
|
|
6
|
+
}
|
|
7
|
+
};
|
|
8
|
+
function createTable(tableName, columns) {
|
|
9
|
+
return new Table(tableName, columns);
|
|
10
|
+
}
|
|
11
|
+
//#endregion
|
|
12
|
+
exports.createTable = createTable;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { ColDefs } from "./types.cjs";
|
|
2
|
+
|
|
3
|
+
//#region src/lib/orm/table.d.ts
|
|
4
|
+
declare class Table<T extends ColDefs> {
|
|
5
|
+
readonly tableName: string;
|
|
6
|
+
readonly columns: T;
|
|
7
|
+
constructor(tableName: string, columns: T);
|
|
8
|
+
}
|
|
9
|
+
declare function createTable<T extends ColDefs>(tableName: string, columns: T): Table<T>;
|
|
10
|
+
//#endregion
|
|
11
|
+
export { Table, createTable };
|
|
12
|
+
//# sourceMappingURL=table.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"table.d.cts","names":[],"sources":["../../src/lib/orm/table.ts"],"mappings":";;;cAEa,KAAA,WAAgB,OAAA;EAAA,SAET,SAAA;EAAA,SACA,OAAA,EAAS,CAAA;cADT,SAAA,UACA,OAAA,EAAS,CAAA;AAAA;AAAA,iBAIb,WAAA,WAAsB,OAAA,CAAA,CAAS,SAAA,UAAmB,OAAA,EAAS,CAAA,GAAC,KAAA,CAAA,CAAA"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { ColDefs } from "./types.mjs";
|
|
2
|
+
|
|
3
|
+
//#region src/lib/orm/table.d.ts
|
|
4
|
+
declare class Table<T extends ColDefs> {
|
|
5
|
+
readonly tableName: string;
|
|
6
|
+
readonly columns: T;
|
|
7
|
+
constructor(tableName: string, columns: T);
|
|
8
|
+
}
|
|
9
|
+
declare function createTable<T extends ColDefs>(tableName: string, columns: T): Table<T>;
|
|
10
|
+
//#endregion
|
|
11
|
+
export { Table, createTable };
|
|
12
|
+
//# sourceMappingURL=table.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"table.d.mts","names":[],"sources":["../../src/lib/orm/table.ts"],"mappings":";;;cAEa,KAAA,WAAgB,OAAA;EAAA,SAET,SAAA;EAAA,SACA,OAAA,EAAS,CAAA;cADT,SAAA,UACA,OAAA,EAAS,CAAA;AAAA;AAAA,iBAIb,WAAA,WAAsB,OAAA,CAAA,CAAS,SAAA,UAAmB,OAAA,EAAS,CAAA,GAAC,KAAA,CAAA,CAAA"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
//#region src/lib/orm/table.ts
|
|
2
|
+
var Table = class {
|
|
3
|
+
constructor(tableName, columns) {
|
|
4
|
+
this.tableName = tableName;
|
|
5
|
+
this.columns = columns;
|
|
6
|
+
}
|
|
7
|
+
};
|
|
8
|
+
function createTable(tableName, columns) {
|
|
9
|
+
return new Table(tableName, columns);
|
|
10
|
+
}
|
|
11
|
+
//#endregion
|
|
12
|
+
export { createTable };
|
|
13
|
+
|
|
14
|
+
//# sourceMappingURL=table.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"table.mjs","names":[],"sources":["../../src/lib/orm/table.ts"],"sourcesContent":["import type { ColDefs } from \"./types.js\";\n\nexport class Table<T extends ColDefs> {\n public constructor(\n public readonly tableName: string,\n public readonly columns: T,\n ) {}\n}\n\nexport function createTable<T extends ColDefs>(tableName: string, columns: T) {\n return new Table(tableName, columns);\n}\n"],"mappings":";AAEA,IAAa,QAAb,MAAsC;CACpC,YACE,WACA,SACA;AAFgB,OAAA,YAAA;AACA,OAAA,UAAA;;;AAIpB,SAAgB,YAA+B,WAAmB,SAAY;AAC5E,QAAO,IAAI,MAAM,WAAW,QAAQ"}
|