@apify/actor-utils 0.1.2 → 0.1.3-beta.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 (38) hide show
  1. package/README.md +73 -27
  2. package/dist/src/qc-logger/assert.d.ts +17 -0
  3. package/dist/src/qc-logger/assert.d.ts.map +1 -0
  4. package/dist/src/qc-logger/assert.js +23 -0
  5. package/dist/src/qc-logger/assert.js.map +1 -0
  6. package/dist/src/qc-logger/checkpoint.d.ts +40 -0
  7. package/dist/src/qc-logger/checkpoint.d.ts.map +1 -0
  8. package/dist/src/qc-logger/checkpoint.js +45 -0
  9. package/dist/src/qc-logger/checkpoint.js.map +1 -0
  10. package/dist/src/qc-logger/index.d.ts +6 -0
  11. package/dist/src/qc-logger/index.d.ts.map +1 -0
  12. package/dist/src/qc-logger/index.js +5 -0
  13. package/dist/src/qc-logger/index.js.map +1 -0
  14. package/dist/src/qc-logger/is.d.ts +116 -0
  15. package/dist/src/qc-logger/is.d.ts.map +1 -0
  16. package/dist/src/qc-logger/is.js +26 -0
  17. package/dist/src/qc-logger/is.js.map +1 -0
  18. package/dist/src/qc-logger/structured-logger.d.ts +9 -0
  19. package/dist/src/qc-logger/structured-logger.d.ts.map +1 -0
  20. package/dist/src/qc-logger/structured-logger.js +38 -0
  21. package/dist/src/qc-logger/structured-logger.js.map +1 -0
  22. package/dist/src/safePushData.d.ts +16 -6
  23. package/dist/src/safePushData.d.ts.map +1 -1
  24. package/dist/src/safePushData.js +267 -131
  25. package/dist/src/safePushData.js.map +1 -1
  26. package/dist/src/type-utils/index.d.ts +3 -0
  27. package/dist/src/type-utils/index.d.ts.map +1 -0
  28. package/dist/src/type-utils/index.js +2 -0
  29. package/dist/src/type-utils/index.js.map +1 -0
  30. package/dist/src/type-utils/types.d.ts +23 -0
  31. package/dist/src/type-utils/types.d.ts.map +1 -0
  32. package/dist/src/type-utils/types.js +2 -0
  33. package/dist/src/type-utils/types.js.map +1 -0
  34. package/dist/src/type-utils/unreachable.d.ts +30 -0
  35. package/dist/src/type-utils/unreachable.d.ts.map +1 -0
  36. package/dist/src/type-utils/unreachable.js +32 -0
  37. package/dist/src/type-utils/unreachable.js.map +1 -0
  38. package/package.json +70 -59
@@ -1,7 +1,21 @@
1
1
  // safePushData: parse the Apify dataset schema-validation error, repair the
2
2
  // offending items (strip bad fields, placeholder missing required ones), and
3
3
  // retry the push.
4
+ //
5
+ // NOTE: instead of recursively healing the data one error-round at a time, we
6
+ // could parse the Actor's `dataset_schema.json` up front and fix every item in
7
+ // a single pass (we'd know each field's expected type / constraints without
8
+ // waiting for the API to report them). That would avoid the multi-round retry
9
+ // loop, but requires heavier code (locating + loading the schema, resolving
10
+ // $refs, walking the schema tree). Something to consider in the future.
4
11
  const SCHEMA_ERROR_TYPE = 'schema-validation-error';
12
+ // Cap on how many distinct field issues we spell out in one log line. A
13
+ // pathological batch can fail on hundreds of fields; the overflow is
14
+ // summarised as a count instead of flooding the Actor log.
15
+ const MAX_LOGGED_FIELDS = 20;
16
+ // Shared empty error list. Positions that validated fine in the current round
17
+ // point at this instead of allocating a fresh array each time.
18
+ const NO_ERRORS = [];
5
19
  export function isSchemaValidationError(err) {
6
20
  if (!err || typeof err !== 'object')
7
21
  return false;
@@ -20,6 +34,8 @@ export function isSchemaValidationError(err) {
20
34
  * direct `.pushData()` calls in this library, so the binding lives at the
21
35
  * call site: `(b) => Actor.pushData(b)` or
22
36
  * `(b) => client.dataset(id).pushItems(b)`.
37
+ *
38
+ * Whatever `pushFn` resolves to is handed back untouched as `pushResult`.
23
39
  */
24
40
  export async function safePushData(pushFn, input, options = {}) {
25
41
  const items = Array.isArray(input) ? input : [input];
@@ -27,14 +43,14 @@ export async function safePushData(pushFn, input, options = {}) {
27
43
  // case). No working copies, no maps, no per-item wrapper objects — just
28
44
  // hand the caller's array to pushFn and return on success.
29
45
  try {
30
- await pushFn(items);
31
- return { pushed: items.length, dropped: [], attempts: 1 };
46
+ const pushResult = await pushFn(items);
47
+ return { pushedCount: items.length, droppedItems: [], attemptCount: 1, pushResult };
32
48
  }
33
49
  catch (err) {
34
50
  if (!isSchemaValidationError(err))
35
51
  throw err;
36
52
  // Clamp to >=1: the initial push above always counts as one attempt,
37
- // so 0/negative would make the reported `attempts` lie about it.
53
+ // so 0/negative would make the reported `attemptCount` lie about it.
38
54
  return cleanAndRetry(pushFn, items, err, Math.max(1, options.maxAttempts ?? 5));
39
55
  }
40
56
  }
@@ -53,17 +69,44 @@ async function cleanAndRetry(pushFn, originalItems, initialError, maxAttempts) {
53
69
  // without looping forever; for user-supplied fields the existing
54
70
  // "delete the field" behaviour stays in effect.
55
71
  const placeholderPaths = originalItems.map(() => new Set());
56
- // Parallel to `working`. The validation errors that were last reported
57
- // for this position — kept so a give-up drop (maxAttempts exceeded) can
58
- // still report *why*, not just that it gave up.
59
- const lastErrorsAt = originalItems.map(() => []);
72
+ // Parallel to `working`. The errors the API reported for this position in
73
+ // the *current* round, reset every round. Non-empty therefore means "still
74
+ // failing right now", which is what decides who gets dropped when we run
75
+ // out of attempts — and it gives that drop a reason to report.
76
+ const roundErrors = originalItems.map(() => NO_ERRORS);
60
77
  const dropped = [];
61
78
  let attempts = 1;
62
79
  let lastError = initialError;
80
+ // Remove position `i` from every parallel array and record why it went.
81
+ const dropAt = (i, errors) => {
82
+ dropped.push({ item: originalAt[i], errors });
83
+ working.splice(i, 1);
84
+ originalAt.splice(i, 1);
85
+ placeholderPaths.splice(i, 1);
86
+ roundErrors.splice(i, 1);
87
+ };
88
+ // Every return path below either follows a successful push or has dropped
89
+ // everything that isn't in it, so "original minus dropped" is exactly what
90
+ // landed. (A rejected push stores nothing at all — not even the items the
91
+ // API found no fault with.)
92
+ const result = (attemptCount, pushResult) => ({
93
+ pushedCount: originalItems.length - dropped.length,
94
+ droppedItems: dropped,
95
+ attemptCount,
96
+ pushResult,
97
+ });
63
98
  while (true) {
64
99
  // Process this round's errors. Highest position first so the splices
65
100
  // below don't shift positions we still need to look at.
66
101
  const invalids = lastError.data.invalidItems.slice().sort((a, b) => b.itemPosition - a.itemPosition);
102
+ roundErrors.fill(NO_ERRORS);
103
+ // Which fields went wrong this round, across every failing item. We
104
+ // deliberately don't track which item had which problem — with more
105
+ // than one bad item that detail is noise, and the field set is what
106
+ // actually tells you what to fix in the schema or the scraper.
107
+ const repairedFields = new Set();
108
+ const droppedFields = new Set();
109
+ let droppedThisRound = 0;
67
110
  for (const invalid of invalids) {
68
111
  const i = invalid.itemPosition;
69
112
  // Guard against a malformed/unexpected error payload (e.g. a
@@ -75,34 +118,80 @@ async function cleanAndRetry(pushFn, originalItems, initialError, maxAttempts) {
75
118
  }
76
119
  const cleaned = cleanItemFields(working[i], invalid.validationErrors, placeholderPaths[i]);
77
120
  if (cleaned === null) {
78
- dropped.push({ item: originalAt[i], errors: invalid.validationErrors });
79
- working.splice(i, 1);
80
- originalAt.splice(i, 1);
81
- placeholderPaths.splice(i, 1);
82
- lastErrorsAt.splice(i, 1);
121
+ collectFieldIssues(invalid.validationErrors, droppedFields);
122
+ droppedThisRound++;
123
+ dropAt(i, invalid.validationErrors);
83
124
  }
84
125
  else {
85
126
  working[i] = cleaned;
86
- lastErrorsAt[i] = invalid.validationErrors;
127
+ roundErrors[i] = invalid.validationErrors;
128
+ collectFieldIssues(invalid.validationErrors, repairedFields);
87
129
  }
88
130
  }
89
- console.log(`safePushData: schema validation failed on attempt ${attempts}: ` +
90
- `${lastError.data.invalidItems.length} invalid item(s); ` +
91
- `retrying with ${working.length} item(s).`);
92
- if (working.length === 0) {
93
- return { pushed: originalItems.length - dropped.length, dropped, attempts };
131
+ const report = [
132
+ `safePushData: schema validation failed on attempt ${attempts}: ${lastError.data.invalidItems.length} invalid item(s)`,
133
+ ];
134
+ if (repairedFields.size > 0)
135
+ report.push(`repaired fields: ${formatFields(repairedFields)}`);
136
+ if (droppedThisRound > 0) {
137
+ report.push(`dropped ${droppedThisRound} item(s) on unfixable fields: ${formatFields(droppedFields)}`);
94
138
  }
139
+ if (working.length === 0)
140
+ report.push('nothing left to retry.');
141
+ else if (attempts < maxAttempts)
142
+ report.push(`retrying with ${working.length} item(s).`);
143
+ else
144
+ report.push(`attempt cap reached with ${working.length} item(s) left.`);
145
+ console.log(report.join('; '));
146
+ if (working.length === 0)
147
+ return result(attempts);
95
148
  attempts++;
96
149
  if (attempts > maxAttempts) {
97
- console.log(`safePushData: gave up after ${maxAttempts} attempts with ${working.length} item(s) still failing.`);
98
- for (let i = 0; i < working.length; i++) {
99
- dropped.push({ item: originalAt[i], errors: lastErrorsAt[i] });
150
+ // Out of repair rounds. Drop what's still failing — but a rejected
151
+ // push stores *nothing*, so keeping the rest in the batch would
152
+ // throw away perfectly valid items along with the bad ones. Give
153
+ // the survivors one clean push of their own instead. They were
154
+ // validated in the round above and left untouched since, so this
155
+ // push is expected to go through.
156
+ const unresolvedFields = new Set();
157
+ let unresolved = 0;
158
+ for (let i = working.length - 1; i >= 0; i--) {
159
+ if (roundErrors[i].length === 0)
160
+ continue;
161
+ collectFieldIssues(roundErrors[i], unresolvedFields);
162
+ unresolved++;
163
+ dropAt(i, roundErrors[i]);
164
+ }
165
+ const giveUp = [`safePushData: gave up after ${maxAttempts} attempts`];
166
+ if (unresolved > 0) {
167
+ giveUp.push(`dropped ${unresolved} item(s) still failing on fields: ${formatFields(unresolvedFields)}`);
168
+ }
169
+ giveUp.push(working.length > 0 ? `pushing the ${working.length} valid item(s) left.` : 'nothing to salvage.');
170
+ console.log(giveUp.join('; '));
171
+ if (working.length === 0)
172
+ return result(maxAttempts);
173
+ try {
174
+ const pushResult = await pushFn(working);
175
+ return result(attempts, pushResult);
176
+ }
177
+ catch (err) {
178
+ if (!isSchemaValidationError(err))
179
+ throw err;
180
+ // Even the survivors were rejected, so nothing landed. Report
181
+ // each one with whatever the API said about it this time.
182
+ const errorsAt = new Map();
183
+ for (const invalid of err.data.invalidItems) {
184
+ errorsAt.set(invalid.itemPosition, invalid.validationErrors);
185
+ }
186
+ console.log(`safePushData: final push of ${working.length} item(s) was rejected too; dropping them.`);
187
+ for (let i = working.length - 1; i >= 0; i--)
188
+ dropAt(i, errorsAt.get(i) ?? NO_ERRORS);
189
+ return result(attempts);
100
190
  }
101
- return { pushed: originalItems.length - dropped.length, dropped, attempts: maxAttempts };
102
191
  }
103
192
  try {
104
- await pushFn(working);
105
- return { pushed: originalItems.length - dropped.length, dropped, attempts };
193
+ const pushResult = await pushFn(working);
194
+ return result(attempts, pushResult);
106
195
  }
107
196
  catch (err) {
108
197
  if (!isSchemaValidationError(err))
@@ -111,136 +200,173 @@ async function cleanAndRetry(pushFn, originalItems, initialError, maxAttempts) {
111
200
  }
112
201
  }
113
202
  }
203
+ // Add a `path (keyword)` label for every AJV error into `into`. A Set is
204
+ // used on purpose: one bad field usually shows up on many items in the
205
+ // batch, and repeating it once per item makes the log unreadable.
206
+ function collectFieldIssues(validationErrors, into) {
207
+ for (const err of validationErrors)
208
+ into.add(fieldIssueLabel(err));
209
+ }
210
+ // Human-readable "which field is broken, and how" for one AJV error.
211
+ //
212
+ // `required` and `additionalProperties` report the *parent* in instancePath
213
+ // and name the offending key in params, so we re-attach it — otherwise a
214
+ // missing top-level field would log as the useless `(item root)`.
215
+ function fieldIssueLabel(err) {
216
+ const child = offendingKey(err.params);
217
+ const parent = err.instancePath || '';
218
+ const path = child === undefined ? parent : `${parent}/${escapeJsonPointerSegment(child)}`;
219
+ return `${path === '' ? '(item root)' : collapseArrayIndices(path)} (${err.keyword})`;
220
+ }
221
+ // The key an error blames when instancePath points at its parent.
222
+ function offendingKey(params) {
223
+ if (typeof params?.missingProperty === 'string')
224
+ return params.missingProperty;
225
+ if (typeof params?.additionalProperty === 'string')
226
+ return params.additionalProperty;
227
+ return undefined;
228
+ }
229
+ // `/tags/0` and `/tags/7` are the same *field* as far as the log is
230
+ // concerned, so collapse numeric segments into `/tags/[]`. Keeps a batch
231
+ // with a hundred bad array elements down to a single entry.
232
+ function collapseArrayIndices(path) {
233
+ return path.replace(/\/\d+(?=\/|$)/g, '/[]');
234
+ }
235
+ // Render a field-issue set as a stable, bounded, comma-separated list.
236
+ function formatFields(fields) {
237
+ const sorted = [...fields].sort();
238
+ if (sorted.length <= MAX_LOGGED_FIELDS)
239
+ return sorted.join(', ');
240
+ const shown = sorted.slice(0, MAX_LOGGED_FIELDS);
241
+ return `${shown.join(', ')} (+${sorted.length - MAX_LOGGED_FIELDS} more)`;
242
+ }
114
243
  // Try to repair a single item given its AJV errors. Returns null when the
115
- // item can't be salvaged.
244
+ // item can't be salvaged — including when none of its errors turned out to
245
+ // be actionable, since re-pushing an unchanged item would just reproduce the
246
+ // same errors and burn the remaining attempts.
116
247
  //
117
248
  // Mutates `placeholderPaths` to record any fields we filled in ourselves,
118
249
  // so the caller can keep iterating on them across rounds.
119
250
  function cleanItemFields(item, validationErrors, placeholderPaths) {
120
251
  // structuredClone so we never mutate the caller's data.
121
252
  const cloned = structuredClone(item);
122
- for (const err of validationErrors) {
253
+ let changed = false;
254
+ for (const err of sortForRepair(validationErrors)) {
123
255
  const instancePath = err.instancePath || '';
124
256
  const path = parseJsonPointer(instancePath);
125
- // Root-level errors describe the item as a whole.
126
- if (path.length === 0) {
127
- // Missing required field: insert a placeholder and remember we
128
- // did so. The next round will see a `type` error on this path
129
- // and we'll upgrade null to a type-appropriate value.
130
- if (err.keyword === 'required' && typeof err.params?.missingProperty === 'string') {
131
- const prop = err.params.missingProperty;
132
- cloned[prop] = null;
133
- placeholderPaths.add(`/${prop}`);
134
- continue;
257
+ // Missing required field: insert a placeholder and remember we did
258
+ // so. The next round will see a `type` error on this path and we'll
259
+ // upgrade null to a type-appropriate value. The property is named in
260
+ // params — instancePath points at the object that's missing it, which
261
+ // may be the item root or any object nested inside it.
262
+ if (err.keyword === 'required' && typeof err.params?.missingProperty === 'string') {
263
+ const target = [...path, err.params.missingProperty];
264
+ if (setAtPath(cloned, target, null)) {
265
+ placeholderPaths.add(toJsonPointer(target));
266
+ changed = true;
135
267
  }
136
- // Strip an unknown property reported at the root.
137
- if (err.keyword === 'additionalProperties' && typeof err.params?.additionalProperty === 'string') {
138
- delete cloned[err.params.additionalProperty];
139
- continue;
140
- }
141
- // type/format/etc. at the root means the item itself is the wrong shape.
142
- return null;
268
+ continue;
143
269
  }
270
+ // Unknown property: also named in params, with instancePath pointing
271
+ // at its parent. Strip it.
272
+ if (err.keyword === 'additionalProperties' && typeof err.params?.additionalProperty === 'string') {
273
+ if (deleteAtPath(cloned, [...path, err.params.additionalProperty]))
274
+ changed = true;
275
+ continue;
276
+ }
277
+ // Any other error at the root means the item itself is the wrong
278
+ // shape (wrong type, failed `anyOf`, …) — there's no field to strip.
279
+ if (path.length === 0)
280
+ return null;
144
281
  // Errors on a path we placeholder'd: try to satisfy the constraint
145
282
  // rather than delete the field (deleting would re-trigger required).
146
283
  if (placeholderPaths.has(instancePath)) {
147
284
  const fix = placeholderFor(err);
148
- if (fix.ok) {
149
- setAtPath(cloned, path, fix.value);
150
- continue;
285
+ if (!fix.ok) {
286
+ // Constraint we don't know how to satisfy on a placeholder
287
+ // field (e.g. pattern, custom format). Give up on this item.
288
+ return null;
151
289
  }
152
- // Constraint we don't know how to satisfy on a placeholder field
153
- // (e.g. pattern, custom format). Give up on this item.
154
- return null;
155
- }
156
- // additionalProperties errors point at the *parent* object; the
157
- // offending key is in params, not in instancePath.
158
- if (err.keyword === 'additionalProperties' && typeof err.params?.additionalProperty === 'string') {
159
- deleteAtPath(cloned, [...path, err.params.additionalProperty]);
290
+ if (setAtPath(cloned, path, fix.value))
291
+ changed = true;
160
292
  continue;
161
293
  }
162
294
  // User-supplied field with a violation we don't try to coerce.
163
295
  // Strip it; if the schema declares it required, the next push will
164
296
  // re-add a placeholder.
165
- deleteAtPath(cloned, path);
297
+ if (deleteAtPath(cloned, path))
298
+ changed = true;
299
+ }
300
+ // Nothing we could act on (paths that no longer exist, keywords with no
301
+ // handler): the next push would fail identically, so drop the item now
302
+ // instead of spending every remaining attempt to learn that.
303
+ return changed ? cloned : null;
304
+ }
305
+ // Order one item's errors so the repairs don't interfere with each other.
306
+ // Deleting `/tags/0` shifts every later element down, so sibling array
307
+ // indices have to be handled highest-first; deeper paths come before their
308
+ // ancestors for the same reason.
309
+ function sortForRepair(validationErrors) {
310
+ return validationErrors
311
+ .map((err) => ({ err, path: parseJsonPointer(err.instancePath || '') }))
312
+ .sort((a, b) => comparePaths(a.path, b.path))
313
+ .map((entry) => entry.err);
314
+ }
315
+ function comparePaths(a, b) {
316
+ for (let i = 0; i < Math.min(a.length, b.length); i++) {
317
+ if (a[i] === b[i])
318
+ continue;
319
+ const ai = Number(a[i]);
320
+ const bi = Number(b[i]);
321
+ // Sibling array elements: highest index first.
322
+ if (Number.isInteger(ai) && Number.isInteger(bi))
323
+ return bi - ai;
324
+ return a[i] < b[i] ? -1 : 1;
166
325
  }
167
- return cloned;
326
+ // Same prefix: the deeper path first.
327
+ return b.length - a.length;
168
328
  }
169
329
  // Pick a value that will satisfy `err.keyword` on a placeholder field.
170
- // Returns ok:false when we don't have a sensible default (e.g. `pattern`,
171
- // custom formats); the caller drops the item in that case.
330
+ // Returns ok:false when we don't have a sensible default; the caller drops
331
+ // the item in that case.
332
+ //
333
+ // We deliberately only placeholder the four "empty" values — `''`, `[]`, `{}`,
334
+ // and `null`. These are unambiguously empty and can't be mistaken for real
335
+ // data. We do NOT fabricate values for `enum`, `format`, `minLength`, numeric
336
+ // bounds, etc.: a made-up email, a first-enum-value, or a `'_'.repeat(N)`
337
+ // string all silently poison the customer's dataset with plausible-looking
338
+ // junk. Better to drop the item than to lie about its contents. As a result
339
+ // the only keyword we handle is `type` (only for those four target types) —
340
+ // everything else falls through to ok:false and the item is dropped.
172
341
  function placeholderFor(err) {
173
342
  const params = err.params ?? {};
174
- switch (err.keyword) {
175
- case 'type': {
176
- // params.type is the expected type as a string, or array of strings.
177
- const t = Array.isArray(params.type) ? params.type[0] : params.type;
178
- switch (t) {
179
- case 'string':
180
- return { ok: true, value: '' };
181
- case 'integer':
182
- case 'number':
183
- return { ok: true, value: 0 };
184
- case 'boolean':
185
- return { ok: true, value: false };
186
- case 'array':
187
- return { ok: true, value: [] };
188
- case 'object':
189
- return { ok: true, value: {} };
190
- case 'null':
191
- return { ok: true, value: null };
192
- default:
193
- break;
194
- }
195
- return { ok: false };
196
- }
197
- case 'minLength': {
198
- const limit = Number(params.limit) || 1;
199
- return { ok: true, value: '_'.repeat(limit) };
200
- }
201
- case 'maxLength':
202
- return { ok: true, value: '' };
203
- case 'minimum':
204
- case 'exclusiveMinimum': {
205
- const limit = Number(params.limit);
206
- if (!Number.isFinite(limit))
207
- return { ok: false };
208
- return { ok: true, value: err.keyword === 'exclusiveMinimum' ? limit + 1 : limit };
209
- }
210
- case 'maximum':
211
- case 'exclusiveMaximum': {
212
- const limit = Number(params.limit);
213
- if (!Number.isFinite(limit))
214
- return { ok: false };
215
- return { ok: true, value: err.keyword === 'exclusiveMaximum' ? limit - 1 : limit };
216
- }
217
- case 'enum': {
218
- const allowed = params.allowedValues;
219
- if (Array.isArray(allowed) && allowed.length > 0)
220
- return { ok: true, value: allowed[0] };
221
- return { ok: false };
222
- }
223
- case 'format': {
224
- switch (params.format) {
225
- case 'email':
226
- return { ok: true, value: 'placeholder@example.com' };
227
- case 'uri':
228
- case 'uri-reference':
229
- case 'url':
230
- return { ok: true, value: 'about:blank' };
231
- case 'date':
232
- return { ok: true, value: '1970-01-01' };
233
- case 'date-time':
234
- return { ok: true, value: '1970-01-01T00:00:00Z' };
235
- case 'uuid':
236
- return { ok: true, value: '00000000-0000-0000-0000-000000000000' };
237
- default:
238
- break;
239
- }
240
- return { ok: false };
343
+ if (err.keyword !== 'type')
344
+ return { ok: false };
345
+ // params.type is the expected type as a string, or an array of strings
346
+ // when the field allows multiple types (e.g. `['string', 'null']`).
347
+ const types = Array.isArray(params.type) ? params.type : [params.type];
348
+ // Union type that permits null: prefer null. It's the cleanest possible
349
+ // placeholder — it commits to no concrete value at all — so whenever the
350
+ // schema allows it, that's what we use.
351
+ if (types.length > 1 && types.includes('null')) {
352
+ return { ok: true, value: null };
353
+ }
354
+ // Otherwise take the first allowed type we have an "empty" default for.
355
+ // integer / number / boolean are intentionally absent: 0 / false read as
356
+ // real data, so a field of only those types is dropped instead.
357
+ for (const t of types) {
358
+ switch (t) {
359
+ case 'null':
360
+ return { ok: true, value: null };
361
+ case 'string':
362
+ return { ok: true, value: '' };
363
+ case 'array':
364
+ return { ok: true, value: [] };
365
+ case 'object':
366
+ return { ok: true, value: {} };
367
+ default:
368
+ break;
241
369
  }
242
- default:
243
- break;
244
370
  }
245
371
  return { ok: false };
246
372
  }
@@ -254,8 +380,17 @@ function parseJsonPointer(pointer) {
254
380
  .slice(1)
255
381
  .map((seg) => seg.replace(/~1/g, '/').replace(/~0/g, '~'));
256
382
  }
257
- // Delete the value at `path` inside `obj`. Arrays splice (so later
258
- // `/tags/N` errors in the same round line up with their original indices).
383
+ // Inverse of parseJsonPointer — used to record placeholder paths in the same
384
+ // encoding the API reports them in, so later errors match by string.
385
+ function toJsonPointer(path) {
386
+ return path.map((seg) => `/${escapeJsonPointerSegment(seg)}`).join('');
387
+ }
388
+ function escapeJsonPointerSegment(segment) {
389
+ return segment.replace(/~/g, '~0').replace(/\//g, '~1');
390
+ }
391
+ // Delete the value at `path` inside `obj`. Arrays splice; `sortForRepair`
392
+ // makes sure sibling indices are processed highest-first so the shift
393
+ // doesn't invalidate the paths we haven't handled yet.
259
394
  function deleteAtPath(obj, path) {
260
395
  if (path.length === 0)
261
396
  return false;
@@ -283,8 +418,9 @@ function deleteAtPath(obj, path) {
283
418
  }
284
419
  return false;
285
420
  }
286
- // Set the value at `path` inside `obj`. Creates nothing — the path must
287
- // already exist (placeholder fields are created at the root, not nested).
421
+ // Set the value at `path` inside `obj`. Only the final segment is created —
422
+ // every parent on the way has to exist already (it does: the API reports the
423
+ // error against an object it found).
288
424
  function setAtPath(obj, path, value) {
289
425
  if (path.length === 0)
290
426
  return false;
@@ -1 +1 @@
1
- {"version":3,"file":"safePushData.js","sourceRoot":"","sources":["../../src/safePushData.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAC5E,6EAA6E;AAC7E,kBAAkB;AAElB,MAAM,iBAAiB,GAAG,yBAAyB,CAAC;AA4BpD,MAAM,UAAU,uBAAuB,CAAC,GAAY;IAChD,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAClD,MAAM,CAAC,GAAG,GAAqC,CAAC;IAChD,IAAI,CAAC,CAAC,IAAI,KAAK,iBAAiB;QAAE,OAAO,KAAK,CAAC;IAC/C,IAAI,CAAC,CAAC,UAAU,KAAK,GAAG;QAAE,OAAO,KAAK,CAAC;IACvC,OAAO,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;AAC/C,CAAC;AAmBD;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAC9B,MAAiB,EACjB,KAAc,EACd,UAA+B,EAAE;IAEjC,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IAErD,wEAAwE;IACxE,wEAAwE;IACxE,2DAA2D;IAC3D,IAAI,CAAC;QACD,MAAM,MAAM,CAAC,KAAK,CAAC,CAAC;QACpB,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;IAC9D,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACX,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC;YAAE,MAAM,GAAG,CAAC;QAC7C,qEAAqE;QACrE,iEAAiE;QACjE,OAAO,aAAa,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,WAAW,IAAI,CAAC,CAAC,CAAC,CAAC;IACpF,CAAC;AACL,CAAC;AAED,KAAK,UAAU,aAAa,CACxB,MAAiB,EACjB,aAA2B,EAC3B,YAAmC,EACnC,WAAmB;IAEnB,uEAAuE;IACvE,qEAAqE;IACrE,oCAAoC;IACpC,MAAM,OAAO,GAAQ,aAAa,CAAC,KAAK,EAAE,CAAC;IAC3C,uEAAuE;IACvE,uEAAuE;IACvE,oEAAoE;IACpE,MAAM,UAAU,GAAQ,aAAa,CAAC,KAAK,EAAE,CAAC;IAC9C,iEAAiE;IACjE,mEAAmE;IACnE,gEAAgE;IAChE,iEAAiE;IACjE,gDAAgD;IAChD,MAAM,gBAAgB,GAAkB,aAAa,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,IAAI,GAAG,EAAU,CAAC,CAAC;IACnF,uEAAuE;IACvE,wEAAwE;IACxE,gDAAgD;IAChD,MAAM,YAAY,GAAwB,aAAa,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;IACtE,MAAM,OAAO,GAAqB,EAAE,CAAC;IACrC,IAAI,QAAQ,GAAG,CAAC,CAAC;IACjB,IAAI,SAAS,GAA0B,YAAY,CAAC;IAEpD,OAAO,IAAI,EAAE,CAAC;QACV,qEAAqE;QACrE,wDAAwD;QACxD,MAAM,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,GAAG,CAAC,CAAC,YAAY,CAAC,CAAC;QAErG,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC7B,MAAM,CAAC,GAAG,OAAO,CAAC,YAAY,CAAC;YAC/B,6DAA6D;YAC7D,0DAA0D;YAC1D,4CAA4C;YAC5C,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;gBAC/B,OAAO,CAAC,GAAG,CAAC,oDAAoD,CAAC,gCAAgC,CAAC,CAAC;gBACnG,SAAS;YACb,CAAC;YACD,MAAM,OAAO,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,gBAAgB,EAAE,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC;YAC3F,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;gBACnB,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAAC;gBACxE,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;gBACrB,UAAU,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;gBACxB,gBAAgB,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;gBAC9B,YAAY,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAC9B,CAAC;iBAAM,CAAC;gBACJ,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC;gBACrB,YAAY,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,gBAAgB,CAAC;YAC/C,CAAC;QACL,CAAC;QAED,OAAO,CAAC,GAAG,CACP,qDAAqD,QAAQ,IAAI;YAC7D,GAAG,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,oBAAoB;YACzD,iBAAiB,OAAO,CAAC,MAAM,WAAW,CACjD,CAAC;QAEF,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,OAAO,EAAE,MAAM,EAAE,aAAa,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;QAChF,CAAC;QAED,QAAQ,EAAE,CAAC;QACX,IAAI,QAAQ,GAAG,WAAW,EAAE,CAAC;YACzB,OAAO,CAAC,GAAG,CACP,+BAA+B,WAAW,kBAAkB,OAAO,CAAC,MAAM,yBAAyB,CACtG,CAAC;YACF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBACtC,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YACnE,CAAC;YACD,OAAO,EAAE,MAAM,EAAE,aAAa,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC;QAC7F,CAAC;QAED,IAAI,CAAC;YACD,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC;YACtB,OAAO,EAAE,MAAM,EAAE,aAAa,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;QAChF,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACX,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC;gBAAE,MAAM,GAAG,CAAC;YAC7C,SAAS,GAAG,GAAG,CAAC;QACpB,CAAC;IACL,CAAC;AACL,CAAC;AAED,0EAA0E;AAC1E,0BAA0B;AAC1B,EAAE;AACF,0EAA0E;AAC1E,0DAA0D;AAC1D,SAAS,eAAe,CAAI,IAAO,EAAE,gBAAmC,EAAE,gBAA6B;IACnG,wDAAwD;IACxD,MAAM,MAAM,GAAG,eAAe,CAAC,IAAI,CAAM,CAAC;IAE1C,KAAK,MAAM,GAAG,IAAI,gBAAgB,EAAE,CAAC;QACjC,MAAM,YAAY,GAAG,GAAG,CAAC,YAAY,IAAI,EAAE,CAAC;QAC5C,MAAM,IAAI,GAAG,gBAAgB,CAAC,YAAY,CAAC,CAAC;QAE5C,kDAAkD;QAClD,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACpB,+DAA+D;YAC/D,8DAA8D;YAC9D,sDAAsD;YACtD,IAAI,GAAG,CAAC,OAAO,KAAK,UAAU,IAAI,OAAO,GAAG,CAAC,MAAM,EAAE,eAAe,KAAK,QAAQ,EAAE,CAAC;gBAChF,MAAM,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,eAAe,CAAC;gBACvC,MAAkC,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;gBACjD,gBAAgB,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;gBACjC,SAAS;YACb,CAAC;YACD,kDAAkD;YAClD,IAAI,GAAG,CAAC,OAAO,KAAK,sBAAsB,IAAI,OAAO,GAAG,CAAC,MAAM,EAAE,kBAAkB,KAAK,QAAQ,EAAE,CAAC;gBAC/F,OAAQ,MAAkC,CAAC,GAAG,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC;gBAC1E,SAAS;YACb,CAAC;YACD,yEAAyE;YACzE,OAAO,IAAI,CAAC;QAChB,CAAC;QAED,mEAAmE;QACnE,qEAAqE;QACrE,IAAI,gBAAgB,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC;YACrC,MAAM,GAAG,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;YAChC,IAAI,GAAG,CAAC,EAAE,EAAE,CAAC;gBACT,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC;gBACnC,SAAS;YACb,CAAC;YACD,iEAAiE;YACjE,uDAAuD;YACvD,OAAO,IAAI,CAAC;QAChB,CAAC;QAED,gEAAgE;QAChE,mDAAmD;QACnD,IAAI,GAAG,CAAC,OAAO,KAAK,sBAAsB,IAAI,OAAO,GAAG,CAAC,MAAM,EAAE,kBAAkB,KAAK,QAAQ,EAAE,CAAC;YAC/F,YAAY,CAAC,MAAM,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC,CAAC;YAC/D,SAAS;QACb,CAAC;QAED,+DAA+D;QAC/D,mEAAmE;QACnE,wBAAwB;QACxB,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAC/B,CAAC;IAED,OAAO,MAAM,CAAC;AAClB,CAAC;AAED,uEAAuE;AACvE,0EAA0E;AAC1E,2DAA2D;AAC3D,SAAS,cAAc,CAAC,GAAoB;IACxC,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC;IAChC,QAAQ,GAAG,CAAC,OAAO,EAAE,CAAC;QAClB,KAAK,MAAM,CAAC,CAAC,CAAC;YACV,qEAAqE;YACrE,MAAM,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC;YACpE,QAAQ,CAAC,EAAE,CAAC;gBACR,KAAK,QAAQ;oBACT,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;gBACnC,KAAK,SAAS,CAAC;gBACf,KAAK,QAAQ;oBACT,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;gBAClC,KAAK,SAAS;oBACV,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;gBACtC,KAAK,OAAO;oBACR,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;gBACnC,KAAK,QAAQ;oBACT,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;gBACnC,KAAK,MAAM;oBACP,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;gBACrC;oBACI,MAAM;YACd,CAAC;YACD,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC;QACzB,CAAC;QACD,KAAK,WAAW,CAAC,CAAC,CAAC;YACf,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACxC,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;QAClD,CAAC;QACD,KAAK,WAAW;YACZ,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;QACnC,KAAK,SAAS,CAAC;QACf,KAAK,kBAAkB,CAAC,CAAC,CAAC;YACtB,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACnC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;gBAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC;YAClD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC,OAAO,KAAK,kBAAkB,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC;QACvF,CAAC;QACD,KAAK,SAAS,CAAC;QACf,KAAK,kBAAkB,CAAC,CAAC,CAAC;YACtB,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACnC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;gBAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC;YAClD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC,OAAO,KAAK,kBAAkB,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC;QACvF,CAAC;QACD,KAAK,MAAM,CAAC,CAAC,CAAC;YACV,MAAM,OAAO,GAAG,MAAM,CAAC,aAAa,CAAC;YACrC,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;gBAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;YACzF,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC;QACzB,CAAC;QACD,KAAK,QAAQ,CAAC,CAAC,CAAC;YACZ,QAAQ,MAAM,CAAC,MAAM,EAAE,CAAC;gBACpB,KAAK,OAAO;oBACR,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,yBAAyB,EAAE,CAAC;gBAC1D,KAAK,KAAK,CAAC;gBACX,KAAK,eAAe,CAAC;gBACrB,KAAK,KAAK;oBACN,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC;gBAC9C,KAAK,MAAM;oBACP,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC;gBAC7C,KAAK,WAAW;oBACZ,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,sBAAsB,EAAE,CAAC;gBACvD,KAAK,MAAM;oBACP,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,sCAAsC,EAAE,CAAC;gBACvE;oBACI,MAAM;YACd,CAAC;YACD,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC;QACzB,CAAC;QACD;YACI,MAAM;IACd,CAAC;IACD,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC;AACzB,CAAC;AAED,yDAAyD;AACzD,oEAAoE;AACpE,SAAS,gBAAgB,CAAC,OAAe;IACrC,IAAI,CAAC,OAAO;QAAE,OAAO,EAAE,CAAC;IACxB,OAAO,OAAO;SACT,KAAK,CAAC,GAAG,CAAC;SACV,KAAK,CAAC,CAAC,CAAC;SACR,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;AACnE,CAAC;AAED,mEAAmE;AACnE,2EAA2E;AAC3E,SAAS,YAAY,CAAC,GAAY,EAAE,IAAc;IAC9C,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACpC,8DAA8D;IAC9D,IAAI,MAAM,GAAQ,GAAG,CAAC;IACtB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QACvC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,IAAI,MAAM,IAAI,IAAI,IAAI,OAAO,MAAM,KAAK,QAAQ;YAAE,OAAO,KAAK,CAAC;QAC/D,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACvE,CAAC;IACD,IAAI,MAAM,IAAI,IAAI,IAAI,OAAO,MAAM,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC/D,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACnC,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QACxB,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;QACzB,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,GAAG,IAAI,MAAM,CAAC,MAAM;YAAE,OAAO,KAAK,CAAC;QAC5E,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QACtB,OAAO,IAAI,CAAC;IAChB,CAAC;IACD,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC;QACrD,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC;QACpB,OAAO,IAAI,CAAC;IAChB,CAAC;IACD,OAAO,KAAK,CAAC;AACjB,CAAC;AAED,wEAAwE;AACxE,0EAA0E;AAC1E,SAAS,SAAS,CAAC,GAAY,EAAE,IAAc,EAAE,KAAc;IAC3D,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACpC,8DAA8D;IAC9D,IAAI,MAAM,GAAQ,GAAG,CAAC;IACtB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QACvC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,IAAI,MAAM,IAAI,IAAI,IAAI,OAAO,MAAM,KAAK,QAAQ;YAAE,OAAO,KAAK,CAAC;QAC/D,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACvE,CAAC;IACD,IAAI,MAAM,IAAI,IAAI,IAAI,OAAO,MAAM,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC/D,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACnC,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QACxB,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;QACzB,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC;YAAE,OAAO,KAAK,CAAC;QACpD,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;QACpB,OAAO,IAAI,CAAC;IAChB,CAAC;IACD,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;IACrB,OAAO,IAAI,CAAC;AAChB,CAAC"}
1
+ {"version":3,"file":"safePushData.js","sourceRoot":"","sources":["../../src/safePushData.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export { unreachable } from './unreachable.js';
2
+ export type { Falsy, Nullish, Truthy, Defined } from './types.js';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/type-utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,YAAY,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { unreachable } from './unreachable.js';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/type-utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,23 @@
1
+ export type Falsy = false | 0 | '' | null | undefined;
2
+ export type Nullish = null | undefined;
3
+ /**
4
+ * Narrows `T` to only its truthy members by stripping every {@link Falsy}
5
+ * value (`false`, `0`, `''`, `null`, `undefined`).
6
+ *
7
+ * Unlike `Exclude<T, Falsy>`, this checks each falsy literal individually so a
8
+ * broad type such as `boolean` or `number` is preserved rather than collapsed:
9
+ * `boolean` only loses `false` if `false` is the whole type, not when it's part
10
+ * of `boolean`. Object types short-circuit first, so `''`/`0` don't accidentally
11
+ * match structural (`{}`) types.
12
+ *
13
+ * @example
14
+ * ```ts
15
+ * type A = Truthy<string | undefined>; // string
16
+ * type B = Truthy<0 | 1 | 2>; // 1 | 2
17
+ * type C = Truthy<'' | 'hello'>; // 'hello'
18
+ * type D = Truthy<false>; // never
19
+ * ```
20
+ */
21
+ export type Truthy<T> = T extends object ? T : false extends T ? never : 0 extends T ? never : '' extends T ? never : null extends T ? never : undefined extends T ? never : T;
22
+ export type Defined<T> = Exclude<T, Nullish>;
23
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/type-utils/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,KAAK,GAAG,KAAK,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,GAAG,SAAS,CAAC;AACtD,MAAM,MAAM,OAAO,GAAG,IAAI,GAAG,SAAS,CAAC;AAEvC;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,MAAM,MAAM,CAAC,CAAC,IAEhB,CAAC,SAAS,MAAM,GACV,CAAC,GACD,KAAK,SAAS,CAAC,GACb,KAAK,GACL,CAAC,SAAS,CAAC,GACT,KAAK,GACL,EAAE,SAAS,CAAC,GACV,KAAK,GACL,IAAI,SAAS,CAAC,GACZ,KAAK,GACL,SAAS,SAAS,CAAC,GACjB,KAAK,GACL,CAAC,CAAC;AAEtB,MAAM,MAAM,OAAO,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/type-utils/types.ts"],"names":[],"mappings":""}