@prisma-idb/idb-client-generator 0.27.0 → 0.29.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/.release-it.json CHANGED
@@ -5,7 +5,10 @@
5
5
  },
6
6
  "plugins": {
7
7
  "@release-it/conventional-changelog": {
8
- "preset": "angular"
8
+ "preset": "angular",
9
+ "gitRawCommitsOpts": {
10
+ "path": "./"
11
+ }
9
12
  }
10
13
  },
11
14
  "npm": {
@@ -12,6 +12,14 @@ function createApplyPullFile(writer, models, versionMetaModelName) {
12
12
  writer.writeLine(` logsWithRecords: LogWithRecord<typeof validators>[];`);
13
13
  writer.writeLine(`};`);
14
14
  writer.blankLine();
15
+ writer.writeLine(`export type ApplyPullResult =`);
16
+ writer.block(() => {
17
+ writer.writeLine(`validationErrors: { model: string; error: unknown }[];`);
18
+ writer.writeLine(`missingRecords: number;`);
19
+ writer.writeLine(`staleRecords: number;`);
20
+ writer.writeLine(`totalAppliedRecords: number;`);
21
+ });
22
+ writer.blankLine();
15
23
  writer.writeLine(`/**`);
16
24
  writer.writeLine(` * Apply pulled changes from remote server to local IndexedDB.`);
17
25
  writer.writeLine(` * `);
@@ -23,7 +31,7 @@ function createApplyPullFile(writer, models, versionMetaModelName) {
23
31
  writer.writeLine(` * @param props.logsWithRecords - Array of change logs with validated records from server`);
24
32
  writer.writeLine(` * @returns Object with sync statistics including applied records, missing records, and validation errors`);
25
33
  writer.writeLine(` */`);
26
- writer.writeLine(`export async function applyPull(props: ApplyPullProps) `).block(() => {
34
+ writer.writeLine(`export async function applyPull(props: ApplyPullProps): Promise<ApplyPullResult> `).block(() => {
27
35
  writer.writeLine(`const { idbClient, logsWithRecords } = props;`);
28
36
  writer.blankLine();
29
37
  writer.writeLine(`let staleRecords = 0;`);
@@ -50,13 +58,6 @@ function createApplyPullFile(writer, models, versionMetaModelName) {
50
58
  writer.writeLine(`continue;`);
51
59
  });
52
60
  writer.blankLine();
53
- writer.writeLine(`const versionMeta = await idbClient.$versionMeta.get(model, keyPath, tx);`);
54
- writer.writeLine(`const lastAppliedChangeId = versionMeta?.lastAppliedChangeId ?? null;`);
55
- writer.writeLine(`if (lastAppliedChangeId !== null && lastAppliedChangeId >= changelogId) {`);
56
- writer.writeLine(` staleRecords++;`);
57
- writer.writeLine(` continue;`);
58
- writer.writeLine(`}`);
59
- writer.blankLine();
60
61
  writer.writeLine(`// Exit early if transaction was aborted during previous operations`);
61
62
  writer.writeLine(`if (txAborted)`).block(() => {
62
63
  writer.writeLine(`validationErrors.push({ model, error: new Error('Transaction was aborted') });`);
@@ -64,6 +65,13 @@ function createApplyPullFile(writer, models, versionMetaModelName) {
64
65
  });
65
66
  writer.blankLine();
66
67
  writer.writeLine(`try `).block(() => {
68
+ writer.writeLine(`const versionMeta = await idbClient.$versionMeta.get(model, keyPath, tx);`);
69
+ writer.writeLine(`const lastAppliedChangeId = versionMeta?.lastAppliedChangeId ?? null;`);
70
+ writer.writeLine(`if (lastAppliedChangeId !== null && lastAppliedChangeId >= changelogId) {`);
71
+ writer.writeLine(` staleRecords++;`);
72
+ writer.writeLine(` continue;`);
73
+ writer.writeLine(`}`);
74
+ writer.blankLine();
67
75
  models.forEach((model, index) => {
68
76
  const modelName = model.name;
69
77
  const camelCaseName = modelName.charAt(0).toLowerCase() + modelName.slice(1);
@@ -78,7 +86,7 @@ function createApplyPullFile(writer, models, versionMetaModelName) {
78
86
  writer.writeLine(`${condition} (model === '${modelName}') `).block(() => {
79
87
  writer.writeLine(`if (operation === 'delete') `).block(() => {
80
88
  writer.writeLine(`const validatedKeyPath = keyPathValidators.${modelName}.parse(keyPath);`);
81
- writer.writeLine(`await idbClient.${camelCaseName}.delete({ where: ${keyPathWhereClause} }, { silent: true, addToOutbox: false, tx });`);
89
+ writer.writeLine(`await idbClient.${camelCaseName}.deleteMany({ where: ${keyPathWhereClause} }, { silent: true, addToOutbox: false, tx });`);
82
90
  writer.writeLine(`totalAppliedRecords++;`);
83
91
  writer.writeLine(`// Mark as pulled with latest changelog ID`);
84
92
  writer.writeLine(`await idbClient.$versionMeta.markPulled(model, keyPath, changelogId, { tx });`);
@@ -1 +1 @@
1
- {"version":3,"file":"create.js","sourceRoot":"","sources":["../../../src/fileCreators/apply-pull/create.ts"],"names":[],"mappings":";;AAIA,kDA2KC;AA7KD,+CAA2D;AAE3D,SAAgB,mBAAmB,CAAC,MAAuB,EAAE,MAAe,EAAE,oBAA4B;IAExG,MAAM,CAAC,SAAS,CAAC,iEAAiE,CAAC,CAAC;IACpF,MAAM,CAAC,SAAS,CAAC,gEAAgE,CAAC,CAAC;IACnF,MAAM,CAAC,SAAS,CAAC,6DAA6D,CAAC,CAAC;IAChF,MAAM,CAAC,SAAS,EAAE,CAAC;IAGnB,MAAM,CAAC,SAAS,CAAC,yBAAyB,CAAC,CAAC;IAC5C,MAAM,CAAC,SAAS,CAAC,8BAA8B,CAAC,CAAC;IACjD,MAAM,CAAC,SAAS,CAAC,uDAAuD,CAAC,CAAC;IAC1E,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IACvB,MAAM,CAAC,SAAS,EAAE,CAAC;IAGnB,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IACxB,MAAM,CAAC,SAAS,CAAC,gEAAgE,CAAC,CAAC;IACnF,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IACxB,MAAM,CAAC,SAAS,CAAC,oFAAoF,CAAC,CAAC;IACvG,MAAM,CAAC,SAAS,CAAC,4DAA4D,CAAC,CAAC;IAC/E,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IACxB,MAAM,CAAC,SAAS,CAAC,wCAAwC,CAAC,CAAC;IAC3D,MAAM,CAAC,SAAS,CAAC,2DAA2D,CAAC,CAAC;IAC9E,MAAM,CAAC,SAAS,CAAC,2FAA2F,CAAC,CAAC;IAC9G,MAAM,CAAC,SAAS,CACd,2GAA2G,CAC5G,CAAC;IACF,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAGxB,MAAM,CAAC,SAAS,CAAC,yDAAyD,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;QACrF,MAAM,CAAC,SAAS,CAAC,+CAA+C,CAAC,CAAC;QAClE,MAAM,CAAC,SAAS,EAAE,CAAC;QAEnB,MAAM,CAAC,SAAS,CAAC,uBAAuB,CAAC,CAAC;QAC1C,MAAM,CAAC,SAAS,CAAC,yBAAyB,CAAC,CAAC;QAC5C,MAAM,CAAC,SAAS,CAAC,8BAA8B,CAAC,CAAC;QACjD,MAAM,CAAC,SAAS,CAAC,mEAAmE,CAAC,CAAC;QACtF,MAAM,CAAC,SAAS,EAAE,CAAC;QAGnB,MAAM,CAAC,SAAS,CAAC,2FAA2F,CAAC,CAAC;QAC9G,MAAM,UAAU,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC/D,MAAM,CAAC,SAAS,CAAC,yCAAyC,UAAU,MAAM,oBAAoB,mBAAmB,CAAC,CAAC;QACnH,MAAM,CAAC,SAAS,EAAE,CAAC;QAEnB,MAAM,CAAC,SAAS,CAAC,wBAAwB,CAAC,CAAC;QAC3C,MAAM,CAAC,SAAS,EAAE,CAAC;QAEnB,MAAM,CAAC,SAAS,CAAC,0EAA0E,CAAC,CAAC;QAC7F,MAAM,CAAC,SAAS,CAAC,sCAAsC,CAAC,CAAC;QACzD,MAAM,CAAC,SAAS,CAAC,qBAAqB,CAAC,CAAC;QACxC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QACxB,MAAM,CAAC,SAAS,EAAE,CAAC;QAEnB,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;YAClC,MAAM,CAAC,SAAS,CAAC,wCAAwC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;gBACpE,MAAM,CAAC,SAAS,CAAC,oEAAoE,CAAC,CAAC;gBACvF,MAAM,CAAC,SAAS,CAAC,wCAAwC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;oBACpE,MAAM,CAAC,SAAS,CAAC,mBAAmB,CAAC,CAAC;oBACtC,MAAM,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;gBAChC,CAAC,CAAC,CAAC;gBACH,MAAM,CAAC,SAAS,EAAE,CAAC;gBAGnB,MAAM,CAAC,SAAS,CAAC,2EAA2E,CAAC,CAAC;gBAC9F,MAAM,CAAC,SAAS,CAAC,uEAAuE,CAAC,CAAC;gBAC1F,MAAM,CAAC,SAAS,CAAC,2EAA2E,CAAC,CAAC;gBAC9F,MAAM,CAAC,SAAS,CAAC,mBAAmB,CAAC,CAAC;gBACtC,MAAM,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;gBAChC,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;gBACtB,MAAM,CAAC,SAAS,EAAE,CAAC;gBAGnB,MAAM,CAAC,SAAS,CAAC,qEAAqE,CAAC,CAAC;gBACxF,MAAM,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;oBAC5C,MAAM,CAAC,SAAS,CAAC,gFAAgF,CAAC,CAAC;oBACnG,MAAM,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;gBAChC,CAAC,CAAC,CAAC;gBACH,MAAM,CAAC,SAAS,EAAE,CAAC;gBAEnB,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;oBAClC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;wBAC9B,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC;wBAC7B,MAAM,aAAa,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;wBAC7E,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,IAAA,4BAAoB,EAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAa,CAAC;wBAG1E,MAAM,kBAAkB,GACtB,EAAE,CAAC,MAAM,KAAK,CAAC;4BACb,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,yBAAyB;4BACrC,CAAC,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,KAAK,sBAAsB,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;wBAGxG,MAAM,qBAAqB,GACzB,EAAE,CAAC,MAAM,KAAK,CAAC;4BACb,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,qBAAqB,EAAE,CAAC,CAAC,CAAC,IAAI;4BAC1C,CAAC,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,KAAK,qBAAqB,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;wBAEvG,MAAM,SAAS,GAAG,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;wBAEjD,MAAM,CAAC,SAAS,CAAC,GAAG,SAAS,gBAAgB,SAAS,KAAK,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;4BACtE,MAAM,CAAC,SAAS,CAAC,8BAA8B,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;gCAC1D,MAAM,CAAC,SAAS,CAAC,8CAA8C,SAAS,kBAAkB,CAAC,CAAC;gCAC5F,MAAM,CAAC,SAAS,CACd,mBAAmB,aAAa,oBAAoB,kBAAkB,gDAAgD,CACvH,CAAC;gCACF,MAAM,CAAC,SAAS,CAAC,wBAAwB,CAAC,CAAC;gCAC3C,MAAM,CAAC,SAAS,CAAC,4CAA4C,CAAC,CAAC;gCAC/D,MAAM,CAAC,SAAS,CAAC,+EAA+E,CAAC,CAAC;4BACpG,CAAC,CAAC,CAAC;4BACH,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;gCACnC,MAAM,CAAC,SAAS,CAAC,sCAAsC,SAAS,iBAAiB,CAAC,CAAC;gCACnF,MAAM,CAAC,SAAS,CAAC,8BAA8B,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;oCAC1D,MAAM,CAAC,SAAS,CACd,mBAAmB,aAAa,sEAAsE,qBAAqB,gDAAgD,CAC5K,CAAC;oCACF,MAAM,CAAC,SAAS,CAAC,wBAAwB,CAAC,CAAC;oCAC3C,MAAM,CAAC,SAAS,CAAC,4CAA4C,CAAC,CAAC;oCAC/D,MAAM,CAAC,SAAS,CAAC,+EAA+E,CAAC,CAAC;gCACpG,CAAC,CAAC,CAAC;gCACH,MAAM,CAAC,SAAS,CAAC,mCAAmC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;oCAC/D,MAAM,CAAC,SAAS,CACd,mBAAmB,aAAa,oBAAoB,qBAAqB,kGAAkG,CAC5K,CAAC;oCACF,MAAM,CAAC,SAAS,CAAC,wBAAwB,CAAC,CAAC;oCAC3C,MAAM,CAAC,SAAS,CAAC,4CAA4C,CAAC,CAAC;oCAC/D,MAAM,CAAC,SAAS,CAAC,+EAA+E,CAAC,CAAC;gCACpG,CAAC,CAAC,CAAC;gCACH,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;oCACnC,MAAM,CAAC,SAAS,CACd,2CAA2C,SAAS,4DAA4D,CACjH,CAAC;gCACJ,CAAC,CAAC,CAAC;4BACL,CAAC,CAAC,CAAC;wBACL,CAAC,CAAC,CAAC;oBACL,CAAC,CAAC,CAAC;oBAEH,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;wBACnC,MAAM,CAAC,SAAS,CACd,iHAAiH,CAClH,CAAC;oBACJ,CAAC,CAAC,CAAC;gBACL,CAAC,CAAC,CAAC;gBACH,MAAM,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;oBAC5C,MAAM,CAAC,SAAS,CAAC,0CAA0C,CAAC,CAAC;oBAC7D,MAAM,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;gBAChC,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YACH,MAAM,CAAC,SAAS,EAAE,CAAC;YAGnB,MAAM,CAAC,SAAS,CAAC,mEAAmE,CAAC,CAAC;YACtF,MAAM,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC;QACrC,CAAC,CAAC,CAAC;QACH,MAAM,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;YAC5C,MAAM,CAAC,SAAS,CAAC,iDAAiD,CAAC,CAAC;YACpE,MAAM,CAAC,SAAS,CAAC,8DAA8D,CAAC,CAAC;YACjF,MAAM,CAAC,SAAS,CAAC,0EAA0E,CAAC,CAAC;YAC7F,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;YACtB,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;QACnC,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,SAAS,EAAE,CAAC;QACnB,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;YACjC,MAAM,CAAC,SAAS,CAAC,mBAAmB,CAAC,CAAC;YACtC,MAAM,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC;YACpC,MAAM,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;YAClC,MAAM,CAAC,SAAS,CAAC,sBAAsB,CAAC,CAAC;QAC3C,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"create.js","sourceRoot":"","sources":["../../../src/fileCreators/apply-pull/create.ts"],"names":[],"mappings":";;AAIA,kDAoLC;AAtLD,+CAA2D;AAE3D,SAAgB,mBAAmB,CAAC,MAAuB,EAAE,MAAe,EAAE,oBAA4B;IAExG,MAAM,CAAC,SAAS,CAAC,iEAAiE,CAAC,CAAC;IACpF,MAAM,CAAC,SAAS,CAAC,gEAAgE,CAAC,CAAC;IACnF,MAAM,CAAC,SAAS,CAAC,6DAA6D,CAAC,CAAC;IAChF,MAAM,CAAC,SAAS,EAAE,CAAC;IAGnB,MAAM,CAAC,SAAS,CAAC,yBAAyB,CAAC,CAAC;IAC5C,MAAM,CAAC,SAAS,CAAC,8BAA8B,CAAC,CAAC;IACjD,MAAM,CAAC,SAAS,CAAC,uDAAuD,CAAC,CAAC;IAC1E,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IACvB,MAAM,CAAC,SAAS,EAAE,CAAC;IAGnB,MAAM,CAAC,SAAS,CAAC,+BAA+B,CAAC,CAAC;IAClD,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE;QAChB,MAAM,CAAC,SAAS,CAAC,wDAAwD,CAAC,CAAC;QAC3E,MAAM,CAAC,SAAS,CAAC,yBAAyB,CAAC,CAAC;QAC5C,MAAM,CAAC,SAAS,CAAC,uBAAuB,CAAC,CAAC;QAC1C,MAAM,CAAC,SAAS,CAAC,8BAA8B,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;IACH,MAAM,CAAC,SAAS,EAAE,CAAC;IAGnB,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IACxB,MAAM,CAAC,SAAS,CAAC,gEAAgE,CAAC,CAAC;IACnF,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IACxB,MAAM,CAAC,SAAS,CAAC,oFAAoF,CAAC,CAAC;IACvG,MAAM,CAAC,SAAS,CAAC,4DAA4D,CAAC,CAAC;IAC/E,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IACxB,MAAM,CAAC,SAAS,CAAC,wCAAwC,CAAC,CAAC;IAC3D,MAAM,CAAC,SAAS,CAAC,2DAA2D,CAAC,CAAC;IAC9E,MAAM,CAAC,SAAS,CAAC,2FAA2F,CAAC,CAAC;IAC9G,MAAM,CAAC,SAAS,CACd,2GAA2G,CAC5G,CAAC;IACF,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAGxB,MAAM,CAAC,SAAS,CAAC,mFAAmF,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;QAC/G,MAAM,CAAC,SAAS,CAAC,+CAA+C,CAAC,CAAC;QAClE,MAAM,CAAC,SAAS,EAAE,CAAC;QAEnB,MAAM,CAAC,SAAS,CAAC,uBAAuB,CAAC,CAAC;QAC1C,MAAM,CAAC,SAAS,CAAC,yBAAyB,CAAC,CAAC;QAC5C,MAAM,CAAC,SAAS,CAAC,8BAA8B,CAAC,CAAC;QACjD,MAAM,CAAC,SAAS,CAAC,mEAAmE,CAAC,CAAC;QACtF,MAAM,CAAC,SAAS,EAAE,CAAC;QAGnB,MAAM,CAAC,SAAS,CAAC,2FAA2F,CAAC,CAAC;QAC9G,MAAM,UAAU,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC/D,MAAM,CAAC,SAAS,CAAC,yCAAyC,UAAU,MAAM,oBAAoB,mBAAmB,CAAC,CAAC;QACnH,MAAM,CAAC,SAAS,EAAE,CAAC;QAEnB,MAAM,CAAC,SAAS,CAAC,wBAAwB,CAAC,CAAC;QAC3C,MAAM,CAAC,SAAS,EAAE,CAAC;QAEnB,MAAM,CAAC,SAAS,CAAC,0EAA0E,CAAC,CAAC;QAC7F,MAAM,CAAC,SAAS,CAAC,sCAAsC,CAAC,CAAC;QACzD,MAAM,CAAC,SAAS,CAAC,qBAAqB,CAAC,CAAC;QACxC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QACxB,MAAM,CAAC,SAAS,EAAE,CAAC;QAEnB,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;YAClC,MAAM,CAAC,SAAS,CAAC,wCAAwC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;gBACpE,MAAM,CAAC,SAAS,CAAC,oEAAoE,CAAC,CAAC;gBACvF,MAAM,CAAC,SAAS,CAAC,wCAAwC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;oBACpE,MAAM,CAAC,SAAS,CAAC,mBAAmB,CAAC,CAAC;oBACtC,MAAM,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;gBAChC,CAAC,CAAC,CAAC;gBACH,MAAM,CAAC,SAAS,EAAE,CAAC;gBAGnB,MAAM,CAAC,SAAS,CAAC,qEAAqE,CAAC,CAAC;gBACxF,MAAM,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;oBAC5C,MAAM,CAAC,SAAS,CAAC,gFAAgF,CAAC,CAAC;oBACnG,MAAM,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;gBAChC,CAAC,CAAC,CAAC;gBACH,MAAM,CAAC,SAAS,EAAE,CAAC;gBAEnB,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;oBAElC,MAAM,CAAC,SAAS,CAAC,2EAA2E,CAAC,CAAC;oBAC9F,MAAM,CAAC,SAAS,CAAC,uEAAuE,CAAC,CAAC;oBAC1F,MAAM,CAAC,SAAS,CAAC,2EAA2E,CAAC,CAAC;oBAC9F,MAAM,CAAC,SAAS,CAAC,mBAAmB,CAAC,CAAC;oBACtC,MAAM,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;oBAChC,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;oBACtB,MAAM,CAAC,SAAS,EAAE,CAAC;oBACnB,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;wBAC9B,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC;wBAC7B,MAAM,aAAa,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;wBAC7E,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,IAAA,4BAAoB,EAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAa,CAAC;wBAG1E,MAAM,kBAAkB,GACtB,EAAE,CAAC,MAAM,KAAK,CAAC;4BACb,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,yBAAyB;4BACrC,CAAC,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,KAAK,sBAAsB,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;wBAGxG,MAAM,qBAAqB,GACzB,EAAE,CAAC,MAAM,KAAK,CAAC;4BACb,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,qBAAqB,EAAE,CAAC,CAAC,CAAC,IAAI;4BAC1C,CAAC,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,KAAK,qBAAqB,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;wBAEvG,MAAM,SAAS,GAAG,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;wBAEjD,MAAM,CAAC,SAAS,CAAC,GAAG,SAAS,gBAAgB,SAAS,KAAK,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;4BACtE,MAAM,CAAC,SAAS,CAAC,8BAA8B,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;gCAC1D,MAAM,CAAC,SAAS,CAAC,8CAA8C,SAAS,kBAAkB,CAAC,CAAC;gCAC5F,MAAM,CAAC,SAAS,CACd,mBAAmB,aAAa,wBAAwB,kBAAkB,gDAAgD,CAC3H,CAAC;gCACF,MAAM,CAAC,SAAS,CAAC,wBAAwB,CAAC,CAAC;gCAC3C,MAAM,CAAC,SAAS,CAAC,4CAA4C,CAAC,CAAC;gCAC/D,MAAM,CAAC,SAAS,CAAC,+EAA+E,CAAC,CAAC;4BACpG,CAAC,CAAC,CAAC;4BACH,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;gCACnC,MAAM,CAAC,SAAS,CAAC,sCAAsC,SAAS,iBAAiB,CAAC,CAAC;gCACnF,MAAM,CAAC,SAAS,CAAC,8BAA8B,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;oCAC1D,MAAM,CAAC,SAAS,CACd,mBAAmB,aAAa,sEAAsE,qBAAqB,gDAAgD,CAC5K,CAAC;oCACF,MAAM,CAAC,SAAS,CAAC,wBAAwB,CAAC,CAAC;oCAC3C,MAAM,CAAC,SAAS,CAAC,4CAA4C,CAAC,CAAC;oCAC/D,MAAM,CAAC,SAAS,CAAC,+EAA+E,CAAC,CAAC;gCACpG,CAAC,CAAC,CAAC;gCACH,MAAM,CAAC,SAAS,CAAC,mCAAmC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;oCAC/D,MAAM,CAAC,SAAS,CACd,mBAAmB,aAAa,oBAAoB,qBAAqB,kGAAkG,CAC5K,CAAC;oCACF,MAAM,CAAC,SAAS,CAAC,wBAAwB,CAAC,CAAC;oCAC3C,MAAM,CAAC,SAAS,CAAC,4CAA4C,CAAC,CAAC;oCAC/D,MAAM,CAAC,SAAS,CAAC,+EAA+E,CAAC,CAAC;gCACpG,CAAC,CAAC,CAAC;gCACH,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;oCACnC,MAAM,CAAC,SAAS,CACd,2CAA2C,SAAS,4DAA4D,CACjH,CAAC;gCACJ,CAAC,CAAC,CAAC;4BACL,CAAC,CAAC,CAAC;wBACL,CAAC,CAAC,CAAC;oBACL,CAAC,CAAC,CAAC;oBAEH,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;wBACnC,MAAM,CAAC,SAAS,CACd,iHAAiH,CAClH,CAAC;oBACJ,CAAC,CAAC,CAAC;gBACL,CAAC,CAAC,CAAC;gBACH,MAAM,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;oBAC5C,MAAM,CAAC,SAAS,CAAC,0CAA0C,CAAC,CAAC;oBAC7D,MAAM,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;gBAChC,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YACH,MAAM,CAAC,SAAS,EAAE,CAAC;YAGnB,MAAM,CAAC,SAAS,CAAC,mEAAmE,CAAC,CAAC;YACtF,MAAM,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC;QACrC,CAAC,CAAC,CAAC;QACH,MAAM,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;YAC5C,MAAM,CAAC,SAAS,CAAC,iDAAiD,CAAC,CAAC;YACpE,MAAM,CAAC,SAAS,CAAC,8DAA8D,CAAC,CAAC;YACjF,MAAM,CAAC,SAAS,CAAC,0EAA0E,CAAC,CAAC;YAC7F,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;YACtB,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;QACnC,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,SAAS,EAAE,CAAC;QACnB,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;YACjC,MAAM,CAAC,SAAS,CAAC,mBAAmB,CAAC,CAAC;YACtC,MAAM,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC;YACpC,MAAM,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;YAClC,MAAM,CAAC,SAAS,CAAC,sBAAsB,CAAC,CAAC;QAC3C,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -45,7 +45,7 @@ function createBatchProcessorFile(writer, models, prismaClientImport, rootModel)
45
45
  const modelNames = models.map((m) => m.name);
46
46
  writer.writeLine(`import { z, type ZodTypeAny } from "zod";`);
47
47
  writer.writeLine(`import type { OutboxEventRecord } from "../client/idb-interface";`);
48
- writer.writeLine(`import type { ChangeLog } from "${prismaClientImport}";`);
48
+ writer.writeLine(`import type { Changelog } from "${prismaClientImport}";`);
49
49
  writer.writeLine(`import type { PrismaClient } from "${prismaClientImport}";`);
50
50
  writer.writeLine(`import { validators, keyPathValidators } from "../validators";`);
51
51
  writer.blankLine();
@@ -62,7 +62,7 @@ function createBatchProcessorFile(writer, models, prismaClientImport, rootModel)
62
62
  writer.writeLine(`}[keyof V & string];`);
63
63
  writer.blankLine();
64
64
  writer.writeLine(`export type LogWithRecord<V extends Partial<Record<string, ZodTypeAny>>> = {`);
65
- writer.writeLine(` [M in keyof V & string]: Omit<ChangeLog, "model" | "keyPath"> & {`);
65
+ writer.writeLine(` [M in keyof V & string]: Omit<Changelog, "model" | "keyPath"> & {`);
66
66
  writer.writeLine(` model: M;`);
67
67
  writer.writeLine(` keyPath: Array<string | number>;`);
68
68
  writer.writeLine(` record?: z.infer<V[M]> | null;`);
@@ -170,7 +170,7 @@ function createBatchProcessorFile(writer, models, prismaClientImport, rootModel)
170
170
  writer.writeLine(`}): Promise<Array<LogWithRecord<typeof validators>>>`);
171
171
  writer.block(() => {
172
172
  writer
173
- .writeLine(`const logs = await prisma.changeLog.findMany(`)
173
+ .writeLine(`const logs = await prisma.changelog.findMany(`)
174
174
  .block(() => {
175
175
  writer
176
176
  .writeLine(`where: `)
@@ -289,7 +289,7 @@ function generateModelSyncHandler(writer, model, allModels, rootModel, dag) {
289
289
  writer.writeLine(`switch (operation) {`);
290
290
  writer.writeLine(` case "create": {`);
291
291
  writer.writeLine(` const result = await prisma.$transaction(async (tx) => {`);
292
- writer.writeLine(` const existingLog = await tx.changeLog.findUnique({`);
292
+ writer.writeLine(` const existingLog = await tx.changelog.findUnique({`);
293
293
  writer.writeLine(` where: { outboxEventId: event.id },`);
294
294
  writer.writeLine(` });`);
295
295
  writer.writeLine(` if (existingLog) {`);
@@ -360,7 +360,7 @@ function generateModelSyncHandler(writer, model, allModels, rootModel, dag) {
360
360
  writer.writeLine(` }`);
361
361
  writer.blankLine();
362
362
  }
363
- writer.writeLine(` const newLog = await tx.changeLog.create({`);
363
+ writer.writeLine(` const newLog = await tx.changelog.create({`);
364
364
  writer.writeLine(` data: {`);
365
365
  writer.writeLine(` model: "${model.name}",`);
366
366
  writer.writeLine(` keyPath: validKeyPath,`);
@@ -377,7 +377,7 @@ function generateModelSyncHandler(writer, model, allModels, rootModel, dag) {
377
377
  writer.blankLine();
378
378
  writer.writeLine(` case "update": {`);
379
379
  writer.writeLine(` const result = await prisma.$transaction(async (tx) => {`);
380
- writer.writeLine(` const existingLog = await tx.changeLog.findUnique({`);
380
+ writer.writeLine(` const existingLog = await tx.changelog.findUnique({`);
381
381
  writer.writeLine(` where: { outboxEventId: event.id },`);
382
382
  writer.writeLine(` });`);
383
383
  writer.writeLine(` if (existingLog) {`);
@@ -494,7 +494,7 @@ function generateModelSyncHandler(writer, model, allModels, rootModel, dag) {
494
494
  writer.writeLine(` }`);
495
495
  }
496
496
  writer.blankLine();
497
- writer.writeLine(` const newLog = await tx.changeLog.create({`);
497
+ writer.writeLine(` const newLog = await tx.changelog.create({`);
498
498
  writer.writeLine(` data: {`);
499
499
  writer.writeLine(` model: "${model.name}",`);
500
500
  writer.writeLine(` keyPath: validKeyPath,`);
@@ -515,7 +515,7 @@ function generateModelSyncHandler(writer, model, allModels, rootModel, dag) {
515
515
  writer.blankLine();
516
516
  writer.writeLine(` case "delete": {`);
517
517
  writer.writeLine(` const result = await prisma.$transaction(async (tx) => {`);
518
- writer.writeLine(` const existingLog = await tx.changeLog.findUnique({`);
518
+ writer.writeLine(` const existingLog = await tx.changelog.findUnique({`);
519
519
  writer.writeLine(` where: { outboxEventId: event.id },`);
520
520
  writer.writeLine(` });`);
521
521
  writer.writeLine(` if (existingLog) {`);
@@ -552,7 +552,7 @@ function generateModelSyncHandler(writer, model, allModels, rootModel, dag) {
552
552
  writer.writeLine(` }`);
553
553
  }
554
554
  writer.blankLine();
555
- writer.writeLine(` const newLog = await tx.changeLog.create({`);
555
+ writer.writeLine(` const newLog = await tx.changelog.create({`);
556
556
  writer.writeLine(` data: {`);
557
557
  writer.writeLine(` model: "${model.name}",`);
558
558
  writer.writeLine(` keyPath: validKeyPath,`);
@@ -17,6 +17,7 @@ function createDAG(filteredModels, rootModel) {
17
17
  }
18
18
  validateRootAuthority(dag, rootModel);
19
19
  checkForCycles(dag);
20
+ validateClientGeneratedIds(filteredModels);
20
21
  return dag;
21
22
  }
22
23
  function validateRootAuthority(dag, rootModel) {
@@ -72,4 +73,21 @@ function checkForCycles(dag) {
72
73
  }
73
74
  }
74
75
  }
76
+ function validateClientGeneratedIds(models) {
77
+ for (const model of models) {
78
+ const idField = model.fields.find((f) => f.isId);
79
+ if (!idField) {
80
+ throw new Error(`Model "${model.name}" is missing an @id field. All syncable models must have a primary key.`);
81
+ }
82
+ if (!idField.hasDefaultValue) {
83
+ throw new Error(`Model "${model.name}" has @id field "${idField.name}" without a default value. Required: Use random defaults like uuid() or cuid() for all models (except rootModel) included in sync.`);
84
+ }
85
+ const isValidClientGeneratedId = typeof idField.default === "object" &&
86
+ "name" in idField.default &&
87
+ (idField.default.name === "uuid" || idField.default.name === "cuid");
88
+ if (!isValidClientGeneratedId) {
89
+ throw new Error(`Model "${model.name}" has @id field "${idField.name}" with invalid default "${typeof idField.default === "object" && "name" in idField.default ? idField.default.name : idField.default}". Required: Use random defaults like uuid() or cuid() for all models (except rootModel) included in sync.`);
90
+ }
91
+ }
92
+ }
75
93
  //# sourceMappingURL=createDAG.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"createDAG.js","sourceRoot":"","sources":["../../../src/fileCreators/batch-processor/createDAG.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"createDAG.js","sourceRoot":"","sources":["../../../src/fileCreators/batch-processor/createDAG.ts"],"names":[],"mappings":"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"}
@@ -7,6 +7,7 @@ function createIDBInterfaceFile(writer, models, prismaClientImport, outboxSync,
7
7
  writer.writeLine(`import type * as Prisma from "${prismaClientImport}";`);
8
8
  if (outboxSync) {
9
9
  writer.writeLine(`import type { PushResult } from "../server/batch-processor";`);
10
+ writer.writeLine(`import type { ApplyPullResult } from "./apply-pull";`);
10
11
  }
11
12
  writer.blankLine();
12
13
  writer.writeLine(`export interface PrismaIDBSchema extends DBSchema`).block(() => {
@@ -57,6 +58,7 @@ function addOutboxEventTypeDefinition(writer) {
57
58
  .writeLine(`lastError: string | null;`)
58
59
  .writeLine(`synced: boolean;`)
59
60
  .writeLine(`syncedAt: Date | null;`)
61
+ .writeLine(`lastAttemptedAt: Date | null;`)
60
62
  .writeLine(`retryable: boolean;`);
61
63
  });
62
64
  writer.writeLine(`export interface ChangeMetaRecord`).block(() => {
@@ -106,30 +108,39 @@ function addSyncWorkerTypes(writer) {
106
108
  .writeLine(` * Returns immediately if worker is stopped or a sync is already in progress.`)
107
109
  .writeLine(` * Use syncNow() to trigger a one-off sync without starting the worker.`)
108
110
  .writeLine(` */`)
109
- .writeLine(`forceSync(): Promise<void>;`)
111
+ .writeLine(`forceSync(options?: { overrideBackoff?: boolean }): Promise<void>;`)
110
112
  .writeLine(`/**`)
111
113
  .writeLine(` * Execute a single sync cycle immediately without starting the worker.`)
112
114
  .writeLine(` * Returns immediately if a sync is already in progress.`)
113
115
  .writeLine(` * Does not require the worker to be running (started).`)
114
116
  .writeLine(` */`)
115
- .writeLine(`syncNow(): Promise<void>;`)
117
+ .writeLine(`syncNow(options?: { overrideBackoff?: boolean }): Promise<void>;`)
116
118
  .writeLine(`/**`)
117
119
  .writeLine(` * Get current sync worker status snapshot.`)
118
120
  .writeLine(` * Listen to 'statuschange' events via .on() to get updates.`)
119
121
  .writeLine(` */`)
120
122
  .writeLine(`readonly status: SyncWorkerStatus;`)
121
- .writeLine(`/**`)
122
- .writeLine(` * Listen for status changes.`)
123
- .writeLine(` * @param event Event name (only 'statuschange' supported)`)
124
- .writeLine(` * @param callback Function called whenever status changes`)
125
- .writeLine(` * @returns Unsubscribe function`)
126
- .writeLine(` * @example`)
127
- .writeLine(` * const unsubscribe = worker.on('statuschange', () => {`)
128
- .writeLine(` * console.log('Status:', worker.status);`)
129
- .writeLine(` * });`)
130
- .writeLine(` * // Later: unsubscribe()`)
131
- .writeLine(` */`)
132
- .writeLine(`on(event: 'statuschange', callback: () => void): () => void;`);
123
+ .writeLine("/**")
124
+ .writeLine(" * Listen for status changes.")
125
+ .writeLine(" * @param event Event name ('statuschange', 'pullcompleted' or 'pushcompleted')")
126
+ .writeLine(" * @param callback Function called whenever the event fires")
127
+ .writeLine(" * @returns Unsubscribe function")
128
+ .writeLine(" * @example")
129
+ .writeLine(" * const unsubscribe = worker.on('statuschange', (e) => {")
130
+ .writeLine(" * console.log('Status:', worker.status);")
131
+ .writeLine(" * });")
132
+ .writeLine(" * // Later: unsubscribe()")
133
+ .writeLine(" */")
134
+ .writeLine("on<E extends 'statuschange' | 'pullcompleted' | 'pushcompleted'>(")
135
+ .writeLine(" event: E,")
136
+ .writeLine(" callback: (")
137
+ .writeLine(" e: E extends 'statuschange'")
138
+ .writeLine(" ? CustomEvent<{ status: 'STOPPED' | 'IDLE' | 'PUSHING' | 'PULLING'; isLooping: boolean; lastSyncTime: Date | null; lastError: Error | null }>")
139
+ .writeLine(" : E extends 'pullcompleted'")
140
+ .writeLine(" ? CustomEvent<ApplyPullResult>")
141
+ .writeLine(" : CustomEvent<{ results: PushResult[] }>")
142
+ .writeLine(" ) => void")
143
+ .writeLine("): () => void;");
133
144
  });
134
145
  }
135
146
  //# sourceMappingURL=create.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"create.js","sourceRoot":"","sources":["../../../src/fileCreators/idb-interface/create.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"create.js","sourceRoot":"","sources":["../../../src/fileCreators/idb-interface/create.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.addBaseModelClass = addBaseModelClass;
4
- function addBaseModelClass(writer, outboxSync = false, outboxModelName) {
4
+ function addBaseModelClass(writer, outboxSync = false) {
5
5
  writer.writeLine(`class BaseIDBModelClass<T extends keyof PrismaIDBSchema>`).block(() => {
6
6
  writer
7
7
  .writeLine(`protected client: PrismaIDBClient;`)
@@ -16,31 +16,23 @@ function addBaseModelClass(writer, outboxSync = false, outboxModelName) {
16
16
  .writeLine(`this.modelName = modelName;`)
17
17
  .writeLine(`this.eventEmitter = new EventTarget();`);
18
18
  });
19
- addEventEmitters(writer, outboxSync, outboxModelName);
19
+ addEventEmitters(writer, outboxSync);
20
20
  });
21
21
  }
22
- function addEventEmitters(writer, outboxSync, outboxModelName) {
22
+ function addEventEmitters(writer, outboxSync) {
23
23
  writer
24
- .writeLine(`subscribe(event: "create" | "update" | "delete" | ("create" | "update" | "delete")[], callback: (e: CustomEventInit<{ keyPath: PrismaIDBSchema[T]["key"]; oldKeyPath?: PrismaIDBSchema[T]["key"] }>) => void)`)
24
+ .writeLine(`subscribe(event: "create" | "update" | "delete" | ("create" | "update" | "delete")[], callback: (e: CustomEvent<{ keyPath: PrismaIDBSchema[T]["key"]; oldKeyPath?: PrismaIDBSchema[T]["key"] }>) => void): () => void`)
25
25
  .block(() => {
26
- writer
27
- .writeLine(`if (Array.isArray(event))`)
28
- .block(() => {
29
- writer.writeLine(`event.forEach((event) => this.eventEmitter.addEventListener(event, callback));`);
30
- })
31
- .writeLine(`else`)
32
- .block(() => {
33
- writer.writeLine(`this.eventEmitter.addEventListener(event, callback);`);
26
+ writer.write(`if (Array.isArray(event))`).block(() => {
27
+ writer.writeLine(`event.forEach((evt) => this.eventEmitter.addEventListener(evt, callback as EventListener));`);
28
+ writer.write(`return () =>`).block(() => {
29
+ writer.writeLine(`event.forEach((evt) => this.eventEmitter.removeEventListener(evt, callback as EventListener));`);
30
+ });
34
31
  });
35
- });
36
- writer
37
- .writeLine(`unsubscribe(event: "create" | "update" | "delete" | ("create" | "update" | "delete")[], callback: (e: CustomEventInit<{ keyPath: PrismaIDBSchema[T]["key"]; oldKeyPath?: PrismaIDBSchema[T]["key"] }>) => void)`)
38
- .block(() => {
39
- writer.writeLine(`if (Array.isArray(event))`).block(() => {
40
- writer.writeLine(`event.forEach((event) => this.eventEmitter.removeEventListener(event, callback));`);
41
- writer.writeLine(`return;`);
32
+ writer.writeLine(`this.eventEmitter.addEventListener(event, callback as EventListener);`);
33
+ writer.write(`return () =>`).block(() => {
34
+ writer.writeLine(`this.eventEmitter.removeEventListener(event, callback as EventListener);`);
42
35
  });
43
- writer.writeLine(`this.eventEmitter.removeEventListener(event, callback);`);
44
36
  });
45
37
  writer
46
38
  .writeLine(`protected async emit(event: "create" | "update" | "delete", keyPath: PrismaIDBSchema[T]["key"], oldKeyPath?: PrismaIDBSchema[T]["key"], record?: unknown, opts?: { silent?: boolean; addToOutbox?: boolean; tx?: IDBUtils.ReadwriteTransactionType })`)
@@ -62,24 +54,19 @@ function addEventEmitters(writer, outboxSync, outboxModelName) {
62
54
  writer.blankLine();
63
55
  writer.writeLine(`if (opts?.addToOutbox !== false && this.client.shouldTrackModel(this.modelName))`).block(() => {
64
56
  writer
65
- .writeLine(`if (opts?.tx) {`)
66
- .writeLine(`const outboxStore = opts.tx.objectStore("${outboxModelName}");`)
67
- .writeLine(`const outboxEvent: OutboxEventRecord = {`)
68
- .writeLine(`id: crypto.randomUUID(),`)
69
- .writeLine(`createdAt: new Date(),`)
70
- .writeLine(`synced: false,`)
71
- .writeLine(`syncedAt: null,`)
72
- .writeLine(`tries: 0,`)
73
- .writeLine(`lastError: null,`)
74
- .writeLine(`entityType: this.modelName,`)
75
- .writeLine(`operation: event,`)
76
- .writeLine(`payload: record ?? keyPath,`)
77
- .writeLine(`retryable: true,`)
78
- .writeLine(`};`)
79
- .writeLine(`await outboxStore.add(outboxEvent);`)
57
+ .writeLine(`await this.client.$outbox.create(`)
58
+ .block(() => {
59
+ writer
60
+ .writeLine(`data: {`)
61
+ .writeLine(`entityType: this.modelName,`)
62
+ .writeLine(`operation: event,`)
63
+ .writeLine(`payload: record ?? keyPath,`)
64
+ .writeLine(`},`);
65
+ })
66
+ .writeLine(`, { tx: opts?.tx }`)
67
+ .writeLine(`);`)
80
68
  .blankLine()
81
- .writeLine(`await this.client.$versionMeta.markLocalPending(this.modelName, keyPath, { tx: opts.tx });`)
82
- .writeLine(`}`);
69
+ .writeLine(`await this.client.$versionMeta.markLocalPending(this.modelName, keyPath, { tx: opts?.tx });`);
83
70
  });
84
71
  });
85
72
  }
@@ -1 +1 @@
1
- {"version":3,"file":"BaseIDBModelClass.js","sourceRoot":"","sources":["../../../../src/fileCreators/prisma-idb-client/classes/BaseIDBModelClass.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"BaseIDBModelClass.js","sourceRoot":"","sources":["../../../../src/fileCreators/prisma-idb-client/classes/BaseIDBModelClass.ts"],"names":[],"mappings":";;AAEA,8CAmBC;AAnBD,SAAgB,iBAAiB,CAAC,MAAuB,EAAE,aAAsB,KAAK;IACpF,MAAM,CAAC,SAAS,CAAC,0DAA0D,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;QACtF,MAAM;aACH,SAAS,CAAC,oCAAoC,CAAC;aAC/C,SAAS,CAAC,8BAA8B,CAAC;aACzC,SAAS,CAAC,8BAA8B,CAAC;aACzC,SAAS,CAAC,oCAAoC,CAAC;aAC/C,SAAS,EAAE,CAAC;QAEf,MAAM,CAAC,SAAS,CAAC,4EAA4E,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;YACxG,MAAM;iBACH,SAAS,CAAC,uBAAuB,CAAC;iBAClC,SAAS,CAAC,yBAAyB,CAAC;iBACpC,SAAS,CAAC,6BAA6B,CAAC;iBACxC,SAAS,CAAC,wCAAwC,CAAC,CAAC;QACzD,CAAC,CAAC,CAAC;QAEH,gBAAgB,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,gBAAgB,CAAC,MAAuB,EAAE,UAAmB;IACpE,MAAM;SACH,SAAS,CACR,uNAAuN,CACxN;SACA,KAAK,CAAC,GAAG,EAAE;QACV,MAAM,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;YACnD,MAAM,CAAC,SAAS,CAAC,6FAA6F,CAAC,CAAC;YAChH,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;gBACtC,MAAM,CAAC,SAAS,CACd,gGAAgG,CACjG,CAAC;YACJ,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,SAAS,CAAC,uEAAuE,CAAC,CAAC;QAC1F,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;YACtC,MAAM,CAAC,SAAS,CAAC,0EAA0E,CAAC,CAAC;QAC/F,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEL,MAAM;SACH,SAAS,CACR,uPAAuP,CACxP;SACA,KAAK,CAAC,GAAG,EAAE;QACV,MAAM,CAAC,SAAS,CAAC,mCAAmC,CAAC,CAAC,SAAS,EAAE,CAAC;QAElE,MAAM,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;YAC7C,MAAM;iBACH,SAAS,CAAC,yBAAyB,CAAC;iBACpC,KAAK,CAAC,GAAG,EAAE;gBACV,MAAM,CAAC,SAAS,CACd,+FAA+F,CAChG,CAAC;YACJ,CAAC,CAAC;iBACD,SAAS,CAAC,MAAM,CAAC;iBACjB,KAAK,CAAC,GAAG,EAAE;gBACV,MAAM,CAAC,SAAS,CAAC,mFAAmF,CAAC,CAAC;YACxG,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,UAAU;YAAE,OAAO;QAExB,MAAM,CAAC,SAAS,EAAE,CAAC;QACnB,MAAM,CAAC,SAAS,CAAC,kFAAkF,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;YAC9G,MAAM;iBACH,SAAS,CAAC,mCAAmC,CAAC;iBAC9C,KAAK,CAAC,GAAG,EAAE;gBACV,MAAM;qBACH,SAAS,CAAC,SAAS,CAAC;qBACpB,SAAS,CAAC,6BAA6B,CAAC;qBACxC,SAAS,CAAC,mBAAmB,CAAC;qBAC9B,SAAS,CAAC,6BAA6B,CAAC;qBACxC,SAAS,CAAC,IAAI,CAAC,CAAC;YACrB,CAAC,CAAC;iBACD,SAAS,CAAC,oBAAoB,CAAC;iBAC/B,SAAS,CAAC,IAAI,CAAC;iBACf,SAAS,EAAE;iBACX,SAAS,CAAC,6FAA6F,CAAC,CAAC;QAC9G,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -6,12 +6,35 @@ function addOutboxEventIDBClass(writer, outboxModelName) {
6
6
  addConstructor(writer, outboxModelName);
7
7
  addCreateMethod(writer, outboxModelName);
8
8
  addGetNextBatchMethod(writer, outboxModelName);
9
+ addHasAnyRetryableUnsyncedMethod(writer, outboxModelName);
9
10
  addMarkSyncedMethod(writer, outboxModelName);
10
11
  addMarkFailedMethod(writer, outboxModelName);
11
12
  addStatsMethod(writer, outboxModelName);
12
13
  addClearSyncedMethod(writer, outboxModelName);
13
14
  });
14
15
  }
16
+ function addHasAnyRetryableUnsyncedMethod(writer, outboxModelName) {
17
+ writer
18
+ .writeLine(`/**`)
19
+ .writeLine(` * Returns true if any unsynced, retryable outbox event exists.`)
20
+ .writeLine(` * Used to gate pull phase in sync worker.`)
21
+ .writeLine(` */`)
22
+ .writeLine(`async hasAnyRetryableUnsynced(): Promise<boolean> `)
23
+ .block(() => {
24
+ writer
25
+ .writeLine(`const tx = this.client._db.transaction("${outboxModelName}", "readonly");`)
26
+ .writeLine(`const store = tx.objectStore("${outboxModelName}");`)
27
+ .writeLine(`let cursor = await store.openCursor();`)
28
+ .writeLine(`while (cursor) `)
29
+ .block(() => {
30
+ writer.writeLine(`const e = cursor.value;`);
31
+ writer.writeLine(`if (!e.synced && e.retryable) return true;`);
32
+ writer.writeLine(`cursor = await cursor.continue();`);
33
+ })
34
+ .writeLine(`return false;`);
35
+ })
36
+ .blankLine();
37
+ }
15
38
  function addConstructor(writer, outboxModelName) {
16
39
  writer
17
40
  .writeLine(`constructor(client: PrismaIDBClient, keyPath: string[])`)
@@ -22,10 +45,12 @@ function addConstructor(writer, outboxModelName) {
22
45
  }
23
46
  function addCreateMethod(writer, outboxModelName) {
24
47
  writer
25
- .writeLine(`async create(query: { data: Pick<OutboxEventRecord, "entityType" | "operation" | "payload"> }): Promise<OutboxEventRecord>`)
48
+ .write(`async create(query: { data: Pick<OutboxEventRecord, `)
49
+ .write(`"entityType" | "operation" | "payload"`)
50
+ .write(`> }, options?: { tx?: IDBUtils.ReadwriteTransactionType, silent?: boolean }): Promise<OutboxEventRecord>`)
26
51
  .block(() => {
27
52
  writer
28
- .writeLine(`const tx = this.client._db.transaction("${outboxModelName}", "readwrite");`)
53
+ .writeLine(`const tx = options?.tx ?? this.client._db.transaction(["${outboxModelName}"], "readwrite");`)
29
54
  .writeLine(`const store = tx.objectStore("${outboxModelName}");`)
30
55
  .blankLine()
31
56
  .writeLine(`const event: OutboxEventRecord = {`)
@@ -33,14 +58,16 @@ function addCreateMethod(writer, outboxModelName) {
33
58
  .writeLine(`createdAt: new Date(),`)
34
59
  .writeLine(`synced: false,`)
35
60
  .writeLine(`syncedAt: null,`)
61
+ .writeLine(`lastAttemptedAt: null,`)
36
62
  .writeLine(`tries: 0,`)
37
63
  .writeLine(`lastError: null,`)
38
64
  .writeLine(`retryable: true,`)
39
65
  .writeLine(`...query.data,`)
40
66
  .writeLine(`};`)
41
- .blankLine()
42
67
  .writeLine(`await store.add(event);`)
43
- .writeLine(`await tx.done;`)
68
+ .blankLine()
69
+ .writeLine(`this.emit("create", [event.id], undefined, event, { silent: options?.silent ?? false, addToOutbox: false, tx });`)
70
+ .writeLine(`if (!options?.tx) await tx.done;`)
44
71
  .blankLine()
45
72
  .writeLine(`return event;`);
46
73
  })
@@ -52,7 +79,7 @@ function addGetNextBatchMethod(writer, outboxModelName) {
52
79
  .block(() => {
53
80
  writer
54
81
  .writeLine(`const limit = options?.limit ?? 20;`)
55
- .writeLine(`const tx = this.client._db.transaction("${outboxModelName}", "readonly");`)
82
+ .writeLine(`const tx = this.client._db.transaction(["${outboxModelName}"], "readonly");`)
56
83
  .writeLine(`const store = tx.objectStore("${outboxModelName}");`)
57
84
  .blankLine()
58
85
  .writeLine(`// Get all unsynced events, ordered by createdAt`)
@@ -65,21 +92,24 @@ function addGetNextBatchMethod(writer, outboxModelName) {
65
92
  }
66
93
  function addMarkSyncedMethod(writer, outboxModelName) {
67
94
  writer
68
- .writeLine(`async markSynced(appliedLogs: { id: string; lastAppliedChangeId: string | null }[]): Promise<void>`)
95
+ .write(`async markSynced(appliedLogs: { id: string; lastAppliedChangeId: string | null }[], options?: { tx?: IDBUtils.ReadwriteTransactionType, silent?: boolean }): Promise<void>`)
69
96
  .block(() => {
70
97
  writer
71
98
  .writeLine(`const syncedAt = new Date();`)
72
- .writeLine(`const tx = this.client._db.transaction(["${outboxModelName}", "VersionMeta"], "readwrite");`)
99
+ .writeLine(`const tx = options?.tx ?? this.client._db.transaction(["${outboxModelName}", "VersionMeta"], "readwrite");`)
73
100
  .writeLine(`const store = tx.objectStore("${outboxModelName}");`)
74
101
  .blankLine()
75
102
  .writeLine(`for (const log of appliedLogs) {`)
76
103
  .writeLine(`const event = await store.get([log.id]);`)
77
104
  .writeLine(`if (event) {`)
78
- .writeLine(`await store.put({`)
105
+ .writeLine(`const updatedEvent = {`)
79
106
  .writeLine(`...event,`)
80
107
  .writeLine(`synced: true,`)
81
108
  .writeLine(`syncedAt,`)
82
- .writeLine(`});`)
109
+ .writeLine(`lastAttemptedAt: syncedAt,`)
110
+ .writeLine(`};`)
111
+ .writeLine(`await store.put(updatedEvent);`)
112
+ .writeLine(`this.emit("update", [event.id], undefined, updatedEvent, { silent: options?.silent ?? false, addToOutbox: false, tx });`)
83
113
  .blankLine()
84
114
  .writeLine(`if (!(event.entityType in modelRecordToKeyPath)) {`)
85
115
  .writeLine(`throw new Error(\`Unknown model: \${event.entityType}\`);`)
@@ -97,29 +127,32 @@ function addMarkSyncedMethod(writer, outboxModelName) {
97
127
  .writeLine(`}`)
98
128
  .writeLine(`}`)
99
129
  .blankLine()
100
- .writeLine(`await tx.done;`);
130
+ .writeLine(`if (!options?.tx) await tx.done;`);
101
131
  })
102
132
  .blankLine();
103
133
  }
104
134
  function addMarkFailedMethod(writer, outboxModelName) {
105
135
  writer
106
- .writeLine(`async markFailed(eventId: string, error: NonNullable<PushResult['error']>): Promise<void>`)
136
+ .writeLine(`async markFailed(eventId: string, error: NonNullable<PushResult['error']>, options?: { tx?: IDBUtils.ReadwriteTransactionType, silent?: boolean }): Promise<void>`)
107
137
  .block(() => {
108
138
  writer
109
- .writeLine(`const tx = this.client._db.transaction("${outboxModelName}", "readwrite");`)
139
+ .writeLine(`const tx = options?.tx ?? this.client._db.transaction(["${outboxModelName}"], "readwrite");`)
110
140
  .writeLine(`const store = tx.objectStore("${outboxModelName}");`)
111
141
  .blankLine()
112
142
  .writeLine(`const event = await store.get([eventId]);`)
113
143
  .writeLine(`if (event) {`)
114
- .writeLine(`await store.put({`)
144
+ .writeLine(`const updatedEvent = {`)
115
145
  .writeLine(`...event,`)
116
146
  .writeLine(`tries: (event.tries ?? 0) + 1,`)
117
- .writeLine(`lastError: \`\${error.message}: \${error.message}\`,`)
147
+ .writeLine(`lastError: \`\${error.type ?? 'Error'}: \${error.message}\`,`)
148
+ .writeLine(`lastAttemptedAt: new Date(),`)
118
149
  .writeLine(`retryable: error.retryable,`)
119
- .writeLine(`});`)
150
+ .writeLine(`};`)
151
+ .writeLine(`await store.put(updatedEvent);`)
152
+ .writeLine(`this.emit("update", [event.id], undefined, updatedEvent, { silent: options?.silent ?? false, addToOutbox: false, tx });`)
120
153
  .writeLine(`}`)
121
154
  .blankLine()
122
- .writeLine(`await tx.done;`);
155
+ .writeLine(`if (!options?.tx) await tx.done;`);
123
156
  })
124
157
  .blankLine();
125
158
  }
@@ -128,7 +161,7 @@ function addStatsMethod(writer, outboxModelName) {
128
161
  .writeLine(`async stats(): Promise<{ unsynced: number; failed: number; lastError?: string }>`)
129
162
  .block(() => {
130
163
  writer
131
- .writeLine(`const tx = this.client._db.transaction("${outboxModelName}", "readonly");`)
164
+ .writeLine(`const tx = this.client._db.transaction(["${outboxModelName}"], "readonly");`)
132
165
  .writeLine(`const store = tx.objectStore("${outboxModelName}");`)
133
166
  .writeLine(`const allEvents = await store.getAll();`)
134
167
  .blankLine()
@@ -142,14 +175,14 @@ function addStatsMethod(writer, outboxModelName) {
142
175
  }
143
176
  function addClearSyncedMethod(writer, outboxModelName) {
144
177
  writer
145
- .writeLine(`async clearSynced(options?: { olderThanDays?: number }): Promise<number>`)
178
+ .writeLine(`async clearSynced(options?: { olderThanDays?: number, tx?: IDBUtils.ReadwriteTransactionType, silent?: boolean }): Promise<number>`)
146
179
  .block(() => {
147
180
  writer
148
181
  .writeLine(`const olderThanDays = options?.olderThanDays ?? 7;`)
149
182
  .writeLine(`const cutoffDate = new Date();`)
150
183
  .writeLine(`cutoffDate.setDate(cutoffDate.getDate() - olderThanDays);`)
151
184
  .blankLine()
152
- .writeLine(`const tx = this.client._db.transaction("${outboxModelName}", "readwrite");`)
185
+ .writeLine(`const tx = options?.tx ?? this.client._db.transaction(["${outboxModelName}"], "readwrite");`)
153
186
  .writeLine(`const store = tx.objectStore("${outboxModelName}");`)
154
187
  .writeLine(`const allEvents = await store.getAll();`)
155
188
  .blankLine()
@@ -157,11 +190,12 @@ function addClearSyncedMethod(writer, outboxModelName) {
157
190
  .writeLine(`for (const event of allEvents) {`)
158
191
  .writeLine(`if (event.synced && new Date(event.createdAt) < cutoffDate) {`)
159
192
  .writeLine(`await store.delete([event.id]);`)
193
+ .writeLine(`this.emit("delete", [event.id], undefined, event, { silent: options?.silent ?? false, addToOutbox: false, tx });`)
160
194
  .writeLine(`deletedCount++;`)
161
195
  .writeLine(`}`)
162
196
  .writeLine(`}`)
163
197
  .blankLine()
164
- .writeLine(`await tx.done;`)
198
+ .writeLine(`if (!options?.tx) await tx.done;`)
165
199
  .writeLine(`return deletedCount;`);
166
200
  })
167
201
  .blankLine();