@lde/sparql-monitor 0.2.0 → 0.2.2
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/dist/schema.d.ts +47 -71
- package/dist/schema.d.ts.map +1 -1
- package/dist/store.d.ts +5 -1
- package/dist/store.d.ts.map +1 -1
- package/dist/store.js +42 -9
- package/package.json +4 -4
package/dist/schema.d.ts
CHANGED
|
@@ -5,28 +5,25 @@ export declare const observations: import("drizzle-orm/pg-core").PgTableWithColu
|
|
|
5
5
|
name: "observations";
|
|
6
6
|
schema: undefined;
|
|
7
7
|
columns: {
|
|
8
|
-
id: import("drizzle-orm/pg-core").
|
|
9
|
-
name:
|
|
8
|
+
id: import("drizzle-orm/pg-core").PgBuildColumn<"observations", import("drizzle-orm/pg-core").SetHasDefault<import("drizzle-orm/pg-core").SetIsPrimaryKey<import("drizzle-orm/pg-core").SetNotNull<import("drizzle-orm/pg-core").PgUUIDBuilder>>>, {
|
|
9
|
+
name: string;
|
|
10
10
|
tableName: "observations";
|
|
11
|
-
dataType: "string";
|
|
12
|
-
columnType: "PgUUID";
|
|
11
|
+
dataType: "string uuid";
|
|
13
12
|
data: string;
|
|
14
13
|
driverParam: string;
|
|
15
14
|
notNull: true;
|
|
16
15
|
hasDefault: true;
|
|
17
|
-
isPrimaryKey:
|
|
16
|
+
isPrimaryKey: false;
|
|
18
17
|
isAutoincrement: false;
|
|
19
18
|
hasRuntimeDefault: false;
|
|
20
19
|
enumValues: undefined;
|
|
21
|
-
baseColumn: never;
|
|
22
20
|
identity: undefined;
|
|
23
21
|
generated: undefined;
|
|
24
|
-
}
|
|
25
|
-
observedAt: import("drizzle-orm/pg-core").
|
|
26
|
-
name:
|
|
22
|
+
}>;
|
|
23
|
+
observedAt: import("drizzle-orm/pg-core").PgBuildColumn<"observations", import("drizzle-orm/pg-core").SetHasDefault<import("drizzle-orm/pg-core").SetNotNull<import("drizzle-orm/pg-core").PgTimestampBuilder>>, {
|
|
24
|
+
name: string;
|
|
27
25
|
tableName: "observations";
|
|
28
|
-
dataType: "date";
|
|
29
|
-
columnType: "PgTimestamp";
|
|
26
|
+
dataType: "object date";
|
|
30
27
|
data: Date;
|
|
31
28
|
driverParam: string;
|
|
32
29
|
notNull: true;
|
|
@@ -35,15 +32,13 @@ export declare const observations: import("drizzle-orm/pg-core").PgTableWithColu
|
|
|
35
32
|
isAutoincrement: false;
|
|
36
33
|
hasRuntimeDefault: false;
|
|
37
34
|
enumValues: undefined;
|
|
38
|
-
baseColumn: never;
|
|
39
35
|
identity: undefined;
|
|
40
36
|
generated: undefined;
|
|
41
|
-
}
|
|
42
|
-
monitor: import("drizzle-orm/pg-core").
|
|
43
|
-
name:
|
|
37
|
+
}>;
|
|
38
|
+
monitor: import("drizzle-orm/pg-core").PgBuildColumn<"observations", import("drizzle-orm/pg-core").SetNotNull<import("drizzle-orm/pg-core").PgTextBuilder<[string, ...string[]]>>, {
|
|
39
|
+
name: string;
|
|
44
40
|
tableName: "observations";
|
|
45
41
|
dataType: "string";
|
|
46
|
-
columnType: "PgText";
|
|
47
42
|
data: string;
|
|
48
43
|
driverParam: string;
|
|
49
44
|
notNull: true;
|
|
@@ -51,16 +46,14 @@ export declare const observations: import("drizzle-orm/pg-core").PgTableWithColu
|
|
|
51
46
|
isPrimaryKey: false;
|
|
52
47
|
isAutoincrement: false;
|
|
53
48
|
hasRuntimeDefault: false;
|
|
54
|
-
enumValues:
|
|
55
|
-
baseColumn: never;
|
|
49
|
+
enumValues: undefined;
|
|
56
50
|
identity: undefined;
|
|
57
51
|
generated: undefined;
|
|
58
|
-
}
|
|
59
|
-
success: import("drizzle-orm/pg-core").
|
|
60
|
-
name:
|
|
52
|
+
}>;
|
|
53
|
+
success: import("drizzle-orm/pg-core").PgBuildColumn<"observations", import("drizzle-orm/pg-core").SetNotNull<import("drizzle-orm/pg-core").PgBooleanBuilder>, {
|
|
54
|
+
name: string;
|
|
61
55
|
tableName: "observations";
|
|
62
56
|
dataType: "boolean";
|
|
63
|
-
columnType: "PgBoolean";
|
|
64
57
|
data: boolean;
|
|
65
58
|
driverParam: boolean;
|
|
66
59
|
notNull: true;
|
|
@@ -69,15 +62,13 @@ export declare const observations: import("drizzle-orm/pg-core").PgTableWithColu
|
|
|
69
62
|
isAutoincrement: false;
|
|
70
63
|
hasRuntimeDefault: false;
|
|
71
64
|
enumValues: undefined;
|
|
72
|
-
baseColumn: never;
|
|
73
65
|
identity: undefined;
|
|
74
66
|
generated: undefined;
|
|
75
|
-
}
|
|
76
|
-
responseTimeMs: import("drizzle-orm/pg-core").
|
|
77
|
-
name:
|
|
67
|
+
}>;
|
|
68
|
+
responseTimeMs: import("drizzle-orm/pg-core").PgBuildColumn<"observations", import("drizzle-orm/pg-core").SetNotNull<import("drizzle-orm/pg-core").PgIntegerBuilder>, {
|
|
69
|
+
name: string;
|
|
78
70
|
tableName: "observations";
|
|
79
|
-
dataType: "number";
|
|
80
|
-
columnType: "PgInteger";
|
|
71
|
+
dataType: "number int32";
|
|
81
72
|
data: number;
|
|
82
73
|
driverParam: string | number;
|
|
83
74
|
notNull: true;
|
|
@@ -86,15 +77,13 @@ export declare const observations: import("drizzle-orm/pg-core").PgTableWithColu
|
|
|
86
77
|
isAutoincrement: false;
|
|
87
78
|
hasRuntimeDefault: false;
|
|
88
79
|
enumValues: undefined;
|
|
89
|
-
baseColumn: never;
|
|
90
80
|
identity: undefined;
|
|
91
81
|
generated: undefined;
|
|
92
|
-
}
|
|
93
|
-
errorMessage: import("drizzle-orm/pg-core").
|
|
94
|
-
name:
|
|
82
|
+
}>;
|
|
83
|
+
errorMessage: import("drizzle-orm/pg-core").PgBuildColumn<"observations", import("drizzle-orm/pg-core").PgTextBuilder<[string, ...string[]]>, {
|
|
84
|
+
name: string;
|
|
95
85
|
tableName: "observations";
|
|
96
86
|
dataType: "string";
|
|
97
|
-
columnType: "PgText";
|
|
98
87
|
data: string;
|
|
99
88
|
driverParam: string;
|
|
100
89
|
notNull: false;
|
|
@@ -102,11 +91,10 @@ export declare const observations: import("drizzle-orm/pg-core").PgTableWithColu
|
|
|
102
91
|
isPrimaryKey: false;
|
|
103
92
|
isAutoincrement: false;
|
|
104
93
|
hasRuntimeDefault: false;
|
|
105
|
-
enumValues:
|
|
106
|
-
baseColumn: never;
|
|
94
|
+
enumValues: undefined;
|
|
107
95
|
identity: undefined;
|
|
108
96
|
generated: undefined;
|
|
109
|
-
}
|
|
97
|
+
}>;
|
|
110
98
|
};
|
|
111
99
|
dialect: "pg";
|
|
112
100
|
}>;
|
|
@@ -118,11 +106,10 @@ export declare const refreshLatestObservationsViewSql: import("drizzle-orm").SQL
|
|
|
118
106
|
* Materialized view for the latest observation per monitor.
|
|
119
107
|
*/
|
|
120
108
|
export declare const latestObservations: import("drizzle-orm/pg-core").PgMaterializedViewWithSelection<"latest_observations", false, {
|
|
121
|
-
id: import("drizzle-orm/pg-core").
|
|
122
|
-
name:
|
|
109
|
+
id: import("drizzle-orm/pg-core").PgBuildColumn<"latest_observations", import("drizzle-orm/pg-core").SetNotNull<import("drizzle-orm/pg-core").PgUUIDBuilder>, {
|
|
110
|
+
name: string;
|
|
123
111
|
tableName: "latest_observations";
|
|
124
|
-
dataType: "string";
|
|
125
|
-
columnType: "PgUUID";
|
|
112
|
+
dataType: "string uuid";
|
|
126
113
|
data: string;
|
|
127
114
|
driverParam: string;
|
|
128
115
|
notNull: true;
|
|
@@ -131,15 +118,13 @@ export declare const latestObservations: import("drizzle-orm/pg-core").PgMateria
|
|
|
131
118
|
isAutoincrement: false;
|
|
132
119
|
hasRuntimeDefault: false;
|
|
133
120
|
enumValues: undefined;
|
|
134
|
-
baseColumn: never;
|
|
135
121
|
identity: undefined;
|
|
136
122
|
generated: undefined;
|
|
137
|
-
}
|
|
138
|
-
monitor: import("drizzle-orm/pg-core").
|
|
139
|
-
name:
|
|
123
|
+
}>;
|
|
124
|
+
monitor: import("drizzle-orm/pg-core").PgBuildColumn<"latest_observations", import("drizzle-orm/pg-core").SetNotNull<import("drizzle-orm/pg-core").PgTextBuilder<[string, ...string[]]>>, {
|
|
125
|
+
name: string;
|
|
140
126
|
tableName: "latest_observations";
|
|
141
127
|
dataType: "string";
|
|
142
|
-
columnType: "PgText";
|
|
143
128
|
data: string;
|
|
144
129
|
driverParam: string;
|
|
145
130
|
notNull: true;
|
|
@@ -147,16 +132,14 @@ export declare const latestObservations: import("drizzle-orm/pg-core").PgMateria
|
|
|
147
132
|
isPrimaryKey: false;
|
|
148
133
|
isAutoincrement: false;
|
|
149
134
|
hasRuntimeDefault: false;
|
|
150
|
-
enumValues:
|
|
151
|
-
baseColumn: never;
|
|
135
|
+
enumValues: undefined;
|
|
152
136
|
identity: undefined;
|
|
153
137
|
generated: undefined;
|
|
154
|
-
}
|
|
155
|
-
observedAt: import("drizzle-orm/pg-core").
|
|
156
|
-
name:
|
|
138
|
+
}>;
|
|
139
|
+
observedAt: import("drizzle-orm/pg-core").PgBuildColumn<"latest_observations", import("drizzle-orm/pg-core").SetNotNull<import("drizzle-orm/pg-core").PgTimestampBuilder>, {
|
|
140
|
+
name: string;
|
|
157
141
|
tableName: "latest_observations";
|
|
158
|
-
dataType: "date";
|
|
159
|
-
columnType: "PgTimestamp";
|
|
142
|
+
dataType: "object date";
|
|
160
143
|
data: Date;
|
|
161
144
|
driverParam: string;
|
|
162
145
|
notNull: true;
|
|
@@ -165,15 +148,13 @@ export declare const latestObservations: import("drizzle-orm/pg-core").PgMateria
|
|
|
165
148
|
isAutoincrement: false;
|
|
166
149
|
hasRuntimeDefault: false;
|
|
167
150
|
enumValues: undefined;
|
|
168
|
-
baseColumn: never;
|
|
169
151
|
identity: undefined;
|
|
170
152
|
generated: undefined;
|
|
171
|
-
}
|
|
172
|
-
success: import("drizzle-orm/pg-core").
|
|
173
|
-
name:
|
|
153
|
+
}>;
|
|
154
|
+
success: import("drizzle-orm/pg-core").PgBuildColumn<"latest_observations", import("drizzle-orm/pg-core").SetNotNull<import("drizzle-orm/pg-core").PgBooleanBuilder>, {
|
|
155
|
+
name: string;
|
|
174
156
|
tableName: "latest_observations";
|
|
175
157
|
dataType: "boolean";
|
|
176
|
-
columnType: "PgBoolean";
|
|
177
158
|
data: boolean;
|
|
178
159
|
driverParam: boolean;
|
|
179
160
|
notNull: true;
|
|
@@ -182,15 +163,13 @@ export declare const latestObservations: import("drizzle-orm/pg-core").PgMateria
|
|
|
182
163
|
isAutoincrement: false;
|
|
183
164
|
hasRuntimeDefault: false;
|
|
184
165
|
enumValues: undefined;
|
|
185
|
-
baseColumn: never;
|
|
186
166
|
identity: undefined;
|
|
187
167
|
generated: undefined;
|
|
188
|
-
}
|
|
189
|
-
responseTimeMs: import("drizzle-orm/pg-core").
|
|
190
|
-
name:
|
|
168
|
+
}>;
|
|
169
|
+
responseTimeMs: import("drizzle-orm/pg-core").PgBuildColumn<"latest_observations", import("drizzle-orm/pg-core").SetNotNull<import("drizzle-orm/pg-core").PgIntegerBuilder>, {
|
|
170
|
+
name: string;
|
|
191
171
|
tableName: "latest_observations";
|
|
192
|
-
dataType: "number";
|
|
193
|
-
columnType: "PgInteger";
|
|
172
|
+
dataType: "number int32";
|
|
194
173
|
data: number;
|
|
195
174
|
driverParam: string | number;
|
|
196
175
|
notNull: true;
|
|
@@ -199,15 +178,13 @@ export declare const latestObservations: import("drizzle-orm/pg-core").PgMateria
|
|
|
199
178
|
isAutoincrement: false;
|
|
200
179
|
hasRuntimeDefault: false;
|
|
201
180
|
enumValues: undefined;
|
|
202
|
-
baseColumn: never;
|
|
203
181
|
identity: undefined;
|
|
204
182
|
generated: undefined;
|
|
205
|
-
}
|
|
206
|
-
errorMessage: import("drizzle-orm/pg-core").
|
|
207
|
-
name:
|
|
183
|
+
}>;
|
|
184
|
+
errorMessage: import("drizzle-orm/pg-core").PgBuildColumn<"latest_observations", import("drizzle-orm/pg-core").PgTextBuilder<[string, ...string[]]>, {
|
|
185
|
+
name: string;
|
|
208
186
|
tableName: "latest_observations";
|
|
209
187
|
dataType: "string";
|
|
210
|
-
columnType: "PgText";
|
|
211
188
|
data: string;
|
|
212
189
|
driverParam: string;
|
|
213
190
|
notNull: false;
|
|
@@ -215,10 +192,9 @@ export declare const latestObservations: import("drizzle-orm/pg-core").PgMateria
|
|
|
215
192
|
isPrimaryKey: false;
|
|
216
193
|
isAutoincrement: false;
|
|
217
194
|
hasRuntimeDefault: false;
|
|
218
|
-
enumValues:
|
|
219
|
-
baseColumn: never;
|
|
195
|
+
enumValues: undefined;
|
|
220
196
|
identity: undefined;
|
|
221
197
|
generated: undefined;
|
|
222
|
-
}
|
|
198
|
+
}>;
|
|
223
199
|
}>;
|
|
224
200
|
//# sourceMappingURL=schema.d.ts.map
|
package/dist/schema.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"AAqBA;;GAEG;AACH,eAAO,MAAM,YAAY
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"AAqBA;;GAEG;AACH,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAexB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,gCAAgC,oCAE5C,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAO7B,CAAC"}
|
package/dist/store.d.ts
CHANGED
|
@@ -3,11 +3,15 @@ import type { ObservationStore, Observation } from './types.js';
|
|
|
3
3
|
* PostgreSQL implementation of the ObservationStore interface.
|
|
4
4
|
*/
|
|
5
5
|
export declare class PostgresObservationStore implements ObservationStore {
|
|
6
|
-
private client;
|
|
7
6
|
private db;
|
|
8
7
|
private constructor();
|
|
9
8
|
/**
|
|
10
9
|
* Create a new store and initialize the database schema.
|
|
10
|
+
*
|
|
11
|
+
* Uses drizzle-kit's generateMigration to create schema from code.
|
|
12
|
+
* This approach works around a bug in pushSchema where the execute()
|
|
13
|
+
* return format doesn't match what drizzle-kit expects.
|
|
14
|
+
* See: https://github.com/drizzle-team/drizzle-orm/issues/5293
|
|
11
15
|
*/
|
|
12
16
|
static create(connectionString: string): Promise<PostgresObservationStore>;
|
|
13
17
|
close(): Promise<void>;
|
package/dist/store.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAKhE;;GAEG;AACH,qBAAa,wBAAyB,YAAW,gBAAgB;IAC/D,OAAO,CAAC,
|
|
1
|
+
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAKhE;;GAEG;AACH,qBAAa,wBAAyB,YAAW,gBAAgB;IAC/D,OAAO,CAAC,EAAE,CAAqB;IAE/B,OAAO;IAIP;;;;;;;OAOG;WACU,MAAM,CACjB,gBAAgB,EAAE,MAAM,GACvB,OAAO,CAAC,wBAAwB,CAAC;IAyC9B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAKtB,SAAS,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IAK9C,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAS5C,KAAK,CAAC,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,GAAG,OAAO,CAAC,WAAW,CAAC;IAQjE,6BAA6B,IAAI,OAAO,CAAC,IAAI,CAAC;CAGrD"}
|
package/dist/store.js
CHANGED
|
@@ -1,30 +1,63 @@
|
|
|
1
1
|
import { drizzle } from 'drizzle-orm/postgres-js';
|
|
2
|
-
import { eq } from 'drizzle-orm';
|
|
3
|
-
import postgres from 'postgres';
|
|
2
|
+
import { eq, sql } from 'drizzle-orm';
|
|
4
3
|
import * as schema from './schema.js';
|
|
5
4
|
const { observations, latestObservations, refreshLatestObservationsViewSql } = schema;
|
|
6
5
|
/**
|
|
7
6
|
* PostgreSQL implementation of the ObservationStore interface.
|
|
8
7
|
*/
|
|
9
8
|
export class PostgresObservationStore {
|
|
10
|
-
client;
|
|
11
9
|
db;
|
|
12
10
|
constructor(connectionString) {
|
|
13
|
-
this.
|
|
14
|
-
this.db = drizzle(this.client);
|
|
11
|
+
this.db = drizzle(connectionString);
|
|
15
12
|
}
|
|
16
13
|
/**
|
|
17
14
|
* Create a new store and initialize the database schema.
|
|
15
|
+
*
|
|
16
|
+
* Uses drizzle-kit's generateMigration to create schema from code.
|
|
17
|
+
* This approach works around a bug in pushSchema where the execute()
|
|
18
|
+
* return format doesn't match what drizzle-kit expects.
|
|
19
|
+
* See: https://github.com/drizzle-team/drizzle-orm/issues/5293
|
|
18
20
|
*/
|
|
19
21
|
static async create(connectionString) {
|
|
20
22
|
const store = new PostgresObservationStore(connectionString);
|
|
21
|
-
const {
|
|
22
|
-
|
|
23
|
-
await
|
|
23
|
+
const { generateDrizzleJson, generateMigration } = await import('drizzle-kit/api-postgres');
|
|
24
|
+
// Generate migration from empty state to our schema
|
|
25
|
+
const empty = await generateDrizzleJson({});
|
|
26
|
+
const target = await generateDrizzleJson(schema, empty.id);
|
|
27
|
+
const migration = await generateMigration(empty, target);
|
|
28
|
+
// Execute each statement, ignoring "already exists" errors for idempotency
|
|
29
|
+
for (const statement of migration) {
|
|
30
|
+
try {
|
|
31
|
+
await store.db.execute(sql.raw(statement));
|
|
32
|
+
}
|
|
33
|
+
catch (error) {
|
|
34
|
+
// Check both direct error and cause for "already exists"
|
|
35
|
+
const isAlreadyExists = (e) => {
|
|
36
|
+
if (!(e instanceof Error))
|
|
37
|
+
return false;
|
|
38
|
+
if (e.message.includes('already exists'))
|
|
39
|
+
return true;
|
|
40
|
+
if ('cause' in e)
|
|
41
|
+
return isAlreadyExists(e.cause);
|
|
42
|
+
return false;
|
|
43
|
+
};
|
|
44
|
+
if (!isAlreadyExists(error)) {
|
|
45
|
+
throw error;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
// Create unique index on materialized view for CONCURRENTLY refresh
|
|
50
|
+
try {
|
|
51
|
+
await store.db.execute(sql `CREATE UNIQUE INDEX latest_observations_monitor_idx ON latest_observations (monitor)`);
|
|
52
|
+
}
|
|
53
|
+
catch {
|
|
54
|
+
// Index may already exist
|
|
55
|
+
}
|
|
24
56
|
return store;
|
|
25
57
|
}
|
|
26
58
|
async close() {
|
|
27
|
-
|
|
59
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
60
|
+
await this.db.$client.end();
|
|
28
61
|
}
|
|
29
62
|
async getLatest() {
|
|
30
63
|
const rows = await this.db.select().from(latestObservations);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lde/sparql-monitor",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.2",
|
|
4
4
|
"description": "Monitor SPARQL endpoints with periodic checks",
|
|
5
5
|
"repository": {
|
|
6
6
|
"url": "https://github.com/ldengine/lde"
|
|
@@ -29,13 +29,13 @@
|
|
|
29
29
|
"c12": "^3.0.2",
|
|
30
30
|
"commander": "^13.1.0",
|
|
31
31
|
"cron": "^4.1.0",
|
|
32
|
-
"drizzle-kit": "
|
|
33
|
-
"drizzle-orm": "
|
|
32
|
+
"drizzle-kit": "1.0.0-beta.12-a5629fb",
|
|
33
|
+
"drizzle-orm": "1.0.0-beta.12-a5629fb",
|
|
34
34
|
"fetch-sparql-endpoint": "^6.0.0",
|
|
35
35
|
"postgres": "^3.4.5",
|
|
36
36
|
"tslib": "^2.3.0"
|
|
37
37
|
},
|
|
38
38
|
"devDependencies": {
|
|
39
|
-
"
|
|
39
|
+
"@testcontainers/postgresql": "^11.11.0"
|
|
40
40
|
}
|
|
41
41
|
}
|