typhex 0.1.0-alpha.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/CHANGELOG.md +20 -0
- package/LICENSE +21 -0
- package/README.md +417 -0
- package/SECURITY.md +32 -0
- package/dist/arrow/aggregates.d.ts +12 -0
- package/dist/arrow/aggregates.d.ts.map +1 -0
- package/dist/arrow/aggregates.js +32 -0
- package/dist/arrow/aggregates.js.map +1 -0
- package/dist/arrow/constants.d.ts +15 -0
- package/dist/arrow/constants.d.ts.map +1 -0
- package/dist/arrow/constants.js +42 -0
- package/dist/arrow/constants.js.map +1 -0
- package/dist/arrow/index.d.ts +7 -0
- package/dist/arrow/index.d.ts.map +1 -0
- package/dist/arrow/index.js +7 -0
- package/dist/arrow/index.js.map +1 -0
- package/dist/config/index.d.ts +6 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +4 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/load-config.d.ts +19 -0
- package/dist/config/load-config.d.ts.map +1 -0
- package/dist/config/load-config.js +84 -0
- package/dist/config/load-config.js.map +1 -0
- package/dist/config/load-env.d.ts +7 -0
- package/dist/config/load-env.d.ts.map +1 -0
- package/dist/config/load-env.js +62 -0
- package/dist/config/load-env.js.map +1 -0
- package/dist/config/types.d.ts +20 -0
- package/dist/config/types.d.ts.map +1 -0
- package/dist/config/types.js +10 -0
- package/dist/config/types.js.map +1 -0
- package/dist/dbs/base-migrator.d.ts +20 -0
- package/dist/dbs/base-migrator.d.ts.map +1 -0
- package/dist/dbs/base-migrator.js +112 -0
- package/dist/dbs/base-migrator.js.map +1 -0
- package/dist/dbs/index.d.ts +9 -0
- package/dist/dbs/index.d.ts.map +1 -0
- package/dist/dbs/index.js +17 -0
- package/dist/dbs/index.js.map +1 -0
- package/dist/dbs/postgres/dialect.d.ts +8 -0
- package/dist/dbs/postgres/dialect.d.ts.map +1 -0
- package/dist/dbs/postgres/dialect.js +17 -0
- package/dist/dbs/postgres/dialect.js.map +1 -0
- package/dist/dbs/postgres/driver.d.ts +42 -0
- package/dist/dbs/postgres/driver.d.ts.map +1 -0
- package/dist/dbs/postgres/driver.js +111 -0
- package/dist/dbs/postgres/driver.js.map +1 -0
- package/dist/dbs/postgres/index.d.ts +6 -0
- package/dist/dbs/postgres/index.d.ts.map +1 -0
- package/dist/dbs/postgres/index.js +5 -0
- package/dist/dbs/postgres/index.js.map +1 -0
- package/dist/dbs/postgres/migrator.d.ts +13 -0
- package/dist/dbs/postgres/migrator.d.ts.map +1 -0
- package/dist/dbs/postgres/migrator.js +22 -0
- package/dist/dbs/postgres/migrator.js.map +1 -0
- package/dist/dbs/postgres/query-compiler.d.ts +22 -0
- package/dist/dbs/postgres/query-compiler.d.ts.map +1 -0
- package/dist/dbs/postgres/query-compiler.js +140 -0
- package/dist/dbs/postgres/query-compiler.js.map +1 -0
- package/dist/dbs/postgres/trx.d.ts +16 -0
- package/dist/dbs/postgres/trx.d.ts.map +1 -0
- package/dist/dbs/postgres/trx.js +68 -0
- package/dist/dbs/postgres/trx.js.map +1 -0
- package/dist/dbs/query-compiler.d.ts +135 -0
- package/dist/dbs/query-compiler.d.ts.map +1 -0
- package/dist/dbs/query-compiler.js +775 -0
- package/dist/dbs/query-compiler.js.map +1 -0
- package/dist/dbs/sqlite/dialect.d.ts +8 -0
- package/dist/dbs/sqlite/dialect.d.ts.map +1 -0
- package/dist/dbs/sqlite/dialect.js +17 -0
- package/dist/dbs/sqlite/dialect.js.map +1 -0
- package/dist/dbs/sqlite/driver.d.ts +9 -0
- package/dist/dbs/sqlite/driver.d.ts.map +1 -0
- package/dist/dbs/sqlite/driver.js +66 -0
- package/dist/dbs/sqlite/driver.js.map +1 -0
- package/dist/dbs/sqlite/index.d.ts +6 -0
- package/dist/dbs/sqlite/index.d.ts.map +1 -0
- package/dist/dbs/sqlite/index.js +5 -0
- package/dist/dbs/sqlite/index.js.map +1 -0
- package/dist/dbs/sqlite/migrator.d.ts +13 -0
- package/dist/dbs/sqlite/migrator.d.ts.map +1 -0
- package/dist/dbs/sqlite/migrator.js +22 -0
- package/dist/dbs/sqlite/migrator.js.map +1 -0
- package/dist/dbs/sqlite/query-compiler.d.ts +26 -0
- package/dist/dbs/sqlite/query-compiler.d.ts.map +1 -0
- package/dist/dbs/sqlite/query-compiler.js +80 -0
- package/dist/dbs/sqlite/query-compiler.js.map +1 -0
- package/dist/dbs/sqlite/trx.d.ts +13 -0
- package/dist/dbs/sqlite/trx.d.ts.map +1 -0
- package/dist/dbs/sqlite/trx.js +69 -0
- package/dist/dbs/sqlite/trx.js.map +1 -0
- package/dist/dbs/types.d.ts +92 -0
- package/dist/dbs/types.d.ts.map +1 -0
- package/dist/dbs/types.js +26 -0
- package/dist/dbs/types.js.map +1 -0
- package/dist/dialect.d.ts +3 -0
- package/dist/dialect.d.ts.map +1 -0
- package/dist/dialect.js +2 -0
- package/dist/dialect.js.map +1 -0
- package/dist/driver/factory.d.ts +19 -0
- package/dist/driver/factory.d.ts.map +1 -0
- package/dist/driver/factory.js +24 -0
- package/dist/driver/factory.js.map +1 -0
- package/dist/driver/index.d.ts +6 -0
- package/dist/driver/index.d.ts.map +1 -0
- package/dist/driver/index.js +3 -0
- package/dist/driver/index.js.map +1 -0
- package/dist/driver/sqlite.d.ts +15 -0
- package/dist/driver/sqlite.d.ts.map +1 -0
- package/dist/driver/sqlite.js +74 -0
- package/dist/driver/sqlite.js.map +1 -0
- package/dist/driver/types.d.ts +75 -0
- package/dist/driver/types.d.ts.map +1 -0
- package/dist/driver/types.js +2 -0
- package/dist/driver/types.js.map +1 -0
- package/dist/entity/entity.d.ts +67 -0
- package/dist/entity/entity.d.ts.map +1 -0
- package/dist/entity/entity.js +139 -0
- package/dist/entity/entity.js.map +1 -0
- package/dist/entity/global-driver.d.ts +38 -0
- package/dist/entity/global-driver.d.ts.map +1 -0
- package/dist/entity/global-driver.js +109 -0
- package/dist/entity/global-driver.js.map +1 -0
- package/dist/entity/index.d.ts +8 -0
- package/dist/entity/index.d.ts.map +1 -0
- package/dist/entity/index.js +3 -0
- package/dist/entity/index.js.map +1 -0
- package/dist/entity/pk-columns.d.ts +5 -0
- package/dist/entity/pk-columns.d.ts.map +1 -0
- package/dist/entity/pk-columns.js +14 -0
- package/dist/entity/pk-columns.js.map +1 -0
- package/dist/entity/relations.d.ts +134 -0
- package/dist/entity/relations.d.ts.map +1 -0
- package/dist/entity/relations.js +23 -0
- package/dist/entity/relations.js.map +1 -0
- package/dist/entity/schema-inference.d.ts +77 -0
- package/dist/entity/schema-inference.d.ts.map +1 -0
- package/dist/entity/schema-inference.js +6 -0
- package/dist/entity/schema-inference.js.map +1 -0
- package/dist/entity/types.d.ts +30 -0
- package/dist/entity/types.d.ts.map +1 -0
- package/dist/entity/types.js +5 -0
- package/dist/entity/types.js.map +1 -0
- package/dist/index.d.ts +25 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +12 -0
- package/dist/index.js.map +1 -0
- package/dist/ir/index.d.ts +2 -0
- package/dist/ir/index.d.ts.map +1 -0
- package/dist/ir/index.js +2 -0
- package/dist/ir/index.js.map +1 -0
- package/dist/ir/types.d.ts +148 -0
- package/dist/ir/types.d.ts.map +1 -0
- package/dist/ir/types.js +97 -0
- package/dist/ir/types.js.map +1 -0
- package/dist/migration/cli.d.ts +18 -0
- package/dist/migration/cli.d.ts.map +1 -0
- package/dist/migration/cli.js +236 -0
- package/dist/migration/cli.js.map +1 -0
- package/dist/migration/diff.d.ts +10 -0
- package/dist/migration/diff.d.ts.map +1 -0
- package/dist/migration/diff.js +10 -0
- package/dist/migration/diff.js.map +1 -0
- package/dist/migration/generator.d.ts +12 -0
- package/dist/migration/generator.d.ts.map +1 -0
- package/dist/migration/generator.js +98 -0
- package/dist/migration/generator.js.map +1 -0
- package/dist/migration/index.d.ts +7 -0
- package/dist/migration/index.d.ts.map +1 -0
- package/dist/migration/index.js +5 -0
- package/dist/migration/index.js.map +1 -0
- package/dist/migration/runner.d.ts +32 -0
- package/dist/migration/runner.d.ts.map +1 -0
- package/dist/migration/runner.js +279 -0
- package/dist/migration/runner.js.map +1 -0
- package/dist/migration/topo-sort.d.ts +12 -0
- package/dist/migration/topo-sort.d.ts.map +1 -0
- package/dist/migration/topo-sort.js +42 -0
- package/dist/migration/topo-sort.js.map +1 -0
- package/dist/migration/types.d.ts +45 -0
- package/dist/migration/types.d.ts.map +1 -0
- package/dist/migration/types.js +2 -0
- package/dist/migration/types.js.map +1 -0
- package/dist/orm/aggregates.d.ts +19 -0
- package/dist/orm/aggregates.d.ts.map +1 -0
- package/dist/orm/aggregates.js +32 -0
- package/dist/orm/aggregates.js.map +1 -0
- package/dist/orm/db.d.ts +105 -0
- package/dist/orm/db.d.ts.map +1 -0
- package/dist/orm/db.js +172 -0
- package/dist/orm/db.js.map +1 -0
- package/dist/orm/expr.d.ts +125 -0
- package/dist/orm/expr.d.ts.map +1 -0
- package/dist/orm/expr.js +10 -0
- package/dist/orm/expr.js.map +1 -0
- package/dist/orm/helpers/insert-graph/insert-graph-batch-executor.d.ts +9 -0
- package/dist/orm/helpers/insert-graph/insert-graph-batch-executor.d.ts.map +1 -0
- package/dist/orm/helpers/insert-graph/insert-graph-batch-executor.js +44 -0
- package/dist/orm/helpers/insert-graph/insert-graph-batch-executor.js.map +1 -0
- package/dist/orm/helpers/insert-graph/insert-graph-executor.d.ts +13 -0
- package/dist/orm/helpers/insert-graph/insert-graph-executor.d.ts.map +1 -0
- package/dist/orm/helpers/insert-graph/insert-graph-executor.js +42 -0
- package/dist/orm/helpers/insert-graph/insert-graph-executor.js.map +1 -0
- package/dist/orm/helpers/insert-graph/insert-graph-planner.d.ts +46 -0
- package/dist/orm/helpers/insert-graph/insert-graph-planner.d.ts.map +1 -0
- package/dist/orm/helpers/insert-graph/insert-graph-planner.js +258 -0
- package/dist/orm/helpers/insert-graph/insert-graph-planner.js.map +1 -0
- package/dist/orm/helpers/insert-graph/insert-graph-sequential-executor.d.ts +7 -0
- package/dist/orm/helpers/insert-graph/insert-graph-sequential-executor.d.ts.map +1 -0
- package/dist/orm/helpers/insert-graph/insert-graph-sequential-executor.js +8 -0
- package/dist/orm/helpers/insert-graph/insert-graph-sequential-executor.js.map +1 -0
- package/dist/orm/helpers/insert-graph/sequence-id-assigner.d.ts +15 -0
- package/dist/orm/helpers/insert-graph/sequence-id-assigner.d.ts.map +1 -0
- package/dist/orm/helpers/insert-graph/sequence-id-assigner.js +48 -0
- package/dist/orm/helpers/insert-graph/sequence-id-assigner.js.map +1 -0
- package/dist/orm/helpers/query-plan/expr-builder.d.ts +155 -0
- package/dist/orm/helpers/query-plan/expr-builder.d.ts.map +1 -0
- package/dist/orm/helpers/query-plan/expr-builder.js +297 -0
- package/dist/orm/helpers/query-plan/expr-builder.js.map +1 -0
- package/dist/orm/helpers/query-plan/query-ir-analyzer.d.ts +48 -0
- package/dist/orm/helpers/query-plan/query-ir-analyzer.d.ts.map +1 -0
- package/dist/orm/helpers/query-plan/query-ir-analyzer.js +262 -0
- package/dist/orm/helpers/query-plan/query-ir-analyzer.js.map +1 -0
- package/dist/orm/helpers/query-plan/query-plan.d.ts +164 -0
- package/dist/orm/helpers/query-plan/query-plan.d.ts.map +1 -0
- package/dist/orm/helpers/query-plan/query-plan.js +549 -0
- package/dist/orm/helpers/query-plan/query-plan.js.map +1 -0
- package/dist/orm/helpers/query-plan/select-classifier.d.ts +161 -0
- package/dist/orm/helpers/query-plan/select-classifier.d.ts.map +1 -0
- package/dist/orm/helpers/query-plan/select-classifier.js +359 -0
- package/dist/orm/helpers/query-plan/select-classifier.js.map +1 -0
- package/dist/orm/helpers/relations/relation-assembler.d.ts +21 -0
- package/dist/orm/helpers/relations/relation-assembler.d.ts.map +1 -0
- package/dist/orm/helpers/relations/relation-assembler.js +60 -0
- package/dist/orm/helpers/relations/relation-assembler.js.map +1 -0
- package/dist/orm/helpers/relations/relation-fetcher.d.ts +30 -0
- package/dist/orm/helpers/relations/relation-fetcher.d.ts.map +1 -0
- package/dist/orm/helpers/relations/relation-fetcher.js +128 -0
- package/dist/orm/helpers/relations/relation-fetcher.js.map +1 -0
- package/dist/orm/helpers/relations/relation-joins.d.ts +74 -0
- package/dist/orm/helpers/relations/relation-joins.d.ts.map +1 -0
- package/dist/orm/helpers/relations/relation-joins.js +138 -0
- package/dist/orm/helpers/relations/relation-joins.js.map +1 -0
- package/dist/orm/helpers/relations/relation-resolver.d.ts +14 -0
- package/dist/orm/helpers/relations/relation-resolver.d.ts.map +1 -0
- package/dist/orm/helpers/relations/relation-resolver.js +25 -0
- package/dist/orm/helpers/relations/relation-resolver.js.map +1 -0
- package/dist/orm/index.d.ts +7 -0
- package/dist/orm/index.d.ts.map +1 -0
- package/dist/orm/index.js +5 -0
- package/dist/orm/index.js.map +1 -0
- package/dist/orm/query-builder.d.ts +136 -0
- package/dist/orm/query-builder.d.ts.map +1 -0
- package/dist/orm/query-builder.js +433 -0
- package/dist/orm/query-builder.js.map +1 -0
- package/dist/orm/query-helpers.d.ts +35 -0
- package/dist/orm/query-helpers.d.ts.map +1 -0
- package/dist/orm/query-helpers.js +83 -0
- package/dist/orm/query-helpers.js.map +1 -0
- package/dist/orm/query-state.d.ts +56 -0
- package/dist/orm/query-state.d.ts.map +1 -0
- package/dist/orm/query-state.js +112 -0
- package/dist/orm/query-state.js.map +1 -0
- package/dist/orm/single-row-query-builder.d.ts +18 -0
- package/dist/orm/single-row-query-builder.d.ts.map +1 -0
- package/dist/orm/single-row-query-builder.js +90 -0
- package/dist/orm/single-row-query-builder.js.map +1 -0
- package/dist/orm/trx.d.ts +40 -0
- package/dist/orm/trx.d.ts.map +1 -0
- package/dist/orm/trx.js +118 -0
- package/dist/orm/trx.js.map +1 -0
- package/dist/parser/acorn-helpers.d.ts +43 -0
- package/dist/parser/acorn-helpers.d.ts.map +1 -0
- package/dist/parser/acorn-helpers.js +104 -0
- package/dist/parser/acorn-helpers.js.map +1 -0
- package/dist/parser/acorn-member.d.ts +16 -0
- package/dist/parser/acorn-member.d.ts.map +1 -0
- package/dist/parser/acorn-member.js +31 -0
- package/dist/parser/acorn-member.js.map +1 -0
- package/dist/parser/acorn-types.d.ts +14 -0
- package/dist/parser/acorn-types.d.ts.map +1 -0
- package/dist/parser/acorn-types.js +6 -0
- package/dist/parser/acorn-types.js.map +1 -0
- package/dist/parser/arrow-source.d.ts +23 -0
- package/dist/parser/arrow-source.d.ts.map +1 -0
- package/dist/parser/arrow-source.js +70 -0
- package/dist/parser/arrow-source.js.map +1 -0
- package/dist/parser/group-by.d.ts +17 -0
- package/dist/parser/group-by.d.ts.map +1 -0
- package/dist/parser/group-by.js +62 -0
- package/dist/parser/group-by.js.map +1 -0
- package/dist/parser/index.d.ts +5 -0
- package/dist/parser/index.d.ts.map +1 -0
- package/dist/parser/index.js +3 -0
- package/dist/parser/index.js.map +1 -0
- package/dist/parser/parse-arrow.d.ts +10 -0
- package/dist/parser/parse-arrow.d.ts.map +1 -0
- package/dist/parser/parse-arrow.js +9 -0
- package/dist/parser/parse-arrow.js.map +1 -0
- package/dist/parser/predicate-walk.d.ts +24 -0
- package/dist/parser/predicate-walk.d.ts.map +1 -0
- package/dist/parser/predicate-walk.js +247 -0
- package/dist/parser/predicate-walk.js.map +1 -0
- package/dist/parser/resolve.d.ts +25 -0
- package/dist/parser/resolve.d.ts.map +1 -0
- package/dist/parser/resolve.js +134 -0
- package/dist/parser/resolve.js.map +1 -0
- package/dist/parser/select.d.ts +7 -0
- package/dist/parser/select.d.ts.map +1 -0
- package/dist/parser/select.js +333 -0
- package/dist/parser/select.js.map +1 -0
- package/dist/parser/update.d.ts +7 -0
- package/dist/parser/update.d.ts.map +1 -0
- package/dist/parser/update.js +51 -0
- package/dist/parser/update.js.map +1 -0
- package/dist/postgres/aggregates.d.ts +12 -0
- package/dist/postgres/aggregates.d.ts.map +1 -0
- package/dist/postgres/aggregates.js +19 -0
- package/dist/postgres/aggregates.js.map +1 -0
- package/dist/postgres.d.ts +6 -0
- package/dist/postgres.d.ts.map +1 -0
- package/dist/postgres.js +6 -0
- package/dist/postgres.js.map +1 -0
- package/dist/schema/index.d.ts +2 -0
- package/dist/schema/index.d.ts.map +1 -0
- package/dist/schema/index.js +2 -0
- package/dist/schema/index.js.map +1 -0
- package/dist/schema/types.d.ts +16 -0
- package/dist/schema/types.d.ts.map +1 -0
- package/dist/schema/types.js +40 -0
- package/dist/schema/types.js.map +1 -0
- package/dist/sqlite/aggregates.d.ts +8 -0
- package/dist/sqlite/aggregates.d.ts.map +1 -0
- package/dist/sqlite/aggregates.js +11 -0
- package/dist/sqlite/aggregates.js.map +1 -0
- package/dist/sqlite.d.ts +6 -0
- package/dist/sqlite.d.ts.map +1 -0
- package/dist/sqlite.js +6 -0
- package/dist/sqlite.js.map +1 -0
- package/dist/transformer/bindings.d.ts +18 -0
- package/dist/transformer/bindings.d.ts.map +1 -0
- package/dist/transformer/bindings.js +52 -0
- package/dist/transformer/bindings.js.map +1 -0
- package/dist/transformer/index.d.ts +17 -0
- package/dist/transformer/index.d.ts.map +1 -0
- package/dist/transformer/index.js +75 -0
- package/dist/transformer/index.js.map +1 -0
- package/dist/transformer/ir-emit.d.ts +12 -0
- package/dist/transformer/ir-emit.d.ts.map +1 -0
- package/dist/transformer/ir-emit.js +144 -0
- package/dist/transformer/ir-emit.js.map +1 -0
- package/dist/transformer/join-transformer.d.ts +12 -0
- package/dist/transformer/join-transformer.d.ts.map +1 -0
- package/dist/transformer/join-transformer.js +102 -0
- package/dist/transformer/join-transformer.js.map +1 -0
- package/dist/transformer/orderby-transformer.d.ts +13 -0
- package/dist/transformer/orderby-transformer.d.ts.map +1 -0
- package/dist/transformer/orderby-transformer.js +84 -0
- package/dist/transformer/orderby-transformer.js.map +1 -0
- package/dist/transformer/select-transformer.d.ts +9 -0
- package/dist/transformer/select-transformer.d.ts.map +1 -0
- package/dist/transformer/select-transformer.js +222 -0
- package/dist/transformer/select-transformer.js.map +1 -0
- package/dist/transformer/shared.d.ts +12 -0
- package/dist/transformer/shared.d.ts.map +1 -0
- package/dist/transformer/shared.js +12 -0
- package/dist/transformer/shared.js.map +1 -0
- package/dist/transformer/subquery-transformer.d.ts +15 -0
- package/dist/transformer/subquery-transformer.d.ts.map +1 -0
- package/dist/transformer/subquery-transformer.js +43 -0
- package/dist/transformer/subquery-transformer.js.map +1 -0
- package/dist/transformer/ts-aggregates.d.ts +13 -0
- package/dist/transformer/ts-aggregates.d.ts.map +1 -0
- package/dist/transformer/ts-aggregates.js +83 -0
- package/dist/transformer/ts-aggregates.js.map +1 -0
- package/dist/transformer/ts-binary.d.ts +8 -0
- package/dist/transformer/ts-binary.d.ts.map +1 -0
- package/dist/transformer/ts-binary.js +32 -0
- package/dist/transformer/ts-binary.js.map +1 -0
- package/dist/transformer/ts-member.d.ts +12 -0
- package/dist/transformer/ts-member.d.ts.map +1 -0
- package/dist/transformer/ts-member.js +22 -0
- package/dist/transformer/ts-member.js.map +1 -0
- package/dist/transformer/ts-utils.d.ts +10 -0
- package/dist/transformer/ts-utils.d.ts.map +1 -0
- package/dist/transformer/ts-utils.js +38 -0
- package/dist/transformer/ts-utils.js.map +1 -0
- package/dist/transformer/typhex-type.d.ts +8 -0
- package/dist/transformer/typhex-type.d.ts.map +1 -0
- package/dist/transformer/typhex-type.js +52 -0
- package/dist/transformer/typhex-type.js.map +1 -0
- package/dist/transformer/where-transformer.d.ts +33 -0
- package/dist/transformer/where-transformer.d.ts.map +1 -0
- package/dist/transformer/where-transformer.js +400 -0
- package/dist/transformer/where-transformer.js.map +1 -0
- package/dist/utils.d.ts +5 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +30 -0
- package/dist/utils.js.map +1 -0
- package/docs/drivers/postgres.md +54 -0
- package/docs/drivers/sqlite.md +33 -0
- package/docs/guide/aggregations.md +272 -0
- package/docs/guide/bulk-operations.md +204 -0
- package/docs/guide/cte-and-unions.md +270 -0
- package/docs/guide/entities-relations.md +208 -0
- package/docs/guide/expressions.md +98 -0
- package/docs/guide/filtering-by-relations.md +166 -0
- package/docs/guide/getting-started.md +277 -0
- package/docs/guide/querying-relations.md +133 -0
- package/docs/guide/subqueries.md +152 -0
- package/docs/guide/transactions.md +146 -0
- package/docs/guide/typescript-transformer.md +138 -0
- package/docs/index.md +33 -0
- package/docs/migrations/overview.md +143 -0
- package/docs/public-api.md +133 -0
- package/docs/reference/api.md +665 -0
- package/docs/reference/architecture.md +83 -0
- package/docs/release-checklist.md +55 -0
- package/etc/typhex.api.md +774 -0
- package/package.json +137 -0
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Migration generator: takes DiffActions, groups them by table, orders them
|
|
3
|
+
* topologically, and writes timestamped .js files with up() and down() functions.
|
|
4
|
+
* Uses the dialect migrator for diff and the query compiler for SQL generation.
|
|
5
|
+
*/
|
|
6
|
+
import { writeFileSync, mkdirSync, existsSync } from "node:fs";
|
|
7
|
+
import { join } from "node:path";
|
|
8
|
+
import { parseFkDependencies, topoSort } from "./topo-sort.js";
|
|
9
|
+
import { groupBy } from "../utils.js";
|
|
10
|
+
function timestamp() {
|
|
11
|
+
const d = new Date();
|
|
12
|
+
const pad = (n, len = 2) => String(n).padStart(len, "0");
|
|
13
|
+
return (`${d.getFullYear()}${pad(d.getMonth() + 1)}${pad(d.getDate())}` +
|
|
14
|
+
`${pad(d.getHours())}${pad(d.getMinutes())}${pad(d.getSeconds())}`);
|
|
15
|
+
}
|
|
16
|
+
function slugify(s) {
|
|
17
|
+
return s.replace(/[^a-z0-9]+/gi, "_").toLowerCase();
|
|
18
|
+
}
|
|
19
|
+
function scriptName(ts, seq, action) {
|
|
20
|
+
const seqStr = String(seq).padStart(2, "0");
|
|
21
|
+
const base = `${ts}${seqStr}`;
|
|
22
|
+
switch (action.kind) {
|
|
23
|
+
case "add_table":
|
|
24
|
+
return `${base}_add_${slugify(action.table)}_table`;
|
|
25
|
+
case "drop_table":
|
|
26
|
+
return `${base}_drop_${slugify(action.table)}_table`;
|
|
27
|
+
case "add_column":
|
|
28
|
+
return `${base}_add_${slugify(action.column)}_column_on_${slugify(action.table)}`;
|
|
29
|
+
case "drop_column":
|
|
30
|
+
return `${base}_drop_${slugify(action.column)}_column_on_${slugify(action.table)}`;
|
|
31
|
+
case "alter_column":
|
|
32
|
+
return `${base}_alter_${slugify(action.column)}_column_on_${slugify(action.table)}`;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
function escapeTemplateLiteralContent(value) {
|
|
36
|
+
return value.replaceAll("`", "\\`").replaceAll("${", "\\${");
|
|
37
|
+
}
|
|
38
|
+
function renderMigrationFile(upSql, downSql) {
|
|
39
|
+
return `export const upSql = \`${escapeTemplateLiteralContent(upSql)}\`;
|
|
40
|
+
|
|
41
|
+
export const downSql = \`${escapeTemplateLiteralContent(downSql)}\`;
|
|
42
|
+
|
|
43
|
+
export async function up(db) {
|
|
44
|
+
await db.run(upSql);
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
export async function down(db) {
|
|
48
|
+
await db.run(downSql);
|
|
49
|
+
}
|
|
50
|
+
`;
|
|
51
|
+
}
|
|
52
|
+
function groupByTable(actions) {
|
|
53
|
+
return [...groupBy(actions, (a) => a.table)].map(([table, actions]) => ({ table, actions }));
|
|
54
|
+
}
|
|
55
|
+
/** Generates SQL migration files from entity definitions compared to the live database schema. */
|
|
56
|
+
export async function generateMigrationFiles(driver, entities) {
|
|
57
|
+
const resolvedDriver = driver;
|
|
58
|
+
const compiler = resolvedDriver.dialect.queryCompiler;
|
|
59
|
+
const actions = await resolvedDriver.dialect.migrator.diffSchema(resolvedDriver, entities);
|
|
60
|
+
if (actions.length === 0)
|
|
61
|
+
return [];
|
|
62
|
+
const groups = groupByTable(actions);
|
|
63
|
+
const deps = parseFkDependencies(entities);
|
|
64
|
+
const allTables = groups.map((g) => g.table);
|
|
65
|
+
const sorted = topoSort(allTables, deps);
|
|
66
|
+
const sortedGroups = sorted
|
|
67
|
+
.map((t) => groups.find((g) => g.table === t))
|
|
68
|
+
.filter((g) => g != null);
|
|
69
|
+
const ts = timestamp();
|
|
70
|
+
const files = [];
|
|
71
|
+
let seq = 1;
|
|
72
|
+
for (const group of sortedGroups) {
|
|
73
|
+
for (const action of group.actions) {
|
|
74
|
+
const upSql = compiler.compileMigrationUp(action);
|
|
75
|
+
const downSql = compiler.compileMigrationDown(action);
|
|
76
|
+
files.push({
|
|
77
|
+
name: scriptName(ts, seq, action),
|
|
78
|
+
upSql,
|
|
79
|
+
downSql,
|
|
80
|
+
content: renderMigrationFile(upSql, downSql),
|
|
81
|
+
});
|
|
82
|
+
seq++;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
return files;
|
|
86
|
+
}
|
|
87
|
+
export function writeMigrationFiles(dir, files) {
|
|
88
|
+
if (!existsSync(dir))
|
|
89
|
+
mkdirSync(dir, { recursive: true });
|
|
90
|
+
const paths = [];
|
|
91
|
+
for (const f of files) {
|
|
92
|
+
const filePath = join(dir, `${f.name}.js`);
|
|
93
|
+
writeFileSync(filePath, f.content, "utf-8");
|
|
94
|
+
paths.push(filePath);
|
|
95
|
+
}
|
|
96
|
+
return paths;
|
|
97
|
+
}
|
|
98
|
+
//# sourceMappingURL=generator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generator.js","sourceRoot":"","sources":["../../src/migration/generator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export { diffSchema } from "./diff.js";
|
|
2
|
+
export { generateMigrationFiles, writeMigrationFiles } from "./generator.js";
|
|
3
|
+
export { runMigrations, migrationStatus, appliedMigrations, pendingMigrations, dryRunMigrations, upMigration, downMigration, } from "./runner.js";
|
|
4
|
+
export type { MigrationResult } from "./runner.js";
|
|
5
|
+
export { parseFkDependencies, topoSort } from "./topo-sort.js";
|
|
6
|
+
export type { DiffAction, DialectName, MigrationFile, MigrationRecord, MigrationConfig, PendingMigration, MigrationDryRun, MigrationDb, } from "./types.js";
|
|
7
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/migration/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAC7E,OAAO,EACL,aAAa,EACb,eAAe,EACf,iBAAiB,EACjB,iBAAiB,EACjB,gBAAgB,EAChB,WAAW,EACX,aAAa,GACd,MAAM,aAAa,CAAC;AACrB,YAAY,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,mBAAmB,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC/D,YAAY,EACV,UAAU,EACV,WAAW,EACX,aAAa,EACb,eAAe,EACf,eAAe,EACf,gBAAgB,EAChB,eAAe,EACf,WAAW,GACZ,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { diffSchema } from "./diff.js";
|
|
2
|
+
export { generateMigrationFiles, writeMigrationFiles } from "./generator.js";
|
|
3
|
+
export { runMigrations, migrationStatus, appliedMigrations, pendingMigrations, dryRunMigrations, upMigration, downMigration, } from "./runner.js";
|
|
4
|
+
export { parseFkDependencies, topoSort } from "./topo-sort.js";
|
|
5
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/migration/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAC7E,OAAO,EACL,aAAa,EACb,eAAe,EACf,iBAAiB,EACjB,iBAAiB,EACjB,gBAAgB,EAChB,WAAW,EACX,aAAa,GACd,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,mBAAmB,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Migration runner: discovers .js/.mjs migration files, skips already-applied ones,
|
|
3
|
+
* executes pending ones in filename order by calling their exported up(db) function,
|
|
4
|
+
* and records each in the _typhex_migrations tracking table.
|
|
5
|
+
* downMigration calls the exported down(db) function and removes the tracking record.
|
|
6
|
+
*/
|
|
7
|
+
import type { Driver } from "../driver/types.js";
|
|
8
|
+
import type { MigrationRecord, PendingMigration } from "./types.js";
|
|
9
|
+
/** Result returned by `runMigrations`: lists of applied and skipped migration file names. */
|
|
10
|
+
export interface MigrationResult {
|
|
11
|
+
/** Names of migration files that were applied in this run. */
|
|
12
|
+
applied: string[];
|
|
13
|
+
/** Names of migration files that were already applied and skipped. */
|
|
14
|
+
skipped: string[];
|
|
15
|
+
}
|
|
16
|
+
/** Applies all pending migration files from `dir` in chronological order. */
|
|
17
|
+
export declare function runMigrations(driver: Driver, dir: string): Promise<MigrationResult>;
|
|
18
|
+
/** Returns which migration files have been applied and which are pending. */
|
|
19
|
+
export declare function migrationStatus(driver: Driver, dir: string): Promise<{
|
|
20
|
+
applied: MigrationRecord[];
|
|
21
|
+
pending: string[];
|
|
22
|
+
}>;
|
|
23
|
+
export declare function appliedMigrations(driver: Driver): Promise<MigrationRecord[]>;
|
|
24
|
+
export declare function pendingMigrations(driver: Driver, dir: string): Promise<PendingMigration[]>;
|
|
25
|
+
export declare function dryRunMigrations(driver: Driver, dir: string): Promise<{
|
|
26
|
+
applied: MigrationRecord[];
|
|
27
|
+
pending: PendingMigration[];
|
|
28
|
+
skipped: string[];
|
|
29
|
+
}>;
|
|
30
|
+
export declare function upMigration(driver: Driver, dir: string, name: string): Promise<void>;
|
|
31
|
+
export declare function downMigration(driver: Driver, dir: string, name: string): Promise<void>;
|
|
32
|
+
//# sourceMappingURL=runner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../src/migration/runner.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,OAAO,KAAK,EAAE,MAAM,EAA8B,MAAM,oBAAoB,CAAC;AAC7E,OAAO,KAAK,EAAe,eAAe,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAgLjF,6FAA6F;AAC7F,MAAM,WAAW,eAAe;IAC9B,8DAA8D;IAC9D,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,sEAAsE;IACtE,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,6EAA6E;AAC7E,wBAAsB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAyBzF;AAED,6EAA6E;AAC7E,wBAAsB,eAAe,CACnC,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,MAAM,GACV,OAAO,CAAC;IAAE,OAAO,EAAE,eAAe,EAAE,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,CAO5D;AAED,wBAAsB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC,CAElF;AAED,wBAAsB,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAKhG;AAED,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,MAAM,GACV,OAAO,CAAC;IAAE,OAAO,EAAE,eAAe,EAAE,CAAC;IAAC,OAAO,EAAE,gBAAgB,EAAE,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,CAgBzF;AAED,wBAAsB,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE1F;AAED,wBAAsB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE5F"}
|
|
@@ -0,0 +1,279 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Migration runner: discovers .js/.mjs migration files, skips already-applied ones,
|
|
3
|
+
* executes pending ones in filename order by calling their exported up(db) function,
|
|
4
|
+
* and records each in the _typhex_migrations tracking table.
|
|
5
|
+
* downMigration calls the exported down(db) function and removes the tracking record.
|
|
6
|
+
*/
|
|
7
|
+
import { readFileSync, readdirSync } from "node:fs";
|
|
8
|
+
import { join } from "node:path";
|
|
9
|
+
import { pathToFileURL } from "node:url";
|
|
10
|
+
import * as acorn from "acorn";
|
|
11
|
+
function asResolvedDriver(driver) {
|
|
12
|
+
return driver;
|
|
13
|
+
}
|
|
14
|
+
class ConnectionMigrationDb {
|
|
15
|
+
conn;
|
|
16
|
+
constructor(conn) {
|
|
17
|
+
this.conn = conn;
|
|
18
|
+
}
|
|
19
|
+
async run(sql, params = []) {
|
|
20
|
+
if (params.length > 0) {
|
|
21
|
+
await this.conn.execute(sql, params);
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
24
|
+
for (const statement of splitSqlStatements(sql)) {
|
|
25
|
+
await this.conn.execute(statement, []);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
async function ensureTrackingTable(driver) {
|
|
30
|
+
const compiled = asResolvedDriver(driver).dialect.queryCompiler.compileTrackingTable();
|
|
31
|
+
await driver.execute(compiled.sql, compiled.params);
|
|
32
|
+
}
|
|
33
|
+
async function getAppliedRows(driver) {
|
|
34
|
+
await ensureTrackingTable(driver);
|
|
35
|
+
const compiled = asResolvedDriver(driver).dialect.queryCompiler.compileAppliedMigrations();
|
|
36
|
+
const rows = await driver.execute(compiled.sql, compiled.params).then((r) => r.rows);
|
|
37
|
+
return rows;
|
|
38
|
+
}
|
|
39
|
+
async function getAppliedNames(driver) {
|
|
40
|
+
const rows = await getAppliedRows(driver);
|
|
41
|
+
return new Set(rows.map((r) => r.name));
|
|
42
|
+
}
|
|
43
|
+
function listMigrationFiles(dir) {
|
|
44
|
+
let entries;
|
|
45
|
+
try {
|
|
46
|
+
entries = readdirSync(dir).sort();
|
|
47
|
+
}
|
|
48
|
+
catch (err) {
|
|
49
|
+
if (err.code === "ENOENT")
|
|
50
|
+
return [];
|
|
51
|
+
throw err;
|
|
52
|
+
}
|
|
53
|
+
const seen = new Set();
|
|
54
|
+
const files = [];
|
|
55
|
+
for (const file of entries) {
|
|
56
|
+
if (!file.endsWith(".js") && !file.endsWith(".mjs"))
|
|
57
|
+
continue;
|
|
58
|
+
const name = stripExtension(file);
|
|
59
|
+
if (seen.has(name))
|
|
60
|
+
continue;
|
|
61
|
+
seen.add(name);
|
|
62
|
+
files.push(file);
|
|
63
|
+
}
|
|
64
|
+
return files;
|
|
65
|
+
}
|
|
66
|
+
function stripExtension(file) {
|
|
67
|
+
return file.replace(/\.(m?js)$/, "");
|
|
68
|
+
}
|
|
69
|
+
async function loadModule(dir, file) {
|
|
70
|
+
const url = pathToFileURL(join(dir, file)).href;
|
|
71
|
+
return import(url);
|
|
72
|
+
}
|
|
73
|
+
function readMigrationSql(dir, file) {
|
|
74
|
+
const source = readFileSync(join(dir, file), "utf-8");
|
|
75
|
+
const ast = acorn.parse(source, {
|
|
76
|
+
ecmaVersion: "latest",
|
|
77
|
+
sourceType: "module",
|
|
78
|
+
});
|
|
79
|
+
const values = new Map();
|
|
80
|
+
for (const node of ast.body) {
|
|
81
|
+
if (!isRecord(node) || node.type !== "ExportNamedDeclaration")
|
|
82
|
+
continue;
|
|
83
|
+
const declaration = node.declaration;
|
|
84
|
+
if (!isRecord(declaration) || declaration.type !== "VariableDeclaration")
|
|
85
|
+
continue;
|
|
86
|
+
if (!Array.isArray(declaration.declarations))
|
|
87
|
+
continue;
|
|
88
|
+
for (const declarator of declaration.declarations) {
|
|
89
|
+
if (!isRecord(declarator))
|
|
90
|
+
continue;
|
|
91
|
+
const name = identifierName(declarator.id);
|
|
92
|
+
if (name !== "upSql" && name !== "downSql")
|
|
93
|
+
continue;
|
|
94
|
+
values.set(name, readStaticStringExport(file, name, declarator.init));
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
const upSql = values.get("upSql");
|
|
98
|
+
const downSql = values.get("downSql");
|
|
99
|
+
if (upSql == null || downSql == null) {
|
|
100
|
+
throw new Error(`Migration "${file}" must export static string upSql and downSql values.`);
|
|
101
|
+
}
|
|
102
|
+
return { upSql, downSql };
|
|
103
|
+
}
|
|
104
|
+
function identifierName(node) {
|
|
105
|
+
if (!isRecord(node) || node.type !== "Identifier" || typeof node.name !== "string") {
|
|
106
|
+
return null;
|
|
107
|
+
}
|
|
108
|
+
return node.name;
|
|
109
|
+
}
|
|
110
|
+
function readStaticStringExport(file, name, node) {
|
|
111
|
+
if (isRecord(node) && node.type === "Literal" && typeof node.value === "string")
|
|
112
|
+
return node.value;
|
|
113
|
+
if (isRecord(node) && node.type === "TemplateLiteral") {
|
|
114
|
+
const expressions = node.expressions;
|
|
115
|
+
const quasis = node.quasis;
|
|
116
|
+
if (Array.isArray(expressions) &&
|
|
117
|
+
expressions.length === 0 &&
|
|
118
|
+
Array.isArray(quasis) &&
|
|
119
|
+
quasis.length === 1) {
|
|
120
|
+
const quasi = quasis[0];
|
|
121
|
+
if (isRecord(quasi) && isRecord(quasi.value) && typeof quasi.value.cooked === "string") {
|
|
122
|
+
return quasi.value.cooked;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
throw new Error(`Migration "${file}" export "${name}" must be a static string literal.`);
|
|
127
|
+
}
|
|
128
|
+
function isRecord(value) {
|
|
129
|
+
return value != null && typeof value === "object";
|
|
130
|
+
}
|
|
131
|
+
function buildPendingMigration(dir, file) {
|
|
132
|
+
const { upSql, downSql } = readMigrationSql(dir, file);
|
|
133
|
+
return {
|
|
134
|
+
name: stripExtension(file),
|
|
135
|
+
file,
|
|
136
|
+
upSql,
|
|
137
|
+
downSql,
|
|
138
|
+
statements: splitSqlStatements(upSql),
|
|
139
|
+
downStatements: splitSqlStatements(downSql),
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
async function withConnection(driver, fn) {
|
|
143
|
+
const conn = await driver.connect();
|
|
144
|
+
try {
|
|
145
|
+
return await fn(conn);
|
|
146
|
+
}
|
|
147
|
+
finally {
|
|
148
|
+
await conn.release();
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
async function withTransaction(conn, fn) {
|
|
152
|
+
const db = new ConnectionMigrationDb(conn);
|
|
153
|
+
await conn.execute("BEGIN", []);
|
|
154
|
+
try {
|
|
155
|
+
const result = await fn(db);
|
|
156
|
+
await conn.execute("COMMIT", []);
|
|
157
|
+
return result;
|
|
158
|
+
}
|
|
159
|
+
catch (e) {
|
|
160
|
+
try {
|
|
161
|
+
await conn.execute("ROLLBACK", []);
|
|
162
|
+
}
|
|
163
|
+
catch {
|
|
164
|
+
/* ignore */
|
|
165
|
+
}
|
|
166
|
+
throw e;
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
/** Applies all pending migration files from `dir` in chronological order. */
|
|
170
|
+
export async function runMigrations(driver, dir) {
|
|
171
|
+
const applied = await getAppliedNames(driver);
|
|
172
|
+
const files = listMigrationFiles(dir);
|
|
173
|
+
const compiler = asResolvedDriver(driver).dialect.queryCompiler;
|
|
174
|
+
const result = { applied: [], skipped: [] };
|
|
175
|
+
await withConnection(driver, (conn) => withTransaction(conn, async (db) => {
|
|
176
|
+
for (const file of files) {
|
|
177
|
+
const name = stripExtension(file);
|
|
178
|
+
if (applied.has(name)) {
|
|
179
|
+
result.skipped.push(name);
|
|
180
|
+
continue;
|
|
181
|
+
}
|
|
182
|
+
const mod = await loadModule(dir, file);
|
|
183
|
+
await mod.up(db);
|
|
184
|
+
const record = compiler.compileRecordMigration(name);
|
|
185
|
+
await conn.execute(record.sql, record.params);
|
|
186
|
+
applied.add(name);
|
|
187
|
+
result.applied.push(name);
|
|
188
|
+
}
|
|
189
|
+
}));
|
|
190
|
+
return result;
|
|
191
|
+
}
|
|
192
|
+
/** Returns which migration files have been applied and which are pending. */
|
|
193
|
+
export async function migrationStatus(driver, dir) {
|
|
194
|
+
const appliedRows = await getAppliedRows(driver);
|
|
195
|
+
const appliedNames = new Set(appliedRows.map((r) => r.name));
|
|
196
|
+
const pending = listMigrationFiles(dir)
|
|
197
|
+
.map(stripExtension)
|
|
198
|
+
.filter((n) => !appliedNames.has(n));
|
|
199
|
+
return { applied: appliedRows, pending };
|
|
200
|
+
}
|
|
201
|
+
export async function appliedMigrations(driver) {
|
|
202
|
+
return getAppliedRows(driver);
|
|
203
|
+
}
|
|
204
|
+
export async function pendingMigrations(driver, dir) {
|
|
205
|
+
const appliedNames = await getAppliedNames(driver);
|
|
206
|
+
return listMigrationFiles(dir)
|
|
207
|
+
.filter((file) => !appliedNames.has(stripExtension(file)))
|
|
208
|
+
.map((file) => buildPendingMigration(dir, file));
|
|
209
|
+
}
|
|
210
|
+
export async function dryRunMigrations(driver, dir) {
|
|
211
|
+
const applied = await getAppliedRows(driver);
|
|
212
|
+
const appliedNames = new Set(applied.map((r) => r.name));
|
|
213
|
+
const pending = [];
|
|
214
|
+
const skipped = [];
|
|
215
|
+
for (const file of listMigrationFiles(dir)) {
|
|
216
|
+
const name = stripExtension(file);
|
|
217
|
+
if (appliedNames.has(name)) {
|
|
218
|
+
skipped.push(name);
|
|
219
|
+
}
|
|
220
|
+
else {
|
|
221
|
+
pending.push(buildPendingMigration(dir, file));
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
return { applied, pending, skipped };
|
|
225
|
+
}
|
|
226
|
+
export async function upMigration(driver, dir, name) {
|
|
227
|
+
await runSingleMigration(driver, dir, name, "up");
|
|
228
|
+
}
|
|
229
|
+
export async function downMigration(driver, dir, name) {
|
|
230
|
+
await runSingleMigration(driver, dir, name, "down");
|
|
231
|
+
}
|
|
232
|
+
async function runSingleMigration(driver, dir, name, direction) {
|
|
233
|
+
const applied = await getAppliedNames(driver);
|
|
234
|
+
const isApplied = applied.has(name);
|
|
235
|
+
if (direction === "up" && isApplied) {
|
|
236
|
+
throw new Error(`Migration "${name}" is already applied.`);
|
|
237
|
+
}
|
|
238
|
+
if (direction === "down" && !isApplied) {
|
|
239
|
+
throw new Error(`Migration "${name}" is not applied.`);
|
|
240
|
+
}
|
|
241
|
+
const file = findMigrationFile(dir, name);
|
|
242
|
+
if (!file) {
|
|
243
|
+
throw new Error(`Migration file for "${name}" not found in "${dir}".`);
|
|
244
|
+
}
|
|
245
|
+
const mod = await loadModule(dir, file);
|
|
246
|
+
const compiler = asResolvedDriver(driver).dialect.queryCompiler;
|
|
247
|
+
const tracking = direction === "up"
|
|
248
|
+
? compiler.compileRecordMigration(name)
|
|
249
|
+
: compiler.compileDeleteMigration(name);
|
|
250
|
+
await withConnection(driver, (conn) => withTransaction(conn, async (db) => {
|
|
251
|
+
await mod[direction](db);
|
|
252
|
+
await conn.execute(tracking.sql, tracking.params);
|
|
253
|
+
}));
|
|
254
|
+
}
|
|
255
|
+
function findMigrationFile(dir, name) {
|
|
256
|
+
let entries;
|
|
257
|
+
try {
|
|
258
|
+
entries = readdirSync(dir);
|
|
259
|
+
}
|
|
260
|
+
catch {
|
|
261
|
+
return null;
|
|
262
|
+
}
|
|
263
|
+
for (const ext of [".js", ".mjs"]) {
|
|
264
|
+
const file = `${name}${ext}`;
|
|
265
|
+
if (entries.includes(file))
|
|
266
|
+
return file;
|
|
267
|
+
}
|
|
268
|
+
return null;
|
|
269
|
+
}
|
|
270
|
+
function splitSqlStatements(sql) {
|
|
271
|
+
return sql
|
|
272
|
+
.split(";")
|
|
273
|
+
.map((s) => s.trim())
|
|
274
|
+
.filter((s) => s.length > 0 && !isCommentOnlySql(s));
|
|
275
|
+
}
|
|
276
|
+
function isCommentOnlySql(sql) {
|
|
277
|
+
return sql.split("\n").every((line) => line.trim() === "" || line.trim().startsWith("--"));
|
|
278
|
+
}
|
|
279
|
+
//# sourceMappingURL=runner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runner.js","sourceRoot":"","sources":["../../src/migration/runner.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Topological sort for table creation order based on FK references.
|
|
3
|
+
* Parses "references <table>(...)" from column definitions.
|
|
4
|
+
*/
|
|
5
|
+
export declare function parseFkDependencies(entities: ReadonlyArray<{
|
|
6
|
+
table: {
|
|
7
|
+
_table: string;
|
|
8
|
+
_schema: Record<string, string>;
|
|
9
|
+
};
|
|
10
|
+
}>): Map<string, string[]>;
|
|
11
|
+
export declare function topoSort(names: string[], deps: Map<string, string[]>): string[];
|
|
12
|
+
//# sourceMappingURL=topo-sort.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"topo-sort.d.ts","sourceRoot":"","sources":["../../src/migration/topo-sort.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,aAAa,CAAC;IAAE,KAAK,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;KAAE,CAAA;CAAE,CAAC,GACtF,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAWvB;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,GAAG,MAAM,EAAE,CAsB/E"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Topological sort for table creation order based on FK references.
|
|
3
|
+
* Parses "references <table>(...)" from column definitions.
|
|
4
|
+
*/
|
|
5
|
+
export function parseFkDependencies(entities) {
|
|
6
|
+
const deps = new Map();
|
|
7
|
+
for (const e of entities) {
|
|
8
|
+
const refs = [];
|
|
9
|
+
for (const def of Object.values(e.table._schema)) {
|
|
10
|
+
const match = def.match(/references\s+"?(\w+)"?/i);
|
|
11
|
+
if (match && match[1] !== e.table._table)
|
|
12
|
+
refs.push(match[1]);
|
|
13
|
+
}
|
|
14
|
+
deps.set(e.table._table, refs);
|
|
15
|
+
}
|
|
16
|
+
return deps;
|
|
17
|
+
}
|
|
18
|
+
export function topoSort(names, deps) {
|
|
19
|
+
const visited = new Set();
|
|
20
|
+
const visiting = new Set();
|
|
21
|
+
const result = [];
|
|
22
|
+
const nameSet = new Set(names);
|
|
23
|
+
function visit(name) {
|
|
24
|
+
if (visited.has(name))
|
|
25
|
+
return;
|
|
26
|
+
if (visiting.has(name)) {
|
|
27
|
+
throw new Error(`Circular FK dependency detected involving table "${name}"`);
|
|
28
|
+
}
|
|
29
|
+
visiting.add(name);
|
|
30
|
+
for (const dep of deps.get(name) ?? []) {
|
|
31
|
+
if (nameSet.has(dep))
|
|
32
|
+
visit(dep);
|
|
33
|
+
}
|
|
34
|
+
visiting.delete(name);
|
|
35
|
+
visited.add(name);
|
|
36
|
+
result.push(name);
|
|
37
|
+
}
|
|
38
|
+
for (const name of names)
|
|
39
|
+
visit(name);
|
|
40
|
+
return result;
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=topo-sort.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"topo-sort.js","sourceRoot":"","sources":["../../src/migration/topo-sort.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,UAAU,mBAAmB,CACjC,QAAuF;IAEvF,MAAM,IAAI,GAAG,IAAI,GAAG,EAAoB,CAAC;IACzC,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;QACzB,MAAM,IAAI,GAAa,EAAE,CAAC;QAC1B,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;YACjD,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC;YACnD,IAAI,KAAK,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,MAAM;gBAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAChE,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACjC,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,KAAe,EAAE,IAA2B;IACnE,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IAClC,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAU,CAAC;IACnC,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC;IAE/B,SAAS,KAAK,CAAC,IAAY;QACzB,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;YAAE,OAAO;QAC9B,IAAI,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YACvB,MAAM,IAAI,KAAK,CAAC,oDAAoD,IAAI,GAAG,CAAC,CAAC;QAC/E,CAAC;QACD,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACnB,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;YACvC,IAAI,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;gBAAE,KAAK,CAAC,GAAG,CAAC,CAAC;QACnC,CAAC;QACD,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACtB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAClB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACpB,CAAC;IAED,KAAK,MAAM,IAAI,IAAI,KAAK;QAAE,KAAK,CAAC,IAAI,CAAC,CAAC;IACtC,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import type { Driver } from "../driver/types.js";
|
|
2
|
+
import type { DialectName, DiffAction, DbColumnInfo } from "../dbs/types.js";
|
|
3
|
+
export type { DialectName, DiffAction, DbColumnInfo };
|
|
4
|
+
/** Minimal DB handle passed into up(db) and down(db) migration functions. */
|
|
5
|
+
export interface MigrationDb {
|
|
6
|
+
run(sql: string, params?: unknown[]): Promise<void>;
|
|
7
|
+
}
|
|
8
|
+
/** A generated migration file: name, SQL content, and rendered module. */
|
|
9
|
+
export interface MigrationFile {
|
|
10
|
+
/** File name (without extension). */
|
|
11
|
+
name: string;
|
|
12
|
+
/** SQL statements to apply this migration. */
|
|
13
|
+
upSql: string;
|
|
14
|
+
/** SQL statements to roll back this migration. */
|
|
15
|
+
downSql: string;
|
|
16
|
+
/** Rendered JavaScript migration module content. */
|
|
17
|
+
content: string;
|
|
18
|
+
}
|
|
19
|
+
/** A row from the `_typhex_migrations` tracking table. */
|
|
20
|
+
export interface MigrationRecord {
|
|
21
|
+
/** Auto-incrementing row ID. */
|
|
22
|
+
id: number;
|
|
23
|
+
/** Migration file name (without extension). */
|
|
24
|
+
name: string;
|
|
25
|
+
/** ISO timestamp when this migration was applied. */
|
|
26
|
+
applied_at: string;
|
|
27
|
+
}
|
|
28
|
+
export interface PendingMigration {
|
|
29
|
+
name: string;
|
|
30
|
+
file: string;
|
|
31
|
+
upSql: string;
|
|
32
|
+
downSql: string;
|
|
33
|
+
statements: string[];
|
|
34
|
+
downStatements: string[];
|
|
35
|
+
}
|
|
36
|
+
export interface MigrationDryRun {
|
|
37
|
+
applied: MigrationRecord[];
|
|
38
|
+
pending: PendingMigration[];
|
|
39
|
+
skipped: string[];
|
|
40
|
+
}
|
|
41
|
+
export interface MigrationConfig {
|
|
42
|
+
dir: string;
|
|
43
|
+
driver: Driver;
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/migration/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE7E,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,YAAY,EAAE,CAAC;AAEtD,6EAA6E;AAC7E,MAAM,WAAW,WAAW;IAC1B,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACrD;AAED,0EAA0E;AAC1E,MAAM,WAAW,aAAa;IAC5B,qCAAqC;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,8CAA8C;IAC9C,KAAK,EAAE,MAAM,CAAC;IACd,kDAAkD;IAClD,OAAO,EAAE,MAAM,CAAC;IAChB,oDAAoD;IACpD,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,0DAA0D;AAC1D,MAAM,WAAW,eAAe;IAC9B,gCAAgC;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,+CAA+C;IAC/C,IAAI,EAAE,MAAM,CAAC;IACb,qDAAqD;IACrD,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,cAAc,EAAE,MAAM,EAAE,CAAC;CAC1B;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,eAAe,EAAE,CAAC;IAC3B,OAAO,EAAE,gBAAgB,EAAE,CAAC;IAC5B,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,eAAe;IAC9B,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;CAChB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/migration/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Aggregate function stubs for use inside .select() and .having() lambdas.
|
|
3
|
+
* These are never executed at runtime — the TypeScript transformer replaces them
|
|
4
|
+
* at compile time, and the runtime parser reads source text via acorn.
|
|
5
|
+
* Calling them directly outside a lambda throws a clear error.
|
|
6
|
+
*/
|
|
7
|
+
/** Returns the count of rows matching the query. Use inside `.select()` or `.having()` lambdas. */
|
|
8
|
+
export declare function count(_field?: unknown): number;
|
|
9
|
+
/** Returns the sum of the given numeric field. Use inside `.select()` or `.having()` lambdas. */
|
|
10
|
+
export declare function sum(_field: number): number;
|
|
11
|
+
/** Returns the average of the given numeric field. Use inside `.select()` or `.having()` lambdas. */
|
|
12
|
+
export declare function avg(_field: number): number;
|
|
13
|
+
/** Returns the minimum value of the given field. Use inside `.select()` or `.having()` lambdas. */
|
|
14
|
+
export declare function min<T>(_field: T): T;
|
|
15
|
+
/** Returns the maximum value of the given field. Use inside `.select()` or `.having()` lambdas. */
|
|
16
|
+
export declare function max<T>(_field: T): T;
|
|
17
|
+
/** Marks a field as DISTINCT inside an aggregate: count(distinct(p.category)). */
|
|
18
|
+
export declare function distinct<T>(_field: T): T;
|
|
19
|
+
//# sourceMappingURL=aggregates.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"aggregates.d.ts","sourceRoot":"","sources":["../../src/orm/aggregates.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,mGAAmG;AACnG,wBAAgB,KAAK,CAAC,MAAM,CAAC,EAAE,OAAO,GAAG,MAAM,CAE9C;AAED,iGAAiG;AACjG,wBAAgB,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAE1C;AAED,qGAAqG;AACrG,wBAAgB,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAE1C;AAED,mGAAmG;AACnG,wBAAgB,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,GAAG,CAAC,CAEnC;AAED,mGAAmG;AACnG,wBAAgB,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,GAAG,CAAC,CAEnC;AAED,kFAAkF;AAClF,wBAAgB,QAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,GAAG,CAAC,CAExC"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Aggregate function stubs for use inside .select() and .having() lambdas.
|
|
3
|
+
* These are never executed at runtime — the TypeScript transformer replaces them
|
|
4
|
+
* at compile time, and the runtime parser reads source text via acorn.
|
|
5
|
+
* Calling them directly outside a lambda throws a clear error.
|
|
6
|
+
*/
|
|
7
|
+
const msg = (n) => `${n}() can only be used inside a .select() or .having() lambda`;
|
|
8
|
+
/** Returns the count of rows matching the query. Use inside `.select()` or `.having()` lambdas. */
|
|
9
|
+
export function count(_field) {
|
|
10
|
+
throw new Error(msg("count"));
|
|
11
|
+
}
|
|
12
|
+
/** Returns the sum of the given numeric field. Use inside `.select()` or `.having()` lambdas. */
|
|
13
|
+
export function sum(_field) {
|
|
14
|
+
throw new Error(msg("sum"));
|
|
15
|
+
}
|
|
16
|
+
/** Returns the average of the given numeric field. Use inside `.select()` or `.having()` lambdas. */
|
|
17
|
+
export function avg(_field) {
|
|
18
|
+
throw new Error(msg("avg"));
|
|
19
|
+
}
|
|
20
|
+
/** Returns the minimum value of the given field. Use inside `.select()` or `.having()` lambdas. */
|
|
21
|
+
export function min(_field) {
|
|
22
|
+
throw new Error(msg("min"));
|
|
23
|
+
}
|
|
24
|
+
/** Returns the maximum value of the given field. Use inside `.select()` or `.having()` lambdas. */
|
|
25
|
+
export function max(_field) {
|
|
26
|
+
throw new Error(msg("max"));
|
|
27
|
+
}
|
|
28
|
+
/** Marks a field as DISTINCT inside an aggregate: count(distinct(p.category)). */
|
|
29
|
+
export function distinct(_field) {
|
|
30
|
+
throw new Error(msg("distinct"));
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=aggregates.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"aggregates.js","sourceRoot":"","sources":["../../src/orm/aggregates.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,GAAG,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,GAAG,CAAC,4DAA4D,CAAC;AAE5F,mGAAmG;AACnG,MAAM,UAAU,KAAK,CAAC,MAAgB;IACpC,MAAM,IAAI,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;AAChC,CAAC;AAED,iGAAiG;AACjG,MAAM,UAAU,GAAG,CAAC,MAAc;IAChC,MAAM,IAAI,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;AAC9B,CAAC;AAED,qGAAqG;AACrG,MAAM,UAAU,GAAG,CAAC,MAAc;IAChC,MAAM,IAAI,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;AAC9B,CAAC;AAED,mGAAmG;AACnG,MAAM,UAAU,GAAG,CAAI,MAAS;IAC9B,MAAM,IAAI,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;AAC9B,CAAC;AAED,mGAAmG;AACnG,MAAM,UAAU,GAAG,CAAI,MAAS;IAC9B,MAAM,IAAI,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;AAC9B,CAAC;AAED,kFAAkF;AAClF,MAAM,UAAU,QAAQ,CAAI,MAAS;IACnC,MAAM,IAAI,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC;AACnC,CAAC"}
|