@dbos-inc/prisma-datasource 4.4.4-preview → 4.4.5-preview
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/index.d.ts +3 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +20 -18
- package/dist/index.js.map +1 -1
- package/index.ts +30 -16
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -16,9 +16,9 @@ export declare class PrismaDataSource<PrismaClient> implements DBOSDataSource<Tr
|
|
|
16
16
|
#private;
|
|
17
17
|
readonly name: string;
|
|
18
18
|
get client(): PrismaClient;
|
|
19
|
-
static initializeDBOSSchema(prisma: PrismaLike): Promise<void>;
|
|
20
|
-
static uninitializeDBOSSchema(prisma: PrismaLike): Promise<void>;
|
|
21
|
-
constructor(name: string, prismaAccess: PrismaLike | (() => PrismaLike));
|
|
19
|
+
static initializeDBOSSchema(prisma: PrismaLike, schemaName?: string): Promise<void>;
|
|
20
|
+
static uninitializeDBOSSchema(prisma: PrismaLike, schemaName?: string): Promise<void>;
|
|
21
|
+
constructor(name: string, prismaAccess: PrismaLike | (() => PrismaLike), schemaName?: string);
|
|
22
22
|
runTransaction<T>(func: () => Promise<T>, config?: TransactionConfig): Promise<T>;
|
|
23
23
|
registerTransaction<This, Args extends unknown[], Return>(func: (this: This, ...args: Args) => Promise<Return>, config?: TransactionConfig & FunctionName): (this: This, ...args: Args) => Promise<Return>;
|
|
24
24
|
transaction(config?: TransactionConfig): <This, Args extends unknown[], Return>(target: object, propertyKey: PropertyKey, descriptor: TypedPropertyDescriptor<(this: This, ...args: Args) => Promise<Return>>) => TypedPropertyDescriptor<(this: This, ...args: Args) => Promise<Return>>;
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmC,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACnF,OAAO,EAML,cAAc,EAMf,MAAM,+BAA+B,CAAC;AAIvC,KAAK,UAAU,GAAG;IAChB,QAAQ,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9B,WAAW,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACjC,eAAe,CAAC,CAAC,GAAG,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IAC/E,iBAAiB,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CAC1E,CAAC;AAaF,KAAK,yBAAyB,GAAG,iBAAiB,GAAG,eAAe,GAAG,gBAAgB,GAAG,cAAc,CAAC;AAEzG,MAAM,MAAM,iBAAiB,GAAG;IAC9B,cAAc,CAAC,EAAE,yBAAyB,CAAC;IAC3C,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmC,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACnF,OAAO,EAML,cAAc,EAMf,MAAM,+BAA+B,CAAC;AAIvC,KAAK,UAAU,GAAG;IAChB,QAAQ,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9B,WAAW,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACjC,eAAe,CAAC,CAAC,GAAG,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IAC/E,iBAAiB,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CAC1E,CAAC;AAaF,KAAK,yBAAyB,GAAG,iBAAiB,GAAG,eAAe,GAAG,gBAAgB,GAAG,cAAc,CAAC;AAEzG,MAAM,MAAM,iBAAiB,GAAG;IAC9B,cAAc,CAAC,EAAE,yBAAyB,CAAC;IAC3C,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;AAsMF,qBAAa,gBAAgB,CAAC,YAAY,CAAE,YAAW,cAAc,CAAC,iBAAiB,CAAC;;IA8BpF,QAAQ,CAAC,IAAI,EAAE,MAAM;IAjBvB,IAAI,MAAM,IAAI,YAAY,CAEzB;WAEY,oBAAoB,CAAC,MAAM,EAAE,UAAU,EAAE,UAAU,GAAE,MAAe;WAKpE,sBAAsB,CAAC,MAAM,EAAE,UAAU,EAAE,UAAU,GAAE,MAAe;gBAQxE,IAAI,EAAE,MAAM,EACrB,YAAY,EAAE,UAAU,GAAG,CAAC,MAAM,UAAU,CAAC,EAC7C,UAAU,GAAE,MAAe;IAMvB,cAAc,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE,iBAAiB;IAI1E,mBAAmB,CAAC,IAAI,EAAE,IAAI,SAAS,OAAO,EAAE,EAAE,MAAM,EACtD,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC,MAAM,CAAC,EACpD,MAAM,CAAC,EAAE,iBAAiB,GAAG,YAAY,GACxC,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC,MAAM,CAAC;IAIjD,WAAW,CAAC,MAAM,CAAC,EAAE,iBAAiB,kDAI1B,MAAM,eACD,WAAW,cACZ,wBAAwB,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI,EAAE,IAAI,KAAK,QAAQ,MAAM,CAAC,CAAC,oCAAxC,IAAI,WAAW,IAAI,KAAK,QAAQ,MAAM,CAAC;CAevF"}
|
package/dist/index.js
CHANGED
|
@@ -10,9 +10,11 @@ class PrismaTransactionHandler {
|
|
|
10
10
|
name;
|
|
11
11
|
prismaAccess;
|
|
12
12
|
dsType = 'PrismaDataSource';
|
|
13
|
-
|
|
13
|
+
schemaName;
|
|
14
|
+
constructor(name, prismaAccess, schemaName = 'dbos') {
|
|
14
15
|
this.name = name;
|
|
15
16
|
this.prismaAccess = prismaAccess;
|
|
17
|
+
this.schemaName = schemaName;
|
|
16
18
|
}
|
|
17
19
|
get #prismaDB() {
|
|
18
20
|
if (!this.prismaAccess) {
|
|
@@ -30,7 +32,7 @@ class PrismaTransactionHandler {
|
|
|
30
32
|
async initialize() {
|
|
31
33
|
let installed = false;
|
|
32
34
|
try {
|
|
33
|
-
const res = await this.#prismaDB.$queryRawUnsafe(datasource_1.checkSchemaInstallationPG);
|
|
35
|
+
const res = await this.#prismaDB.$queryRawUnsafe((0, datasource_1.checkSchemaInstallationPG)(this.schemaName));
|
|
34
36
|
installed = !!res[0]?.schema_exists && !!res[0]?.table_exists;
|
|
35
37
|
}
|
|
36
38
|
catch (e) {
|
|
@@ -39,11 +41,11 @@ class PrismaTransactionHandler {
|
|
|
39
41
|
// Install
|
|
40
42
|
if (!installed) {
|
|
41
43
|
try {
|
|
42
|
-
await this.#prismaDB.$executeRawUnsafe(datasource_1.createTransactionCompletionSchemaPG);
|
|
43
|
-
await this.#prismaDB.$executeRawUnsafe(datasource_1.createTransactionCompletionTablePG);
|
|
44
|
+
await this.#prismaDB.$executeRawUnsafe((0, datasource_1.createTransactionCompletionSchemaPG)(this.schemaName));
|
|
45
|
+
await this.#prismaDB.$executeRawUnsafe((0, datasource_1.createTransactionCompletionTablePG)(this.schemaName));
|
|
44
46
|
}
|
|
45
47
|
catch (err) {
|
|
46
|
-
throw new Error(`In initialization of 'PrismaDataSource' ${this.name}: The '
|
|
48
|
+
throw new Error(`In initialization of 'PrismaDataSource' ${this.name}: The '${this.schemaName}.transaction_completion' table does not exist, and could not be created. This should be added to your database migrations.
|
|
47
49
|
See: https://docs.dbos.dev/typescript/tutorials/transaction-tutorial#installing-the-dbos-schema`);
|
|
48
50
|
}
|
|
49
51
|
}
|
|
@@ -52,7 +54,7 @@ class PrismaTransactionHandler {
|
|
|
52
54
|
return Promise.resolve();
|
|
53
55
|
}
|
|
54
56
|
async #checkExecution(client, workflowID, stepID) {
|
|
55
|
-
const result = await client.$queryRawUnsafe(`SELECT output, error FROM
|
|
57
|
+
const result = await client.$queryRawUnsafe(`SELECT output, error FROM "${this.schemaName}".transaction_completion
|
|
56
58
|
WHERE workflow_id = $1 AND function_num = $2`, workflowID, stepID);
|
|
57
59
|
if (result?.[0] === undefined) {
|
|
58
60
|
return undefined;
|
|
@@ -62,7 +64,7 @@ class PrismaTransactionHandler {
|
|
|
62
64
|
}
|
|
63
65
|
async #recordError(workflowID, stepID, error) {
|
|
64
66
|
try {
|
|
65
|
-
await this.#prismaDB.$executeRawUnsafe(`INSERT INTO
|
|
67
|
+
await this.#prismaDB.$executeRawUnsafe(`INSERT INTO "${this.schemaName}".transaction_completion (workflow_id, function_num, error)
|
|
66
68
|
VALUES ($1, $2, $3)`, workflowID, stepID, error);
|
|
67
69
|
}
|
|
68
70
|
catch (error) {
|
|
@@ -74,9 +76,9 @@ class PrismaTransactionHandler {
|
|
|
74
76
|
}
|
|
75
77
|
}
|
|
76
78
|
}
|
|
77
|
-
static async #recordOutput(client, workflowID, stepID, output) {
|
|
79
|
+
static async #recordOutput(client, workflowID, stepID, output, schemaName) {
|
|
78
80
|
try {
|
|
79
|
-
await client.$executeRawUnsafe(`INSERT INTO
|
|
81
|
+
await client.$executeRawUnsafe(`INSERT INTO "${schemaName}".transaction_completion (workflow_id, function_num, output)
|
|
80
82
|
VALUES ($1, $2, $3)`, workflowID, stepID, output);
|
|
81
83
|
}
|
|
82
84
|
catch (error) {
|
|
@@ -118,7 +120,7 @@ class PrismaTransactionHandler {
|
|
|
118
120
|
});
|
|
119
121
|
// save the output of read/write transactions
|
|
120
122
|
if (saveResults) {
|
|
121
|
-
await PrismaTransactionHandler.#recordOutput(client, workflowID, stepID, superjson_1.SuperJSON.stringify(result));
|
|
123
|
+
await PrismaTransactionHandler.#recordOutput(client, workflowID, stepID, superjson_1.SuperJSON.stringify(result), this.schemaName);
|
|
122
124
|
}
|
|
123
125
|
return result;
|
|
124
126
|
}, { isolationLevel: config?.isolationLevel }));
|
|
@@ -159,18 +161,18 @@ class PrismaDataSource {
|
|
|
159
161
|
get client() {
|
|
160
162
|
return PrismaDataSource.#getClient(this.#provider);
|
|
161
163
|
}
|
|
162
|
-
static async initializeDBOSSchema(prisma) {
|
|
163
|
-
await prisma.$queryRawUnsafe(datasource_1.createTransactionCompletionSchemaPG);
|
|
164
|
-
await prisma.$queryRawUnsafe(datasource_1.createTransactionCompletionTablePG);
|
|
164
|
+
static async initializeDBOSSchema(prisma, schemaName = 'dbos') {
|
|
165
|
+
await prisma.$queryRawUnsafe((0, datasource_1.createTransactionCompletionSchemaPG)(schemaName));
|
|
166
|
+
await prisma.$queryRawUnsafe((0, datasource_1.createTransactionCompletionTablePG)(schemaName));
|
|
165
167
|
}
|
|
166
|
-
static async uninitializeDBOSSchema(prisma) {
|
|
167
|
-
await prisma.$executeRawUnsafe(
|
|
168
|
-
await prisma.$executeRawUnsafe(
|
|
168
|
+
static async uninitializeDBOSSchema(prisma, schemaName = 'dbos') {
|
|
169
|
+
await prisma.$executeRawUnsafe(`DROP TABLE IF EXISTS "${schemaName}".transaction_completion;`);
|
|
170
|
+
await prisma.$executeRawUnsafe(`DROP SCHEMA IF EXISTS "${schemaName}" CASCADE;`);
|
|
169
171
|
}
|
|
170
172
|
#provider;
|
|
171
|
-
constructor(name, prismaAccess) {
|
|
173
|
+
constructor(name, prismaAccess, schemaName = 'dbos') {
|
|
172
174
|
this.name = name;
|
|
173
|
-
this.#provider = new PrismaTransactionHandler(name, prismaAccess);
|
|
175
|
+
this.#provider = new PrismaTransactionHandler(name, prismaAccess, schemaName);
|
|
174
176
|
(0, datasource_1.registerDataSource)(this.#provider);
|
|
175
177
|
}
|
|
176
178
|
async runTransaction(func, config) {
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":";;;AAAA,iDAAmF;AACnF,8DAYuC;AACvC,6CAAgD;AAChD,yCAAsC;AA4BtC,MAAM,aAAa,GAAG,IAAI,+BAAiB,EAA2B,CAAC;AAEvE,MAAM,wBAAwB;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"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"}
|
package/index.ts
CHANGED
|
@@ -45,11 +45,15 @@ const asyncLocalCtx = new AsyncLocalStorage<PrismaDataSourceContext>();
|
|
|
45
45
|
|
|
46
46
|
class PrismaTransactionHandler implements DataSourceTransactionHandler {
|
|
47
47
|
readonly dsType = 'PrismaDataSource';
|
|
48
|
+
readonly schemaName: string;
|
|
48
49
|
|
|
49
50
|
constructor(
|
|
50
51
|
readonly name: string,
|
|
51
52
|
private readonly prismaAccess: PrismaLike | (() => PrismaLike),
|
|
52
|
-
|
|
53
|
+
schemaName: string = 'dbos',
|
|
54
|
+
) {
|
|
55
|
+
this.schemaName = schemaName;
|
|
56
|
+
}
|
|
53
57
|
|
|
54
58
|
get #prismaDB() {
|
|
55
59
|
if (!this.prismaAccess) {
|
|
@@ -68,7 +72,9 @@ class PrismaTransactionHandler implements DataSourceTransactionHandler {
|
|
|
68
72
|
async initialize(): Promise<void> {
|
|
69
73
|
let installed = false;
|
|
70
74
|
try {
|
|
71
|
-
const res = await this.#prismaDB.$queryRawUnsafe<CheckSchemaInstallationReturn[]>(
|
|
75
|
+
const res = await this.#prismaDB.$queryRawUnsafe<CheckSchemaInstallationReturn[]>(
|
|
76
|
+
checkSchemaInstallationPG(this.schemaName),
|
|
77
|
+
);
|
|
72
78
|
installed = !!res[0]?.schema_exists && !!res[0]?.table_exists;
|
|
73
79
|
} catch (e) {
|
|
74
80
|
throw new Error(
|
|
@@ -79,11 +85,11 @@ class PrismaTransactionHandler implements DataSourceTransactionHandler {
|
|
|
79
85
|
// Install
|
|
80
86
|
if (!installed) {
|
|
81
87
|
try {
|
|
82
|
-
await this.#prismaDB.$executeRawUnsafe(createTransactionCompletionSchemaPG);
|
|
83
|
-
await this.#prismaDB.$executeRawUnsafe(createTransactionCompletionTablePG);
|
|
88
|
+
await this.#prismaDB.$executeRawUnsafe(createTransactionCompletionSchemaPG(this.schemaName));
|
|
89
|
+
await this.#prismaDB.$executeRawUnsafe(createTransactionCompletionTablePG(this.schemaName));
|
|
84
90
|
} catch (err) {
|
|
85
91
|
throw new Error(
|
|
86
|
-
`In initialization of 'PrismaDataSource' ${this.name}: The '
|
|
92
|
+
`In initialization of 'PrismaDataSource' ${this.name}: The '${this.schemaName}.transaction_completion' table does not exist, and could not be created. This should be added to your database migrations.
|
|
87
93
|
See: https://docs.dbos.dev/typescript/tutorials/transaction-tutorial#installing-the-dbos-schema`,
|
|
88
94
|
);
|
|
89
95
|
}
|
|
@@ -101,7 +107,7 @@ class PrismaTransactionHandler implements DataSourceTransactionHandler {
|
|
|
101
107
|
): Promise<{ output: string | null } | { error: string } | undefined> {
|
|
102
108
|
type Result = { output: string | null; error: string | null };
|
|
103
109
|
const result = await client.$queryRawUnsafe<Result[]>(
|
|
104
|
-
`SELECT output, error FROM
|
|
110
|
+
`SELECT output, error FROM "${this.schemaName}".transaction_completion
|
|
105
111
|
WHERE workflow_id = $1 AND function_num = $2`,
|
|
106
112
|
workflowID,
|
|
107
113
|
stepID,
|
|
@@ -116,7 +122,7 @@ class PrismaTransactionHandler implements DataSourceTransactionHandler {
|
|
|
116
122
|
async #recordError(workflowID: string, stepID: number, error: string): Promise<void> {
|
|
117
123
|
try {
|
|
118
124
|
await this.#prismaDB.$executeRawUnsafe(
|
|
119
|
-
`INSERT INTO
|
|
125
|
+
`INSERT INTO "${this.schemaName}".transaction_completion (workflow_id, function_num, error)
|
|
120
126
|
VALUES ($1, $2, $3)`,
|
|
121
127
|
workflowID,
|
|
122
128
|
stepID,
|
|
@@ -136,10 +142,11 @@ class PrismaTransactionHandler implements DataSourceTransactionHandler {
|
|
|
136
142
|
workflowID: string,
|
|
137
143
|
stepID: number,
|
|
138
144
|
output: string | null,
|
|
145
|
+
schemaName: string,
|
|
139
146
|
): Promise<void> {
|
|
140
147
|
try {
|
|
141
148
|
await client.$executeRawUnsafe(
|
|
142
|
-
`INSERT INTO
|
|
149
|
+
`INSERT INTO "${schemaName}".transaction_completion (workflow_id, function_num, output)
|
|
143
150
|
VALUES ($1, $2, $3)`,
|
|
144
151
|
workflowID,
|
|
145
152
|
stepID,
|
|
@@ -196,7 +203,13 @@ class PrismaTransactionHandler implements DataSourceTransactionHandler {
|
|
|
196
203
|
|
|
197
204
|
// save the output of read/write transactions
|
|
198
205
|
if (saveResults) {
|
|
199
|
-
await PrismaTransactionHandler.#recordOutput(
|
|
206
|
+
await PrismaTransactionHandler.#recordOutput(
|
|
207
|
+
client,
|
|
208
|
+
workflowID,
|
|
209
|
+
stepID!,
|
|
210
|
+
SuperJSON.stringify(result),
|
|
211
|
+
this.schemaName,
|
|
212
|
+
);
|
|
200
213
|
}
|
|
201
214
|
|
|
202
215
|
return result;
|
|
@@ -241,14 +254,14 @@ export class PrismaDataSource<PrismaClient> implements DBOSDataSource<Transactio
|
|
|
241
254
|
return PrismaDataSource.#getClient(this.#provider) as PrismaClient;
|
|
242
255
|
}
|
|
243
256
|
|
|
244
|
-
static async initializeDBOSSchema(prisma: PrismaLike) {
|
|
245
|
-
await prisma.$queryRawUnsafe(createTransactionCompletionSchemaPG);
|
|
246
|
-
await prisma.$queryRawUnsafe(createTransactionCompletionTablePG);
|
|
257
|
+
static async initializeDBOSSchema(prisma: PrismaLike, schemaName: string = 'dbos') {
|
|
258
|
+
await prisma.$queryRawUnsafe(createTransactionCompletionSchemaPG(schemaName));
|
|
259
|
+
await prisma.$queryRawUnsafe(createTransactionCompletionTablePG(schemaName));
|
|
247
260
|
}
|
|
248
261
|
|
|
249
|
-
static async uninitializeDBOSSchema(prisma: PrismaLike) {
|
|
250
|
-
await prisma.$executeRawUnsafe(
|
|
251
|
-
await prisma.$executeRawUnsafe(
|
|
262
|
+
static async uninitializeDBOSSchema(prisma: PrismaLike, schemaName: string = 'dbos') {
|
|
263
|
+
await prisma.$executeRawUnsafe(`DROP TABLE IF EXISTS "${schemaName}".transaction_completion;`);
|
|
264
|
+
await prisma.$executeRawUnsafe(`DROP SCHEMA IF EXISTS "${schemaName}" CASCADE;`);
|
|
252
265
|
}
|
|
253
266
|
|
|
254
267
|
#provider: PrismaTransactionHandler;
|
|
@@ -256,8 +269,9 @@ export class PrismaDataSource<PrismaClient> implements DBOSDataSource<Transactio
|
|
|
256
269
|
constructor(
|
|
257
270
|
readonly name: string,
|
|
258
271
|
prismaAccess: PrismaLike | (() => PrismaLike),
|
|
272
|
+
schemaName: string = 'dbos',
|
|
259
273
|
) {
|
|
260
|
-
this.#provider = new PrismaTransactionHandler(name, prismaAccess);
|
|
274
|
+
this.#provider = new PrismaTransactionHandler(name, prismaAccess, schemaName);
|
|
261
275
|
registerDataSource(this.#provider);
|
|
262
276
|
}
|
|
263
277
|
|