@superbee/core 0.1.5 → 0.2.0-pre.1

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 (125) hide show
  1. package/dist/backend.d.ts.map +1 -1
  2. package/dist/backend.js +29 -7
  3. package/dist/backend.js.map +1 -1
  4. package/dist/bundle-ops.d.ts +42 -0
  5. package/dist/bundle-ops.d.ts.map +1 -0
  6. package/dist/bundle-ops.js +88 -0
  7. package/dist/bundle-ops.js.map +1 -0
  8. package/dist/bundle.d.ts +8 -27
  9. package/dist/bundle.d.ts.map +1 -1
  10. package/dist/bundle.js +9 -66
  11. package/dist/bundle.js.map +1 -1
  12. package/dist/document-field-actions.d.ts +95 -0
  13. package/dist/document-field-actions.d.ts.map +1 -0
  14. package/dist/document-field-actions.js +261 -0
  15. package/dist/document-field-actions.js.map +1 -0
  16. package/dist/document-mutation.d.ts +51 -3
  17. package/dist/document-mutation.d.ts.map +1 -1
  18. package/dist/document-mutation.js +90 -43
  19. package/dist/document-mutation.js.map +1 -1
  20. package/dist/document-write-policy.d.ts +5 -3
  21. package/dist/document-write-policy.d.ts.map +1 -1
  22. package/dist/document-write-policy.js +38 -46
  23. package/dist/document-write-policy.js.map +1 -1
  24. package/dist/engine.d.ts +2 -0
  25. package/dist/engine.d.ts.map +1 -1
  26. package/dist/engine.js +2 -1
  27. package/dist/engine.js.map +1 -1
  28. package/dist/freshness.d.ts +10 -7
  29. package/dist/freshness.d.ts.map +1 -1
  30. package/dist/freshness.js +14 -11
  31. package/dist/freshness.js.map +1 -1
  32. package/dist/frontmatter-contract.d.ts +2 -2
  33. package/dist/frontmatter-contract.js +2 -2
  34. package/dist/frontmatter.d.ts +3 -1
  35. package/dist/frontmatter.d.ts.map +1 -1
  36. package/dist/frontmatter.js +7 -4
  37. package/dist/frontmatter.js.map +1 -1
  38. package/dist/index.d.ts +11 -3
  39. package/dist/index.d.ts.map +1 -1
  40. package/dist/index.js +13 -2
  41. package/dist/index.js.map +1 -1
  42. package/dist/indexeddb-backend.d.ts +165 -0
  43. package/dist/indexeddb-backend.d.ts.map +1 -0
  44. package/dist/indexeddb-backend.js +718 -0
  45. package/dist/indexeddb-backend.js.map +1 -0
  46. package/dist/journaled-backend.d.ts +178 -0
  47. package/dist/journaled-backend.d.ts.map +1 -0
  48. package/dist/journaled-backend.js +77 -0
  49. package/dist/journaled-backend.js.map +1 -0
  50. package/dist/kind-field-mutation.d.ts +15 -0
  51. package/dist/kind-field-mutation.d.ts.map +1 -0
  52. package/dist/kind-field-mutation.js +160 -0
  53. package/dist/kind-field-mutation.js.map +1 -0
  54. package/dist/kinds-load.d.ts.map +1 -1
  55. package/dist/kinds-load.js +11 -3
  56. package/dist/kinds-load.js.map +1 -1
  57. package/dist/kinds.d.ts +6 -2
  58. package/dist/kinds.d.ts.map +1 -1
  59. package/dist/kinds.js +15 -4
  60. package/dist/kinds.js.map +1 -1
  61. package/dist/meaningful-change-time.d.ts +6 -6
  62. package/dist/meaningful-change-time.d.ts.map +1 -1
  63. package/dist/meaningful-change-time.js +12 -13
  64. package/dist/meaningful-change-time.js.map +1 -1
  65. package/dist/mutation.d.ts.map +1 -1
  66. package/dist/mutation.js +2 -2
  67. package/dist/mutation.js.map +1 -1
  68. package/dist/okf-authored-values.d.ts +11 -0
  69. package/dist/okf-authored-values.d.ts.map +1 -0
  70. package/dist/okf-authored-values.js +37 -0
  71. package/dist/okf-authored-values.js.map +1 -0
  72. package/dist/okf-lifecycle.d.ts +4 -0
  73. package/dist/okf-lifecycle.d.ts.map +1 -0
  74. package/dist/okf-lifecycle.js +6 -0
  75. package/dist/okf-lifecycle.js.map +1 -0
  76. package/dist/okf-standard-fields.d.ts +10 -0
  77. package/dist/okf-standard-fields.d.ts.map +1 -0
  78. package/dist/okf-standard-fields.js +111 -0
  79. package/dist/okf-standard-fields.js.map +1 -0
  80. package/dist/okf-timestamps.d.ts +1 -2
  81. package/dist/okf-timestamps.d.ts.map +1 -1
  82. package/dist/okf-timestamps.js +2 -29
  83. package/dist/okf-timestamps.js.map +1 -1
  84. package/dist/page.d.ts.map +1 -1
  85. package/dist/page.js +2 -1
  86. package/dist/page.js.map +1 -1
  87. package/dist/platform.d.ts +161 -0
  88. package/dist/platform.d.ts.map +1 -0
  89. package/dist/platform.js +77 -0
  90. package/dist/platform.js.map +1 -0
  91. package/dist/recipes.d.ts +3 -1
  92. package/dist/recipes.d.ts.map +1 -1
  93. package/dist/recipes.js +4 -4
  94. package/dist/recipes.js.map +1 -1
  95. package/dist/remote-backend.d.ts +28 -0
  96. package/dist/remote-backend.d.ts.map +1 -1
  97. package/dist/remote-backend.js +75 -2
  98. package/dist/remote-backend.js.map +1 -1
  99. package/dist/remote-operations.d.ts +60 -0
  100. package/dist/remote-operations.d.ts.map +1 -0
  101. package/dist/remote-operations.js +110 -0
  102. package/dist/remote-operations.js.map +1 -0
  103. package/dist/sha256.d.ts +21 -0
  104. package/dist/sha256.d.ts.map +1 -0
  105. package/dist/sha256.js +114 -0
  106. package/dist/sha256.js.map +1 -0
  107. package/dist/storage.d.ts +5 -1
  108. package/dist/storage.d.ts.map +1 -1
  109. package/dist/storage.js +7 -1
  110. package/dist/storage.js.map +1 -1
  111. package/dist/types.d.ts +12 -0
  112. package/dist/types.d.ts.map +1 -1
  113. package/dist/uncertain-write.d.ts +142 -0
  114. package/dist/uncertain-write.d.ts.map +1 -0
  115. package/dist/uncertain-write.js +174 -0
  116. package/dist/uncertain-write.js.map +1 -0
  117. package/dist/version-transport.d.ts +7 -0
  118. package/dist/version-transport.d.ts.map +1 -1
  119. package/dist/version-transport.js +9 -0
  120. package/dist/version-transport.js.map +1 -1
  121. package/dist/versioning.d.ts +9 -3
  122. package/dist/versioning.d.ts.map +1 -1
  123. package/dist/versioning.js +14 -10
  124. package/dist/versioning.js.map +1 -1
  125. package/package.json +42 -3
@@ -0,0 +1,261 @@
1
+ /** Explicit frontmatter intent. Collection construction is owned here, before CAS metadata. */
2
+ import { InvalidInputError } from "./errors.js";
3
+ import { okfValuesEqual } from "./okf-authored-values.js";
4
+ import { kindInputFieldNames, resolveKindFieldCoordinate } from "./kinds.js";
5
+ /** Adapters can render corrective commands without parsing prose or repeating selection. */
6
+ export class FieldActionError extends InvalidInputError {
7
+ details;
8
+ constructor(message, details) {
9
+ super(message);
10
+ this.name = "FieldActionError";
11
+ this.details = details;
12
+ }
13
+ }
14
+ const managed = new Set(["generated", "verified", "superbee_updated_by", "actor", "timestamp"]);
15
+ const standard = new Set(["title", "description", "type", "resource"]);
16
+ const v02 = new Set(["status", "stale_after", "usage_window"]);
17
+ export function isStandardDocumentSetField(field, okfVersion) {
18
+ return standard.has(field) || (okfVersion === "0.2" && v02.has(field));
19
+ }
20
+ function record(value) {
21
+ return value !== null && typeof value === "object" && !Array.isArray(value);
22
+ }
23
+ function has(object, key) { return Object.prototype.hasOwnProperty.call(object, key); }
24
+ function sourceCandidates(rows) {
25
+ return {
26
+ total: rows.length,
27
+ candidates: rows.slice(0, 5).map(row => {
28
+ const identity = {};
29
+ for (const key of ["id", "resource", "title"]) {
30
+ if (record(row) && has(row, key) && typeof row[key] === "string")
31
+ identity[key] = row[key];
32
+ }
33
+ return identity;
34
+ }),
35
+ };
36
+ }
37
+ export function containsCollection(value) {
38
+ return Array.isArray(value) || (record(value) && Object.values(value).some(containsCollection));
39
+ }
40
+ export function assertNonCollectionAssignment(field, previous, value) {
41
+ if (containsCollection(previous) || containsCollection(value)) {
42
+ const correction = field === "tags" || field === "sources"
43
+ ? `Use an explicit ${field} add/remove/replace-all collection action.`
44
+ : "Use complete-document replacement: pull --doc-key <id>.md --out <file>, edit that file, then promote <file> --doc-key <id>.md --expected-version <version-from-pull>.";
45
+ throw new InvalidInputError(`Cannot assign '${field}': the old or new subtree contains a list. ${correction}`);
46
+ }
47
+ }
48
+ export function assertOrdinaryPatch(existing, proposed) {
49
+ for (const field of new Set([...Object.keys(existing), ...Object.keys(proposed)])) {
50
+ if (!okfValuesEqual(existing[field], proposed[field]))
51
+ assertNonCollectionAssignment(field, existing[field], proposed[field]);
52
+ }
53
+ }
54
+ function assertAssignmentName(field) {
55
+ if (managed.has(field))
56
+ throw new InvalidInputError(`'${field}' is managed metadata and cannot be assigned by a field action.`);
57
+ if (field === "tags" || field === "sources")
58
+ throw new InvalidInputError(`'${field}' requires an explicit collection add/remove/replace-all action.`);
59
+ }
60
+ /** Semantic legacy assignments retain input intent, including explicitly equal assignments. */
61
+ export function prepareDocumentAssignments(existing, assignments) {
62
+ if (!record(assignments))
63
+ throw new InvalidInputError("assignments must be a mapping");
64
+ for (const [field, value] of Object.entries(assignments)) {
65
+ assertAssignmentName(field);
66
+ assertNonCollectionAssignment(field, existing.frontmatter[field], value);
67
+ }
68
+ return { frontmatter: { ...existing.frontmatter, ...structuredClone(assignments) }, body: existing.body };
69
+ }
70
+ function sourceRow(value) {
71
+ if (!record(value) || typeof value.resource !== "string" || value.resource.trim() === "")
72
+ throw new InvalidInputError("A source entry requires a nonempty resource string.");
73
+ if (has(value, "id") && typeof value.id !== "string")
74
+ throw new InvalidInputError("A supplied source ID must be a string.");
75
+ }
76
+ function selectorIndex(rows, selector, edit) {
77
+ if (!record(selector) || Object.keys(selector).length !== 1 || !(has(selector, "id") || has(selector, "resource")))
78
+ throw new InvalidInputError("Select one source by exactly one id or resource.");
79
+ const key = has(selector, "id") ? "id" : "resource";
80
+ const value = selector[key];
81
+ // An imported empty ID is still an existing ID; it may be selected exactly but is never minted.
82
+ if (typeof value !== "string" || (key === "resource" && value.trim() === ""))
83
+ throw new InvalidInputError(`Source ${key} selector must be a string.`);
84
+ const matches = rows.flatMap((row, index) => record(row) && has(row, key) && row[key] === value ? [index] : []);
85
+ if (matches.length > 1)
86
+ throw new FieldActionError(`Source selector is ambiguous (${matches.length} matches); inspect sources and use a unique ID or version-guarded replace-all.`, {
87
+ reason: "ambiguous-source", field: "sources", selector: structuredClone(selector), ...sourceCandidates(matches.map(index => rows[index])),
88
+ });
89
+ if (matches.length === 0) {
90
+ if (edit)
91
+ throw new FieldActionError(`Source ${key} '${value}' was not found.`, {
92
+ reason: "source-not-found", field: "sources", selector: structuredClone(selector), ...sourceCandidates([]),
93
+ });
94
+ return -1;
95
+ }
96
+ const index = matches[0];
97
+ if (key === "resource" && has(rows[index], "id")) {
98
+ const id = rows[index].id;
99
+ if (typeof id !== "string")
100
+ throw new FieldActionError("This source has a malformed ID; repair it with version-guarded replace-all.", {
101
+ reason: "invalid-source-id", field: "sources", selector: structuredClone(selector), ...sourceCandidates([rows[index]]),
102
+ });
103
+ throw new FieldActionError(`This resource has source ID '${id}'; select it with --id.`, {
104
+ reason: "source-has-id", field: "sources", selector: structuredClone(selector), recommendedSelector: { id }, ...sourceCandidates([rows[index]]),
105
+ });
106
+ }
107
+ return index;
108
+ }
109
+ export function prepareDocumentFieldAction(existing, action, context) {
110
+ if (!record(action) || typeof action.field !== "string")
111
+ throw new InvalidInputError("A field action requires a field name.");
112
+ if (action.action === "set")
113
+ assertAssignmentName(action.field);
114
+ const keys = action.action === "edit" ? ["action", "field", "selector", "patch"]
115
+ : action.action === "remove" && action.field === "sources" ? ["action", "field", "selector"]
116
+ : ["action", "field", "value"];
117
+ if (Object.keys(action).some(key => !keys.includes(key)) || keys.some(key => !has(action, key)))
118
+ throw new InvalidInputError("Field action has missing or incompatible input properties.");
119
+ if ("value" in action && action.value === undefined)
120
+ throw new InvalidInputError("A field action value must be supplied; removing a field is not supported.");
121
+ let storageField = action.field;
122
+ let candidate = { frontmatter: structuredClone(existing.frontmatter), body: existing.body };
123
+ const scope = { field: action.field, action: action.action, outcome: "unchanged" };
124
+ if (action.action === "set") {
125
+ const kind = context.registry.kinds.get(String(existing.frontmatter.type));
126
+ const coordinate = kind && resolveKindFieldCoordinate(context.okfVersion, kind, action.field);
127
+ if (context.okfVersion === "0.1" && (action.field === "stale_after" || action.field === "usage_window"))
128
+ throw new InvalidInputError(`'${action.field}' requires OKF v0.2.`);
129
+ if (!isStandardDocumentSetField(action.field, context.okfVersion) && !coordinate) {
130
+ const supportedFields = [...new Set([
131
+ ...standard,
132
+ ...(context.okfVersion === "0.2" ? v02 : []),
133
+ ...(kind ? kindInputFieldNames(context.okfVersion, kind) : []),
134
+ ])].filter(field => {
135
+ if (managed.has(field) || field === "tags" || field === "sources")
136
+ return false;
137
+ if (context.okfVersion === "0.1" && (field === "stale_after" || field === "usage_window"))
138
+ return false;
139
+ const storage = kind && resolveKindFieldCoordinate(context.okfVersion, kind, field);
140
+ return !containsCollection(existing.frontmatter[storage?.storageField ?? field]);
141
+ }).sort();
142
+ throw new FieldActionError(`Unsupported set field '${action.field}'; supported fields: ${supportedFields.join(", ")}.`, {
143
+ reason: "unsupported-set-field", field: action.field, supportedFields,
144
+ });
145
+ }
146
+ storageField = coordinate?.storageField ?? action.field;
147
+ candidate = prepareDocumentAssignments(existing, { [storageField]: action.value });
148
+ if (!okfValuesEqual(existing.frontmatter[storageField], action.value))
149
+ scope.outcome = "edited";
150
+ if (scope.outcome !== "unchanged" && context.okfVersion === "0.1")
151
+ candidate.frontmatter.timestamp = (context.now ?? (() => new Date().toISOString()))();
152
+ return { candidate, scope, storageField };
153
+ }
154
+ if (action.field !== "tags" && action.field !== "sources")
155
+ throw new InvalidInputError("Collection actions support only tags and sources.");
156
+ if (!["add", "remove", "edit", "replace-all"].includes(action.action))
157
+ throw new InvalidInputError("Unknown field action.");
158
+ if (action.field === "sources" && context.okfVersion !== "0.2")
159
+ throw new InvalidInputError("sources actions require OKF v0.2.");
160
+ const previous = existing.frontmatter[action.field];
161
+ let rows;
162
+ if (action.action === "replace-all") {
163
+ if (!Array.isArray(action.value))
164
+ throw new InvalidInputError("replace-all requires a complete list (including [] to empty it).");
165
+ // Authored-value validation owns row compatibility; replacement permits deliberate duplicates.
166
+ rows = structuredClone(action.value);
167
+ if (action.field === "tags" && rows.some(value => typeof value !== "string"))
168
+ throw new InvalidInputError("tags must be a list of strings.");
169
+ scope.outcome = okfValuesEqual(previous, rows) ? "unchanged" : "replaced";
170
+ }
171
+ else {
172
+ if (previous !== undefined && !Array.isArray(previous))
173
+ throw new InvalidInputError(`'${action.field}' is not a list; repair it with version-guarded replace-all.`);
174
+ rows = structuredClone(previous ?? []);
175
+ if (action.field === "tags") {
176
+ if (action.action === "edit")
177
+ throw new InvalidInputError("tags supports add/remove/replace-all, not edit.");
178
+ if (typeof action.value !== "string")
179
+ throw new InvalidInputError("A tag must be a string.");
180
+ if (action.action === "add" && !rows.includes(action.value)) {
181
+ rows.push(action.value);
182
+ scope.outcome = "added";
183
+ }
184
+ if (action.action === "remove" && rows.includes(action.value)) {
185
+ rows = rows.filter(row => row !== action.value);
186
+ scope.outcome = "removed";
187
+ }
188
+ }
189
+ else if (action.action === "add") {
190
+ sourceRow(action.value);
191
+ if (has(action.value, "id")) {
192
+ const matches = rows.filter(row => record(row) && row.id === action.value.id);
193
+ if (matches.length > 1)
194
+ throw new FieldActionError("Source ID is ambiguous; repair duplicate IDs with replace-all.", {
195
+ reason: "ambiguous-source", field: "sources", selector: { id: action.value.id }, ...sourceCandidates(matches),
196
+ });
197
+ if (matches.length === 1 && !okfValuesEqual(matches[0], action.value))
198
+ throw new FieldActionError("Source ID conflicts with an existing entry; use edit with its observed version.", {
199
+ reason: "source-id-conflict", field: "sources", selector: { id: action.value.id }, recommendedSelector: { id: action.value.id }, ...sourceCandidates(matches),
200
+ });
201
+ }
202
+ if (!rows.some(row => okfValuesEqual(row, action.value))) {
203
+ rows.push(structuredClone(action.value));
204
+ scope.outcome = "added";
205
+ }
206
+ if (action.value.id !== undefined)
207
+ scope.affectedSourceIds = [action.value.id];
208
+ }
209
+ else {
210
+ const index = selectorIndex(rows, action.selector, action.action === "edit");
211
+ scope.selector = structuredClone(action.selector);
212
+ if (index >= 0) {
213
+ const old = rows[index];
214
+ if (typeof old.id === "string")
215
+ scope.affectedSourceIds = [old.id];
216
+ if (action.action === "remove") {
217
+ rows.splice(index, 1);
218
+ scope.outcome = "removed";
219
+ }
220
+ else {
221
+ if (!record(action.patch))
222
+ throw new InvalidInputError("A source edit requires a property mapping.");
223
+ for (const [property, value] of Object.entries(action.patch)) {
224
+ if (value === undefined)
225
+ throw new InvalidInputError("Source edit properties must have values.");
226
+ if (containsCollection(old[property]) || containsCollection(value))
227
+ throw new InvalidInputError(`Cannot assign source property '${property}': the old or new subtree contains a list. Use sources replace-all with an observed version.`);
228
+ }
229
+ if (has(action.patch, "id")) {
230
+ if (has(old, "id")) {
231
+ if (action.patch.id !== old.id)
232
+ throw new InvalidInputError("An existing source ID cannot change or be removed; use replace-all.");
233
+ }
234
+ else {
235
+ if (typeof action.patch.id !== "string" || action.patch.id.trim() === "")
236
+ throw new InvalidInputError("The first source ID must be a nonempty string.");
237
+ if (rows.some((row, i) => i !== index && record(row) && row.id === action.patch.id))
238
+ throw new InvalidInputError("The first source ID collides with an existing ID.");
239
+ scope.affectedSourceIds = [action.patch.id];
240
+ }
241
+ }
242
+ const next = { ...old, ...structuredClone(action.patch) };
243
+ if (!okfValuesEqual(old, next)) {
244
+ rows[index] = next;
245
+ scope.outcome = "edited";
246
+ }
247
+ }
248
+ }
249
+ }
250
+ }
251
+ // A missing collection removed from remains missing: a membership no-op writes no normalization.
252
+ if (scope.outcome !== "unchanged")
253
+ candidate.frontmatter[action.field] = rows;
254
+ if (action.field === "sources" && action.action === "replace-all") {
255
+ scope.affectedSourceIds = [...new Set([...(Array.isArray(previous) ? previous : []), ...rows].flatMap(row => record(row) && typeof row.id === "string" ? [row.id] : []))];
256
+ }
257
+ if (scope.outcome !== "unchanged" && context.okfVersion === "0.1")
258
+ candidate.frontmatter.timestamp = (context.now ?? (() => new Date().toISOString()))();
259
+ return { candidate, scope, storageField };
260
+ }
261
+ //# sourceMappingURL=document-field-actions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"document-field-actions.js","sourceRoot":"","sources":["../src/document-field-actions.ts"],"names":[],"mappings":"AAAA,+FAA+F;AAC/F,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,mBAAmB,EAAE,0BAA0B,EAAqB,MAAM,YAAY,CAAC;AAgBhG,4FAA4F;AAC5F,MAAM,OAAO,gBAAiB,SAAQ,iBAAiB;IAC5C,OAAO,CAA0B;IAC1C,YAAY,OAAe,EAAE,OAAgC;QAC3D,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAC;QAC/B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;CACF;AAwBD,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,CAAC,WAAW,EAAE,UAAU,EAAE,qBAAqB,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC;AAChG,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,CAAC,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC;AACvE,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,CAAC,QAAQ,EAAE,aAAa,EAAE,cAAc,CAAC,CAAC,CAAC;AAC/D,MAAM,UAAU,0BAA0B,CAAC,KAAa,EAAE,UAAyB;IACjF,OAAO,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,KAAK,KAAK,IAAI,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;AACzE,CAAC;AACD,SAAS,MAAM,CAAC,KAAc;IAC5B,OAAO,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9E,CAAC;AACD,SAAS,GAAG,CAAC,MAAc,EAAE,GAAW,IAAa,OAAO,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;AAChH,SAAS,gBAAgB,CAAC,IAAe;IACvC,OAAO;QACL,KAAK,EAAE,IAAI,CAAC,MAAM;QAClB,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;YACrC,MAAM,QAAQ,GAA4B,EAAE,CAAC;YAC7C,KAAK,MAAM,GAAG,IAAI,CAAC,IAAI,EAAE,UAAU,EAAE,OAAO,CAAU,EAAE,CAAC;gBACvD,IAAI,MAAM,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,OAAO,GAAG,CAAC,GAAG,CAAC,KAAK,QAAQ;oBAAE,QAAQ,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;YAC7F,CAAC;YACD,OAAO,QAAQ,CAAC;QAClB,CAAC,CAAC;KACH,CAAC;AACJ,CAAC;AACD,MAAM,UAAU,kBAAkB,CAAC,KAAc;IAC/C,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC;AAClG,CAAC;AACD,MAAM,UAAU,6BAA6B,CAAC,KAAa,EAAE,QAAiB,EAAE,KAAc;IAC5F,IAAI,kBAAkB,CAAC,QAAQ,CAAC,IAAI,kBAAkB,CAAC,KAAK,CAAC,EAAE,CAAC;QAC9D,MAAM,UAAU,GAAG,KAAK,KAAK,MAAM,IAAI,KAAK,KAAK,SAAS;YACxD,CAAC,CAAC,mBAAmB,KAAK,4CAA4C;YACtE,CAAC,CAAC,uKAAuK,CAAC;QAC5K,MAAM,IAAI,iBAAiB,CAAC,kBAAkB,KAAK,8CAA8C,UAAU,EAAE,CAAC,CAAC;IACjH,CAAC;AACH,CAAC;AACD,MAAM,UAAU,mBAAmB,CAAC,QAAqB,EAAE,QAAqB;IAC9E,KAAK,MAAM,KAAK,IAAI,IAAI,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;QAClF,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC;YAAE,6BAA6B,CAAC,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;IAChI,CAAC;AACH,CAAC;AACD,SAAS,oBAAoB,CAAC,KAAa;IACzC,IAAI,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;QAAE,MAAM,IAAI,iBAAiB,CAAC,IAAI,KAAK,iEAAiE,CAAC,CAAC;IAChI,IAAI,KAAK,KAAK,MAAM,IAAI,KAAK,KAAK,SAAS;QAAE,MAAM,IAAI,iBAAiB,CAAC,IAAI,KAAK,kEAAkE,CAAC,CAAC;AACxJ,CAAC;AACD,+FAA+F;AAC/F,MAAM,UAAU,0BAA0B,CAAC,QAAqB,EAAE,WAAoC;IACpG,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;QAAE,MAAM,IAAI,iBAAiB,CAAC,+BAA+B,CAAC,CAAC;IACvF,KAAK,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;QACzD,oBAAoB,CAAC,KAAK,CAAC,CAAC;QAC5B,6BAA6B,CAAC,KAAK,EAAE,QAAQ,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,CAAC;IAC3E,CAAC;IACD,OAAO,EAAE,WAAW,EAAE,EAAE,GAAG,QAAQ,CAAC,WAAW,EAAE,GAAG,eAAe,CAAC,WAAW,CAAC,EAAE,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC;AAC5G,CAAC;AACD,SAAS,SAAS,CAAC,KAAc;IAC/B,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,OAAO,KAAK,CAAC,QAAQ,KAAK,QAAQ,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE;QAAE,MAAM,IAAI,iBAAiB,CAAC,qDAAqD,CAAC,CAAC;IAC7K,IAAI,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,OAAO,KAAK,CAAC,EAAE,KAAK,QAAQ;QAAE,MAAM,IAAI,iBAAiB,CAAC,wCAAwC,CAAC,CAAC;AAC9H,CAAC;AACD,SAAS,aAAa,CAAC,IAAe,EAAE,QAAwB,EAAE,IAAa;IAC7E,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,GAAG,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;QAAE,MAAM,IAAI,iBAAiB,CAAC,kDAAkD,CAAC,CAAC;IACpM,MAAM,GAAG,GAAG,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC;IACpD,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;IAC5B,gGAAgG;IAChG,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,GAAG,KAAK,UAAU,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC;QAAE,MAAM,IAAI,iBAAiB,CAAC,UAAU,GAAG,6BAA6B,CAAC,CAAC;IACtJ,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAChH,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;QAAE,MAAM,IAAI,gBAAgB,CAAC,iCAAiC,OAAO,CAAC,MAAM,gFAAgF,EAAE;YAClL,MAAM,EAAE,kBAAkB,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,eAAe,CAAC,QAAQ,CAAC,EAAE,GAAG,gBAAgB,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;SAC1I,CAAC,CAAC;IACH,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,IAAI,IAAI;YAAE,MAAM,IAAI,gBAAgB,CAAC,UAAU,GAAG,KAAK,KAAK,kBAAkB,EAAE;gBAC9E,MAAM,EAAE,kBAAkB,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,eAAe,CAAC,QAAQ,CAAC,EAAE,GAAG,gBAAgB,CAAC,EAAE,CAAC;aAC3G,CAAC,CAAC;QACH,OAAO,CAAC,CAAC,CAAC;IACZ,CAAC;IACD,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,CAAE,CAAC;IAC1B,IAAI,GAAG,KAAK,UAAU,IAAI,GAAG,CAAC,IAAI,CAAC,KAAK,CAAW,EAAE,IAAI,CAAC,EAAE,CAAC;QAC3D,MAAM,EAAE,GAAI,IAAI,CAAC,KAAK,CAAiB,CAAC,EAAE,CAAC;QAC3C,IAAI,OAAO,EAAE,KAAK,QAAQ;YAAE,MAAM,IAAI,gBAAgB,CAAC,6EAA6E,EAAE;gBACpI,MAAM,EAAE,mBAAmB,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,eAAe,CAAC,QAAQ,CAAC,EAAE,GAAG,gBAAgB,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;aACvH,CAAC,CAAC;QACH,MAAM,IAAI,gBAAgB,CAAC,gCAAgC,EAAE,yBAAyB,EAAE;YACtF,MAAM,EAAE,eAAe,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,eAAe,CAAC,QAAQ,CAAC,EAAE,mBAAmB,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,gBAAgB,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;SAChJ,CAAC,CAAC;IACL,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,0BAA0B,CAAC,QAAqB,EAAE,MAAmB,EAAE,OAA2B;IAChH,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ;QAAE,MAAM,IAAI,iBAAiB,CAAC,uCAAuC,CAAC,CAAC;IAC9H,IAAI,MAAM,CAAC,MAAM,KAAK,KAAK;QAAE,oBAAoB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAChE,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,CAAC;QAC9E,CAAC,CAAC,MAAM,CAAC,MAAM,KAAK,QAAQ,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,OAAO,EAAE,UAAU,CAAC;YAC5F,CAAC,CAAC,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IACjC,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAAE,MAAM,IAAI,iBAAiB,CAAC,4DAA4D,CAAC,CAAC;IAC3L,IAAI,OAAO,IAAI,MAAM,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS;QAAE,MAAM,IAAI,iBAAiB,CAAC,2EAA2E,CAAC,CAAC;IAC9J,IAAI,YAAY,GAAG,MAAM,CAAC,KAAK,CAAC;IAChC,IAAI,SAAS,GAA8B,EAAE,WAAW,EAAE,eAAe,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC;IACvH,MAAM,KAAK,GAAqB,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC;IACrG,IAAI,MAAM,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC;QAC5B,MAAM,IAAI,GAAG,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC;QAC3E,MAAM,UAAU,GAAG,IAAI,IAAI,0BAA0B,CAAC,OAAO,CAAC,UAAU,EAAE,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;QAC9F,IAAI,OAAO,CAAC,UAAU,KAAK,KAAK,IAAI,CAAC,MAAM,CAAC,KAAK,KAAK,aAAa,IAAI,MAAM,CAAC,KAAK,KAAK,cAAc,CAAC;YAAE,MAAM,IAAI,iBAAiB,CAAC,IAAI,MAAM,CAAC,KAAK,sBAAsB,CAAC,CAAC;QAC7K,IAAI,CAAC,0BAA0B,CAAC,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;YACjF,MAAM,eAAe,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC;oBAClC,GAAG,QAAQ;oBACX,GAAG,CAAC,OAAO,CAAC,UAAU,KAAK,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;oBAC5C,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,mBAAmB,CAAC,OAAO,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;iBAC/D,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;gBACjB,IAAI,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,KAAK,KAAK,MAAM,IAAI,KAAK,KAAK,SAAS;oBAAE,OAAO,KAAK,CAAC;gBAChF,IAAI,OAAO,CAAC,UAAU,KAAK,KAAK,IAAI,CAAC,KAAK,KAAK,aAAa,IAAI,KAAK,KAAK,cAAc,CAAC;oBAAE,OAAO,KAAK,CAAC;gBACxG,MAAM,OAAO,GAAG,IAAI,IAAI,0BAA0B,CAAC,OAAO,CAAC,UAAU,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;gBACpF,OAAO,CAAC,kBAAkB,CAAC,QAAQ,CAAC,WAAW,CAAC,OAAO,EAAE,YAAY,IAAI,KAAK,CAAC,CAAC,CAAC;YACnF,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YACV,MAAM,IAAI,gBAAgB,CAAC,0BAA0B,MAAM,CAAC,KAAK,wBAAwB,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE;gBACtH,MAAM,EAAE,uBAAuB,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,eAAe;aACtE,CAAC,CAAC;QACL,CAAC;QACD,YAAY,GAAG,UAAU,EAAE,YAAY,IAAI,MAAM,CAAC,KAAK,CAAC;QACxD,SAAS,GAAG,0BAA0B,CAAC,QAAQ,EAAE,EAAE,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;QACnF,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,WAAW,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC;YAAE,KAAK,CAAC,OAAO,GAAG,QAAQ,CAAC;QAChG,IAAI,KAAK,CAAC,OAAO,KAAK,WAAW,IAAI,OAAO,CAAC,UAAU,KAAK,KAAK;YAAE,SAAS,CAAC,WAAW,CAAC,SAAS,GAAG,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC,EAAE,CAAC;QACzJ,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC;IAC5C,CAAC;IACD,IAAI,MAAM,CAAC,KAAK,KAAK,MAAM,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS;QAAE,MAAM,IAAI,iBAAiB,CAAC,mDAAmD,CAAC,CAAC;IAC5I,IAAI,CAAC,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,aAAa,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC;QAAE,MAAM,IAAI,iBAAiB,CAAC,uBAAuB,CAAC,CAAC;IAC5H,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS,IAAI,OAAO,CAAC,UAAU,KAAK,KAAK;QAAE,MAAM,IAAI,iBAAiB,CAAC,mCAAmC,CAAC,CAAC;IACjI,MAAM,QAAQ,GAAG,QAAQ,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACpD,IAAI,IAAe,CAAC;IACpB,IAAI,MAAM,CAAC,MAAM,KAAK,aAAa,EAAE,CAAC;QACpC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC;YAAE,MAAM,IAAI,iBAAiB,CAAC,kEAAkE,CAAC,CAAC;QAClI,+FAA+F;QAC/F,IAAI,GAAG,eAAe,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACrC,IAAI,MAAM,CAAC,KAAK,KAAK,MAAM,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC;YAAE,MAAM,IAAI,iBAAiB,CAAC,iCAAiC,CAAC,CAAC;QAC7I,KAAK,CAAC,OAAO,GAAG,cAAc,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,UAAU,CAAC;IAC5E,CAAC;SAAM,CAAC;QACN,IAAI,QAAQ,KAAK,SAAS,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC;YAAE,MAAM,IAAI,iBAAiB,CAAC,IAAI,MAAM,CAAC,KAAK,8DAA8D,CAAC,CAAC;QACpK,IAAI,GAAG,eAAe,CAAC,QAAQ,IAAI,EAAE,CAAc,CAAC;QACpD,IAAI,MAAM,CAAC,KAAK,KAAK,MAAM,EAAE,CAAC;YAC5B,IAAK,MAA6B,CAAC,MAAM,KAAK,MAAM;gBAAE,MAAM,IAAI,iBAAiB,CAAC,iDAAiD,CAAC,CAAC;YACrI,IAAI,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ;gBAAE,MAAM,IAAI,iBAAiB,CAAC,yBAAyB,CAAC,CAAC;YAC7F,IAAI,MAAM,CAAC,MAAM,KAAK,KAAK,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;gBAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBAAC,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC;YAAC,CAAC;YAClH,IAAI,MAAM,CAAC,MAAM,KAAK,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;gBAAC,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,MAAM,CAAC,KAAK,CAAC,CAAC;gBAAC,KAAK,CAAC,OAAO,GAAG,SAAS,CAAC;YAAC,CAAC;QAChJ,CAAC;aAAM,IAAI,MAAM,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC;YACnC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACxB,IAAI,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE,CAAC;gBAC5B,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,EAAE,KAAK,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;gBAC9E,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;oBAAE,MAAM,IAAI,gBAAgB,CAAC,gEAAgE,EAAE;wBACnH,MAAM,EAAE,kBAAkB,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,KAAK,CAAC,EAAG,EAAE,EAAE,GAAG,gBAAgB,CAAC,OAAO,CAAC;qBAC/G,CAAC,CAAC;gBACH,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC;oBAAE,MAAM,IAAI,gBAAgB,CAAC,iFAAiF,EAAE;wBACnL,MAAM,EAAE,oBAAoB,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,KAAK,CAAC,EAAG,EAAE,EAAE,mBAAmB,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,KAAK,CAAC,EAAG,EAAE,EAAE,GAAG,gBAAgB,CAAC,OAAO,CAAC;qBAChK,CAAC,CAAC;YACL,CAAC;YACD,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,cAAc,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;gBAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;gBAAC,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC;YAAC,CAAC;YAChI,IAAI,MAAM,CAAC,KAAK,CAAC,EAAE,KAAK,SAAS;gBAAE,KAAK,CAAC,iBAAiB,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACjF,CAAC;aAAM,CAAC;YACN,MAAM,KAAK,GAAG,aAAa,CAAC,IAAI,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC;YAC7E,KAAK,CAAC,QAAQ,GAAG,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YAClD,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;gBACf,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAgB,CAAC;gBACvC,IAAI,OAAO,GAAG,CAAC,EAAE,KAAK,QAAQ;oBAAE,KAAK,CAAC,iBAAiB,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBACnE,IAAI,MAAM,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;oBAAC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;oBAAC,KAAK,CAAC,OAAO,GAAG,SAAS,CAAC;gBAAC,CAAC;qBAChF,CAAC;oBACJ,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC;wBAAE,MAAM,IAAI,iBAAiB,CAAC,4CAA4C,CAAC,CAAC;oBACrG,KAAK,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;wBAC7D,IAAI,KAAK,KAAK,SAAS;4BAAE,MAAM,IAAI,iBAAiB,CAAC,0CAA0C,CAAC,CAAC;wBACjG,IAAI,kBAAkB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,IAAI,kBAAkB,CAAC,KAAK,CAAC;4BAAE,MAAM,IAAI,iBAAiB,CAAC,kCAAkC,QAAQ,8FAA8F,CAAC,CAAC;oBAC5O,CAAC;oBACD,IAAI,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE,CAAC;wBAC5B,IAAI,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE,CAAC;4BACnB,IAAI,MAAM,CAAC,KAAK,CAAC,EAAE,KAAK,GAAG,CAAC,EAAE;gCAAE,MAAM,IAAI,iBAAiB,CAAC,qEAAqE,CAAC,CAAC;wBACrI,CAAC;6BAAM,CAAC;4BACN,IAAI,OAAO,MAAM,CAAC,KAAK,CAAC,EAAE,KAAK,QAAQ,IAAI,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE;gCAAE,MAAM,IAAI,iBAAiB,CAAC,gDAAgD,CAAC,CAAC;4BACxJ,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,KAAK,IAAI,MAAM,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,EAAE,KAAK,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;gCAAE,MAAM,IAAI,iBAAiB,CAAC,mDAAmD,CAAC,CAAC;4BACtK,KAAK,CAAC,iBAAiB,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;wBAC9C,CAAC;oBACH,CAAC;oBACD,MAAM,IAAI,GAAG,EAAE,GAAG,GAAG,EAAE,GAAG,eAAe,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;oBAC1D,IAAI,CAAC,cAAc,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE,CAAC;wBAAC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;wBAAC,KAAK,CAAC,OAAO,GAAG,QAAQ,CAAC;oBAAC,CAAC;gBACnF,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IACD,iGAAiG;IACjG,IAAI,KAAK,CAAC,OAAO,KAAK,WAAW;QAAG,SAAS,CAAC,WAAuC,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;IAC3G,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS,IAAI,MAAM,CAAC,MAAM,KAAK,aAAa,EAAE,CAAC;QAClE,KAAK,CAAC,iBAAiB,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,OAAO,GAAG,CAAC,EAAE,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC5K,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,KAAK,WAAW,IAAI,OAAO,CAAC,UAAU,KAAK,KAAK;QAAE,SAAS,CAAC,WAAW,CAAC,SAAS,GAAG,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC,EAAE,CAAC;IACzJ,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC;AAC5C,CAAC"}
@@ -7,12 +7,17 @@
7
7
  * Consumers own their transport and presentation errors; this module throws typed
8
8
  * core failures and never imports CLI or browser concerns.
9
9
  */
10
+ import { type FieldAction, type FieldActionScope } from "./document-field-actions.js";
11
+ import { type KindFieldMutation } from "./kind-field-mutation.js";
12
+ import { type AppendVerificationOptions } from "./verification.js";
10
13
  import { InvalidInputError } from "./errors.js";
11
14
  import type { FieldPrecondition } from "./document-precondition.js";
12
15
  import type { KindRegistry } from "./kinds.js";
13
16
  import type { ValidationWarning } from "./content-type.js";
14
17
  import type { Bundle, ConceptId, Frontmatter, OkfDocument, Version } from "./types.js";
15
- export type DocumentMutationMode = "create-only" | "overwrite" | "patch";
18
+ /** replace-document shares patch CAS and metadata preparation, but permits an explicit
19
+ * whole-document replacement instead of ordinary assignment/list protection. */
20
+ export type DocumentMutationMode = "create-only" | "overwrite" | "patch" | "replace-document";
16
21
  /** The frontmatter and body a caller wants persisted; the service supplies the id. */
17
22
  export interface DocumentMutationCandidate {
18
23
  frontmatter: Frontmatter;
@@ -35,6 +40,21 @@ export declare class DocumentNotFoundError extends Error {
35
40
  readonly id: ConceptId;
36
41
  constructor(id: ConceptId);
37
42
  }
43
+ export type DocumentMutationInput = {
44
+ kind: "field-action";
45
+ action: FieldAction;
46
+ } | {
47
+ kind: "assign";
48
+ assignments: Record<string, unknown>;
49
+ body?: string;
50
+ refreshTimestamp?: boolean;
51
+ } | {
52
+ kind: "verify";
53
+ event: AppendVerificationOptions;
54
+ } | {
55
+ kind: "kind-field";
56
+ mutation: KindFieldMutation;
57
+ };
38
58
  export interface MutateDocumentOptions {
39
59
  bundle: Bundle;
40
60
  id: ConceptId;
@@ -43,8 +63,12 @@ export interface MutateDocumentOptions {
43
63
  registry: KindRegistry;
44
64
  /** Reject rather than return a non-empty kind warning set. */
45
65
  strict: boolean;
46
- /** Recomputed against every fresh CAS attempt. */
47
- buildCandidate: (existing: OkfDocument | undefined, context: DocumentMutationContext) => DocumentMutationCandidate | Promise<DocumentMutationCandidate>;
66
+ /** Recomputed against a detached copy of every fresh CAS attempt. */
67
+ buildCandidate?: (existing: OkfDocument | undefined, context: DocumentMutationContext) => DocumentMutationCandidate | Promise<DocumentMutationCandidate>;
68
+ /** Actual semantic intent, evaluated on each fresh read. Mutually exclusive with buildCandidate. */
69
+ input?: DocumentMutationInput | ((existing: OkfDocument, context: DocumentMutationContext) => DocumentMutationInput | Promise<DocumentMutationInput>);
70
+ /** Adapter invariants observe every fresh candidate, regardless of input route. */
71
+ assertCandidate?: (existing: OkfDocument | undefined, candidate: DocumentMutationCandidate, context: DocumentMutationContext) => void | Promise<void>;
48
72
  /** Patch only: require an existing target or allow an expect-absent create. */
49
73
  onAbsent?: "fail" | "create";
50
74
  /** Retry budget for overwrite and ordinary patch. */
@@ -53,6 +77,10 @@ export interface MutateDocumentOptions {
53
77
  compareTimestamp?: boolean;
54
78
  /** Advisory backend-history attribution, applied only when a write occurs. */
55
79
  actor?: string;
80
+ /** OKF v0.2 content producer for generated.by, independent of advisory actor.
81
+ * Defaults to actor when omitted; ignored by v0.1. Does not alter history or
82
+ * persisted attribution, and a producer-only change is not a content edit. */
83
+ producer?: string;
56
84
  /** Also persist the advisory actor in the edition-appropriate frontmatter field after no-op detection. */
57
85
  persistActor?: boolean;
58
86
  /** Patch only: a caller-supplied token makes the operation a single-shot hard CAS. */
@@ -74,10 +102,30 @@ export interface MutateDocumentOptions {
74
102
  seedGenerationClock?: boolean;
75
103
  }
76
104
  export interface DocumentMutationResult {
105
+ scope?: FieldActionScope;
77
106
  doc: OkfDocument;
78
107
  changed: boolean;
79
108
  version: Version;
80
109
  warnings: ValidationWarning[];
81
110
  }
111
+ export interface PrepareDocumentMutationOptions {
112
+ id: ConceptId;
113
+ registry: KindRegistry;
114
+ strict: boolean;
115
+ okfVersion: "0.1" | "0.2";
116
+ now?: () => string;
117
+ actor?: string;
118
+ /** Content producer for generated.by; defaults to actor when omitted. */
119
+ producer?: string;
120
+ persistActor?: boolean;
121
+ compareTimestamp?: boolean;
122
+ seedGenerationClock?: boolean;
123
+ }
124
+ /** The pure patch preparation shared by mutation commits and governed previews. */
125
+ export declare function prepareDocumentMutationCandidate(existing: OkfDocument | undefined, rawCandidate: DocumentMutationCandidate, opts: PrepareDocumentMutationOptions): {
126
+ candidate: DocumentMutationCandidate;
127
+ changed: boolean;
128
+ warnings: ValidationWarning[];
129
+ };
82
130
  export declare function mutateDocument(opts: MutateDocumentOptions): Promise<DocumentMutationResult>;
83
131
  //# sourceMappingURL=document-mutation.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"document-mutation.d.ts","sourceRoot":"","sources":["../src/document-mutation.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAkBhD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,KAAK,EAAE,YAAY,EAA4B,MAAM,YAAY,CAAC;AACzE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,KAAK,EACV,MAAM,EACN,SAAS,EACT,WAAW,EACX,WAAW,EACX,OAAO,EACR,MAAM,YAAY,CAAC;AAIpB,MAAM,MAAM,oBAAoB,GAAG,aAAa,GAAG,WAAW,GAAG,OAAO,CAAC;AAEzE,sFAAsF;AACtF,MAAM,WAAW,yBAAyB;IACxC,WAAW,EAAE,WAAW,CAAC;IACzB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,8FAA8F;AAC9F,MAAM,WAAW,uBAAuB;IACtC,UAAU,EAAE,KAAK,GAAG,KAAK,CAAC;CAC3B;AAED,4FAA4F;AAC5F,qBAAa,oBAAqB,SAAQ,iBAAiB;IACzD,QAAQ,CAAC,EAAE,EAAE,SAAS,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,UAAU,EAAE,iBAAiB,EAAE,CAAC;IACzC,QAAQ,CAAC,UAAU,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC;gBAGlC,EAAE,EAAE,SAAS,EACb,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,iBAAiB,EAAE,EAC/B,UAAU,CAAC,EAAE,KAAK,GAAG,KAAK;CAS7B;AAED,uFAAuF;AACvF,qBAAa,qBAAsB,SAAQ,KAAK;IAC9C,QAAQ,CAAC,EAAE,EAAE,SAAS,CAAC;gBAEX,EAAE,EAAE,SAAS;CAK1B;AAED,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,MAAM,CAAC;IACf,EAAE,EAAE,SAAS,CAAC;IACd,IAAI,EAAE,oBAAoB,CAAC;IAC3B,mGAAmG;IACnG,QAAQ,EAAE,YAAY,CAAC;IACvB,8DAA8D;IAC9D,MAAM,EAAE,OAAO,CAAC;IAChB,kDAAkD;IAClD,cAAc,EAAE,CACd,QAAQ,EAAE,WAAW,GAAG,SAAS,EACjC,OAAO,EAAE,uBAAuB,KAC7B,yBAAyB,GAAG,OAAO,CAAC,yBAAyB,CAAC,CAAC;IACpE,+EAA+E;IAC/E,QAAQ,CAAC,EAAE,MAAM,GAAG,QAAQ,CAAC;IAC7B,qDAAqD;IACrD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,iEAAiE;IACjE,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,8EAA8E;IAC9E,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,0GAA0G;IAC1G,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,sFAAsF;IACtF,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B;;;;;OAKG;IACH,aAAa,CAAC,EAAE,SAAS,iBAAiB,EAAE,CAAC;IAC7C,6FAA6F;IAC7F,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IACnB;;;;OAIG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;CAC/B;AAED,MAAM,WAAW,sBAAsB;IACrC,GAAG,EAAE,WAAW,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,iBAAiB,EAAE,CAAC;CAC/B;AA0LD,wBAAsB,cAAc,CAAC,IAAI,EAAE,qBAAqB,GAAG,OAAO,CAAC,sBAAsB,CAAC,CA6NjG"}
1
+ {"version":3,"file":"document-mutation.d.ts","sourceRoot":"","sources":["../src/document-mutation.ts"],"names":[],"mappings":"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"}