rake-db 2.3.6 → 2.3.9
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 +21 -0
- package/dist/index.d.ts +219 -7
- package/dist/index.js +66 -30
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +66 -31
- package/dist/index.mjs.map +1 -1
- package/package.json +2 -2
- package/src/commands/migrateOrRollback.test.ts +24 -6
- package/src/commands/migrateOrRollback.ts +45 -8
- package/src/common.ts +8 -0
- package/src/migration/changeTable.ts +3 -3
- package/src/migration/createTable.ts +3 -3
- package/src/migration/migration.ts +57 -43
- package/src/migration/migrationUtils.ts +2 -3
- package/src/test-utils.ts +3 -3
- package/src/pull/getColumnByType.ts +0 -15
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,26 @@
|
|
|
1
1
|
# rake-db
|
|
2
2
|
|
|
3
|
+
## 2.3.9
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- Add migrate and rollback callbacks
|
|
8
|
+
|
|
9
|
+
## 2.3.8
|
|
10
|
+
|
|
11
|
+
### Patch Changes
|
|
12
|
+
|
|
13
|
+
- Updated dependencies
|
|
14
|
+
- pqb@0.9.6
|
|
15
|
+
|
|
16
|
+
## 2.3.7
|
|
17
|
+
|
|
18
|
+
### Patch Changes
|
|
19
|
+
|
|
20
|
+
- Mix query builder into migration db interface
|
|
21
|
+
- Updated dependencies
|
|
22
|
+
- pqb@0.9.5
|
|
23
|
+
|
|
3
24
|
## 2.3.6
|
|
4
25
|
|
|
5
26
|
### Patch Changes
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as pqb from 'pqb';
|
|
2
|
-
import { EmptyObject, RawExpression, ColumnType, ColumnTypes, raw, ColumnsShape,
|
|
2
|
+
import { EmptyObject, RawExpression, ColumnType, ColumnTypes, raw, ColumnsShape, DbResult, columnTypes, TransactionAdapter, AdapterOptions, TextColumn, MaybeArray, IndexColumnOptions, IndexOptions, ForeignKeyOptions, QueryLogObject, NoPrimaryKeyOption, TableData, SingleColumnIndexOptions, QueryLogOptions } from 'pqb';
|
|
3
3
|
|
|
4
4
|
declare function add(item: ColumnType, options?: {
|
|
5
5
|
dropMode?: DropMode;
|
|
@@ -60,15 +60,222 @@ declare type ExtensionOptions = {
|
|
|
60
60
|
version?: string;
|
|
61
61
|
cascade?: boolean;
|
|
62
62
|
};
|
|
63
|
-
declare
|
|
63
|
+
declare type Migration = DbResult<typeof columnTypes> & MigrationBase;
|
|
64
|
+
declare const createMigrationInterface: (tx: TransactionAdapter, up: boolean, options: RakeDbConfig, adapterOptions: AdapterOptions, appCodeUpdaterCache: object) => pqb.Db<string, Record<string, never>, pqb.RelationsBase, {
|
|
65
|
+
smallint: () => pqb.SmallIntColumn;
|
|
66
|
+
integer: () => pqb.IntegerColumn;
|
|
67
|
+
bigint: () => pqb.BigIntColumn;
|
|
68
|
+
numeric: <Precision extends number | undefined = undefined, Scale extends number | undefined = undefined>(precision?: Precision | undefined, scale?: Scale | undefined) => pqb.DecimalColumn<Precision, Scale>;
|
|
69
|
+
decimal: <Precision_1 extends number | undefined = undefined, Scale_1 extends number | undefined = undefined>(precision?: Precision_1 | undefined, scale?: Scale_1 | undefined) => pqb.DecimalColumn<Precision_1, Scale_1>;
|
|
70
|
+
real: () => pqb.RealColumn;
|
|
71
|
+
doublePrecision: () => pqb.DoublePrecisionColumn;
|
|
72
|
+
smallSerial: () => pqb.SmallSerialColumn;
|
|
73
|
+
serial: () => pqb.SerialColumn;
|
|
74
|
+
bigSerial: () => pqb.BigSerialColumn;
|
|
75
|
+
money: () => pqb.MoneyColumn;
|
|
76
|
+
varchar: <Limit extends number | undefined = undefined>(limit?: Limit | undefined) => pqb.VarCharColumn<Limit>;
|
|
77
|
+
char: <Limit_1 extends number | undefined = undefined>(limit?: Limit_1 | undefined) => pqb.CharColumn<Limit_1>;
|
|
78
|
+
text: (min: number, max: number) => TextColumn;
|
|
79
|
+
string: (min: number, max: number) => TextColumn;
|
|
80
|
+
bytea: () => pqb.ByteaColumn;
|
|
81
|
+
date: () => pqb.DateColumn;
|
|
82
|
+
timestamp: <Precision_2 extends number | undefined = undefined>(precision?: Precision_2 | undefined) => pqb.TimestampColumn<Precision_2>;
|
|
83
|
+
timestampWithTimeZone: <Precision_3 extends number | undefined = undefined>(precision?: Precision_3 | undefined) => pqb.TimestampWithTimeZoneColumn<Precision_3>;
|
|
84
|
+
time: <Precision_4 extends number | undefined = undefined>(precision?: Precision_4 | undefined) => pqb.TimeColumn<Precision_4>;
|
|
85
|
+
timeWithTimeZone: <Precision_5 extends number | undefined = undefined>(precision?: Precision_5 | undefined) => pqb.TimeWithTimeZoneColumn<Precision_5>;
|
|
86
|
+
interval: <Fields extends string | undefined = undefined, Precision_6 extends number | undefined = undefined>(fields?: Fields | undefined, precision?: Precision_6 | undefined) => pqb.IntervalColumn<Fields, Precision_6>;
|
|
87
|
+
boolean: () => pqb.BooleanColumn;
|
|
88
|
+
enum: <U extends string, T extends [U, ...U[]]>(dataType: string, type: T) => pqb.EnumColumn<U, T>;
|
|
89
|
+
point: () => pqb.PointColumn;
|
|
90
|
+
line: () => pqb.LineColumn;
|
|
91
|
+
lseg: () => pqb.LsegColumn;
|
|
92
|
+
box: () => pqb.BoxColumn;
|
|
93
|
+
path: () => pqb.PathColumn;
|
|
94
|
+
polygon: () => pqb.PolygonColumn;
|
|
95
|
+
circle: () => pqb.CircleColumn;
|
|
96
|
+
cidr: () => pqb.CidrColumn;
|
|
97
|
+
inet: () => pqb.InetColumn;
|
|
98
|
+
macaddr: () => pqb.MacAddrColumn;
|
|
99
|
+
macaddr8: () => pqb.MacAddr8Column;
|
|
100
|
+
bit: <Length extends number>(length: Length) => pqb.BitColumn<Length>;
|
|
101
|
+
bitVarying: <Length_1 extends number | undefined = undefined>(length?: Length_1 | undefined) => pqb.BitVaryingColumn<Length_1>;
|
|
102
|
+
tsvector: () => pqb.TsVectorColumn;
|
|
103
|
+
tsquery: () => pqb.TsQueryColumn;
|
|
104
|
+
uuid: () => pqb.UUIDColumn;
|
|
105
|
+
xml: () => pqb.XMLColumn;
|
|
106
|
+
json: <Type extends pqb.JSONTypeAny>(schemaOrFn: Type | ((j: {
|
|
107
|
+
set: <Value extends pqb.JSONTypeAny>(valueType: Value) => pqb.JSONSet<Value>;
|
|
108
|
+
tuple: <T_1 extends [] | pqb.JSONTupleItems, Rest extends pqb.JSONTypeAny | null = null>(items: T_1, rest?: Rest) => pqb.JSONTuple<T_1, Rest>;
|
|
109
|
+
union: <T_2 extends [pqb.JSONTypeAny, pqb.JSONTypeAny, ...pqb.JSONTypeAny[]]>(types: T_2) => pqb.JSONUnion<T_2>;
|
|
110
|
+
any: () => pqb.JSONAny;
|
|
111
|
+
bigint: () => pqb.JSONBigInt;
|
|
112
|
+
boolean: () => pqb.JSONBoolean;
|
|
113
|
+
date: () => pqb.JSONDate;
|
|
114
|
+
nan: () => pqb.JSONNaN;
|
|
115
|
+
never: () => pqb.JSONNever;
|
|
116
|
+
null: () => pqb.JSONNull;
|
|
117
|
+
number: () => pqb.JSONNumber;
|
|
118
|
+
string: () => pqb.JSONString;
|
|
119
|
+
undefined: () => pqb.JSONUndefined;
|
|
120
|
+
unknown: () => pqb.JSONUnknown;
|
|
121
|
+
void: () => pqb.JSONVoid;
|
|
122
|
+
array: <Type_1 extends pqb.JSONTypeAny>(element: Type_1) => pqb.JSONArray<Type_1, "many">;
|
|
123
|
+
discriminatedUnion: <Discriminator extends string, DiscriminatorValue extends pqb.Primitive, Types extends [pqb.JSONDiscriminatedObject<Discriminator, DiscriminatorValue>, pqb.JSONDiscriminatedObject<Discriminator, DiscriminatorValue>, ...pqb.JSONDiscriminatedObject<Discriminator, DiscriminatorValue>[]]>(discriminator: Discriminator, options: Types) => pqb.JSONDiscriminatedUnion<Discriminator, DiscriminatorValue, Types[number]>;
|
|
124
|
+
enum: <U_1 extends string, T_3 extends [U_1, ...U_1[]]>(options: T_3) => pqb.JSONEnum<U_1, T_3>;
|
|
125
|
+
instanceOf: <T_4 extends new (...args: any[]) => any>(cls: T_4) => pqb.JSONInstanceOf<T_4>;
|
|
126
|
+
intersection: <Left extends pqb.JSONTypeAny, Right extends pqb.JSONTypeAny>(left: Left, right: Right) => pqb.JSONIntersection<Left, Right>;
|
|
127
|
+
lazy: <T_5 extends pqb.JSONTypeAny>(fn: () => T_5) => pqb.JSONLazy<T_5>;
|
|
128
|
+
literal: <T_6 extends pqb.Primitive>(value: T_6) => pqb.JSONLiteral<T_6>;
|
|
129
|
+
map: <Key extends pqb.JSONTypeAny, Value_1 extends pqb.JSONTypeAny>(keyType: Key, valueType: Value_1) => pqb.JSONMap<Key, Value_1>;
|
|
130
|
+
nativeEnum: <T_7 extends pqb.EnumLike>(givenEnum: T_7) => pqb.JSONNativeEnum<T_7>;
|
|
131
|
+
nullable: <T_8 extends pqb.JSONTypeAny>(type: T_8) => pqb.JSONNullable<T_8>;
|
|
132
|
+
nullish: <T_9 extends pqb.JSONTypeAny>(type: T_9) => pqb.JSONNullish<T_9>;
|
|
133
|
+
object: <T_10 extends pqb.JSONObjectShape, UnknownKeys extends pqb.UnknownKeysParam = "strip", Catchall extends pqb.JSONTypeAny = pqb.JSONTypeAny>(shape: T_10) => pqb.JSONObject<T_10, UnknownKeys, Catchall, pqb.JSONTypeAny extends Catchall ? pqb.addQuestionMarks<{ [k_1 in keyof T_10]: T_10[k_1]["type"]; }> extends infer T_11 extends object ? { [k in keyof T_11]: pqb.addQuestionMarks<{ [k_1 in keyof T_10]: T_10[k_1]["type"]; }>[k]; } : never : (pqb.addQuestionMarks<{ [k_1 in keyof T_10]: T_10[k_1]["type"]; }> extends infer T_11 extends object ? { [k in keyof T_11]: pqb.addQuestionMarks<{ [k_1 in keyof T_10]: T_10[k_1]["type"]; }>[k]; } : never) & {
|
|
134
|
+
[k: string]: Catchall["type"];
|
|
135
|
+
} extends infer T_12 extends object ? { [k_2 in keyof T_12]: ((pqb.addQuestionMarks<{ [k_1 in keyof T_10]: T_10[k_1]["type"]; }> extends infer T_11 extends object ? { [k in keyof T_11]: pqb.addQuestionMarks<{ [k_1 in keyof T_10]: T_10[k_1]["type"]; }>[k]; } : never) & {
|
|
136
|
+
[k: string]: Catchall["type"];
|
|
137
|
+
})[k_2]; } : never>;
|
|
138
|
+
optional: <T_13 extends pqb.JSONTypeAny>(type: T_13) => pqb.JSONOptional<T_13>;
|
|
139
|
+
record: typeof pqb.record;
|
|
140
|
+
}) => Type)) => pqb.JSONColumn<Type>;
|
|
141
|
+
jsonText: () => pqb.JSONTextColumn;
|
|
142
|
+
array: <Item extends ColumnType<unknown, pqb.Operators, unknown>>(item: Item) => pqb.ArrayColumn<Item>;
|
|
143
|
+
timestamps: <T_14 extends ColumnType<unknown, pqb.Operators, unknown>>(this: {
|
|
144
|
+
timestamp(): T_14;
|
|
145
|
+
}) => {
|
|
146
|
+
createdAt: T_14 & {
|
|
147
|
+
hasDefault: true;
|
|
148
|
+
};
|
|
149
|
+
updatedAt: T_14 & {
|
|
150
|
+
hasDefault: true;
|
|
151
|
+
};
|
|
152
|
+
};
|
|
153
|
+
primaryKey(columns: string[], options?: {
|
|
154
|
+
name?: string | undefined;
|
|
155
|
+
} | undefined): {};
|
|
156
|
+
index(columns: MaybeArray<string | IndexColumnOptions>, options?: IndexOptions): {};
|
|
157
|
+
unique(columns: MaybeArray<string | IndexColumnOptions>, options?: IndexOptions): {};
|
|
158
|
+
foreignKey: {
|
|
159
|
+
<Table extends pqb.ForeignKeyTableWithColumns, Columns extends [Exclude<keyof InstanceType<Table>["columns"]["shape"], number | symbol>, ...Exclude<keyof InstanceType<Table>["columns"]["shape"], number | symbol>[]]>(columns: string[], fn: () => Table, foreignColumns: Columns, options?: ForeignKeyOptions | undefined): {};
|
|
160
|
+
<Table_1 extends string, Columns_1 extends [string, ...string[]]>(columns: string[], table: Table_1, foreignColumns: Columns_1, options?: ForeignKeyOptions | undefined): {};
|
|
161
|
+
};
|
|
162
|
+
}> & {
|
|
163
|
+
<Table_2 extends string, Shape extends ColumnsShape = ColumnsShape>(table: Table_2, shape?: Shape | ((t: {
|
|
164
|
+
smallint: () => pqb.SmallIntColumn;
|
|
165
|
+
integer: () => pqb.IntegerColumn;
|
|
166
|
+
bigint: () => pqb.BigIntColumn;
|
|
167
|
+
numeric: <Precision extends number | undefined = undefined, Scale extends number | undefined = undefined>(precision?: Precision | undefined, scale?: Scale | undefined) => pqb.DecimalColumn<Precision, Scale>;
|
|
168
|
+
decimal: <Precision_1 extends number | undefined = undefined, Scale_1 extends number | undefined = undefined>(precision?: Precision_1 | undefined, scale?: Scale_1 | undefined) => pqb.DecimalColumn<Precision_1, Scale_1>;
|
|
169
|
+
real: () => pqb.RealColumn;
|
|
170
|
+
doublePrecision: () => pqb.DoublePrecisionColumn;
|
|
171
|
+
smallSerial: () => pqb.SmallSerialColumn;
|
|
172
|
+
serial: () => pqb.SerialColumn;
|
|
173
|
+
bigSerial: () => pqb.BigSerialColumn;
|
|
174
|
+
money: () => pqb.MoneyColumn;
|
|
175
|
+
varchar: <Limit extends number | undefined = undefined>(limit?: Limit | undefined) => pqb.VarCharColumn<Limit>;
|
|
176
|
+
char: <Limit_1 extends number | undefined = undefined>(limit?: Limit_1 | undefined) => pqb.CharColumn<Limit_1>;
|
|
177
|
+
text: (min: number, max: number) => TextColumn;
|
|
178
|
+
string: (min: number, max: number) => TextColumn;
|
|
179
|
+
bytea: () => pqb.ByteaColumn;
|
|
180
|
+
date: () => pqb.DateColumn;
|
|
181
|
+
timestamp: <Precision_2 extends number | undefined = undefined>(precision?: Precision_2 | undefined) => pqb.TimestampColumn<Precision_2>;
|
|
182
|
+
timestampWithTimeZone: <Precision_3 extends number | undefined = undefined>(precision?: Precision_3 | undefined) => pqb.TimestampWithTimeZoneColumn<Precision_3>;
|
|
183
|
+
time: <Precision_4 extends number | undefined = undefined>(precision?: Precision_4 | undefined) => pqb.TimeColumn<Precision_4>;
|
|
184
|
+
timeWithTimeZone: <Precision_5 extends number | undefined = undefined>(precision?: Precision_5 | undefined) => pqb.TimeWithTimeZoneColumn<Precision_5>;
|
|
185
|
+
interval: <Fields extends string | undefined = undefined, Precision_6 extends number | undefined = undefined>(fields?: Fields | undefined, precision?: Precision_6 | undefined) => pqb.IntervalColumn<Fields, Precision_6>;
|
|
186
|
+
boolean: () => pqb.BooleanColumn;
|
|
187
|
+
enum: <U extends string, T extends [U, ...U[]]>(dataType: string, type: T) => pqb.EnumColumn<U, T>;
|
|
188
|
+
point: () => pqb.PointColumn;
|
|
189
|
+
line: () => pqb.LineColumn;
|
|
190
|
+
lseg: () => pqb.LsegColumn;
|
|
191
|
+
box: () => pqb.BoxColumn;
|
|
192
|
+
path: () => pqb.PathColumn;
|
|
193
|
+
polygon: () => pqb.PolygonColumn;
|
|
194
|
+
circle: () => pqb.CircleColumn;
|
|
195
|
+
cidr: () => pqb.CidrColumn;
|
|
196
|
+
inet: () => pqb.InetColumn;
|
|
197
|
+
macaddr: () => pqb.MacAddrColumn;
|
|
198
|
+
macaddr8: () => pqb.MacAddr8Column;
|
|
199
|
+
bit: <Length extends number>(length: Length) => pqb.BitColumn<Length>;
|
|
200
|
+
bitVarying: <Length_1 extends number | undefined = undefined>(length?: Length_1 | undefined) => pqb.BitVaryingColumn<Length_1>;
|
|
201
|
+
tsvector: () => pqb.TsVectorColumn;
|
|
202
|
+
tsquery: () => pqb.TsQueryColumn;
|
|
203
|
+
uuid: () => pqb.UUIDColumn;
|
|
204
|
+
xml: () => pqb.XMLColumn;
|
|
205
|
+
json: <Type extends pqb.JSONTypeAny>(schemaOrFn: Type | ((j: {
|
|
206
|
+
set: <Value extends pqb.JSONTypeAny>(valueType: Value) => pqb.JSONSet<Value>;
|
|
207
|
+
tuple: <T_1 extends [] | pqb.JSONTupleItems, Rest extends pqb.JSONTypeAny | null = null>(items: T_1, rest?: Rest) => pqb.JSONTuple<T_1, Rest>;
|
|
208
|
+
union: <T_2 extends [pqb.JSONTypeAny, pqb.JSONTypeAny, ...pqb.JSONTypeAny[]]>(types: T_2) => pqb.JSONUnion<T_2>;
|
|
209
|
+
any: () => pqb.JSONAny;
|
|
210
|
+
bigint: () => pqb.JSONBigInt;
|
|
211
|
+
boolean: () => pqb.JSONBoolean;
|
|
212
|
+
date: () => pqb.JSONDate;
|
|
213
|
+
nan: () => pqb.JSONNaN;
|
|
214
|
+
never: () => pqb.JSONNever;
|
|
215
|
+
null: () => pqb.JSONNull;
|
|
216
|
+
number: () => pqb.JSONNumber;
|
|
217
|
+
string: () => pqb.JSONString;
|
|
218
|
+
undefined: () => pqb.JSONUndefined;
|
|
219
|
+
unknown: () => pqb.JSONUnknown;
|
|
220
|
+
void: () => pqb.JSONVoid;
|
|
221
|
+
array: <Type_1 extends pqb.JSONTypeAny>(element: Type_1) => pqb.JSONArray<Type_1, "many">;
|
|
222
|
+
discriminatedUnion: <Discriminator extends string, DiscriminatorValue extends pqb.Primitive, Types extends [pqb.JSONDiscriminatedObject<Discriminator, DiscriminatorValue>, pqb.JSONDiscriminatedObject<Discriminator, DiscriminatorValue>, ...pqb.JSONDiscriminatedObject<Discriminator, DiscriminatorValue>[]]>(discriminator: Discriminator, options: Types) => pqb.JSONDiscriminatedUnion<Discriminator, DiscriminatorValue, Types[number]>;
|
|
223
|
+
enum: <U_1 extends string, T_3 extends [U_1, ...U_1[]]>(options: T_3) => pqb.JSONEnum<U_1, T_3>;
|
|
224
|
+
instanceOf: <T_4 extends new (...args: any[]) => any>(cls: T_4) => pqb.JSONInstanceOf<T_4>;
|
|
225
|
+
intersection: <Left extends pqb.JSONTypeAny, Right extends pqb.JSONTypeAny>(left: Left, right: Right) => pqb.JSONIntersection<Left, Right>;
|
|
226
|
+
lazy: <T_5 extends pqb.JSONTypeAny>(fn: () => T_5) => pqb.JSONLazy<T_5>;
|
|
227
|
+
literal: <T_6 extends pqb.Primitive>(value: T_6) => pqb.JSONLiteral<T_6>;
|
|
228
|
+
map: <Key extends pqb.JSONTypeAny, Value_1 extends pqb.JSONTypeAny>(keyType: Key, valueType: Value_1) => pqb.JSONMap<Key, Value_1>;
|
|
229
|
+
nativeEnum: <T_7 extends pqb.EnumLike>(givenEnum: T_7) => pqb.JSONNativeEnum<T_7>;
|
|
230
|
+
nullable: <T_8 extends pqb.JSONTypeAny>(type: T_8) => pqb.JSONNullable<T_8>;
|
|
231
|
+
nullish: <T_9 extends pqb.JSONTypeAny>(type: T_9) => pqb.JSONNullish<T_9>;
|
|
232
|
+
object: <T_10 extends pqb.JSONObjectShape, UnknownKeys extends pqb.UnknownKeysParam = "strip", Catchall extends pqb.JSONTypeAny = pqb.JSONTypeAny>(shape: T_10) => pqb.JSONObject<T_10, UnknownKeys, Catchall, pqb.JSONTypeAny extends Catchall ? pqb.addQuestionMarks<{ [k_1 in keyof T_10]: T_10[k_1]["type"]; }> extends infer T_11 extends object ? { [k in keyof T_11]: pqb.addQuestionMarks<{ [k_1 in keyof T_10]: T_10[k_1]["type"]; }>[k]; } : never : (pqb.addQuestionMarks<{ [k_1 in keyof T_10]: T_10[k_1]["type"]; }> extends infer T_11 extends object ? { [k in keyof T_11]: pqb.addQuestionMarks<{ [k_1 in keyof T_10]: T_10[k_1]["type"]; }>[k]; } : never) & {
|
|
233
|
+
[k: string]: Catchall["type"];
|
|
234
|
+
} extends infer T_12 extends object ? { [k_2 in keyof T_12]: ((pqb.addQuestionMarks<{ [k_1 in keyof T_10]: T_10[k_1]["type"]; }> extends infer T_11 extends object ? { [k in keyof T_11]: pqb.addQuestionMarks<{ [k_1 in keyof T_10]: T_10[k_1]["type"]; }>[k]; } : never) & {
|
|
235
|
+
[k: string]: Catchall["type"];
|
|
236
|
+
})[k_2]; } : never>;
|
|
237
|
+
optional: <T_13 extends pqb.JSONTypeAny>(type: T_13) => pqb.JSONOptional<T_13>;
|
|
238
|
+
record: typeof pqb.record;
|
|
239
|
+
}) => Type)) => pqb.JSONColumn<Type>;
|
|
240
|
+
jsonText: () => pqb.JSONTextColumn;
|
|
241
|
+
array: <Item extends ColumnType<unknown, pqb.Operators, unknown>>(item: Item) => pqb.ArrayColumn<Item>;
|
|
242
|
+
timestamps: <T_14 extends ColumnType<unknown, pqb.Operators, unknown>>(this: {
|
|
243
|
+
timestamp(): T_14;
|
|
244
|
+
}) => {
|
|
245
|
+
createdAt: T_14 & {
|
|
246
|
+
hasDefault: true;
|
|
247
|
+
};
|
|
248
|
+
updatedAt: T_14 & {
|
|
249
|
+
hasDefault: true;
|
|
250
|
+
};
|
|
251
|
+
};
|
|
252
|
+
primaryKey(columns: string[], options?: {
|
|
253
|
+
name?: string | undefined;
|
|
254
|
+
} | undefined): {};
|
|
255
|
+
index(columns: MaybeArray<string | IndexColumnOptions>, options?: IndexOptions): {};
|
|
256
|
+
unique(columns: MaybeArray<string | IndexColumnOptions>, options?: IndexOptions): {};
|
|
257
|
+
foreignKey: {
|
|
258
|
+
<Table extends pqb.ForeignKeyTableWithColumns, Columns extends [Exclude<keyof InstanceType<Table>["columns"]["shape"], number | symbol>, ...Exclude<keyof InstanceType<Table>["columns"]["shape"], number | symbol>[]]>(columns: string[], fn: () => Table, foreignColumns: Columns, options?: ForeignKeyOptions | undefined): {};
|
|
259
|
+
<Table_1 extends string, Columns_1 extends [string, ...string[]]>(columns: string[], table: Table_1, foreignColumns: Columns_1, options?: ForeignKeyOptions | undefined): {};
|
|
260
|
+
};
|
|
261
|
+
}) => Shape) | undefined, options?: pqb.DbTableOptions | undefined): pqb.Db<Table_2, Shape, pqb.RelationsBase, pqb.ColumnTypesBase>;
|
|
262
|
+
adapter: pqb.Adapter;
|
|
263
|
+
close: () => Promise<void>;
|
|
264
|
+
} & MigrationBase & {
|
|
265
|
+
adapter: TransactionAdapter;
|
|
266
|
+
log: QueryLogObject | undefined;
|
|
64
267
|
up: boolean;
|
|
65
268
|
options: RakeDbConfig;
|
|
66
269
|
adapterOptions: AdapterOptions;
|
|
67
270
|
appCodeUpdaterCache: object;
|
|
271
|
+
};
|
|
272
|
+
declare class MigrationBase {
|
|
273
|
+
adapter: TransactionAdapter;
|
|
68
274
|
log?: QueryLogObject;
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
275
|
+
up: boolean;
|
|
276
|
+
options: RakeDbConfig;
|
|
277
|
+
adapterOptions: AdapterOptions;
|
|
278
|
+
appCodeUpdaterCache: object;
|
|
72
279
|
createTable(tableName: string, options: TableOptions, fn: ColumnsShapeCallback): Promise<void>;
|
|
73
280
|
createTable(tableName: string, fn: ColumnsShapeCallback): Promise<void>;
|
|
74
281
|
dropTable(tableName: string, options: TableOptions, fn: ColumnsShapeCallback): Promise<void>;
|
|
@@ -102,7 +309,7 @@ declare class Migration extends TransactionAdapter {
|
|
|
102
309
|
columnExists(tableName: string, columnName: string): Promise<boolean>;
|
|
103
310
|
constraintExists(constraintName: string): Promise<boolean>;
|
|
104
311
|
}
|
|
105
|
-
declare const runCodeUpdater: (migration:
|
|
312
|
+
declare const runCodeUpdater: (migration: MigrationBase, ast: RakeDbAst) => Promise<void> | undefined;
|
|
106
313
|
|
|
107
314
|
declare type RakeDbAst = RakeDbAst.Table | RakeDbAst.ChangeTable | RakeDbAst.RenameTable | RakeDbAst.Schema | RakeDbAst.Extension;
|
|
108
315
|
declare namespace RakeDbAst {
|
|
@@ -182,6 +389,7 @@ declare namespace RakeDbAst {
|
|
|
182
389
|
};
|
|
183
390
|
}
|
|
184
391
|
|
|
392
|
+
declare type Db = DbResult<typeof columnTypes>;
|
|
185
393
|
declare type RakeDbConfig = {
|
|
186
394
|
migrationsPath: string;
|
|
187
395
|
migrationsTable: string;
|
|
@@ -189,6 +397,10 @@ declare type RakeDbConfig = {
|
|
|
189
397
|
noPrimaryKey?: NoPrimaryKeyOption;
|
|
190
398
|
appCodeUpdater?: AppCodeUpdater;
|
|
191
399
|
useCodeUpdater?: boolean;
|
|
400
|
+
beforeMigrate?(db: Db): Promise<void>;
|
|
401
|
+
afterMigrate?(db: Db): Promise<void>;
|
|
402
|
+
beforeRollback?(db: Db): Promise<void>;
|
|
403
|
+
afterRollback?(db: Db): Promise<void>;
|
|
192
404
|
} & QueryLogOptions;
|
|
193
405
|
declare type AppCodeUpdater = (params: {
|
|
194
406
|
ast: RakeDbAst;
|
|
@@ -211,4 +423,4 @@ declare const change: (fn: ChangeCallback) => void;
|
|
|
211
423
|
|
|
212
424
|
declare const rakeDb: (options: MaybeArray<AdapterOptions>, partialConfig?: Partial<RakeDbConfig>, args?: string[]) => Promise<void>;
|
|
213
425
|
|
|
214
|
-
export { AppCodeUpdater, ChangeTableCallback, ChangeTableOptions, ColumnComment, ColumnsShapeCallback, DropMode, ExtensionOptions, JoinTableOptions, Migration, MigrationColumnTypes, RakeDbAst, RakeDbConfig, TableOptions, change, createDb, dropDb, generate, migrate, rakeDb, resetDb, rollback, runCodeUpdater, writeMigrationFile };
|
|
426
|
+
export { AppCodeUpdater, ChangeTableCallback, ChangeTableOptions, ColumnComment, ColumnsShapeCallback, DropMode, ExtensionOptions, JoinTableOptions, Migration, MigrationBase, MigrationColumnTypes, RakeDbAst, RakeDbConfig, TableOptions, change, createDb, createMigrationInterface, dropDb, generate, migrate, rakeDb, resetDb, rollback, runCodeUpdater, writeMigrationFile };
|
package/dist/index.js
CHANGED
|
@@ -454,7 +454,7 @@ const createTable$1 = async (migration, up, tableName, options, fn) => {
|
|
|
454
454
|
validatePrimaryKey(ast);
|
|
455
455
|
const queries = astToQueries$1(ast);
|
|
456
456
|
for (const query of queries) {
|
|
457
|
-
await migration.query(query);
|
|
457
|
+
await migration.adapter.query(query);
|
|
458
458
|
}
|
|
459
459
|
await runCodeUpdater(migration, ast);
|
|
460
460
|
};
|
|
@@ -688,7 +688,7 @@ const changeTable = async (migration, up, tableName, options, fn) => {
|
|
|
688
688
|
const ast = makeAst(up, tableName, changeData, changeTableData, options);
|
|
689
689
|
const queries = astToQueries(ast);
|
|
690
690
|
for (const query of queries) {
|
|
691
|
-
await migration.query(query);
|
|
691
|
+
await migration.adapter.query(query);
|
|
692
692
|
}
|
|
693
693
|
await runCodeUpdater(migration, ast);
|
|
694
694
|
};
|
|
@@ -917,21 +917,31 @@ var __spreadValues$2 = (a, b) => {
|
|
|
917
917
|
return a;
|
|
918
918
|
};
|
|
919
919
|
var __spreadProps$1 = (a, b) => __defProps$1(a, __getOwnPropDescs$1(b));
|
|
920
|
-
|
|
921
|
-
|
|
922
|
-
|
|
923
|
-
|
|
924
|
-
|
|
925
|
-
|
|
926
|
-
|
|
927
|
-
|
|
928
|
-
|
|
929
|
-
|
|
930
|
-
|
|
931
|
-
}
|
|
932
|
-
|
|
933
|
-
|
|
934
|
-
}
|
|
920
|
+
const createMigrationInterface = (tx, up, options, adapterOptions, appCodeUpdaterCache) => {
|
|
921
|
+
const adapter = new pqb.TransactionAdapter(tx, tx.client, tx.types);
|
|
922
|
+
const { query, arrays } = adapter;
|
|
923
|
+
const log = pqb.logParamToLogObject(options.logger || console, options.log);
|
|
924
|
+
adapter.query = (q, types) => {
|
|
925
|
+
return wrapWithLog(log, q, () => query.call(adapter, q, types));
|
|
926
|
+
};
|
|
927
|
+
adapter.arrays = (q, types) => {
|
|
928
|
+
return wrapWithLog(log, q, () => arrays.call(adapter, q, types));
|
|
929
|
+
};
|
|
930
|
+
const db = pqb.createDb({ adapter, columnTypes: pqb.columnTypes });
|
|
931
|
+
const { prototype: proto } = MigrationBase;
|
|
932
|
+
for (const key of Object.getOwnPropertyNames(proto)) {
|
|
933
|
+
db[key] = proto[key];
|
|
934
|
+
}
|
|
935
|
+
return Object.assign(db, {
|
|
936
|
+
adapter,
|
|
937
|
+
log,
|
|
938
|
+
up,
|
|
939
|
+
options,
|
|
940
|
+
adapterOptions,
|
|
941
|
+
appCodeUpdaterCache
|
|
942
|
+
});
|
|
943
|
+
};
|
|
944
|
+
class MigrationBase {
|
|
935
945
|
createTable(tableName, cbOrOptions, cb) {
|
|
936
946
|
const options = typeof cbOrOptions === "function" ? {} : cbOrOptions;
|
|
937
947
|
const fn = cb || cbOrOptions;
|
|
@@ -956,7 +966,7 @@ class Migration extends pqb.TransactionAdapter {
|
|
|
956
966
|
toSchema,
|
|
957
967
|
to: t
|
|
958
968
|
};
|
|
959
|
-
await this.query(
|
|
969
|
+
await this.adapter.query(
|
|
960
970
|
`ALTER TABLE ${quoteWithSchema({
|
|
961
971
|
schema: ast.fromSchema,
|
|
962
972
|
name: ast.from
|
|
@@ -1079,7 +1089,7 @@ const createSchema$1 = async (migration, up, name) => {
|
|
|
1079
1089
|
action: up ? "create" : "drop",
|
|
1080
1090
|
name
|
|
1081
1091
|
};
|
|
1082
|
-
await migration.query(
|
|
1092
|
+
await migration.adapter.query(
|
|
1083
1093
|
`${ast.action === "create" ? "CREATE" : "DROP"} SCHEMA "${name}"`
|
|
1084
1094
|
);
|
|
1085
1095
|
await runCodeUpdater(migration, ast);
|
|
@@ -1096,11 +1106,11 @@ const createExtension = async (migration, up, name, options) => {
|
|
|
1096
1106
|
} else {
|
|
1097
1107
|
query = `CREATE EXTENSION${ast.ifExists ? " IF NOT EXISTS" : ""} "${ast.name}"${ast.schema ? ` SCHEMA "${ast.schema}"` : ""}${ast.version ? ` VERSION '${ast.version}'` : ""}${ast.cascade ? " CASCADE" : ""}`;
|
|
1098
1108
|
}
|
|
1099
|
-
await migration.query(query);
|
|
1109
|
+
await migration.adapter.query(query);
|
|
1100
1110
|
await runCodeUpdater(migration, ast);
|
|
1101
1111
|
};
|
|
1102
1112
|
const queryExists = (db, sql) => {
|
|
1103
|
-
return db.query(sql).then(({ rowCount }) => rowCount > 0);
|
|
1113
|
+
return db.adapter.query(sql).then(({ rowCount }) => rowCount > 0);
|
|
1104
1114
|
};
|
|
1105
1115
|
const runCodeUpdater = (migration, ast) => {
|
|
1106
1116
|
var _a, _b;
|
|
@@ -1127,8 +1137,9 @@ var __spreadValues$1 = (a, b) => {
|
|
|
1127
1137
|
}
|
|
1128
1138
|
return a;
|
|
1129
1139
|
};
|
|
1140
|
+
const getDb = (adapter) => pqb.createDb({ adapter, columnTypes: pqb.columnTypes });
|
|
1130
1141
|
const migrateOrRollback = async (options, config, args, up) => {
|
|
1131
|
-
var _a;
|
|
1142
|
+
var _a, _b, _c, _d, _e;
|
|
1132
1143
|
config = __spreadValues$1({}, config);
|
|
1133
1144
|
const files = await getMigrationFiles(config, up);
|
|
1134
1145
|
let count = up ? Infinity : 1;
|
|
@@ -1146,8 +1157,14 @@ const migrateOrRollback = async (options, config, args, up) => {
|
|
|
1146
1157
|
delete config.appCodeUpdater;
|
|
1147
1158
|
const appCodeUpdaterCache = {};
|
|
1148
1159
|
for (const opts of pqb.toArray(options)) {
|
|
1149
|
-
const
|
|
1150
|
-
|
|
1160
|
+
const adapter = new pqb.Adapter(opts);
|
|
1161
|
+
let db;
|
|
1162
|
+
if (up) {
|
|
1163
|
+
await ((_a = config.beforeMigrate) == null ? void 0 : _a.call(config, db != null ? db : db = getDb(adapter)));
|
|
1164
|
+
} else {
|
|
1165
|
+
await ((_b = config.beforeRollback) == null ? void 0 : _b.call(config, db != null ? db : db = getDb(adapter)));
|
|
1166
|
+
}
|
|
1167
|
+
const migratedVersions = await getMigratedVersionsMap(adapter, config);
|
|
1151
1168
|
try {
|
|
1152
1169
|
for (const file of files) {
|
|
1153
1170
|
if (up && migratedVersions[file.version] || !up && !migratedVersions[file.version]) {
|
|
@@ -1155,11 +1172,23 @@ const migrateOrRollback = async (options, config, args, up) => {
|
|
|
1155
1172
|
}
|
|
1156
1173
|
if (count-- <= 0)
|
|
1157
1174
|
break;
|
|
1158
|
-
await processMigration(
|
|
1159
|
-
|
|
1175
|
+
await processMigration(
|
|
1176
|
+
adapter,
|
|
1177
|
+
up,
|
|
1178
|
+
file,
|
|
1179
|
+
config,
|
|
1180
|
+
opts,
|
|
1181
|
+
appCodeUpdaterCache
|
|
1182
|
+
);
|
|
1183
|
+
(_c = config.logger) == null ? void 0 : _c.log(`${file.path} ${up ? "migrated" : "rolled back"}`);
|
|
1184
|
+
}
|
|
1185
|
+
if (up) {
|
|
1186
|
+
await ((_d = config.afterMigrate) == null ? void 0 : _d.call(config, db != null ? db : db = getDb(adapter)));
|
|
1187
|
+
} else {
|
|
1188
|
+
await ((_e = config.afterRollback) == null ? void 0 : _e.call(config, db != null ? db : db = getDb(adapter)));
|
|
1160
1189
|
}
|
|
1161
1190
|
} finally {
|
|
1162
|
-
await
|
|
1191
|
+
await adapter.close();
|
|
1163
1192
|
}
|
|
1164
1193
|
delete config.appCodeUpdater;
|
|
1165
1194
|
}
|
|
@@ -1167,7 +1196,13 @@ const migrateOrRollback = async (options, config, args, up) => {
|
|
|
1167
1196
|
const changeCache = {};
|
|
1168
1197
|
const processMigration = async (db, up, file, config, options, appCodeUpdaterCache) => {
|
|
1169
1198
|
await db.transaction(async (tx) => {
|
|
1170
|
-
const db2 =
|
|
1199
|
+
const db2 = createMigrationInterface(
|
|
1200
|
+
tx,
|
|
1201
|
+
up,
|
|
1202
|
+
config,
|
|
1203
|
+
options,
|
|
1204
|
+
appCodeUpdaterCache
|
|
1205
|
+
);
|
|
1171
1206
|
setCurrentMigration(db2);
|
|
1172
1207
|
setCurrentMigrationUp(up);
|
|
1173
1208
|
const callback = changeCache[file.path];
|
|
@@ -1179,7 +1214,7 @@ const processMigration = async (db, up, file, config, options, appCodeUpdaterCac
|
|
|
1179
1214
|
}
|
|
1180
1215
|
await getCurrentPromise();
|
|
1181
1216
|
await (up ? saveMigratedVersion : removeMigratedVersion)(
|
|
1182
|
-
db2,
|
|
1217
|
+
db2.adapter,
|
|
1183
1218
|
file.version,
|
|
1184
1219
|
config
|
|
1185
1220
|
);
|
|
@@ -1968,9 +2003,10 @@ Generate arguments:
|
|
|
1968
2003
|
`
|
|
1969
2004
|
);
|
|
1970
2005
|
|
|
1971
|
-
exports.
|
|
2006
|
+
exports.MigrationBase = MigrationBase;
|
|
1972
2007
|
exports.change = change;
|
|
1973
2008
|
exports.createDb = createDb;
|
|
2009
|
+
exports.createMigrationInterface = createMigrationInterface;
|
|
1974
2010
|
exports.dropDb = dropDb;
|
|
1975
2011
|
exports.generate = generate;
|
|
1976
2012
|
exports.migrate = migrate;
|