drizzle-fp 0.1.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/README.md +9 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -0
- package/dist/src/TableFuncArgs.js +1 -0
- package/dist/src/TableFuncArgs.js.map +1 -0
- package/dist/src/columnsAdders/AllowOnlyValidColumnMaps.js +2 -0
- package/dist/src/columnsAdders/AllowOnlyValidColumnMaps.js.map +1 -0
- package/dist/src/columnsAdders/FunctionExtendingColumnsMap.js +1 -0
- package/dist/src/columnsAdders/FunctionExtendingColumnsMap.js.map +1 -0
- package/dist/src/columnsAdders/addColumn.js +3 -0
- package/dist/src/columnsAdders/addColumn.js.map +1 -0
- package/dist/src/columnsAdders/addColumns.js +9 -0
- package/dist/src/columnsAdders/addColumns.js.map +1 -0
- package/dist/src/columnsAdders/addHappenedAtDateColumns.js +12 -0
- package/dist/src/columnsAdders/addHappenedAtDateColumns.js.map +1 -0
- package/dist/src/columnsAdders/addRequiredColumn.js +3 -0
- package/dist/src/columnsAdders/addRequiredColumn.js.map +1 -0
- package/dist/src/columnsAdders/addRequiredColumns.js +6 -0
- package/dist/src/columnsAdders/addRequiredColumns.js.map +1 -0
- package/dist/src/columnsAdders/addRequiredNameOrDescription.js +8 -0
- package/dist/src/columnsAdders/addRequiredNameOrDescription.js.map +1 -0
- package/dist/src/columnsAdders/index.js +10 -0
- package/dist/src/columnsAdders/index.js.map +1 -0
- package/dist/src/columnsAdders/nonNullIdentity.js +6 -0
- package/dist/src/columnsAdders/nonNullIdentity.js.map +1 -0
- package/dist/src/columnsWithExtraTableConfigsAdders/addAutoGeneratedGloballyUniqueOrderingColumn.js +7 -0
- package/dist/src/columnsWithExtraTableConfigsAdders/addAutoGeneratedGloballyUniqueOrderingColumn.js.map +1 -0
- package/dist/src/columnsWithExtraTableConfigsAdders/addBigint53IdColumnAsPrimaryKey.js +8 -0
- package/dist/src/columnsWithExtraTableConfigsAdders/addBigint53IdColumnAsPrimaryKey.js.map +1 -0
- package/dist/src/columnsWithExtraTableConfigsAdders/addBigint53RequiredColumnWithFk.js +4 -0
- package/dist/src/columnsWithExtraTableConfigsAdders/addBigint53RequiredColumnWithFk.js.map +1 -0
- package/dist/src/columnsWithExtraTableConfigsAdders/addBigint53RequiredColumnsWithCompositeFk.js +4 -0
- package/dist/src/columnsWithExtraTableConfigsAdders/addBigint53RequiredColumnsWithCompositeFk.js.map +1 -0
- package/dist/src/columnsWithExtraTableConfigsAdders/addBigint53RequiredColumnsWithCompositeFk1to1.js +4 -0
- package/dist/src/columnsWithExtraTableConfigsAdders/addBigint53RequiredColumnsWithCompositeFk1to1.js.map +1 -0
- package/dist/src/columnsWithExtraTableConfigsAdders/addColumnWithFk.js +5 -0
- package/dist/src/columnsWithExtraTableConfigsAdders/addColumnWithFk.js.map +1 -0
- package/dist/src/columnsWithExtraTableConfigsAdders/addColumnsOfTheSameTypeWithCompositeFk.js +9 -0
- package/dist/src/columnsWithExtraTableConfigsAdders/addColumnsOfTheSameTypeWithCompositeFk.js.map +1 -0
- package/dist/src/columnsWithExtraTableConfigsAdders/addColumnsOfTheSameTypeWithCompositeFk1to1.js +3 -0
- package/dist/src/columnsWithExtraTableConfigsAdders/addColumnsOfTheSameTypeWithCompositeFk1to1.js.map +1 -0
- package/dist/src/columnsWithExtraTableConfigsAdders/addColumnsWithCompositeFk.js +14 -0
- package/dist/src/columnsWithExtraTableConfigsAdders/addColumnsWithCompositeFk.js.map +1 -0
- package/dist/src/columnsWithExtraTableConfigsAdders/addIntegerIdColumnAsPrimaryKey.js +8 -0
- package/dist/src/columnsWithExtraTableConfigsAdders/addIntegerIdColumnAsPrimaryKey.js.map +1 -0
- package/dist/src/columnsWithExtraTableConfigsAdders/addIntegerRequiredColumnWithFk.js +4 -0
- package/dist/src/columnsWithExtraTableConfigsAdders/addIntegerRequiredColumnWithFk.js.map +1 -0
- package/dist/src/columnsWithExtraTableConfigsAdders/addIntegerRequiredColumnsWithCompositeFk.js +4 -0
- package/dist/src/columnsWithExtraTableConfigsAdders/addIntegerRequiredColumnsWithCompositeFk.js.map +1 -0
- package/dist/src/columnsWithExtraTableConfigsAdders/addIntegerRequiredColumnsWithCompositeFk1to1.js +4 -0
- package/dist/src/columnsWithExtraTableConfigsAdders/addIntegerRequiredColumnsWithCompositeFk1to1.js.map +1 -0
- package/dist/src/columnsWithExtraTableConfigsAdders/addTextRequiredColumnWithFk.js +4 -0
- package/dist/src/columnsWithExtraTableConfigsAdders/addTextRequiredColumnWithFk.js.map +1 -0
- package/dist/src/columnsWithExtraTableConfigsAdders/addUuidColumnAsPrimaryKey.js +8 -0
- package/dist/src/columnsWithExtraTableConfigsAdders/addUuidColumnAsPrimaryKey.js.map +1 -0
- package/dist/src/columnsWithExtraTableConfigsAdders/addUuidRequiredColumnWithFk.js +4 -0
- package/dist/src/columnsWithExtraTableConfigsAdders/addUuidRequiredColumnWithFk.js.map +1 -0
- package/dist/src/columnsWithExtraTableConfigsAdders/index.js +17 -0
- package/dist/src/columnsWithExtraTableConfigsAdders/index.js.map +1 -0
- package/dist/src/extraTableConfigsAdders/ForeignTableColumnGetter.js +1 -0
- package/dist/src/extraTableConfigsAdders/ForeignTableColumnGetter.js.map +1 -0
- package/dist/src/extraTableConfigsAdders/FunctionRequiringColumnsMap.js +1 -0
- package/dist/src/extraTableConfigsAdders/FunctionRequiringColumnsMap.js.map +1 -0
- package/dist/src/extraTableConfigsAdders/addCompositeFk.js +26 -0
- package/dist/src/extraTableConfigsAdders/addCompositeFk.js.map +1 -0
- package/dist/src/extraTableConfigsAdders/addCompositePrimaryKey.js +3 -0
- package/dist/src/extraTableConfigsAdders/addCompositePrimaryKey.js.map +1 -0
- package/dist/src/extraTableConfigsAdders/addExtraConfig.js +6 -0
- package/dist/src/extraTableConfigsAdders/addExtraConfig.js.map +1 -0
- package/dist/src/extraTableConfigsAdders/addFk.js +32 -0
- package/dist/src/extraTableConfigsAdders/addFk.js.map +1 -0
- package/dist/src/extraTableConfigsAdders/addPrimaryKey.js +10 -0
- package/dist/src/extraTableConfigsAdders/addPrimaryKey.js.map +1 -0
- package/dist/src/extraTableConfigsAdders/addUniqueConstraintWithIndex.js +11 -0
- package/dist/src/extraTableConfigsAdders/addUniqueConstraintWithIndex.js.map +1 -0
- package/dist/src/extraTableConfigsAdders/getCompressedIdentifierName.js +25 -0
- package/dist/src/extraTableConfigsAdders/getCompressedIdentifierName.js.map +1 -0
- package/dist/src/extraTableConfigsAdders/index.js +10 -0
- package/dist/src/extraTableConfigsAdders/index.js.map +1 -0
- package/dist/src/finalizePgTable.js +8 -0
- package/dist/src/finalizePgTable.js.map +1 -0
- package/dist/src/index.js +6 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/initPgTable.js +2 -0
- package/dist/src/initPgTable.js.map +1 -0
- package/dist-types/index.d.ts +2 -0
- package/dist-types/index.d.ts.map +1 -0
- package/dist-types/src/TableFuncArgs.d.ts +12 -0
- package/dist-types/src/TableFuncArgs.d.ts.map +1 -0
- package/dist-types/src/columnsAdders/AllowOnlyValidColumnMaps.d.ts +24 -0
- package/dist-types/src/columnsAdders/AllowOnlyValidColumnMaps.d.ts.map +1 -0
- package/dist-types/src/columnsAdders/FunctionExtendingColumnsMap.d.ts +8 -0
- package/dist-types/src/columnsAdders/FunctionExtendingColumnsMap.d.ts.map +1 -0
- package/dist-types/src/columnsAdders/addColumn.d.ts +4 -0
- package/dist-types/src/columnsAdders/addColumn.d.ts.map +1 -0
- package/dist-types/src/columnsAdders/addColumns.d.ts +4 -0
- package/dist-types/src/columnsAdders/addColumns.d.ts.map +1 -0
- package/dist-types/src/columnsAdders/addHappenedAtDateColumns.d.ts +9 -0
- package/dist-types/src/columnsAdders/addHappenedAtDateColumns.d.ts.map +1 -0
- package/dist-types/src/columnsAdders/addRequiredColumn.d.ts +5 -0
- package/dist-types/src/columnsAdders/addRequiredColumn.d.ts.map +1 -0
- package/dist-types/src/columnsAdders/addRequiredColumns.d.ts +14 -0
- package/dist-types/src/columnsAdders/addRequiredColumns.d.ts.map +1 -0
- package/dist-types/src/columnsAdders/addRequiredNameOrDescription.d.ts +12 -0
- package/dist-types/src/columnsAdders/addRequiredNameOrDescription.d.ts.map +1 -0
- package/dist-types/src/columnsAdders/index.d.ts +10 -0
- package/dist-types/src/columnsAdders/index.d.ts.map +1 -0
- package/dist-types/src/columnsAdders/nonNullIdentity.d.ts +9 -0
- package/dist-types/src/columnsAdders/nonNullIdentity.d.ts.map +1 -0
- package/dist-types/src/columnsWithExtraTableConfigsAdders/addAutoGeneratedGloballyUniqueOrderingColumn.d.ts +4 -0
- package/dist-types/src/columnsWithExtraTableConfigsAdders/addAutoGeneratedGloballyUniqueOrderingColumn.d.ts.map +1 -0
- package/dist-types/src/columnsWithExtraTableConfigsAdders/addBigint53IdColumnAsPrimaryKey.d.ts +10 -0
- package/dist-types/src/columnsWithExtraTableConfigsAdders/addBigint53IdColumnAsPrimaryKey.d.ts.map +1 -0
- package/dist-types/src/columnsWithExtraTableConfigsAdders/addBigint53RequiredColumnWithFk.d.ts +4 -0
- package/dist-types/src/columnsWithExtraTableConfigsAdders/addBigint53RequiredColumnWithFk.d.ts.map +1 -0
- package/dist-types/src/columnsWithExtraTableConfigsAdders/addBigint53RequiredColumnsWithCompositeFk.d.ts +4 -0
- package/dist-types/src/columnsWithExtraTableConfigsAdders/addBigint53RequiredColumnsWithCompositeFk.d.ts.map +1 -0
- package/dist-types/src/columnsWithExtraTableConfigsAdders/addBigint53RequiredColumnsWithCompositeFk1to1.d.ts +4 -0
- package/dist-types/src/columnsWithExtraTableConfigsAdders/addBigint53RequiredColumnsWithCompositeFk1to1.d.ts.map +1 -0
- package/dist-types/src/columnsWithExtraTableConfigsAdders/addColumnWithFk.d.ts +5 -0
- package/dist-types/src/columnsWithExtraTableConfigsAdders/addColumnWithFk.d.ts.map +1 -0
- package/dist-types/src/columnsWithExtraTableConfigsAdders/addColumnsOfTheSameTypeWithCompositeFk.d.ts +4 -0
- package/dist-types/src/columnsWithExtraTableConfigsAdders/addColumnsOfTheSameTypeWithCompositeFk.d.ts.map +1 -0
- package/dist-types/src/columnsWithExtraTableConfigsAdders/addColumnsOfTheSameTypeWithCompositeFk1to1.d.ts +4 -0
- package/dist-types/src/columnsWithExtraTableConfigsAdders/addColumnsOfTheSameTypeWithCompositeFk1to1.d.ts.map +1 -0
- package/dist-types/src/columnsWithExtraTableConfigsAdders/addColumnsWithCompositeFk.d.ts +11 -0
- package/dist-types/src/columnsWithExtraTableConfigsAdders/addColumnsWithCompositeFk.d.ts.map +1 -0
- package/dist-types/src/columnsWithExtraTableConfigsAdders/addIntegerIdColumnAsPrimaryKey.d.ts +9 -0
- package/dist-types/src/columnsWithExtraTableConfigsAdders/addIntegerIdColumnAsPrimaryKey.d.ts.map +1 -0
- package/dist-types/src/columnsWithExtraTableConfigsAdders/addIntegerRequiredColumnWithFk.d.ts +4 -0
- package/dist-types/src/columnsWithExtraTableConfigsAdders/addIntegerRequiredColumnWithFk.d.ts.map +1 -0
- package/dist-types/src/columnsWithExtraTableConfigsAdders/addIntegerRequiredColumnsWithCompositeFk.d.ts +4 -0
- package/dist-types/src/columnsWithExtraTableConfigsAdders/addIntegerRequiredColumnsWithCompositeFk.d.ts.map +1 -0
- package/dist-types/src/columnsWithExtraTableConfigsAdders/addIntegerRequiredColumnsWithCompositeFk1to1.d.ts +4 -0
- package/dist-types/src/columnsWithExtraTableConfigsAdders/addIntegerRequiredColumnsWithCompositeFk1to1.d.ts.map +1 -0
- package/dist-types/src/columnsWithExtraTableConfigsAdders/addTextRequiredColumnWithFk.d.ts +4 -0
- package/dist-types/src/columnsWithExtraTableConfigsAdders/addTextRequiredColumnWithFk.d.ts.map +1 -0
- package/dist-types/src/columnsWithExtraTableConfigsAdders/addUuidColumnAsPrimaryKey.d.ts +9 -0
- package/dist-types/src/columnsWithExtraTableConfigsAdders/addUuidColumnAsPrimaryKey.d.ts.map +1 -0
- package/dist-types/src/columnsWithExtraTableConfigsAdders/addUuidRequiredColumnWithFk.d.ts +4 -0
- package/dist-types/src/columnsWithExtraTableConfigsAdders/addUuidRequiredColumnWithFk.d.ts.map +1 -0
- package/dist-types/src/columnsWithExtraTableConfigsAdders/index.d.ts +17 -0
- package/dist-types/src/columnsWithExtraTableConfigsAdders/index.d.ts.map +1 -0
- package/dist-types/src/extraTableConfigsAdders/ForeignTableColumnGetter.d.ts +5 -0
- package/dist-types/src/extraTableConfigsAdders/ForeignTableColumnGetter.d.ts.map +1 -0
- package/dist-types/src/extraTableConfigsAdders/FunctionRequiringColumnsMap.d.ts +4 -0
- package/dist-types/src/extraTableConfigsAdders/FunctionRequiringColumnsMap.d.ts.map +1 -0
- package/dist-types/src/extraTableConfigsAdders/addCompositeFk.d.ts +4 -0
- package/dist-types/src/extraTableConfigsAdders/addCompositeFk.d.ts.map +1 -0
- package/dist-types/src/extraTableConfigsAdders/addCompositePrimaryKey.d.ts +3 -0
- package/dist-types/src/extraTableConfigsAdders/addCompositePrimaryKey.d.ts.map +1 -0
- package/dist-types/src/extraTableConfigsAdders/addExtraConfig.d.ts +6 -0
- package/dist-types/src/extraTableConfigsAdders/addExtraConfig.d.ts.map +1 -0
- package/dist-types/src/extraTableConfigsAdders/addFk.d.ts +4 -0
- package/dist-types/src/extraTableConfigsAdders/addFk.d.ts.map +1 -0
- package/dist-types/src/extraTableConfigsAdders/addPrimaryKey.d.ts +3 -0
- package/dist-types/src/extraTableConfigsAdders/addPrimaryKey.d.ts.map +1 -0
- package/dist-types/src/extraTableConfigsAdders/addUniqueConstraintWithIndex.d.ts +3 -0
- package/dist-types/src/extraTableConfigsAdders/addUniqueConstraintWithIndex.d.ts.map +1 -0
- package/dist-types/src/extraTableConfigsAdders/getCompressedIdentifierName.d.ts +2 -0
- package/dist-types/src/extraTableConfigsAdders/getCompressedIdentifierName.d.ts.map +1 -0
- package/dist-types/src/extraTableConfigsAdders/index.d.ts +10 -0
- package/dist-types/src/extraTableConfigsAdders/index.d.ts.map +1 -0
- package/dist-types/src/finalizePgTable.d.ts +130 -0
- package/dist-types/src/finalizePgTable.d.ts.map +1 -0
- package/dist-types/src/index.d.ts +6 -0
- package/dist-types/src/index.d.ts.map +1 -0
- package/dist-types/src/initPgTable.d.ts +3 -0
- package/dist-types/src/initPgTable.d.ts.map +1 -0
- package/index.ts +1 -0
- package/package.json +92 -0
- package/src/TableFuncArgs.ts +21 -0
- package/src/columnsAdders/AllowOnlyValidColumnMaps.ts +69 -0
- package/src/columnsAdders/FunctionExtendingColumnsMap.ts +24 -0
- package/src/columnsAdders/addColumn.ts +14 -0
- package/src/columnsAdders/addColumns.ts +18 -0
- package/src/columnsAdders/addHappenedAtDateColumns.ts +24 -0
- package/src/columnsAdders/addRequiredColumn.ts +20 -0
- package/src/columnsAdders/addRequiredColumns.ts +41 -0
- package/src/columnsAdders/addRequiredNameOrDescription.ts +14 -0
- package/src/columnsAdders/index.ts +9 -0
- package/src/columnsAdders/nonNullIdentity.ts +11 -0
- package/src/columnsWithExtraTableConfigsAdders/addAutoGeneratedGloballyUniqueOrderingColumn.ts +13 -0
- package/src/columnsWithExtraTableConfigsAdders/addBigint53IdColumnAsPrimaryKey.ts +30 -0
- package/src/columnsWithExtraTableConfigsAdders/addBigint53RequiredColumnWithFk.ts +21 -0
- package/src/columnsWithExtraTableConfigsAdders/addBigint53RequiredColumnsWithCompositeFk.ts +26 -0
- package/src/columnsWithExtraTableConfigsAdders/addBigint53RequiredColumnsWithCompositeFk1to1.ts +25 -0
- package/src/columnsWithExtraTableConfigsAdders/addColumnWithFk.ts +27 -0
- package/src/columnsWithExtraTableConfigsAdders/addColumnsOfTheSameTypeWithCompositeFk.ts +36 -0
- package/src/columnsWithExtraTableConfigsAdders/addColumnsOfTheSameTypeWithCompositeFk1to1.ts +23 -0
- package/src/columnsWithExtraTableConfigsAdders/addColumnsWithCompositeFk.ts +60 -0
- package/src/columnsWithExtraTableConfigsAdders/addIntegerIdColumnAsPrimaryKey.ts +27 -0
- package/src/columnsWithExtraTableConfigsAdders/addIntegerRequiredColumnWithFk.ts +21 -0
- package/src/columnsWithExtraTableConfigsAdders/addIntegerRequiredColumnsWithCompositeFk.ts +26 -0
- package/src/columnsWithExtraTableConfigsAdders/addIntegerRequiredColumnsWithCompositeFk1to1.ts +25 -0
- package/src/columnsWithExtraTableConfigsAdders/addTextRequiredColumnWithFk.ts +21 -0
- package/src/columnsWithExtraTableConfigsAdders/addUuidColumnAsPrimaryKey.ts +25 -0
- package/src/columnsWithExtraTableConfigsAdders/addUuidRequiredColumnWithFk.ts +21 -0
- package/src/columnsWithExtraTableConfigsAdders/index.ts +16 -0
- package/src/extraTableConfigsAdders/ForeignTableColumnGetter.ts +3 -0
- package/src/extraTableConfigsAdders/FunctionRequiringColumnsMap.ts +13 -0
- package/src/extraTableConfigsAdders/addCompositeFk.ts +47 -0
- package/src/extraTableConfigsAdders/addCompositePrimaryKey.ts +9 -0
- package/src/extraTableConfigsAdders/addExtraConfig.ts +21 -0
- package/src/extraTableConfigsAdders/addFk.ts +51 -0
- package/src/extraTableConfigsAdders/addPrimaryKey.ts +17 -0
- package/src/extraTableConfigsAdders/addUniqueConstraintWithIndex.ts +20 -0
- package/src/extraTableConfigsAdders/getCompressedIdentifierName.ts +24 -0
- package/src/extraTableConfigsAdders/index.ts +9 -0
- package/src/finalizePgTable.ts +22 -0
- package/src/index.ts +5 -0
- package/src/initPgTable.ts +5 -0
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { PgColumnBuilderBase } from 'drizzle-orm/pg-core'
|
|
2
|
+
|
|
3
|
+
import { flow } from 'effect/Function'
|
|
4
|
+
|
|
5
|
+
import {
|
|
6
|
+
addColumn,
|
|
7
|
+
type FunctionExtendingColumnsMap,
|
|
8
|
+
} from '../columnsAdders/index.ts'
|
|
9
|
+
import {
|
|
10
|
+
addFk,
|
|
11
|
+
type ForeignTableColumnGetter,
|
|
12
|
+
} from '../extraTableConfigsAdders/index.ts'
|
|
13
|
+
|
|
14
|
+
export const addColumnWithFk = <
|
|
15
|
+
const NameOfColumnInCurrentTable extends string,
|
|
16
|
+
ColumnBuilder extends PgColumnBuilderBase,
|
|
17
|
+
>(
|
|
18
|
+
nameOfColumnInCurrentTable: NameOfColumnInCurrentTable,
|
|
19
|
+
buildColumn: () => ColumnBuilder,
|
|
20
|
+
getColumnOfForeignTable: ForeignTableColumnGetter,
|
|
21
|
+
): FunctionExtendingColumnsMap<{
|
|
22
|
+
[Key in NameOfColumnInCurrentTable]: ColumnBuilder
|
|
23
|
+
}> =>
|
|
24
|
+
flow(
|
|
25
|
+
addColumn(nameOfColumnInCurrentTable, buildColumn),
|
|
26
|
+
addFk(nameOfColumnInCurrentTable, getColumnOfForeignTable),
|
|
27
|
+
) as any
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import type { AnyPgTable, PgColumnBuilderBase } from 'drizzle-orm/pg-core'
|
|
2
|
+
|
|
3
|
+
import type {
|
|
4
|
+
AllowOnlyNonEmptyObjectsWithActualKeys,
|
|
5
|
+
FunctionExtendingColumnsMap,
|
|
6
|
+
} from '../columnsAdders/index.ts'
|
|
7
|
+
import { addColumnsWithCompositeFk } from './addColumnsWithCompositeFk.ts'
|
|
8
|
+
|
|
9
|
+
export const addColumnsOfTheSameTypeWithCompositeFk = <
|
|
10
|
+
const FkConfig extends [FkConfig] extends [infer U]
|
|
11
|
+
? AllowOnlyNonEmptyObjectsWithActualKeys<U, keyof NoInfer<TTable>>
|
|
12
|
+
: never,
|
|
13
|
+
TTable extends AnyPgTable,
|
|
14
|
+
ColumnBuilder extends PgColumnBuilderBase,
|
|
15
|
+
>(
|
|
16
|
+
getForeignTable: () => TTable,
|
|
17
|
+
buildColumn: () => ColumnBuilder,
|
|
18
|
+
fkConfig: FkConfig,
|
|
19
|
+
): FunctionExtendingColumnsMap<
|
|
20
|
+
Record<keyof NoInfer<FkConfig>, ColumnBuilder>
|
|
21
|
+
> =>
|
|
22
|
+
addColumnsWithCompositeFk(
|
|
23
|
+
getForeignTable,
|
|
24
|
+
() =>
|
|
25
|
+
Object.fromEntries(
|
|
26
|
+
Object.entries(
|
|
27
|
+
fkConfig as unknown as Record<string, keyof NoInfer<TTable>>,
|
|
28
|
+
).map(([ownColumnName, foreignColumnName]) => [
|
|
29
|
+
ownColumnName,
|
|
30
|
+
{
|
|
31
|
+
currentColumnBuilder: buildColumn(),
|
|
32
|
+
foreignColumnName,
|
|
33
|
+
},
|
|
34
|
+
]),
|
|
35
|
+
) as any,
|
|
36
|
+
)
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { AnyPgTable, PgColumnBuilderBase } from 'drizzle-orm/pg-core'
|
|
2
|
+
|
|
3
|
+
import type { FunctionExtendingColumnsMap } from '../columnsAdders/index.ts'
|
|
4
|
+
import { addColumnsOfTheSameTypeWithCompositeFk } from './addColumnsOfTheSameTypeWithCompositeFk.ts'
|
|
5
|
+
|
|
6
|
+
export const addColumnsOfTheSameTypeWithCompositeFk1to1 = <
|
|
7
|
+
const FkConfig extends readonly [
|
|
8
|
+
keyof TTable,
|
|
9
|
+
keyof TTable,
|
|
10
|
+
...(keyof TTable)[],
|
|
11
|
+
],
|
|
12
|
+
TTable extends AnyPgTable,
|
|
13
|
+
ColumnBuilder extends PgColumnBuilderBase,
|
|
14
|
+
>(
|
|
15
|
+
getForeignTable: () => TTable,
|
|
16
|
+
buildColumn: () => ColumnBuilder,
|
|
17
|
+
fkConfig: FkConfig,
|
|
18
|
+
): FunctionExtendingColumnsMap<Record<FkConfig[number], ColumnBuilder>> =>
|
|
19
|
+
addColumnsOfTheSameTypeWithCompositeFk(
|
|
20
|
+
getForeignTable,
|
|
21
|
+
buildColumn,
|
|
22
|
+
Object.fromEntries(fkConfig.map(column => [column, column])) as any,
|
|
23
|
+
)
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import type { AnyPgTable, PgColumnBuilderBase } from 'drizzle-orm/pg-core'
|
|
2
|
+
|
|
3
|
+
import { flow } from 'effect/Function'
|
|
4
|
+
|
|
5
|
+
import {
|
|
6
|
+
type AllowOnlyNonEmptyObjectsWithActualKeys,
|
|
7
|
+
addColumns,
|
|
8
|
+
type FunctionExtendingColumnsMap,
|
|
9
|
+
} from '../columnsAdders/index.ts'
|
|
10
|
+
import { addCompositeFk } from '../extraTableConfigsAdders/addCompositeFk.ts'
|
|
11
|
+
|
|
12
|
+
export const addColumnsWithCompositeFk = <
|
|
13
|
+
const FkConfig extends [FkConfig] extends [infer U]
|
|
14
|
+
? AllowOnlyNonEmptyObjectsWithActualKeys<
|
|
15
|
+
U,
|
|
16
|
+
BatchColumnAdderValueOfRecord<TTable>
|
|
17
|
+
>
|
|
18
|
+
: never,
|
|
19
|
+
TTable extends AnyPgTable,
|
|
20
|
+
>(
|
|
21
|
+
getForeignTable: () => TTable,
|
|
22
|
+
fkConfig: () => FkConfig,
|
|
23
|
+
): FunctionExtendingColumnsMap<{
|
|
24
|
+
[ColumnName in keyof FkConfig]: FkConfig[ColumnName] extends {
|
|
25
|
+
currentColumnBuilder: infer U
|
|
26
|
+
}
|
|
27
|
+
? U
|
|
28
|
+
: never
|
|
29
|
+
}> => {
|
|
30
|
+
type Entry = [string, BatchColumnAdderValueOfRecord<TTable>]
|
|
31
|
+
|
|
32
|
+
const compositeFkConfig = Object.fromEntries(
|
|
33
|
+
(Object.entries(fkConfig()) as unknown as Entry[]).map(
|
|
34
|
+
([ownColumnName, { foreignColumnName }]) => [
|
|
35
|
+
ownColumnName,
|
|
36
|
+
foreignColumnName,
|
|
37
|
+
],
|
|
38
|
+
),
|
|
39
|
+
)
|
|
40
|
+
|
|
41
|
+
return flow(
|
|
42
|
+
addColumns(
|
|
43
|
+
() =>
|
|
44
|
+
Object.fromEntries(
|
|
45
|
+
(Object.entries(fkConfig()) as unknown as Entry[]).map(
|
|
46
|
+
([ownColumnName, { currentColumnBuilder }]) => [
|
|
47
|
+
ownColumnName,
|
|
48
|
+
currentColumnBuilder,
|
|
49
|
+
],
|
|
50
|
+
),
|
|
51
|
+
) as any,
|
|
52
|
+
),
|
|
53
|
+
addCompositeFk(getForeignTable, compositeFkConfig),
|
|
54
|
+
) as any
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
type BatchColumnAdderValueOfRecord<TTable> = {
|
|
58
|
+
currentColumnBuilder: PgColumnBuilderBase
|
|
59
|
+
foreignColumnName: keyof NoInfer<TTable>
|
|
60
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { IsIdentity, NotNull } from 'drizzle-orm'
|
|
2
|
+
import { integer, type PgIntegerBuilderInitial } from 'drizzle-orm/pg-core'
|
|
3
|
+
|
|
4
|
+
import { pipe } from 'effect/Function'
|
|
5
|
+
|
|
6
|
+
import { addColumns, type GeneralColumnMap } from '../columnsAdders/index.ts'
|
|
7
|
+
import { addPrimaryKey } from '../extraTableConfigsAdders/index.ts'
|
|
8
|
+
import type { TableFuncArgs } from '../TableFuncArgs.ts'
|
|
9
|
+
|
|
10
|
+
export const addIntegerIdColumnAsPrimaryKey = <
|
|
11
|
+
const TTableName extends string,
|
|
12
|
+
TColumnsMap extends GeneralColumnMap,
|
|
13
|
+
>(
|
|
14
|
+
args: TableFuncArgs<TTableName, TColumnsMap>,
|
|
15
|
+
): TableFuncArgs<
|
|
16
|
+
TTableName,
|
|
17
|
+
TColumnsMap & { id: PgIntegerGeneratedAlwaysAsIdentity<TTableName> }
|
|
18
|
+
> =>
|
|
19
|
+
pipe(
|
|
20
|
+
addColumns(() => ({
|
|
21
|
+
id: integer(`${args[0]}_id`).generatedAlwaysAsIdentity(),
|
|
22
|
+
}))(args),
|
|
23
|
+
addPrimaryKey('id'),
|
|
24
|
+
)
|
|
25
|
+
|
|
26
|
+
export type PgIntegerGeneratedAlwaysAsIdentity<TTableName extends string> =
|
|
27
|
+
IsIdentity<NotNull<PgIntegerBuilderInitial<`${TTableName}_id`>>, 'always'>
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import {
|
|
2
|
+
type FunctionExtendingColumnsMap,
|
|
3
|
+
type NonNullInteger,
|
|
4
|
+
nonNullInteger,
|
|
5
|
+
} from '../columnsAdders/index.ts'
|
|
6
|
+
import type { ForeignTableColumnGetter } from '../extraTableConfigsAdders/index.ts'
|
|
7
|
+
import { addColumnWithFk } from './addColumnWithFk.ts'
|
|
8
|
+
|
|
9
|
+
export const addIntegerRequiredColumnWithFk = <
|
|
10
|
+
const NameOfColumnInCurrentTable extends string,
|
|
11
|
+
>(
|
|
12
|
+
nameOfColumnInCurrentTable: NameOfColumnInCurrentTable,
|
|
13
|
+
getColumnOfForeignTable: ForeignTableColumnGetter,
|
|
14
|
+
): FunctionExtendingColumnsMap<
|
|
15
|
+
Record<NameOfColumnInCurrentTable, NonNullInteger>
|
|
16
|
+
> =>
|
|
17
|
+
addColumnWithFk(
|
|
18
|
+
nameOfColumnInCurrentTable,
|
|
19
|
+
nonNullInteger,
|
|
20
|
+
getColumnOfForeignTable,
|
|
21
|
+
)
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { AnyPgTable } from 'drizzle-orm/pg-core'
|
|
2
|
+
|
|
3
|
+
import {
|
|
4
|
+
type AllowOnlyNonEmptyObjectsWithActualKeys,
|
|
5
|
+
type FunctionExtendingColumnsMap,
|
|
6
|
+
type NonNullInteger,
|
|
7
|
+
nonNullInteger,
|
|
8
|
+
} from '../columnsAdders/index.ts'
|
|
9
|
+
import { addColumnsOfTheSameTypeWithCompositeFk } from './addColumnsOfTheSameTypeWithCompositeFk.ts'
|
|
10
|
+
|
|
11
|
+
export const addIntegerRequiredColumnsWithCompositeFk = <
|
|
12
|
+
const FkConfig extends [FkConfig] extends [infer U]
|
|
13
|
+
? AllowOnlyNonEmptyObjectsWithActualKeys<U, keyof NoInfer<TTable>>
|
|
14
|
+
: never,
|
|
15
|
+
TTable extends AnyPgTable,
|
|
16
|
+
>(
|
|
17
|
+
getForeignTable: () => TTable,
|
|
18
|
+
fkConfig: FkConfig,
|
|
19
|
+
): FunctionExtendingColumnsMap<
|
|
20
|
+
Record<keyof NoInfer<FkConfig>, NonNullInteger>
|
|
21
|
+
> =>
|
|
22
|
+
addColumnsOfTheSameTypeWithCompositeFk(
|
|
23
|
+
getForeignTable,
|
|
24
|
+
nonNullInteger,
|
|
25
|
+
fkConfig,
|
|
26
|
+
)
|
package/src/columnsWithExtraTableConfigsAdders/addIntegerRequiredColumnsWithCompositeFk1to1.ts
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { AnyPgTable } from 'drizzle-orm/pg-core'
|
|
2
|
+
|
|
3
|
+
import {
|
|
4
|
+
type FunctionExtendingColumnsMap,
|
|
5
|
+
type NonNullInteger,
|
|
6
|
+
nonNullInteger,
|
|
7
|
+
} from '../columnsAdders/index.ts'
|
|
8
|
+
import { addColumnsOfTheSameTypeWithCompositeFk1to1 } from './addColumnsOfTheSameTypeWithCompositeFk1to1.ts'
|
|
9
|
+
|
|
10
|
+
export const addIntegerRequiredColumnsWithCompositeFk1to1 = <
|
|
11
|
+
const FkConfig extends readonly [
|
|
12
|
+
keyof TTable,
|
|
13
|
+
keyof TTable,
|
|
14
|
+
...(keyof TTable)[],
|
|
15
|
+
],
|
|
16
|
+
TTable extends AnyPgTable,
|
|
17
|
+
>(
|
|
18
|
+
getForeignTable: () => TTable,
|
|
19
|
+
fkConfig: FkConfig,
|
|
20
|
+
): FunctionExtendingColumnsMap<Record<FkConfig[number], NonNullInteger>> =>
|
|
21
|
+
addColumnsOfTheSameTypeWithCompositeFk1to1(
|
|
22
|
+
getForeignTable,
|
|
23
|
+
nonNullInteger,
|
|
24
|
+
fkConfig,
|
|
25
|
+
)
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import {
|
|
2
|
+
type FunctionExtendingColumnsMap,
|
|
3
|
+
type NonNullText,
|
|
4
|
+
nonNullText,
|
|
5
|
+
} from '../columnsAdders/index.ts'
|
|
6
|
+
import type { ForeignTableColumnGetter } from '../extraTableConfigsAdders/index.ts'
|
|
7
|
+
import { addColumnWithFk } from './addColumnWithFk.ts'
|
|
8
|
+
|
|
9
|
+
export const addTextRequiredColumnWithFk = <
|
|
10
|
+
const NameOfColumnInCurrentTable extends string,
|
|
11
|
+
>(
|
|
12
|
+
nameOfColumnInCurrentTable: NameOfColumnInCurrentTable,
|
|
13
|
+
getColumnOfForeignTable: ForeignTableColumnGetter,
|
|
14
|
+
): FunctionExtendingColumnsMap<
|
|
15
|
+
Record<NameOfColumnInCurrentTable, NonNullText>
|
|
16
|
+
> =>
|
|
17
|
+
addColumnWithFk(
|
|
18
|
+
nameOfColumnInCurrentTable,
|
|
19
|
+
nonNullText,
|
|
20
|
+
getColumnOfForeignTable,
|
|
21
|
+
)
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { NotNull } from 'drizzle-orm'
|
|
2
|
+
import { type PgUUIDBuilderInitial, uuid } from 'drizzle-orm/pg-core'
|
|
3
|
+
|
|
4
|
+
import { pipe } from 'effect/Function'
|
|
5
|
+
|
|
6
|
+
import { addColumns, type GeneralColumnMap } from '../columnsAdders/index.ts'
|
|
7
|
+
import { addPrimaryKey } from '../extraTableConfigsAdders/index.ts'
|
|
8
|
+
import type { TableFuncArgs } from '../TableFuncArgs.ts'
|
|
9
|
+
|
|
10
|
+
export const addUuidColumnAsPrimaryKey = <
|
|
11
|
+
const TTableName extends string,
|
|
12
|
+
TColumnsMap extends GeneralColumnMap,
|
|
13
|
+
>(
|
|
14
|
+
args: TableFuncArgs<TTableName, TColumnsMap>,
|
|
15
|
+
): TableFuncArgs<TTableName, TColumnsMap & { id: PgUUID<TTableName> }> =>
|
|
16
|
+
pipe(
|
|
17
|
+
addColumns(() => ({
|
|
18
|
+
id: uuid(`${args[0]}_uuid`).notNull(),
|
|
19
|
+
}))(args),
|
|
20
|
+
addPrimaryKey('id'),
|
|
21
|
+
)
|
|
22
|
+
|
|
23
|
+
export type PgUUID<TTableName extends string> = NotNull<
|
|
24
|
+
PgUUIDBuilderInitial<`${TTableName}_uuid`>
|
|
25
|
+
>
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import {
|
|
2
|
+
type FunctionExtendingColumnsMap,
|
|
3
|
+
type NonNullUUID,
|
|
4
|
+
nonNullUuid,
|
|
5
|
+
} from '../columnsAdders/index.ts'
|
|
6
|
+
import type { ForeignTableColumnGetter } from '../extraTableConfigsAdders/index.ts'
|
|
7
|
+
import { addColumnWithFk } from './addColumnWithFk.ts'
|
|
8
|
+
|
|
9
|
+
export const addUuidRequiredColumnWithFk = <
|
|
10
|
+
const NameOfColumnInCurrentTable extends string,
|
|
11
|
+
>(
|
|
12
|
+
nameOfColumnInCurrentTable: NameOfColumnInCurrentTable,
|
|
13
|
+
getColumnOfForeignTable: ForeignTableColumnGetter,
|
|
14
|
+
): FunctionExtendingColumnsMap<
|
|
15
|
+
Record<NameOfColumnInCurrentTable, NonNullUUID>
|
|
16
|
+
> =>
|
|
17
|
+
addColumnWithFk(
|
|
18
|
+
nameOfColumnInCurrentTable,
|
|
19
|
+
nonNullUuid,
|
|
20
|
+
getColumnOfForeignTable,
|
|
21
|
+
)
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export * from './addAutoGeneratedGloballyUniqueOrderingColumn.ts'
|
|
2
|
+
export * from './addBigint53IdColumnAsPrimaryKey.ts'
|
|
3
|
+
export * from './addBigint53RequiredColumnsWithCompositeFk.ts'
|
|
4
|
+
export * from './addBigint53RequiredColumnsWithCompositeFk1to1.ts'
|
|
5
|
+
export * from './addBigint53RequiredColumnWithFk.ts'
|
|
6
|
+
export * from './addColumnsOfTheSameTypeWithCompositeFk.ts'
|
|
7
|
+
export * from './addColumnsOfTheSameTypeWithCompositeFk1to1.ts'
|
|
8
|
+
export * from './addColumnsWithCompositeFk.ts'
|
|
9
|
+
export * from './addColumnWithFk.ts'
|
|
10
|
+
export * from './addIntegerIdColumnAsPrimaryKey.ts'
|
|
11
|
+
export * from './addIntegerRequiredColumnsWithCompositeFk.ts'
|
|
12
|
+
export * from './addIntegerRequiredColumnsWithCompositeFk1to1.ts'
|
|
13
|
+
export * from './addIntegerRequiredColumnWithFk.ts'
|
|
14
|
+
export * from './addTextRequiredColumnWithFk.ts'
|
|
15
|
+
export * from './addUuidColumnAsPrimaryKey.ts'
|
|
16
|
+
export * from './addUuidRequiredColumnWithFk.ts'
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { ColumnMap } from '../columnsAdders/index.ts'
|
|
2
|
+
import type { TableFuncArgs } from '../TableFuncArgs.ts'
|
|
3
|
+
|
|
4
|
+
export type FunctionRequiringColumnsMap<
|
|
5
|
+
TRequiredPresenceOfColumnNames extends string,
|
|
6
|
+
> = <
|
|
7
|
+
const TTableName extends string,
|
|
8
|
+
TColumnsMap extends ColumnMap<TRequiredPresenceOfColumnNames> &
|
|
9
|
+
ColumnMap<string>,
|
|
10
|
+
>([snakeCaseTableName, options, extraConfig]: TableFuncArgs<
|
|
11
|
+
TTableName,
|
|
12
|
+
TColumnsMap
|
|
13
|
+
>) => TableFuncArgs<TTableName, TColumnsMap>
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { strSnakeCase } from '@nevware21/ts-utils'
|
|
2
|
+
import type { AnyPgTable } from 'drizzle-orm/pg-core'
|
|
3
|
+
import { foreignKey } from 'drizzle-orm/pg-core'
|
|
4
|
+
|
|
5
|
+
import { addExtraConfig } from './addExtraConfig.ts'
|
|
6
|
+
import type { FunctionRequiringColumnsMap } from './FunctionRequiringColumnsMap.ts'
|
|
7
|
+
import { getCompressedIdentifierName } from './getCompressedIdentifierName.ts'
|
|
8
|
+
|
|
9
|
+
export const addCompositeFk =
|
|
10
|
+
<
|
|
11
|
+
const TRequiredPresenceOfColumnNames extends string,
|
|
12
|
+
TTable extends AnyPgTable,
|
|
13
|
+
>(
|
|
14
|
+
getForeignTable: () => TTable,
|
|
15
|
+
fkConfig: Record<TRequiredPresenceOfColumnNames, keyof NoInfer<TTable>>,
|
|
16
|
+
): FunctionRequiringColumnsMap<TRequiredPresenceOfColumnNames> =>
|
|
17
|
+
args =>
|
|
18
|
+
addExtraConfig(table => {
|
|
19
|
+
const currentTableName = args[0]
|
|
20
|
+
const ownColumnNamesInitial = Object.keys(fkConfig)
|
|
21
|
+
const ownColumnNamesSnakeCasedCloseToSQL = ownColumnNamesInitial.map(
|
|
22
|
+
name => strSnakeCase(table[name]?.name || name),
|
|
23
|
+
)
|
|
24
|
+
|
|
25
|
+
const foreignTable = getForeignTable() as any
|
|
26
|
+
const foreignTableName = foreignTable[Symbol.for('drizzle:Name')]
|
|
27
|
+
|
|
28
|
+
const foreignColumnNames = Object.values(fkConfig) as [any]
|
|
29
|
+
const foreignColumnNamesSnakeCasedCloseToSQL = foreignColumnNames.map(
|
|
30
|
+
name => strSnakeCase(foreignTable[name].name || name),
|
|
31
|
+
)
|
|
32
|
+
|
|
33
|
+
return [
|
|
34
|
+
foreignKey({
|
|
35
|
+
name: getCompressedIdentifierName('FK', [
|
|
36
|
+
currentTableName,
|
|
37
|
+
...ownColumnNamesSnakeCasedCloseToSQL,
|
|
38
|
+
foreignTableName,
|
|
39
|
+
...foreignColumnNamesSnakeCasedCloseToSQL,
|
|
40
|
+
]),
|
|
41
|
+
columns: ownColumnNamesInitial.map(name => table[name]) as [any],
|
|
42
|
+
foreignColumns: foreignColumnNames.map(
|
|
43
|
+
name => foreignTable[name],
|
|
44
|
+
) as [any],
|
|
45
|
+
}),
|
|
46
|
+
]
|
|
47
|
+
})(args)
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { addPrimaryKey } from './addPrimaryKey.ts'
|
|
2
|
+
import type { FunctionRequiringColumnsMap } from './FunctionRequiringColumnsMap.ts'
|
|
3
|
+
|
|
4
|
+
export const addCompositePrimaryKey = <
|
|
5
|
+
const TColumnNames extends [string, string, ...string[]],
|
|
6
|
+
>(
|
|
7
|
+
...columnNames: TColumnNames
|
|
8
|
+
): FunctionRequiringColumnsMap<TColumnNames[number]> =>
|
|
9
|
+
addPrimaryKey(...columnNames)
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { PgTableExtraConfigValue } from 'drizzle-orm/pg-core'
|
|
2
|
+
|
|
3
|
+
import type { ColumnMap, GeneralColumnMap } from '../columnsAdders/index.ts'
|
|
4
|
+
import type { RemapToTableArgumentOfExtraConfigRenderer } from '../TableFuncArgs.ts'
|
|
5
|
+
import type { FunctionRequiringColumnsMap } from './FunctionRequiringColumnsMap.ts'
|
|
6
|
+
|
|
7
|
+
export const addExtraConfig =
|
|
8
|
+
<TRequiredPresenceOfColumnNames extends string = never>(
|
|
9
|
+
additionalExtraConfig: <
|
|
10
|
+
TColumnsMap extends GeneralColumnMap = GeneralColumnMap,
|
|
11
|
+
>(
|
|
12
|
+
table: RemapToTableArgumentOfExtraConfigRenderer<
|
|
13
|
+
TColumnsMap & ColumnMap<NoInfer<TRequiredPresenceOfColumnNames>>
|
|
14
|
+
>,
|
|
15
|
+
) => PgTableExtraConfigValue[],
|
|
16
|
+
): FunctionRequiringColumnsMap<TRequiredPresenceOfColumnNames> =>
|
|
17
|
+
([snakeCaseTableName, options, extraConfig]) => [
|
|
18
|
+
snakeCaseTableName,
|
|
19
|
+
options,
|
|
20
|
+
table => [...extraConfig(table), ...additionalExtraConfig(table)],
|
|
21
|
+
]
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { strSnakeCase } from '@nevware21/ts-utils'
|
|
2
|
+
import { foreignKey } from 'drizzle-orm/pg-core'
|
|
3
|
+
|
|
4
|
+
import { addExtraConfig } from './addExtraConfig.ts'
|
|
5
|
+
import type { ForeignTableColumnGetter } from './ForeignTableColumnGetter.ts'
|
|
6
|
+
import type { FunctionRequiringColumnsMap } from './FunctionRequiringColumnsMap.ts'
|
|
7
|
+
import { getCompressedIdentifierName } from './getCompressedIdentifierName.ts'
|
|
8
|
+
|
|
9
|
+
export const addFk =
|
|
10
|
+
<const NameOfColumnInCurrentTable extends string>(
|
|
11
|
+
ownInitialColumnName: NameOfColumnInCurrentTable,
|
|
12
|
+
getColumnOfForeignTable: ForeignTableColumnGetter,
|
|
13
|
+
): FunctionRequiringColumnsMap<NameOfColumnInCurrentTable> =>
|
|
14
|
+
args =>
|
|
15
|
+
addExtraConfig(table => {
|
|
16
|
+
const currentTableName = args[0]
|
|
17
|
+
const ownColumnNameSnakeCasedCloseToSQL = strSnakeCase(
|
|
18
|
+
table[ownInitialColumnName].name || ownInitialColumnName,
|
|
19
|
+
)
|
|
20
|
+
|
|
21
|
+
const foreignColumn = getColumnOfForeignTable()
|
|
22
|
+
const foreignTableName = (foreignColumn.table as any)[
|
|
23
|
+
Symbol.for('drizzle:Name')
|
|
24
|
+
] as string
|
|
25
|
+
const foreignColumnNamesSnakeCasedCloseToSQL = foreignColumn.name
|
|
26
|
+
|
|
27
|
+
const isForeignColumnNameAPrimitiveId =
|
|
28
|
+
`${foreignTableName}_id` === foreignColumnNamesSnakeCasedCloseToSQL
|
|
29
|
+
|
|
30
|
+
const doOwnAndForeignColumnNamesMatch =
|
|
31
|
+
ownColumnNameSnakeCasedCloseToSQL ===
|
|
32
|
+
foreignColumnNamesSnakeCasedCloseToSQL
|
|
33
|
+
|
|
34
|
+
return [
|
|
35
|
+
foreignKey({
|
|
36
|
+
name: getCompressedIdentifierName('FK', [
|
|
37
|
+
currentTableName,
|
|
38
|
+
ownColumnNameSnakeCasedCloseToSQL,
|
|
39
|
+
...(isForeignColumnNameAPrimitiveId &&
|
|
40
|
+
doOwnAndForeignColumnNamesMatch
|
|
41
|
+
? []
|
|
42
|
+
: isForeignColumnNameAPrimitiveId ||
|
|
43
|
+
doOwnAndForeignColumnNamesMatch
|
|
44
|
+
? [foreignTableName]
|
|
45
|
+
: [foreignTableName, foreignColumnNamesSnakeCasedCloseToSQL]),
|
|
46
|
+
]),
|
|
47
|
+
columns: [table[ownInitialColumnName]],
|
|
48
|
+
foreignColumns: [foreignColumn],
|
|
49
|
+
}),
|
|
50
|
+
]
|
|
51
|
+
})(args)
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { primaryKey } from 'drizzle-orm/pg-core'
|
|
2
|
+
|
|
3
|
+
import { addExtraConfig } from './addExtraConfig.ts'
|
|
4
|
+
import type { FunctionRequiringColumnsMap } from './FunctionRequiringColumnsMap.ts'
|
|
5
|
+
import { getCompressedIdentifierName } from './getCompressedIdentifierName.ts'
|
|
6
|
+
|
|
7
|
+
export const addPrimaryKey =
|
|
8
|
+
<const TColumnNames extends [string, ...string[]]>(
|
|
9
|
+
...columnNames: TColumnNames
|
|
10
|
+
): FunctionRequiringColumnsMap<TColumnNames[number]> =>
|
|
11
|
+
args =>
|
|
12
|
+
addExtraConfig(table => [
|
|
13
|
+
primaryKey({
|
|
14
|
+
name: getCompressedIdentifierName('PK', [args[0]]),
|
|
15
|
+
columns: columnNames.map(name => table[name]) as any,
|
|
16
|
+
}),
|
|
17
|
+
])(args)
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { strSnakeCase } from '@nevware21/ts-utils'
|
|
2
|
+
import { unique } from 'drizzle-orm/pg-core'
|
|
3
|
+
|
|
4
|
+
import { addExtraConfig } from './addExtraConfig.ts'
|
|
5
|
+
import type { FunctionRequiringColumnsMap } from './FunctionRequiringColumnsMap.ts'
|
|
6
|
+
import { getCompressedIdentifierName } from './getCompressedIdentifierName.ts'
|
|
7
|
+
|
|
8
|
+
export const addUniqueConstraintWithIndex =
|
|
9
|
+
<const TColumnNames extends [string, ...string[]]>(
|
|
10
|
+
...columnNames: TColumnNames
|
|
11
|
+
): FunctionRequiringColumnsMap<TColumnNames[number]> =>
|
|
12
|
+
args =>
|
|
13
|
+
addExtraConfig(table => [
|
|
14
|
+
unique(
|
|
15
|
+
getCompressedIdentifierName('UQ', [
|
|
16
|
+
args[0],
|
|
17
|
+
...columnNames.map(name => strSnakeCase(table[name]?.name || name)),
|
|
18
|
+
]),
|
|
19
|
+
).on(...(columnNames.map(columnName => table[columnName]) as [any])),
|
|
20
|
+
])(args)
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
export function getCompressedIdentifierName(prefix: string, tokens: string[]) {
|
|
2
|
+
{
|
|
3
|
+
const wide = prefix + '_' + tokens.join('_')
|
|
4
|
+
if (wide.length <= 63) return wide
|
|
5
|
+
}
|
|
6
|
+
tokens = tokens.flatMap(e => e.split('_')).filter(Boolean)
|
|
7
|
+
const render = () =>
|
|
8
|
+
prefix + '_' + tokens.map(e => e[0]?.toUpperCase() + e.slice(1)).join('')
|
|
9
|
+
let rendered = render()
|
|
10
|
+
|
|
11
|
+
while (rendered.length > 63) {
|
|
12
|
+
const maxLength = Math.max(...tokens.map(e => e.length))
|
|
13
|
+
if (maxLength === 1) {
|
|
14
|
+
rendered = rendered.slice(0, 63)
|
|
15
|
+
break
|
|
16
|
+
}
|
|
17
|
+
const index = tokens.findLastIndex(e => e.length === maxLength)
|
|
18
|
+
if (index in tokens) tokens[index] = tokens[index]!.slice(0, 1)
|
|
19
|
+
else throw new Error('wtf in getCompressedIdentifierName')
|
|
20
|
+
rendered = render()
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
return rendered
|
|
24
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export * from './addCompositeFk.ts'
|
|
2
|
+
export * from './addCompositePrimaryKey.ts'
|
|
3
|
+
export * from './addExtraConfig.ts'
|
|
4
|
+
export * from './addFk.ts'
|
|
5
|
+
export * from './addPrimaryKey.ts'
|
|
6
|
+
export * from './addUniqueConstraintWithIndex.ts'
|
|
7
|
+
export * from './ForeignTableColumnGetter.ts'
|
|
8
|
+
export * from './FunctionRequiringColumnsMap.ts'
|
|
9
|
+
export * from './getCompressedIdentifierName.ts'
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { strCamelCase } from '@nevware21/ts-utils'
|
|
2
|
+
import { pgTable } from 'drizzle-orm/pg-core'
|
|
3
|
+
import type { CamelCase } from 'type-fest'
|
|
4
|
+
|
|
5
|
+
import type { GeneralColumnMap } from './columnsAdders/AllowOnlyValidColumnMaps.ts'
|
|
6
|
+
import type { TableFuncArgs } from './TableFuncArgs.ts'
|
|
7
|
+
|
|
8
|
+
export const finalizePgTable = <
|
|
9
|
+
const TTableName extends string,
|
|
10
|
+
TColumnsMap extends GeneralColumnMap = GeneralColumnMap,
|
|
11
|
+
>(
|
|
12
|
+
args: TableFuncArgs<TTableName, TColumnsMap>,
|
|
13
|
+
) => {
|
|
14
|
+
const table = pgTable(...args)
|
|
15
|
+
|
|
16
|
+
const exportName = strCamelCase(args[0])
|
|
17
|
+
type ExportName = CamelCase<TTableName>
|
|
18
|
+
|
|
19
|
+
return { [exportName]: table } as {
|
|
20
|
+
[key in ExportName]: typeof table
|
|
21
|
+
}
|
|
22
|
+
}
|
package/src/index.ts
ADDED