apify-cli 0.21.10-beta.5 → 0.21.10-beta.6
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/.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-SA3HH2MX.js +236 -0
- package/dist/chunk-SA3HH2MX.js.map +1 -0
- package/dist/index.js +2 -3
- package/package.json +6 -6
- package/dist/commands/_register.js +0 -72
- 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/cli-management/install.js +0 -138
- package/dist/commands/cli-management/install.js.map +0 -1
- package/dist/commands/cli-management/upgrade.js +0 -270
- package/dist/commands/cli-management/upgrade.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/validate-schema.js +0 -44
- package/dist/commands/validate-schema.js.map +0 -1
- package/dist/entrypoints/_shared.js +0 -258
- 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 -429
- 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 -233
- 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 -58
- 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 -83
- package/dist/lib/hooks/useCLIMetadata.js.map +0 -1
- package/dist/lib/hooks/useCLIVersionAssets.js +0 -92
- package/dist/lib/hooks/useCLIVersionAssets.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
package/dist/lib/utils.js
DELETED
|
@@ -1,457 +0,0 @@
|
|
|
1
|
-
import { createWriteStream, existsSync, mkdirSync, readdirSync, readFileSync, writeFileSync } from 'node:fs';
|
|
2
|
-
import { mkdir, readFile } from 'node:fs/promises';
|
|
3
|
-
import { get } from 'node:https';
|
|
4
|
-
import { dirname, join } from 'node:path';
|
|
5
|
-
import process from 'node:process';
|
|
6
|
-
import { finished } from 'node:stream/promises';
|
|
7
|
-
import { DurationFormatter as SapphireDurationFormatter, TimeTypes } from '@sapphire/duration';
|
|
8
|
-
import { Timestamp } from '@sapphire/timestamp';
|
|
9
|
-
import AdmZip from 'adm-zip';
|
|
10
|
-
import _Ajv2019 from 'ajv/dist/2019.js';
|
|
11
|
-
import { ApifyClient } from 'apify-client';
|
|
12
|
-
import archiver from 'archiver';
|
|
13
|
-
import { AxiosHeaders } from 'axios';
|
|
14
|
-
import escapeStringRegexp from 'escape-string-regexp';
|
|
15
|
-
import { globby } from 'globby';
|
|
16
|
-
import { getEncoding } from 'istextorbinary';
|
|
17
|
-
import { Mime } from 'mime';
|
|
18
|
-
import otherMimes from 'mime/types/other.js';
|
|
19
|
-
import standardMimes from 'mime/types/standard.js';
|
|
20
|
-
import { gte, minVersion, satisfies } from 'semver';
|
|
21
|
-
import { ACTOR_ENV_VARS, ACTOR_JOB_TERMINAL_STATUSES, ACTOR_NAME, APIFY_ENV_VARS, KEY_VALUE_STORE_KEYS, LOCAL_ACTOR_ENV_VARS, LOCAL_STORAGE_SUBDIRS, SOURCE_FILE_FORMATS, } from '@apify/consts';
|
|
22
|
-
import { APIFY_CLIENT_DEFAULT_HEADERS, AUTH_FILE_PATH, DEFAULT_LOCAL_STORAGE_DIR, GLOBAL_CONFIGS_FOLDER, INPUT_FILE_REG_EXP, LOCAL_CONFIG_PATH, MINIMUM_SUPPORTED_PYTHON_VERSION, SUPPORTED_NODEJS_VERSION, } from './consts.js';
|
|
23
|
-
import { deleteFile, ensureFolderExistsSync, rimrafPromised } from './files.js';
|
|
24
|
-
// Export AJV properly: https://github.com/ajv-validator/ajv/issues/2132
|
|
25
|
-
// Welcome to the state of JavaScript/TypeScript and CJS/ESM interop.
|
|
26
|
-
export const Ajv2019 = _Ajv2019;
|
|
27
|
-
export const httpsGet = async (url) => {
|
|
28
|
-
return new Promise((resolve, reject) => {
|
|
29
|
-
get(url, (response) => {
|
|
30
|
-
// Handle redirects
|
|
31
|
-
if (response.statusCode === 301 || response.statusCode === 302) {
|
|
32
|
-
resolve(httpsGet(response.headers.location));
|
|
33
|
-
// Destroy the response to close the HTTP connection, otherwise this hangs for a long time with Node 19+ (due to HTTP keep-alive).
|
|
34
|
-
response.destroy();
|
|
35
|
-
}
|
|
36
|
-
else {
|
|
37
|
-
resolve(response);
|
|
38
|
-
}
|
|
39
|
-
}).on('error', reject);
|
|
40
|
-
});
|
|
41
|
-
};
|
|
42
|
-
export const getLocalStorageDir = () => {
|
|
43
|
-
const envVar = APIFY_ENV_VARS.LOCAL_STORAGE_DIR;
|
|
44
|
-
return process.env[envVar] || process.env.CRAWLEE_STORAGE_DIR || DEFAULT_LOCAL_STORAGE_DIR;
|
|
45
|
-
};
|
|
46
|
-
export const getLocalKeyValueStorePath = (storeId) => {
|
|
47
|
-
const envVar = ACTOR_ENV_VARS.DEFAULT_KEY_VALUE_STORE_ID;
|
|
48
|
-
const storeDir = storeId || process.env[envVar] || LOCAL_ACTOR_ENV_VARS[envVar];
|
|
49
|
-
return join(getLocalStorageDir(), LOCAL_STORAGE_SUBDIRS.keyValueStores, storeDir);
|
|
50
|
-
};
|
|
51
|
-
export const getLocalDatasetPath = (storeId) => {
|
|
52
|
-
const envVar = ACTOR_ENV_VARS.DEFAULT_DATASET_ID;
|
|
53
|
-
const storeDir = storeId || process.env[envVar] || LOCAL_ACTOR_ENV_VARS[envVar];
|
|
54
|
-
return join(getLocalStorageDir(), LOCAL_STORAGE_SUBDIRS.datasets, storeDir);
|
|
55
|
-
};
|
|
56
|
-
export const getLocalRequestQueuePath = (storeId) => {
|
|
57
|
-
const envVar = ACTOR_ENV_VARS.DEFAULT_REQUEST_QUEUE_ID;
|
|
58
|
-
const storeDir = storeId || process.env[envVar] || LOCAL_ACTOR_ENV_VARS[envVar];
|
|
59
|
-
return join(getLocalStorageDir(), LOCAL_STORAGE_SUBDIRS.requestQueues, storeDir);
|
|
60
|
-
};
|
|
61
|
-
/**
|
|
62
|
-
* Returns object from auth file or empty object.
|
|
63
|
-
*/
|
|
64
|
-
export const getLocalUserInfo = async () => {
|
|
65
|
-
let result = {};
|
|
66
|
-
try {
|
|
67
|
-
const raw = await readFile(AUTH_FILE_PATH(), 'utf-8');
|
|
68
|
-
result = JSON.parse(raw);
|
|
69
|
-
}
|
|
70
|
-
catch {
|
|
71
|
-
return {};
|
|
72
|
-
}
|
|
73
|
-
if (!result.username && !result.id) {
|
|
74
|
-
throw new Error('Corrupted local user info was found. Please run "apify login" to fix it.');
|
|
75
|
-
}
|
|
76
|
-
return result;
|
|
77
|
-
};
|
|
78
|
-
/**
|
|
79
|
-
* Gets instance of ApifyClient for user otherwise throws error
|
|
80
|
-
*/
|
|
81
|
-
export async function getLoggedClientOrThrow() {
|
|
82
|
-
const loggedClient = await getLoggedClient();
|
|
83
|
-
if (!loggedClient) {
|
|
84
|
-
throw new Error('You are not logged in with your Apify account. Call "apify login" to fix that.');
|
|
85
|
-
}
|
|
86
|
-
return loggedClient;
|
|
87
|
-
}
|
|
88
|
-
const getTokenWithAuthFileFallback = (existingToken) => {
|
|
89
|
-
if (!existingToken && existsSync(GLOBAL_CONFIGS_FOLDER()) && existsSync(AUTH_FILE_PATH())) {
|
|
90
|
-
const raw = readFileSync(AUTH_FILE_PATH(), 'utf-8');
|
|
91
|
-
return JSON.parse(raw).token;
|
|
92
|
-
}
|
|
93
|
-
return existingToken;
|
|
94
|
-
};
|
|
95
|
-
/**
|
|
96
|
-
* Returns options for ApifyClient
|
|
97
|
-
*/
|
|
98
|
-
export const getApifyClientOptions = (token, apiBaseUrl) => {
|
|
99
|
-
token = getTokenWithAuthFileFallback(token);
|
|
100
|
-
return {
|
|
101
|
-
token,
|
|
102
|
-
baseUrl: apiBaseUrl || process.env.APIFY_CLIENT_BASE_URL,
|
|
103
|
-
requestInterceptors: [
|
|
104
|
-
(config) => {
|
|
105
|
-
config.headers ??= new AxiosHeaders();
|
|
106
|
-
for (const [key, value] of Object.entries(APIFY_CLIENT_DEFAULT_HEADERS)) {
|
|
107
|
-
config.headers[key] = value;
|
|
108
|
-
}
|
|
109
|
-
return config;
|
|
110
|
-
},
|
|
111
|
-
],
|
|
112
|
-
};
|
|
113
|
-
};
|
|
114
|
-
/**
|
|
115
|
-
* Gets instance of ApifyClient for token or for params from global auth file.
|
|
116
|
-
* NOTE: It refreshes global auth file each run
|
|
117
|
-
* @param [token]
|
|
118
|
-
*/
|
|
119
|
-
export async function getLoggedClient(token, apiBaseUrl) {
|
|
120
|
-
token = getTokenWithAuthFileFallback(token);
|
|
121
|
-
const apifyClient = new ApifyClient(getApifyClientOptions(token, apiBaseUrl));
|
|
122
|
-
let userInfo;
|
|
123
|
-
try {
|
|
124
|
-
userInfo = await apifyClient.user('me').get();
|
|
125
|
-
}
|
|
126
|
-
catch {
|
|
127
|
-
return null;
|
|
128
|
-
}
|
|
129
|
-
// Always refresh Auth file
|
|
130
|
-
ensureApifyDirectory(AUTH_FILE_PATH());
|
|
131
|
-
writeFileSync(AUTH_FILE_PATH(), JSON.stringify({ token: apifyClient.token, ...userInfo }, null, '\t'));
|
|
132
|
-
return apifyClient;
|
|
133
|
-
}
|
|
134
|
-
export const getLocalConfigPath = (cwd) => join(cwd, LOCAL_CONFIG_PATH);
|
|
135
|
-
export const getJsonFileContent = (filePath) => {
|
|
136
|
-
if (!existsSync(filePath)) {
|
|
137
|
-
return;
|
|
138
|
-
}
|
|
139
|
-
return JSON.parse(readFileSync(filePath, { encoding: 'utf-8' }));
|
|
140
|
-
};
|
|
141
|
-
export const getLocalConfig = (cwd) => getJsonFileContent(getLocalConfigPath(cwd));
|
|
142
|
-
export const setLocalConfig = async (localConfig, actDir) => {
|
|
143
|
-
const fullPath = join(actDir || process.cwd(), LOCAL_CONFIG_PATH);
|
|
144
|
-
await mkdir(dirname(fullPath), { recursive: true });
|
|
145
|
-
writeFileSync(fullPath, JSON.stringify(localConfig, null, '\t'));
|
|
146
|
-
};
|
|
147
|
-
const GITIGNORE_REQUIRED_CONTENTS = [getLocalStorageDir(), 'node_modules', '.venv'];
|
|
148
|
-
export const setLocalEnv = async (actDir) => {
|
|
149
|
-
// Create folders for emulation Apify stores
|
|
150
|
-
const keyValueStorePath = getLocalKeyValueStorePath();
|
|
151
|
-
ensureFolderExistsSync(actDir, getLocalDatasetPath());
|
|
152
|
-
ensureFolderExistsSync(actDir, getLocalRequestQueuePath());
|
|
153
|
-
ensureFolderExistsSync(actDir, keyValueStorePath);
|
|
154
|
-
// Create or update gitignore
|
|
155
|
-
const gitignorePath = join(actDir, '.gitignore');
|
|
156
|
-
let gitignoreContents = '';
|
|
157
|
-
if (existsSync(gitignorePath)) {
|
|
158
|
-
gitignoreContents = readFileSync(gitignorePath, { encoding: 'utf-8' });
|
|
159
|
-
}
|
|
160
|
-
const gitignoreAdditions = [];
|
|
161
|
-
for (const gitignoreRequirement of GITIGNORE_REQUIRED_CONTENTS) {
|
|
162
|
-
if (!RegExp(`^${escapeStringRegexp(gitignoreRequirement)}$`, 'mg').test(gitignoreContents)) {
|
|
163
|
-
gitignoreAdditions.push(gitignoreRequirement);
|
|
164
|
-
}
|
|
165
|
-
}
|
|
166
|
-
if (gitignoreAdditions.length > 0) {
|
|
167
|
-
if (gitignoreContents.length > 0) {
|
|
168
|
-
gitignoreAdditions.unshift('# Added by Apify CLI');
|
|
169
|
-
writeFileSync(gitignorePath, `\n${gitignoreAdditions.join('\n')}\n`, { flag: 'a' });
|
|
170
|
-
}
|
|
171
|
-
else {
|
|
172
|
-
writeFileSync(gitignorePath, `${gitignoreAdditions.join('\n')}\n`, { flag: 'w' });
|
|
173
|
-
}
|
|
174
|
-
}
|
|
175
|
-
};
|
|
176
|
-
const mime = new Mime(standardMimes, otherMimes).define({
|
|
177
|
-
// .tgz files don't have a MIME type defined, this fixes it
|
|
178
|
-
'application/gzip': ['tgz'],
|
|
179
|
-
// Default mime-type for .ts(x) files is video/mp2t. But in our usecases they're almost always TypeScript, which we want to treat as text
|
|
180
|
-
'text/typescript': ['ts', 'tsx', 'mts'],
|
|
181
|
-
}, true);
|
|
182
|
-
// Detect whether file is binary from its MIME type, or if not available, contents
|
|
183
|
-
const getSourceFileFormat = (filePath, fileContent) => {
|
|
184
|
-
// Try to detect the MIME type from the file path
|
|
185
|
-
const contentType = mime.getType(filePath);
|
|
186
|
-
if (contentType) {
|
|
187
|
-
const format = contentType.startsWith('text/') ||
|
|
188
|
-
contentType.includes('javascript') ||
|
|
189
|
-
contentType.includes('json') ||
|
|
190
|
-
contentType.includes('xml') ||
|
|
191
|
-
contentType.includes('application/node') || // .cjs files
|
|
192
|
-
contentType.includes('application/toml') || // for example pyproject.toml files
|
|
193
|
-
contentType.includes('application/x-sh') || // .sh files
|
|
194
|
-
contentType.includes('application/x-httpd-php') // .php files
|
|
195
|
-
? SOURCE_FILE_FORMATS.TEXT
|
|
196
|
-
: SOURCE_FILE_FORMATS.BASE64;
|
|
197
|
-
return format;
|
|
198
|
-
}
|
|
199
|
-
// If the MIME type detection failed, try to detect the file encoding from the file content
|
|
200
|
-
const encoding = getEncoding(fileContent);
|
|
201
|
-
return encoding === 'binary' ? SOURCE_FILE_FORMATS.BASE64 : SOURCE_FILE_FORMATS.TEXT;
|
|
202
|
-
};
|
|
203
|
-
export const createSourceFiles = async (paths, cwd) => {
|
|
204
|
-
return paths.map((filePath) => {
|
|
205
|
-
const file = readFileSync(join(cwd, filePath));
|
|
206
|
-
const format = getSourceFileFormat(filePath, file);
|
|
207
|
-
return {
|
|
208
|
-
name: filePath,
|
|
209
|
-
format,
|
|
210
|
-
content: format === SOURCE_FILE_FORMATS.TEXT ? file.toString('utf8') : file.toString('base64'),
|
|
211
|
-
};
|
|
212
|
-
});
|
|
213
|
-
};
|
|
214
|
-
/**
|
|
215
|
-
* Get Actor local files, omit files defined in .gitignore and .git folder
|
|
216
|
-
* All dot files(.file) and folders(.folder/) are included.
|
|
217
|
-
*/
|
|
218
|
-
export const getActorLocalFilePaths = async (cwd) => globby(['*', '**/**'], {
|
|
219
|
-
ignore: ['.git/**', 'apify_storage', 'node_modules', 'storage', 'crawlee_storage'],
|
|
220
|
-
gitignore: true,
|
|
221
|
-
dot: true,
|
|
222
|
-
cwd,
|
|
223
|
-
});
|
|
224
|
-
/**
|
|
225
|
-
* Create zip file with all Actor files specified with pathsToZip
|
|
226
|
-
*/
|
|
227
|
-
export const createActZip = async (zipName, pathsToZip, cwd) => {
|
|
228
|
-
// NOTE: There can be a zip from a previous unfinished operation.
|
|
229
|
-
if (existsSync(zipName)) {
|
|
230
|
-
await deleteFile(zipName);
|
|
231
|
-
}
|
|
232
|
-
const writeStream = createWriteStream(zipName);
|
|
233
|
-
const archive = archiver('zip');
|
|
234
|
-
archive.pipe(writeStream);
|
|
235
|
-
pathsToZip.forEach((globPath) => archive.glob(globPath, { cwd }));
|
|
236
|
-
await archive.finalize();
|
|
237
|
-
};
|
|
238
|
-
/**
|
|
239
|
-
* Get Actor input from local store
|
|
240
|
-
*/
|
|
241
|
-
export const getLocalInput = (cwd) => {
|
|
242
|
-
const defaultLocalStorePath = getLocalKeyValueStorePath();
|
|
243
|
-
const folderExists = existsSync(join(cwd, defaultLocalStorePath));
|
|
244
|
-
if (!folderExists)
|
|
245
|
-
return;
|
|
246
|
-
const files = readdirSync(join(cwd, defaultLocalStorePath));
|
|
247
|
-
const inputName = files.find((file) => !!file.match(INPUT_FILE_REG_EXP));
|
|
248
|
-
// No input file
|
|
249
|
-
if (!inputName)
|
|
250
|
-
return;
|
|
251
|
-
const input = readFileSync(join(cwd, defaultLocalStorePath, inputName));
|
|
252
|
-
const contentType = mime.getType(inputName);
|
|
253
|
-
return { body: input, contentType, fileName: inputName };
|
|
254
|
-
};
|
|
255
|
-
export const purgeDefaultQueue = async () => {
|
|
256
|
-
const defaultQueuesPath = getLocalRequestQueuePath();
|
|
257
|
-
if (existsSync(getLocalStorageDir()) && existsSync(defaultQueuesPath)) {
|
|
258
|
-
await rimrafPromised(defaultQueuesPath);
|
|
259
|
-
}
|
|
260
|
-
};
|
|
261
|
-
export const purgeDefaultDataset = async () => {
|
|
262
|
-
const defaultDatasetPath = getLocalDatasetPath();
|
|
263
|
-
if (existsSync(getLocalStorageDir()) && existsSync(defaultDatasetPath)) {
|
|
264
|
-
await rimrafPromised(defaultDatasetPath);
|
|
265
|
-
}
|
|
266
|
-
};
|
|
267
|
-
export const purgeDefaultKeyValueStore = async () => {
|
|
268
|
-
const defaultKeyValueStorePath = getLocalKeyValueStorePath();
|
|
269
|
-
if (!existsSync(getLocalStorageDir()) || !existsSync(defaultKeyValueStorePath)) {
|
|
270
|
-
return;
|
|
271
|
-
}
|
|
272
|
-
const filesToDelete = readdirSync(defaultKeyValueStorePath);
|
|
273
|
-
const deletePromises = [];
|
|
274
|
-
filesToDelete.forEach((file) => {
|
|
275
|
-
if (!file.match(INPUT_FILE_REG_EXP)) {
|
|
276
|
-
deletePromises.push(deleteFile(join(defaultKeyValueStorePath, file)));
|
|
277
|
-
}
|
|
278
|
-
});
|
|
279
|
-
await Promise.all(deletePromises);
|
|
280
|
-
};
|
|
281
|
-
export const outputJobLog = async ({ job, timeoutMillis, apifyClient, }) => {
|
|
282
|
-
const { id: logId, status } = job;
|
|
283
|
-
const client = apifyClient || new ApifyClient({ baseUrl: process.env.APIFY_CLIENT_BASE_URL });
|
|
284
|
-
// In case job was already done just output log
|
|
285
|
-
if (ACTOR_JOB_TERMINAL_STATUSES.includes(status)) {
|
|
286
|
-
if (process.env.APIFY_NO_LOGS_IN_TESTS) {
|
|
287
|
-
return;
|
|
288
|
-
}
|
|
289
|
-
const log = await client.log(logId).get();
|
|
290
|
-
process.stderr.write(log);
|
|
291
|
-
return;
|
|
292
|
-
}
|
|
293
|
-
// In other case stream it to stderr
|
|
294
|
-
// eslint-disable-next-line no-async-promise-executor
|
|
295
|
-
return new Promise(async (resolve) => {
|
|
296
|
-
const stream = await client.log(logId).stream();
|
|
297
|
-
if (!stream) {
|
|
298
|
-
resolve('no-logs');
|
|
299
|
-
return;
|
|
300
|
-
}
|
|
301
|
-
let nodeTimeout = null;
|
|
302
|
-
stream.on('data', (chunk) => {
|
|
303
|
-
// In tests, writing to process.stderr directly messes with vitest's output
|
|
304
|
-
// With that said, we still NEED to wait for this stream to end, as otherwise tests become flaky.
|
|
305
|
-
if (process.env.APIFY_NO_LOGS_IN_TESTS) {
|
|
306
|
-
return;
|
|
307
|
-
}
|
|
308
|
-
process.stderr.write(chunk.toString());
|
|
309
|
-
});
|
|
310
|
-
stream.once('end', () => {
|
|
311
|
-
resolve('finished');
|
|
312
|
-
if (nodeTimeout) {
|
|
313
|
-
clearTimeout(nodeTimeout);
|
|
314
|
-
}
|
|
315
|
-
});
|
|
316
|
-
if (timeoutMillis) {
|
|
317
|
-
nodeTimeout = setTimeout(() => {
|
|
318
|
-
stream.destroy();
|
|
319
|
-
resolve('timeouts');
|
|
320
|
-
}, timeoutMillis);
|
|
321
|
-
}
|
|
322
|
-
});
|
|
323
|
-
};
|
|
324
|
-
/**
|
|
325
|
-
* Returns npm command for current os
|
|
326
|
-
* NOTE: For window we have to returns npm.cmd instead of npm, otherwise it doesn't work
|
|
327
|
-
*/
|
|
328
|
-
export const getNpmCmd = () => {
|
|
329
|
-
return /^win/.test(process.platform) ? 'npm.cmd' : 'npm';
|
|
330
|
-
};
|
|
331
|
-
/**
|
|
332
|
-
* Returns true if apify storage is empty (expect INPUT.*)
|
|
333
|
-
*/
|
|
334
|
-
export const checkIfStorageIsEmpty = async () => {
|
|
335
|
-
const filesWithoutInput = await globby([
|
|
336
|
-
`${getLocalStorageDir()}/**`,
|
|
337
|
-
// Omit INPUT.* file
|
|
338
|
-
`!${getLocalKeyValueStorePath()}/${KEY_VALUE_STORE_KEYS.INPUT}.*`,
|
|
339
|
-
// Omit INPUT_CLI-* files
|
|
340
|
-
`!${getLocalKeyValueStorePath()}/${KEY_VALUE_STORE_KEYS.INPUT}_CLI-*`,
|
|
341
|
-
]);
|
|
342
|
-
return filesWithoutInput.length === 0;
|
|
343
|
-
};
|
|
344
|
-
/**
|
|
345
|
-
* Validates Actor name, if finds issue throws error.
|
|
346
|
-
* @param actorName
|
|
347
|
-
*/
|
|
348
|
-
export const validateActorName = (actorName) => {
|
|
349
|
-
if (!ACTOR_NAME.REGEX.test(actorName)) {
|
|
350
|
-
throw new Error('The Actor name must be a DNS hostname-friendly string (e.g. my-newest-actor).');
|
|
351
|
-
}
|
|
352
|
-
if (actorName.length < ACTOR_NAME.MIN_LENGTH) {
|
|
353
|
-
throw new Error('The Actor name must be at least 3 characters long.');
|
|
354
|
-
}
|
|
355
|
-
if (actorName.length > ACTOR_NAME.MAX_LENGTH) {
|
|
356
|
-
throw new Error('The Actor name must be a maximum of 30 characters long.');
|
|
357
|
-
}
|
|
358
|
-
};
|
|
359
|
-
export const sanitizeActorName = (actorName) => {
|
|
360
|
-
let sanitizedName = actorName.replaceAll(/[^a-zA-Z0-9-]/g, '-');
|
|
361
|
-
if (sanitizedName.length < ACTOR_NAME.MIN_LENGTH) {
|
|
362
|
-
sanitizedName = `${sanitizedName}-apify-actor`;
|
|
363
|
-
}
|
|
364
|
-
sanitizedName = sanitizedName.replaceAll(/^-+/g, '').replaceAll(/-+$/g, '');
|
|
365
|
-
return sanitizedName.slice(0, ACTOR_NAME.MAX_LENGTH);
|
|
366
|
-
};
|
|
367
|
-
export const isPythonVersionSupported = (installedPythonVersion) => {
|
|
368
|
-
return satisfies(installedPythonVersion, `^${MINIMUM_SUPPORTED_PYTHON_VERSION}`);
|
|
369
|
-
};
|
|
370
|
-
export const isNodeVersionSupported = (installedNodeVersion) => {
|
|
371
|
-
// SUPPORTED_NODEJS_VERSION can be a version range,
|
|
372
|
-
// we need to get the minimum supported version from that range to be able to compare them
|
|
373
|
-
const minimumSupportedNodeVersion = minVersion(SUPPORTED_NODEJS_VERSION);
|
|
374
|
-
return gte(installedNodeVersion, minimumSupportedNodeVersion);
|
|
375
|
-
};
|
|
376
|
-
export const downloadAndUnzip = async ({ url, pathTo }) => {
|
|
377
|
-
const zipStream = await httpsGet(url);
|
|
378
|
-
const chunks = [];
|
|
379
|
-
zipStream.on('data', (chunk) => chunks.push(chunk));
|
|
380
|
-
await finished(zipStream);
|
|
381
|
-
const zip = new AdmZip(Buffer.concat(chunks));
|
|
382
|
-
zip.extractAllTo(pathTo, true);
|
|
383
|
-
};
|
|
384
|
-
/**
|
|
385
|
-
* Ensures the Apify directory exists, as well as nested folders (for tests)
|
|
386
|
-
*/
|
|
387
|
-
export function ensureApifyDirectory(file) {
|
|
388
|
-
const path = dirname(file);
|
|
389
|
-
mkdirSync(path, { recursive: true });
|
|
390
|
-
}
|
|
391
|
-
export const TimestampFormatter = new Timestamp('YYYY-MM-DD [at] HH:mm:ss');
|
|
392
|
-
export const MultilineTimestampFormatter = new Timestamp(`YYYY-MM-DD[\n]HH:mm:ss`);
|
|
393
|
-
export const DateOnlyTimestampFormatter = new Timestamp('YYYY-MM-DD');
|
|
394
|
-
export const DurationFormatter = new SapphireDurationFormatter();
|
|
395
|
-
export const ShortDurationFormatter = new SapphireDurationFormatter({
|
|
396
|
-
[TimeTypes.Day]: {
|
|
397
|
-
DEFAULT: 'd',
|
|
398
|
-
},
|
|
399
|
-
[TimeTypes.Hour]: {
|
|
400
|
-
DEFAULT: 'h',
|
|
401
|
-
},
|
|
402
|
-
[TimeTypes.Minute]: {
|
|
403
|
-
DEFAULT: 'm',
|
|
404
|
-
},
|
|
405
|
-
[TimeTypes.Month]: {
|
|
406
|
-
DEFAULT: 'M',
|
|
407
|
-
},
|
|
408
|
-
[TimeTypes.Second]: {
|
|
409
|
-
DEFAULT: 's',
|
|
410
|
-
},
|
|
411
|
-
[TimeTypes.Week]: {
|
|
412
|
-
DEFAULT: 'w',
|
|
413
|
-
},
|
|
414
|
-
[TimeTypes.Year]: {
|
|
415
|
-
DEFAULT: 'y',
|
|
416
|
-
},
|
|
417
|
-
});
|
|
418
|
-
/**
|
|
419
|
-
* A "polyfill" for Object.groupBy
|
|
420
|
-
*/
|
|
421
|
-
export function objectGroupBy(items, keySelector) {
|
|
422
|
-
if ('groupBy' in Object) {
|
|
423
|
-
return Object.groupBy(items, keySelector);
|
|
424
|
-
}
|
|
425
|
-
const result = {};
|
|
426
|
-
let i = 0;
|
|
427
|
-
for (const item of items) {
|
|
428
|
-
const key = keySelector(item, i++);
|
|
429
|
-
if (!result[key]) {
|
|
430
|
-
result[key] = [];
|
|
431
|
-
}
|
|
432
|
-
result[key].push(item);
|
|
433
|
-
}
|
|
434
|
-
return result;
|
|
435
|
-
}
|
|
436
|
-
/**
|
|
437
|
-
* A "polyfill" for Map.groupBy
|
|
438
|
-
*/
|
|
439
|
-
export function mapGroupBy(items, keySelector) {
|
|
440
|
-
const map = new Map();
|
|
441
|
-
let index = 0;
|
|
442
|
-
for (const value of items) {
|
|
443
|
-
const key = keySelector(value, index++);
|
|
444
|
-
const list = map.get(key);
|
|
445
|
-
if (list) {
|
|
446
|
-
list.push(value);
|
|
447
|
-
}
|
|
448
|
-
else {
|
|
449
|
-
map.set(key, [value]);
|
|
450
|
-
}
|
|
451
|
-
}
|
|
452
|
-
return map;
|
|
453
|
-
}
|
|
454
|
-
export function printJsonToStdout(object) {
|
|
455
|
-
console.log(JSON.stringify(object, null, 2));
|
|
456
|
-
}
|
|
457
|
-
//# sourceMappingURL=utils.js.map
|
package/dist/lib/utils.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/lib/utils.ts"],"names":[],"mappings":"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"}
|