@shopify/shop-minis-cli 0.0.139 → 0.0.141
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/build/commands/create-mini/utils/template-app.js +1 -1
- package/build/commands/create-mini/utils/template-app.js.map +1 -1
- package/build/commands/dev/utils/app-screens.d.ts +8 -0
- package/build/commands/dev/utils/app-screens.js +150 -0
- package/build/commands/dev/utils/app-screens.js.map +1 -0
- package/build/commands/dev/utils/deeplink.d.ts +2 -1
- package/build/commands/dev/utils/deeplink.js +9 -2
- package/build/commands/dev/utils/deeplink.js.map +1 -1
- package/build/commands/dev/utils/env-config.d.ts +2 -0
- package/build/commands/dev/utils/env-config.js +47 -0
- package/build/commands/dev/utils/env-config.js.map +1 -0
- package/build/commands/dev/utils/interactive-terminal.d.ts +6 -1
- package/build/commands/dev/utils/interactive-terminal.js +72 -51
- package/build/commands/dev/utils/interactive-terminal.js.map +1 -1
- package/build/commands/setup/create.d.ts +1 -0
- package/build/commands/setup/create.js +44 -14
- package/build/commands/setup/create.js.map +1 -1
- package/build/commands/setup/index.js +9 -4
- package/build/commands/setup/index.js.map +1 -1
- package/build/index.js +1 -3
- package/build/index.js.map +1 -1
- package/build/templates-index.js +5 -0
- package/build/templates-index.js.map +1 -1
- package/build/utils/package-manager.d.ts +2 -2
- package/build/utils/package-manager.js +4 -10
- package/build/utils/package-manager.js.map +1 -1
- package/build/utils/sync-manifest.d.ts +1 -1
- package/build/utils/sync-manifest.js +8 -6
- package/build/utils/sync-manifest.js.map +1 -1
- package/package.json +1 -3
- package/templates/__template_getting_started/src/App.tsx +29 -0
- package/templates/__template_getting_started/src/index.tsx +9 -0
- package/templates/__template_getting_started/src/screens/ExtensionsScreen.tsx +60 -0
- package/templates/__template_getting_started/src/screens/HomeScreen.tsx +127 -0
- package/templates/__template_getting_started/src/screens/NativeFeaturesScreen.tsx +103 -0
- package/templates/__template_getting_started/src/types/screens.ts +5 -0
- package/build/commands/dev/utils/default-screen.d.ts +0 -2
- package/build/commands/dev/utils/default-screen.js +0 -186
- package/build/commands/dev/utils/default-screen.js.map +0 -1
- package/build/commands/dev/utils/qr-code.d.ts +0 -1
- package/build/commands/dev/utils/qr-code.js +0 -5
- package/build/commands/dev/utils/qr-code.js.map +0 -1
- package/build/commands/open-default-screen/index.d.ts +0 -14
- package/build/commands/open-default-screen/index.js +0 -101
- package/build/commands/open-default-screen/index.js.map +0 -1
- package/build/commands/open-default-screen/utils/prompt-deeplink-host.d.ts +0 -6
- package/build/commands/open-default-screen/utils/prompt-deeplink-host.js +0 -33
- package/build/commands/open-default-screen/utils/prompt-deeplink-host.js.map +0 -1
|
@@ -34,7 +34,7 @@ async function fetchPackageVersion(packageName, fallbackVersion, alpha = false)
|
|
|
34
34
|
? getPackageAlphaVersionCommand
|
|
35
35
|
: getPackageLatestVersionCommand;
|
|
36
36
|
const { stdout: latestPackageVersionStdout } = await execAsync({
|
|
37
|
-
cmd:
|
|
37
|
+
cmd: commandToFetchVersion(packageName),
|
|
38
38
|
});
|
|
39
39
|
return latestPackageVersionStdout[0];
|
|
40
40
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"template-app.js","sourceRoot":"","sources":["../../../../src/commands/create-mini/utils/template-app.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,UAAU,CAAA;AAC1B,OAAO,EAAC,OAAO,EAAC,MAAM,kBAAkB,CAAA;AACxC,OAAO,IAAI,MAAM,MAAM,CAAA;AACvB,OAAO,EAAE,MAAM,IAAI,CAAA;AAEnB,OAAO,EAAC,IAAI,EAAE,IAAI,EAAC,MAAM,UAAU,CAAA;AACnC,OAAO,CAAC,MAAM,QAAQ,CAAA;AAEtB,OAAO,EAAC,WAAW,EAAC,MAAM,iBAAiB,CAAA;AAC3C,OAAO,EAAC,wBAAwB,EAAC,MAAM,+CAA+C,CAAA;AACtF,OAAO,EAAC,SAAS,EAAC,MAAM,4CAA4C,CAAA;AACpE,OAAO,EACL,6BAA6B,EAC7B,8BAA8B,GAC/B,MAAM,mCAAmC,CAAA;AAE1C,MAAM,SAAS,GAAG,GAAG,CAAC,aAAa,CAAC,IAAI,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAA;AAElE,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC5C,IAAY,EACZ,YAAoB,EACpB,OAAe,EACf,eAAyB,EACzB,WAAqB;IAErB,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,GAAG,OAAO,GAAG,CAAC,CAAC,CAAA;IACnE,MAAM,eAAe,GAAG,MAAM,IAAI,CAAC,IAAI,CACrC,SAAS,EACT,uBAAuB,EACvB,cAAc,YAAY,EAAE,CAC7B,CAAA;IAED,MAAM,gBAAgB,GAAG;QACvB,iBAAiB,EAAE,IAAI;QACvB,6BAA6B,EAAE,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;QACrE,4BAA4B,EAAE,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC;QAC/C,0BAA0B,EAAE,WAAW;QACvC,8BAA8B,EAAE,MAAM,mBAAmB,CACvD,6BAA6B,EAC7B,SAAS,EACT,eAAe,CAChB;QACD,0BAA0B,EAAE,MAAM,mBAAmB,CACnD,kCAAkC,EAClC,QAAQ,EACR,WAAW,CACZ;QACD,oCAAoC,EAAE,MAAM,mBAAmB,CAC7D,mCAAmC,EACnC,OAAO,CACR;KACF,CAAA;IAED,MAAM,sBAAsB,GAAG,MAAM,IAAI,CAAC,IAAI,CAC5C,SAAS,EACT,uBAAuB,EACvB,mBAAmB,CACpB,CAAA;IAED,MAAM,IAAI,CAAC,sBAAsB,EAAE,MAAM,CAAC,CAAA;IAC1C,MAAM,IAAI,CAAC,eAAe,EAAE,MAAM,CAAC,CAAA;IACnC,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,WAAW,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC,CAAA;IAC3E,MAAM,wBAAwB,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAA;IAExD,OAAO,MAAM,CAAA;AACf,CAAC;AAED,KAAK,UAAU,mBAAmB,CAChC,WAAmB,EACnB,eAAuB,EACvB,KAAK,GAAG,KAAK;IAEb,IAAI;QACF,MAAM,qBAAqB,GAAG,KAAK;YACjC,CAAC,CAAC,6BAA6B;YAC/B,CAAC,CAAC,8BAA8B,CAAA;QAElC,MAAM,EAAC,MAAM,EAAE,0BAA0B,EAAC,GAAG,MAAM,SAAS,CAAC;YAC3D,GAAG,EAAE,
|
|
1
|
+
{"version":3,"file":"template-app.js","sourceRoot":"","sources":["../../../../src/commands/create-mini/utils/template-app.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,UAAU,CAAA;AAC1B,OAAO,EAAC,OAAO,EAAC,MAAM,kBAAkB,CAAA;AACxC,OAAO,IAAI,MAAM,MAAM,CAAA;AACvB,OAAO,EAAE,MAAM,IAAI,CAAA;AAEnB,OAAO,EAAC,IAAI,EAAE,IAAI,EAAC,MAAM,UAAU,CAAA;AACnC,OAAO,CAAC,MAAM,QAAQ,CAAA;AAEtB,OAAO,EAAC,WAAW,EAAC,MAAM,iBAAiB,CAAA;AAC3C,OAAO,EAAC,wBAAwB,EAAC,MAAM,+CAA+C,CAAA;AACtF,OAAO,EAAC,SAAS,EAAC,MAAM,4CAA4C,CAAA;AACpE,OAAO,EACL,6BAA6B,EAC7B,8BAA8B,GAC/B,MAAM,mCAAmC,CAAA;AAE1C,MAAM,SAAS,GAAG,GAAG,CAAC,aAAa,CAAC,IAAI,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAA;AAElE,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC5C,IAAY,EACZ,YAAoB,EACpB,OAAe,EACf,eAAyB,EACzB,WAAqB;IAErB,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,GAAG,OAAO,GAAG,CAAC,CAAC,CAAA;IACnE,MAAM,eAAe,GAAG,MAAM,IAAI,CAAC,IAAI,CACrC,SAAS,EACT,uBAAuB,EACvB,cAAc,YAAY,EAAE,CAC7B,CAAA;IAED,MAAM,gBAAgB,GAAG;QACvB,iBAAiB,EAAE,IAAI;QACvB,6BAA6B,EAAE,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;QACrE,4BAA4B,EAAE,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC;QAC/C,0BAA0B,EAAE,WAAW;QACvC,8BAA8B,EAAE,MAAM,mBAAmB,CACvD,6BAA6B,EAC7B,SAAS,EACT,eAAe,CAChB;QACD,0BAA0B,EAAE,MAAM,mBAAmB,CACnD,kCAAkC,EAClC,QAAQ,EACR,WAAW,CACZ;QACD,oCAAoC,EAAE,MAAM,mBAAmB,CAC7D,mCAAmC,EACnC,OAAO,CACR;KACF,CAAA;IAED,MAAM,sBAAsB,GAAG,MAAM,IAAI,CAAC,IAAI,CAC5C,SAAS,EACT,uBAAuB,EACvB,mBAAmB,CACpB,CAAA;IAED,MAAM,IAAI,CAAC,sBAAsB,EAAE,MAAM,CAAC,CAAA;IAC1C,MAAM,IAAI,CAAC,eAAe,EAAE,MAAM,CAAC,CAAA;IACnC,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,WAAW,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC,CAAA;IAC3E,MAAM,wBAAwB,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAA;IAExD,OAAO,MAAM,CAAA;AACf,CAAC;AAED,KAAK,UAAU,mBAAmB,CAChC,WAAmB,EACnB,eAAuB,EACvB,KAAK,GAAG,KAAK;IAEb,IAAI;QACF,MAAM,qBAAqB,GAAG,KAAK;YACjC,CAAC,CAAC,6BAA6B;YAC/B,CAAC,CAAC,8BAA8B,CAAA;QAElC,MAAM,EAAC,MAAM,EAAE,0BAA0B,EAAC,GAAG,MAAM,SAAS,CAAC;YAC3D,GAAG,EAAE,qBAAqB,CAAC,WAAW,CAAC;SACxC,CAAC,CAAA;QACF,OAAO,0BAA0B,CAAC,CAAC,CAAC,CAAA;KACrC;IAAC,MAAM;QACN,mGAAmG;QACnG,OAAO,eAAe,CAAA;KACvB;AACH,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { DevCommandOptions } from '../index.js';
|
|
2
|
+
export declare const screens: string[];
|
|
3
|
+
export type Screen = (typeof screens)[number];
|
|
4
|
+
export declare function promptForScreen(): Promise<any>;
|
|
5
|
+
export declare function getDeeplinkForScreen(screenType: Screen, resourceId: number | null): string;
|
|
6
|
+
export declare function promptForResourceId(screenType: Screen): Promise<number | null>;
|
|
7
|
+
export declare function checkForExtensions(screenType: Screen, options: DevCommandOptions): void;
|
|
8
|
+
export declare function promptForDevPanelDeeplink(miniHandle: string, options: DevCommandOptions): Promise<string | undefined>;
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
import { outputDebug } from '@shopify/cli-kit/node/output';
|
|
2
|
+
import prompts from 'prompts';
|
|
3
|
+
import { getEnvConfigValue, setEnvConfigValue } from './env-config.js';
|
|
4
|
+
import { getDeeplink } from './deeplink.js';
|
|
5
|
+
export const screens = ['Home feed', 'Store', 'Product', 'Order Management'];
|
|
6
|
+
export async function promptForScreen() {
|
|
7
|
+
const value = (await prompts({
|
|
8
|
+
type: 'autocomplete',
|
|
9
|
+
name: 'value',
|
|
10
|
+
limit: 11,
|
|
11
|
+
initial: getEnvConfigValue('DEFAULT_SCREEN'),
|
|
12
|
+
message: 'Select the page to open',
|
|
13
|
+
choices: screens.map(screen => ({
|
|
14
|
+
title: screen,
|
|
15
|
+
value: screen,
|
|
16
|
+
})),
|
|
17
|
+
suggest: async (input, choices) => {
|
|
18
|
+
const regex = new RegExp(input, 'i');
|
|
19
|
+
return choices.filter(choice => regex.test(choice.title));
|
|
20
|
+
},
|
|
21
|
+
})).value;
|
|
22
|
+
if (value) {
|
|
23
|
+
setEnvConfigValue('DEFAULT_SCREEN', value);
|
|
24
|
+
}
|
|
25
|
+
return value;
|
|
26
|
+
}
|
|
27
|
+
export function getDeeplinkForScreen(screenType, resourceId) {
|
|
28
|
+
let path;
|
|
29
|
+
switch (screenType) {
|
|
30
|
+
case 'Store':
|
|
31
|
+
path = `shopifystore/${resourceId}`;
|
|
32
|
+
break;
|
|
33
|
+
case 'Product':
|
|
34
|
+
path = `p/${resourceId}`;
|
|
35
|
+
break;
|
|
36
|
+
case 'Order Management':
|
|
37
|
+
path = `u/orders/${resourceId}`;
|
|
38
|
+
break;
|
|
39
|
+
case 'Home feed':
|
|
40
|
+
default:
|
|
41
|
+
path = 'home-feed';
|
|
42
|
+
break;
|
|
43
|
+
}
|
|
44
|
+
const deeplink = `arrive://${path}`;
|
|
45
|
+
outputDebug(`Deeplink: ${deeplink}`);
|
|
46
|
+
return deeplink;
|
|
47
|
+
}
|
|
48
|
+
export async function promptForResourceId(screenType) {
|
|
49
|
+
let message;
|
|
50
|
+
switch (screenType) {
|
|
51
|
+
case 'Home feed':
|
|
52
|
+
return null;
|
|
53
|
+
case 'Product':
|
|
54
|
+
message = 'Enter the GID of the product';
|
|
55
|
+
break;
|
|
56
|
+
case 'Store':
|
|
57
|
+
message = 'Enter the GID of the Shop';
|
|
58
|
+
break;
|
|
59
|
+
case 'Order Management':
|
|
60
|
+
message = 'Enter the GID of the order';
|
|
61
|
+
break;
|
|
62
|
+
default:
|
|
63
|
+
message = 'Enter the GID of the resource';
|
|
64
|
+
}
|
|
65
|
+
const configKey = `DEFAULT_${screenType.replace(' ', '_').toUpperCase()}_ID`;
|
|
66
|
+
const { idInput } = await prompts({
|
|
67
|
+
type: 'text',
|
|
68
|
+
name: 'idInput',
|
|
69
|
+
initial: getEnvConfigValue(configKey),
|
|
70
|
+
message,
|
|
71
|
+
validate: value => {
|
|
72
|
+
const isValidGID = /^gid:\/\/shopify\/(Shop|Order|Product)\/\d+$/.test(value);
|
|
73
|
+
return isValidGID
|
|
74
|
+
? true
|
|
75
|
+
: 'ID must be in the format gid://shopify/{Type}/{Number}, where {Type} is Shop, Order, or Product and {Number} is a valid number';
|
|
76
|
+
},
|
|
77
|
+
});
|
|
78
|
+
if (idInput) {
|
|
79
|
+
setEnvConfigValue(configKey, idInput);
|
|
80
|
+
}
|
|
81
|
+
return idInput ? parseInt(idInput.split('/').pop(), 10) : null; // Convert input to a number
|
|
82
|
+
}
|
|
83
|
+
export function checkForExtensions(screenType, options) {
|
|
84
|
+
const hasExtensions = (prefix) => options?.extensionTargets?.some(target => target.startsWith(prefix));
|
|
85
|
+
outputDebug(`store extension found: ${hasExtensions('shop.store')}`);
|
|
86
|
+
outputDebug(`product extension found: ${hasExtensions('shop.product')}`);
|
|
87
|
+
outputDebug(`order extension found: ${hasExtensions('shop.order-')}`);
|
|
88
|
+
let message;
|
|
89
|
+
switch (screenType) {
|
|
90
|
+
case 'Store':
|
|
91
|
+
if (!hasExtensions('shop.store')) {
|
|
92
|
+
message = 'No store extensions found.';
|
|
93
|
+
}
|
|
94
|
+
break;
|
|
95
|
+
case 'Product':
|
|
96
|
+
if (!hasExtensions('shop.product')) {
|
|
97
|
+
message = 'No product extensions found.';
|
|
98
|
+
}
|
|
99
|
+
break;
|
|
100
|
+
case 'Order Management':
|
|
101
|
+
if (!hasExtensions('shop.order-')) {
|
|
102
|
+
message = 'No order management extensions found.';
|
|
103
|
+
}
|
|
104
|
+
break;
|
|
105
|
+
case 'Home feed':
|
|
106
|
+
default:
|
|
107
|
+
return;
|
|
108
|
+
}
|
|
109
|
+
if (message) {
|
|
110
|
+
console.error(`
|
|
111
|
+
${message} Add extensions with \`npx shop-minis create-extension\`
|
|
112
|
+
`);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
export async function promptForDevPanelDeeplink(miniHandle, options) {
|
|
116
|
+
const { value } = await prompts({
|
|
117
|
+
type: 'select',
|
|
118
|
+
name: 'value',
|
|
119
|
+
message: 'Select option',
|
|
120
|
+
choices: [
|
|
121
|
+
{
|
|
122
|
+
title: 'Enable developer mode',
|
|
123
|
+
description: 'Minis developer mode needs to be enabled on device for testing',
|
|
124
|
+
value: 'enable',
|
|
125
|
+
},
|
|
126
|
+
{
|
|
127
|
+
title: 'Open Mini Viewer',
|
|
128
|
+
description: 'Open the Mini in a fullscreen viewer',
|
|
129
|
+
value: 'mini',
|
|
130
|
+
},
|
|
131
|
+
{
|
|
132
|
+
title: 'View your Mini extension in app',
|
|
133
|
+
description: 'Navigate to shop/product/order pages to view your Mini extensions',
|
|
134
|
+
value: 'inApp',
|
|
135
|
+
},
|
|
136
|
+
],
|
|
137
|
+
});
|
|
138
|
+
if (value === 'enable') {
|
|
139
|
+
return getDeeplink(miniHandle, options, true);
|
|
140
|
+
}
|
|
141
|
+
else if (value === 'mini') {
|
|
142
|
+
return getDeeplink(miniHandle, options, true, true);
|
|
143
|
+
}
|
|
144
|
+
else if (value === 'inApp') {
|
|
145
|
+
const screen = await promptForScreen();
|
|
146
|
+
const resourceId = await promptForResourceId(screen);
|
|
147
|
+
return getDeeplinkForScreen(screen, resourceId);
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
//# sourceMappingURL=app-screens.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app-screens.js","sourceRoot":"","sources":["../../../../src/commands/dev/utils/app-screens.ts"],"names":[],"mappings":"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"}
|
|
@@ -11,4 +11,5 @@ export declare function getBundleUrl(host: string): string;
|
|
|
11
11
|
*
|
|
12
12
|
* In both cases, the base64 encoded payload contains the bundle url and extra information about the remote environment
|
|
13
13
|
*/
|
|
14
|
-
export declare function getDeeplink(miniHandle: string, options: DevCommandOptions, universalLink?: boolean): string;
|
|
14
|
+
export declare function getDeeplink(miniHandle: string, options: DevCommandOptions, universalLink?: boolean, forceLaunchMini?: boolean): string;
|
|
15
|
+
export declare function getDeeplinkForMiniViewer(miniHandle: string, options: DevCommandOptions): string;
|
|
@@ -43,10 +43,10 @@ function getDeeplinkPayload(miniHandle, host, extensionTargets) {
|
|
|
43
43
|
*
|
|
44
44
|
* In both cases, the base64 encoded payload contains the bundle url and extra information about the remote environment
|
|
45
45
|
*/
|
|
46
|
-
export function getDeeplink(miniHandle, options, universalLink = false) {
|
|
46
|
+
export function getDeeplink(miniHandle, options, universalLink = false, forceLaunchMini = false) {
|
|
47
47
|
const deeplinkParams = getDeeplinkPayload(miniHandle, options.host, options.extensionTargets);
|
|
48
48
|
const developmentParams = getDevelopmentEntryPointParamsQueryString();
|
|
49
|
-
const deeplinkPath = options.extensionTargets?.length
|
|
49
|
+
const deeplinkPath = !forceLaunchMini && options.extensionTargets?.length
|
|
50
50
|
? '/mini/remote-extension/'
|
|
51
51
|
: '/mini/remote/';
|
|
52
52
|
const deeplink = universalLink
|
|
@@ -55,4 +55,11 @@ export function getDeeplink(miniHandle, options, universalLink = false) {
|
|
|
55
55
|
outputDebug(`Deeplink: ${deeplink}`);
|
|
56
56
|
return deeplink;
|
|
57
57
|
}
|
|
58
|
+
export function getDeeplinkForMiniViewer(miniHandle, options) {
|
|
59
|
+
const deeplinkParams = getDeeplinkPayload(miniHandle, options.host, options.extensionTargets);
|
|
60
|
+
const developmentParams = getDevelopmentEntryPointParamsQueryString();
|
|
61
|
+
const deeplink = `arrive://mini/remote/${deeplinkParams}${developmentParams}`;
|
|
62
|
+
outputDebug(`Deeplink: ${deeplink}`);
|
|
63
|
+
return deeplink;
|
|
64
|
+
}
|
|
58
65
|
//# sourceMappingURL=deeplink.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deeplink.js","sourceRoot":"","sources":["../../../../src/commands/dev/utils/deeplink.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,WAAW,EAAC,MAAM,8BAA8B,CAAA;AAExD,OAAO,EAAC,yCAAyC,EAAC,MAAM,sCAAsC,CAAA;AAC9F,OAAO,EAAC,eAAe,EAAC,MAAM,kCAAkC,CAAA;AAGhE,OAAO,EAAC,qBAAqB,EAAC,MAAM,2BAA2B,CAAA;AAE/D,MAAM,UAAU,YAAY,CAAC,IAAY;IACvC,OAAO,UAAU,IAAI,oBAAoB,CAAA;AAC3C,CAAC;AAED,SAAS,yBAAyB,CAAC,IAAY,EAAE,MAAe;IAC9D,OAAO,UAAU,IAAI,oBAAoB,MAAM,CAAC,CAAC,CAAC,IAAI,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAA;AACvE,CAAC;AAED,SAAS,kBAAkB,CACzB,UAAkB,EAClB,IAAY,EACZ,gBAA2B;IAE3B,MAAM,SAAS,GAAG,YAAY,CAAC,IAAI,CAAC,CAAA;IACpC,MAAM,sBAAsB,GAAG,yBAAyB,CAAC,IAAI,CAAC,CAAA;IAC9D,MAAM,4BAA4B,GAAG,yBAAyB,CAAC,IAAI,CAAC,CAAA;IAEpE,MAAM,MAAM,GAAkD;QAC5D,MAAM,EAAE,UAAU;QAClB,SAAS;QACT;;;;WAIG;QACH,sBAAsB;QACtB,4BAA4B;QAC5B,SAAS,EAAE,qBAAqB,EAAE;QAClC,QAAQ,EAAE,eAAe,EAAE,EAAE,QAAQ,IAAI,SAAS;KACnD,CAAA;IAED,IAAI,gBAAgB,EAAE;QACpB,MAAM,CAAC,gBAAgB,GAAG,gBAAgB,CAAA;QAC1C,MAAM,CAAC,eAAe,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAA;KAC7C;IAED,MAAM,iBAAiB,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAA;IAEhD,OAAO,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAA;AAC1D,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,WAAW,CACzB,UAAkB,EAClB,OAA0B,EAC1B,aAAa,GAAG,KAAK;
|
|
1
|
+
{"version":3,"file":"deeplink.js","sourceRoot":"","sources":["../../../../src/commands/dev/utils/deeplink.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,WAAW,EAAC,MAAM,8BAA8B,CAAA;AAExD,OAAO,EAAC,yCAAyC,EAAC,MAAM,sCAAsC,CAAA;AAC9F,OAAO,EAAC,eAAe,EAAC,MAAM,kCAAkC,CAAA;AAGhE,OAAO,EAAC,qBAAqB,EAAC,MAAM,2BAA2B,CAAA;AAE/D,MAAM,UAAU,YAAY,CAAC,IAAY;IACvC,OAAO,UAAU,IAAI,oBAAoB,CAAA;AAC3C,CAAC;AAED,SAAS,yBAAyB,CAAC,IAAY,EAAE,MAAe;IAC9D,OAAO,UAAU,IAAI,oBAAoB,MAAM,CAAC,CAAC,CAAC,IAAI,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAA;AACvE,CAAC;AAED,SAAS,kBAAkB,CACzB,UAAkB,EAClB,IAAY,EACZ,gBAA2B;IAE3B,MAAM,SAAS,GAAG,YAAY,CAAC,IAAI,CAAC,CAAA;IACpC,MAAM,sBAAsB,GAAG,yBAAyB,CAAC,IAAI,CAAC,CAAA;IAC9D,MAAM,4BAA4B,GAAG,yBAAyB,CAAC,IAAI,CAAC,CAAA;IAEpE,MAAM,MAAM,GAAkD;QAC5D,MAAM,EAAE,UAAU;QAClB,SAAS;QACT;;;;WAIG;QACH,sBAAsB;QACtB,4BAA4B;QAC5B,SAAS,EAAE,qBAAqB,EAAE;QAClC,QAAQ,EAAE,eAAe,EAAE,EAAE,QAAQ,IAAI,SAAS;KACnD,CAAA;IAED,IAAI,gBAAgB,EAAE;QACpB,MAAM,CAAC,gBAAgB,GAAG,gBAAgB,CAAA;QAC1C,MAAM,CAAC,eAAe,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAA;KAC7C;IAED,MAAM,iBAAiB,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAA;IAEhD,OAAO,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAA;AAC1D,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,WAAW,CACzB,UAAkB,EAClB,OAA0B,EAC1B,aAAa,GAAG,KAAK,EACrB,eAAe,GAAG,KAAK;IAEvB,MAAM,cAAc,GAAG,kBAAkB,CACvC,UAAU,EACV,OAAO,CAAC,IAAK,EACb,OAAO,CAAC,gBAAgB,CACzB,CAAA;IACD,MAAM,iBAAiB,GAAG,yCAAyC,EAAE,CAAA;IACrE,MAAM,YAAY,GAChB,CAAC,eAAe,IAAI,OAAO,CAAC,gBAAgB,EAAE,MAAM;QAClD,CAAC,CAAC,yBAAyB;QAC3B,CAAC,CAAC,eAAe,CAAA;IAErB,MAAM,QAAQ,GAAG,aAAa;QAC5B,CAAC,CAAC,mBAAmB,YAAY,GAAG,cAAc,GAAG,iBAAiB,EAAE;QACxE,CAAC,CAAC,WAAW,YAAY,GAAG,cAAc,GAAG,iBAAiB,EAAE,CAAA;IAElE,WAAW,CAAC,aAAa,QAAQ,EAAE,CAAC,CAAA;IAEpC,OAAO,QAAQ,CAAA;AACjB,CAAC;AAED,MAAM,UAAU,wBAAwB,CACtC,UAAkB,EAClB,OAA0B;IAE1B,MAAM,cAAc,GAAG,kBAAkB,CACvC,UAAU,EACV,OAAO,CAAC,IAAK,EACb,OAAO,CAAC,gBAAgB,CACzB,CAAA;IACD,MAAM,iBAAiB,GAAG,yCAAyC,EAAE,CAAA;IACrE,MAAM,QAAQ,GAAG,wBAAwB,cAAc,GAAG,iBAAiB,EAAE,CAAA;IAE7E,WAAW,CAAC,aAAa,QAAQ,EAAE,CAAC,CAAA;IAEpC,OAAO,QAAQ,CAAA;AACjB,CAAC"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import fs from 'fs';
|
|
2
|
+
import path from 'path';
|
|
3
|
+
export function getEnvConfigValue(envConfigKey) {
|
|
4
|
+
const envFilePath = path.join(process.cwd(), '.env');
|
|
5
|
+
const envContent = readEnvContent(envFilePath);
|
|
6
|
+
const lines = envContent.split('\n');
|
|
7
|
+
for (const line of lines) {
|
|
8
|
+
const [key, value] = line.split('=');
|
|
9
|
+
if (key === envConfigKey) {
|
|
10
|
+
return value;
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
return undefined;
|
|
14
|
+
}
|
|
15
|
+
export function setEnvConfigValue(envConfigKey, envConfigValue) {
|
|
16
|
+
const envFilePath = path.join(process.cwd(), '.env');
|
|
17
|
+
const envContent = readEnvContent(envFilePath);
|
|
18
|
+
let keyExists = false;
|
|
19
|
+
let newContent = envContent
|
|
20
|
+
.split('\n')
|
|
21
|
+
.map(line => {
|
|
22
|
+
if (line.startsWith(`${envConfigKey}=`)) {
|
|
23
|
+
keyExists = true;
|
|
24
|
+
return `${envConfigKey}=${envConfigValue}`;
|
|
25
|
+
}
|
|
26
|
+
return line;
|
|
27
|
+
})
|
|
28
|
+
.join('\n');
|
|
29
|
+
if (!keyExists) {
|
|
30
|
+
// Only add a newline if the file is not empty
|
|
31
|
+
if (envContent.length > 0)
|
|
32
|
+
newContent += '\n';
|
|
33
|
+
newContent += `${envConfigKey}=${envConfigValue}`;
|
|
34
|
+
}
|
|
35
|
+
fs.writeFileSync(envFilePath, newContent);
|
|
36
|
+
}
|
|
37
|
+
function readEnvContent(envFilePath) {
|
|
38
|
+
let envContent;
|
|
39
|
+
try {
|
|
40
|
+
envContent = fs.readFileSync(envFilePath, 'utf-8');
|
|
41
|
+
}
|
|
42
|
+
catch (error) {
|
|
43
|
+
envContent = '';
|
|
44
|
+
}
|
|
45
|
+
return envContent;
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=env-config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env-config.js","sourceRoot":"","sources":["../../../../src/commands/dev/utils/env-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAA;AACnB,OAAO,IAAI,MAAM,MAAM,CAAA;AAEvB,MAAM,UAAU,iBAAiB,CAAC,YAAoB;IACpD,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,CAAC,CAAA;IACpD,MAAM,UAAU,GAAG,cAAc,CAAC,WAAW,CAAC,CAAA;IAE9C,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;IACpC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;QACxB,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;QACpC,IAAI,GAAG,KAAK,YAAY,EAAE;YACxB,OAAO,KAAK,CAAA;SACb;KACF;IAED,OAAO,SAAS,CAAA;AAClB,CAAC;AAED,MAAM,UAAU,iBAAiB,CAC/B,YAAoB,EACpB,cAAsB;IAEtB,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,CAAC,CAAA;IACpD,MAAM,UAAU,GAAG,cAAc,CAAC,WAAW,CAAC,CAAA;IAE9C,IAAI,SAAS,GAAG,KAAK,CAAA;IACrB,IAAI,UAAU,GAAG,UAAU;SACxB,KAAK,CAAC,IAAI,CAAC;SACX,GAAG,CAAC,IAAI,CAAC,EAAE;QACV,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,YAAY,GAAG,CAAC,EAAE;YACvC,SAAS,GAAG,IAAI,CAAA;YAChB,OAAO,GAAG,YAAY,IAAI,cAAc,EAAE,CAAA;SAC3C;QAED,OAAO,IAAI,CAAA;IACb,CAAC,CAAC;SACD,IAAI,CAAC,IAAI,CAAC,CAAA;IAEb,IAAI,CAAC,SAAS,EAAE;QACd,8CAA8C;QAC9C,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC;YAAE,UAAU,IAAI,IAAI,CAAA;QAC7C,UAAU,IAAI,GAAG,YAAY,IAAI,cAAc,EAAE,CAAA;KAClD;IAED,EAAE,CAAC,aAAa,CAAC,WAAW,EAAE,UAAU,CAAC,CAAA;AAC3C,CAAC;AAED,SAAS,cAAc,CAAC,WAAmB;IACzC,IAAI,UAAU,CAAA;IAEd,IAAI;QACF,UAAU,GAAG,EAAE,CAAC,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAA;KACnD;IAAC,OAAO,KAAK,EAAE;QACd,UAAU,GAAG,EAAE,CAAA;KAChB;IAED,OAAO,UAAU,CAAA;AACnB,CAAC"}
|
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
import type { DevCommandOptions } from '../index.js';
|
|
2
2
|
import { LoadingStateHandlers } from '../../../utils/loading-state-handlers.js';
|
|
3
|
+
import { Platform } from './platform.js';
|
|
3
4
|
export declare class InteractiveTerminal {
|
|
4
5
|
miniHandle: string;
|
|
5
6
|
options: DevCommandOptions;
|
|
6
7
|
loadingHandlers: LoadingStateHandlers;
|
|
8
|
+
currentPlatform: Platform | null;
|
|
9
|
+
currentDeviceId: string | null;
|
|
7
10
|
constructor(options: DevCommandOptions, miniHandle: string);
|
|
8
11
|
startWaitingForCommand: () => void;
|
|
9
12
|
stopWaitingForCommand: () => void;
|
|
@@ -13,6 +16,8 @@ export declare class InteractiveTerminal {
|
|
|
13
16
|
handleKeyPressWrapped: (key: string) => Promise<void>;
|
|
14
17
|
handleKeyPress: (key: string) => Promise<void>;
|
|
15
18
|
showSetupAndroidHomeInstructions(): Promise<void>;
|
|
16
|
-
printDeeplinkQRCode(deepLink: string): Promise<void>;
|
|
17
19
|
private startApp;
|
|
20
|
+
private openDeeplink;
|
|
21
|
+
private get deeplink();
|
|
22
|
+
private getCurrentPlatformAndDeviceId;
|
|
18
23
|
}
|
|
@@ -2,16 +2,15 @@ import chalk from 'chalk';
|
|
|
2
2
|
import open from 'open';
|
|
3
3
|
import { androidHomeExists } from '../../config.js';
|
|
4
4
|
import { LoadingStateHandlers } from '../../../utils/loading-state-handlers.js';
|
|
5
|
-
import { setDefaultScreen, removeDefaultScreen, } from '../../open-default-screen/index.js';
|
|
6
|
-
import { promptDefaultScreen } from './default-screen.js';
|
|
7
5
|
import { maybeLaunchEmulator, promptForAndroidDevices } from './android.js';
|
|
8
|
-
import { getBundleUrl, getDeeplink } from './deeplink.js';
|
|
6
|
+
import { getBundleUrl, getDeeplink, getDeeplinkForMiniViewer, } from './deeplink.js';
|
|
9
7
|
import { DEV_PANEL_BASE_URL } from './metro/metro-server-middleware.js';
|
|
10
8
|
import { Platform } from './platform.js';
|
|
11
|
-
import { printQRCode } from './qr-code.js';
|
|
12
9
|
import { bootSimulator, promptForSimulator } from './simulator.js';
|
|
13
10
|
import { startApp } from './start-app/start-app.js';
|
|
14
11
|
import { DEFAULT_MINIS_PROMPT } from './metro/metro-reporter.js';
|
|
12
|
+
import { promptForScreen, getDeeplinkForScreen, promptForResourceId, checkForExtensions, promptForDevPanelDeeplink, } from './app-screens.js';
|
|
13
|
+
import { handlersForPlatform } from './start-app/config.js';
|
|
15
14
|
const { stdin } = process;
|
|
16
15
|
function clearTerminal() {
|
|
17
16
|
process.stdout.write('\x1B[2J\x1B[3J\x1B[H');
|
|
@@ -21,6 +20,8 @@ export class InteractiveTerminal {
|
|
|
21
20
|
miniHandle;
|
|
22
21
|
options;
|
|
23
22
|
loadingHandlers = new LoadingStateHandlers();
|
|
23
|
+
currentPlatform = null;
|
|
24
|
+
currentDeviceId = null;
|
|
24
25
|
constructor(options, miniHandle) {
|
|
25
26
|
this.miniHandle = miniHandle;
|
|
26
27
|
this.options = options;
|
|
@@ -62,12 +63,14 @@ export class InteractiveTerminal {
|
|
|
62
63
|
console.log(`
|
|
63
64
|
› Press ${chalk.cyan.bold(`a`)} │ Open on Android device or emulator
|
|
64
65
|
› Press ${chalk.cyan.bold(`i`)} │ Open in iOS simulator
|
|
65
|
-
|
|
66
|
-
|
|
66
|
+
`, this.currentDeviceId && this.currentPlatform
|
|
67
|
+
? `
|
|
68
|
+
› Press ${chalk.cyan.bold(`o`)} │ Open the Mini viewer
|
|
69
|
+
› Press ${chalk.cyan.bold(`v`)} │ View your Mini extension in Shop
|
|
70
|
+
`
|
|
71
|
+
: '', `
|
|
67
72
|
› Press ${chalk.cyan.bold(`d`)} │ Open Developer Dashboard in web browser
|
|
68
|
-
|
|
69
|
-
› Press ${chalk.cyan.bold(`s`)} │ Set the default screen
|
|
70
|
-
› Press ${chalk.cyan.bold(`r`)} │ Remove the default screen
|
|
73
|
+
› Press ${chalk.cyan.bold(`h`)} │ Open Minis Docs in browser
|
|
71
74
|
|
|
72
75
|
${chalk.dim('Press Ctrl+C to exit.')}`);
|
|
73
76
|
}
|
|
@@ -104,24 +107,16 @@ ${chalk.dim('Press Ctrl+C to exit.')}`);
|
|
|
104
107
|
const device = await promptForAndroidDevices();
|
|
105
108
|
if (device) {
|
|
106
109
|
if (device.type === 'emulator') {
|
|
107
|
-
let deepLink = await promptDefaultScreen();
|
|
108
|
-
// Check if deepLink is null and set it via this.getDeeplink if it is
|
|
109
|
-
if (deepLink === null) {
|
|
110
|
-
deepLink = getDeeplink(this.miniHandle, this.options); // Set deepLink via this.getDeeplink
|
|
111
|
-
}
|
|
112
110
|
this.loadingHandlers.loadingStart('Launching emulator');
|
|
113
111
|
const emulatorId = await maybeLaunchEmulator(device.name);
|
|
114
112
|
if (!emulatorId) {
|
|
115
113
|
this.loadingHandlers.loadingEnd('fail', `Couldn't launch emulator ${device.name}`);
|
|
116
114
|
break;
|
|
117
115
|
}
|
|
118
|
-
await this.startApp(Platform.Android, emulatorId
|
|
116
|
+
await this.startApp(Platform.Android, emulatorId);
|
|
119
117
|
}
|
|
120
118
|
else {
|
|
121
|
-
|
|
122
|
-
if (deepLink === null)
|
|
123
|
-
break;
|
|
124
|
-
await this.startApp(Platform.Android, device.name, deepLink);
|
|
119
|
+
await this.startApp(Platform.Android, device.name);
|
|
125
120
|
}
|
|
126
121
|
}
|
|
127
122
|
else {
|
|
@@ -136,46 +131,53 @@ ${chalk.dim('Press Ctrl+C to exit.')}`);
|
|
|
136
131
|
clearTerminal();
|
|
137
132
|
const simulator = await promptForSimulator();
|
|
138
133
|
if (simulator) {
|
|
139
|
-
|
|
140
|
-
// Check if deepLink is null and set it via this.getDeeplink if it is
|
|
141
|
-
if (deepLink === null) {
|
|
142
|
-
deepLink = getDeeplink(this.miniHandle, this.options); // Set deepLink via this.getDeeplink
|
|
143
|
-
}
|
|
144
|
-
this.loadingHandlers.loadingStart('Launching simulator\n');
|
|
134
|
+
this.loadingHandlers.loadingStart('Launching simulator');
|
|
145
135
|
await bootSimulator(simulator.udid);
|
|
146
|
-
await this.startApp(Platform.IOS, simulator.udid
|
|
136
|
+
await this.startApp(Platform.IOS, simulator.udid);
|
|
147
137
|
}
|
|
148
138
|
else {
|
|
149
139
|
console.log('\nNo simulator was selected\n');
|
|
150
140
|
}
|
|
151
141
|
break;
|
|
152
142
|
}
|
|
153
|
-
case 'q': {
|
|
154
|
-
const deepLink = await promptDefaultScreen();
|
|
155
|
-
if (deepLink === null)
|
|
156
|
-
break;
|
|
157
|
-
await this.printDeeplinkQRCode(deepLink);
|
|
158
|
-
break;
|
|
159
|
-
}
|
|
160
|
-
case 's': {
|
|
161
|
-
await setDefaultScreen(this.options);
|
|
162
|
-
break;
|
|
163
|
-
}
|
|
164
|
-
case 'r': {
|
|
165
|
-
await removeDefaultScreen();
|
|
166
|
-
break;
|
|
167
|
-
}
|
|
168
143
|
case 'd': {
|
|
169
|
-
|
|
170
|
-
|
|
144
|
+
const deepLink = await promptForDevPanelDeeplink(this.miniHandle, this.options);
|
|
145
|
+
if (!deepLink) {
|
|
146
|
+
return;
|
|
147
|
+
}
|
|
171
148
|
const paramsObj = {
|
|
172
149
|
bundleUrl: getBundleUrl(this.options.host),
|
|
173
|
-
deepLink
|
|
150
|
+
deepLink,
|
|
174
151
|
};
|
|
175
152
|
const searchParams = `?${new URLSearchParams(paramsObj).toString()}`;
|
|
176
153
|
open(`${DEV_PANEL_BASE_URL}${searchParams}`);
|
|
177
154
|
break;
|
|
178
155
|
}
|
|
156
|
+
case 'h': {
|
|
157
|
+
const url = 'https://shop.app/minis/docs/';
|
|
158
|
+
console.log(`Opening '${url}'`);
|
|
159
|
+
open(url);
|
|
160
|
+
break;
|
|
161
|
+
}
|
|
162
|
+
case 'o': {
|
|
163
|
+
const { platform, deviceId } = this.getCurrentPlatformAndDeviceId();
|
|
164
|
+
if (platform && deviceId) {
|
|
165
|
+
this.loadingHandlers.loadingStart('Opening mini viewer');
|
|
166
|
+
await this.openDeeplink(platform, deviceId, getDeeplinkForMiniViewer(this.miniHandle, this.options));
|
|
167
|
+
}
|
|
168
|
+
break;
|
|
169
|
+
}
|
|
170
|
+
case 'v': {
|
|
171
|
+
const { platform, deviceId } = this.getCurrentPlatformAndDeviceId();
|
|
172
|
+
if (platform && deviceId) {
|
|
173
|
+
const screen = await promptForScreen();
|
|
174
|
+
const resourceId = await promptForResourceId(screen);
|
|
175
|
+
checkForExtensions(screen, this.options);
|
|
176
|
+
this.loadingHandlers.loadingStart(`Opening ${screen} screen`);
|
|
177
|
+
await this.openDeeplink(platform, deviceId, getDeeplinkForScreen(screen, resourceId));
|
|
178
|
+
}
|
|
179
|
+
break;
|
|
180
|
+
}
|
|
179
181
|
case CTRL_C: {
|
|
180
182
|
this.stopWaitingForCommand();
|
|
181
183
|
process.exit(0);
|
|
@@ -192,24 +194,43 @@ ${chalk.dim('Press Ctrl+C to exit.')}`);
|
|
|
192
194
|
console.log(`See ${chalk.blue.underline.bold('https://developer.android.com/studio/command-line/variables')}`);
|
|
193
195
|
await this.waitForAnyKeyAndPrintInstructions();
|
|
194
196
|
}
|
|
195
|
-
async
|
|
196
|
-
console.log('\n');
|
|
197
|
-
await printQRCode(deepLink);
|
|
198
|
-
console.log('Scan the QR code to open Shop Mini on your device (requires the Shop app to be installed)\n');
|
|
199
|
-
}
|
|
200
|
-
async startApp(platform, deviceId, deepLink) {
|
|
197
|
+
async startApp(platform, deviceId) {
|
|
201
198
|
try {
|
|
199
|
+
this.currentPlatform = platform;
|
|
200
|
+
this.currentDeviceId = deviceId;
|
|
202
201
|
await startApp({
|
|
203
202
|
platform,
|
|
204
203
|
deviceId,
|
|
205
|
-
deeplink:
|
|
204
|
+
deeplink: this.deeplink,
|
|
206
205
|
buildType: this.options.buildType,
|
|
207
206
|
snapshotVersion: this.options.snapshotVersion,
|
|
208
207
|
}, this.loadingHandlers);
|
|
208
|
+
// Show all instructions after the app has started
|
|
209
|
+
this.logInstructions();
|
|
210
|
+
}
|
|
211
|
+
catch (err) {
|
|
212
|
+
this.loadingHandlers.loadingEnd('fail', err?.message || err);
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
async openDeeplink(platform, deviceId, deeplink) {
|
|
216
|
+
try {
|
|
217
|
+
const { openDeeplink } = handlersForPlatform(platform);
|
|
218
|
+
await openDeeplink(deviceId, deeplink);
|
|
219
|
+
this.loadingHandlers.loadingEnd?.();
|
|
209
220
|
}
|
|
210
221
|
catch (err) {
|
|
211
222
|
this.loadingHandlers.loadingEnd('fail', err?.message || err);
|
|
212
223
|
}
|
|
213
224
|
}
|
|
225
|
+
get deeplink() {
|
|
226
|
+
return getDeeplink(this.miniHandle, this.options);
|
|
227
|
+
}
|
|
228
|
+
getCurrentPlatformAndDeviceId() {
|
|
229
|
+
if (!this.currentPlatform || !this.currentDeviceId) {
|
|
230
|
+
console.log(`\n ${chalk.red.bold(`X`)} No platform or device id set. Run ${chalk.cyan.bold(`i`)} for iOS or ${chalk.cyan.bold(`a`)} for Android before opening a deeplink.`);
|
|
231
|
+
return { platform: null, deviceId: null };
|
|
232
|
+
}
|
|
233
|
+
return { platform: this.currentPlatform, deviceId: this.currentDeviceId };
|
|
234
|
+
}
|
|
214
235
|
}
|
|
215
236
|
//# sourceMappingURL=interactive-terminal.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interactive-terminal.js","sourceRoot":"","sources":["../../../../src/commands/dev/utils/interactive-terminal.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,IAAI,MAAM,MAAM,CAAA;AAEvB,OAAO,EAAC,iBAAiB,EAAC,MAAM,iBAAiB,CAAA;AAEjD,OAAO,EAAC,oBAAoB,EAAC,MAAM,0CAA0C,CAAA;
|
|
1
|
+
{"version":3,"file":"interactive-terminal.js","sourceRoot":"","sources":["../../../../src/commands/dev/utils/interactive-terminal.ts"],"names":[],"mappings":"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"}
|