@prisma-idb/idb-client-generator 0.19.1 → 0.21.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.
Files changed (105) hide show
  1. package/.release-it.json +3 -0
  2. package/LICENSE +661 -0
  3. package/dist/fileCreators/apply-pull/create.js +59 -0
  4. package/dist/fileCreators/apply-pull/create.js.map +1 -0
  5. package/dist/fileCreators/batch-processor/create.js +225 -0
  6. package/dist/fileCreators/batch-processor/create.js.map +1 -0
  7. package/dist/fileCreators/batch-processor/model-validator.js +31 -0
  8. package/dist/fileCreators/batch-processor/model-validator.js.map +1 -0
  9. package/dist/fileCreators/idb-interface/create.js +60 -18
  10. package/dist/fileCreators/idb-interface/create.js.map +1 -1
  11. package/dist/fileCreators/idb-utils/comparator/genericComparator.js +24 -26
  12. package/dist/fileCreators/idb-utils/comparator/genericComparator.js.map +1 -1
  13. package/dist/fileCreators/idb-utils/create.js +43 -60
  14. package/dist/fileCreators/idb-utils/create.js.map +1 -1
  15. package/dist/fileCreators/idb-utils/filters/BigIntFilter.js +26 -38
  16. package/dist/fileCreators/idb-utils/filters/BigIntFilter.js.map +1 -1
  17. package/dist/fileCreators/idb-utils/filters/BoolFilter.js +20 -32
  18. package/dist/fileCreators/idb-utils/filters/BoolFilter.js.map +1 -1
  19. package/dist/fileCreators/idb-utils/filters/BytesFilter.js +30 -42
  20. package/dist/fileCreators/idb-utils/filters/BytesFilter.js.map +1 -1
  21. package/dist/fileCreators/idb-utils/filters/DateTimeFilter.js +27 -39
  22. package/dist/fileCreators/idb-utils/filters/DateTimeFilter.js.map +1 -1
  23. package/dist/fileCreators/idb-utils/filters/NumberFilter.js +26 -38
  24. package/dist/fileCreators/idb-utils/filters/NumberFilter.js.map +1 -1
  25. package/dist/fileCreators/idb-utils/filters/StringFilter.js +29 -41
  26. package/dist/fileCreators/idb-utils/filters/StringFilter.js.map +1 -1
  27. package/dist/fileCreators/idb-utils/listFilters/BigIntListFilter.js +15 -24
  28. package/dist/fileCreators/idb-utils/listFilters/BigIntListFilter.js.map +1 -1
  29. package/dist/fileCreators/idb-utils/listFilters/BooleanListFilter.js +15 -24
  30. package/dist/fileCreators/idb-utils/listFilters/BooleanListFilter.js.map +1 -1
  31. package/dist/fileCreators/idb-utils/listFilters/BytesListFilter.js +15 -24
  32. package/dist/fileCreators/idb-utils/listFilters/BytesListFilter.js.map +1 -1
  33. package/dist/fileCreators/idb-utils/listFilters/DateTimeListFilter.js +15 -24
  34. package/dist/fileCreators/idb-utils/listFilters/DateTimeListFilter.js.map +1 -1
  35. package/dist/fileCreators/idb-utils/listFilters/NumberListFilter.js +15 -27
  36. package/dist/fileCreators/idb-utils/listFilters/NumberListFilter.js.map +1 -1
  37. package/dist/fileCreators/idb-utils/listFilters/StringListFilter.js +15 -24
  38. package/dist/fileCreators/idb-utils/listFilters/StringListFilter.js.map +1 -1
  39. package/dist/fileCreators/idb-utils/logicalFilters/applyLogicalFilters.js +8 -24
  40. package/dist/fileCreators/idb-utils/logicalFilters/applyLogicalFilters.js.map +1 -1
  41. package/dist/fileCreators/idb-utils/logicalFilters/intersectArraysByNestedKey.js +8 -16
  42. package/dist/fileCreators/idb-utils/logicalFilters/intersectArraysByNestedKey.js.map +1 -1
  43. package/dist/fileCreators/idb-utils/logicalFilters/removeDuplicatesByKeyPath.js +12 -22
  44. package/dist/fileCreators/idb-utils/logicalFilters/removeDuplicatesByKeyPath.js.map +1 -1
  45. package/dist/fileCreators/idb-utils/syncWorker/create.js +7 -0
  46. package/dist/fileCreators/idb-utils/syncWorker/create.js.map +1 -0
  47. package/dist/fileCreators/idb-utils/updateHandlers/BigIntHandler.js +40 -53
  48. package/dist/fileCreators/idb-utils/updateHandlers/BigIntHandler.js.map +1 -1
  49. package/dist/fileCreators/idb-utils/updateHandlers/BooleanHandler.js +13 -26
  50. package/dist/fileCreators/idb-utils/updateHandlers/BooleanHandler.js.map +1 -1
  51. package/dist/fileCreators/idb-utils/updateHandlers/BytesHandler.js +13 -26
  52. package/dist/fileCreators/idb-utils/updateHandlers/BytesHandler.js.map +1 -1
  53. package/dist/fileCreators/idb-utils/updateHandlers/DateTimeHandler.js +23 -32
  54. package/dist/fileCreators/idb-utils/updateHandlers/DateTimeHandler.js.map +1 -1
  55. package/dist/fileCreators/idb-utils/updateHandlers/EnumHandler.js +13 -26
  56. package/dist/fileCreators/idb-utils/updateHandlers/EnumHandler.js.map +1 -1
  57. package/dist/fileCreators/idb-utils/updateHandlers/FloatHandler.js +30 -43
  58. package/dist/fileCreators/idb-utils/updateHandlers/FloatHandler.js.map +1 -1
  59. package/dist/fileCreators/idb-utils/updateHandlers/IntHandler.js +30 -43
  60. package/dist/fileCreators/idb-utils/updateHandlers/IntHandler.js.map +1 -1
  61. package/dist/fileCreators/idb-utils/updateHandlers/ScalarListHandler.js +21 -32
  62. package/dist/fileCreators/idb-utils/updateHandlers/ScalarListHandler.js.map +1 -1
  63. package/dist/fileCreators/idb-utils/updateHandlers/StringHandler.js +13 -26
  64. package/dist/fileCreators/idb-utils/updateHandlers/StringHandler.js.map +1 -1
  65. package/dist/fileCreators/outbox/utils.js +17 -0
  66. package/dist/fileCreators/outbox/utils.js.map +1 -0
  67. package/dist/fileCreators/prisma-idb-client/classes/BaseIDBModelClass.js +36 -11
  68. package/dist/fileCreators/prisma-idb-client/classes/BaseIDBModelClass.js.map +1 -1
  69. package/dist/fileCreators/prisma-idb-client/classes/OutboxEventIDBClass.js +153 -0
  70. package/dist/fileCreators/prisma-idb-client/classes/OutboxEventIDBClass.js.map +1 -0
  71. package/dist/fileCreators/prisma-idb-client/classes/PrismaIDBClient.js +169 -4
  72. package/dist/fileCreators/prisma-idb-client/classes/PrismaIDBClient.js.map +1 -1
  73. package/dist/fileCreators/prisma-idb-client/classes/models/IDBModelClass.js +9 -0
  74. package/dist/fileCreators/prisma-idb-client/classes/models/IDBModelClass.js.map +1 -1
  75. package/dist/fileCreators/prisma-idb-client/classes/models/api/aggregate.js +3 -4
  76. package/dist/fileCreators/prisma-idb-client/classes/models/api/aggregate.js.map +1 -1
  77. package/dist/fileCreators/prisma-idb-client/classes/models/api/create.js +12 -11
  78. package/dist/fileCreators/prisma-idb-client/classes/models/api/create.js.map +1 -1
  79. package/dist/fileCreators/prisma-idb-client/classes/models/api/createMany.js +2 -1
  80. package/dist/fileCreators/prisma-idb-client/classes/models/api/createMany.js.map +1 -1
  81. package/dist/fileCreators/prisma-idb-client/classes/models/api/createManyAndReturn.js +2 -1
  82. package/dist/fileCreators/prisma-idb-client/classes/models/api/createManyAndReturn.js.map +1 -1
  83. package/dist/fileCreators/prisma-idb-client/classes/models/api/delete.js +2 -1
  84. package/dist/fileCreators/prisma-idb-client/classes/models/api/delete.js.map +1 -1
  85. package/dist/fileCreators/prisma-idb-client/classes/models/api/deleteMany.js +3 -2
  86. package/dist/fileCreators/prisma-idb-client/classes/models/api/deleteMany.js.map +1 -1
  87. package/dist/fileCreators/prisma-idb-client/classes/models/api/update.js +2 -1
  88. package/dist/fileCreators/prisma-idb-client/classes/models/api/update.js.map +1 -1
  89. package/dist/fileCreators/prisma-idb-client/classes/models/api/updateMany.js +3 -2
  90. package/dist/fileCreators/prisma-idb-client/classes/models/api/updateMany.js.map +1 -1
  91. package/dist/fileCreators/prisma-idb-client/classes/models/api/upsert.js +3 -2
  92. package/dist/fileCreators/prisma-idb-client/classes/models/api/upsert.js.map +1 -1
  93. package/dist/fileCreators/prisma-idb-client/create.js +19 -8
  94. package/dist/fileCreators/prisma-idb-client/create.js.map +1 -1
  95. package/dist/fileCreators/validators/create.js +35 -0
  96. package/dist/fileCreators/validators/create.js.map +1 -0
  97. package/dist/generator.js +25 -12
  98. package/dist/generator.js.map +1 -1
  99. package/dist/helpers/fileWriting.js +0 -8
  100. package/dist/helpers/fileWriting.js.map +1 -1
  101. package/dist/helpers/parseGeneratorConfig.js +103 -0
  102. package/dist/helpers/parseGeneratorConfig.js.map +1 -0
  103. package/dist/helpers/utils.js +21 -11
  104. package/dist/helpers/utils.js.map +1 -1
  105. package/package.json +22 -22
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.addIntUpdateHandler = addIntUpdateHandler;
4
- function addIntUpdateHandler(utilsFile, models) {
4
+ function addIntUpdateHandler(writer, models) {
5
5
  const intFields = models.flatMap(({ fields }) => fields).filter((field) => field.type === "Int");
6
6
  if (intFields.length === 0)
7
7
  return;
@@ -16,48 +16,35 @@ function addIntUpdateHandler(utilsFile, models) {
16
16
  updateOperationType += " | null | Prisma.NullableIntFieldUpdateOperationsInput";
17
17
  fieldType += " | null";
18
18
  }
19
- utilsFile.addFunction({
20
- name: "handleIntUpdateField",
21
- isExported: true,
22
- typeParameters: [{ name: "T" }, { name: "R", constraint: `Prisma.Result<T, object, "findFirstOrThrow">` }],
23
- parameters: [
24
- { name: "record", type: `R` },
25
- { name: "fieldName", type: "keyof R" },
26
- {
27
- name: "intUpdate",
28
- type: updateOperationType,
29
- },
30
- ],
31
- statements: (writer) => {
32
- writer
33
- .writeLine(`if (intUpdate === undefined) return;`)
34
- .write(`if (typeof intUpdate === "number"`)
35
- .conditionalWrite(nullableIntFieldPresent, ` || intUpdate === null`)
36
- .writeLine(`)`)
37
- .block(() => {
38
- writer.writeLine(`(record[fieldName] as ${fieldType}) = intUpdate;`);
39
- })
40
- .writeLine(`else if (intUpdate.set !== undefined)`)
41
- .block(() => {
42
- writer.writeLine(`(record[fieldName] as ${fieldType}) = intUpdate.set;`);
43
- })
44
- .writeLine(`else if (intUpdate.increment !== undefined && record[fieldName] !== null)`)
45
- .block(() => {
46
- writer.writeLine(`(record[fieldName] as number) += intUpdate.increment;`);
47
- })
48
- .writeLine(`else if (intUpdate.decrement !== undefined && record[fieldName] !== null)`)
49
- .block(() => {
50
- writer.writeLine(`(record[fieldName] as number) -= intUpdate.decrement;`);
51
- })
52
- .writeLine(`else if (intUpdate.multiply !== undefined && record[fieldName] !== null)`)
53
- .block(() => {
54
- writer.writeLine(`(record[fieldName] as number) *= intUpdate.multiply;`);
55
- })
56
- .writeLine(`else if (intUpdate.divide !== undefined && record[fieldName] !== null)`)
57
- .block(() => {
58
- writer.writeLine(`(record[fieldName] as number) /= intUpdate.divide;`);
59
- });
60
- },
19
+ writer
20
+ .writeLine(`export function handleIntUpdateField<T, R extends Prisma.Result<T, object, "findFirstOrThrow">>(record: R, fieldName: keyof R, intUpdate: ${updateOperationType}): void`)
21
+ .block(() => {
22
+ writer
23
+ .writeLine(`if (intUpdate === undefined) return;`)
24
+ .writeLine(`if (typeof intUpdate === "number"${nullableIntFieldPresent ? ` || intUpdate === null` : ""})`)
25
+ .block(() => {
26
+ writer.writeLine(`(record[fieldName] as ${fieldType}) = intUpdate;`);
27
+ })
28
+ .writeLine(`else if (intUpdate.set !== undefined)`)
29
+ .block(() => {
30
+ writer.writeLine(`(record[fieldName] as ${fieldType}) = intUpdate.set;`);
31
+ })
32
+ .writeLine(`else if (intUpdate.increment !== undefined && record[fieldName] !== null)`)
33
+ .block(() => {
34
+ writer.writeLine(`(record[fieldName] as number) += intUpdate.increment;`);
35
+ })
36
+ .writeLine(`else if (intUpdate.decrement !== undefined && record[fieldName] !== null)`)
37
+ .block(() => {
38
+ writer.writeLine(`(record[fieldName] as number) -= intUpdate.decrement;`);
39
+ })
40
+ .writeLine(`else if (intUpdate.multiply !== undefined && record[fieldName] !== null)`)
41
+ .block(() => {
42
+ writer.writeLine(`(record[fieldName] as number) *= intUpdate.multiply;`);
43
+ })
44
+ .writeLine(`else if (intUpdate.divide !== undefined && record[fieldName] !== null)`)
45
+ .block(() => {
46
+ writer.writeLine(`(record[fieldName] as number) /= intUpdate.divide;`);
47
+ });
61
48
  });
62
49
  }
63
50
  //# sourceMappingURL=IntHandler.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"IntHandler.js","sourceRoot":"","sources":["../../../../src/fileCreators/idb-utils/updateHandlers/IntHandler.ts"],"names":[],"mappings":";;AAGA,kDA6DC;AA7DD,SAAgB,mBAAmB,CAAC,SAAqB,EAAE,MAAwB;IACjF,MAAM,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC;IACjG,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IAEnC,IAAI,mBAAmB,GAAG,oBAAoB,CAAC;IAC/C,IAAI,SAAS,GAAG,QAAQ,CAAC;IAEzB,MAAM,0BAA0B,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC;IAClF,MAAM,uBAAuB,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,CAAC,UAAU,CAAC,CAAC;IAEhF,IAAI,0BAA0B,EAAE,CAAC;QAC/B,mBAAmB,IAAI,yCAAyC,CAAC;IACnE,CAAC;IACD,IAAI,uBAAuB,EAAE,CAAC;QAC5B,mBAAmB,IAAI,wDAAwD,CAAC;QAChF,SAAS,IAAI,SAAS,CAAC;IACzB,CAAC;IAED,SAAS,CAAC,WAAW,CAAC;QACpB,IAAI,EAAE,sBAAsB;QAC5B,UAAU,EAAE,IAAI;QAChB,cAAc,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,UAAU,EAAE,8CAA8C,EAAE,CAAC;QAC1G,UAAU,EAAE;YACV,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,EAAE;YAC7B,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,SAAS,EAAE;YACtC;gBACE,IAAI,EAAE,WAAW;gBACjB,IAAI,EAAE,mBAAmB;aAC1B;SACF;QACD,UAAU,EAAE,CAAC,MAAM,EAAE,EAAE;YACrB,MAAM;iBACH,SAAS,CAAC,sCAAsC,CAAC;iBACjD,KAAK,CAAC,mCAAmC,CAAC;iBAC1C,gBAAgB,CAAC,uBAAuB,EAAE,wBAAwB,CAAC;iBACnE,SAAS,CAAC,GAAG,CAAC;iBACd,KAAK,CAAC,GAAG,EAAE;gBACV,MAAM,CAAC,SAAS,CAAC,yBAAyB,SAAS,gBAAgB,CAAC,CAAC;YACvE,CAAC,CAAC;iBACD,SAAS,CAAC,uCAAuC,CAAC;iBAClD,KAAK,CAAC,GAAG,EAAE;gBACV,MAAM,CAAC,SAAS,CAAC,yBAAyB,SAAS,oBAAoB,CAAC,CAAC;YAC3E,CAAC,CAAC;iBACD,SAAS,CAAC,2EAA2E,CAAC;iBACtF,KAAK,CAAC,GAAG,EAAE;gBACV,MAAM,CAAC,SAAS,CAAC,uDAAuD,CAAC,CAAC;YAC5E,CAAC,CAAC;iBACD,SAAS,CAAC,2EAA2E,CAAC;iBACtF,KAAK,CAAC,GAAG,EAAE;gBACV,MAAM,CAAC,SAAS,CAAC,uDAAuD,CAAC,CAAC;YAC5E,CAAC,CAAC;iBACD,SAAS,CAAC,0EAA0E,CAAC;iBACrF,KAAK,CAAC,GAAG,EAAE;gBACV,MAAM,CAAC,SAAS,CAAC,sDAAsD,CAAC,CAAC;YAC3E,CAAC,CAAC;iBACD,SAAS,CAAC,wEAAwE,CAAC;iBACnF,KAAK,CAAC,GAAG,EAAE;gBACV,MAAM,CAAC,SAAS,CAAC,oDAAoD,CAAC,CAAC;YACzE,CAAC,CAAC,CAAC;QACP,CAAC;KACF,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"IntHandler.js","sourceRoot":"","sources":["../../../../src/fileCreators/idb-utils/updateHandlers/IntHandler.ts"],"names":[],"mappings":";;AAGA,kDAkDC;AAlDD,SAAgB,mBAAmB,CAAC,MAAuB,EAAE,MAAwB;IACnF,MAAM,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC;IACjG,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IAEnC,IAAI,mBAAmB,GAAG,oBAAoB,CAAC;IAC/C,IAAI,SAAS,GAAG,QAAQ,CAAC;IAEzB,MAAM,0BAA0B,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC;IAClF,MAAM,uBAAuB,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,CAAC,UAAU,CAAC,CAAC;IAEhF,IAAI,0BAA0B,EAAE,CAAC;QAC/B,mBAAmB,IAAI,yCAAyC,CAAC;IACnE,CAAC;IACD,IAAI,uBAAuB,EAAE,CAAC;QAC5B,mBAAmB,IAAI,wDAAwD,CAAC;QAChF,SAAS,IAAI,SAAS,CAAC;IACzB,CAAC;IAED,MAAM;SACH,SAAS,CACR,6IAA6I,mBAAmB,SAAS,CAC1K;SACA,KAAK,CAAC,GAAG,EAAE;QACV,MAAM;aACH,SAAS,CAAC,sCAAsC,CAAC;aACjD,SAAS,CAAC,oCAAoC,uBAAuB,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC;aACzG,KAAK,CAAC,GAAG,EAAE;YACV,MAAM,CAAC,SAAS,CAAC,yBAAyB,SAAS,gBAAgB,CAAC,CAAC;QACvE,CAAC,CAAC;aACD,SAAS,CAAC,uCAAuC,CAAC;aAClD,KAAK,CAAC,GAAG,EAAE;YACV,MAAM,CAAC,SAAS,CAAC,yBAAyB,SAAS,oBAAoB,CAAC,CAAC;QAC3E,CAAC,CAAC;aACD,SAAS,CAAC,2EAA2E,CAAC;aACtF,KAAK,CAAC,GAAG,EAAE;YACV,MAAM,CAAC,SAAS,CAAC,uDAAuD,CAAC,CAAC;QAC5E,CAAC,CAAC;aACD,SAAS,CAAC,2EAA2E,CAAC;aACtF,KAAK,CAAC,GAAG,EAAE;YACV,MAAM,CAAC,SAAS,CAAC,uDAAuD,CAAC,CAAC;QAC5E,CAAC,CAAC;aACD,SAAS,CAAC,0EAA0E,CAAC;aACrF,KAAK,CAAC,GAAG,EAAE;YACV,MAAM,CAAC,SAAS,CAAC,sDAAsD,CAAC,CAAC;QAC3E,CAAC,CAAC;aACD,SAAS,CAAC,wEAAwE,CAAC;aACnF,KAAK,CAAC,GAAG,EAAE;YACV,MAAM,CAAC,SAAS,CAAC,oDAAoD,CAAC,CAAC;QACzE,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -1,48 +1,37 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.addScalarListUpdateHandler = addScalarListUpdateHandler;
4
- function addScalarListUpdateHandler(utilsFile, models) {
4
+ function addScalarListUpdateHandler(writer, models) {
5
5
  const scalarListFields = models
6
6
  .flatMap(({ fields }) => fields)
7
7
  .filter((field) => field.isList && field.kind !== "object");
8
8
  if (scalarListFields.length === 0)
9
9
  return;
10
- utilsFile.addFunction({
11
- name: "handleScalarListUpdateField",
12
- isExported: true,
13
- typeParameters: [{ name: "T" }, { name: "R", constraint: `Prisma.Result<T, object, "findFirstOrThrow">` }],
14
- parameters: [
15
- { name: "record", type: `R` },
16
- { name: "fieldName", type: "keyof R" },
17
- {
18
- name: "listUpdate",
19
- type: "undefined | unknown[] | { set?: unknown[]; push?: unknown | unknown[] }",
20
- },
21
- ],
22
- statements: (writer) => {
10
+ writer
11
+ .writeLine(`export function handleScalarListUpdateField<T, R extends Prisma.Result<T, object, "findFirstOrThrow">>(record: R, fieldName: keyof R, listUpdate: undefined | unknown[] | { set?: unknown[]; push?: unknown | unknown[] }): void`)
12
+ .block(() => {
13
+ writer
14
+ .writeLine(`if (listUpdate === undefined) return;`)
15
+ .writeLine(`if (Array.isArray(listUpdate))`)
16
+ .block(() => {
17
+ writer.writeLine(`(record[fieldName] as unknown[] | undefined) = listUpdate;`);
18
+ })
19
+ .writeLine(`else if (listUpdate.set !== undefined)`)
20
+ .block(() => {
21
+ writer.writeLine(`(record[fieldName] as unknown[] | undefined) = listUpdate.set;`);
22
+ })
23
+ .writeLine(`else if (listUpdate.push !== undefined)`)
24
+ .block(() => {
23
25
  writer
24
- .writeLine(`if (listUpdate === undefined) return;`)
25
- .write(`if (Array.isArray(listUpdate))`)
26
+ .writeLine(`if (Array.isArray(record[fieldName]))`)
26
27
  .block(() => {
27
- writer.writeLine(`(record[fieldName] as unknown[] | undefined) = listUpdate;`);
28
+ writer.writeLine(`record[fieldName].push(...convertToArray(listUpdate.push));`);
28
29
  })
29
- .writeLine(`else if (listUpdate.set !== undefined)`)
30
+ .writeLine(`else`)
30
31
  .block(() => {
31
- writer.writeLine(`(record[fieldName] as unknown[] | undefined) = listUpdate.set;`);
32
- })
33
- .writeLine(`else if (listUpdate.push !== undefined)`)
34
- .block(() => {
35
- writer
36
- .writeLine(`if (Array.isArray(record[fieldName]))`)
37
- .block(() => {
38
- writer.writeLine(`record[fieldName].push(...convertToArray(listUpdate.push));`);
39
- })
40
- .writeLine(`else`)
41
- .block(() => {
42
- writer.writeLine(`(record[fieldName] as unknown[]) = convertToArray(listUpdate.push);`);
43
- });
32
+ writer.writeLine(`(record[fieldName] as unknown[]) = convertToArray(listUpdate.push);`);
44
33
  });
45
- },
34
+ });
46
35
  });
47
36
  }
48
37
  //# sourceMappingURL=ScalarListHandler.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ScalarListHandler.js","sourceRoot":"","sources":["../../../../src/fileCreators/idb-utils/updateHandlers/ScalarListHandler.ts"],"names":[],"mappings":";;AAGA,gEA2CC;AA3CD,SAAgB,0BAA0B,CAAC,SAAqB,EAAE,MAAwB;IACxF,MAAM,gBAAgB,GAAG,MAAM;SAC5B,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC;SAC/B,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC;IAC9D,IAAI,gBAAgB,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IAE1C,SAAS,CAAC,WAAW,CAAC;QACpB,IAAI,EAAE,6BAA6B;QACnC,UAAU,EAAE,IAAI;QAChB,cAAc,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,UAAU,EAAE,8CAA8C,EAAE,CAAC;QAC1G,UAAU,EAAE;YACV,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,EAAE;YAC7B,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,SAAS,EAAE;YACtC;gBACE,IAAI,EAAE,YAAY;gBAClB,IAAI,EAAE,yEAAyE;aAChF;SACF;QACD,UAAU,EAAE,CAAC,MAAM,EAAE,EAAE;YACrB,MAAM;iBACH,SAAS,CAAC,uCAAuC,CAAC;iBAClD,KAAK,CAAC,gCAAgC,CAAC;iBACvC,KAAK,CAAC,GAAG,EAAE;gBACV,MAAM,CAAC,SAAS,CAAC,4DAA4D,CAAC,CAAC;YACjF,CAAC,CAAC;iBACD,SAAS,CAAC,wCAAwC,CAAC;iBACnD,KAAK,CAAC,GAAG,EAAE;gBACV,MAAM,CAAC,SAAS,CAAC,gEAAgE,CAAC,CAAC;YACrF,CAAC,CAAC;iBACD,SAAS,CAAC,yCAAyC,CAAC;iBACpD,KAAK,CAAC,GAAG,EAAE;gBACV,MAAM;qBACH,SAAS,CAAC,uCAAuC,CAAC;qBAClD,KAAK,CAAC,GAAG,EAAE;oBACV,MAAM,CAAC,SAAS,CAAC,6DAA6D,CAAC,CAAC;gBAClF,CAAC,CAAC;qBACD,SAAS,CAAC,MAAM,CAAC;qBACjB,KAAK,CAAC,GAAG,EAAE;oBACV,MAAM,CAAC,SAAS,CAAC,qEAAqE,CAAC,CAAC;gBAC1F,CAAC,CAAC,CAAC;YACP,CAAC,CAAC,CAAC;QACP,CAAC;KACF,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"ScalarListHandler.js","sourceRoot":"","sources":["../../../../src/fileCreators/idb-utils/updateHandlers/ScalarListHandler.ts"],"names":[],"mappings":";;AAGA,gEAkCC;AAlCD,SAAgB,0BAA0B,CAAC,MAAuB,EAAE,MAAwB;IAC1F,MAAM,gBAAgB,GAAG,MAAM;SAC5B,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC;SAC/B,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC;IAC9D,IAAI,gBAAgB,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IAE1C,MAAM;SACH,SAAS,CACR,kOAAkO,CACnO;SACA,KAAK,CAAC,GAAG,EAAE;QACV,MAAM;aACH,SAAS,CAAC,uCAAuC,CAAC;aAClD,SAAS,CAAC,gCAAgC,CAAC;aAC3C,KAAK,CAAC,GAAG,EAAE;YACV,MAAM,CAAC,SAAS,CAAC,4DAA4D,CAAC,CAAC;QACjF,CAAC,CAAC;aACD,SAAS,CAAC,wCAAwC,CAAC;aACnD,KAAK,CAAC,GAAG,EAAE;YACV,MAAM,CAAC,SAAS,CAAC,gEAAgE,CAAC,CAAC;QACrF,CAAC,CAAC;aACD,SAAS,CAAC,yCAAyC,CAAC;aACpD,KAAK,CAAC,GAAG,EAAE;YACV,MAAM;iBACH,SAAS,CAAC,uCAAuC,CAAC;iBAClD,KAAK,CAAC,GAAG,EAAE;gBACV,MAAM,CAAC,SAAS,CAAC,6DAA6D,CAAC,CAAC;YAClF,CAAC,CAAC;iBACD,SAAS,CAAC,MAAM,CAAC;iBACjB,KAAK,CAAC,GAAG,EAAE;gBACV,MAAM,CAAC,SAAS,CAAC,qEAAqE,CAAC,CAAC;YAC1F,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.addStringUpdateHandler = addStringUpdateHandler;
4
- function addStringUpdateHandler(utilsFile, models) {
4
+ function addStringUpdateHandler(writer, models) {
5
5
  const stringFields = models.flatMap(({ fields }) => fields).filter((field) => field.type === "String");
6
6
  if (stringFields.length === 0)
7
7
  return;
@@ -16,31 +16,18 @@ function addStringUpdateHandler(utilsFile, models) {
16
16
  updateOperationType += " | null | Prisma.NullableStringFieldUpdateOperationsInput";
17
17
  fieldType += " | null";
18
18
  }
19
- utilsFile.addFunction({
20
- name: "handleStringUpdateField",
21
- isExported: true,
22
- typeParameters: [{ name: "T" }, { name: "R", constraint: `Prisma.Result<T, object, "findFirstOrThrow">` }],
23
- parameters: [
24
- { name: "record", type: `R` },
25
- { name: "fieldName", type: "keyof R" },
26
- {
27
- name: "stringUpdate",
28
- type: updateOperationType,
29
- },
30
- ],
31
- statements: (writer) => {
32
- writer
33
- .writeLine(`if (stringUpdate === undefined) return;`)
34
- .write(`if (typeof stringUpdate === "string"`)
35
- .conditionalWrite(nullableStringFieldPresent, ` || stringUpdate === null`)
36
- .writeLine(`)`)
37
- .block(() => {
38
- writer.writeLine(`(record[fieldName] as ${fieldType}) = stringUpdate;`);
39
- });
40
- writer.writeLine(`else if (stringUpdate.set !== undefined)`).block(() => {
41
- writer.writeLine(`(record[fieldName] as ${fieldType}) = stringUpdate.set;`);
42
- });
43
- },
19
+ writer
20
+ .writeLine(`export function handleStringUpdateField<T, R extends Prisma.Result<T, object, "findFirstOrThrow">>(record: R, fieldName: keyof R, stringUpdate: ${updateOperationType}): void`)
21
+ .block(() => {
22
+ writer
23
+ .writeLine(`if (stringUpdate === undefined) return;`)
24
+ .writeLine(`if (typeof stringUpdate === "string"${nullableStringFieldPresent ? ` || stringUpdate === null` : ""})`)
25
+ .block(() => {
26
+ writer.writeLine(`(record[fieldName] as ${fieldType}) = stringUpdate;`);
27
+ });
28
+ writer.writeLine(`else if (stringUpdate.set !== undefined)`).block(() => {
29
+ writer.writeLine(`(record[fieldName] as ${fieldType}) = stringUpdate.set;`);
30
+ });
44
31
  });
45
32
  }
46
33
  //# sourceMappingURL=StringHandler.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"StringHandler.js","sourceRoot":"","sources":["../../../../src/fileCreators/idb-utils/updateHandlers/StringHandler.ts"],"names":[],"mappings":";;AAGA,wDA4CC;AA5CD,SAAgB,sBAAsB,CAAC,SAAqB,EAAE,MAAwB;IACpF,MAAM,YAAY,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC;IACvG,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IAEtC,IAAI,mBAAmB,GAAG,oBAAoB,CAAC;IAC/C,IAAI,SAAS,GAAG,QAAQ,CAAC;IAEzB,MAAM,6BAA6B,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC;IACxF,MAAM,0BAA0B,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,CAAC,UAAU,CAAC,CAAC;IAEtF,IAAI,6BAA6B,EAAE,CAAC;QAClC,mBAAmB,IAAI,4CAA4C,CAAC;IACtE,CAAC;IACD,IAAI,0BAA0B,EAAE,CAAC;QAC/B,mBAAmB,IAAI,2DAA2D,CAAC;QACnF,SAAS,IAAI,SAAS,CAAC;IACzB,CAAC;IAED,SAAS,CAAC,WAAW,CAAC;QACpB,IAAI,EAAE,yBAAyB;QAC/B,UAAU,EAAE,IAAI;QAChB,cAAc,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,UAAU,EAAE,8CAA8C,EAAE,CAAC;QAC1G,UAAU,EAAE;YACV,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,EAAE;YAC7B,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,SAAS,EAAE;YACtC;gBACE,IAAI,EAAE,cAAc;gBACpB,IAAI,EAAE,mBAAmB;aAC1B;SACF;QACD,UAAU,EAAE,CAAC,MAAM,EAAE,EAAE;YACrB,MAAM;iBACH,SAAS,CAAC,yCAAyC,CAAC;iBACpD,KAAK,CAAC,sCAAsC,CAAC;iBAC7C,gBAAgB,CAAC,0BAA0B,EAAE,2BAA2B,CAAC;iBACzE,SAAS,CAAC,GAAG,CAAC;iBACd,KAAK,CAAC,GAAG,EAAE;gBACV,MAAM,CAAC,SAAS,CAAC,yBAAyB,SAAS,mBAAmB,CAAC,CAAC;YAC1E,CAAC,CAAC,CAAC;YACL,MAAM,CAAC,SAAS,CAAC,0CAA0C,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;gBACtE,MAAM,CAAC,SAAS,CAAC,yBAAyB,SAAS,uBAAuB,CAAC,CAAC;YAC9E,CAAC,CAAC,CAAC;QACL,CAAC;KACF,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"StringHandler.js","sourceRoot":"","sources":["../../../../src/fileCreators/idb-utils/updateHandlers/StringHandler.ts"],"names":[],"mappings":";;AAGA,wDAmCC;AAnCD,SAAgB,sBAAsB,CAAC,MAAuB,EAAE,MAAwB;IACtF,MAAM,YAAY,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC;IACvG,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IAEtC,IAAI,mBAAmB,GAAG,oBAAoB,CAAC;IAC/C,IAAI,SAAS,GAAG,QAAQ,CAAC;IAEzB,MAAM,6BAA6B,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC;IACxF,MAAM,0BAA0B,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,CAAC,UAAU,CAAC,CAAC;IAEtF,IAAI,6BAA6B,EAAE,CAAC;QAClC,mBAAmB,IAAI,4CAA4C,CAAC;IACtE,CAAC;IACD,IAAI,0BAA0B,EAAE,CAAC;QAC/B,mBAAmB,IAAI,2DAA2D,CAAC;QACnF,SAAS,IAAI,SAAS,CAAC;IACzB,CAAC;IAED,MAAM;SACH,SAAS,CACR,mJAAmJ,mBAAmB,SAAS,CAChL;SACA,KAAK,CAAC,GAAG,EAAE;QACV,MAAM;aACH,SAAS,CAAC,yCAAyC,CAAC;aACpD,SAAS,CACR,uCAAuC,0BAA0B,CAAC,CAAC,CAAC,2BAA2B,CAAC,CAAC,CAAC,EAAE,GAAG,CACxG;aACA,KAAK,CAAC,GAAG,EAAE;YACV,MAAM,CAAC,SAAS,CAAC,yBAAyB,SAAS,mBAAmB,CAAC,CAAC;QAC1E,CAAC,CAAC,CAAC;QACL,MAAM,CAAC,SAAS,CAAC,0CAA0C,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;YACtE,MAAM,CAAC,SAAS,CAAC,yBAAyB,SAAS,uBAAuB,CAAC,CAAC;QAC9E,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.shouldTrackModel = shouldTrackModel;
4
+ exports.toCamelCase = toCamelCase;
5
+ function shouldTrackModel(modelName, include, exclude) {
6
+ if (include.length > 0 && include[0] !== "*") {
7
+ return include.includes(modelName);
8
+ }
9
+ if (exclude.length > 0) {
10
+ return !exclude.includes(modelName);
11
+ }
12
+ return true;
13
+ }
14
+ function toCamelCase(str) {
15
+ return str.charAt(0).toLowerCase() + str.slice(1);
16
+ }
17
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/fileCreators/outbox/utils.ts"],"names":[],"mappings":";;AAIA,4CAaC;AAKD,kCAEC;AApBD,SAAgB,gBAAgB,CAAC,SAAiB,EAAE,OAAiB,EAAE,OAAiB;IAEtF,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;QAC7C,OAAO,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;IACrC,CAAC;IAGD,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;IACtC,CAAC;IAGD,OAAO,IAAI,CAAC;AACd,CAAC;AAKD,SAAgB,WAAW,CAAC,GAAW;IACrC,OAAO,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACpD,CAAC"}
@@ -1,31 +1,37 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.addBaseModelClass = addBaseModelClass;
4
- function addBaseModelClass(writer) {
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;`)
8
8
  .writeLine(`protected keyPath: string[];`)
9
+ .writeLine(`protected modelName: string;`)
9
10
  .writeLine(`private eventEmitter: EventTarget;`)
10
11
  .blankLine();
11
- writer.writeLine(`constructor(client: PrismaIDBClient, keyPath: string[])`).block(() => {
12
+ writer.writeLine(`constructor(client: PrismaIDBClient, keyPath: string[], modelName: string)`).block(() => {
12
13
  writer
13
14
  .writeLine(`this.client = client;`)
14
15
  .writeLine(`this.keyPath = keyPath;`)
16
+ .writeLine(`this.modelName = modelName;`)
15
17
  .writeLine(`this.eventEmitter = new EventTarget();`);
16
18
  });
17
- addEventEmitters(writer);
19
+ addEventEmitters(writer, outboxSync);
18
20
  });
19
21
  }
20
- function addEventEmitters(writer) {
22
+ function addEventEmitters(writer, outboxSync) {
21
23
  writer
22
24
  .writeLine(`subscribe(event: "create" | "update" | "delete" | ("create" | "update" | "delete")[], callback: (e: CustomEventInit<{ keyPath: PrismaIDBSchema[T]["key"]; oldKeyPath?: PrismaIDBSchema[T]["key"] }>) => void)`)
23
25
  .block(() => {
24
- writer.writeLine(`if (Array.isArray(event))`).block(() => {
26
+ writer
27
+ .writeLine(`if (Array.isArray(event))`)
28
+ .block(() => {
25
29
  writer.writeLine(`event.forEach((event) => this.eventEmitter.addEventListener(event, callback));`);
26
- writer.writeLine(`return;`);
30
+ })
31
+ .writeLine(`else`)
32
+ .block(() => {
33
+ writer.writeLine(`this.eventEmitter.addEventListener(event, callback);`);
27
34
  });
28
- writer.writeLine(`this.eventEmitter.addEventListener(event, callback);`);
29
35
  });
30
36
  writer
31
37
  .writeLine(`unsubscribe(event: "create" | "update" | "delete" | ("create" | "update" | "delete")[], callback: (e: CustomEventInit<{ keyPath: PrismaIDBSchema[T]["key"]; oldKeyPath?: PrismaIDBSchema[T]["key"] }>) => void)`)
@@ -37,13 +43,32 @@ function addEventEmitters(writer) {
37
43
  writer.writeLine(`this.eventEmitter.removeEventListener(event, callback);`);
38
44
  });
39
45
  writer
40
- .writeLine(`protected emit(event: "create" | "update" | "delete", keyPath: PrismaIDBSchema[T]["key"], oldKeyPath?: PrismaIDBSchema[T]["key"])`)
46
+ .writeLine(`protected async emit(event: "create" | "update" | "delete", keyPath: PrismaIDBSchema[T]["key"], oldKeyPath?: PrismaIDBSchema[T]["key"], record?: unknown, silent?: boolean)`)
41
47
  .block(() => {
42
- writer.writeLine(`if (event === "update")`).block(() => {
48
+ writer.writeLine(`if (silent) return;`).blankLine();
49
+ writer
50
+ .writeLine(`if (event === "update")`)
51
+ .block(() => {
43
52
  writer.writeLine(`this.eventEmitter.dispatchEvent(new CustomEvent(event, { detail: { keyPath, oldKeyPath } }));`);
44
- writer.writeLine(`return;`);
53
+ })
54
+ .writeLine(`else`)
55
+ .block(() => {
56
+ writer.writeLine(`this.eventEmitter.dispatchEvent(new CustomEvent(event, { detail: { keyPath } }));`);
57
+ });
58
+ if (!outboxSync)
59
+ return;
60
+ writer.blankLine();
61
+ writer.writeLine(`if (this.client.shouldTrackModel(this.modelName))`).block(() => {
62
+ writer
63
+ .writeLine(`await this.client.$outbox.create({`)
64
+ .writeLine(`data: {`)
65
+ .writeLine(`entityType: this.modelName,`)
66
+ .writeLine(`entityKeyPath: keyPath as Array<string | number>,`)
67
+ .writeLine(`operation: event,`)
68
+ .writeLine(`payload: record ?? keyPath,`)
69
+ .writeLine(`}`)
70
+ .writeLine(`});`);
45
71
  });
46
- writer.writeLine(`this.eventEmitter.dispatchEvent(new CustomEvent(event, { detail: { keyPath } }));`);
47
72
  });
48
73
  }
49
74
  //# sourceMappingURL=BaseIDBModelClass.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"BaseIDBModelClass.js","sourceRoot":"","sources":["../../../../src/fileCreators/prisma-idb-client/classes/BaseIDBModelClass.ts"],"names":[],"mappings":";;AAEA,8CAiBC;AAjBD,SAAgB,iBAAiB,CAAC,MAAuB;IACvD,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,oCAAoC,CAAC;aAC/C,SAAS,EAAE,CAAC;QAEf,MAAM,CAAC,SAAS,CAAC,yDAAyD,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;YACrF,MAAM;iBACH,SAAS,CAAC,uBAAuB,CAAC;iBAClC,SAAS,CAAC,yBAAyB,CAAC;iBACpC,SAAS,CAAC,wCAAwC,CAAC,CAAC;QACzD,CAAC,CAAC,CAAC;QAEH,gBAAgB,CAAC,MAAM,CAAC,CAAC;IAC3B,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,gBAAgB,CAAC,MAAuB;IAC/C,MAAM;SACH,SAAS,CACR,+MAA+M,CAChN;SACA,KAAK,CAAC,GAAG,EAAE;QACV,MAAM,CAAC,SAAS,CAAC,2BAA2B,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;YACvD,MAAM,CAAC,SAAS,CAAC,gFAAgF,CAAC,CAAC;YACnG,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QAC9B,CAAC,CAAC,CAAC;QACH,MAAM,CAAC,SAAS,CAAC,sDAAsD,CAAC,CAAC;IAC3E,CAAC,CAAC,CAAC;IAEL,MAAM;SACH,SAAS,CACR,iNAAiN,CAClN;SACA,KAAK,CAAC,GAAG,EAAE;QACV,MAAM,CAAC,SAAS,CAAC,2BAA2B,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;YACvD,MAAM,CAAC,SAAS,CAAC,mFAAmF,CAAC,CAAC;YACtG,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QAC9B,CAAC,CAAC,CAAC;QACH,MAAM,CAAC,SAAS,CAAC,yDAAyD,CAAC,CAAC;IAC9E,CAAC,CAAC,CAAC;IAEL,MAAM;SACH,SAAS,CACR,mIAAmI,CACpI;SACA,KAAK,CAAC,GAAG,EAAE;QACV,MAAM,CAAC,SAAS,CAAC,yBAAyB,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;YACrD,MAAM,CAAC,SAAS,CACd,+FAA+F,CAChG,CAAC;YACF,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QAC9B,CAAC,CAAC,CAAC;QACH,MAAM,CAAC,SAAS,CAAC,mFAAmF,CAAC,CAAC;IACxG,CAAC,CAAC,CAAC;AACP,CAAC"}
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,+MAA+M,CAChN;SACA,KAAK,CAAC,GAAG,EAAE;QACV,MAAM;aACH,SAAS,CAAC,2BAA2B,CAAC;aACtC,KAAK,CAAC,GAAG,EAAE;YACV,MAAM,CAAC,SAAS,CAAC,gFAAgF,CAAC,CAAC;QACrG,CAAC,CAAC;aACD,SAAS,CAAC,MAAM,CAAC;aACjB,KAAK,CAAC,GAAG,EAAE;YACV,MAAM,CAAC,SAAS,CAAC,sDAAsD,CAAC,CAAC;QAC3E,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEL,MAAM;SACH,SAAS,CACR,iNAAiN,CAClN;SACA,KAAK,CAAC,GAAG,EAAE;QACV,MAAM,CAAC,SAAS,CAAC,2BAA2B,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;YACvD,MAAM,CAAC,SAAS,CAAC,mFAAmF,CAAC,CAAC;YACtG,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QAC9B,CAAC,CAAC,CAAC;QACH,MAAM,CAAC,SAAS,CAAC,yDAAyD,CAAC,CAAC;IAC9E,CAAC,CAAC,CAAC;IAEL,MAAM;SACH,SAAS,CACR,6KAA6K,CAC9K;SACA,KAAK,CAAC,GAAG,EAAE;QACV,MAAM,CAAC,SAAS,CAAC,qBAAqB,CAAC,CAAC,SAAS,EAAE,CAAC;QAEpD,MAAM;aACH,SAAS,CAAC,yBAAyB,CAAC;aACpC,KAAK,CAAC,GAAG,EAAE;YACV,MAAM,CAAC,SAAS,CACd,+FAA+F,CAChG,CAAC;QACJ,CAAC,CAAC;aACD,SAAS,CAAC,MAAM,CAAC;aACjB,KAAK,CAAC,GAAG,EAAE;YACV,MAAM,CAAC,SAAS,CAAC,mFAAmF,CAAC,CAAC;QACxG,CAAC,CAAC,CAAC;QAEL,IAAI,CAAC,UAAU;YAAE,OAAO;QAExB,MAAM,CAAC,SAAS,EAAE,CAAC;QACnB,MAAM,CAAC,SAAS,CAAC,mDAAmD,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;YAC/E,MAAM;iBACH,SAAS,CAAC,oCAAoC,CAAC;iBAC/C,SAAS,CAAC,SAAS,CAAC;iBACpB,SAAS,CAAC,6BAA6B,CAAC;iBACxC,SAAS,CAAC,mDAAmD,CAAC;iBAC9D,SAAS,CAAC,mBAAmB,CAAC;iBAC9B,SAAS,CAAC,6BAA6B,CAAC;iBACxC,SAAS,CAAC,GAAG,CAAC;iBACd,SAAS,CAAC,KAAK,CAAC,CAAC;QACtB,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -0,0 +1,153 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.addOutboxEventIDBClass = addOutboxEventIDBClass;
4
+ function addOutboxEventIDBClass(writer, outboxModelName) {
5
+ writer.writeLine(`class ${outboxModelName}IDBClass extends BaseIDBModelClass<"${outboxModelName}">`).block(() => {
6
+ addConstructor(writer, outboxModelName);
7
+ addCreateMethod(writer, outboxModelName);
8
+ addGetNextBatchMethod(writer, outboxModelName);
9
+ addMarkSyncedMethod(writer, outboxModelName);
10
+ addMarkFailedMethod(writer, outboxModelName);
11
+ addStatsMethod(writer, outboxModelName);
12
+ addClearSyncedMethod(writer, outboxModelName);
13
+ });
14
+ }
15
+ function addConstructor(writer, outboxModelName) {
16
+ writer
17
+ .writeLine(`constructor(client: PrismaIDBClient, keyPath: string[])`)
18
+ .block(() => {
19
+ writer.writeLine(`super(client, keyPath, "${outboxModelName}");`);
20
+ })
21
+ .blankLine();
22
+ }
23
+ function addCreateMethod(writer, outboxModelName) {
24
+ writer
25
+ .writeLine(`async create(query: { data: Pick<OutboxEventRecord, "entityKeyPath" | "entityType" | "operation" | "payload"> }): Promise<OutboxEventRecord>`)
26
+ .block(() => {
27
+ writer
28
+ .writeLine(`const tx = this.client._db.transaction("${outboxModelName}", "readwrite");`)
29
+ .writeLine(`const store = tx.objectStore("${outboxModelName}");`)
30
+ .blankLine()
31
+ .writeLine(`const event: OutboxEventRecord = {`)
32
+ .writeLine(`id: crypto.randomUUID(),`)
33
+ .writeLine(`createdAt: new Date(),`)
34
+ .writeLine(`synced: false,`)
35
+ .writeLine(`syncedAt: null,`)
36
+ .writeLine(`tries: 0,`)
37
+ .writeLine(`lastError: null,`)
38
+ .writeLine(`...query.data,`)
39
+ .writeLine(`};`)
40
+ .blankLine()
41
+ .writeLine(`await store.add(event);`)
42
+ .writeLine(`await tx.done;`)
43
+ .blankLine()
44
+ .writeLine(`return event;`);
45
+ })
46
+ .blankLine();
47
+ }
48
+ function addGetNextBatchMethod(writer, outboxModelName) {
49
+ writer
50
+ .writeLine(`async getNextBatch(options?: { limit?: number }): Promise<OutboxEventRecord[]>`)
51
+ .block(() => {
52
+ writer
53
+ .writeLine(`const limit = options?.limit ?? 20;`)
54
+ .writeLine(`const tx = this.client._db.transaction("${outboxModelName}", "readonly");`)
55
+ .writeLine(`const store = tx.objectStore("${outboxModelName}");`)
56
+ .blankLine()
57
+ .writeLine(`// Get all unsynced events, ordered by createdAt`)
58
+ .writeLine(`const allEvents = await store.getAll();`)
59
+ .writeLine(`const unsynced = allEvents.filter((e) => !e.synced).sort((a, b) => new Date(a.createdAt).getTime() - new Date(b.createdAt).getTime());`)
60
+ .blankLine()
61
+ .writeLine(`return unsynced.slice(0, limit);`);
62
+ })
63
+ .blankLine();
64
+ }
65
+ function addMarkSyncedMethod(writer, outboxModelName) {
66
+ writer
67
+ .writeLine(`async markSynced(eventIds: string[], meta?: { syncedAt?: Date }): Promise<void>`)
68
+ .block(() => {
69
+ writer
70
+ .writeLine(`const syncedAt = meta?.syncedAt ?? new Date();`)
71
+ .writeLine(`const tx = this.client._db.transaction("${outboxModelName}", "readwrite");`)
72
+ .writeLine(`const store = tx.objectStore("${outboxModelName}");`)
73
+ .blankLine()
74
+ .writeLine(`for (const id of eventIds) {`)
75
+ .writeLine(`const event = await store.get([id]);`)
76
+ .writeLine(`if (event) {`)
77
+ .writeLine(`await store.put({`)
78
+ .writeLine(`...event,`)
79
+ .writeLine(`synced: true,`)
80
+ .writeLine(`syncedAt,`)
81
+ .writeLine(`});`)
82
+ .writeLine(`}`)
83
+ .writeLine(`}`)
84
+ .blankLine()
85
+ .writeLine(`await tx.done;`);
86
+ })
87
+ .blankLine();
88
+ }
89
+ function addMarkFailedMethod(writer, outboxModelName) {
90
+ writer
91
+ .writeLine(`async markFailed(eventId: string, error: string): Promise<void>`)
92
+ .block(() => {
93
+ writer
94
+ .writeLine(`const tx = this.client._db.transaction("${outboxModelName}", "readwrite");`)
95
+ .writeLine(`const store = tx.objectStore("${outboxModelName}");`)
96
+ .blankLine()
97
+ .writeLine(`const event = await store.get([eventId]);`)
98
+ .writeLine(`if (event) {`)
99
+ .writeLine(`await store.put({`)
100
+ .writeLine(`...event,`)
101
+ .writeLine(`tries: (event.tries ?? 0) + 1,`)
102
+ .writeLine(`lastError: error,`)
103
+ .writeLine(`});`)
104
+ .writeLine(`}`)
105
+ .blankLine()
106
+ .writeLine(`await tx.done;`);
107
+ })
108
+ .blankLine();
109
+ }
110
+ function addStatsMethod(writer, outboxModelName) {
111
+ writer
112
+ .writeLine(`async stats(): Promise<{ unsynced: number; failed: number; lastError?: string }>`)
113
+ .block(() => {
114
+ writer
115
+ .writeLine(`const tx = this.client._db.transaction("${outboxModelName}", "readonly");`)
116
+ .writeLine(`const store = tx.objectStore("${outboxModelName}");`)
117
+ .writeLine(`const allEvents = await store.getAll();`)
118
+ .blankLine()
119
+ .writeLine(`const unsynced = allEvents.filter((e) => !e.synced).length;`)
120
+ .writeLine(`const failed = allEvents.filter((e) => e.lastError !== null && e.lastError !== undefined).length;`)
121
+ .writeLine(`const lastError = allEvents.filter((e) => e.lastError).sort((a, b) => new Date(b.createdAt).getTime() - new Date(a.createdAt).getTime())[0]?.lastError;`)
122
+ .blankLine()
123
+ .writeLine(`return { unsynced, failed, lastError: lastError ?? undefined };`);
124
+ })
125
+ .blankLine();
126
+ }
127
+ function addClearSyncedMethod(writer, outboxModelName) {
128
+ writer
129
+ .writeLine(`async clearSynced(options?: { olderThanDays?: number }): Promise<number>`)
130
+ .block(() => {
131
+ writer
132
+ .writeLine(`const olderThanDays = options?.olderThanDays ?? 7;`)
133
+ .writeLine(`const cutoffDate = new Date();`)
134
+ .writeLine(`cutoffDate.setDate(cutoffDate.getDate() - olderThanDays);`)
135
+ .blankLine()
136
+ .writeLine(`const tx = this.client._db.transaction("${outboxModelName}", "readwrite");`)
137
+ .writeLine(`const store = tx.objectStore("${outboxModelName}");`)
138
+ .writeLine(`const allEvents = await store.getAll();`)
139
+ .blankLine()
140
+ .writeLine(`let deletedCount = 0;`)
141
+ .writeLine(`for (const event of allEvents) {`)
142
+ .writeLine(`if (event.synced && new Date(event.createdAt) < cutoffDate) {`)
143
+ .writeLine(`await store.delete([event.id]);`)
144
+ .writeLine(`deletedCount++;`)
145
+ .writeLine(`}`)
146
+ .writeLine(`}`)
147
+ .blankLine()
148
+ .writeLine(`await tx.done;`)
149
+ .writeLine(`return deletedCount;`);
150
+ })
151
+ .blankLine();
152
+ }
153
+ //# sourceMappingURL=OutboxEventIDBClass.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OutboxEventIDBClass.js","sourceRoot":"","sources":["../../../../src/fileCreators/prisma-idb-client/classes/OutboxEventIDBClass.ts"],"names":[],"mappings":"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"}