@researchdatabox/sails-ng-common 5.0.4 → 5.1.0-beta.12573

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 (60) hide show
  1. package/dist/src/config/component/checkbox-input.model.d.ts +1 -0
  2. package/dist/src/config/component/checkbox-input.model.js +2 -1
  3. package/dist/src/config/component/checkbox-input.outline.d.ts +2 -1
  4. package/dist/src/config/component/checkbox-input.outline.js +1 -1
  5. package/dist/src/config/component/data-location.outline.d.ts +1 -0
  6. package/dist/src/config/component/file-upload.outline.d.ts +2 -0
  7. package/dist/src/config/component/file-upload.outline.js +1 -1
  8. package/dist/src/config/component/related-object-data.model.d.ts +45 -0
  9. package/dist/src/config/component/related-object-data.model.js +39 -0
  10. package/dist/src/config/component/related-object-data.outline.d.ts +59 -0
  11. package/dist/src/config/component/related-object-data.outline.js +5 -0
  12. package/dist/src/config/component/save-button.model.d.ts +1 -0
  13. package/dist/src/config/component/save-button.model.js +2 -1
  14. package/dist/src/config/component/save-button.outline.d.ts +5 -0
  15. package/dist/src/config/component/save-status.model.d.ts +4 -0
  16. package/dist/src/config/component/save-status.model.js +5 -1
  17. package/dist/src/config/component/save-status.outline.d.ts +20 -0
  18. package/dist/src/config/component/workspace.model.d.ts +44 -0
  19. package/dist/src/config/component/workspace.model.js +44 -0
  20. package/dist/src/config/component/workspace.outline.d.ts +62 -0
  21. package/dist/src/config/component/workspace.outline.js +5 -0
  22. package/dist/src/config/dictionary.model.d.ts +28 -4
  23. package/dist/src/config/dictionary.model.js +7 -1
  24. package/dist/src/config/dictionary.outline.d.ts +5 -3
  25. package/dist/src/config/form-behaviour.outline.d.ts +120 -7
  26. package/dist/src/config/form-behaviour.outline.js +13 -5
  27. package/dist/src/config/form-component.model.d.ts +1 -0
  28. package/dist/src/config/form-component.model.js +2 -1
  29. package/dist/src/config/form-component.outline.d.ts +14 -0
  30. package/dist/src/config/form-config.model.d.ts +3 -0
  31. package/dist/src/config/form-config.model.js +2 -1
  32. package/dist/src/config/form-config.outline.d.ts +10 -0
  33. package/dist/src/config/form-override.model.js +4 -3
  34. package/dist/src/config/visitor/base.model.d.ts +6 -0
  35. package/dist/src/config/visitor/base.model.js +13 -1
  36. package/dist/src/config/visitor/base.outline.d.ts +6 -0
  37. package/dist/src/config/visitor/common.model.js +2 -1
  38. package/dist/src/index.d.ts +9 -0
  39. package/dist/src/index.js +10 -1
  40. package/dist/src/internal/plain-record.d.ts +11 -0
  41. package/dist/src/internal/plain-record.js +21 -0
  42. package/dist/src/jsonata-helpers.d.ts +15 -0
  43. package/dist/src/jsonata-helpers.js +49 -13
  44. package/dist/src/jsonata-parity.fixtures.d.ts +9 -0
  45. package/dist/src/jsonata-parity.fixtures.js +25 -0
  46. package/dist/src/record-concurrency.model.d.ts +118 -0
  47. package/dist/src/record-concurrency.model.js +199 -0
  48. package/dist/src/record-diff.d.ts +69 -0
  49. package/dist/src/record-diff.js +298 -0
  50. package/dist/src/record-save.model.d.ts +154 -0
  51. package/dist/src/record-save.model.js +289 -0
  52. package/dist/src/testing.d.ts +3 -0
  53. package/dist/src/testing.js +20 -0
  54. package/dist/src/validation/record-validation.model.d.ts +84 -0
  55. package/dist/src/validation/record-validation.model.js +53 -0
  56. package/dist/src/validation/validation-groups.d.ts +29 -0
  57. package/dist/src/validation/validation-groups.fixtures.d.ts +20 -0
  58. package/dist/src/validation/validation-groups.fixtures.js +83 -0
  59. package/dist/src/validation/validation-groups.js +82 -0
  60. package/package.json +16 -11
@@ -48,6 +48,7 @@ class PropertiesHelper {
48
48
  item.constraints.allowModes = currentData?.constraints?.allowModes ?? [];
49
49
  item.constraints.authorization = new form_component_model_1.FormConstraintAuthorizationConfig();
50
50
  item.constraints.authorization.allowRoles = currentData?.constraints?.authorization?.allowRoles ?? [];
51
+ item.constraints.authorization.denyRoles = currentData?.constraints?.authorization?.denyRoles ?? [];
51
52
  // TODO: Commented out below while we decide on how to handle 'form-level' expressions
52
53
  // Set the expressions
53
54
  // item.expressions = new FormExpressionsConfig();
@@ -419,4 +420,4 @@ class FormPathHelper {
419
420
  }
420
421
  }
421
422
  exports.FormPathHelper = FormPathHelper;
422
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbW9uLm1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbmZpZy92aXNpdG9yL2NvbW1vbi5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFNQSxrRUFBa0c7QUFDbEcsMERBVzZCO0FBQzdCLDREQU1pQztBQUVqQyxzREFBcUg7QUFFckgsTUFBYSxnQkFBZ0I7SUFDbkIsaUJBQWlCLENBQWtDO0lBQ25ELGFBQWEsQ0FBOEI7SUFDM0MsY0FBYyxDQUErQjtJQUM3QyxnQkFBZ0IsQ0FBc0M7SUFDdEQsbUJBQW1CLENBQTBCO0lBRXJEO1FBQ0UsSUFBSSxDQUFDLGlCQUFpQixHQUFHLDhDQUEyQixDQUFDO1FBQ3JELElBQUksQ0FBQyxhQUFhLEdBQUcsMENBQXVCLENBQUM7UUFDN0MsSUFBSSxDQUFDLGNBQWMsR0FBRywyQ0FBd0IsQ0FBQztRQUMvQyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsNkNBQTBCLENBQUM7UUFDbkQsSUFBSSxDQUFDLG1CQUFtQixHQUFHLHNDQUFtQixDQUFDO0lBQ2pELENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksNEJBQTRCLENBQUMsV0FBeUM7UUFDM0UsK0ZBQStGO1FBQy9GLE1BQU0sd0JBQXdCLEdBQUcsV0FBVyxFQUFFLFNBQVMsRUFBRSxLQUFLLENBQUM7UUFDL0QsSUFBSSxPQUFPLHdCQUF3QixLQUFLLFFBQVEsSUFBSSx3QkFBd0IsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDakcsTUFBTSxJQUFJLEtBQUssQ0FDYix5REFBeUQsV0FBVyxFQUFFLElBQUksSUFBSSxXQUFXLE1BQU0sSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUM3SCxDQUFDO1FBQ0osQ0FBQztRQUVELCtGQUErRjtRQUMvRixvRUFBb0U7UUFDcEUsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsR0FBRyxD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
423
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbW9uLm1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbmZpZy92aXNpdG9yL2NvbW1vbi5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFNQSxrRUFBa0c7QUFDbEcsMERBVzZCO0FBQzdCLDREQU1pQztBQUVqQyxzREFBcUg7QUFFckgsTUFBYSxnQkFBZ0I7SUFDbkIsaUJBQWlCLENBQWtDO0lBQ25ELGFBQWEsQ0FBOEI7SUFDM0MsY0FBYyxDQUErQjtJQUM3QyxnQkFBZ0IsQ0FBc0M7SUFDdEQsbUJBQW1CLENBQTBCO0lBRXJEO1FBQ0UsSUFBSSxDQUFDLGlCQUFpQixHQUFHLDhDQUEyQixDQUFDO1FBQ3JELElBQUksQ0FBQyxhQUFhLEdBQUcsMENBQXVCLENBQUM7UUFDN0MsSUFBSSxDQUFDLGNBQWMsR0FBRywyQ0FBd0IsQ0FBQztRQUMvQyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsNkNBQTBCLENBQUM7UUFDbkQsSUFBSSxDQUFDLG1CQUFtQixHQUFHLHNDQUFtQixDQUFDO0lBQ2pELENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksNEJBQTRCLENBQUMsV0FBeUM7UUFDM0UsK0ZBQStGO1FBQy9GLE1BQU0sd0JBQXdCLEdBQUcsV0FBVyxFQUFFLFNBQVMsRUFBRSxLQUFLLENBQUM7UUFDL0QsSUFBSSxPQUFPLHdCQUF3QixLQUFLLFFBQVEsSUFBSSx3QkFBd0IsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDakcsTUFBTSxJQUFJLEtBQUssQ0FDYix5REFBeUQsV0FBVyxFQUFFLElBQUksSUFBSSxXQUFXLE1BQU0sSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUM3SCxDQUFDO1FBQ0osQ0FBQztRQUVELCtGQUErRjtRQUMvRixvRUFBb0U7UUFDcEUsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsR0FBRyxD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
@@ -1,4 +1,7 @@
1
1
  export * from './record.model';
2
+ export * from './record-concurrency.model';
3
+ export * from './record-diff';
4
+ export * from './record-save.model';
2
5
  export * from './report.model';
3
6
  export * from './status.model';
4
7
  export * from './template.outline';
@@ -59,6 +62,8 @@ export * from './config/component/save-status.model';
59
62
  export * from './config/component/save-status.outline';
60
63
  export * from './config/component/integration-status.model';
61
64
  export * from './config/component/integration-status.outline';
65
+ export * from './config/component/workspace.model';
66
+ export * from './config/component/workspace.outline';
62
67
  export * from './config/component/cancel-button.model';
63
68
  export * from './config/component/cancel-button.outline';
64
69
  export * from './config/component/delete-button.model';
@@ -77,6 +82,8 @@ export * from './config/component/text-area.model';
77
82
  export * from './config/component/text-area.outline';
78
83
  export * from './config/component/content.model';
79
84
  export * from './config/component/content.outline';
85
+ export * from './config/component/related-object-data.model';
86
+ export * from './config/component/related-object-data.outline';
80
87
  export * from './config/component/validation-summary.model';
81
88
  export * from './config/component/validation-summary.outline';
82
89
  export * from './config/component/suggested-validation-summary.model';
@@ -114,6 +121,8 @@ export * from './config/component/question-tree.model';
114
121
  export * from './config/component/question-tree.outline';
115
122
  export * from './validation/helpers';
116
123
  export * from './validation/form.model';
124
+ export * from './validation/record-validation.model';
125
+ export * from './validation/validation-groups';
117
126
  export * from './validation/validators';
118
127
  export * from './validation/validators-support';
119
128
  export * from './translation-html';
package/dist/src/index.js CHANGED
@@ -16,6 +16,9 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
17
  // top
18
18
  __exportStar(require("./record.model"), exports);
19
+ __exportStar(require("./record-concurrency.model"), exports);
20
+ __exportStar(require("./record-diff"), exports);
21
+ __exportStar(require("./record-save.model"), exports);
19
22
  __exportStar(require("./report.model"), exports);
20
23
  __exportStar(require("./status.model"), exports);
21
24
  __exportStar(require("./template.outline"), exports);
@@ -82,6 +85,8 @@ __exportStar(require("./config/component/save-status.model"), exports);
82
85
  __exportStar(require("./config/component/save-status.outline"), exports);
83
86
  __exportStar(require("./config/component/integration-status.model"), exports);
84
87
  __exportStar(require("./config/component/integration-status.outline"), exports);
88
+ __exportStar(require("./config/component/workspace.model"), exports);
89
+ __exportStar(require("./config/component/workspace.outline"), exports);
85
90
  __exportStar(require("./config/component/cancel-button.model"), exports);
86
91
  __exportStar(require("./config/component/cancel-button.outline"), exports);
87
92
  __exportStar(require("./config/component/delete-button.model"), exports);
@@ -100,6 +105,8 @@ __exportStar(require("./config/component/text-area.model"), exports);
100
105
  __exportStar(require("./config/component/text-area.outline"), exports);
101
106
  __exportStar(require("./config/component/content.model"), exports);
102
107
  __exportStar(require("./config/component/content.outline"), exports);
108
+ __exportStar(require("./config/component/related-object-data.model"), exports);
109
+ __exportStar(require("./config/component/related-object-data.outline"), exports);
103
110
  __exportStar(require("./config/component/validation-summary.model"), exports);
104
111
  __exportStar(require("./config/component/validation-summary.outline"), exports);
105
112
  __exportStar(require("./config/component/suggested-validation-summary.model"), exports);
@@ -140,7 +147,9 @@ __exportStar(require("./config/component/question-tree.outline"), exports);
140
147
  // validation
141
148
  __exportStar(require("./validation/helpers"), exports);
142
149
  __exportStar(require("./validation/form.model"), exports);
150
+ __exportStar(require("./validation/record-validation.model"), exports);
151
+ __exportStar(require("./validation/validation-groups"), exports);
143
152
  __exportStar(require("./validation/validators"), exports);
144
153
  __exportStar(require("./validation/validators-support"), exports);
145
154
  __exportStar(require("./translation-html"), exports);
146
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLE1BQU07QUFDTixpREFBK0I7QUFDL0IsaURBQStCO0FBQy9CLGlEQUErQjtBQUMvQixxREFBbUM7QUFDbkMsd0RBQXNDO0FBQ3RDLHVEQUFxQztBQUNyQyxvREFBa0M7QUFDbEMsaURBQStCO0FBQy9CLHdEQUFzQztBQUN0QyxTQUFTO0FBQ1QsbURBQWlDO0FBQ2pDLDhEQUE0QztBQUM1Qyw0REFBMEM7QUFDMUMsMERBQXdDO0FBQ3hDLCtEQUE2QztBQUM3Qyw2REFBMkM7QUFDM0MsbUVBQWlEO0FBQ2pELCtFQUErRTtBQUMvRSxnRUFBZ0U7QUFDaEUsa0VBQWdEO0FBQ2hELGtFQUFnRDtBQUNoRCxnRUFBOEM7QUFDOUMsd0VBQXNEO0FBQ3RELHNFQUFvRDtBQUNwRCwrREFBNkM7QUFDN0MsNkRBQTJDO0FBQzNDLGdFQUE4QztBQUM5Qyw4REFBNEM7QUFDNUMsbUVBQWlEO0FBQ2pELGlFQUErQztBQUMvQyx5REFBdUM7QUFDdkMsdURBQXFDO0FBQ3JDLCtEQUE2QztBQUM3QyxpRUFBK0M7QUFDL0MsNERBQTBDO0FBQzFDLDhEQUE0QztBQUM1QyxRQUFRO0FBQ1IsK0RBQTZDO0FBQzdDLGdFQUE4QztBQUM5QyxpQkFBaUI7QUFDakIsZ0VBQThDO0FBQzlDLDhEQUE0QztBQUM1QyxnRUFBOEM7QUFDOUMscURBQW1DO0FBQ25DLG1CQUFtQjtBQUNuQiwwRUFBd0Q7QUFDeEQsNEVBQTBEO0FBQzFELDBFQUF3RDtBQUN4RCw0RUFBMEQ7QUFDMUQsNkVBQTJEO0FBQzNELCtFQUE2RDtBQUM3RCx5RUFBdUQ7QUFDdkQsMkVBQXlEO0FBQ3pELDBFQUF3RDtBQUN4RCw0RUFBMEQ7QUFDMUQsaUVBQStDO0FBQy9DLG1FQUFpRDtBQUNqRCx1RUFBcUQ7QUFDckQseUVBQXVEO0FBQ3ZELHNFQUFvRDtBQUNwRCx3RUFBc0Q7QUFDdEQsdUVBQXFEO0FBQ3JELHlFQUF1RDtBQUN2RCx1RUFBcUQ7QUFDckQseUVBQXVEO0FBQ3ZELDhFQUE0RDtBQUM1RCxnRkFBOEQ7QUFDOUQseUVBQXVEO0FBQ3ZELDJFQUF5RDtBQUN6RCx5RUFBdUQ7QUFDdkQsMkVBQXlEO0FBQ3pELDBFQUF3RDtBQUN4RCw0RUFBMEQ7QUFDMUQsd0VBQXNEO0FBQ3RELDBFQUF3RDtBQUN4RCwrREFBNkM7QUFDN0MsaUVBQStDO0FBQy9DLHFFQUFtRDtBQUNuRCx1RUFBcUQ7QUFDckQsdUVBQXFEO0FBQ3JELHlFQUF1RDtBQUN2RCxxRUFBbUQ7QUFDbkQsdUVBQXFEO0FBQ3JELG1FQUFpRDtBQUNqRCxxRUFBbUQ7QUFDbkQsOEVBQTREO0FBQzVELGdGQUE4RDtBQUM5RCx3RkFBc0U7QUFDdEUsMEZBQXdFO0FBQ3hFLHNFQUFvRDtBQUNwRCx3RUFBc0Q7QUFDdEQseUVBQXVEO0FBQ3ZELDJFQUF5RDtBQUN6RCwwRUFBd0Q7QUFDeEQseUVBQXVEO0FBQ3ZELDJFQUF5RDtBQUN6RCwyRUFBeUQ7QUFDekQsNkVBQTJEO0FBQzNELDJFQUF5RDtBQUN6RCw2RUFBMkQ7QUFDM0QsNEVBQTBEO0FBQzFELDhFQUE0RDtBQUM1RCwrREFBNkM7QUFDN0MsaUVBQStDO0FBQy9DLHVFQUFxRDtBQUNyRCx5RUFBdUQ7QUFDdkQsb0VBQWtEO0FBQ2xELHNFQUFvRDtBQUNwRCxxRkFBbUU7QUFDbkUsdUZBQXFFO0FBQ3JFLDhFQUE4RTtBQUM5RSxpQ0FBaUM7QUFDakMseUZBQXVFO0FBQ3ZFLDJGQUF5RTtBQUN6RSx5RUFBdUQ7QUFDdkQsMkVBQXlEO0FBQ3pELDBGQUF3RTtBQUN4RSw0RkFBMEU7QUFDMUUsb0VBQWtEO0FBQ2xELHNFQUFvRDtBQUNwRCx5RUFBdUQ7QUFDdkQsMkVBQXlEO0FBQ3pELGFBQWE7QUFDYix1REFBcUM7QUFDckMsMERBQXdDO0FBQ3hDLDBEQUF3QztBQUN4QyxrRUFBZ0Q7QUFDaEQscURBQW1DIn0=
155
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLE1BQU07QUFDTixpREFBK0I7QUFDL0IsNkRBQTJDO0FBQzNDLGdEQUE4QjtBQUM5QixzREFBb0M7QUFDcEMsaURBQStCO0FBQy9CLGlEQUErQjtBQUMvQixxREFBbUM7QUFDbkMsd0RBQXNDO0FBQ3RDLHVEQUFxQztBQUNyQyxvREFBa0M7QUFDbEMsaURBQStCO0FBQy9CLHdEQUFzQztBQUN0QyxTQUFTO0FBQ1QsbURBQWlDO0FBQ2pDLDhEQUE0QztBQUM1Qyw0REFBMEM7QUFDMUMsMERBQXdDO0FBQ3hDLCtEQUE2QztBQUM3Qyw2REFBMkM7QUFDM0MsbUVBQWlEO0FBQ2pELCtFQUErRTtBQUMvRSxnRUFBZ0U7QUFDaEUsa0VBQWdEO0FBQ2hELGtFQUFnRDtBQUNoRCxnRUFBOEM7QUFDOUMsd0VBQXNEO0FBQ3RELHNFQUFvRDtBQUNwRCwrREFBNkM7QUFDN0MsNkRBQTJDO0FBQzNDLGdFQUE4QztBQUM5Qyw4REFBNEM7QUFDNUMsbUVBQWlEO0FBQ2pELGlFQUErQztBQUMvQyx5REFBdUM7QUFDdkMsdURBQXFDO0FBQ3JDLCtEQUE2QztBQUM3QyxpRUFBK0M7QUFDL0MsNERBQTBDO0FBQzFDLDhEQUE0QztBQUM1QyxRQUFRO0FBQ1IsK0RBQTZDO0FBQzdDLGdFQUE4QztBQUM5QyxpQkFBaUI7QUFDakIsZ0VBQThDO0FBQzlDLDhEQUE0QztBQUM1QyxnRUFBOEM7QUFDOUMscURBQW1DO0FBQ25DLG1CQUFtQjtBQUNuQiwwRUFBd0Q7QUFDeEQsNEVBQTBEO0FBQzFELDBFQUF3RDtBQUN4RCw0RUFBMEQ7QUFDMUQsNkVBQTJEO0FBQzNELCtFQUE2RDtBQUM3RCx5RUFBdUQ7QUFDdkQsMkVBQXlEO0FBQ3pELDBFQUF3RDtBQUN4RCw0RUFBMEQ7QUFDMUQsaUVBQStDO0FBQy9DLG1FQUFpRDtBQUNqRCx1RUFBcUQ7QUFDckQseUVBQXVEO0FBQ3ZELHNFQUFvRDtBQUNwRCx3RUFBc0Q7QUFDdEQsdUVBQXFEO0FBQ3JELHlFQUF1RDtBQUN2RCx1RUFBcUQ7QUFDckQseUVBQXVEO0FBQ3ZELDhFQUE0RDtBQUM1RCxnRkFBOEQ7QUFDOUQscUVBQW1EO0FBQ25ELHVFQUFxRDtBQUNyRCx5RUFBdUQ7QUFDdkQsMkVBQXlEO0FBQ3pELHlFQUF1RDtBQUN2RCwyRUFBeUQ7QUFDekQsMEVBQXdEO0FBQ3hELDRFQUEwRDtBQUMxRCx3RUFBc0Q7QUFDdEQsMEVBQXdEO0FBQ3hELCtEQUE2QztBQUM3QyxpRUFBK0M7QUFDL0MscUVBQW1EO0FBQ25ELHVFQUFxRDtBQUNyRCx1RUFBcUQ7QUFDckQseUVBQXVEO0FBQ3ZELHFFQUFtRDtBQUNuRCx1RUFBcUQ7QUFDckQsbUVBQWlEO0FBQ2pELHFFQUFtRDtBQUNuRCwrRUFBNkQ7QUFDN0QsaUZBQStEO0FBQy9ELDhFQUE0RDtBQUM1RCxnRkFBOEQ7QUFDOUQsd0ZBQXNFO0FBQ3RFLDBGQUF3RTtBQUN4RSxzRUFBb0Q7QUFDcEQsd0VBQXNEO0FBQ3RELHlFQUF1RDtBQUN2RCwyRUFBeUQ7QUFDekQsMEVBQXdEO0FBQ3hELHlFQUF1RDtBQUN2RCwyRUFBeUQ7QUFDekQsMkVBQXlEO0FBQ3pELDZFQUEyRDtBQUMzRCwyRUFBeUQ7QUFDekQsNkVBQTJEO0FBQzNELDRFQUEwRDtBQUMxRCw4RUFBNEQ7QUFDNUQsK0RBQTZDO0FBQzdDLGlFQUErQztBQUMvQyx1RUFBcUQ7QUFDckQseUVBQXVEO0FBQ3ZELG9FQUFrRDtBQUNsRCxzRUFBb0Q7QUFDcEQscUZBQW1FO0FBQ25FLHVGQUFxRTtBQUNyRSw4RUFBOEU7QUFDOUUsaUNBQWlDO0FBQ2pDLHlGQUF1RTtBQUN2RSwyRkFBeUU7QUFDekUseUVBQXVEO0FBQ3ZELDJFQUF5RDtBQUN6RCwwRkFBd0U7QUFDeEUsNEZBQTBFO0FBQzFFLG9FQUFrRDtBQUNsRCxzRUFBb0Q7QUFDcEQseUVBQXVEO0FBQ3ZELDJFQUF5RDtBQUN6RCxhQUFhO0FBQ2IsdURBQXFDO0FBQ3JDLDBEQUF3QztBQUN4Qyx1RUFBcUQ7QUFDckQsaUVBQStDO0FBQy9DLDBEQUF3QztBQUN4QyxrRUFBZ0Q7QUFDaEQscURBQW1DIn0=
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Internal helpers shared by the data-only record contracts. This module is
3
+ * deliberately absent from the package index: the guards below are an
4
+ * implementation detail of the exported sanitizers, not public contract.
5
+ */
6
+ /**
7
+ * True only for ordinary data objects. Class instances, arrays, and exotic
8
+ * objects are rejected so untrusted payloads cannot smuggle prototypes or
9
+ * accessors through a contract boundary.
10
+ */
11
+ export declare function isPlainRecord(value: unknown): value is Record<string, unknown>;
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ /**
3
+ * Internal helpers shared by the data-only record contracts. This module is
4
+ * deliberately absent from the package index: the guards below are an
5
+ * implementation detail of the exported sanitizers, not public contract.
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.isPlainRecord = isPlainRecord;
9
+ /**
10
+ * True only for ordinary data objects. Class instances, arrays, and exotic
11
+ * objects are rejected so untrusted payloads cannot smuggle prototypes or
12
+ * accessors through a contract boundary.
13
+ */
14
+ function isPlainRecord(value) {
15
+ if (value === null || typeof value !== 'object' || Array.isArray(value)) {
16
+ return false;
17
+ }
18
+ const prototype = Object.getPrototypeOf(value);
19
+ return prototype === Object.prototype || prototype === null;
20
+ }
21
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxhaW4tcmVjb3JkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2ludGVybmFsL3BsYWluLXJlY29yZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7R0FJRzs7QUFPSCxzQ0FNQztBQVhEOzs7O0dBSUc7QUFDSCxTQUFnQixhQUFhLENBQUMsS0FBYztJQUMxQyxJQUFJLEtBQUssS0FBSyxJQUFJLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUN4RSxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFDRCxNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQy9DLE9BQU8sU0FBUyxLQUFLLE1BQU0sQ0FBQyxTQUFTLElBQUksU0FBUyxLQUFLLElBQUksQ0FBQztBQUM5RCxDQUFDIn0=
@@ -3,6 +3,14 @@ import jsonata from 'jsonata';
3
3
  * A function that accepts a context and evaluates a previously compiled expression.
4
4
  */
5
5
  export type JSONataEvaluate = (context: unknown) => Promise<unknown>;
6
+ /** Bindings that could restore dynamic expression evaluation are never accepted. */
7
+ export declare const JSONATA_PROHIBITED_BINDING_NAMES: readonly ["eval", "jsonata"];
8
+ type JSONataFunctionImplementation = Parameters<jsonata.Expression['registerFunction']>[1];
9
+ export interface JSONataFunctionDefinition {
10
+ implementation: JSONataFunctionImplementation;
11
+ signature?: string;
12
+ }
13
+ export type JSONataFunctionRegistry = Readonly<Record<string, JSONataFunctionDefinition>>;
6
14
  /**
7
15
  * Format a date using the luxon library.
8
16
  * @param value The value to format.
@@ -10,6 +18,8 @@ export type JSONataEvaluate = (context: unknown) => Promise<unknown>;
10
18
  * @param sourceFormat The optional format of the value, if known.
11
19
  */
12
20
  export declare function luxonFormatDate(value: undefined | null | string | number | Date, format: undefined | null | string, sourceFormat?: null | string): string;
21
+ /** Deterministic names derived from the complete shared function registry. */
22
+ export declare const JSONATA_CUSTOM_FUNCTION_NAMES: readonly ("eval" | "luxonFormatDate" | "guessNameParts")[];
13
23
  /**
14
24
  * Prepare a jsonata expression to be transferred from server to client.
15
25
  * @param expression The jsonata expression string.
@@ -35,6 +45,11 @@ export declare function jsonataDecodeCompile(expressionEncoded: string, options?
35
45
  * @return compiled JSONata expression object
36
46
  */
37
47
  export declare function jsonataCompile(expression: string, options?: jsonata.JsonataOptions): jsonata.Expression;
48
+ /** Register the complete shared JSONata function set on a compiled expression. */
49
+ export declare function registerJSONataCustomFunctions(compiled: jsonata.Expression): jsonata.Expression;
50
+ /** Register a deterministic function set, including service-local extensions. */
51
+ export declare function registerJSONataFunctions(compiled: jsonata.Expression, registry: JSONataFunctionRegistry): jsonata.Expression;
38
52
  export declare function jsonataEvaluate(compiled: jsonata.Expression, context: unknown, bindings?: Record<string, unknown>): Promise<unknown>;
39
53
  export declare function jsonataCompileAndEvaluate(expression: string, context: unknown, bindings?: Record<string, unknown>): Promise<unknown>;
40
54
  export declare function jsonataEvaluateFunc(expression: string, bindings?: Record<string, unknown>): JSONataEvaluate;
55
+ export {};
@@ -3,10 +3,13 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.JSONATA_CUSTOM_FUNCTION_NAMES = exports.JSONATA_PROHIBITED_BINDING_NAMES = void 0;
6
7
  exports.luxonFormatDate = luxonFormatDate;
7
8
  exports.jsonataExpressionEncode = jsonataExpressionEncode;
8
9
  exports.jsonataDecodeCompile = jsonataDecodeCompile;
9
10
  exports.jsonataCompile = jsonataCompile;
11
+ exports.registerJSONataCustomFunctions = registerJSONataCustomFunctions;
12
+ exports.registerJSONataFunctions = registerJSONataFunctions;
10
13
  exports.jsonataEvaluate = jsonataEvaluate;
11
14
  exports.jsonataCompileAndEvaluate = jsonataCompileAndEvaluate;
12
15
  exports.jsonataEvaluateFunc = jsonataEvaluateFunc;
@@ -15,6 +18,8 @@ const luxon_1 = require("luxon");
15
18
  const html_helpers_1 = require("./html-helpers");
16
19
  const naming_helpers_1 = require("./config/names/naming-helpers");
17
20
  const translation_helpers_1 = require("./translation-helpers");
21
+ /** Bindings that could restore dynamic expression evaluation are never accepted. */
22
+ exports.JSONATA_PROHIBITED_BINDING_NAMES = ['eval', 'jsonata'];
18
23
  /**
19
24
  * Format a date using the luxon library.
20
25
  * @param value The value to format.
@@ -50,6 +55,24 @@ function luxonFormatDate(value, format, sourceFormat) {
50
55
  }
51
56
  return dateTime.isValid ? dateTime.toFormat(outputFormat) : '';
52
57
  }
58
+ /** The single source of truth for functions installed by every shared compiler. */
59
+ const JSONATA_CUSTOM_FUNCTION_REGISTRY = {
60
+ eval: {
61
+ implementation: () => {
62
+ throw new Error('Attempted to invoke eval');
63
+ },
64
+ },
65
+ luxonFormatDate: {
66
+ implementation: luxonFormatDate,
67
+ signature: '<(snlo)(sl)(sl)?:s>',
68
+ },
69
+ guessNameParts: {
70
+ implementation: translation_helpers_1.guessNameParts,
71
+ signature: '<(sl):o>',
72
+ },
73
+ };
74
+ /** Deterministic names derived from the complete shared function registry. */
75
+ exports.JSONATA_CUSTOM_FUNCTION_NAMES = Object.freeze(Object.keys(JSONATA_CUSTOM_FUNCTION_REGISTRY));
53
76
  /**
54
77
  * Prepare a jsonata expression to be transferred from server to client.
55
78
  * @param expression The jsonata expression string.
@@ -82,27 +105,40 @@ function jsonataDecodeCompile(expressionEncoded, options) {
82
105
  function jsonataCompile(expression, options) {
83
106
  expression = (0, naming_helpers_1.normaliseVisual)(expression);
84
107
  const compiled = (0, jsonata_1.default)(expression, options);
108
+ registerJSONataCustomFunctions(compiled);
109
+ return compiled;
110
+ }
111
+ /** Register the complete shared JSONata function set on a compiled expression. */
112
+ function registerJSONataCustomFunctions(compiled) {
85
113
  // Register jsonata functions.
86
114
  // The function signatures are used on purpose to restrict the arguments,
87
115
  // so invalid input types are clear instead of hidden.
88
116
  // Callers of the jsonata helper functions must be prepared for possible parse errors and input type errors.
89
- // Disable JSONata's dynamic eval function so browser/server validators only run the configured expression.
90
- compiled.registerFunction('eval', () => { throw new Error('Attempted to invoke eval'); });
91
- // Register a function for formatting date time values.
92
- // First param 'value': string, number, null, object (to allow Date)
93
- // Second param 'format': string, null
94
- // Third param 'sourceFormat': string, null, optional
95
- // Return type: string
96
- compiled.registerFunction('luxonFormatDate', luxonFormatDate, '<(snlo)(sl)(sl)?:s>');
97
- // Register a function for guessing name parts.
98
- // First param 'value': string, null
99
- // Return type: object
100
- compiled.registerFunction('guessNameParts', translation_helpers_1.guessNameParts, '<(sl):o>');
117
+ registerJSONataFunctions(compiled, JSONATA_CUSTOM_FUNCTION_REGISTRY);
101
118
  // TODO: consider registering a function for translations
102
119
  // TODO: consider replacing regex with google's re2?
103
120
  return compiled;
104
121
  }
122
+ /** Register a deterministic function set, including service-local extensions. */
123
+ function registerJSONataFunctions(compiled, registry) {
124
+ for (const [name, definition] of Object.entries(registry)) {
125
+ compiled.registerFunction(name, definition.implementation, definition.signature);
126
+ }
127
+ return compiled;
128
+ }
129
+ function assertSafeJSONataBindings(bindings) {
130
+ if (!bindings) {
131
+ return;
132
+ }
133
+ const prohibited = new Set(exports.JSONATA_PROHIBITED_BINDING_NAMES);
134
+ for (const key of Object.keys(bindings)) {
135
+ if (prohibited.has(key.replace(/^\$/, ''))) {
136
+ throw new Error(`JSONata binding '${key}' is not supported`);
137
+ }
138
+ }
139
+ }
105
140
  async function jsonataEvaluate(compiled, context, bindings) {
141
+ assertSafeJSONataBindings(bindings);
106
142
  return await compiled.evaluate(context, bindings);
107
143
  }
108
144
  async function jsonataCompileAndEvaluate(expression, context, bindings) {
@@ -115,4 +151,4 @@ function jsonataEvaluateFunc(expression, bindings) {
115
151
  return await jsonataEvaluate(compiled, value, bindings);
116
152
  };
117
153
  }
118
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoianNvbmF0YS1oZWxwZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2pzb25hdGEtaGVscGVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQWlCQSwwQ0FnQ0M7QUFNRCwwREFHQztBQVdELG9EQUVDO0FBV0Qsd0NBNEJDO0FBRUQsMENBTUM7QUFFRCw4REFPQztBQUVELGtEQUtDO0FBdElELHNEQUE4QjtBQUM5QixpQ0FBaUM7QUFDakMsaURBQTBEO0FBQzFELGtFQUE4RDtBQUM5RCwrREFBcUQ7QUFPckQ7Ozs7O0dBS0c7QUFDSCxTQUFnQixlQUFlLENBQzdCLEtBQWdELEVBQ2hELE1BQWlDLEVBQ2pDLFlBQTRCO0lBRTVCLElBQUksS0FBSyxLQUFLLFNBQVMsSUFBSSxLQUFLLEtBQUssSUFBSSxJQUFJLEtBQUssS0FBSyxFQUFFLEVBQUUsQ0FBQztRQUMxRCxPQUFPLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRCxNQUFNLFlBQVksR0FBRyxPQUFPLE1BQU0sS0FBSyxRQUFRLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQztJQUNsRixNQUFNLFdBQVcsR0FBRyxPQUFPLFlBQVksS0FBSyxRQUFRLElBQUksWUFBWSxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztJQUNoRyxNQUFNLGFBQWEsR0FBRyxPQUFPLEtBQUssS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQy9FLElBQUksUUFBa0IsQ0FBQztJQUV2QixJQUFJLEtBQUssWUFBWSxJQUFJLEVBQUUsQ0FBQztRQUMxQixRQUFRLEdBQUcsZ0JBQVEsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDeEMsQ0FBQztTQUFNLElBQUksT0FBTyxLQUFLLEtBQUss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
154
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoianNvbmF0YS1oZWxwZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2pzb25hdGEtaGVscGVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUE2QkEsMENBZ0NDO0FBNEJELDBEQUdDO0FBV0Qsb0RBRUM7QUFXRCx3Q0FPQztBQUdELHdFQVlDO0FBR0QsNERBUUM7QUFjRCwwQ0FPQztBQUVELDhEQU9DO0FBRUQsa0RBS0M7QUExTEQsc0RBQThCO0FBQzlCLGlDQUFpQztBQUNqQyxpREFBNEQ7QUFDNUQsa0VBQWdFO0FBQ2hFLCtEQUF1RDtBQU92RCxvRkFBb0Y7QUFDdkUsUUFBQSxnQ0FBZ0MsR0FBRyxDQUFDLE1BQU0sRUFBRSxTQUFTLENBQVUsQ0FBQztBQVc3RTs7Ozs7R0FLRztBQUNILFNBQWdCLGVBQWUsQ0FDN0IsS0FBZ0QsRUFDaEQsTUFBaUMsRUFDakMsWUFBNEI7SUFFNUIsSUFBSSxLQUFLLEtBQUssU0FBUyxJQUFJLEtBQUssS0FBSyxJQUFJLElBQUksS0FBSyxLQUFLLEVBQUUsRUFBRSxDQUFDO1FBQzFELE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVELE1BQU0sWUFBWSxHQUFHLE9BQU8sTUFBTSxLQUFLLFFBQVEsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDO0lBQ2xGLE1BQU0sV0FBVyxHQUFHLE9BQU8sWUFBWSxLQUFLLFFBQVEsSUFBSSxZQUFZLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0lBQ2hHLE1BQU0sYUFBYSxHQUFHLE9BQU8sS0FBSyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDL0UsSUFBSSxRQUFrQixDQUFDO0lBRXZCLElBQUksS0FBSyxZQUFZLElBQUksRUFBRSxDQUFD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
@@ -0,0 +1,9 @@
1
+ /** @internal A deterministic expression fixture used by browser/server parity tests. */
2
+ export interface JSONataParityFixture {
3
+ name: string;
4
+ expression: string;
5
+ context: unknown;
6
+ expected: unknown;
7
+ }
8
+ /** @internal */
9
+ export declare const jsonataParityFixtures: JSONataParityFixture[];
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.jsonataParityFixtures = void 0;
4
+ /** @internal */
5
+ exports.jsonataParityFixtures = [
6
+ {
7
+ name: 'evaluates standard JSONata functions',
8
+ expression: '$sum(items.amount)',
9
+ context: { items: [{ amount: 2 }, { amount: 3 }, { amount: 5 }] },
10
+ expected: 10,
11
+ },
12
+ {
13
+ name: 'formats an ISO date through the shared Luxon function',
14
+ expression: '$luxonFormatDate(date, "yyyy-LL-dd")',
15
+ context: { date: '2026-08-22' },
16
+ expected: '2026-08-22',
17
+ },
18
+ {
19
+ name: 'guesses name parts through the shared helper',
20
+ expression: '$guessNameParts(name)',
21
+ context: { name: 'Ada Lovelace' },
22
+ expected: { full: 'Ada Lovelace', first: 'Ada', last: 'Lovelace' },
23
+ },
24
+ ];
25
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoianNvbmF0YS1wYXJpdHkuZml4dHVyZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvanNvbmF0YS1wYXJpdHkuZml4dHVyZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBUUEsZ0JBQWdCO0FBQ0gsUUFBQSxxQkFBcUIsR0FBMkI7SUFDM0Q7UUFDRSxJQUFJLEVBQUUsc0NBQXNDO1FBQzVDLFVBQVUsRUFBRSxvQkFBb0I7UUFDaEMsT0FBTyxFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtRQUNqRSxRQUFRLEVBQUUsRUFBRTtLQUNiO0lBQ0Q7UUFDRSxJQUFJLEVBQUUsdURBQXVEO1FBQzdELFVBQVUsRUFBRSxzQ0FBc0M7UUFDbEQsT0FBTyxFQUFFLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRTtRQUMvQixRQUFRLEVBQUUsWUFBWTtLQUN2QjtJQUNEO1FBQ0UsSUFBSSxFQUFFLDhDQUE4QztRQUNwRCxVQUFVLEVBQUUsdUJBQXVCO1FBQ25DLE9BQU8sRUFBRSxFQUFFLElBQUksRUFBRSxjQUFjLEVBQUU7UUFDakMsUUFBUSxFQUFFLEVBQUUsSUFBSSxFQUFFLGNBQWMsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUU7S0FDbkU7Q0FDRixDQUFDIn0=
@@ -0,0 +1,118 @@
1
+ /**
2
+ * Data-only optimistic-concurrency contracts shared by the server and browser.
3
+ * Runtime policy enforcement remains a backend responsibility.
4
+ */
5
+ import { isRecordSaveRequestId } from './record-save.model';
6
+ export declare const RECORD_CONCURRENT_MODIFICATION_MODES: readonly ["last-write-wins", "observe", "strict"];
7
+ export type RecordConcurrentModificationMode = (typeof RECORD_CONCURRENT_MODIFICATION_MODES)[number];
8
+ export interface RecordConcurrentModificationConfig {
9
+ mode: RecordConcurrentModificationMode;
10
+ }
11
+ export declare const DEFAULT_RECORD_CONCURRENT_MODIFICATION_MODE: "last-write-wins";
12
+ export declare const DEFAULT_RECORD_CONCURRENT_MODIFICATION_CONFIG: Readonly<RecordConcurrentModificationConfig>;
13
+ export type RecordConcurrentModificationConfigValidation = {
14
+ readonly valid: true;
15
+ readonly config: RecordConcurrentModificationConfig;
16
+ readonly defaulted: boolean;
17
+ } | {
18
+ readonly valid: false;
19
+ readonly reason: 'malformed-config' | 'malformed-mode';
20
+ };
21
+ export declare const RECORD_CONCURRENCY_RESOLUTIONS: readonly ["direct", "already-current", "client-auto-merged", "client-manually-resolved", "internal"];
22
+ /**
23
+ * Diagnostic description of how a successful candidate was produced. It is
24
+ * never authority and never relaxes authorization, validation, or persistence:
25
+ * the server repeats every check regardless of the label a client sent.
26
+ */
27
+ export type RecordConcurrencyResolution = (typeof RECORD_CONCURRENCY_RESOLUTIONS)[number];
28
+ export declare const RECORD_CONCURRENCY_PROBLEM_CODES: readonly ["record-precondition-required", "record-revision-stale", "record-deleted", "record-concurrency-capability-unavailable", "form-definition-changed", "record-lifecycle-operation-conflict"];
29
+ export type RecordConcurrencyProblemCode = (typeof RECORD_CONCURRENCY_PROBLEM_CODES)[number];
30
+ /** Revisions are exact non-negative integers, not timestamps or floating-point counters. */
31
+ export declare const RECORD_REVISION_MAX: number;
32
+ /**
33
+ * Entity tags are quoted, bounded, opaque values produced by one backend
34
+ * helper. Clients retain and return the complete value; they never construct a
35
+ * tag from the numeric revision.
36
+ */
37
+ export declare const RECORD_ENTITY_TAG_VERSION: "rb-record-v1";
38
+ export declare const RECORD_ENTITY_TAG_MAX_LENGTH = 128;
39
+ export declare const RECORD_ENTITY_TAG_RECORD_ID_MAX_LENGTH = 1024;
40
+ /**
41
+ * `"<version>.<revision>.<digest>"`. Built from the version constant so a
42
+ * future format bump cannot leave the guard matching the previous shape.
43
+ */
44
+ export declare const RECORD_ENTITY_TAG_PATTERN: RegExp;
45
+ declare const recordEntityTagBrand: unique symbol;
46
+ export type RecordEntityTag = string & {
47
+ readonly [recordEntityTagBrand]: true;
48
+ };
49
+ /**
50
+ * Form fingerprints are deliberately independent of record revisions and
51
+ * entity tags: an administrator editing a form must not invalidate API
52
+ * operations that never rendered it.
53
+ */
54
+ export declare const RECORD_FORM_FINGERPRINT_MAX_LENGTH = 128;
55
+ export declare const RECORD_FORM_FINGERPRINT_PATTERN: RegExp;
56
+ declare const recordFormFingerprintBrand: unique symbol;
57
+ export type RecordFormFingerprint = string & {
58
+ readonly [recordFormFingerprintBrand]: true;
59
+ };
60
+ export interface RecordConcurrencyMetadata {
61
+ mode?: RecordConcurrentModificationMode;
62
+ revision?: number;
63
+ expectedRevision?: number;
64
+ currentRevision?: number;
65
+ entityTag?: string;
66
+ formFingerprint?: string;
67
+ /** Diagnostic only; the server repeats all authoritative checks. */
68
+ resolution?: RecordConcurrencyResolution;
69
+ /** Bounded diagnostic linkage to the prior request; not an idempotency key. */
70
+ resolutionOfRequestId?: string;
71
+ }
72
+ export declare function isRecordConcurrentModificationMode(value: unknown): value is RecordConcurrentModificationMode;
73
+ /**
74
+ * Validate absent, valid, and malformed record-type policy. Absent policy is
75
+ * the compatibility default; an explicit but malformed policy is reported so
76
+ * enforcement boundaries can fail closed rather than silently defaulting.
77
+ * No raw input is retained in the result.
78
+ */
79
+ export declare function validateRecordConcurrentModificationConfig(value: unknown): RecordConcurrentModificationConfigValidation;
80
+ /** True only for an explicit, well-formed policy object. */
81
+ export declare function isRecordConcurrentModificationConfig(value: unknown): value is RecordConcurrentModificationConfig;
82
+ /**
83
+ * Resolve the compatibility default while failing closed for explicit
84
+ * malformed policy. Use this at enforcement boundaries, where guessing a mode
85
+ * would risk permitting an unguarded write.
86
+ */
87
+ export declare function resolveRecordConcurrentModificationConfig(value: unknown): RecordConcurrentModificationConfig;
88
+ export declare function resolveRecordConcurrentModificationMode(value: unknown): RecordConcurrentModificationMode;
89
+ /**
90
+ * Non-throwing counterpart for presentation boundaries such as record-type
91
+ * discovery, where one corrupted stored policy must not break an unrelated
92
+ * listing. Reporting the default is safe because it cannot loosen enforcement:
93
+ * a malformed policy still fails closed when a mutation resolves it.
94
+ */
95
+ export declare function coerceRecordConcurrentModificationConfig(value: unknown): RecordConcurrentModificationConfig;
96
+ export declare function isRecordConcurrencyResolution(value: unknown): value is RecordConcurrencyResolution;
97
+ export declare function isRecordConcurrencyProblemCode(value: unknown): value is RecordConcurrencyProblemCode;
98
+ export declare function isRecordRevision(value: unknown): value is number;
99
+ export declare function recordEntityTagRevision(value: unknown): number | undefined;
100
+ /**
101
+ * Structural entity-tag guard. Record identity is certified by the backend
102
+ * parser, which recomputes the digest for a known OID; this guard only proves
103
+ * the value has the bounded opaque shape worth carrying in client state.
104
+ */
105
+ export declare function isRecordEntityTag(value: unknown): value is RecordEntityTag;
106
+ export declare function isRecordFormFingerprint(value: unknown): value is RecordFormFingerprint;
107
+ export declare const RECORD_CONCURRENCY_REQUEST_ID_MAX_LENGTH = 36;
108
+ /** Diagnostic request linkage uses the same canonical save request-id format. */
109
+ export declare const isRecordConcurrencyRequestId: typeof isRecordSaveRequestId;
110
+ /** Runtime guard used at transport boundaries for bounded concurrency metadata. */
111
+ export declare function isRecordConcurrencyMetadata(value: unknown): value is RecordConcurrencyMetadata;
112
+ /**
113
+ * Copy only valid bounded fields from untrusted or cross-runtime metadata.
114
+ * Unknown keys are dropped rather than carried, so a payload cannot widen the
115
+ * diagnostic contract. Returns `undefined` when nothing survives.
116
+ */
117
+ export declare function sanitizeRecordConcurrencyMetadata(value: unknown): RecordConcurrencyMetadata | undefined;
118
+ export {};