apify-cli 1.0.0-beta.4 → 1.0.0-beta.41
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 +200 -0
- package/README.md +66 -56
- package/bin/dev.js +7 -2
- package/bin/dev.sh +4 -0
- package/bin/run.js +7 -0
- package/dist/.tsbuildinfo +1 -1
- package/dist/commands/actor/push-data.js +2 -2
- package/dist/commands/actor/set-value.js +3 -3
- package/dist/commands/actor/set-value.js.map +1 -1
- package/dist/commands/call.d.ts +1 -0
- package/dist/commands/call.d.ts.map +1 -1
- package/dist/commands/call.js +48 -19
- package/dist/commands/call.js.map +1 -1
- package/dist/commands/create.d.ts +1 -0
- package/dist/commands/create.d.ts.map +1 -1
- package/dist/commands/create.js +10 -1
- package/dist/commands/create.js.map +1 -1
- package/dist/commands/login.d.ts +1 -0
- package/dist/commands/login.d.ts.map +1 -1
- package/dist/commands/login.js +143 -12
- package/dist/commands/login.js.map +1 -1
- package/dist/commands/push.d.ts +2 -0
- package/dist/commands/push.d.ts.map +1 -1
- package/dist/commands/push.js +33 -3
- package/dist/commands/push.js.map +1 -1
- package/dist/commands/run.d.ts +1 -0
- package/dist/commands/run.d.ts.map +1 -1
- package/dist/commands/run.js +68 -17
- package/dist/commands/run.js.map +1 -1
- package/dist/commands/secrets/index.js +1 -1
- package/dist/lib/consts.d.ts +7 -0
- package/dist/lib/consts.d.ts.map +1 -1
- package/dist/lib/consts.js +9 -0
- package/dist/lib/consts.js.map +1 -1
- package/dist/lib/exec.js +1 -1
- package/dist/lib/exec.js.map +1 -1
- package/dist/lib/secrets.js +3 -3
- package/dist/lib/utils.d.ts.map +1 -1
- package/dist/lib/utils.js +11 -0
- package/dist/lib/utils.js.map +1 -1
- package/oclif.manifest.json +42 -34
- package/package.json +145 -141
- package/dist/commands/login-new.d.ts +0 -10
- package/dist/commands/login-new.d.ts.map +0 -1
- package/dist/commands/login-new.js +0 -166
- package/dist/commands/login-new.js.map +0 -1
|
@@ -38,9 +38,9 @@ Object.defineProperty(PushDataCommand, "description", {
|
|
|
38
38
|
value: 'Stores an object or an array of objects to the default dataset of the Actor run.\n'
|
|
39
39
|
+ 'It is possible to pass data using item argument or stdin.\n'
|
|
40
40
|
+ 'Passing data using argument:\n'
|
|
41
|
-
+ '$ apify actor
|
|
41
|
+
+ '$ apify actor push-data {"foo": "bar"}\n'
|
|
42
42
|
+ 'Passing data using stdin with pipe:\n'
|
|
43
|
-
+ '$ cat ./test.json | apify actor
|
|
43
|
+
+ '$ cat ./test.json | apify actor push-data\n'
|
|
44
44
|
});
|
|
45
45
|
Object.defineProperty(PushDataCommand, "args", {
|
|
46
46
|
enumerable: true,
|
|
@@ -24,7 +24,7 @@ export class SetValueCommand extends ApifyCommand {
|
|
|
24
24
|
const recordValue = value || stdin;
|
|
25
25
|
const apifyClient = await getApifyStorageClient();
|
|
26
26
|
const storeClient = apifyClient.keyValueStore(getDefaultStorageId(APIFY_STORAGE_TYPES.KEY_VALUE_STORE));
|
|
27
|
-
if (recordValue === undefined || recordValue === null) {
|
|
27
|
+
if (recordValue === undefined || recordValue === null || recordValue === '' || recordValue === 'null' || recordValue === 'undefined') {
|
|
28
28
|
await storeClient.deleteRecord(key);
|
|
29
29
|
}
|
|
30
30
|
else {
|
|
@@ -39,9 +39,9 @@ Object.defineProperty(SetValueCommand, "description", {
|
|
|
39
39
|
value: 'Sets or removes record into the default KeyValueStore associated with the Actor run.\n'
|
|
40
40
|
+ 'It is possible to pass data using argument or stdin.\n'
|
|
41
41
|
+ 'Passing data using argument:\n'
|
|
42
|
-
+ '$ apify actor
|
|
42
|
+
+ '$ apify actor set-value KEY my-value\n'
|
|
43
43
|
+ 'Passing data using stdin with pipe:\n'
|
|
44
|
-
+ '$ cat ./my-text-file.txt | apify actor
|
|
44
|
+
+ '$ cat ./my-text-file.txt | apify actor set-value KEY --contentType text/plain\n'
|
|
45
45
|
});
|
|
46
46
|
Object.defineProperty(SetValueCommand, "args", {
|
|
47
47
|
enumerable: true,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"set-value.js","sourceRoot":"","sources":["../../../src/commands/actor/set-value.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAE1C,OAAO,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACrG,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAE1D,MAAM,OAAO,eAAgB,SAAQ,YAAoC;IAAzE;;QA8BY;;;;;WAA6B;IAwBzC,CAAC;IAtBY,KAAK,CAAC,IAAI;QACf,MAAM,KAAK,CAAC,IAAI,EAAE,CAAC;QACnB,sCAAsC;QACtC,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;IAC/B,CAAC;IAED,KAAK,CAAC,GAAG;QACL,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC;QACvB,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC;QACjC,MAAM,EAAE,WAAW,GAAG,iCAAiC,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC;QAEvE,oGAAoG;QACpG,MAAM,WAAW,GAAG,KAAK,IAAI,KAAK,CAAC;QACnC,MAAM,WAAW,GAAG,MAAM,qBAAqB,EAAE,CAAC;QAClD,MAAM,WAAW,GAAG,WAAW,CAAC,aAAa,CAAC,mBAAmB,CAAC,mBAAmB,CAAC,eAAe,CAAC,CAAC,CAAC;QAExG,IAAI,WAAW,KAAK,SAAS,IAAI,WAAW,KAAK,IAAI,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"set-value.js","sourceRoot":"","sources":["../../../src/commands/actor/set-value.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAE1C,OAAO,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACrG,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAE1D,MAAM,OAAO,eAAgB,SAAQ,YAAoC;IAAzE;;QA8BY;;;;;WAA6B;IAwBzC,CAAC;IAtBY,KAAK,CAAC,IAAI;QACf,MAAM,KAAK,CAAC,IAAI,EAAE,CAAC;QACnB,sCAAsC;QACtC,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;IAC/B,CAAC;IAED,KAAK,CAAC,GAAG;QACL,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC;QACvB,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC;QACjC,MAAM,EAAE,WAAW,GAAG,iCAAiC,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC;QAEvE,oGAAoG;QACpG,MAAM,WAAW,GAAG,KAAK,IAAI,KAAK,CAAC;QACnC,MAAM,WAAW,GAAG,MAAM,qBAAqB,EAAE,CAAC;QAClD,MAAM,WAAW,GAAG,WAAW,CAAC,aAAa,CAAC,mBAAmB,CAAC,mBAAmB,CAAC,eAAe,CAAC,CAAC,CAAC;QAExG,IAAI,WAAW,KAAK,SAAS,IAAI,WAAW,KAAK,IAAI,IAAI,WAAW,KAAK,EAAE,IAAI,WAAW,KAAK,MAAM,IAAI,WAAW,KAAK,WAAW,EAAE,CAAC;YACnI,MAAM,WAAW,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;QACxC,CAAC;aAAM,CAAC;YACJ,MAAM,WAAW,CAAC,SAAS,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,CAAC,CAAC;QAC1E,CAAC;IACL,CAAC;;AApDe;;;;WAAc,wFAAwF;UAChH,wDAAwD;UACxD,gCAAgC;UAChC,wCAAwC;UACxC,uCAAuC;UACvC,iFAAiF;EAL5D,CAK6D;AAExE;;;;WAAO;QACnB,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC;YACb,QAAQ,EAAE,IAAI;YACd,WAAW,EAAE,uCAAuC;SACvD,CAAC;QACF,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC;YACf,QAAQ,EAAE,KAAK;YACf,WAAW,EAAE,0DAA0D;kBACrE,6DAA6D;kBAC7D,2FAA2F;kBAC3F,wDAAwD;SAC7D,CAAC;KACL;EAZmB,CAYlB;AAEc;;;;WAAQ;QACpB,WAAW,EAAE,KAAK,CAAC,MAAM,CAAC;YACtB,IAAI,EAAE,GAAG;YACT,WAAW,EAAE,4FAA4F;YACzG,QAAQ,EAAE,KAAK;SAClB,CAAC;KACL;EANoB,CAMnB"}
|
package/dist/commands/call.d.ts
CHANGED
|
@@ -11,5 +11,6 @@ export declare class CallCommand extends ApifyCommand<typeof CallCommand> {
|
|
|
11
11
|
actorId: import("@oclif/core/lib/interfaces/parser.js").Arg<string | undefined, Record<string, unknown>>;
|
|
12
12
|
};
|
|
13
13
|
run(): Promise<void>;
|
|
14
|
+
private resolveActorId;
|
|
14
15
|
}
|
|
15
16
|
//# sourceMappingURL=call.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"call.d.ts","sourceRoot":"","sources":["../../src/commands/call.ts"],"names":[],"mappings":"AAYA,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAKvD,qBAAa,WAAY,SAAQ,YAAY,CAAC,OAAO,WAAW,CAAC;IAC7D,OAAgB,WAAW,SAEyD;IAEpF,OAAgB,KAAK;;;;;MAqBnB;IAEF,OAAgB,IAAI;;MAMlB;IAEI,GAAG;
|
|
1
|
+
{"version":3,"file":"call.d.ts","sourceRoot":"","sources":["../../src/commands/call.ts"],"names":[],"mappings":"AAYA,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAKvD,qBAAa,WAAY,SAAQ,YAAY,CAAC,OAAO,WAAW,CAAC;IAC7D,OAAgB,WAAW,SAEyD;IAEpF,OAAgB,KAAK;;;;;MAqBnB;IAEF,OAAgB,IAAI;;MAMlB;IAEI,GAAG;YAgFK,cAAc;CA4C/B"}
|
package/dist/commands/call.js
CHANGED
|
@@ -7,7 +7,7 @@ import { ACTOR_JOB_STATUSES } from '@apify/consts';
|
|
|
7
7
|
import { Args, Flags } from '@oclif/core';
|
|
8
8
|
import mime from 'mime';
|
|
9
9
|
import { ApifyCommand } from '../lib/apify_command.js';
|
|
10
|
-
import { LOCAL_CONFIG_PATH } from '../lib/consts.js';
|
|
10
|
+
import { CommandExitCodes, LOCAL_CONFIG_PATH } from '../lib/consts.js';
|
|
11
11
|
import { error, link, run as runLog, success, warning } from '../lib/outputs.js';
|
|
12
12
|
import { getLocalConfig, getLocalInput, getLocalUserInfo, getLoggedClientOrThrow, outputJobLog } from '../lib/utils.js';
|
|
13
13
|
export class CallCommand extends ApifyCommand {
|
|
@@ -17,22 +17,10 @@ export class CallCommand extends ApifyCommand {
|
|
|
17
17
|
const apifyClient = await getLoggedClientOrThrow();
|
|
18
18
|
const userInfo = await getLocalUserInfo();
|
|
19
19
|
const usernameOrId = userInfo.username || userInfo.id;
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
if (forceActorId) {
|
|
23
|
-
const actor = await apifyClient.actor(forceActorId).get();
|
|
24
|
-
if (!actor)
|
|
25
|
-
throw new Error(`Cannot find Actor with ID '${forceActorId}' in your account.`);
|
|
26
|
-
actorId = actor.username ? `${actor.username}/${actor.name}` : actor.id;
|
|
27
|
-
}
|
|
28
|
-
else {
|
|
29
|
-
actorId = `${usernameOrId}/${localConfig.name}`;
|
|
30
|
-
const actor = await apifyClient.actor(actorId).get();
|
|
31
|
-
if (!actor) {
|
|
32
|
-
throw new Error(`Cannot find Actor with ID '${actorId}' `
|
|
33
|
-
+ 'in your account. Call "apify push" to push this Actor to Apify platform.');
|
|
34
|
-
}
|
|
20
|
+
if (!usernameOrId) {
|
|
21
|
+
throw new Error('Corrupted local user info was found. Please run "apify login" to fix it, then re-run this command.');
|
|
35
22
|
}
|
|
23
|
+
const { id: actorId, userFriendlyId } = await this.resolveActorId(apifyClient, localConfig.name, usernameOrId);
|
|
36
24
|
const runOpts = {
|
|
37
25
|
waitForFinish: 2, // NOTE: We need to wait some time to Apify open stream and we can create connection
|
|
38
26
|
};
|
|
@@ -50,7 +38,7 @@ export class CallCommand extends ApifyCommand {
|
|
|
50
38
|
}
|
|
51
39
|
// Get input for act
|
|
52
40
|
const localInput = getLocalInput(cwd);
|
|
53
|
-
runLog(`Calling Actor ${actorId}`);
|
|
41
|
+
runLog(`Calling Actor ${userFriendlyId} (${actorId})`);
|
|
54
42
|
let run;
|
|
55
43
|
try {
|
|
56
44
|
if (localInput) {
|
|
@@ -68,7 +56,7 @@ export class CallCommand extends ApifyCommand {
|
|
|
68
56
|
catch (err) {
|
|
69
57
|
// TODO: Better error message in apify-client-js
|
|
70
58
|
if (err.type === 'record-not-found')
|
|
71
|
-
throw new Error(`Actor ${actorId} not found!`);
|
|
59
|
+
throw new Error(`Actor ${userFriendlyId} (${actorId}) not found!`);
|
|
72
60
|
else
|
|
73
61
|
throw err;
|
|
74
62
|
}
|
|
@@ -87,9 +75,50 @@ export class CallCommand extends ApifyCommand {
|
|
|
87
75
|
else if (run.status === ACTOR_JOB_STATUSES.RUNNING) {
|
|
88
76
|
warning('Actor is still running!');
|
|
89
77
|
}
|
|
78
|
+
else if (run.status === ACTOR_JOB_STATUSES.ABORTED || run.status === ACTOR_JOB_STATUSES.ABORTING) {
|
|
79
|
+
warning('Actor was aborted!');
|
|
80
|
+
process.exitCode = CommandExitCodes.RunAborted;
|
|
81
|
+
}
|
|
90
82
|
else {
|
|
91
83
|
error('Actor failed!');
|
|
84
|
+
process.exitCode = CommandExitCodes.RunFailed;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
async resolveActorId(client, localActorName, usernameOrId) {
|
|
88
|
+
const { actorId } = this.args;
|
|
89
|
+
// Full ID
|
|
90
|
+
if (actorId?.includes('/')) {
|
|
91
|
+
const actor = await client.actor(actorId).get();
|
|
92
|
+
if (!actor)
|
|
93
|
+
throw new Error(`Cannot find Actor with ID '${actorId}' in your account.`);
|
|
94
|
+
return {
|
|
95
|
+
userFriendlyId: `${actor.username}/${actor.name}`,
|
|
96
|
+
id: actor.id,
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
// Try fetching actor directly by name
|
|
100
|
+
if (actorId) {
|
|
101
|
+
const actor = await client.actor(`${usernameOrId}/${actorId.toLowerCase()}`).get();
|
|
102
|
+
if (!actor) {
|
|
103
|
+
throw new Error(`Cannot find Actor with name '${actorId}' in your account.`);
|
|
104
|
+
}
|
|
105
|
+
return {
|
|
106
|
+
userFriendlyId: `${actor.username}/${actor.name}`,
|
|
107
|
+
id: actor.id,
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
if (localActorName) {
|
|
111
|
+
const actor = await client.actor(`${usernameOrId}/${localActorName}`).get();
|
|
112
|
+
if (!actor) {
|
|
113
|
+
throw new Error(`Cannot find Actor with ID '${usernameOrId}/${localActorName}' `
|
|
114
|
+
+ 'in your account. Call "apify push" to push this Actor to Apify platform.');
|
|
115
|
+
}
|
|
116
|
+
return {
|
|
117
|
+
userFriendlyId: `${actor.username}/${actor.name}`,
|
|
118
|
+
id: actor.id,
|
|
119
|
+
};
|
|
92
120
|
}
|
|
121
|
+
throw new Error('Please provide an Actor ID or name, or run this command from a directory with a valid Apify actor.');
|
|
93
122
|
}
|
|
94
123
|
}
|
|
95
124
|
Object.defineProperty(CallCommand, "description", {
|
|
@@ -134,7 +163,7 @@ Object.defineProperty(CallCommand, "args", {
|
|
|
134
163
|
value: {
|
|
135
164
|
actorId: Args.string({
|
|
136
165
|
required: false,
|
|
137
|
-
description: 'Name or ID of the Actor to run (e.g. "apify/hello-world" or "E2jjCZBezvAZnX8Rb"). '
|
|
166
|
+
description: 'Name or ID of the Actor to run (e.g. "my-actor", "apify/hello-world" or "E2jjCZBezvAZnX8Rb"). '
|
|
138
167
|
+ `If not provided, the command runs the remote Actor specified in the "${LOCAL_CONFIG_PATH}" file.`,
|
|
139
168
|
}),
|
|
140
169
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"call.js","sourceRoot":"","sources":["../../src/commands/call.ts"],"names":[],"mappings":"AAAA,oEAAoE;AACpE,6BAA6B;AAC7B,2BAA2B;AAC3B,4BAA4B;AAE5B,OAAO,OAAO,MAAM,cAAc,CAAC;AAEnC,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAE1C,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"call.js","sourceRoot":"","sources":["../../src/commands/call.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,6 +5,7 @@ export declare class CreateCommand extends ApifyCommand<typeof CreateCommand> {
|
|
|
5
5
|
template: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
6
6
|
'skip-dependency-install': import("@oclif/core/lib/interfaces/parser.js").BooleanFlag<boolean>;
|
|
7
7
|
'template-archive-url': import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
8
|
+
'omit-optional-deps': import("@oclif/core/lib/interfaces/parser.js").BooleanFlag<boolean>;
|
|
8
9
|
};
|
|
9
10
|
static args: {
|
|
10
11
|
actorName: import("@oclif/core/lib/interfaces/parser.js").Arg<string | undefined, Record<string, unknown>>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../src/commands/create.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAqBvD,qBAAa,aAAc,SAAQ,YAAY,CAAC,OAAO,aAAa,CAAC;IACjE,OAAgB,WAAW,SAAiF;IAE5G,OAAgB,KAAK
|
|
1
|
+
{"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../src/commands/create.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAqBvD,qBAAa,aAAc,SAAQ,YAAY,CAAC,OAAO,aAAa,CAAC;IACjE,OAAgB,WAAW,SAAiF;IAE5G,OAAgB,KAAK;;;;;MAqBnB;IAEF,OAAgB,IAAI;;MAKlB;IAEI,GAAG;CA+JZ"}
|
package/dist/commands/create.js
CHANGED
|
@@ -59,6 +59,10 @@ export class CreateCommand extends ApifyCommand {
|
|
|
59
59
|
skipOptionalDeps = templateDefinition.skipOptionalDeps;
|
|
60
60
|
}
|
|
61
61
|
}
|
|
62
|
+
// Set this _after_ the template is resolved, so that the flag takes precedence
|
|
63
|
+
if (this.flags.omitOptionalDeps) {
|
|
64
|
+
skipOptionalDeps = true;
|
|
65
|
+
}
|
|
62
66
|
await downloadAndUnzip({ url: templateArchiveUrl, pathTo: actFolderDir });
|
|
63
67
|
// There may be .actor/actor.json file in used template - let's try to load it and change the name prop value to actorName
|
|
64
68
|
const localConfig = getJsonFileContent(join(actFolderDir, LOCAL_CONFIG_PATH));
|
|
@@ -134,7 +138,7 @@ export class CreateCommand extends ApifyCommand {
|
|
|
134
138
|
}
|
|
135
139
|
if (dependenciesInstalled) {
|
|
136
140
|
success(`Actor '${actorName}' was created. To run it, run "cd ${actorName}" and "apify run".`);
|
|
137
|
-
|
|
141
|
+
info('To run your code in the cloud, run "apify push" and deploy your code to Apify Console.');
|
|
138
142
|
if (messages?.postCreate) {
|
|
139
143
|
info(messages?.postCreate);
|
|
140
144
|
}
|
|
@@ -170,6 +174,11 @@ Object.defineProperty(CreateCommand, "flags", {
|
|
|
170
174
|
required: false,
|
|
171
175
|
hidden: true,
|
|
172
176
|
}),
|
|
177
|
+
'omit-optional-deps': Flags.boolean({
|
|
178
|
+
aliases: ['no-optional'],
|
|
179
|
+
description: 'Skip installing optional dependencies.',
|
|
180
|
+
required: false,
|
|
181
|
+
}),
|
|
173
182
|
}
|
|
174
183
|
});
|
|
175
184
|
Object.defineProperty(CreateCommand, "args", {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create.js","sourceRoot":"","sources":["../../src/commands/create.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAChD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,OAAO,MAAM,cAAc,CAAC;AAEnC,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACpE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,GAAG,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAEzC,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,wBAAwB,EAAE,MAAM,kBAAkB,CAAC;AACrH,OAAO,EAAE,4BAA4B,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AACnH,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,uCAAuC,EAAE,MAAM,wBAAwB,CAAC;AACjF,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAClE,OAAO,EACH,iBAAiB,EACjB,gBAAgB,EAChB,mBAAmB,EACnB,gBAAgB,EAChB,kBAAkB,EAClB,SAAS,EACT,gBAAgB,EAChB,sBAAsB,EACtB,wBAAwB,EACxB,cAAc,EACd,WAAW,GACd,MAAM,iBAAiB,CAAC;AAEzB,MAAM,OAAO,aAAc,SAAQ,YAAkC;
|
|
1
|
+
{"version":3,"file":"create.js","sourceRoot":"","sources":["../../src/commands/create.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/login.d.ts
CHANGED
|
@@ -3,6 +3,7 @@ export declare class LoginCommand extends ApifyCommand<typeof LoginCommand> {
|
|
|
3
3
|
static description: string;
|
|
4
4
|
static flags: {
|
|
5
5
|
token: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
6
|
+
method: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
6
7
|
};
|
|
7
8
|
run(): Promise<void>;
|
|
8
9
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AA0BvD,qBAAa,YAAa,SAAQ,YAAY,CAAC,OAAO,YAAY,CAAC;IAC/D,OAAgB,WAAW,SAEU;IAErC,OAAgB,KAAK;;;MAYnB;IAEI,GAAG;CA6HZ"}
|
package/dist/commands/login.js
CHANGED
|
@@ -1,30 +1,155 @@
|
|
|
1
|
+
import { cryptoRandomObjectId } from '@apify/utilities';
|
|
1
2
|
import { Flags } from '@oclif/core';
|
|
3
|
+
import computerName from 'computer-name';
|
|
4
|
+
import cors from 'cors';
|
|
5
|
+
import express from 'express';
|
|
2
6
|
import inquirer from 'inquirer';
|
|
7
|
+
import open from 'open';
|
|
3
8
|
import { ApifyCommand } from '../lib/apify_command.js';
|
|
4
|
-
import { error, success } from '../lib/outputs.js';
|
|
9
|
+
import { error, info, success } from '../lib/outputs.js';
|
|
5
10
|
import { useApifyIdentity } from '../lib/telemetry.js';
|
|
6
11
|
import { getLocalUserInfo, getLoggedClient } from '../lib/utils.js';
|
|
12
|
+
const CONSOLE_BASE_URL = 'https://console.apify.com/account?tab=integrations';
|
|
13
|
+
// const CONSOLE_BASE_URL = 'http://localhost:3000/account?tab=integrations';
|
|
14
|
+
const CONSOLE_URL_ORIGIN = new URL(CONSOLE_BASE_URL).origin;
|
|
15
|
+
const API_BASE_URL = CONSOLE_BASE_URL.includes('localhost') ? 'http://localhost:3333' : undefined;
|
|
16
|
+
// Not really checked right now, but it might come useful if we ever need to do some breaking changes
|
|
17
|
+
const API_VERSION = 'v1';
|
|
18
|
+
const tryToLogin = async (token) => {
|
|
19
|
+
const isUserLogged = await getLoggedClient(token, API_BASE_URL);
|
|
20
|
+
const userInfo = await getLocalUserInfo();
|
|
21
|
+
if (isUserLogged) {
|
|
22
|
+
await useApifyIdentity(userInfo.id);
|
|
23
|
+
success(`You are logged in to Apify as ${userInfo.username || userInfo.id}!`);
|
|
24
|
+
}
|
|
25
|
+
else {
|
|
26
|
+
error('Login to Apify failed, the provided API token is not valid.');
|
|
27
|
+
}
|
|
28
|
+
return isUserLogged;
|
|
29
|
+
};
|
|
7
30
|
export class LoginCommand extends ApifyCommand {
|
|
8
31
|
async run() {
|
|
9
|
-
|
|
10
|
-
if (
|
|
32
|
+
const { token, method } = this.flags;
|
|
33
|
+
if (token) {
|
|
34
|
+
await tryToLogin(token);
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
let selectedMethod = method;
|
|
38
|
+
if (!method) {
|
|
39
|
+
const answer = await inquirer.prompt([{
|
|
40
|
+
type: 'list',
|
|
41
|
+
name: 'loginMethod',
|
|
42
|
+
message: 'Choose how you want to log in to Apify',
|
|
43
|
+
choices: [
|
|
44
|
+
{
|
|
45
|
+
value: 'console',
|
|
46
|
+
name: 'Through Apify Console in your default browser',
|
|
47
|
+
short: 'Through Apify Console',
|
|
48
|
+
},
|
|
49
|
+
{ value: 'manual', name: 'Enter API token manually', short: 'Manually' },
|
|
50
|
+
],
|
|
51
|
+
loop: true,
|
|
52
|
+
}]);
|
|
53
|
+
selectedMethod = answer.loginMethod;
|
|
54
|
+
}
|
|
55
|
+
if (selectedMethod === 'console') {
|
|
56
|
+
let server;
|
|
57
|
+
const app = express();
|
|
58
|
+
// To send requests from browser to localhost, CORS has to be configured properly
|
|
59
|
+
app.use(cors({
|
|
60
|
+
origin: CONSOLE_URL_ORIGIN,
|
|
61
|
+
allowedHeaders: ['Content-Type', 'Authorization'],
|
|
62
|
+
}));
|
|
63
|
+
// Turn off keepalive, otherwise closing the server when command is finished is lagging
|
|
64
|
+
app.use((_, res, next) => {
|
|
65
|
+
res.set('Connection', 'close');
|
|
66
|
+
next();
|
|
67
|
+
});
|
|
68
|
+
app.use(express.json());
|
|
69
|
+
// Basic authorization via a random token, which is passed to the Apify Console,
|
|
70
|
+
// and that sends it back via the `token` query param, or `Authorization` header
|
|
71
|
+
const authToken = cryptoRandomObjectId();
|
|
72
|
+
app.use((req, res, next) => {
|
|
73
|
+
let { token: serverToken } = req.query;
|
|
74
|
+
if (!serverToken) {
|
|
75
|
+
const authorizationHeader = req.get('Authorization');
|
|
76
|
+
if (authorizationHeader) {
|
|
77
|
+
const [schema, tokenFromHeader, ...extra] = authorizationHeader.trim().split(/\s+/);
|
|
78
|
+
if (schema.toLowerCase() === 'bearer' && tokenFromHeader && extra.length === 0) {
|
|
79
|
+
serverToken = tokenFromHeader;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
if (serverToken !== authToken) {
|
|
84
|
+
res.status(401);
|
|
85
|
+
res.send('Authorization failed');
|
|
86
|
+
}
|
|
87
|
+
else {
|
|
88
|
+
next();
|
|
89
|
+
}
|
|
90
|
+
});
|
|
91
|
+
const apiRouter = express.Router();
|
|
92
|
+
app.use(`/api/${API_VERSION}`, apiRouter);
|
|
93
|
+
apiRouter.post('/login-token', async (req, res) => {
|
|
94
|
+
try {
|
|
95
|
+
if (req.body.apiToken) {
|
|
96
|
+
await tryToLogin(req.body.apiToken);
|
|
97
|
+
}
|
|
98
|
+
else {
|
|
99
|
+
throw new Error('Request did not contain API token');
|
|
100
|
+
}
|
|
101
|
+
res.end();
|
|
102
|
+
}
|
|
103
|
+
catch (err) {
|
|
104
|
+
const errorMessage = `Login to Apify failed with error: ${err.message}`;
|
|
105
|
+
error(errorMessage);
|
|
106
|
+
res.status(500);
|
|
107
|
+
res.send(errorMessage);
|
|
108
|
+
}
|
|
109
|
+
server.close();
|
|
110
|
+
});
|
|
111
|
+
apiRouter.post('/exit', (req, res) => {
|
|
112
|
+
if (req.body.isWindowClosed) {
|
|
113
|
+
error('Login to Apify failed, the console window was closed.');
|
|
114
|
+
}
|
|
115
|
+
else if (req.body.actionCanceled) {
|
|
116
|
+
error('Login to Apify failed, the action was canceled in the Apify Console.');
|
|
117
|
+
}
|
|
118
|
+
else {
|
|
119
|
+
error('Login to Apify failed.');
|
|
120
|
+
}
|
|
121
|
+
res.end();
|
|
122
|
+
server.close();
|
|
123
|
+
});
|
|
124
|
+
// Listening on port 0 will assign a random available port
|
|
125
|
+
server = app.listen(0);
|
|
126
|
+
const { port } = server.address();
|
|
127
|
+
const consoleUrl = new URL(CONSOLE_BASE_URL);
|
|
128
|
+
consoleUrl.searchParams.set('localCliCommand', 'login');
|
|
129
|
+
consoleUrl.searchParams.set('localCliPort', `${port}`);
|
|
130
|
+
consoleUrl.searchParams.set('localCliToken', authToken);
|
|
131
|
+
consoleUrl.searchParams.set('localCliApiVersion', API_VERSION);
|
|
132
|
+
try {
|
|
133
|
+
consoleUrl.searchParams.set('localCliComputerName', encodeURIComponent(computerName()));
|
|
134
|
+
}
|
|
135
|
+
catch {
|
|
136
|
+
// Ignore errors from fetching computer name as it's not critical
|
|
137
|
+
}
|
|
138
|
+
info(`Opening Apify Console at "${consoleUrl.href}"...`);
|
|
139
|
+
await open(consoleUrl.href);
|
|
140
|
+
}
|
|
141
|
+
else {
|
|
11
142
|
console.log('Enter your Apify API token. You can find it at https://console.apify.com/account#/integrations');
|
|
12
|
-
const
|
|
13
|
-
(
|
|
143
|
+
const tokenAnswer = await inquirer.prompt([{ name: 'token', message: 'token:', type: 'password' }]);
|
|
144
|
+
await tryToLogin(tokenAnswer.token);
|
|
14
145
|
}
|
|
15
|
-
const isUserLogged = await getLoggedClient(token);
|
|
16
|
-
const userInfo = await getLocalUserInfo();
|
|
17
|
-
await useApifyIdentity(userInfo.id);
|
|
18
|
-
return isUserLogged
|
|
19
|
-
? success(`You are logged in to Apify as ${userInfo.username || userInfo.id}!`)
|
|
20
|
-
: error('Login to Apify failed, the provided API token is not valid.');
|
|
21
146
|
}
|
|
22
147
|
}
|
|
23
148
|
Object.defineProperty(LoginCommand, "description", {
|
|
24
149
|
enumerable: true,
|
|
25
150
|
configurable: true,
|
|
26
151
|
writable: true,
|
|
27
|
-
value: 'Logs in to your Apify account
|
|
152
|
+
value: 'Logs in to your Apify account.\nThe API token and other account '
|
|
28
153
|
+ 'information is stored in the ~/.apify directory, from where it is read by all other "apify" commands. '
|
|
29
154
|
+ 'To log out, call "apify logout".'
|
|
30
155
|
});
|
|
@@ -38,6 +163,12 @@ Object.defineProperty(LoginCommand, "flags", {
|
|
|
38
163
|
description: '[Optional] Apify API token',
|
|
39
164
|
required: false,
|
|
40
165
|
}),
|
|
166
|
+
method: Flags.string({
|
|
167
|
+
char: 'm',
|
|
168
|
+
description: '[Optional] Method of logging in to Apify',
|
|
169
|
+
options: ['console', 'manual'],
|
|
170
|
+
required: false,
|
|
171
|
+
}),
|
|
41
172
|
}
|
|
42
173
|
});
|
|
43
174
|
//# sourceMappingURL=login.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"login.js","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"login.js","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/push.d.ts
CHANGED
|
@@ -7,10 +7,12 @@ export declare class PushCommand extends ApifyCommand<typeof PushCommand> {
|
|
|
7
7
|
'build-tag': import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
8
8
|
'wait-for-finish': import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
9
9
|
'no-prompt': import("@oclif/core/lib/interfaces/parser.js").BooleanFlag<boolean>;
|
|
10
|
+
force: import("@oclif/core/lib/interfaces/parser.js").BooleanFlag<boolean>;
|
|
10
11
|
};
|
|
11
12
|
static args: {
|
|
12
13
|
actorId: import("@oclif/core/lib/interfaces/parser.js").Arg<string | undefined, Record<string, unknown>>;
|
|
13
14
|
};
|
|
15
|
+
catch(caughtError: Error): Promise<void>;
|
|
14
16
|
run(): Promise<void>;
|
|
15
17
|
}
|
|
16
18
|
//# sourceMappingURL=push.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"push.d.ts","sourceRoot":"","sources":["../../src/commands/push.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"push.d.ts","sourceRoot":"","sources":["../../src/commands/push.ts"],"names":[],"mappings":"AAYA,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AA6BvD,qBAAa,WAAY,SAAQ,YAAY,CAAC,OAAO,WAAW,CAAC;IAC7D,OAAgB,WAAW,SAI4H;IAEvJ,OAAgB,KAAK;;;;;;;MAgCnB;IAEF,OAAgB,IAAI;;MAMlB;IAGa,KAAK,CAAC,WAAW,EAAE,KAAK;IAIjC,GAAG;CA+LZ"}
|
package/dist/commands/push.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { readFileSync, unlinkSync } from 'node:fs';
|
|
1
|
+
import { readFileSync, unlinkSync, statSync } from 'node:fs';
|
|
2
|
+
import { join } from 'node:path';
|
|
2
3
|
import process from 'node:process';
|
|
3
4
|
import { fetchManifest } from '@apify/actor-templates';
|
|
4
5
|
import { ACTOR_JOB_STATUSES, ACTOR_SOURCE_TYPES, MAX_MULTIFILE_BYTES } from '@apify/consts';
|
|
@@ -7,7 +8,7 @@ import inquirer from 'inquirer';
|
|
|
7
8
|
import isCI from 'is-ci';
|
|
8
9
|
import open from 'open';
|
|
9
10
|
import { ApifyCommand } from '../lib/apify_command.js';
|
|
10
|
-
import { LOCAL_CONFIG_PATH, UPLOADS_STORE_NAME } from '../lib/consts.js';
|
|
11
|
+
import { CommandExitCodes, LOCAL_CONFIG_PATH, UPLOADS_STORE_NAME } from '../lib/consts.js';
|
|
11
12
|
import { sumFilesSizeInBytes } from '../lib/files.js';
|
|
12
13
|
import { error, info, link, run, success, warning } from '../lib/outputs.js';
|
|
13
14
|
import { transformEnvToEnvVars } from '../lib/secrets.js';
|
|
@@ -25,6 +26,10 @@ const DEFAULT_ACTOR_VERSION_NUMBER = '0.0';
|
|
|
25
26
|
// that changes, we have to add it.
|
|
26
27
|
const DEFAULT_BUILD_TAG = 'latest';
|
|
27
28
|
export class PushCommand extends ApifyCommand {
|
|
29
|
+
// TODO: Global handler in ApifyCommand
|
|
30
|
+
async catch(caughtError) {
|
|
31
|
+
throw caughtError;
|
|
32
|
+
}
|
|
28
33
|
async run() {
|
|
29
34
|
const cwd = process.cwd();
|
|
30
35
|
const apifyClient = await getLoggedClientOrThrow();
|
|
@@ -34,6 +39,7 @@ export class PushCommand extends ApifyCommand {
|
|
|
34
39
|
const redirectUrlPart = isOrganizationLoggedIn ? `/organization/${userInfo.id}` : '';
|
|
35
40
|
let actorId;
|
|
36
41
|
let actor;
|
|
42
|
+
let isActorCreatedNow = false;
|
|
37
43
|
// User can override actor version and build tag, attributes in localConfig will remain same.
|
|
38
44
|
const version = this.flags.version || this.flags.versionNumber || localConfig?.version || DEFAULT_ACTOR_VERSION_NUMBER;
|
|
39
45
|
let buildTag = this.flags.buildTag || localConfig.buildTag;
|
|
@@ -79,6 +85,7 @@ export class PushCommand extends ApifyCommand {
|
|
|
79
85
|
};
|
|
80
86
|
actor = await apifyClient.actors().create(newActor);
|
|
81
87
|
actorId = actor.id;
|
|
88
|
+
isActorCreatedNow = true;
|
|
82
89
|
info(`Created Actor with name ${localConfig.name} on Apify.`);
|
|
83
90
|
}
|
|
84
91
|
}
|
|
@@ -90,6 +97,21 @@ export class PushCommand extends ApifyCommand {
|
|
|
90
97
|
let sourceFiles;
|
|
91
98
|
let tarballUrl;
|
|
92
99
|
if (filesSize < MAX_MULTIFILE_BYTES) {
|
|
100
|
+
const client = await actorClient.get();
|
|
101
|
+
if (!isActorCreatedNow) {
|
|
102
|
+
// Check when was files modified last
|
|
103
|
+
const mostRecentModifiedFileMs = filePathsToPush.reduce((modifiedMs, filePath) => {
|
|
104
|
+
const { mtimeMs, ctimeMs } = statSync(join(cwd, filePath));
|
|
105
|
+
// Sometimes it's possible mtimeMs is some messed up value (like 2000/01/01 midnight), then we want to check created if it's newer
|
|
106
|
+
const fileModifiedMs = mtimeMs > ctimeMs ? mtimeMs : ctimeMs;
|
|
107
|
+
return modifiedMs > fileModifiedMs ? modifiedMs : fileModifiedMs;
|
|
108
|
+
}, 0);
|
|
109
|
+
const actorModifiedMs = client?.modifiedAt.valueOf();
|
|
110
|
+
if (!this.flags.force && actorModifiedMs && mostRecentModifiedFileMs < actorModifiedMs && (localConfig?.name || forceActorId)) {
|
|
111
|
+
throw new Error(`Actor with identifier "${localConfig?.name || forceActorId}" is already on the platform and was modified there since modified locally.
|
|
112
|
+
Skipping push. Use --force to override.`);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
93
115
|
sourceFiles = await createSourceFiles(filePathsToPush, cwd);
|
|
94
116
|
sourceType = ACTOR_SOURCE_TYPES.SOURCE_FILES;
|
|
95
117
|
}
|
|
@@ -174,13 +196,16 @@ export class PushCommand extends ApifyCommand {
|
|
|
174
196
|
}
|
|
175
197
|
else if (build.status === ACTOR_JOB_STATUSES.ABORTED || build.status === ACTOR_JOB_STATUSES.ABORTING) {
|
|
176
198
|
warning('Build was aborted!');
|
|
199
|
+
process.exitCode = CommandExitCodes.BuildAborted;
|
|
177
200
|
// @ts-expect-error FIX THESE TYPES 😢
|
|
178
201
|
}
|
|
179
202
|
else if (build.status === ACTOR_JOB_STATUSES.TIMED_OUT || build.status === ACTOR_JOB_STATUSES.TIMING_OUT) {
|
|
180
203
|
warning('Build timed out!');
|
|
204
|
+
process.exitCode = CommandExitCodes.BuildTimedOut;
|
|
181
205
|
}
|
|
182
206
|
else {
|
|
183
207
|
error('Build failed!');
|
|
208
|
+
process.exitCode = CommandExitCodes.BuildFailed;
|
|
184
209
|
}
|
|
185
210
|
}
|
|
186
211
|
}
|
|
@@ -192,7 +217,7 @@ Object.defineProperty(PushCommand, "description", {
|
|
|
192
217
|
+ `The Actor settings are read from the "${LOCAL_CONFIG_PATH}" file in the current directory, but they can be overridden using command-line options.\n`
|
|
193
218
|
+ `NOTE: If the source files are smaller than ${MAX_MULTIFILE_BYTES / (1024 ** 2)} MB then they are uploaded as \n`
|
|
194
219
|
+ '"Multiple source files", otherwise they are uploaded as "Zip file".\n\n'
|
|
195
|
-
+ '
|
|
220
|
+
+ 'When there\'s an attempt to push files that are older than the Actor on the platform, the command will fail. Can be overwritten with --force flag.'
|
|
196
221
|
});
|
|
197
222
|
Object.defineProperty(PushCommand, "flags", {
|
|
198
223
|
enumerable: true,
|
|
@@ -225,6 +250,11 @@ Object.defineProperty(PushCommand, "flags", {
|
|
|
225
250
|
default: false,
|
|
226
251
|
required: false,
|
|
227
252
|
}),
|
|
253
|
+
force: Flags.boolean({
|
|
254
|
+
description: 'Push an Actor even when the local files are older than the Actor on the platform.',
|
|
255
|
+
default: false,
|
|
256
|
+
required: false,
|
|
257
|
+
}),
|
|
228
258
|
}
|
|
229
259
|
});
|
|
230
260
|
Object.defineProperty(PushCommand, "args", {
|