@dxos/cli 0.8.1 → 0.8.2-main.2f9c567
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/src/commands/debug/generate.js +2 -2
- package/dist/src/commands/debug/generate.js.map +1 -1
- package/dist/src/commands/function/list.d.ts +1 -1
- package/dist/src/commands/function/list.d.ts.map +1 -1
- package/dist/src/commands/function/list.js +2 -3
- package/dist/src/commands/function/list.js.map +1 -1
- package/dist/src/commands/function/trigger/list.d.ts +1 -1
- package/dist/src/commands/function/trigger/list.d.ts.map +1 -1
- package/dist/src/commands/function/trigger/list.js +2 -4
- package/dist/src/commands/function/trigger/list.js.map +1 -1
- package/dist/src/commands/function/upload.d.ts +7 -2
- package/dist/src/commands/function/upload.d.ts.map +1 -1
- package/dist/src/commands/function/upload.js +105 -98
- package/dist/src/commands/function/upload.js.map +1 -1
- package/dist/src/commands/function/watch.d.ts +29 -0
- package/dist/src/commands/function/watch.d.ts.map +1 -0
- package/dist/src/commands/function/watch.js +130 -0
- package/dist/src/commands/function/watch.js.map +1 -0
- package/dist/src/commands/halo/credential/list.d.ts +1 -0
- package/dist/src/commands/halo/credential/list.d.ts.map +1 -1
- package/dist/src/commands/halo/credential/list.js +25 -16
- package/dist/src/commands/halo/credential/list.js.map +1 -1
- package/dist/src/commands/space/list.d.ts +1 -0
- package/dist/src/commands/space/list.d.ts.map +1 -1
- package/dist/src/commands/space/list.js +7 -3
- package/dist/src/commands/space/list.js.map +1 -1
- package/dist/src/components/SpaceTable.d.ts.map +1 -1
- package/dist/src/components/SpaceTable.js +7 -4
- package/dist/src/components/SpaceTable.js.map +1 -1
- package/dist/src/help.d.ts.map +1 -1
- package/dist/src/help.js +6 -1
- package/dist/src/help.js.map +1 -1
- package/dist/src/util/function/bundle.d.ts +5 -0
- package/dist/src/util/function/bundle.d.ts.map +1 -0
- package/dist/src/util/function/bundle.js +13 -0
- package/dist/src/util/function/bundle.js.map +1 -0
- package/dist/src/util/function/index.d.ts +3 -0
- package/dist/src/util/function/index.d.ts.map +1 -0
- package/dist/src/util/function/index.js +6 -0
- package/dist/src/util/function/index.js.map +1 -0
- package/dist/src/util/function/lookup.d.ts +20 -0
- package/dist/src/util/function/lookup.d.ts.map +1 -0
- package/dist/src/util/function/lookup.js +14 -0
- package/dist/src/util/function/lookup.js.map +1 -0
- package/dist/src/util/index.d.ts +1 -0
- package/dist/src/util/index.d.ts.map +1 -1
- package/dist/src/util/index.js +1 -0
- package/dist/src/util/index.js.map +1 -1
- package/oclif.manifest.json +219 -81
- package/package.json +25 -25
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
import { Flags } from '@oclif/core';
|
|
5
5
|
import { sleep } from '@dxos/async';
|
|
6
6
|
import { ARG_SPACE_KEYS } from '@dxos/cli-base';
|
|
7
|
-
import {
|
|
7
|
+
import { live } from '@dxos/client/echo';
|
|
8
8
|
import { faker } from '@dxos/random';
|
|
9
9
|
import { BaseCommand } from '../../base';
|
|
10
10
|
// TODO(burdon): Testing plugin (vs. debug)?
|
|
@@ -22,7 +22,7 @@ class Generate extends BaseCommand {
|
|
|
22
22
|
var _a;
|
|
23
23
|
const space = await this.getSpace(client, this.args.key);
|
|
24
24
|
for (let i = 0; i < this.flags.objects; i++) {
|
|
25
|
-
space === null || space === void 0 ? void 0 : space.db.add(
|
|
25
|
+
space === null || space === void 0 ? void 0 : space.db.add(live({ type, title: faker.lorem.word() }));
|
|
26
26
|
await space.db.flush();
|
|
27
27
|
await pause();
|
|
28
28
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate.js","sourceRoot":"","sources":["../../../../src/commands/debug/generate.ts"],"names":[],"mappings":"AAAA,EAAE;AACF,0BAA0B;AAC1B,EAAE;AAEF,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEpC,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"generate.js","sourceRoot":"","sources":["../../../../src/commands/debug/generate.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../../src/commands/function/list.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../../src/commands/function/list.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAExD,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEzC,MAAM,CAAC,OAAO,OAAO,IAAK,SAAQ,WAAW,CAAC,OAAO,IAAI,CAAC;IACxD,OAAgB,cAAc,UAAQ;IACtC,OAAgB,WAAW,SAAqB;IAE1C,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC;CAgB1B;AAGD,eAAO,MAAM,cAAc,eAAe,gBAAgB,CAAC,WAAW,CAAC,SAQtE,CAAC"}
|
|
@@ -30,9 +30,8 @@ export default List;
|
|
|
30
30
|
// TODO(burdon): List stats.
|
|
31
31
|
export const printFunctions = (functions = []) => {
|
|
32
32
|
ux.stdout(table(functions, {
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
handler: {},
|
|
33
|
+
name: { primary: true },
|
|
34
|
+
version: {},
|
|
36
35
|
description: {},
|
|
37
36
|
}));
|
|
38
37
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list.js","sourceRoot":"","sources":["../../../../src/commands/function/list.ts"],"names":[],"mappings":"AAAA,EAAE;AACF,0BAA0B;AAC1B,EAAE;AAEF,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAC/B,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AACvC,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAGtC,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEzC,MAAqB,IAAK,SAAQ,WAAwB;IAIxD,KAAK,CAAC,GAAG;QACP,OAAO,MAAM,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE;;YACpD,8CAA8C;YAC9C,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,YAAa,CAAC;YAC1D,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;YACvE,MAAM,eAAe,GAAG,MAAA,MAAA,MAAA,MAAM,CAAC,MAAM,CAAC,OAAO,0CAAE,KAAK,0CAAE,OAAO,0CAAE,IAAI,CACjE,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,KAAK,iCAAiC,CAC5D,CAAC;YAEF,MAAM,IAAI,GAAG,MAAA,MAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,mCAAI,MAAA,eAAe,aAAf,eAAe,uBAAf,eAAe,CAAE,MAAM,0CAAE,QAAQ,mCAAI,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,eAAe,CAAC,CAAC;YAC9G,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAqB,CAAC;YACxE,MAAM,EAAE,SAAS,EAAE,GAAG,QAAQ,CAAC;YAC/B,cAAc,CAAC,SAAS,CAAC,CAAC;YAC1B,OAAO,QAAQ,CAAC;QAClB,CAAC,CAAC,CAAC;IACL,CAAC;;AAlBe,mBAAc,GAAG,IAAI,CAAC;AACtB,gBAAW,GAAG,iBAAiB,CAAC;eAF7B,IAAI;AAsBzB,4BAA4B;AAC5B,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,YAA2C,EAAE,EAAE,EAAE;IAC9E,EAAE,CAAC,MAAM,CACP,KAAK,CAAC,SAAS,EAAE;QACf,
|
|
1
|
+
{"version":3,"file":"list.js","sourceRoot":"","sources":["../../../../src/commands/function/list.ts"],"names":[],"mappings":"AAAA,EAAE;AACF,0BAA0B;AAC1B,EAAE;AAEF,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAC/B,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AACvC,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAGtC,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEzC,MAAqB,IAAK,SAAQ,WAAwB;IAIxD,KAAK,CAAC,GAAG;QACP,OAAO,MAAM,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE;;YACpD,8CAA8C;YAC9C,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,YAAa,CAAC;YAC1D,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;YACvE,MAAM,eAAe,GAAG,MAAA,MAAA,MAAA,MAAM,CAAC,MAAM,CAAC,OAAO,0CAAE,KAAK,0CAAE,OAAO,0CAAE,IAAI,CACjE,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,KAAK,iCAAiC,CAC5D,CAAC;YAEF,MAAM,IAAI,GAAG,MAAA,MAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,mCAAI,MAAA,eAAe,aAAf,eAAe,uBAAf,eAAe,CAAE,MAAM,0CAAE,QAAQ,mCAAI,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,eAAe,CAAC,CAAC;YAC9G,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAqB,CAAC;YACxE,MAAM,EAAE,SAAS,EAAE,GAAG,QAAQ,CAAC;YAC/B,cAAc,CAAC,SAAS,CAAC,CAAC;YAC1B,OAAO,QAAQ,CAAC;QAClB,CAAC,CAAC,CAAC;IACL,CAAC;;AAlBe,mBAAc,GAAG,IAAI,CAAC;AACtB,gBAAW,GAAG,iBAAiB,CAAC;eAF7B,IAAI;AAsBzB,4BAA4B;AAC5B,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,YAA2C,EAAE,EAAE,EAAE;IAC9E,EAAE,CAAC,MAAM,CACP,KAAK,CAAC,SAAS,EAAE;QACf,IAAI,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE;QACvB,OAAO,EAAE,EAAE;QACX,WAAW,EAAE,EAAE;KAChB,CAAC,CACH,CAAC;AACJ,CAAC,CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { type TableOptions } from '@dxos/cli-base';
|
|
2
|
-
import { FunctionTrigger } from '@dxos/functions
|
|
2
|
+
import { FunctionTrigger } from '@dxos/functions';
|
|
3
3
|
import { BaseCommand } from '../../../base';
|
|
4
4
|
export default class List extends BaseCommand<typeof List> {
|
|
5
5
|
static enableJsonFlag: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../../../src/commands/function/trigger/list.ts"],"names":[],"mappings":"AAOA,OAAO,
|
|
1
|
+
{"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../../../src/commands/function/trigger/list.ts"],"names":[],"mappings":"AAOA,OAAO,EAAS,KAAK,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE1D,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAElD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C,MAAM,CAAC,OAAO,OAAO,IAAK,SAAQ,WAAW,CAAC,OAAO,IAAI,CAAC;IACxD,OAAgB,cAAc,UAAQ;IACtC,OAAgB,WAAW,SAA+B;IAC1D,OAAgB,KAAK;;;;;;;;;;;;;;;MAMnB;IAEI,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC;CAuB1B;AAGD,eAAO,MAAM,aAAa,cAAe,eAAe,EAAE,WAAW,YAAY,SAahF,CAAC"}
|
|
@@ -3,10 +3,9 @@
|
|
|
3
3
|
//
|
|
4
4
|
import { Flags, ux } from '@oclif/core';
|
|
5
5
|
import chalk from 'chalk';
|
|
6
|
-
import {
|
|
6
|
+
import { table } from '@dxos/cli-base';
|
|
7
7
|
import { Filter } from '@dxos/client/echo';
|
|
8
|
-
import { FunctionTrigger } from '@dxos/functions
|
|
9
|
-
import { omit } from '@dxos/log';
|
|
8
|
+
import { FunctionTrigger } from '@dxos/functions';
|
|
10
9
|
import { BaseCommand } from '../../../base';
|
|
11
10
|
class List extends BaseCommand {
|
|
12
11
|
async run() {
|
|
@@ -48,7 +47,6 @@ export const printTriggers = (functions, options) => {
|
|
|
48
47
|
enabled: { get: (row) => (row.enabled ? `${chalk.green('✔')}` : '') },
|
|
49
48
|
function: {},
|
|
50
49
|
spec: { get: (row) => row.spec.type },
|
|
51
|
-
meta: { get: (row) => stringify(omit(row.spec, 'type')) },
|
|
52
50
|
}, options));
|
|
53
51
|
};
|
|
54
52
|
//# sourceMappingURL=list.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list.js","sourceRoot":"","sources":["../../../../../src/commands/function/trigger/list.ts"],"names":[],"mappings":"AAAA,EAAE;AACF,0BAA0B;AAC1B,EAAE;AAEF,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"list.js","sourceRoot":"","sources":["../../../../../src/commands/function/trigger/list.ts"],"names":[],"mappings":"AAAA,EAAE;AACF,0BAA0B;AAC1B,EAAE;AAEF,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,KAAK,EAAqB,MAAM,gBAAgB,CAAC;AAC1D,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAElD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C,MAAqB,IAAK,SAAQ,WAAwB;IAWxD,KAAK,CAAC,GAAG;QACP,OAAO,MAAM,IAAI,CAAC,aAAa,CAC7B,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;YAClB,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,MAAM,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;YACzF,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,EAAG,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;YAC9G,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,SAAS,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;gBACxE,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;oBAC/B,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;wBACtB,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;oBACzB,CAAC;yBAAM,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;wBAC9B,OAAO,CAAC,OAAO,GAAG,KAAK,CAAC;oBAC1B,CAAC;gBACH,CAAC;YACH,CAAC;YACD,MAAM,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;YACvB,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;gBACrB,aAAa,CAAC,QAAQ,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;YAC7D,CAAC;YACD,OAAO,QAAQ,CAAC;QAClB,CAAC,EACD,EAAE,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC,eAAe,CAAC,EAAE,CAC1D,CAAC;IACJ,CAAC;;AAhCe,mBAAc,GAAG,IAAI,CAAC;AACtB,gBAAW,GAAG,2BAA2B,CAAC;AAC1C,UAAK,GAAG;IACtB,GAAG,WAAW,CAAC,KAAK;IACpB,EAAE,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,YAAY,EAAE,CAAC;IAC/C,MAAM,EAAE,KAAK,CAAC,OAAO,CAAC,EAAE,WAAW,EAAE,mBAAmB,EAAE,CAAC;IAC3D,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,EAAE,WAAW,EAAE,oBAAoB,EAAE,CAAC;IAC7D,QAAQ,EAAE,KAAK,CAAC,OAAO,EAAE;CAC1B,CAAC;eATiB,IAAI;AAoCzB,4BAA4B;AAC5B,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,SAA4B,EAAE,OAAqB,EAAE,EAAE;IACnF,EAAE,CAAC,MAAM,CACP,KAAK,CACH,SAAS,EACT;QACE,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE;QACrC,OAAO,EAAE,EAAE,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE;QACrE,QAAQ,EAAE,EAAE;QACZ,IAAI,EAAE,EAAE,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE;KACtC,EACD,OAAO,CACR,CACF,CAAC;AACJ,CAAC,CAAC"}
|
|
@@ -5,9 +5,9 @@ export default class Upload extends BaseCommand<typeof Upload> {
|
|
|
5
5
|
static flags: {
|
|
6
6
|
name: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
7
7
|
version: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
8
|
-
|
|
9
|
-
objectId: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
8
|
+
composerScript: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
10
9
|
functionId: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
10
|
+
spaceKey: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
11
11
|
json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
12
12
|
verbose: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
13
13
|
'dry-run': import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
@@ -23,6 +23,11 @@ export default class Upload extends BaseCommand<typeof Upload> {
|
|
|
23
23
|
file: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
|
|
24
24
|
};
|
|
25
25
|
run(): Promise<any>;
|
|
26
|
+
private _loadScript;
|
|
27
|
+
private _loadFunctionObject;
|
|
28
|
+
private _upload;
|
|
29
|
+
private _updateFunctionObject;
|
|
30
|
+
private _updateComposerScript;
|
|
26
31
|
private _getNextVersion;
|
|
27
32
|
}
|
|
28
33
|
//# sourceMappingURL=upload.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"upload.d.ts","sourceRoot":"","sources":["../../../../src/commands/function/upload.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"upload.d.ts","sourceRoot":"","sources":["../../../../src/commands/function/upload.ts"],"names":[],"mappings":"AAoBA,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAKzC,MAAM,CAAC,OAAO,OAAO,MAAO,SAAQ,WAAW,CAAC,OAAO,MAAM,CAAC;IAC5D,OAAgB,cAAc,UAAQ;IACtC,OAAgB,WAAW,SAA2B;IAEtD,OAAgB,KAAK;;;;;;;;;;;;;;;;MAOnB;IAEF,OAAgB,IAAI;;MAElB;IAEI,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC;YAwBX,WAAW;YAgBX,mBAAmB;YAcnB,OAAO;IAsBrB,OAAO,CAAC,qBAAqB;YAgBf,qBAAqB;YA6BrB,eAAe;CAW9B"}
|
|
@@ -3,117 +3,117 @@
|
|
|
3
3
|
//
|
|
4
4
|
import { Args, Flags } from '@oclif/core';
|
|
5
5
|
import fs from 'node:fs';
|
|
6
|
+
import { basename } from 'node:path';
|
|
7
|
+
import path from 'path';
|
|
6
8
|
import { asyncTimeout } from '@dxos/async';
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
9
|
+
import { CollectionType } from '@dxos/cli-composer';
|
|
10
|
+
import { getMeta, live, makeRef } from '@dxos/client/echo';
|
|
11
|
+
import { FunctionType, ScriptType, makeFunctionUrl, setUserFunctionUrlInMetadata } from '@dxos/functions';
|
|
12
|
+
import { incrementSemverPatch, uploadWorkerFunction } from '@dxos/functions/edge';
|
|
10
13
|
import { invariant } from '@dxos/invariant';
|
|
11
|
-
import {
|
|
14
|
+
import { DataType } from '@dxos/schema';
|
|
12
15
|
import { BaseCommand } from '../../base';
|
|
16
|
+
import { bundleScript, findFunctionByDeploymentId } from '../../util';
|
|
13
17
|
// TODO: move to cli-composer
|
|
14
18
|
class Upload extends BaseCommand {
|
|
15
19
|
async run() {
|
|
16
|
-
|
|
20
|
+
const { scriptFileContent, bundledScript } = await this._loadScript();
|
|
21
|
+
return this.execWithSpace(async ({ client, space }) => {
|
|
22
|
+
client.addTypes([FunctionType]);
|
|
23
|
+
const identity = client.halo.identity.get();
|
|
24
|
+
invariant(identity, 'Identity not available');
|
|
25
|
+
const existingFunctionObject = await this._loadFunctionObject(space);
|
|
26
|
+
const uploadResult = await this._upload(client, space, existingFunctionObject, bundledScript);
|
|
27
|
+
const functionObject = this._updateFunctionObject(space, existingFunctionObject, uploadResult);
|
|
28
|
+
if (this.flags.composerScript) {
|
|
29
|
+
await this._updateComposerScript(client, space, functionObject, basename(this.args.file), scriptFileContent);
|
|
30
|
+
}
|
|
31
|
+
}, { spaceKeys: this.flags.spaceKey ? [this.flags.spaceKey] : undefined });
|
|
32
|
+
}
|
|
33
|
+
async _loadScript() {
|
|
34
|
+
var _a, _b;
|
|
35
|
+
let scriptFileContent;
|
|
17
36
|
try {
|
|
18
|
-
|
|
37
|
+
scriptFileContent = fs.readFileSync(this.args.file, 'utf8');
|
|
19
38
|
}
|
|
20
39
|
catch (err) {
|
|
21
40
|
this.error(`Error reading file ${this.args.file}: ${err.message}`);
|
|
22
41
|
}
|
|
23
|
-
const
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
if (this.flags.verbose) {
|
|
80
|
-
this.log(`Updated source in ${this.flags.spaceKey}/${this.flags.objectId} (${existingObject.source.target.id})`);
|
|
81
|
-
}
|
|
82
|
-
if (!functionUrlFromExistingObject) {
|
|
83
|
-
setUserFunctionUrlInMetadata(getMeta(existingObject), `/${space.id}/${result.functionId}`);
|
|
84
|
-
}
|
|
85
|
-
else {
|
|
86
|
-
if (existingFunctionId !== result.functionId) {
|
|
87
|
-
this.error('functionId mismatch');
|
|
88
|
-
}
|
|
89
|
-
}
|
|
42
|
+
const bundleResult = await bundleScript(scriptFileContent);
|
|
43
|
+
if (bundleResult.error || !bundleResult.bundle) {
|
|
44
|
+
this.error(`Error bundling script ${this.args.file}: ${(_b = (_a = bundleResult.error) === null || _a === void 0 ? void 0 : _a.message) !== null && _b !== void 0 ? _b : 'empty output'}`);
|
|
45
|
+
}
|
|
46
|
+
return { scriptFileContent, bundledScript: bundleResult.bundle };
|
|
47
|
+
}
|
|
48
|
+
async _loadFunctionObject(space) {
|
|
49
|
+
const matchingFunction = await findFunctionByDeploymentId(space, this.flags.functionId);
|
|
50
|
+
if (this.flags.functionId && !matchingFunction) {
|
|
51
|
+
this.warn(`Function ECHO object not found for ${this.flags.functionId}`);
|
|
52
|
+
}
|
|
53
|
+
if (this.flags.verbose && matchingFunction) {
|
|
54
|
+
this.log(`Function ECHO object found, ID: ${matchingFunction.id}`);
|
|
55
|
+
}
|
|
56
|
+
return matchingFunction;
|
|
57
|
+
}
|
|
58
|
+
async _upload(client, space, functionObject, bundledSource) {
|
|
59
|
+
let result;
|
|
60
|
+
try {
|
|
61
|
+
result = await asyncTimeout(uploadWorkerFunction({
|
|
62
|
+
client,
|
|
63
|
+
spaceId: space.id,
|
|
64
|
+
version: await this._getNextVersion(functionObject),
|
|
65
|
+
functionId: this.flags.functionId,
|
|
66
|
+
name: this.flags.name,
|
|
67
|
+
source: bundledSource,
|
|
68
|
+
}), 10000);
|
|
69
|
+
invariant(result.functionId, 'Upload failed.');
|
|
70
|
+
this.log(`Uploaded function ${result.functionId}, version ${result.version}`);
|
|
71
|
+
return result;
|
|
72
|
+
}
|
|
73
|
+
catch (err) {
|
|
74
|
+
this.error(err.message);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
_updateFunctionObject(space, existingObject, uploadResult) {
|
|
78
|
+
var _a;
|
|
79
|
+
let functionObject = existingObject;
|
|
80
|
+
if (!functionObject) {
|
|
81
|
+
const name = path.basename(this.args.file, path.extname(this.args.file));
|
|
82
|
+
functionObject = space.db.add(live(FunctionType, { name, version: uploadResult.version }));
|
|
83
|
+
}
|
|
84
|
+
functionObject.name = (_a = this.flags.name) !== null && _a !== void 0 ? _a : functionObject.name;
|
|
85
|
+
functionObject.version = uploadResult.version;
|
|
86
|
+
setUserFunctionUrlInMetadata(getMeta(functionObject), makeFunctionUrl(space.id, uploadResult));
|
|
87
|
+
return functionObject;
|
|
88
|
+
}
|
|
89
|
+
async _updateComposerScript(client, space, functionObject, scriptFileName, scriptFileContent) {
|
|
90
|
+
var _a;
|
|
91
|
+
client.addTypes([ScriptType, DataType.Text]);
|
|
92
|
+
if (functionObject.source) {
|
|
93
|
+
const script = await functionObject.source.load();
|
|
94
|
+
const source = await script.source.load();
|
|
95
|
+
source.content = scriptFileContent;
|
|
96
|
+
if (this.flags.verbose) {
|
|
97
|
+
this.log(`Updated source of ${script.id}`);
|
|
90
98
|
}
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
}
|
|
99
|
+
}
|
|
100
|
+
else {
|
|
101
|
+
const sourceObj = space.db.add(live(DataType.Text, { content: scriptFileContent }));
|
|
102
|
+
const obj = space.db.add(live(ScriptType, { name: (_a = this.flags.name) !== null && _a !== void 0 ? _a : scriptFileName, source: makeRef(sourceObj) }));
|
|
103
|
+
functionObject.source = makeRef(obj);
|
|
104
|
+
await makeObjectNavigableInComposer(client, space, obj);
|
|
105
|
+
if (this.flags.verbose) {
|
|
106
|
+
this.log(`Created object, ID: ${obj.id}`);
|
|
100
107
|
}
|
|
101
|
-
};
|
|
102
|
-
if (this.flags.spaceKey) {
|
|
103
|
-
return await this.execWithSpace(async ({ client, space }) => await handleUpload({ client, space }), {
|
|
104
|
-
spaceKeys: [this.flags.spaceKey],
|
|
105
|
-
});
|
|
106
108
|
}
|
|
107
|
-
return await this.execWithClient(async ({ client }) => await handleUpload({ client }));
|
|
108
109
|
}
|
|
109
|
-
async _getNextVersion(
|
|
110
|
-
var _a
|
|
110
|
+
async _getNextVersion(functionObject) {
|
|
111
|
+
var _a;
|
|
111
112
|
if (this.flags.version) {
|
|
112
113
|
return this.flags.version;
|
|
113
114
|
}
|
|
114
|
-
if (
|
|
115
|
-
|
|
116
|
-
return incrementSemverPatch((_b = (_a = objects[0]) === null || _a === void 0 ? void 0 : _a.version) !== null && _b !== void 0 ? _b : '0.0.0');
|
|
115
|
+
if (functionObject) {
|
|
116
|
+
return incrementSemverPatch((_a = functionObject === null || functionObject === void 0 ? void 0 : functionObject.version) !== null && _a !== void 0 ? _a : '0.0.0');
|
|
117
117
|
}
|
|
118
118
|
return '0.0.1';
|
|
119
119
|
}
|
|
@@ -124,15 +124,22 @@ Upload.flags = {
|
|
|
124
124
|
...BaseCommand.flags,
|
|
125
125
|
name: Flags.string({ description: 'Function name.' }),
|
|
126
126
|
version: Flags.string({ description: 'Function version.' }),
|
|
127
|
+
composerScript: Flags.boolean({ description: 'Loads the script into composer.' }),
|
|
128
|
+
functionId: Flags.string({ description: 'Existing UserFunction ID to update.' }),
|
|
127
129
|
spaceKey: Flags.string({ description: 'Space key to create/update Script source in.' }),
|
|
128
|
-
objectId: Flags.string({ description: 'Existing Script Object ID to update.' }),
|
|
129
|
-
functionId: Flags.string({
|
|
130
|
-
description: 'Existing UserFunction ID to update.',
|
|
131
|
-
conflict: ['objectId', 'spaceKey'],
|
|
132
|
-
}),
|
|
133
130
|
};
|
|
134
131
|
Upload.args = {
|
|
135
132
|
file: Args.string({ required: true }),
|
|
136
133
|
};
|
|
137
134
|
export default Upload;
|
|
135
|
+
const makeObjectNavigableInComposer = async (client, space, obj) => {
|
|
136
|
+
const collection = space.properties['dxos.org/type/Collection'];
|
|
137
|
+
if (collection) {
|
|
138
|
+
client.addTypes([CollectionType]);
|
|
139
|
+
const composerCollection = await collection.load();
|
|
140
|
+
if (composerCollection) {
|
|
141
|
+
composerCollection.objects.push(makeRef(obj));
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
};
|
|
138
145
|
//# sourceMappingURL=upload.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"upload.js","sourceRoot":"","sources":["../../../../src/commands/function/upload.ts"],"names":[],"mappings":"AAAA,EAAE;AACF,0BAA0B;AAC1B,EAAE;AAEF,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"upload.js","sourceRoot":"","sources":["../../../../src/commands/function/upload.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { BaseCommand } from '../../base';
|
|
2
|
+
export default class Watch extends BaseCommand<typeof Watch> {
|
|
3
|
+
static enableJsonFlag: boolean;
|
|
4
|
+
static description: string;
|
|
5
|
+
static flags: {
|
|
6
|
+
functionId: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
7
|
+
spaceKey: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
8
|
+
json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
9
|
+
verbose: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
10
|
+
'dry-run': import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
11
|
+
profile: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
12
|
+
config: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
13
|
+
timeout: import("@oclif/core/interfaces").OptionFlag<number, import("@oclif/core/interfaces").CustomOptions>;
|
|
14
|
+
target: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
15
|
+
agent: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
16
|
+
'json-log': import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
17
|
+
'json-logfile': import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
18
|
+
};
|
|
19
|
+
static args: {
|
|
20
|
+
file: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
|
|
21
|
+
};
|
|
22
|
+
run(): Promise<any>;
|
|
23
|
+
private _loadFunctionObject;
|
|
24
|
+
private _isRuntimeReady;
|
|
25
|
+
private _uploadSource;
|
|
26
|
+
private _logWithTime;
|
|
27
|
+
private _printUploadInstruction;
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=watch.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"watch.d.ts","sourceRoot":"","sources":["../../../../src/commands/function/watch.ts"],"names":[],"mappings":"AAYA,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAMzC,MAAM,CAAC,OAAO,OAAO,KAAM,SAAQ,WAAW,CAAC,OAAO,KAAK,CAAC;IAC1D,OAAgB,cAAc,UAAQ;IACtC,OAAgB,WAAW,SAAwC;IAEnE,OAAgB,KAAK;;;;;;;;;;;;;MAInB;IAEF,OAAgB,IAAI;;MAElB;IAEI,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC;YAgDX,mBAAmB;YAkBnB,eAAe;YA6Bf,aAAa;IAe3B,OAAO,CAAC,YAAY;IAIpB,OAAO,CAAC,uBAAuB;CAIhC"}
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Copyright 2024 DXOS.org
|
|
3
|
+
//
|
|
4
|
+
import { Args, Flags } from '@oclif/core';
|
|
5
|
+
import fs from 'fs';
|
|
6
|
+
import { debounce, Trigger } from '@dxos/async';
|
|
7
|
+
import { FunctionType, ScriptType } from '@dxos/functions';
|
|
8
|
+
import { DataType } from '@dxos/schema';
|
|
9
|
+
import { BaseCommand } from '../../base';
|
|
10
|
+
import { bundleScript } from '../../util';
|
|
11
|
+
import { findFunctionByDeploymentId } from '../../util/function/lookup';
|
|
12
|
+
const LOCAL_FUNCTIONS_RUNTIME_URL = 'http://127.0.0.1:3123';
|
|
13
|
+
class Watch extends BaseCommand {
|
|
14
|
+
async run() {
|
|
15
|
+
return this.execWithSpace(async ({ client, space }) => {
|
|
16
|
+
client.addTypes([DataType.Text, ScriptType, FunctionType]);
|
|
17
|
+
const { scriptContent } = await this._loadFunctionObject(space);
|
|
18
|
+
this._logWithTime(`Watching for changes in ${this.args.file}`);
|
|
19
|
+
const updateSource = debounce(async () => {
|
|
20
|
+
const readinessCheckResult = await this._isRuntimeReady();
|
|
21
|
+
if (!readinessCheckResult.ready) {
|
|
22
|
+
this._logWithTime(`Functions runtime readiness check failed: ${readinessCheckResult.reason}`);
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
const source = fs.readFileSync(this.args.file, 'utf-8');
|
|
26
|
+
const bundleResult = await bundleScript(source);
|
|
27
|
+
if (!bundleResult.bundle) {
|
|
28
|
+
this._logWithTime('Source bundling failed, waiting for new changes...');
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
const updateResult = await this._uploadSource(bundleResult.bundle);
|
|
32
|
+
if (updateResult.success) {
|
|
33
|
+
if (scriptContent) {
|
|
34
|
+
scriptContent.content = source;
|
|
35
|
+
}
|
|
36
|
+
this._logWithTime('Worker source updated');
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
this._logWithTime(`Failed to update worker source, reason: ${updateResult.reason}`);
|
|
40
|
+
}
|
|
41
|
+
}, 2000);
|
|
42
|
+
const trigger = new Trigger();
|
|
43
|
+
fs.watch(this.args.file, (event) => {
|
|
44
|
+
if (event === 'rename') {
|
|
45
|
+
trigger.wake();
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
updateSource();
|
|
49
|
+
}
|
|
50
|
+
});
|
|
51
|
+
await trigger.wait();
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
async _loadFunctionObject(space) {
|
|
55
|
+
const matchingFunction = await findFunctionByDeploymentId(space, this.flags.functionId);
|
|
56
|
+
if (!matchingFunction) {
|
|
57
|
+
this.log(`Function with id ${this.flags.functionId} not found in space ${space.id}.`);
|
|
58
|
+
this._printUploadInstruction();
|
|
59
|
+
this.exit();
|
|
60
|
+
}
|
|
61
|
+
if (!matchingFunction.source) {
|
|
62
|
+
return { functionObject: matchingFunction };
|
|
63
|
+
}
|
|
64
|
+
const script = await matchingFunction.source.load();
|
|
65
|
+
const content = await script.source.load();
|
|
66
|
+
return { functionObject: matchingFunction, scriptContent: content };
|
|
67
|
+
}
|
|
68
|
+
async _isRuntimeReady() {
|
|
69
|
+
var _a, _b;
|
|
70
|
+
try {
|
|
71
|
+
const result = await fetch(`${LOCAL_FUNCTIONS_RUNTIME_URL}/sanity`);
|
|
72
|
+
if (result.status !== 200) {
|
|
73
|
+
this.log(`Function runtime sanity check failed: ${result.statusText}`);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
catch (err) {
|
|
77
|
+
return { ready: false, reason: `Functions runtime not running, expected on ${LOCAL_FUNCTIONS_RUNTIME_URL}` };
|
|
78
|
+
}
|
|
79
|
+
try {
|
|
80
|
+
const functionId = this.flags.functionId;
|
|
81
|
+
const result = await fetch(`${LOCAL_FUNCTIONS_RUNTIME_URL}/workers/${functionId}/versions`);
|
|
82
|
+
if (result.status !== 200) {
|
|
83
|
+
return { ready: false, reason: `Deployment status check failed: ${result.statusText}` };
|
|
84
|
+
}
|
|
85
|
+
const bodyJson = await result.json();
|
|
86
|
+
if (!((_a = bodyJson.versions) === null || _a === void 0 ? void 0 : _a.length)) {
|
|
87
|
+
return { ready: false, reason: `Function with id ${functionId} is not deployed.` };
|
|
88
|
+
}
|
|
89
|
+
return { ready: true };
|
|
90
|
+
}
|
|
91
|
+
catch (err) {
|
|
92
|
+
return { ready: false, reason: `Deployment status check failed, reason: ${(_b = err.message) !== null && _b !== void 0 ? _b : 'unknown'}` };
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
async _uploadSource(bundledScript) {
|
|
96
|
+
var _a;
|
|
97
|
+
try {
|
|
98
|
+
const result = await fetch(`${LOCAL_FUNCTIONS_RUNTIME_URL}/workers/${this.flags.functionId}/source`, {
|
|
99
|
+
method: 'PUT',
|
|
100
|
+
body: Buffer.from(bundledScript),
|
|
101
|
+
});
|
|
102
|
+
if (result.status !== 200) {
|
|
103
|
+
return { success: false, reason: result.statusText };
|
|
104
|
+
}
|
|
105
|
+
return { success: true };
|
|
106
|
+
}
|
|
107
|
+
catch (err) {
|
|
108
|
+
return { success: false, reason: (_a = err.message) !== null && _a !== void 0 ? _a : 'unknown' };
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
_logWithTime(message) {
|
|
112
|
+
this.log(`[${new Date().toTimeString().split(' ')[0]}] ${message}`);
|
|
113
|
+
}
|
|
114
|
+
_printUploadInstruction() {
|
|
115
|
+
const message = ['Try running:', '', 'dx function upload scriptFilePath'].join('\n');
|
|
116
|
+
this.log(message);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
Watch.enableJsonFlag = true;
|
|
120
|
+
Watch.description = 'Hot reload script on file changes.';
|
|
121
|
+
Watch.flags = {
|
|
122
|
+
...BaseCommand.flags,
|
|
123
|
+
functionId: Flags.string({ description: 'Existing UserFunction ID to update.', required: true }),
|
|
124
|
+
spaceKey: Flags.string({ description: 'Space key to create/update Script source in.' }),
|
|
125
|
+
};
|
|
126
|
+
Watch.args = {
|
|
127
|
+
file: Args.string({ required: true }),
|
|
128
|
+
};
|
|
129
|
+
export default Watch;
|
|
130
|
+
//# sourceMappingURL=watch.js.map
|