@contractspec/example.integration-hub 1.57.0 → 1.58.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 (190) hide show
  1. package/dist/browser/connection/connection.enum.js +12 -0
  2. package/dist/browser/connection/connection.operation.js +101 -0
  3. package/dist/browser/connection/connection.presentation.js +99 -0
  4. package/dist/browser/connection/connection.schema.js +48 -0
  5. package/dist/browser/connection/index.js +104 -0
  6. package/dist/browser/docs/index.js +104 -0
  7. package/dist/browser/docs/integration-hub.docblock.js +104 -0
  8. package/dist/browser/events.js +211 -0
  9. package/dist/browser/example.js +42 -0
  10. package/dist/browser/handlers/index.js +246 -0
  11. package/dist/browser/handlers/integration.handlers.js +246 -0
  12. package/dist/browser/index.js +1595 -0
  13. package/dist/browser/integration/index.js +92 -0
  14. package/dist/browser/integration/integration.enum.js +12 -0
  15. package/dist/browser/integration/integration.operations.js +89 -0
  16. package/dist/browser/integration/integration.presentation.js +117 -0
  17. package/dist/browser/integration/integration.schema.js +42 -0
  18. package/dist/browser/integration-hub.capability.js +40 -0
  19. package/dist/browser/integration-hub.feature.js +114 -0
  20. package/dist/browser/seeders/index.js +60 -0
  21. package/dist/browser/sync/index.js +332 -0
  22. package/dist/browser/sync/sync.enum.js +26 -0
  23. package/dist/browser/sync/sync.operations.js +321 -0
  24. package/dist/browser/sync/sync.presentation.js +298 -0
  25. package/dist/browser/sync/sync.schema.js +154 -0
  26. package/dist/browser/sync-engine/index.js +186 -0
  27. package/dist/browser/tests/operations.test-spec.js +85 -0
  28. package/dist/browser/ui/IntegrationDashboard.js +369 -0
  29. package/dist/browser/ui/hooks/index.js +57 -0
  30. package/dist/browser/ui/hooks/useIntegrationData.js +54 -0
  31. package/dist/browser/ui/index.js +644 -0
  32. package/dist/browser/ui/renderers/index.js +273 -0
  33. package/dist/browser/ui/renderers/integration.markdown.js +273 -0
  34. package/dist/connection/connection.enum.d.ts +1 -6
  35. package/dist/connection/connection.enum.d.ts.map +1 -1
  36. package/dist/connection/connection.enum.js +11 -15
  37. package/dist/connection/connection.operation.d.ts +78 -84
  38. package/dist/connection/connection.operation.d.ts.map +1 -1
  39. package/dist/connection/connection.operation.js +99 -60
  40. package/dist/connection/connection.presentation.d.ts +2 -7
  41. package/dist/connection/connection.presentation.d.ts.map +1 -1
  42. package/dist/connection/connection.presentation.js +96 -56
  43. package/dist/connection/connection.schema.d.ts +54 -59
  44. package/dist/connection/connection.schema.d.ts.map +1 -1
  45. package/dist/connection/connection.schema.js +46 -73
  46. package/dist/connection/index.d.ts +7 -4
  47. package/dist/connection/index.d.ts.map +1 -0
  48. package/dist/connection/index.js +104 -4
  49. package/dist/docs/index.d.ts +2 -1
  50. package/dist/docs/index.d.ts.map +1 -0
  51. package/dist/docs/index.js +105 -1
  52. package/dist/docs/integration-hub.docblock.d.ts +2 -1
  53. package/dist/docs/integration-hub.docblock.d.ts.map +1 -0
  54. package/dist/docs/integration-hub.docblock.js +45 -56
  55. package/dist/events.d.ts +137 -143
  56. package/dist/events.d.ts.map +1 -1
  57. package/dist/events.js +210 -287
  58. package/dist/example.d.ts +2 -6
  59. package/dist/example.d.ts.map +1 -1
  60. package/dist/example.js +41 -55
  61. package/dist/handlers/index.d.ts +2 -2
  62. package/dist/handlers/index.d.ts.map +1 -0
  63. package/dist/handlers/index.js +247 -3
  64. package/dist/handlers/integration.handlers.d.ts +114 -113
  65. package/dist/handlers/integration.handlers.d.ts.map +1 -1
  66. package/dist/handlers/integration.handlers.js +232 -267
  67. package/dist/index.d.ts +12 -19
  68. package/dist/index.d.ts.map +1 -0
  69. package/dist/index.js +1596 -20
  70. package/dist/integration/index.d.ts +7 -4
  71. package/dist/integration/index.d.ts.map +1 -0
  72. package/dist/integration/index.js +92 -4
  73. package/dist/integration/integration.enum.d.ts +1 -6
  74. package/dist/integration/integration.enum.d.ts.map +1 -1
  75. package/dist/integration/integration.enum.js +11 -15
  76. package/dist/integration/integration.operations.d.ts +74 -80
  77. package/dist/integration/integration.operations.d.ts.map +1 -1
  78. package/dist/integration/integration.operations.js +87 -54
  79. package/dist/integration/integration.presentation.d.ts +3 -8
  80. package/dist/integration/integration.presentation.d.ts.map +1 -1
  81. package/dist/integration/integration.presentation.js +114 -73
  82. package/dist/integration/integration.schema.d.ts +54 -59
  83. package/dist/integration/integration.schema.d.ts.map +1 -1
  84. package/dist/integration/integration.schema.js +40 -73
  85. package/dist/integration-hub.capability.d.ts +3 -8
  86. package/dist/integration-hub.capability.d.ts.map +1 -1
  87. package/dist/integration-hub.capability.js +41 -38
  88. package/dist/integration-hub.feature.d.ts +1 -6
  89. package/dist/integration-hub.feature.d.ts.map +1 -1
  90. package/dist/integration-hub.feature.js +113 -242
  91. package/dist/node/connection/connection.enum.js +12 -0
  92. package/dist/node/connection/connection.operation.js +101 -0
  93. package/dist/node/connection/connection.presentation.js +99 -0
  94. package/dist/node/connection/connection.schema.js +48 -0
  95. package/dist/node/connection/index.js +104 -0
  96. package/dist/node/docs/index.js +104 -0
  97. package/dist/node/docs/integration-hub.docblock.js +104 -0
  98. package/dist/node/events.js +211 -0
  99. package/dist/node/example.js +42 -0
  100. package/dist/node/handlers/index.js +246 -0
  101. package/dist/node/handlers/integration.handlers.js +246 -0
  102. package/dist/node/index.js +1595 -0
  103. package/dist/node/integration/index.js +92 -0
  104. package/dist/node/integration/integration.enum.js +12 -0
  105. package/dist/node/integration/integration.operations.js +89 -0
  106. package/dist/node/integration/integration.presentation.js +117 -0
  107. package/dist/node/integration/integration.schema.js +42 -0
  108. package/dist/node/integration-hub.capability.js +40 -0
  109. package/dist/node/integration-hub.feature.js +114 -0
  110. package/dist/node/seeders/index.js +60 -0
  111. package/dist/node/sync/index.js +332 -0
  112. package/dist/node/sync/sync.enum.js +26 -0
  113. package/dist/node/sync/sync.operations.js +321 -0
  114. package/dist/node/sync/sync.presentation.js +298 -0
  115. package/dist/node/sync/sync.schema.js +154 -0
  116. package/dist/node/sync-engine/index.js +186 -0
  117. package/dist/node/tests/operations.test-spec.js +85 -0
  118. package/dist/node/ui/IntegrationDashboard.js +369 -0
  119. package/dist/node/ui/hooks/index.js +57 -0
  120. package/dist/node/ui/hooks/useIntegrationData.js +54 -0
  121. package/dist/node/ui/index.js +644 -0
  122. package/dist/node/ui/renderers/index.js +273 -0
  123. package/dist/node/ui/renderers/integration.markdown.js +273 -0
  124. package/dist/seeders/index.d.ts +4 -8
  125. package/dist/seeders/index.d.ts.map +1 -1
  126. package/dist/seeders/index.js +54 -52
  127. package/dist/sync/index.d.ts +7 -4
  128. package/dist/sync/index.d.ts.map +1 -0
  129. package/dist/sync/index.js +332 -4
  130. package/dist/sync/sync.enum.d.ts +3 -8
  131. package/dist/sync/sync.enum.d.ts.map +1 -1
  132. package/dist/sync/sync.enum.js +23 -31
  133. package/dist/sync/sync.operations.d.ts +413 -419
  134. package/dist/sync/sync.operations.d.ts.map +1 -1
  135. package/dist/sync/sync.operations.js +316 -197
  136. package/dist/sync/sync.presentation.d.ts +6 -11
  137. package/dist/sync/sync.presentation.d.ts.map +1 -1
  138. package/dist/sync/sync.presentation.js +291 -160
  139. package/dist/sync/sync.schema.d.ts +317 -322
  140. package/dist/sync/sync.schema.d.ts.map +1 -1
  141. package/dist/sync/sync.schema.js +146 -295
  142. package/dist/sync-engine/index.d.ts +88 -91
  143. package/dist/sync-engine/index.d.ts.map +1 -1
  144. package/dist/sync-engine/index.js +181 -142
  145. package/dist/tests/operations.test-spec.d.ts +3 -8
  146. package/dist/tests/operations.test-spec.d.ts.map +1 -1
  147. package/dist/tests/operations.test-spec.js +82 -90
  148. package/dist/ui/IntegrationDashboard.d.ts +1 -6
  149. package/dist/ui/IntegrationDashboard.d.ts.map +1 -1
  150. package/dist/ui/IntegrationDashboard.js +365 -261
  151. package/dist/ui/hooks/index.d.ts +2 -2
  152. package/dist/ui/hooks/index.d.ts.map +1 -0
  153. package/dist/ui/hooks/index.js +57 -4
  154. package/dist/ui/hooks/useIntegrationData.d.ts +16 -20
  155. package/dist/ui/hooks/useIntegrationData.d.ts.map +1 -1
  156. package/dist/ui/hooks/useIntegrationData.js +51 -55
  157. package/dist/ui/index.d.ts +7 -6
  158. package/dist/ui/index.d.ts.map +1 -0
  159. package/dist/ui/index.js +644 -5
  160. package/dist/ui/renderers/index.d.ts +2 -2
  161. package/dist/ui/renderers/index.d.ts.map +1 -0
  162. package/dist/ui/renderers/index.js +274 -3
  163. package/dist/ui/renderers/integration.markdown.d.ts +13 -14
  164. package/dist/ui/renderers/integration.markdown.d.ts.map +1 -1
  165. package/dist/ui/renderers/integration.markdown.js +268 -264
  166. package/package.json +360 -71
  167. package/dist/connection/connection.enum.js.map +0 -1
  168. package/dist/connection/connection.operation.js.map +0 -1
  169. package/dist/connection/connection.presentation.js.map +0 -1
  170. package/dist/connection/connection.schema.js.map +0 -1
  171. package/dist/docs/integration-hub.docblock.js.map +0 -1
  172. package/dist/events.js.map +0 -1
  173. package/dist/example.js.map +0 -1
  174. package/dist/handlers/integration.handlers.js.map +0 -1
  175. package/dist/integration/integration.enum.js.map +0 -1
  176. package/dist/integration/integration.operations.js.map +0 -1
  177. package/dist/integration/integration.presentation.js.map +0 -1
  178. package/dist/integration/integration.schema.js.map +0 -1
  179. package/dist/integration-hub.capability.js.map +0 -1
  180. package/dist/integration-hub.feature.js.map +0 -1
  181. package/dist/seeders/index.js.map +0 -1
  182. package/dist/sync/sync.enum.js.map +0 -1
  183. package/dist/sync/sync.operations.js.map +0 -1
  184. package/dist/sync/sync.presentation.js.map +0 -1
  185. package/dist/sync/sync.schema.js.map +0 -1
  186. package/dist/sync-engine/index.js.map +0 -1
  187. package/dist/tests/operations.test-spec.js.map +0 -1
  188. package/dist/ui/IntegrationDashboard.js.map +0 -1
  189. package/dist/ui/hooks/useIntegrationData.js.map +0 -1
  190. package/dist/ui/renderers/integration.markdown.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","names":[],"sources":["../../src/sync-engine/index.ts"],"mappings":";;AAQA;;;;UAAiB,YAAA;EACf,WAAA;EACA,WAAA;EACA,WAAA;EACA,mBAAA;EACA,YAAA,GAAe,YAAA;EACf,aAAA;EACA,UAAA;EACA,YAAA;AAAA;AAAA,UAGe,YAAA;EACf,YAAA;EACA,WAAA;EACA,WAAA;AAAA;AAAA,UAGe,UAAA;EACf,EAAA;EACA,SAAA;EACA,YAAA;EACA,YAAA;EACA,aAAA,EAAe,YAAA;EACf,SAAA;EACA,cAAA;EACA,aAAA;EACA,YAAA,GAAe,MAAA;AAAA;AAAA,UAGA,WAAA;EACf,KAAA;EACA,MAAA,EAAQ,UAAA;EACR,UAAA;IACE,EAAA;IACA,QAAA;IACA,WAAA,GAAc,MAAA;EAAA;AAAA;AAAA,UAID,UAAA;EACf,OAAA;EACA,gBAAA;EACA,cAAA;EACA,cAAA;EACA,cAAA;EACA,aAAA;EACA,cAAA;EACA,MAAA,EAAQ,SAAA;AAAA;AAAA,UAGO,SAAA;EACf,QAAA;EACA,KAAA;EACA,OAAA;EACA,IAAA;AAAA;AAAA,UAGe,YAAA;EACf,EAAA;EACA,IAAA,EAAM,MAAA;EACN,QAAA;AAAA;AAAA,UAGe,YAAA;EACf,EAAA;EACA,IAAA,EAAM,MAAA;EACN,QAAA;AAAA;AAAA,UAKe,WAAA;EAxBf;;;EA4BA,IAAA,CAAK,OAAA,EAAS,WAAA,GAAc,OAAA,CAAQ,UAAA;EAzBrB;;;EA8Bf,eAAA,CACE,YAAA,EAAc,YAAA,EACd,QAAA,EAAU,YAAA,IACV,OAAA,EAAS,WAAA,GACR,YAAA;EAjCH;;;EAsCA,cAAA,CACE,MAAA,EAAQ,YAAA,EACR,QAAA,EAAU,YAAA;IACP,KAAA;IAAgB,MAAA,EAAQ,SAAA;EAAA;AAAA;AAAA,UAKd,iBAAA;EACf,SAAA,CAAU,KAAA,WAAgB,UAAA;AAAA;AAAA,cAGf,qBAAA,YAAiC,iBAAA;EAC5C,SAAA,CAAU,KAAA,WAAgB,UAAA;AAAA;AAAA,cAmDf,eAAA,YAA2B,WAAA;EAAA,QAC9B,WAAA;cAEI,WAAA,GAAc,iBAAA;EAIpB,IAAA,CAAK,QAAA,EAAU,WAAA,GAAc,OAAA,CAAQ,UAAA;EAsB3C,eAAA,CACE,YAAA,EAAc,YAAA,EACd,QAAA,EAAU,YAAA,IACV,QAAA,EAAU,WAAA,GACT,YAAA;EA+DH,cAAA,CACE,MAAA,EAAQ,YAAA,EACR,QAAA,EAAU,YAAA;IACP,KAAA;IAAgB,MAAA,EAAQ,SAAA;EAAA;EAAA,QAuBrB,cAAA;EAAA,QAcA,cAAA;EAAA,QAuBA,gBAAA;AAAA;AAAA,iBAqBM,gBAAA,CAAiB,WAAA,GAAc,iBAAA,GAAoB,WAAA;AAAA,iBAMnD,eAAA,CAAgB,IAAA,EAAM,MAAA;AAAA,iBAatB,UAAA,CACd,cAAA,sBACA,cAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/sync-engine/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,MAAM,WAAW,YAAY;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,QAAQ,GAAG,WAAW,GAAG,QAAQ,GAAG,UAAU,GAAG,UAAU,CAAC;IACzE,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,UAAU,EAAE,OAAO,CAAC;IACpB,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,YAAY;IAC3B,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,SAAS,GAAG,UAAU,GAAG,eAAe,CAAC;IACpD,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,YAAY,EAAE,CAAC;IAC9B,SAAS,EAAE,OAAO,CAAC;IACnB,cAAc,EAAE,OAAO,CAAC;IACxB,aAAa,EAAE,OAAO,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACxC;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,UAAU,CAAC;IACnB,UAAU,EAAE;QACV,EAAE,EAAE,MAAM,CAAC;QACX,QAAQ,EAAE,MAAM,CAAC;QACjB,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KACvC,CAAC;CACH;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,gBAAgB,EAAE,MAAM,CAAC;IACzB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,SAAS,EAAE,CAAC;CACrB;AAED,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAID,MAAM,WAAW,WAAW;IAC1B;;OAEG;IACH,IAAI,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IAEhD;;OAEG;IACH,eAAe,CACb,YAAY,EAAE,YAAY,EAC1B,QAAQ,EAAE,YAAY,EAAE,EACxB,OAAO,EAAE,WAAW,GACnB,YAAY,CAAC;IAEhB;;OAEG;IACH,cAAc,CACZ,MAAM,EAAE,YAAY,EACpB,QAAQ,EAAE,YAAY,EAAE,GACvB;QAAE,KAAK,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,SAAS,EAAE,CAAA;KAAE,CAAC;CAC5C;AAID,MAAM,WAAW,iBAAiB;IAChC,SAAS,CAAC,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC;CACxD;AAED,qBAAa,qBAAsB,YAAW,iBAAiB;IAC7D,SAAS,CAAC,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO;CA+CvD;AAID,qBAAa,eAAgB,YAAW,WAAW;IACjD,OAAO,CAAC,WAAW,CAAoB;gBAE3B,WAAW,CAAC,EAAE,iBAAiB;IAIrC,IAAI,CAAC,QAAQ,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC;IAsBtD,eAAe,CACb,YAAY,EAAE,YAAY,EAC1B,QAAQ,EAAE,YAAY,EAAE,EACxB,QAAQ,EAAE,WAAW,GACpB,YAAY;IA+Df,cAAc,CACZ,MAAM,EAAE,YAAY,EACpB,QAAQ,EAAE,YAAY,EAAE,GACvB;QAAE,KAAK,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,SAAS,EAAE,CAAA;KAAE;IAuB1C,OAAO,CAAC,cAAc;IActB,OAAO,CAAC,cAAc;IAuBtB,OAAO,CAAC,gBAAgB;CAiBzB;AAID,wBAAgB,gBAAgB,CAAC,WAAW,CAAC,EAAE,iBAAiB,GAAG,WAAW,CAE7E;AAID,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAWrE;AAED,wBAAgB,UAAU,CACxB,cAAc,EAAE,MAAM,GAAG,SAAS,EAClC,cAAc,EAAE,MAAM,GAAG,SAAS,GACjC,OAAO,CAKT"}
@@ -1,148 +1,187 @@
1
- //#region src/sync-engine/index.ts
2
- var BasicFieldTransformer = class {
3
- transform(value, expression) {
4
- try {
5
- if (expression.startsWith("uppercase")) return typeof value === "string" ? value.toUpperCase() : value;
6
- if (expression.startsWith("lowercase")) return typeof value === "string" ? value.toLowerCase() : value;
7
- if (expression.startsWith("trim")) return typeof value === "string" ? value.trim() : value;
8
- if (expression.startsWith("default:")) {
9
- const defaultVal = expression.replace("default:", "");
10
- return value ?? JSON.parse(defaultVal);
11
- }
12
- if (expression.startsWith("concat:")) {
13
- const separator = expression.replace("concat:", "") || " ";
14
- if (Array.isArray(value)) return value.join(separator);
15
- return value;
16
- }
17
- if (expression.startsWith("split:")) {
18
- const separator = expression.replace("split:", "") || ",";
19
- if (typeof value === "string") return value.split(separator);
20
- return value;
21
- }
22
- if (expression.startsWith("number")) return Number(value);
23
- if (expression.startsWith("boolean")) return Boolean(value);
24
- if (expression.startsWith("string")) return String(value);
25
- return value;
26
- } catch {
27
- return value;
28
- }
29
- }
30
- };
31
- var BasicSyncEngine = class {
32
- transformer;
33
- constructor(transformer) {
34
- this.transformer = transformer ?? new BasicFieldTransformer();
35
- }
36
- async sync(_context) {
37
- return {
38
- success: true,
39
- recordsProcessed: 0,
40
- recordsCreated: 0,
41
- recordsUpdated: 0,
42
- recordsDeleted: 0,
43
- recordsFailed: 0,
44
- recordsSkipped: 0,
45
- errors: []
46
- };
47
- }
48
- transformRecord(sourceRecord, mappings, _context) {
49
- const targetData = {};
50
- for (const mapping of mappings) {
51
- let value;
52
- let sourceValue;
53
- switch (mapping.mappingType) {
54
- case "DIRECT":
55
- value = this.getNestedValue(sourceRecord.data, mapping.sourceField);
56
- break;
57
- case "TRANSFORM":
58
- sourceValue = this.getNestedValue(sourceRecord.data, mapping.sourceField);
59
- value = mapping.transformExpression ? this.transformer.transform(sourceValue, mapping.transformExpression) : sourceValue;
60
- break;
61
- case "CONSTANT":
62
- value = mapping.constantValue;
63
- break;
64
- case "LOOKUP":
65
- value = this.getNestedValue(sourceRecord.data, mapping.sourceField);
66
- break;
67
- case "COMPUTED":
68
- value = mapping.transformExpression ? this.evaluateComputed(sourceRecord.data, mapping.transformExpression) : null;
69
- break;
70
- default: value = this.getNestedValue(sourceRecord.data, mapping.sourceField);
71
- }
72
- if (value === void 0 || value === null) value = mapping.defaultValue;
73
- this.setNestedValue(targetData, mapping.targetField, value);
74
- }
75
- return {
76
- id: sourceRecord.id,
77
- data: targetData
78
- };
79
- }
80
- validateRecord(record, mappings) {
81
- const errors = [];
82
- for (const mapping of mappings) if (mapping.isRequired) {
83
- const value = this.getNestedValue(record.data, mapping.targetField);
84
- if (value === void 0 || value === null) errors.push({
85
- recordId: record.id,
86
- field: mapping.targetField,
87
- message: `Required field ${mapping.targetField} is missing`,
88
- code: "REQUIRED_FIELD_MISSING"
89
- });
90
- }
91
- return {
92
- valid: errors.length === 0,
93
- errors
94
- };
95
- }
96
- getNestedValue(obj, path) {
97
- const parts = path.split(".");
98
- let current = obj;
99
- for (const part of parts) {
100
- if (current === null || current === void 0) return;
101
- current = current[part];
102
- }
103
- return current;
104
- }
105
- setNestedValue(obj, path, value) {
106
- const parts = path.split(".");
107
- let current = obj;
108
- for (let i = 0; i < parts.length - 1; i++) {
109
- const part = parts[i];
110
- if (part === void 0) continue;
111
- if (!(part in current)) current[part] = {};
112
- current = current[part];
113
- }
114
- const lastPart = parts[parts.length - 1];
115
- if (lastPart !== void 0) current[lastPart] = value;
116
- }
117
- evaluateComputed(data, expression) {
118
- try {
119
- return expression.replace(/\$\{([^}]+)\}/g, (_, path) => {
120
- const value = this.getNestedValue(data, path);
121
- return String(value ?? "");
122
- });
123
- } catch {
124
- return null;
125
- }
126
- }
127
- };
1
+ // @bun
2
+ // src/sync-engine/index.ts
3
+ class BasicFieldTransformer {
4
+ transform(value, expression) {
5
+ try {
6
+ if (expression.startsWith("uppercase")) {
7
+ return typeof value === "string" ? value.toUpperCase() : value;
8
+ }
9
+ if (expression.startsWith("lowercase")) {
10
+ return typeof value === "string" ? value.toLowerCase() : value;
11
+ }
12
+ if (expression.startsWith("trim")) {
13
+ return typeof value === "string" ? value.trim() : value;
14
+ }
15
+ if (expression.startsWith("default:")) {
16
+ const defaultVal = expression.replace("default:", "");
17
+ return value ?? JSON.parse(defaultVal);
18
+ }
19
+ if (expression.startsWith("concat:")) {
20
+ const separator = expression.replace("concat:", "") || " ";
21
+ if (Array.isArray(value)) {
22
+ return value.join(separator);
23
+ }
24
+ return value;
25
+ }
26
+ if (expression.startsWith("split:")) {
27
+ const separator = expression.replace("split:", "") || ",";
28
+ if (typeof value === "string") {
29
+ return value.split(separator);
30
+ }
31
+ return value;
32
+ }
33
+ if (expression.startsWith("number")) {
34
+ return Number(value);
35
+ }
36
+ if (expression.startsWith("boolean")) {
37
+ return Boolean(value);
38
+ }
39
+ if (expression.startsWith("string")) {
40
+ return String(value);
41
+ }
42
+ return value;
43
+ } catch {
44
+ return value;
45
+ }
46
+ }
47
+ }
48
+
49
+ class BasicSyncEngine {
50
+ transformer;
51
+ constructor(transformer) {
52
+ this.transformer = transformer ?? new BasicFieldTransformer;
53
+ }
54
+ async sync(_context) {
55
+ const result = {
56
+ success: true,
57
+ recordsProcessed: 0,
58
+ recordsCreated: 0,
59
+ recordsUpdated: 0,
60
+ recordsDeleted: 0,
61
+ recordsFailed: 0,
62
+ recordsSkipped: 0,
63
+ errors: []
64
+ };
65
+ return result;
66
+ }
67
+ transformRecord(sourceRecord, mappings, _context) {
68
+ const targetData = {};
69
+ for (const mapping of mappings) {
70
+ let value;
71
+ let sourceValue;
72
+ switch (mapping.mappingType) {
73
+ case "DIRECT":
74
+ value = this.getNestedValue(sourceRecord.data, mapping.sourceField);
75
+ break;
76
+ case "TRANSFORM":
77
+ sourceValue = this.getNestedValue(sourceRecord.data, mapping.sourceField);
78
+ value = mapping.transformExpression ? this.transformer.transform(sourceValue, mapping.transformExpression) : sourceValue;
79
+ break;
80
+ case "CONSTANT":
81
+ value = mapping.constantValue;
82
+ break;
83
+ case "LOOKUP":
84
+ value = this.getNestedValue(sourceRecord.data, mapping.sourceField);
85
+ break;
86
+ case "COMPUTED":
87
+ value = mapping.transformExpression ? this.evaluateComputed(sourceRecord.data, mapping.transformExpression) : null;
88
+ break;
89
+ default:
90
+ value = this.getNestedValue(sourceRecord.data, mapping.sourceField);
91
+ }
92
+ if (value === undefined || value === null) {
93
+ value = mapping.defaultValue;
94
+ }
95
+ this.setNestedValue(targetData, mapping.targetField, value);
96
+ }
97
+ return {
98
+ id: sourceRecord.id,
99
+ data: targetData
100
+ };
101
+ }
102
+ validateRecord(record, mappings) {
103
+ const errors = [];
104
+ for (const mapping of mappings) {
105
+ if (mapping.isRequired) {
106
+ const value = this.getNestedValue(record.data, mapping.targetField);
107
+ if (value === undefined || value === null) {
108
+ errors.push({
109
+ recordId: record.id,
110
+ field: mapping.targetField,
111
+ message: `Required field ${mapping.targetField} is missing`,
112
+ code: "REQUIRED_FIELD_MISSING"
113
+ });
114
+ }
115
+ }
116
+ }
117
+ return {
118
+ valid: errors.length === 0,
119
+ errors
120
+ };
121
+ }
122
+ getNestedValue(obj, path) {
123
+ const parts = path.split(".");
124
+ let current = obj;
125
+ for (const part of parts) {
126
+ if (current === null || current === undefined) {
127
+ return;
128
+ }
129
+ current = current[part];
130
+ }
131
+ return current;
132
+ }
133
+ setNestedValue(obj, path, value) {
134
+ const parts = path.split(".");
135
+ let current = obj;
136
+ for (let i = 0;i < parts.length - 1; i++) {
137
+ const part = parts[i];
138
+ if (part === undefined)
139
+ continue;
140
+ if (!(part in current)) {
141
+ current[part] = {};
142
+ }
143
+ current = current[part];
144
+ }
145
+ const lastPart = parts[parts.length - 1];
146
+ if (lastPart !== undefined) {
147
+ current[lastPart] = value;
148
+ }
149
+ }
150
+ evaluateComputed(data, expression) {
151
+ try {
152
+ const result = expression.replace(/\$\{([^}]+)\}/g, (_, path) => {
153
+ const value = this.getNestedValue(data, path);
154
+ return String(value ?? "");
155
+ });
156
+ return result;
157
+ } catch {
158
+ return null;
159
+ }
160
+ }
161
+ }
128
162
  function createSyncEngine(transformer) {
129
- return new BasicSyncEngine(transformer);
163
+ return new BasicSyncEngine(transformer);
130
164
  }
131
165
  function computeChecksum(data) {
132
- const str = JSON.stringify(data, Object.keys(data).sort());
133
- let hash = 0;
134
- for (let i = 0; i < str.length; i++) {
135
- const char = str.charCodeAt(i);
136
- hash = (hash << 5) - hash + char;
137
- hash = hash & hash;
138
- }
139
- return hash.toString(16);
166
+ const str = JSON.stringify(data, Object.keys(data).sort());
167
+ let hash = 0;
168
+ for (let i = 0;i < str.length; i++) {
169
+ const char = str.charCodeAt(i);
170
+ hash = (hash << 5) - hash + char;
171
+ hash = hash & hash;
172
+ }
173
+ return hash.toString(16);
140
174
  }
141
175
  function hasChanges(sourceChecksum, targetChecksum) {
142
- if (!sourceChecksum || !targetChecksum) return true;
143
- return sourceChecksum !== targetChecksum;
176
+ if (!sourceChecksum || !targetChecksum) {
177
+ return true;
178
+ }
179
+ return sourceChecksum !== targetChecksum;
144
180
  }
145
-
146
- //#endregion
147
- export { BasicFieldTransformer, BasicSyncEngine, computeChecksum, createSyncEngine, hasChanges };
148
- //# sourceMappingURL=index.js.map
181
+ export {
182
+ hasChanges,
183
+ createSyncEngine,
184
+ computeChecksum,
185
+ BasicSyncEngine,
186
+ BasicFieldTransformer
187
+ };
@@ -1,9 +1,4 @@
1
- import * as _contractspec_lib_contracts0 from "@contractspec/lib.contracts";
2
-
3
- //#region src/tests/operations.test-spec.d.ts
4
- declare const SyncConfigCreateTest: _contractspec_lib_contracts0.TestSpec;
5
- declare const FieldMappingAddTest: _contractspec_lib_contracts0.TestSpec;
6
- declare const SyncRunListTest: _contractspec_lib_contracts0.TestSpec;
7
- //#endregion
8
- export { FieldMappingAddTest, SyncConfigCreateTest, SyncRunListTest };
1
+ export declare const SyncConfigCreateTest: import("@contractspec/lib.contracts").TestSpec;
2
+ export declare const FieldMappingAddTest: import("@contractspec/lib.contracts").TestSpec;
3
+ export declare const SyncRunListTest: import("@contractspec/lib.contracts").TestSpec;
9
4
  //# sourceMappingURL=operations.test-spec.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"operations.test-spec.d.ts","names":[],"sources":["../../src/tests/operations.test-spec.ts"],"mappings":";;;cAEa,oBAAA,EAyBX,4BAAA,CAzB+B,QAAA;AAAA,cA2BpB,mBAAA,EAyBX,4BAAA,CAzB8B,QAAA;AAAA,cA2BnB,eAAA,EAyBX,4BAAA,CAzB0B,QAAA"}
1
+ {"version":3,"file":"operations.test-spec.d.ts","sourceRoot":"","sources":["../../src/tests/operations.test-spec.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,oBAAoB,gDAyB/B,CAAC;AAEH,eAAO,MAAM,mBAAmB,gDAyB9B,CAAC;AAEH,eAAO,MAAM,eAAe,gDAyB1B,CAAC"}
@@ -1,94 +1,86 @@
1
+ // @bun
2
+ // src/tests/operations.test-spec.ts
1
3
  import { defineTestSpec } from "@contractspec/lib.contracts";
2
-
3
- //#region src/tests/operations.test-spec.ts
4
- const SyncConfigCreateTest = defineTestSpec({
5
- meta: {
6
- key: "integration.syncConfig.create.test",
7
- version: "1.0.0",
8
- stability: "experimental",
9
- owners: ["@example.integration-hub"],
10
- description: "Test for creating sync config",
11
- tags: ["test"]
12
- },
13
- target: {
14
- type: "operation",
15
- operation: {
16
- key: "integration.syncConfig.create",
17
- version: "1.0.0"
18
- }
19
- },
20
- scenarios: [{
21
- key: "success",
22
- when: { operation: { key: "integration.syncConfig.create" } },
23
- then: [{
24
- type: "expectOutput",
25
- match: {}
26
- }]
27
- }, {
28
- key: "error",
29
- when: { operation: { key: "integration.syncConfig.create" } },
30
- then: [{ type: "expectError" }]
31
- }]
4
+ var SyncConfigCreateTest = defineTestSpec({
5
+ meta: {
6
+ key: "integration.syncConfig.create.test",
7
+ version: "1.0.0",
8
+ stability: "experimental",
9
+ owners: ["@example.integration-hub"],
10
+ description: "Test for creating sync config",
11
+ tags: ["test"]
12
+ },
13
+ target: {
14
+ type: "operation",
15
+ operation: { key: "integration.syncConfig.create", version: "1.0.0" }
16
+ },
17
+ scenarios: [
18
+ {
19
+ key: "success",
20
+ when: { operation: { key: "integration.syncConfig.create" } },
21
+ then: [{ type: "expectOutput", match: {} }]
22
+ },
23
+ {
24
+ key: "error",
25
+ when: { operation: { key: "integration.syncConfig.create" } },
26
+ then: [{ type: "expectError" }]
27
+ }
28
+ ]
32
29
  });
33
- const FieldMappingAddTest = defineTestSpec({
34
- meta: {
35
- key: "integration.fieldMapping.add.test",
36
- version: "1.0.0",
37
- stability: "experimental",
38
- owners: ["@example.integration-hub"],
39
- description: "Test for adding field mapping",
40
- tags: ["test"]
41
- },
42
- target: {
43
- type: "operation",
44
- operation: {
45
- key: "integration.fieldMapping.add",
46
- version: "1.0.0"
47
- }
48
- },
49
- scenarios: [{
50
- key: "success",
51
- when: { operation: { key: "integration.fieldMapping.add" } },
52
- then: [{
53
- type: "expectOutput",
54
- match: {}
55
- }]
56
- }, {
57
- key: "error",
58
- when: { operation: { key: "integration.fieldMapping.add" } },
59
- then: [{ type: "expectError" }]
60
- }]
30
+ var FieldMappingAddTest = defineTestSpec({
31
+ meta: {
32
+ key: "integration.fieldMapping.add.test",
33
+ version: "1.0.0",
34
+ stability: "experimental",
35
+ owners: ["@example.integration-hub"],
36
+ description: "Test for adding field mapping",
37
+ tags: ["test"]
38
+ },
39
+ target: {
40
+ type: "operation",
41
+ operation: { key: "integration.fieldMapping.add", version: "1.0.0" }
42
+ },
43
+ scenarios: [
44
+ {
45
+ key: "success",
46
+ when: { operation: { key: "integration.fieldMapping.add" } },
47
+ then: [{ type: "expectOutput", match: {} }]
48
+ },
49
+ {
50
+ key: "error",
51
+ when: { operation: { key: "integration.fieldMapping.add" } },
52
+ then: [{ type: "expectError" }]
53
+ }
54
+ ]
61
55
  });
62
- const SyncRunListTest = defineTestSpec({
63
- meta: {
64
- key: "integration.syncRun.list.test",
65
- version: "1.0.0",
66
- stability: "experimental",
67
- owners: ["@example.integration-hub"],
68
- description: "Test for listing sync runs",
69
- tags: ["test"]
70
- },
71
- target: {
72
- type: "operation",
73
- operation: {
74
- key: "integration.syncRun.list",
75
- version: "1.0.0"
76
- }
77
- },
78
- scenarios: [{
79
- key: "success",
80
- when: { operation: { key: "integration.syncRun.list" } },
81
- then: [{
82
- type: "expectOutput",
83
- match: {}
84
- }]
85
- }, {
86
- key: "error",
87
- when: { operation: { key: "integration.syncRun.list" } },
88
- then: [{ type: "expectError" }]
89
- }]
56
+ var SyncRunListTest = defineTestSpec({
57
+ meta: {
58
+ key: "integration.syncRun.list.test",
59
+ version: "1.0.0",
60
+ stability: "experimental",
61
+ owners: ["@example.integration-hub"],
62
+ description: "Test for listing sync runs",
63
+ tags: ["test"]
64
+ },
65
+ target: {
66
+ type: "operation",
67
+ operation: { key: "integration.syncRun.list", version: "1.0.0" }
68
+ },
69
+ scenarios: [
70
+ {
71
+ key: "success",
72
+ when: { operation: { key: "integration.syncRun.list" } },
73
+ then: [{ type: "expectOutput", match: {} }]
74
+ },
75
+ {
76
+ key: "error",
77
+ when: { operation: { key: "integration.syncRun.list" } },
78
+ then: [{ type: "expectError" }]
79
+ }
80
+ ]
90
81
  });
91
-
92
- //#endregion
93
- export { FieldMappingAddTest, SyncConfigCreateTest, SyncRunListTest };
94
- //# sourceMappingURL=operations.test-spec.js.map
82
+ export {
83
+ SyncRunListTest,
84
+ SyncConfigCreateTest,
85
+ FieldMappingAddTest
86
+ };
@@ -1,7 +1,2 @@
1
- import * as react_jsx_runtime0 from "react/jsx-runtime";
2
-
3
- //#region src/ui/IntegrationDashboard.d.ts
4
- declare function IntegrationDashboard(): react_jsx_runtime0.JSX.Element;
5
- //#endregion
6
- export { IntegrationDashboard };
1
+ export declare function IntegrationDashboard(): import("react/jsx-runtime").JSX.Element;
7
2
  //# sourceMappingURL=IntegrationDashboard.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"IntegrationDashboard.d.ts","names":[],"sources":["../../src/ui/IntegrationDashboard.tsx"],"mappings":";;;iBA4CgB,oBAAA,CAAA,GAAoB,kBAAA,CAAA,GAAA,CAAA,OAAA"}
1
+ {"version":3,"file":"IntegrationDashboard.d.ts","sourceRoot":"","sources":["../../src/ui/IntegrationDashboard.tsx"],"names":[],"mappings":"AA4CA,wBAAgB,oBAAoB,4CAsOnC"}