@apify/actor-utils 0.1.0 → 0.1.2
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.
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -0
- package/dist/src/safePushData.d.ts +46 -0
- package/dist/src/safePushData.d.ts.map +1 -0
- package/dist/src/safePushData.js +312 -0
- package/dist/src/safePushData.js.map +1 -0
- package/package.json +2 -2
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAC9E,YAAY,EACR,eAAe,EACf,WAAW,EACX,kBAAkB,EAClB,mBAAmB,EACnB,MAAM,GACT,MAAM,uBAAuB,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
declare const SCHEMA_ERROR_TYPE = "schema-validation-error";
|
|
2
|
+
export interface ValidationError {
|
|
3
|
+
instancePath: string;
|
|
4
|
+
schemaPath?: string;
|
|
5
|
+
keyword: string;
|
|
6
|
+
params?: Record<string, unknown>;
|
|
7
|
+
message?: string;
|
|
8
|
+
}
|
|
9
|
+
interface InvalidItem {
|
|
10
|
+
itemPosition: number;
|
|
11
|
+
validationErrors: ValidationError[];
|
|
12
|
+
}
|
|
13
|
+
interface SchemaValidationError {
|
|
14
|
+
type: typeof SCHEMA_ERROR_TYPE;
|
|
15
|
+
statusCode: 400;
|
|
16
|
+
message: string;
|
|
17
|
+
data: {
|
|
18
|
+
invalidItems: InvalidItem[];
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
export declare function isSchemaValidationError(err: unknown): err is SchemaValidationError;
|
|
22
|
+
export interface DroppedItem<T> {
|
|
23
|
+
item: T;
|
|
24
|
+
errors: ValidationError[];
|
|
25
|
+
}
|
|
26
|
+
export interface SafePushDataResult<T> {
|
|
27
|
+
pushed: number;
|
|
28
|
+
dropped: DroppedItem<T>[];
|
|
29
|
+
attempts: number;
|
|
30
|
+
}
|
|
31
|
+
export interface SafePushDataOptions {
|
|
32
|
+
maxAttempts?: number;
|
|
33
|
+
}
|
|
34
|
+
export type PushFn<T> = (items: T[]) => Promise<unknown>;
|
|
35
|
+
/**
|
|
36
|
+
* Push `input` via `pushFn`, surviving Apify dataset schema-validation
|
|
37
|
+
* failures by cleaning offending items and retrying.
|
|
38
|
+
*
|
|
39
|
+
* `pushFn` is mandatory and intentionally not bundled — a CI check forbids
|
|
40
|
+
* direct `.pushData()` calls in this library, so the binding lives at the
|
|
41
|
+
* call site: `(b) => Actor.pushData(b)` or
|
|
42
|
+
* `(b) => client.dataset(id).pushItems(b)`.
|
|
43
|
+
*/
|
|
44
|
+
export declare function safePushData<T>(pushFn: PushFn<T>, input: T | T[], options?: SafePushDataOptions): Promise<SafePushDataResult<T>>;
|
|
45
|
+
export {};
|
|
46
|
+
//# sourceMappingURL=safePushData.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"safePushData.d.ts","sourceRoot":"","sources":["../../src/safePushData.ts"],"names":[],"mappings":"AAIA,QAAA,MAAM,iBAAiB,4BAA4B,CAAC;AAKpD,MAAM,WAAW,eAAe;IAC5B,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,OAAO,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,UAAU,WAAW;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,EAAE,eAAe,EAAE,CAAC;CACvC;AAKD,UAAU,qBAAqB;IAC3B,IAAI,EAAE,OAAO,iBAAiB,CAAC;IAC/B,UAAU,EAAE,GAAG,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE;QAAE,YAAY,EAAE,WAAW,EAAE,CAAA;KAAE,CAAC;CACzC;AAED,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,OAAO,GAAG,GAAG,IAAI,qBAAqB,CAMlF;AAED,MAAM,WAAW,WAAW,CAAC,CAAC;IAC1B,IAAI,EAAE,CAAC,CAAC;IACR,MAAM,EAAE,eAAe,EAAE,CAAC;CAC7B;AAED,MAAM,WAAW,kBAAkB,CAAC,CAAC;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC;IAC1B,QAAQ,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,mBAAmB;IAChC,WAAW,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,MAAM,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,EAAE,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;AAEzD;;;;;;;;GAQG;AACH,wBAAsB,YAAY,CAAC,CAAC,EAChC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,EACjB,KAAK,EAAE,CAAC,GAAG,CAAC,EAAE,EACd,OAAO,GAAE,mBAAwB,GAClC,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAehC"}
|
|
@@ -0,0 +1,312 @@
|
|
|
1
|
+
// safePushData: parse the Apify dataset schema-validation error, repair the
|
|
2
|
+
// offending items (strip bad fields, placeholder missing required ones), and
|
|
3
|
+
// retry the push.
|
|
4
|
+
const SCHEMA_ERROR_TYPE = 'schema-validation-error';
|
|
5
|
+
export function isSchemaValidationError(err) {
|
|
6
|
+
if (!err || typeof err !== 'object')
|
|
7
|
+
return false;
|
|
8
|
+
const e = err;
|
|
9
|
+
if (e.type !== SCHEMA_ERROR_TYPE)
|
|
10
|
+
return false;
|
|
11
|
+
if (e.statusCode !== 400)
|
|
12
|
+
return false;
|
|
13
|
+
return Array.isArray(e.data?.invalidItems);
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Push `input` via `pushFn`, surviving Apify dataset schema-validation
|
|
17
|
+
* failures by cleaning offending items and retrying.
|
|
18
|
+
*
|
|
19
|
+
* `pushFn` is mandatory and intentionally not bundled — a CI check forbids
|
|
20
|
+
* direct `.pushData()` calls in this library, so the binding lives at the
|
|
21
|
+
* call site: `(b) => Actor.pushData(b)` or
|
|
22
|
+
* `(b) => client.dataset(id).pushItems(b)`.
|
|
23
|
+
*/
|
|
24
|
+
export async function safePushData(pushFn, input, options = {}) {
|
|
25
|
+
const items = Array.isArray(input) ? input : [input];
|
|
26
|
+
// Happy path: assume validation will succeed (the overwhelmingly common
|
|
27
|
+
// case). No working copies, no maps, no per-item wrapper objects — just
|
|
28
|
+
// hand the caller's array to pushFn and return on success.
|
|
29
|
+
try {
|
|
30
|
+
await pushFn(items);
|
|
31
|
+
return { pushed: items.length, dropped: [], attempts: 1 };
|
|
32
|
+
}
|
|
33
|
+
catch (err) {
|
|
34
|
+
if (!isSchemaValidationError(err))
|
|
35
|
+
throw err;
|
|
36
|
+
// Clamp to >=1: the initial push above always counts as one attempt,
|
|
37
|
+
// so 0/negative would make the reported `attempts` lie about it.
|
|
38
|
+
return cleanAndRetry(pushFn, items, err, Math.max(1, options.maxAttempts ?? 5));
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
async function cleanAndRetry(pushFn, originalItems, initialError, maxAttempts) {
|
|
42
|
+
// working[i] is what we'll send on the next push. We mutate this array
|
|
43
|
+
// in place (splicing drops, replacing cleaned entries); the caller's
|
|
44
|
+
// `originalItems` is never touched.
|
|
45
|
+
const working = originalItems.slice();
|
|
46
|
+
// Parallel to `working`. Holds the original (untouched) reference so a
|
|
47
|
+
// dropped report shows what the caller actually passed in, even if the
|
|
48
|
+
// item was partially cleaned before being dropped on a later round.
|
|
49
|
+
const originalAt = originalItems.slice();
|
|
50
|
+
// Parallel to `working`. Tracks which paths inside each item are
|
|
51
|
+
// placeholders we set (vs. real user data). Needed so we can chase
|
|
52
|
+
// follow-up type/minLength/enum errors on the placeholder field
|
|
53
|
+
// without looping forever; for user-supplied fields the existing
|
|
54
|
+
// "delete the field" behaviour stays in effect.
|
|
55
|
+
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(() => []);
|
|
60
|
+
const dropped = [];
|
|
61
|
+
let attempts = 1;
|
|
62
|
+
let lastError = initialError;
|
|
63
|
+
while (true) {
|
|
64
|
+
// Process this round's errors. Highest position first so the splices
|
|
65
|
+
// below don't shift positions we still need to look at.
|
|
66
|
+
const invalids = lastError.data.invalidItems.slice().sort((a, b) => b.itemPosition - a.itemPosition);
|
|
67
|
+
for (const invalid of invalids) {
|
|
68
|
+
const i = invalid.itemPosition;
|
|
69
|
+
// Guard against a malformed/unexpected error payload (e.g. a
|
|
70
|
+
// position outside the batch we actually sent) instead of
|
|
71
|
+
// crashing on `working[i]` being undefined.
|
|
72
|
+
if (i < 0 || i >= working.length) {
|
|
73
|
+
console.log(`safePushData: ignoring out-of-range itemPosition ${i} in validation error response.`);
|
|
74
|
+
continue;
|
|
75
|
+
}
|
|
76
|
+
const cleaned = cleanItemFields(working[i], invalid.validationErrors, placeholderPaths[i]);
|
|
77
|
+
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);
|
|
83
|
+
}
|
|
84
|
+
else {
|
|
85
|
+
working[i] = cleaned;
|
|
86
|
+
lastErrorsAt[i] = invalid.validationErrors;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
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 };
|
|
94
|
+
}
|
|
95
|
+
attempts++;
|
|
96
|
+
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] });
|
|
100
|
+
}
|
|
101
|
+
return { pushed: originalItems.length - dropped.length, dropped, attempts: maxAttempts };
|
|
102
|
+
}
|
|
103
|
+
try {
|
|
104
|
+
await pushFn(working);
|
|
105
|
+
return { pushed: originalItems.length - dropped.length, dropped, attempts };
|
|
106
|
+
}
|
|
107
|
+
catch (err) {
|
|
108
|
+
if (!isSchemaValidationError(err))
|
|
109
|
+
throw err;
|
|
110
|
+
lastError = err;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
// Try to repair a single item given its AJV errors. Returns null when the
|
|
115
|
+
// item can't be salvaged.
|
|
116
|
+
//
|
|
117
|
+
// Mutates `placeholderPaths` to record any fields we filled in ourselves,
|
|
118
|
+
// so the caller can keep iterating on them across rounds.
|
|
119
|
+
function cleanItemFields(item, validationErrors, placeholderPaths) {
|
|
120
|
+
// structuredClone so we never mutate the caller's data.
|
|
121
|
+
const cloned = structuredClone(item);
|
|
122
|
+
for (const err of validationErrors) {
|
|
123
|
+
const instancePath = err.instancePath || '';
|
|
124
|
+
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;
|
|
135
|
+
}
|
|
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;
|
|
143
|
+
}
|
|
144
|
+
// Errors on a path we placeholder'd: try to satisfy the constraint
|
|
145
|
+
// rather than delete the field (deleting would re-trigger required).
|
|
146
|
+
if (placeholderPaths.has(instancePath)) {
|
|
147
|
+
const fix = placeholderFor(err);
|
|
148
|
+
if (fix.ok) {
|
|
149
|
+
setAtPath(cloned, path, fix.value);
|
|
150
|
+
continue;
|
|
151
|
+
}
|
|
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]);
|
|
160
|
+
continue;
|
|
161
|
+
}
|
|
162
|
+
// User-supplied field with a violation we don't try to coerce.
|
|
163
|
+
// Strip it; if the schema declares it required, the next push will
|
|
164
|
+
// re-add a placeholder.
|
|
165
|
+
deleteAtPath(cloned, path);
|
|
166
|
+
}
|
|
167
|
+
return cloned;
|
|
168
|
+
}
|
|
169
|
+
// 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.
|
|
172
|
+
function placeholderFor(err) {
|
|
173
|
+
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 };
|
|
241
|
+
}
|
|
242
|
+
default:
|
|
243
|
+
break;
|
|
244
|
+
}
|
|
245
|
+
return { ok: false };
|
|
246
|
+
}
|
|
247
|
+
// Parse a JSON Pointer (RFC 6901) into decoded segments.
|
|
248
|
+
// "" -> []; "/foo/bar" -> ["foo","bar"]; "/tags/0" -> ["tags","0"].
|
|
249
|
+
function parseJsonPointer(pointer) {
|
|
250
|
+
if (!pointer)
|
|
251
|
+
return [];
|
|
252
|
+
return pointer
|
|
253
|
+
.split('/')
|
|
254
|
+
.slice(1)
|
|
255
|
+
.map((seg) => seg.replace(/~1/g, '/').replace(/~0/g, '~'));
|
|
256
|
+
}
|
|
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).
|
|
259
|
+
function deleteAtPath(obj, path) {
|
|
260
|
+
if (path.length === 0)
|
|
261
|
+
return false;
|
|
262
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
263
|
+
let cursor = obj;
|
|
264
|
+
for (let i = 0; i < path.length - 1; i++) {
|
|
265
|
+
const key = path[i];
|
|
266
|
+
if (cursor == null || typeof cursor !== 'object')
|
|
267
|
+
return false;
|
|
268
|
+
cursor = Array.isArray(cursor) ? cursor[Number(key)] : cursor[key];
|
|
269
|
+
}
|
|
270
|
+
if (cursor == null || typeof cursor !== 'object')
|
|
271
|
+
return false;
|
|
272
|
+
const last = path[path.length - 1];
|
|
273
|
+
if (Array.isArray(cursor)) {
|
|
274
|
+
const idx = Number(last);
|
|
275
|
+
if (!Number.isInteger(idx) || idx < 0 || idx >= cursor.length)
|
|
276
|
+
return false;
|
|
277
|
+
cursor.splice(idx, 1);
|
|
278
|
+
return true;
|
|
279
|
+
}
|
|
280
|
+
if (Object.prototype.hasOwnProperty.call(cursor, last)) {
|
|
281
|
+
delete cursor[last];
|
|
282
|
+
return true;
|
|
283
|
+
}
|
|
284
|
+
return false;
|
|
285
|
+
}
|
|
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).
|
|
288
|
+
function setAtPath(obj, path, value) {
|
|
289
|
+
if (path.length === 0)
|
|
290
|
+
return false;
|
|
291
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
292
|
+
let cursor = obj;
|
|
293
|
+
for (let i = 0; i < path.length - 1; i++) {
|
|
294
|
+
const key = path[i];
|
|
295
|
+
if (cursor == null || typeof cursor !== 'object')
|
|
296
|
+
return false;
|
|
297
|
+
cursor = Array.isArray(cursor) ? cursor[Number(key)] : cursor[key];
|
|
298
|
+
}
|
|
299
|
+
if (cursor == null || typeof cursor !== 'object')
|
|
300
|
+
return false;
|
|
301
|
+
const last = path[path.length - 1];
|
|
302
|
+
if (Array.isArray(cursor)) {
|
|
303
|
+
const idx = Number(last);
|
|
304
|
+
if (!Number.isInteger(idx) || idx < 0)
|
|
305
|
+
return false;
|
|
306
|
+
cursor[idx] = value;
|
|
307
|
+
return true;
|
|
308
|
+
}
|
|
309
|
+
cursor[last] = value;
|
|
310
|
+
return true;
|
|
311
|
+
}
|
|
312
|
+
//# sourceMappingURL=safePushData.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"safePushData.js","sourceRoot":"","sources":["../../src/safePushData.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@apify/actor-utils",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.2",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Wrapper around Actor.pushData that survives dataset schema-validation failures by stripping offending fields and retrying. Callers pass the actual push function as pushFn.",
|
|
6
6
|
"repository": {
|
|
7
7
|
"type": "git",
|
|
8
|
-
"url": "https://github.com/apify
|
|
8
|
+
"url": "https://github.com/apify/apify-actor-utils.git"
|
|
9
9
|
},
|
|
10
10
|
"engines": {
|
|
11
11
|
"node": ">=22.6.0"
|