@dxos/cli 0.6.14-staging.c117501 → 0.7.1-staging.599df14

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dxos/cli",
3
- "version": "0.6.14-staging.c117501",
3
+ "version": "0.7.1-staging.599df14",
4
4
  "description": "DXOS CLI",
5
5
  "keywords": [
6
6
  "dxos",
@@ -53,34 +53,30 @@
53
53
  "react": "~18.2.0",
54
54
  "ws": "^8.14.2",
55
55
  "wtfnode": "^0.9.1",
56
- "@dxos/agent": "0.6.14-staging.c117501",
57
- "@dxos/bare-template": "0.6.14-staging.c117501",
58
- "@dxos/async": "0.6.14-staging.c117501",
59
- "@dxos/cli-base": "0.6.14-staging.c117501",
60
- "@dxos/cli-composer": "0.6.14-staging.c117501",
61
- "@dxos/client-protocol": "0.6.14-staging.c117501",
62
- "@dxos/client": "0.6.14-staging.c117501",
63
- "@dxos/client-services": "0.6.14-staging.c117501",
64
- "@dxos/config": "0.6.14-staging.c117501",
65
- "@dxos/context": "0.6.14-staging.c117501",
66
- "@dxos/debug": "0.6.14-staging.c117501",
67
- "@dxos/echo-schema": "0.6.14-staging.c117501",
68
- "@dxos/functions": "0.6.14-staging.c117501",
69
- "@dxos/hello-template": "0.6.14-staging.c117501",
70
- "@dxos/log": "0.6.14-staging.c117501",
71
- "@dxos/invariant": "0.6.14-staging.c117501",
72
- "@dxos/network-manager": "0.6.14-staging.c117501",
73
- "@dxos/node-std": "0.6.14-staging.c117501",
74
- "@dxos/observability": "0.6.14-staging.c117501",
75
- "@dxos/plate": "0.6.14-staging.c117501",
76
- "@dxos/plugin-markdown": "0.6.14-staging.c117501",
77
- "@dxos/process": "0.6.14-staging.c117501",
78
- "@dxos/protocols": "0.6.14-staging.c117501",
79
- "@dxos/plugin-script": "0.6.14-staging.c117501",
80
- "@dxos/rpc": "0.6.14-staging.c117501",
81
- "@dxos/tasks-template": "0.6.14-staging.c117501",
82
- "@dxos/util": "0.6.14-staging.c117501",
83
- "@dxos/random": "0.6.14-staging.c117501"
56
+ "@dxos/agent": "0.7.1-staging.599df14",
57
+ "@dxos/async": "0.7.1-staging.599df14",
58
+ "@dxos/cli-base": "0.7.1-staging.599df14",
59
+ "@dxos/cli-composer": "0.7.1-staging.599df14",
60
+ "@dxos/client": "0.7.1-staging.599df14",
61
+ "@dxos/client-services": "0.7.1-staging.599df14",
62
+ "@dxos/config": "0.7.1-staging.599df14",
63
+ "@dxos/client-protocol": "0.7.1-staging.599df14",
64
+ "@dxos/debug": "0.7.1-staging.599df14",
65
+ "@dxos/context": "0.7.1-staging.599df14",
66
+ "@dxos/echo-schema": "0.7.1-staging.599df14",
67
+ "@dxos/functions": "0.7.1-staging.599df14",
68
+ "@dxos/invariant": "0.7.1-staging.599df14",
69
+ "@dxos/log": "0.7.1-staging.599df14",
70
+ "@dxos/network-manager": "0.7.1-staging.599df14",
71
+ "@dxos/node-std": "0.7.1-staging.599df14",
72
+ "@dxos/observability": "0.7.1-staging.599df14",
73
+ "@dxos/plugin-markdown": "0.7.1-staging.599df14",
74
+ "@dxos/plugin-script": "0.7.1-staging.599df14",
75
+ "@dxos/process": "0.7.1-staging.599df14",
76
+ "@dxos/protocols": "0.7.1-staging.599df14",
77
+ "@dxos/random": "0.7.1-staging.599df14",
78
+ "@dxos/rpc": "0.7.1-staging.599df14",
79
+ "@dxos/util": "0.7.1-staging.599df14"
84
80
  },
85
81
  "devDependencies": {
86
82
  "@oclif/test": "^4.1.0",
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=app.node.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"app.node.test.d.ts","sourceRoot":"","sources":["../../../../src/commands/app/app.node.test.ts"],"names":[],"mappings":""}
@@ -1,22 +0,0 @@
1
- //
2
- // Copyright 2023 DXOS.org
3
- //
4
- import fs from 'node:fs';
5
- import path from 'node:path';
6
- import { afterEach, beforeEach, describe, expect, test } from 'vitest';
7
- import { runCommand } from '@dxos/cli-base';
8
- describe('App', () => {
9
- const tmpFolder = './tmp/packages/devtools/cli/';
10
- const cleanUp = () => {
11
- fs.rmSync(tmpFolder, { recursive: true, force: true });
12
- };
13
- beforeEach(() => cleanUp());
14
- afterEach(() => cleanUp());
15
- // TODO(mykola): Fails on CI.
16
- test.skip('create', async () => {
17
- const appName = 'test-app';
18
- void runCommand(`app create ${appName}`, tmpFolder);
19
- await expect.poll(() => fs.existsSync(path.join(tmpFolder, appName, 'dx.yml'))).toBe(true);
20
- });
21
- });
22
- //# sourceMappingURL=app.node.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"app.node.test.js","sourceRoot":"","sources":["../../../../src/commands/app/app.node.test.ts"],"names":[],"mappings":"AAAA,EAAE;AACF,0BAA0B;AAC1B,EAAE;AAEF,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAEvE,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAE5C,QAAQ,CAAC,KAAK,EAAE,GAAG,EAAE;IACnB,MAAM,SAAS,GAAG,8BAA8B,CAAC;IACjD,MAAM,OAAO,GAAG,GAAG,EAAE;QACnB,EAAE,CAAC,MAAM,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACzD,CAAC,CAAC;IAEF,UAAU,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC;IAC5B,SAAS,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC;IAE3B,6BAA6B;IAC7B,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,IAAI,EAAE;QAC7B,MAAM,OAAO,GAAG,UAAU,CAAC;QAC3B,KAAK,UAAU,CAAC,cAAc,OAAO,EAAE,EAAE,SAAS,CAAC,CAAC;QACpD,MAAM,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC7F,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -1,25 +0,0 @@
1
- import { BaseCommand } from '../../base';
2
- export declare const APP_TEMPLATES: string[];
3
- export default class Create extends BaseCommand<typeof Create> {
4
- static description: string;
5
- static args: {
6
- name: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
7
- };
8
- static flags: {
9
- tag: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
10
- template: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
11
- interactive: import("@oclif/core/interfaces").BooleanFlag<boolean>;
12
- json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
13
- verbose: import("@oclif/core/interfaces").BooleanFlag<boolean>;
14
- 'dry-run': import("@oclif/core/interfaces").BooleanFlag<boolean>;
15
- profile: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
16
- config: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
17
- timeout: import("@oclif/core/interfaces").OptionFlag<number, import("@oclif/core/interfaces").CustomOptions>;
18
- target: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
19
- agent: import("@oclif/core/interfaces").BooleanFlag<boolean>;
20
- 'json-log': import("@oclif/core/interfaces").BooleanFlag<boolean>;
21
- 'json-logfile': import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
22
- };
23
- run(): Promise<any>;
24
- }
25
- //# sourceMappingURL=create.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../../../src/commands/app/create.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEzC,eAAO,MAAM,aAAa,UAA6B,CAAC;AAYxD,MAAM,CAAC,OAAO,OAAO,MAAO,SAAQ,WAAW,CAAC,OAAO,MAAM,CAAC;IAC5D,OAAgB,WAAW,SAAmC;IAC9D,OAAgB,IAAI;;MAElB;IAEF,OAAgB,KAAK;;;;;;;;;;;;;;MAgBnB;IAEI,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC;CA6C1B"}
@@ -1,85 +0,0 @@
1
- //
2
- // Copyright 2022 DXOS.org
3
- //
4
- import { Args, Flags } from '@oclif/core';
5
- import { promises as fs } from 'fs';
6
- import os from 'os';
7
- import { cwd } from 'process';
8
- import { exec } from '@dxos/process';
9
- import { BaseCommand } from '../../base';
10
- export const APP_TEMPLATES = ['hello', 'bare', 'tasks'];
11
- // TODO(zhenyasav): factor this out into @dxos/fs or something (along with 'exists' from plate?)
12
- const isDirEmpty = async (baseDir) => {
13
- const dirIter = await fs.opendir(baseDir);
14
- const { done } = await dirIter[Symbol.asyncIterator]().next();
15
- if (!done) {
16
- await dirIter.close();
17
- }
18
- return !!done;
19
- };
20
- class Create extends BaseCommand {
21
- async run() {
22
- const { default: bare, isDxosMonorepoSync } = await import('@dxos/bare-template');
23
- const { default: hello } = await import('@dxos/hello-template');
24
- const { default: tasks } = await import('@dxos/tasks-template');
25
- const { fileExists } = await import('@dxos/plate');
26
- const { name } = this.args;
27
- const { template, interactive, verbose } = this.flags;
28
- const outputDirectory = `${cwd()}/${name}`;
29
- const outputDirExists = await fileExists(outputDirectory);
30
- const isOutputEmpty = outputDirExists && (await isDirEmpty(outputDirectory));
31
- if (outputDirExists && !isOutputEmpty) {
32
- this.catch(`Output directory ${outputDirectory} is not empty`);
33
- }
34
- // TODO:: make sure this exists in the @dxos/create packages too
35
- if (os.platform() === 'darwin') {
36
- try {
37
- await exec('which xcrun');
38
- }
39
- catch (_a) {
40
- this.catch('XCode Command Line Tools not found. Please run "xcode-select --install" first.');
41
- }
42
- }
43
- this.log('Creating app...');
44
- const templates = {
45
- bare,
46
- hello,
47
- tasks,
48
- };
49
- const monorepo = isDxosMonorepoSync();
50
- const result = await templates[template].apply({
51
- outputDirectory,
52
- interactive,
53
- verbose,
54
- input: {
55
- monorepo,
56
- name,
57
- createFolder: false,
58
- },
59
- });
60
- void result.apply();
61
- }
62
- }
63
- Create.description = 'Create template applications.';
64
- Create.args = {
65
- name: Args.string({ required: true, description: 'App name.' }),
66
- };
67
- Create.flags = {
68
- ...BaseCommand.flags,
69
- tag: Flags.string({
70
- description: 'Git tag or branch of the DXOS repo to checkout.',
71
- }),
72
- template: Flags.string({
73
- char: 't',
74
- description: 'Template to use when creating the project.',
75
- default: 'hello',
76
- options: APP_TEMPLATES,
77
- }),
78
- interactive: Flags.boolean({
79
- char: 'i',
80
- description: 'Customize app template options via interactive prompt.',
81
- default: false,
82
- }),
83
- };
84
- export default Create;
85
- //# sourceMappingURL=create.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"create.js","sourceRoot":"","sources":["../../../../src/commands/app/create.ts"],"names":[],"mappings":"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"}
@@ -1,24 +0,0 @@
1
- import { BaseCommand } from '../../base';
2
- /**
3
- * @deprecated
4
- */
5
- export default class List extends BaseCommand<typeof List> {
6
- static state: string;
7
- static enableJsonFlag: boolean;
8
- static description: string;
9
- static flags: {
10
- extended: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
11
- json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
12
- verbose: import("@oclif/core/interfaces").BooleanFlag<boolean>;
13
- 'dry-run': import("@oclif/core/interfaces").BooleanFlag<boolean>;
14
- profile: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
15
- config: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
16
- timeout: import("@oclif/core/interfaces").OptionFlag<number, import("@oclif/core/interfaces").CustomOptions>;
17
- target: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
18
- agent: import("@oclif/core/interfaces").BooleanFlag<boolean>;
19
- 'json-log': import("@oclif/core/interfaces").BooleanFlag<boolean>;
20
- 'json-logfile': import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
21
- };
22
- run(): Promise<any>;
23
- }
24
- //# sourceMappingURL=list.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../../src/commands/app/list.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAGzC;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,IAAK,SAAQ,WAAW,CAAC,OAAO,IAAI,CAAC;IACxD,OAAgB,KAAK,SAAgB;IACrC,OAAgB,cAAc,UAAQ;IACtC,OAAgB,WAAW,SAA6B;IACxD,OAAgB,KAAK;;;;;;;;;;;;MAGnB;IAEI,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC;CAO1B"}
@@ -1,28 +0,0 @@
1
- //
2
- // Copyright 2023 DXOS.org
3
- //
4
- import { TABLE_FLAGS } from '@dxos/cli-base';
5
- import { invariant } from '@dxos/invariant';
6
- import { BaseCommand } from '../../base';
7
- import { printModules } from '../../util';
8
- /**
9
- * @deprecated
10
- */
11
- class List extends BaseCommand {
12
- async run() {
13
- return await this.execWithPublisher(async (publisher) => {
14
- const listResponse = await publisher.rpc.list();
15
- invariant(listResponse.modules, 'Unable to list deploymemts.');
16
- await printModules(listResponse.modules, this.flags);
17
- });
18
- }
19
- }
20
- List.state = 'deprecated';
21
- List.enableJsonFlag = true;
22
- List.description = 'List apps (deprecated).';
23
- List.flags = {
24
- ...BaseCommand.flags,
25
- ...TABLE_FLAGS,
26
- };
27
- export default List;
28
- //# sourceMappingURL=list.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"list.js","sourceRoot":"","sources":["../../../../src/commands/app/list.ts"],"names":[],"mappings":"AAAA,EAAE;AACF,0BAA0B;AAC1B,EAAE;AAEF,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,YAAY,EAAyB,MAAM,YAAY,CAAC;AAEjE;;GAEG;AACH,MAAqB,IAAK,SAAQ,WAAwB;IASxD,KAAK,CAAC,GAAG;QACP,OAAO,MAAM,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,SAA2B,EAAE,EAAE;YACxE,MAAM,YAAY,GAAG,MAAM,SAAS,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;YAChD,SAAS,CAAC,YAAY,CAAC,OAAQ,EAAE,6BAA6B,CAAC,CAAC;YAChE,MAAM,YAAY,CAAC,YAAY,CAAC,OAAQ,EAAE,IAAI,CAAC,KAAY,CAAC,CAAC;QAC/D,CAAC,CAAC,CAAC;IACL,CAAC;;AAde,UAAK,GAAG,YAAY,CAAC;AACrB,mBAAc,GAAG,IAAI,CAAC;AACtB,gBAAW,GAAG,yBAAyB,CAAC;AACxC,UAAK,GAAG;IACtB,GAAG,WAAW,CAAC,KAAK;IACpB,GAAG,WAAW;CACf,CAAC;eAPiB,IAAI"}
@@ -1,24 +0,0 @@
1
- import { BaseCommand } from '../../base';
2
- export default class Open extends BaseCommand<typeof Open> {
3
- static enableJsonFlag: boolean;
4
- static description: string;
5
- static args: {
6
- url: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
7
- };
8
- static flags: {
9
- instances: import("@oclif/core/interfaces").OptionFlag<number, import("@oclif/core/interfaces").CustomOptions>;
10
- invite: import("@oclif/core/interfaces").BooleanFlag<boolean>;
11
- json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
12
- verbose: import("@oclif/core/interfaces").BooleanFlag<boolean>;
13
- 'dry-run': import("@oclif/core/interfaces").BooleanFlag<boolean>;
14
- profile: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
15
- config: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
16
- timeout: import("@oclif/core/interfaces").OptionFlag<number, import("@oclif/core/interfaces").CustomOptions>;
17
- target: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
18
- agent: import("@oclif/core/interfaces").BooleanFlag<boolean>;
19
- 'json-log': import("@oclif/core/interfaces").BooleanFlag<boolean>;
20
- 'json-logfile': import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
21
- };
22
- run(): Promise<any>;
23
- }
24
- //# sourceMappingURL=open.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"open.d.ts","sourceRoot":"","sources":["../../../../src/commands/app/open.ts"],"names":[],"mappings":"AAYA,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,SAAgE;IAE3F,OAAgB,IAAI;;MAMlB;IAEF,OAAgB,KAAK;;;;;;;;;;;;;MAUnB;IAEI,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC;CAkD1B"}
@@ -1,79 +0,0 @@
1
- //
2
- // Copyright 2022 DXOS.org
3
- //
4
- var _a, _b;
5
- import { Args, Flags, ux } from '@oclif/core';
6
- import { chromium } from '@playwright/test';
7
- import chalk from 'chalk';
8
- import { hostInvitation } from '@dxos/cli-base';
9
- import { Invitation, InvitationEncoder } from '@dxos/client/invitations';
10
- import { range } from '@dxos/util';
11
- import { BaseCommand } from '../../base';
12
- class Open extends (_b = BaseCommand) {
13
- async run() {
14
- await this.execWithClient(async ({ client }) => {
15
- if (!client.halo.identity.get()) {
16
- this.log(chalk `{red Profile not initialized.}`);
17
- return {};
18
- }
19
- // eslint-disable-next-line @typescript-eslint/no-var-requires
20
- // const { chromium } = require('playwright');
21
- const browser = await chromium.launch({ headless: false });
22
- const pages = await Promise.all(range(this.flags.instances).map(async () => {
23
- const context = await browser.newContext();
24
- return await context.newPage();
25
- }));
26
- if (this.flags.invite) {
27
- const observable = client.halo.share({
28
- type: Invitation.Type.INTERACTIVE,
29
- authMethod: Invitation.AuthMethod.NONE,
30
- multiUse: true,
31
- });
32
- const invitationSuccess = hostInvitation({
33
- observable,
34
- callbacks: {
35
- onConnecting: async () => {
36
- const invitationCode = InvitationEncoder.encode(observable.get());
37
- pages.forEach((page) => {
38
- const url = new URL(this.args.url);
39
- url.searchParams.append('deviceInvitationCode', invitationCode);
40
- void page.goto(url.href);
41
- });
42
- this.log(chalk `\n{blue Invitation}: ${invitationCode}`);
43
- },
44
- },
45
- peersNumber: this.flags.instances,
46
- });
47
- ux.action.start('Waiting for peers to connect');
48
- await invitationSuccess;
49
- ux.action.stop();
50
- }
51
- else {
52
- pages.forEach((page) => page.goto(this.args.url));
53
- }
54
- });
55
- }
56
- }
57
- _a = Open;
58
- Open.enableJsonFlag = true;
59
- Open.description = 'Opens app with provided url and process device invitation.';
60
- Open.args = {
61
- ...Reflect.get(_b, "args", _a),
62
- url: Args.string({
63
- description: 'App URL.',
64
- required: true,
65
- }),
66
- };
67
- Open.flags = {
68
- ...BaseCommand.flags,
69
- instances: Flags.integer({
70
- description: 'Amount of test instances.',
71
- default: 1,
72
- }),
73
- invite: Flags.boolean({
74
- description: 'If `true` proceed device invitation for all instances.',
75
- default: true,
76
- }),
77
- };
78
- export default Open;
79
- //# sourceMappingURL=open.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"open.js","sourceRoot":"","sources":["../../../../src/commands/app/open.ts"],"names":[],"mappings":"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"}
@@ -1,26 +0,0 @@
1
- import { BaseCommand } from '../../base';
2
- /**
3
- * @deprecated
4
- */
5
- export default class Publish extends BaseCommand<typeof Publish> {
6
- static state: string;
7
- static description: string;
8
- static flags: {
9
- configPath: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
10
- accessToken: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
11
- skipExisting: import("@oclif/core/interfaces").BooleanFlag<boolean>;
12
- version: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
13
- json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
14
- verbose: import("@oclif/core/interfaces").BooleanFlag<boolean>;
15
- 'dry-run': import("@oclif/core/interfaces").BooleanFlag<boolean>;
16
- profile: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
17
- config: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
18
- timeout: import("@oclif/core/interfaces").OptionFlag<number, import("@oclif/core/interfaces").CustomOptions>;
19
- target: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
20
- agent: import("@oclif/core/interfaces").BooleanFlag<boolean>;
21
- 'json-log': import("@oclif/core/interfaces").BooleanFlag<boolean>;
22
- 'json-logfile': import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
23
- };
24
- run(): Promise<any>;
25
- }
26
- //# sourceMappingURL=publish.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"publish.d.ts","sourceRoot":"","sources":["../../../../src/commands/app/publish.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAIzC;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,OAAQ,SAAQ,WAAW,CAAC,OAAO,OAAO,CAAC;IAC9D,OAAgB,KAAK,SAAgB;IACrC,OAAgB,WAAW,SAAgC;IAC3D,OAAgB,KAAK;;;;;;;;;;;;;;;MAgBnB;IAEI,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC;CA6C1B"}
@@ -1,73 +0,0 @@
1
- //
2
- // Copyright 2022 DXOS.org
3
- //
4
- import { Flags } from '@oclif/core';
5
- import os from 'os';
6
- import { invariant } from '@dxos/invariant';
7
- import { BaseCommand } from '../../base';
8
- import { loadConfig, publish } from '../../util';
9
- import { build } from '../../util';
10
- /**
11
- * @deprecated
12
- */
13
- class Publish extends BaseCommand {
14
- async run() {
15
- var _a, _b, _c;
16
- const { accessToken, configPath, skipExisting, verbose, version } = this.flags;
17
- const moduleConfig = await loadConfig(configPath);
18
- invariant(moduleConfig.values.package, 'Missing package definition in dx.yml');
19
- for (const module of (_a = moduleConfig.values.package.modules) !== null && _a !== void 0 ? _a : []) {
20
- build({ verbose }, { log: (...args) => this.log(...args), module });
21
- const cid = await publish({
22
- config: this.clientConfig,
23
- log: (...args) => this.log(...args),
24
- module,
25
- verbose,
26
- });
27
- module.bundle = cid.bytes;
28
- if (version) {
29
- module.build = { ...module.build, version };
30
- }
31
- }
32
- const totalBundleSize = (_b = moduleConfig.values.package.modules) === null || _b === void 0 ? void 0 : _b.reduce((sum, { bundle }) => { var _a; return sum + ((_a = bundle === null || bundle === void 0 ? void 0 : bundle.length) !== null && _a !== void 0 ? _a : 0); }, 0);
33
- invariant(totalBundleSize, 'Missing bundle size');
34
- (_c = this._observability) === null || _c === void 0 ? void 0 : _c.setTag('totalBundleSize', totalBundleSize.toString(), 'telemetry');
35
- this.log('Publishing to KUBE...');
36
- return await this.execWithPublisher(async (publisher) => {
37
- var _a;
38
- const result = await publisher.rpc.publish({
39
- package: moduleConfig.values.package,
40
- skipExisting,
41
- accessToken,
42
- });
43
- (_a = result === null || result === void 0 ? void 0 : result.modules) === null || _a === void 0 ? void 0 : _a.forEach(({ module, urls }) => {
44
- // TODO(zhenyasav): This is to de-advertise any non localhost urls because of security sandboxes
45
- // in the browser requiring https for those domains to support halo vault
46
- // also allow https urls but not any http urls unless they contain localhost (not perfect)
47
- const filteredUrls = (urls === null || urls === void 0 ? void 0 : urls.length) ? urls.filter((u) => !/^http:/.test(u) || /localhost/.test(u)) : [];
48
- this.log(`Module ${module.name} published.${(filteredUrls === null || filteredUrls === void 0 ? void 0 : filteredUrls.length) ? os.EOL + filteredUrls.join(os.EOL) : ''}`);
49
- });
50
- });
51
- }
52
- }
53
- Publish.state = 'deprecated';
54
- Publish.description = 'Publish apps (deprecated).';
55
- Publish.flags = {
56
- ...BaseCommand.flags,
57
- // TODO(burdon): Change to hyphenated flags.
58
- configPath: Flags.string({
59
- description: 'Path to dx.yml',
60
- }),
61
- accessToken: Flags.string({
62
- description: 'Access token for publishing.',
63
- }),
64
- skipExisting: Flags.boolean({
65
- description: 'Do not update content on KUBE if version already exists.',
66
- default: false,
67
- }),
68
- version: Flags.string({
69
- description: 'Version of modules to publish.',
70
- }),
71
- };
72
- export default Publish;
73
- //# sourceMappingURL=publish.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"publish.js","sourceRoot":"","sources":["../../../../src/commands/app/publish.ts"],"names":[],"mappings":"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"}