apify-cli 0.21.10-beta.2 → 0.21.10-beta.20
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/CHANGELOG.md +7 -0
- package/dist/.tsbuildinfo +1 -1
- package/dist/actor.js +3 -0
- package/dist/actor.js.map +1 -0
- package/dist/apify.js +3 -0
- package/dist/apify.js.map +1 -0
- package/dist/chunk-QCFOWB3K.js +242 -0
- package/dist/chunk-QCFOWB3K.js.map +1 -0
- package/dist/index.js +2 -3
- package/package.json +16 -18
- package/dist/commands/_register.js +0 -68
- package/dist/commands/_register.js.map +0 -1
- package/dist/commands/actor/_index.js +0 -24
- package/dist/commands/actor/_index.js.map +0 -1
- package/dist/commands/actor/charge.js +0 -84
- package/dist/commands/actor/charge.js.map +0 -1
- package/dist/commands/actor/get-input.js +0 -10
- package/dist/commands/actor/get-input.js.map +0 -1
- package/dist/commands/actor/get-public-url.js +0 -52
- package/dist/commands/actor/get-public-url.js.map +0 -1
- package/dist/commands/actor/get-value.js +0 -18
- package/dist/commands/actor/get-value.js.map +0 -1
- package/dist/commands/actor/push-data.js +0 -38
- package/dist/commands/actor/push-data.js.map +0 -1
- package/dist/commands/actor/set-value.js +0 -52
- package/dist/commands/actor/set-value.js.map +0 -1
- package/dist/commands/actors/_index.js +0 -28
- package/dist/commands/actors/_index.js.map +0 -1
- package/dist/commands/actors/build.js +0 -6
- package/dist/commands/actors/build.js.map +0 -1
- package/dist/commands/actors/call.js +0 -224
- package/dist/commands/actors/call.js.map +0 -1
- package/dist/commands/actors/info.js +0 -203
- package/dist/commands/actors/info.js.map +0 -1
- package/dist/commands/actors/ls.js +0 -226
- package/dist/commands/actors/ls.js.map +0 -1
- package/dist/commands/actors/pull.js +0 -150
- package/dist/commands/actors/pull.js.map +0 -1
- package/dist/commands/actors/push.js +0 -300
- package/dist/commands/actors/push.js.map +0 -1
- package/dist/commands/actors/rm.js +0 -43
- package/dist/commands/actors/rm.js.map +0 -1
- package/dist/commands/actors/start.js +0 -125
- package/dist/commands/actors/start.js.map +0 -1
- package/dist/commands/builds/_index.js +0 -22
- package/dist/commands/builds/_index.js.map +0 -1
- package/dist/commands/builds/create.js +0 -130
- package/dist/commands/builds/create.js.map +0 -1
- package/dist/commands/builds/info.js +0 -78
- package/dist/commands/builds/info.js.map +0 -1
- package/dist/commands/builds/log.js +0 -35
- package/dist/commands/builds/log.js.map +0 -1
- package/dist/commands/builds/ls.js +0 -141
- package/dist/commands/builds/ls.js.map +0 -1
- package/dist/commands/builds/rm.js +0 -59
- package/dist/commands/builds/rm.js.map +0 -1
- package/dist/commands/call.js +0 -5
- package/dist/commands/call.js.map +0 -1
- package/dist/commands/create.js +0 -264
- package/dist/commands/create.js.map +0 -1
- package/dist/commands/datasets/_index.js +0 -25
- package/dist/commands/datasets/_index.js.map +0 -1
- package/dist/commands/datasets/create.js +0 -38
- package/dist/commands/datasets/create.js.map +0 -1
- package/dist/commands/datasets/get-items.js +0 -84
- package/dist/commands/datasets/get-items.js.map +0 -1
- package/dist/commands/datasets/info.js +0 -125
- package/dist/commands/datasets/info.js.map +0 -1
- package/dist/commands/datasets/ls.js +0 -73
- package/dist/commands/datasets/ls.js.map +0 -1
- package/dist/commands/datasets/push-items.js +0 -70
- package/dist/commands/datasets/push-items.js.map +0 -1
- package/dist/commands/datasets/rename.js +0 -71
- package/dist/commands/datasets/rename.js.map +0 -1
- package/dist/commands/datasets/rm.js +0 -48
- package/dist/commands/datasets/rm.js.map +0 -1
- package/dist/commands/edit-input-schema.js +0 -162
- package/dist/commands/edit-input-schema.js.map +0 -1
- package/dist/commands/help.js +0 -43
- package/dist/commands/help.js.map +0 -1
- package/dist/commands/info.js +0 -21
- package/dist/commands/info.js.map +0 -1
- package/dist/commands/init-wrap-scrapy.js +0 -27
- package/dist/commands/init-wrap-scrapy.js.map +0 -1
- package/dist/commands/init.js +0 -94
- package/dist/commands/init.js.map +0 -1
- package/dist/commands/key-value-stores/_index.js +0 -30
- package/dist/commands/key-value-stores/_index.js.map +0 -1
- package/dist/commands/key-value-stores/create.js +0 -38
- package/dist/commands/key-value-stores/create.js.map +0 -1
- package/dist/commands/key-value-stores/delete-value.js +0 -61
- package/dist/commands/key-value-stores/delete-value.js.map +0 -1
- package/dist/commands/key-value-stores/get-value.js +0 -70
- package/dist/commands/key-value-stores/get-value.js.map +0 -1
- package/dist/commands/key-value-stores/info.js +0 -127
- package/dist/commands/key-value-stores/info.js.map +0 -1
- package/dist/commands/key-value-stores/keys.js +0 -61
- package/dist/commands/key-value-stores/keys.js.map +0 -1
- package/dist/commands/key-value-stores/ls.js +0 -70
- package/dist/commands/key-value-stores/ls.js.map +0 -1
- package/dist/commands/key-value-stores/rename.js +0 -71
- package/dist/commands/key-value-stores/rename.js.map +0 -1
- package/dist/commands/key-value-stores/rm.js +0 -48
- package/dist/commands/key-value-stores/rm.js.map +0 -1
- package/dist/commands/key-value-stores/set-value.js +0 -57
- package/dist/commands/key-value-stores/set-value.js.map +0 -1
- package/dist/commands/login.js +0 -183
- package/dist/commands/login.js.map +0 -1
- package/dist/commands/logout.js +0 -16
- package/dist/commands/logout.js.map +0 -1
- package/dist/commands/pull.js +0 -5
- package/dist/commands/pull.js.map +0 -1
- package/dist/commands/push.js +0 -5
- package/dist/commands/push.js.map +0 -1
- package/dist/commands/request-queues/_index.js +0 -9
- package/dist/commands/request-queues/_index.js.map +0 -1
- package/dist/commands/run.js +0 -434
- package/dist/commands/run.js.map +0 -1
- package/dist/commands/runs/_index.js +0 -23
- package/dist/commands/runs/_index.js.map +0 -1
- package/dist/commands/runs/abort.js +0 -68
- package/dist/commands/runs/abort.js.map +0 -1
- package/dist/commands/runs/info.js +0 -238
- package/dist/commands/runs/info.js.map +0 -1
- package/dist/commands/runs/log.js +0 -32
- package/dist/commands/runs/log.js.map +0 -1
- package/dist/commands/runs/ls.js +0 -106
- package/dist/commands/runs/ls.js.map +0 -1
- package/dist/commands/runs/resurrect.js +0 -54
- package/dist/commands/runs/resurrect.js.map +0 -1
- package/dist/commands/runs/rm.js +0 -58
- package/dist/commands/runs/rm.js.map +0 -1
- package/dist/commands/secrets/_index.js +0 -25
- package/dist/commands/secrets/_index.js.map +0 -1
- package/dist/commands/secrets/add.js +0 -22
- package/dist/commands/secrets/add.js.map +0 -1
- package/dist/commands/secrets/rm.js +0 -18
- package/dist/commands/secrets/rm.js.map +0 -1
- package/dist/commands/task/_index.js +0 -11
- package/dist/commands/task/_index.js.map +0 -1
- package/dist/commands/task/run.js +0 -91
- package/dist/commands/task/run.js.map +0 -1
- package/dist/commands/upgrade.js +0 -74
- package/dist/commands/upgrade.js.map +0 -1
- package/dist/commands/validate-schema.js +0 -44
- package/dist/commands/validate-schema.js.map +0 -1
- package/dist/entrypoints/_shared.js +0 -256
- package/dist/entrypoints/_shared.js.map +0 -1
- package/dist/entrypoints/actor.js +0 -19
- package/dist/entrypoints/actor.js.map +0 -1
- package/dist/entrypoints/apify.js +0 -18
- package/dist/entrypoints/apify.js.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/lib/actor.js +0 -74
- package/dist/lib/actor.js.map +0 -1
- package/dist/lib/command-framework/apify-command.js +0 -426
- package/dist/lib/command-framework/apify-command.js.map +0 -1
- package/dist/lib/command-framework/args.js +0 -24
- package/dist/lib/command-framework/args.js.map +0 -1
- package/dist/lib/command-framework/flags.js +0 -99
- package/dist/lib/command-framework/flags.js.map +0 -1
- package/dist/lib/command-framework/help/CommandHelp.js +0 -228
- package/dist/lib/command-framework/help/CommandHelp.js.map +0 -1
- package/dist/lib/command-framework/help/CommandWithSubcommands.js +0 -75
- package/dist/lib/command-framework/help/CommandWithSubcommands.js.map +0 -1
- package/dist/lib/command-framework/help/_BaseCommandRenderer.js +0 -63
- package/dist/lib/command-framework/help/_BaseCommandRenderer.js.map +0 -1
- package/dist/lib/command-framework/help/consts.js +0 -27
- package/dist/lib/command-framework/help/consts.js.map +0 -1
- package/dist/lib/command-framework/help.js +0 -105
- package/dist/lib/command-framework/help.js.map +0 -1
- package/dist/lib/commands/pretty-print-bytes.js +0 -13
- package/dist/lib/commands/pretty-print-bytes.js.map +0 -1
- package/dist/lib/commands/pretty-print-status.js +0 -29
- package/dist/lib/commands/pretty-print-status.js.map +0 -1
- package/dist/lib/commands/read-stdin.js +0 -42
- package/dist/lib/commands/read-stdin.js.map +0 -1
- package/dist/lib/commands/resolve-actor-context.js +0 -70
- package/dist/lib/commands/resolve-actor-context.js.map +0 -1
- package/dist/lib/commands/resolve-input.js +0 -162
- package/dist/lib/commands/resolve-input.js.map +0 -1
- package/dist/lib/commands/responsive-table.js +0 -129
- package/dist/lib/commands/responsive-table.js.map +0 -1
- package/dist/lib/commands/run-on-cloud.js +0 -126
- package/dist/lib/commands/run-on-cloud.js.map +0 -1
- package/dist/lib/commands/storage-size.js +0 -8
- package/dist/lib/commands/storage-size.js.map +0 -1
- package/dist/lib/commands/storages.js +0 -30
- package/dist/lib/commands/storages.js.map +0 -1
- package/dist/lib/consts.js +0 -69
- package/dist/lib/consts.js.map +0 -1
- package/dist/lib/create-utils.js +0 -156
- package/dist/lib/create-utils.js.map +0 -1
- package/dist/lib/exec.js +0 -34
- package/dist/lib/exec.js.map +0 -1
- package/dist/lib/files.js +0 -54
- package/dist/lib/files.js.map +0 -1
- package/dist/lib/hooks/runtimes/javascript.js +0 -86
- package/dist/lib/hooks/runtimes/javascript.js.map +0 -1
- package/dist/lib/hooks/runtimes/python.js +0 -80
- package/dist/lib/hooks/runtimes/python.js.map +0 -1
- package/dist/lib/hooks/runtimes/utils.js +0 -16
- package/dist/lib/hooks/runtimes/utils.js.map +0 -1
- package/dist/lib/hooks/useActorConfig.js +0 -177
- package/dist/lib/hooks/useActorConfig.js.map +0 -1
- package/dist/lib/hooks/useCLIMetadata.js +0 -73
- package/dist/lib/hooks/useCLIMetadata.js.map +0 -1
- package/dist/lib/hooks/useCLIVersionCheck.js +0 -91
- package/dist/lib/hooks/useCLIVersionCheck.js.map +0 -1
- package/dist/lib/hooks/useCommandSuggestions.js +0 -37
- package/dist/lib/hooks/useCommandSuggestions.js.map +0 -1
- package/dist/lib/hooks/useCwdProject.js +0 -174
- package/dist/lib/hooks/useCwdProject.js.map +0 -1
- package/dist/lib/hooks/useLocalState.js +0 -56
- package/dist/lib/hooks/useLocalState.js.map +0 -1
- package/dist/lib/hooks/useModuleVersion.js +0 -103
- package/dist/lib/hooks/useModuleVersion.js.map +0 -1
- package/dist/lib/hooks/useStdin.js +0 -65
- package/dist/lib/hooks/useStdin.js.map +0 -1
- package/dist/lib/input_schema.js +0 -130
- package/dist/lib/input_schema.js.map +0 -1
- package/dist/lib/outputs.js +0 -45
- package/dist/lib/outputs.js.map +0 -1
- package/dist/lib/project_analyzer.js +0 -30
- package/dist/lib/project_analyzer.js.map +0 -1
- package/dist/lib/projects/CrawleeAnalyzer.js +0 -20
- package/dist/lib/projects/CrawleeAnalyzer.js.map +0 -1
- package/dist/lib/projects/OldApifySDKAnalyzer.js +0 -38
- package/dist/lib/projects/OldApifySDKAnalyzer.js.map +0 -1
- package/dist/lib/projects/scrapy/ScrapyProjectAnalyzer.js +0 -73
- package/dist/lib/projects/scrapy/ScrapyProjectAnalyzer.js.map +0 -1
- package/dist/lib/projects/scrapy/Spider.js +0 -13
- package/dist/lib/projects/scrapy/Spider.js.map +0 -1
- package/dist/lib/projects/scrapy/SpiderFileAnalyzer.js +0 -20
- package/dist/lib/projects/scrapy/SpiderFileAnalyzer.js.map +0 -1
- package/dist/lib/projects/scrapy/wrapScrapyProject.js +0 -113
- package/dist/lib/projects/scrapy/wrapScrapyProject.js.map +0 -1
- package/dist/lib/projects/shared.js +0 -13
- package/dist/lib/projects/shared.js.map +0 -1
- package/dist/lib/secrets.js +0 -106
- package/dist/lib/secrets.js.map +0 -1
- package/dist/lib/telemetry.js +0 -86
- package/dist/lib/telemetry.js.map +0 -1
- package/dist/lib/types.js +0 -4
- package/dist/lib/types.js.map +0 -1
- package/dist/lib/utils/cliDebugPrint.js +0 -7
- package/dist/lib/utils/cliDebugPrint.js.map +0 -1
- package/dist/lib/utils/confirm.js +0 -28
- package/dist/lib/utils/confirm.js.map +0 -1
- package/dist/lib/utils.js +0 -457
- package/dist/lib/utils.js.map +0 -1
|
@@ -1,65 +0,0 @@
|
|
|
1
|
-
import { constants, fstat as fstat_ } from 'node:fs';
|
|
2
|
-
import process from 'node:process';
|
|
3
|
-
import { promisify } from 'node:util';
|
|
4
|
-
import { cliDebugPrint } from '../utils/cliDebugPrint.js';
|
|
5
|
-
const fstat = promisify(fstat_);
|
|
6
|
-
let cachedStdinState;
|
|
7
|
-
export async function useStdin() {
|
|
8
|
-
if (cachedStdinState) {
|
|
9
|
-
return cachedStdinState;
|
|
10
|
-
}
|
|
11
|
-
const stdinStream = process.stdin;
|
|
12
|
-
// The best showcase of what this does: https://stackoverflow.com/a/59024214
|
|
13
|
-
const state = {
|
|
14
|
-
isTTY: stdinStream.isTTY,
|
|
15
|
-
hasData: false,
|
|
16
|
-
waitDelay: 0,
|
|
17
|
-
stream: stdinStream,
|
|
18
|
-
};
|
|
19
|
-
// TODO: use os.guessFileDescriptorType instead once https://github.com/nodejs/node/pull/58060 lands in our supported node versions
|
|
20
|
-
const pipedIn = await fstat(0)
|
|
21
|
-
.then((stat) => {
|
|
22
|
-
cliDebugPrint('useStdin', {
|
|
23
|
-
stat,
|
|
24
|
-
isRegularFile: stat.isFile(),
|
|
25
|
-
isDirectory: stat.isDirectory(),
|
|
26
|
-
isBlockDevice: stat.isBlockDevice(),
|
|
27
|
-
isCharDevice: stat.isCharacterDevice(),
|
|
28
|
-
isSymbolicLink: stat.isSymbolicLink(),
|
|
29
|
-
isFIFO: stat.isFIFO(),
|
|
30
|
-
isSocket: stat.isSocket(),
|
|
31
|
-
});
|
|
32
|
-
// Right now, Windows always returns false for isFIFO, so we have to check for that manually
|
|
33
|
-
// Windows might also wrongly return the mode for this, who knows!
|
|
34
|
-
// TODO: https://github.com/nodejs/node/issues/57603
|
|
35
|
-
if (process.platform === 'win32') {
|
|
36
|
-
// eslint-disable-next-line no-bitwise
|
|
37
|
-
if ((stat.mode & constants.S_IFIFO) === constants.S_IFIFO) {
|
|
38
|
-
return 100;
|
|
39
|
-
}
|
|
40
|
-
// In node 18, for some reason this returns true for vitest, and thus always hangs.
|
|
41
|
-
if (stat.isFile()) {
|
|
42
|
-
return 50;
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
// isFIFO -> `node a | node b`
|
|
46
|
-
// isFile -> `node a < file`
|
|
47
|
-
// isSocket -> child processes (I think) [but we set a timeout of 50ms to avoid hanging]
|
|
48
|
-
return stat.isFIFO() || stat.isFile() || (stat.isSocket() ? 50 : false);
|
|
49
|
-
})
|
|
50
|
-
.catch(() => false);
|
|
51
|
-
cliDebugPrint('useStdin', { isTTY: state.isTTY, pipedIn, readableEnded: stdinStream.readableEnded });
|
|
52
|
-
// The isTTY params will be true if there is no piping into stdin
|
|
53
|
-
// pipedIn is set if someone either runs `node a | node b`, or `node a < file`
|
|
54
|
-
// if that is the case, isTTY will be undefined (???)
|
|
55
|
-
// readableEnded is a catch all for when the stream is closed
|
|
56
|
-
if (!stdinStream.isTTY || (pipedIn !== false && (stdinStream.isTTY !== undefined || !stdinStream.readableEnded))) {
|
|
57
|
-
state.hasData = true;
|
|
58
|
-
}
|
|
59
|
-
if (typeof pipedIn === 'number') {
|
|
60
|
-
state.waitDelay = pipedIn;
|
|
61
|
-
}
|
|
62
|
-
cachedStdinState = state;
|
|
63
|
-
return state;
|
|
64
|
-
}
|
|
65
|
-
//# sourceMappingURL=useStdin.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useStdin.js","sourceRoot":"","sources":["../../../src/lib/hooks/useStdin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,KAAK,IAAI,MAAM,EAAE,MAAM,SAAS,CAAC;AACrD,OAAO,OAAO,MAAM,cAAc,CAAC;AACnC,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtC,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAE1D,MAAM,KAAK,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;AAShC,IAAI,gBAAwC,CAAC;AAE7C,MAAM,CAAC,KAAK,UAAU,QAAQ;IAC7B,IAAI,gBAAgB,EAAE,CAAC;QACtB,OAAO,gBAAgB,CAAC;IACzB,CAAC;IAED,MAAM,WAAW,GAAG,OAAO,CAAC,KAAK,CAAC;IAElC,4EAA4E;IAC5E,MAAM,KAAK,GAAe;QACzB,KAAK,EAAE,WAAW,CAAC,KAAK;QACxB,OAAO,EAAE,KAAK;QACd,SAAS,EAAE,CAAC;QACZ,MAAM,EAAE,WAAW;KACnB,CAAC;IAEF,mIAAmI;IAEnI,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,CAAC,CAAC;SAC5B,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE;QACd,aAAa,CAAC,UAAU,EAAE;YACzB,IAAI;YACJ,aAAa,EAAE,IAAI,CAAC,MAAM,EAAE;YAC5B,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE;YAC/B,aAAa,EAAE,IAAI,CAAC,aAAa,EAAE;YACnC,YAAY,EAAE,IAAI,CAAC,iBAAiB,EAAE;YACtC,cAAc,EAAE,IAAI,CAAC,cAAc,EAAE;YACrC,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE;YACrB,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE;SACzB,CAAC,CAAC;QAEH,4FAA4F;QAC5F,kEAAkE;QAClE,oDAAoD;QACpD,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;YAClC,sCAAsC;YACtC,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,SAAS,CAAC,OAAO,CAAC,KAAK,SAAS,CAAC,OAAO,EAAE,CAAC;gBAC3D,OAAO,GAAG,CAAC;YACZ,CAAC;YAED,mFAAmF;YACnF,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;gBACnB,OAAO,EAAE,CAAC;YACX,CAAC;QACF,CAAC;QAED,8BAA8B;QAC9B,4BAA4B;QAC5B,wFAAwF;QACxF,OAAO,IAAI,CAAC,MAAM,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IACzE,CAAC,CAAC;SACD,KAAK,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC;IAErB,aAAa,CAAC,UAAU,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,OAAO,EAAE,aAAa,EAAE,WAAW,CAAC,aAAa,EAAE,CAAC,CAAC;IAErG,iEAAiE;IACjE,8EAA8E;IAC9E,qDAAqD;IACrD,6DAA6D;IAC7D,IAAI,CAAC,WAAW,CAAC,KAAK,IAAI,CAAC,OAAO,KAAK,KAAK,IAAI,CAAC,WAAW,CAAC,KAAK,KAAK,SAAS,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC;QAClH,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC;IACtB,CAAC;IAED,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;QACjC,KAAK,CAAC,SAAS,GAAG,OAAO,CAAC;IAC3B,CAAC;IAED,gBAAgB,GAAG,KAAK,CAAC;IAEzB,OAAO,KAAK,CAAC;AACd,CAAC"}
|
package/dist/lib/input_schema.js
DELETED
|
@@ -1,130 +0,0 @@
|
|
|
1
|
-
import { existsSync, writeFileSync } from 'node:fs';
|
|
2
|
-
import { join } from 'node:path';
|
|
3
|
-
import process from 'node:process';
|
|
4
|
-
import deepClone from 'lodash.clonedeep';
|
|
5
|
-
import { KEY_VALUE_STORE_KEYS } from '@apify/consts';
|
|
6
|
-
import { validateInputSchema } from '@apify/input_schema';
|
|
7
|
-
import { ACTOR_SPECIFICATION_FOLDER } from './consts.js';
|
|
8
|
-
import { warning } from './outputs.js';
|
|
9
|
-
import { Ajv2019, getJsonFileContent, getLocalConfig, getLocalKeyValueStorePath } from './utils.js';
|
|
10
|
-
const DEFAULT_INPUT_SCHEMA_PATHS = [
|
|
11
|
-
'.actor/INPUT_SCHEMA.json',
|
|
12
|
-
'./INPUT_SCHEMA.json',
|
|
13
|
-
'.actor/input_schema.json',
|
|
14
|
-
'./input_schema.json',
|
|
15
|
-
];
|
|
16
|
-
/**
|
|
17
|
-
* Return the input schema from the default location.
|
|
18
|
-
*
|
|
19
|
-
* When the input schema does not exist, null is returned for schema.
|
|
20
|
-
* In such a case, path would be set to the location
|
|
21
|
-
* where the input schema would be expected to be found (and e.g. can be created there).
|
|
22
|
-
*/
|
|
23
|
-
export const readInputSchema = async ({ forcePath, cwd } = { cwd: process.cwd() }) => {
|
|
24
|
-
if (forcePath) {
|
|
25
|
-
return {
|
|
26
|
-
inputSchema: getJsonFileContent(forcePath),
|
|
27
|
-
inputSchemaPath: forcePath,
|
|
28
|
-
};
|
|
29
|
-
}
|
|
30
|
-
const localConfig = getLocalConfig(cwd);
|
|
31
|
-
if (typeof localConfig?.input === 'object') {
|
|
32
|
-
return {
|
|
33
|
-
inputSchema: localConfig.input,
|
|
34
|
-
inputSchemaPath: null,
|
|
35
|
-
};
|
|
36
|
-
}
|
|
37
|
-
if (typeof localConfig?.input === 'string') {
|
|
38
|
-
const fullPath = join(cwd, ACTOR_SPECIFICATION_FOLDER, localConfig.input);
|
|
39
|
-
return {
|
|
40
|
-
inputSchema: getJsonFileContent(fullPath),
|
|
41
|
-
inputSchemaPath: fullPath,
|
|
42
|
-
};
|
|
43
|
-
}
|
|
44
|
-
for (const path of DEFAULT_INPUT_SCHEMA_PATHS) {
|
|
45
|
-
const fullPath = join(cwd, path);
|
|
46
|
-
if (existsSync(fullPath)) {
|
|
47
|
-
return {
|
|
48
|
-
inputSchema: getJsonFileContent(fullPath),
|
|
49
|
-
inputSchemaPath: fullPath,
|
|
50
|
-
};
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
// If not input schema has been found so far, return the first default path
|
|
54
|
-
// where the input schema would be expected.
|
|
55
|
-
return {
|
|
56
|
-
inputSchema: null,
|
|
57
|
-
inputSchemaPath: join(cwd, DEFAULT_INPUT_SCHEMA_PATHS[0]),
|
|
58
|
-
};
|
|
59
|
-
};
|
|
60
|
-
/**
|
|
61
|
-
* Goes to the Actor directory and creates INPUT.json file from the input schema prefills.
|
|
62
|
-
|
|
63
|
-
*/
|
|
64
|
-
export const createPrefilledInputFileFromInputSchema = async (actorFolderDir) => {
|
|
65
|
-
let inputFile = {};
|
|
66
|
-
try {
|
|
67
|
-
const { inputSchema } = await readInputSchema({ cwd: actorFolderDir });
|
|
68
|
-
if (inputSchema) {
|
|
69
|
-
/**
|
|
70
|
-
* TODO: The logic is copied from @apify-packages/actor -> getPrefillFromInputSchema
|
|
71
|
-
* It is not possible to install the package here because it is private
|
|
72
|
-
* We should move it to @apify/input_schema and use it from there.
|
|
73
|
-
*/
|
|
74
|
-
const validator = new Ajv2019({ strict: false });
|
|
75
|
-
validateInputSchema(validator, inputSchema);
|
|
76
|
-
// inputFile = _.mapObject(inputSchema.properties as any, (fieldSchema) =>
|
|
77
|
-
// fieldSchema.type === 'boolean' || fieldSchema.editor === 'hidden'
|
|
78
|
-
// ? fieldSchema.default
|
|
79
|
-
// : fieldSchema.prefill,
|
|
80
|
-
// );
|
|
81
|
-
inputFile = Object.entries(inputSchema.properties).reduce((acc, [key, fieldSchema]) => {
|
|
82
|
-
acc[key] =
|
|
83
|
-
fieldSchema.type === 'boolean' || fieldSchema.editor === 'hidden'
|
|
84
|
-
? fieldSchema.default
|
|
85
|
-
: fieldSchema.prefill;
|
|
86
|
-
return acc;
|
|
87
|
-
}, {});
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
catch (err) {
|
|
91
|
-
warning({
|
|
92
|
-
message: `Could not create default input based on input schema, creating empty input instead. Cause: ${err.message}`,
|
|
93
|
-
});
|
|
94
|
-
}
|
|
95
|
-
finally {
|
|
96
|
-
const keyValueStorePath = getLocalKeyValueStorePath();
|
|
97
|
-
const inputJsonPath = join(actorFolderDir, keyValueStorePath, `${KEY_VALUE_STORE_KEYS.INPUT}.json`);
|
|
98
|
-
writeFileSync(inputJsonPath, JSON.stringify(inputFile, null, '\t'));
|
|
99
|
-
}
|
|
100
|
-
};
|
|
101
|
-
export const getDefaultsFromInputSchema = (inputSchema) => {
|
|
102
|
-
const defaults = {};
|
|
103
|
-
for (const [key, fieldSchema] of Object.entries(inputSchema.properties)) {
|
|
104
|
-
if (fieldSchema.default !== undefined) {
|
|
105
|
-
defaults[key] = fieldSchema.default;
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
return defaults;
|
|
109
|
-
};
|
|
110
|
-
// Lots of code copied from @apify-packages/actor, this really should be moved to the shared input_schema package
|
|
111
|
-
export const getAjvValidator = (inputSchema, ajvInstance) => {
|
|
112
|
-
const copyOfSchema = deepClone(inputSchema);
|
|
113
|
-
copyOfSchema.required = [];
|
|
114
|
-
for (const [inputSchemaFieldKey, inputSchemaField] of Object.entries(inputSchema.properties)) {
|
|
115
|
-
// `required` field doesn't need to be present in input schema
|
|
116
|
-
const isRequired = inputSchema.required?.includes(inputSchemaFieldKey);
|
|
117
|
-
const hasDefault = inputSchemaField.default !== undefined;
|
|
118
|
-
if (isRequired && !hasDefault) {
|
|
119
|
-
// If field is required but has default, we act like it's optional because we always have value to use
|
|
120
|
-
copyOfSchema.required.push(inputSchemaFieldKey);
|
|
121
|
-
if (inputSchemaField.type === 'array') {
|
|
122
|
-
// If array is required, it has to have at least 1 item.
|
|
123
|
-
inputSchemaField.minItems = Math.max(1, inputSchemaField.minItems || 0);
|
|
124
|
-
}
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
|
-
delete copyOfSchema.$schema;
|
|
128
|
-
return ajvInstance.compile(copyOfSchema);
|
|
129
|
-
};
|
|
130
|
-
//# sourceMappingURL=input_schema.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"input_schema.js","sourceRoot":"","sources":["../../src/lib/input_schema.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/outputs.js
DELETED
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
import chalk from 'chalk';
|
|
2
|
-
function internalLog(options) {
|
|
3
|
-
if (options.stdoutOutput) {
|
|
4
|
-
console.log(...options.stdoutOutput);
|
|
5
|
-
}
|
|
6
|
-
if (options.stderrOutput) {
|
|
7
|
-
console.error(...options.stderrOutput);
|
|
8
|
-
}
|
|
9
|
-
}
|
|
10
|
-
export function simpleLog(options) {
|
|
11
|
-
internalLog({
|
|
12
|
-
[options.stdout ? 'stdoutOutput' : 'stderrOutput']: [options.message],
|
|
13
|
-
});
|
|
14
|
-
}
|
|
15
|
-
export function error(options) {
|
|
16
|
-
internalLog({
|
|
17
|
-
[options.stdout ? 'stdoutOutput' : 'stderrOutput']: [chalk.red('Error:'), options.message],
|
|
18
|
-
});
|
|
19
|
-
}
|
|
20
|
-
export function warning(options) {
|
|
21
|
-
internalLog({
|
|
22
|
-
[options.stdout ? 'stdoutOutput' : 'stderrOutput']: [chalk.yellow.bold('Warning:'), options.message],
|
|
23
|
-
});
|
|
24
|
-
}
|
|
25
|
-
export function success(options) {
|
|
26
|
-
internalLog({
|
|
27
|
-
[options.stdout ? 'stdoutOutput' : 'stderrOutput']: [chalk.green('Success:'), options.message],
|
|
28
|
-
});
|
|
29
|
-
}
|
|
30
|
-
export function run(options) {
|
|
31
|
-
internalLog({
|
|
32
|
-
[options.stdout ? 'stdoutOutput' : 'stderrOutput']: [chalk.gray('Run:'), options.message],
|
|
33
|
-
});
|
|
34
|
-
}
|
|
35
|
-
export function info(options) {
|
|
36
|
-
internalLog({
|
|
37
|
-
[options.stdout ? 'stdoutOutput' : 'stderrOutput']: [chalk.white('Info:'), options.message],
|
|
38
|
-
});
|
|
39
|
-
}
|
|
40
|
-
export function link(options) {
|
|
41
|
-
internalLog({
|
|
42
|
-
[options.stdout ? 'stdoutOutput' : 'stderrOutput']: [chalk.blue(options.message), options.url],
|
|
43
|
-
});
|
|
44
|
-
}
|
|
45
|
-
//# sourceMappingURL=outputs.js.map
|
package/dist/lib/outputs.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"outputs.js","sourceRoot":"","sources":["../../src/lib/outputs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAO1B,SAAS,WAAW,CAAC,OAAmB;IACvC,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;QAC1B,OAAO,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;IACtC,CAAC;IAED,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;QAC1B,OAAO,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;IACxC,CAAC;AACF,CAAC;AAOD,MAAM,UAAU,SAAS,CAAC,OAAyB;IAClD,WAAW,CAAC;QACX,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,cAAc,CAAC,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC;KACrE,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,KAAK,CAAC,OAAyB;IAC9C,WAAW,CAAC;QACX,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,cAAc,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC,OAAO,CAAC;KAC1F,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,OAAyB;IAChD,WAAW,CAAC;QACX,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,cAAc,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC,OAAO,CAAC;KACpG,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,OAAyB;IAChD,WAAW,CAAC;QACX,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,cAAc,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC,OAAO,CAAC;KAC9F,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,GAAG,CAAC,OAAyB;IAC5C,WAAW,CAAC;QACX,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,cAAc,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,OAAO,CAAC;KACzF,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,IAAI,CAAC,OAAyB;IAC7C,WAAW,CAAC;QACX,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,cAAc,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,OAAO,CAAC;KAC3F,CAAC,CAAC;AACJ,CAAC;AAMD,MAAM,UAAU,IAAI,CAAC,OAA0B;IAC9C,WAAW,CAAC;QACX,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,cAAc,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,GAAG,CAAC;KAC9F,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
import { PROJECT_TYPES } from './consts.js';
|
|
2
|
-
import { CrawleeAnalyzer } from './projects/CrawleeAnalyzer.js';
|
|
3
|
-
import { OldApifySDKAnalyzer } from './projects/OldApifySDKAnalyzer.js';
|
|
4
|
-
import { ScrapyProjectAnalyzer } from './projects/scrapy/ScrapyProjectAnalyzer.js';
|
|
5
|
-
const analyzers = [
|
|
6
|
-
{
|
|
7
|
-
type: PROJECT_TYPES.SCRAPY,
|
|
8
|
-
analyzer: ScrapyProjectAnalyzer,
|
|
9
|
-
},
|
|
10
|
-
{
|
|
11
|
-
type: PROJECT_TYPES.CRAWLEE,
|
|
12
|
-
analyzer: CrawleeAnalyzer,
|
|
13
|
-
},
|
|
14
|
-
{
|
|
15
|
-
type: PROJECT_TYPES.PRE_CRAWLEE_APIFY_SDK,
|
|
16
|
-
analyzer: OldApifySDKAnalyzer,
|
|
17
|
-
},
|
|
18
|
-
];
|
|
19
|
-
export class ProjectAnalyzer {
|
|
20
|
-
static getProjectType(pathname) {
|
|
21
|
-
const analyzer = analyzers.find((a) => {
|
|
22
|
-
if (!a.analyzer.isApplicable) {
|
|
23
|
-
throw new Error(`Analyzer ${a.analyzer} does not have isApplicable method.`);
|
|
24
|
-
}
|
|
25
|
-
return a.analyzer.isApplicable(pathname);
|
|
26
|
-
});
|
|
27
|
-
return analyzer?.type || PROJECT_TYPES.UNKNOWN;
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
//# sourceMappingURL=project_analyzer.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"project_analyzer.js","sourceRoot":"","sources":["../../src/lib/project_analyzer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AACxE,OAAO,EAAE,qBAAqB,EAAE,MAAM,4CAA4C,CAAC;AAUnF,MAAM,SAAS,GAA0B;IACxC;QACC,IAAI,EAAE,aAAa,CAAC,MAAM;QAC1B,QAAQ,EAAE,qBAAqB;KAC/B;IACD;QACC,IAAI,EAAE,aAAa,CAAC,OAAO;QAC3B,QAAQ,EAAE,eAAe;KACzB;IACD;QACC,IAAI,EAAE,aAAa,CAAC,qBAAqB;QACzC,QAAQ,EAAE,mBAAmB;KAC7B;CACD,CAAC;AAEF,MAAM,OAAO,eAAe;IAC3B,MAAM,CAAC,cAAc,CAAC,QAAgB;QACrC,MAAM,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE;YACrC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,YAAY,EAAE,CAAC;gBAC9B,MAAM,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC,QAAQ,qCAAqC,CAAC,CAAC;YAC9E,CAAC;YAED,OAAO,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;QAC1C,CAAC,CAAC,CAAC;QAEH,OAAO,QAAQ,EAAE,IAAI,IAAI,aAAa,CAAC,OAAO,CAAC;IAChD,CAAC;CACD"}
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import { existsSync, readFileSync } from 'node:fs';
|
|
2
|
-
import { join } from 'node:path';
|
|
3
|
-
import { CRAWLEE_PACKAGES } from './shared.js';
|
|
4
|
-
export class CrawleeAnalyzer {
|
|
5
|
-
static isApplicable(pathname) {
|
|
6
|
-
const hasPackageJson = existsSync(join(pathname, 'package.json'));
|
|
7
|
-
if (!hasPackageJson) {
|
|
8
|
-
return false;
|
|
9
|
-
}
|
|
10
|
-
const packageJson = readFileSync(join(pathname, 'package.json'), 'utf8');
|
|
11
|
-
try {
|
|
12
|
-
const packageJsonParsed = JSON.parse(packageJson);
|
|
13
|
-
return CRAWLEE_PACKAGES.some((pkg) => packageJsonParsed?.dependencies?.[pkg] !== undefined);
|
|
14
|
-
}
|
|
15
|
-
catch {
|
|
16
|
-
return false;
|
|
17
|
-
}
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
|
-
//# sourceMappingURL=CrawleeAnalyzer.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"CrawleeAnalyzer.js","sourceRoot":"","sources":["../../../src/lib/projects/CrawleeAnalyzer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAE/C,MAAM,OAAO,eAAe;IAC3B,MAAM,CAAC,YAAY,CAAC,QAAgB;QACnC,MAAM,cAAc,GAAG,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC,CAAC;QAElE,IAAI,CAAC,cAAc,EAAE,CAAC;YACrB,OAAO,KAAK,CAAC;QACd,CAAC;QAED,MAAM,WAAW,GAAG,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,cAAc,CAAC,EAAE,MAAM,CAAC,CAAC;QAEzE,IAAI,CAAC;YACJ,MAAM,iBAAiB,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;YAElD,OAAO,gBAAgB,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,iBAAiB,EAAE,YAAY,EAAE,CAAC,GAAG,CAAC,KAAK,SAAS,CAAC,CAAC;QAC7F,CAAC;QAAC,MAAM,CAAC;YACR,OAAO,KAAK,CAAC;QACd,CAAC;IACF,CAAC;CACD"}
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
import { existsSync, readFileSync } from 'node:fs';
|
|
2
|
-
import { join } from 'node:path';
|
|
3
|
-
import { lt } from 'semver';
|
|
4
|
-
import { CRAWLEE_PACKAGES } from './shared.js';
|
|
5
|
-
const VERSION_WHEN_APIFY_MOVED_TO_CRAWLEE = '3.0.0';
|
|
6
|
-
export class OldApifySDKAnalyzer {
|
|
7
|
-
static isApplicable(pathname) {
|
|
8
|
-
const hasPackageJson = existsSync(join(pathname, 'package.json'));
|
|
9
|
-
if (!hasPackageJson) {
|
|
10
|
-
return false;
|
|
11
|
-
}
|
|
12
|
-
const packageJson = readFileSync(join(pathname, 'package.json'), 'utf8');
|
|
13
|
-
try {
|
|
14
|
-
const packageJsonParsed = JSON.parse(packageJson);
|
|
15
|
-
// If they have crawlee as a dependency, likely to use crawlee
|
|
16
|
-
if (CRAWLEE_PACKAGES.some((pkg) => packageJsonParsed?.dependencies?.[pkg] !== undefined)) {
|
|
17
|
-
return false;
|
|
18
|
-
}
|
|
19
|
-
const apifyVersion = packageJsonParsed?.dependencies?.apify;
|
|
20
|
-
if (!apifyVersion) {
|
|
21
|
-
return false;
|
|
22
|
-
}
|
|
23
|
-
// We cannot infer/crawlee v3
|
|
24
|
-
if (apifyVersion === '*') {
|
|
25
|
-
return false;
|
|
26
|
-
}
|
|
27
|
-
let actualVersion = apifyVersion;
|
|
28
|
-
if (apifyVersion.startsWith('~') || apifyVersion.startsWith('^')) {
|
|
29
|
-
actualVersion = apifyVersion.slice(1);
|
|
30
|
-
}
|
|
31
|
-
return lt(actualVersion, VERSION_WHEN_APIFY_MOVED_TO_CRAWLEE);
|
|
32
|
-
}
|
|
33
|
-
catch {
|
|
34
|
-
return false;
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
//# sourceMappingURL=OldApifySDKAnalyzer.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"OldApifySDKAnalyzer.js","sourceRoot":"","sources":["../../../src/lib/projects/OldApifySDKAnalyzer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAE5B,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAE/C,MAAM,mCAAmC,GAAG,OAAO,CAAC;AAEpD,MAAM,OAAO,mBAAmB;IAC/B,MAAM,CAAC,YAAY,CAAC,QAAgB;QACnC,MAAM,cAAc,GAAG,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC,CAAC;QAElE,IAAI,CAAC,cAAc,EAAE,CAAC;YACrB,OAAO,KAAK,CAAC;QACd,CAAC;QAED,MAAM,WAAW,GAAG,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,cAAc,CAAC,EAAE,MAAM,CAAC,CAAC;QAEzE,IAAI,CAAC;YACJ,MAAM,iBAAiB,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;YAElD,8DAA8D;YAC9D,IAAI,gBAAgB,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,iBAAiB,EAAE,YAAY,EAAE,CAAC,GAAG,CAAC,KAAK,SAAS,CAAC,EAAE,CAAC;gBAC1F,OAAO,KAAK,CAAC;YACd,CAAC;YAED,MAAM,YAAY,GAAG,iBAAiB,EAAE,YAAY,EAAE,KAAK,CAAC;YAC5D,IAAI,CAAC,YAAY,EAAE,CAAC;gBACnB,OAAO,KAAK,CAAC;YACd,CAAC;YAED,6BAA6B;YAC7B,IAAI,YAAY,KAAK,GAAG,EAAE,CAAC;gBAC1B,OAAO,KAAK,CAAC;YACd,CAAC;YAED,IAAI,aAAa,GAAG,YAAY,CAAC;YAEjC,IAAI,YAAY,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,YAAY,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;gBAClE,aAAa,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACvC,CAAC;YAED,OAAO,EAAE,CAAC,aAAa,EAAE,mCAAmC,CAAC,CAAC;QAC/D,CAAC;QAAC,MAAM,CAAC;YACR,OAAO,KAAK,CAAC;QACd,CAAC;IACF,CAAC;CACD"}
|
|
@@ -1,73 +0,0 @@
|
|
|
1
|
-
import { existsSync, readdirSync } from 'node:fs';
|
|
2
|
-
import { join, resolve } from 'node:path';
|
|
3
|
-
import ConfigParser from 'configparser';
|
|
4
|
-
import inquirer from 'inquirer';
|
|
5
|
-
import { SpiderFileAnalyzer } from './SpiderFileAnalyzer.js';
|
|
6
|
-
export class ScrapyProjectAnalyzer {
|
|
7
|
-
pathname;
|
|
8
|
-
configuration = null;
|
|
9
|
-
settings = null;
|
|
10
|
-
constructor(pathname) {
|
|
11
|
-
this.pathname = pathname;
|
|
12
|
-
this.settings = null;
|
|
13
|
-
this.loadScrapyCfg();
|
|
14
|
-
}
|
|
15
|
-
static isApplicable(pathname) {
|
|
16
|
-
return existsSync(join(pathname, 'scrapy.cfg'));
|
|
17
|
-
}
|
|
18
|
-
async init() {
|
|
19
|
-
await this.loadSettings();
|
|
20
|
-
}
|
|
21
|
-
loadScrapyCfg() {
|
|
22
|
-
const config = new ConfigParser();
|
|
23
|
-
const scrapyCfgPath = resolve(join(this.pathname, 'scrapy.cfg'));
|
|
24
|
-
if (!existsSync(scrapyCfgPath)) {
|
|
25
|
-
throw new Error(`scrapy.cfg not found in "${scrapyCfgPath}".
|
|
26
|
-
Are you sure there is a Scrapy project there?`);
|
|
27
|
-
}
|
|
28
|
-
config.read(scrapyCfgPath);
|
|
29
|
-
this.configuration = config;
|
|
30
|
-
}
|
|
31
|
-
async loadSettings() {
|
|
32
|
-
const assumedBotName = this.configuration.get('settings', 'default').split('.')[0];
|
|
33
|
-
const settings = await inquirer.prompt([
|
|
34
|
-
{
|
|
35
|
-
type: 'input',
|
|
36
|
-
name: 'BOT_NAME',
|
|
37
|
-
message: 'Enter the Scrapy BOT_NAME (see settings.py):',
|
|
38
|
-
default: assumedBotName,
|
|
39
|
-
},
|
|
40
|
-
{
|
|
41
|
-
type: 'input',
|
|
42
|
-
name: 'SPIDER_MODULES',
|
|
43
|
-
message: 'What folder are the Scrapy spider modules stored in? (see SPIDER_MODULES in settings.py):',
|
|
44
|
-
default: `${assumedBotName}.spiders`,
|
|
45
|
-
},
|
|
46
|
-
]);
|
|
47
|
-
this.settings = {
|
|
48
|
-
BOT_NAME: settings.BOT_NAME,
|
|
49
|
-
SPIDER_MODULES: typeof settings.SPIDER_MODULES === 'string' ? [settings.SPIDER_MODULES] : settings.SPIDER_MODULES,
|
|
50
|
-
};
|
|
51
|
-
}
|
|
52
|
-
getName() {
|
|
53
|
-
return this.settings?.BOT_NAME;
|
|
54
|
-
}
|
|
55
|
-
getAvailableSpiders() {
|
|
56
|
-
const spiderPaths = this.settings?.SPIDER_MODULES;
|
|
57
|
-
if (!spiderPaths) {
|
|
58
|
-
throw new Error('SPIDER_MODULES path not found in settings.');
|
|
59
|
-
}
|
|
60
|
-
const spiders = [];
|
|
61
|
-
for (const spiderPath of spiderPaths) {
|
|
62
|
-
const spidersDir = join(this.pathname, spiderPath.replaceAll('.', '/'));
|
|
63
|
-
const files = readdirSync(spidersDir, { withFileTypes: true });
|
|
64
|
-
for (const file of files) {
|
|
65
|
-
if (file.isFile() && file.name.endsWith('.py') && file.name !== '__init__.py') {
|
|
66
|
-
spiders.push(...new SpiderFileAnalyzer(join(spidersDir, file.name)).getSpiders());
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
return spiders;
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
//# sourceMappingURL=ScrapyProjectAnalyzer.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ScrapyProjectAnalyzer.js","sourceRoot":"","sources":["../../../../src/lib/projects/scrapy/ScrapyProjectAnalyzer.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
export class Spider {
|
|
2
|
-
name;
|
|
3
|
-
class_name;
|
|
4
|
-
start_urls;
|
|
5
|
-
pathname;
|
|
6
|
-
constructor(data) {
|
|
7
|
-
this.name = data.name;
|
|
8
|
-
this.class_name = data.class_name;
|
|
9
|
-
this.start_urls = data.start_urls;
|
|
10
|
-
this.pathname = data.pathname;
|
|
11
|
-
}
|
|
12
|
-
}
|
|
13
|
-
//# sourceMappingURL=Spider.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Spider.js","sourceRoot":"","sources":["../../../../src/lib/projects/scrapy/Spider.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,MAAM;IAClB,IAAI,CAAU;IACd,UAAU,CAAS;IACnB,UAAU,CAAU;IACpB,QAAQ,CAAS;IAEjB,YAAY,IAAgB;QAC3B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACtB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;QAClC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;QAClC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;IAC/B,CAAC;CACD"}
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import { readFileSync } from 'node:fs';
|
|
2
|
-
import { Spider } from './Spider.js';
|
|
3
|
-
export class SpiderFileAnalyzer {
|
|
4
|
-
pathname;
|
|
5
|
-
constructor(pathname) {
|
|
6
|
-
this.pathname = pathname;
|
|
7
|
-
}
|
|
8
|
-
getSpiders() {
|
|
9
|
-
const file = readFileSync(this.pathname, 'utf8');
|
|
10
|
-
const regex = /class\s+(\w+)/g;
|
|
11
|
-
const spiders = [];
|
|
12
|
-
let match = regex.exec(file);
|
|
13
|
-
while (match) {
|
|
14
|
-
spiders.push(new Spider({ class_name: match[1], pathname: this.pathname }));
|
|
15
|
-
match = regex.exec(file);
|
|
16
|
-
}
|
|
17
|
-
return spiders;
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
|
-
//# sourceMappingURL=SpiderFileAnalyzer.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"SpiderFileAnalyzer.js","sourceRoot":"","sources":["../../../../src/lib/projects/scrapy/SpiderFileAnalyzer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEvC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,MAAM,OAAO,kBAAkB;IAC9B,QAAQ,CAAS;IAEjB,YAAY,QAAgB;QAC3B,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC1B,CAAC;IAED,UAAU;QACT,MAAM,IAAI,GAAG,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAEjD,MAAM,KAAK,GAAG,gBAAgB,CAAC;QAC/B,MAAM,OAAO,GAAG,EAAE,CAAC;QAEnB,IAAI,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC7B,OAAO,KAAK,EAAE,CAAC;YACd,OAAO,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;YAC5E,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1B,CAAC;QAED,OAAO,OAAO,CAAC;IAChB,CAAC;CACD"}
|
|
@@ -1,113 +0,0 @@
|
|
|
1
|
-
import { appendFileSync, copyFileSync, createWriteStream, existsSync, mkdirSync, readFileSync, rmSync, writeFileSync, } from 'node:fs';
|
|
2
|
-
import { basename, join, relative, sep } from 'node:path';
|
|
3
|
-
import { fileURLToPath } from 'node:url';
|
|
4
|
-
import rootWalk from '@root/walk';
|
|
5
|
-
import ConfigParser from 'configparser';
|
|
6
|
-
import Handlebars from 'handlebars';
|
|
7
|
-
import inquirer from 'inquirer';
|
|
8
|
-
import { fetchManifest, wrapperManifestUrl } from '@apify/actor-templates';
|
|
9
|
-
import { info, success } from '../../outputs.js';
|
|
10
|
-
import { downloadAndUnzip, sanitizeActorName } from '../../utils.js';
|
|
11
|
-
import { ScrapyProjectAnalyzer } from './ScrapyProjectAnalyzer.js';
|
|
12
|
-
/**
|
|
13
|
-
* Files that should be concatenated instead of copied (and overwritten).
|
|
14
|
-
*/
|
|
15
|
-
const concatenableFiles = ['.dockerignore', '.gitignore'];
|
|
16
|
-
const templatePath = fileURLToPath(new URL('./templates/python-scrapy', import.meta.url));
|
|
17
|
-
async function merge(fromPath, toPath, options = { bindings: {} }) {
|
|
18
|
-
await rootWalk.walk(fromPath, async (_err, pathname, dirent) => {
|
|
19
|
-
if (pathname === fromPath)
|
|
20
|
-
return;
|
|
21
|
-
const relPath = relative(fromPath, pathname);
|
|
22
|
-
const toRelPath = relPath
|
|
23
|
-
.split(sep)
|
|
24
|
-
.map((part) => {
|
|
25
|
-
if (part.startsWith('{') && part.endsWith('}')) {
|
|
26
|
-
part = part.replace('{', '').replace('}', '');
|
|
27
|
-
const binding = options.bindings[part];
|
|
28
|
-
if (!binding) {
|
|
29
|
-
throw new Error(`Binding for ${part} not found.`);
|
|
30
|
-
}
|
|
31
|
-
return binding;
|
|
32
|
-
}
|
|
33
|
-
return part;
|
|
34
|
-
})
|
|
35
|
-
.join(sep);
|
|
36
|
-
const targetPath = join(toPath, toRelPath);
|
|
37
|
-
if (dirent.isDirectory()) {
|
|
38
|
-
if (!existsSync(targetPath)) {
|
|
39
|
-
mkdirSync(targetPath);
|
|
40
|
-
}
|
|
41
|
-
return merge(pathname, targetPath);
|
|
42
|
-
}
|
|
43
|
-
if (relPath.includes('.template')) {
|
|
44
|
-
writeFileSync(join(toPath, toRelPath.replace('.template', '')), Handlebars.compile(readFileSync(pathname, 'utf8'))(options.bindings));
|
|
45
|
-
}
|
|
46
|
-
else if (existsSync(targetPath) && concatenableFiles.includes(basename(toRelPath))) {
|
|
47
|
-
appendFileSync(targetPath, readFileSync(pathname));
|
|
48
|
-
}
|
|
49
|
-
else {
|
|
50
|
-
copyFileSync(pathname, targetPath);
|
|
51
|
-
}
|
|
52
|
-
});
|
|
53
|
-
}
|
|
54
|
-
export async function wrapScrapyProject({ projectPath }) {
|
|
55
|
-
if (!projectPath) {
|
|
56
|
-
projectPath = '.';
|
|
57
|
-
}
|
|
58
|
-
const analyzer = new ScrapyProjectAnalyzer(projectPath);
|
|
59
|
-
if (analyzer.configuration.hasSection('apify')) {
|
|
60
|
-
throw new Error(`The Scrapy project configuration already contains Apify settings. Are you sure you didn't already wrap this project?`);
|
|
61
|
-
}
|
|
62
|
-
await analyzer.init();
|
|
63
|
-
const { spiderIndex } = await inquirer.prompt([
|
|
64
|
-
{
|
|
65
|
-
type: 'list',
|
|
66
|
-
name: 'spiderIndex',
|
|
67
|
-
message: 'Pick the Scrapy spider you want to wrap:',
|
|
68
|
-
choices: analyzer.getAvailableSpiders().map((spider, i) => ({
|
|
69
|
-
name: `${spider.class_name} (${spider.pathname})`,
|
|
70
|
-
value: i,
|
|
71
|
-
})),
|
|
72
|
-
},
|
|
73
|
-
]);
|
|
74
|
-
function translatePathToRelativeModuleName(pathname) {
|
|
75
|
-
const relPath = relative(projectPath, pathname);
|
|
76
|
-
return `.${relPath.split(sep).slice(1).join('.').replace('.py', '')}`;
|
|
77
|
-
}
|
|
78
|
-
const templateBindings = {
|
|
79
|
-
botName: sanitizeActorName(analyzer.settings.BOT_NAME),
|
|
80
|
-
scrapy_settings_module: analyzer.configuration.get('settings', 'default'),
|
|
81
|
-
apify_module_path: `${analyzer.settings.BOT_NAME}.apify`,
|
|
82
|
-
spider_class_name: analyzer.getAvailableSpiders()[spiderIndex].class_name,
|
|
83
|
-
spider_module_name: `${translatePathToRelativeModuleName(analyzer.getAvailableSpiders()[spiderIndex].pathname)}`,
|
|
84
|
-
projectFolder: analyzer.settings.BOT_NAME,
|
|
85
|
-
};
|
|
86
|
-
const manifest = await fetchManifest(wrapperManifestUrl);
|
|
87
|
-
info({ message: 'Downloading the latest Scrapy wrapper template...' });
|
|
88
|
-
const { archiveUrl } = manifest.templates.find(({ id }) => id === 'python-scrapy');
|
|
89
|
-
if (existsSync(templatePath))
|
|
90
|
-
rmSync(templatePath, { recursive: true });
|
|
91
|
-
await downloadAndUnzip({
|
|
92
|
-
url: archiveUrl,
|
|
93
|
-
pathTo: templatePath,
|
|
94
|
-
});
|
|
95
|
-
info({ message: 'Wrapping the Scrapy project...' });
|
|
96
|
-
await merge(templatePath, projectPath, {
|
|
97
|
-
bindings: templateBindings,
|
|
98
|
-
});
|
|
99
|
-
const apifyConf = new ConfigParser();
|
|
100
|
-
apifyConf.addSection('apify');
|
|
101
|
-
apifyConf.set('apify', 'mainpy_location', analyzer.settings.BOT_NAME);
|
|
102
|
-
const s = createWriteStream(join(projectPath, 'scrapy.cfg'), { flags: 'a' });
|
|
103
|
-
await new Promise((r) => {
|
|
104
|
-
s.on('open', (fd) => {
|
|
105
|
-
s.write('\n', () => {
|
|
106
|
-
apifyConf.write(fd);
|
|
107
|
-
r();
|
|
108
|
-
});
|
|
109
|
-
});
|
|
110
|
-
});
|
|
111
|
-
success({ message: 'The Scrapy project has been wrapped successfully.' });
|
|
112
|
-
}
|
|
113
|
-
//# sourceMappingURL=wrapScrapyProject.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"wrapScrapyProject.js","sourceRoot":"","sources":["../../../../src/lib/projects/scrapy/wrapScrapyProject.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
export const CRAWLEE_PACKAGES = [
|
|
2
|
-
'crawlee',
|
|
3
|
-
'@crawlee/core',
|
|
4
|
-
'@crawlee/puppeteer',
|
|
5
|
-
'@crawlee/playwright',
|
|
6
|
-
'@crawlee/cheerio',
|
|
7
|
-
'@crawlee/jsdom',
|
|
8
|
-
'@crawlee/linkedom',
|
|
9
|
-
'@crawlee/http',
|
|
10
|
-
'@crawlee/browser',
|
|
11
|
-
'@crawlee/basic',
|
|
12
|
-
];
|
|
13
|
-
//# sourceMappingURL=shared.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"shared.js","sourceRoot":"","sources":["../../../src/lib/projects/shared.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC/B,SAAS;IACT,eAAe;IACf,oBAAoB;IACpB,qBAAqB;IACrB,kBAAkB;IAClB,gBAAgB;IAChB,mBAAmB;IACnB,eAAe;IACf,kBAAkB;IAClB,gBAAgB;CAChB,CAAC"}
|