1
2import { Actor, ActorRun } from 'apify';
3
4interface Input {
5 renameMapping: { key: string, value: string }[],
6 datasetId?: string,
7
8
9 payload?: { resource: ActorRun },
10 resource?: ActorRun,
11}
12
13
14await Actor.init();
15
16
17const {
18 datasetId,
19 renameMapping = [],
20 payload,
21 resource,
22} = (await Actor.getInput<Input>())!;
23
24const realDatasetId = datasetId || payload?.resource?.defaultDatasetId || resource?.defaultDatasetId;
25
26const preDedupTransformFunction = (items: Record<string, unknown>[], { customInputData }: { customInputData: { renameMapping: Input['renameMapping'] } }) => {
27 return items.map((item) => {
28 const newFields: Record<string, unknown> = {};
29 customInputData.renameMapping.forEach(({ key: from, value: to }) => {
30 if (item[from] !== undefined) {
31 newFields[to] = item[from];
32 delete item[from];
33 }
34 });
35
36
37 return {
38 ...newFields,
39 ...item,
40 };
41 });
42};
43
44const dedupActorInput = {
45 datasetIds: [realDatasetId],
46 preDedupTransformFunction,
47 customInputData: {
48 renameMapping,
49 },
50};
51
52if (Actor.isAtHome()) {
53 await Actor.metamorph('lukaskrivka/dedup-datasets', dedupActorInput);
54} else {
55 await Actor.call('lukaskrivka/dedup-datasets', dedupActorInput, { waitSecs: 0 });
56}
57
58
59await Actor.exit();