@shopify/shop-minis-cli 0.0.140 → 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/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 +5 -1
- package/build/commands/dev/utils/interactive-terminal.js +63 -16
- 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 +2 -0
- 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/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/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
|
@@ -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":"AAAA,OAAO,EAAC,WAAW,EAAC,MAAM,8BAA8B,CAAA;AACxD,OAAO,OAAO,MAAM,SAAS,CAAA;AAI7B,OAAO,EAAC,iBAAiB,EAAE,iBAAiB,EAAC,MAAM,iBAAiB,CAAA;AACpE,OAAO,EAAC,WAAW,EAAC,MAAM,eAAe,CAAA;AAEzC,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,WAAW,EAAE,OAAO,EAAE,SAAS,EAAE,kBAAkB,CAAC,CAAA;AAG5E,MAAM,CAAC,KAAK,UAAU,eAAe;IACnC,MAAM,KAAK,GAAG,CACZ,MAAM,OAAO,CAAC;QACZ,IAAI,EAAE,cAAc;QACpB,IAAI,EAAE,OAAO;QACb,KAAK,EAAE,EAAE;QACT,OAAO,EAAE,iBAAiB,CAAC,gBAAgB,CAAC;QAC5C,OAAO,EAAE,yBAAyB;QAClC,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YAC9B,KAAK,EAAE,MAAM;YACb,KAAK,EAAE,MAAM;SACd,CAAC,CAAC;QACH,OAAO,EAAE,KAAK,EAAE,KAAa,EAAE,OAAc,EAAE,EAAE;YAC/C,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,CAAA;YACpC,OAAO,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAA;QAC3D,CAAC;KACF,CAAC,CACH,CAAC,KAAK,CAAA;IAEP,IAAI,KAAK,EAAE;QACT,iBAAiB,CAAC,gBAAgB,EAAE,KAAK,CAAC,CAAA;KAC3C;IAED,OAAO,KAAK,CAAA;AACd,CAAC;AAED,MAAM,UAAU,oBAAoB,CAClC,UAAkB,EAClB,UAAyB;IAEzB,IAAI,IAAI,CAAA;IACR,QAAQ,UAAU,EAAE;QAClB,KAAK,OAAO;YACV,IAAI,GAAG,gBAAgB,UAAU,EAAE,CAAA;YACnC,MAAK;QACP,KAAK,SAAS;YACZ,IAAI,GAAG,KAAK,UAAU,EAAE,CAAA;YACxB,MAAK;QACP,KAAK,kBAAkB;YACrB,IAAI,GAAG,YAAY,UAAU,EAAE,CAAA;YAC/B,MAAK;QACP,KAAK,WAAW,CAAC;QACjB;YACE,IAAI,GAAG,WAAW,CAAA;YAClB,MAAK;KACR;IAED,MAAM,QAAQ,GAAG,YAAY,IAAI,EAAE,CAAA;IAEnC,WAAW,CAAC,aAAa,QAAQ,EAAE,CAAC,CAAA;IAEpC,OAAO,QAAQ,CAAA;AACjB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,UAAkB;IAElB,IAAI,OAAe,CAAA;IAEnB,QAAQ,UAAU,EAAE;QAClB,KAAK,WAAW;YACd,OAAO,IAAI,CAAA;QACb,KAAK,SAAS;YACZ,OAAO,GAAG,8BAA8B,CAAA;YACxC,MAAK;QACP,KAAK,OAAO;YACV,OAAO,GAAG,2BAA2B,CAAA;YACrC,MAAK;QACP,KAAK,kBAAkB;YACrB,OAAO,GAAG,4BAA4B,CAAA;YACtC,MAAK;QACP;YACE,OAAO,GAAG,+BAA+B,CAAA;KAC5C;IAED,MAAM,SAAS,GAAG,WAAW,UAAU,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,WAAW,EAAE,KAAK,CAAA;IAE5E,MAAM,EAAC,OAAO,EAAC,GAAG,MAAM,OAAO,CAAC;QAC9B,IAAI,EAAE,MAAM;QACZ,IAAI,EAAE,SAAS;QACf,OAAO,EAAE,iBAAiB,CAAC,SAAS,CAAC;QACrC,OAAO;QACP,QAAQ,EAAE,KAAK,CAAC,EAAE;YAChB,MAAM,UAAU,GAAG,8CAA8C,CAAC,IAAI,CACpE,KAAK,CACN,CAAA;YACD,OAAO,UAAU;gBACf,CAAC,CAAC,IAAI;gBACN,CAAC,CAAC,gIAAgI,CAAA;QACtI,CAAC;KACF,CAAC,CAAA;IAEF,IAAI,OAAO,EAAE;QACX,iBAAiB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAA;KACtC;IAED,OAAO,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA,CAAC,4BAA4B;AAC7F,CAAC;AAED,MAAM,UAAU,kBAAkB,CAChC,UAAkB,EAClB,OAA0B;IAE1B,MAAM,aAAa,GAAG,CAAC,MAAc,EAAE,EAAE,CACvC,OAAO,EAAE,gBAAgB,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAA;IAEtE,WAAW,CAAC,0BAA0B,aAAa,CAAC,YAAY,CAAC,EAAE,CAAC,CAAA;IACpE,WAAW,CAAC,4BAA4B,aAAa,CAAC,cAAc,CAAC,EAAE,CAAC,CAAA;IACxE,WAAW,CAAC,0BAA0B,aAAa,CAAC,aAAa,CAAC,EAAE,CAAC,CAAA;IAErE,IAAI,OAAO,CAAA;IACX,QAAQ,UAAU,EAAE;QAClB,KAAK,OAAO;YACV,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,EAAE;gBAChC,OAAO,GAAG,4BAA4B,CAAA;aACvC;YACD,MAAK;QACP,KAAK,SAAS;YACZ,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,EAAE;gBAClC,OAAO,GAAG,8BAA8B,CAAA;aACzC;YACD,MAAK;QACP,KAAK,kBAAkB;YACrB,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,EAAE;gBACjC,OAAO,GAAG,uCAAuC,CAAA;aAClD;YACD,MAAK;QACP,KAAK,WAAW,CAAC;QACjB;YACE,OAAM;KACT;IAED,IAAI,OAAO,EAAE;QACX,OAAO,CAAC,KAAK,CACX;EACJ,OAAO;OACF,CACF,CAAA;KACF;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAC7C,UAAkB,EAClB,OAA0B;IAE1B,MAAM,EAAC,KAAK,EAAC,GAAG,MAAM,OAAO,CAAC;QAC5B,IAAI,EAAE,QAAQ;QACd,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,eAAe;QACxB,OAAO,EAAE;YACP;gBACE,KAAK,EAAE,uBAAuB;gBAC9B,WAAW,EACT,gEAAgE;gBAClE,KAAK,EAAE,QAAQ;aAChB;YACD;gBACE,KAAK,EAAE,kBAAkB;gBACzB,WAAW,EAAE,sCAAsC;gBACnD,KAAK,EAAE,MAAM;aACd;YACD;gBACE,KAAK,EAAE,iCAAiC;gBACxC,WAAW,EACT,mEAAmE;gBACrE,KAAK,EAAE,OAAO;aACf;SACF;KACF,CAAC,CAAA;IAEF,IAAI,KAAK,KAAK,QAAQ,EAAE;QACtB,OAAO,WAAW,CAAC,UAAU,EAAE,OAAO,EAAE,IAAI,CAAC,CAAA;KAC9C;SAAM,IAAI,KAAK,KAAK,MAAM,EAAE;QAC3B,OAAO,WAAW,CAAC,UAAU,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,CAAA;KACpD;SAAM,IAAI,KAAK,KAAK,OAAO,EAAE;QAC5B,MAAM,MAAM,GAAG,MAAM,eAAe,EAAE,CAAA;QACtC,MAAM,UAAU,GAAG,MAAM,mBAAmB,CAAC,MAAM,CAAC,CAAA;QACpD,OAAO,oBAAoB,CAAC,MAAM,EAAE,UAAU,CAAC,CAAA;KAChD;AACH,CAAC"}
|
|
@@ -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,7 +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(): Promise<void>;
|
|
17
19
|
private startApp;
|
|
20
|
+
private openDeeplink;
|
|
18
21
|
private get deeplink();
|
|
22
|
+
private getCurrentPlatformAndDeviceId;
|
|
19
23
|
}
|
|
@@ -3,13 +3,14 @@ import open from 'open';
|
|
|
3
3
|
import { androidHomeExists } from '../../config.js';
|
|
4
4
|
import { LoadingStateHandlers } from '../../../utils/loading-state-handlers.js';
|
|
5
5
|
import { maybeLaunchEmulator, promptForAndroidDevices } from './android.js';
|
|
6
|
-
import { getBundleUrl, getDeeplink } from './deeplink.js';
|
|
6
|
+
import { getBundleUrl, getDeeplink, getDeeplinkForMiniViewer, } from './deeplink.js';
|
|
7
7
|
import { DEV_PANEL_BASE_URL } from './metro/metro-server-middleware.js';
|
|
8
8
|
import { Platform } from './platform.js';
|
|
9
|
-
import { printQRCode } from './qr-code.js';
|
|
10
9
|
import { bootSimulator, promptForSimulator } from './simulator.js';
|
|
11
10
|
import { startApp } from './start-app/start-app.js';
|
|
12
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';
|
|
13
14
|
const { stdin } = process;
|
|
14
15
|
function clearTerminal() {
|
|
15
16
|
process.stdout.write('\x1B[2J\x1B[3J\x1B[H');
|
|
@@ -19,6 +20,8 @@ export class InteractiveTerminal {
|
|
|
19
20
|
miniHandle;
|
|
20
21
|
options;
|
|
21
22
|
loadingHandlers = new LoadingStateHandlers();
|
|
23
|
+
currentPlatform = null;
|
|
24
|
+
currentDeviceId = null;
|
|
22
25
|
constructor(options, miniHandle) {
|
|
23
26
|
this.miniHandle = miniHandle;
|
|
24
27
|
this.options = options;
|
|
@@ -60,9 +63,14 @@ export class InteractiveTerminal {
|
|
|
60
63
|
console.log(`
|
|
61
64
|
› Press ${chalk.cyan.bold(`a`)} │ Open on Android device or emulator
|
|
62
65
|
› Press ${chalk.cyan.bold(`i`)} │ Open in iOS simulator
|
|
63
|
-
|
|
64
|
-
|
|
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
|
+
: '', `
|
|
65
72
|
› Press ${chalk.cyan.bold(`d`)} │ Open Developer Dashboard in web browser
|
|
73
|
+
› Press ${chalk.cyan.bold(`h`)} │ Open Minis Docs in browser
|
|
66
74
|
|
|
67
75
|
${chalk.dim('Press Ctrl+C to exit.')}`);
|
|
68
76
|
}
|
|
@@ -132,21 +140,44 @@ ${chalk.dim('Press Ctrl+C to exit.')}`);
|
|
|
132
140
|
}
|
|
133
141
|
break;
|
|
134
142
|
}
|
|
135
|
-
case 'q': {
|
|
136
|
-
await this.printDeeplinkQRCode();
|
|
137
|
-
break;
|
|
138
|
-
}
|
|
139
143
|
case 'd': {
|
|
140
|
-
|
|
141
|
-
|
|
144
|
+
const deepLink = await promptForDevPanelDeeplink(this.miniHandle, this.options);
|
|
145
|
+
if (!deepLink) {
|
|
146
|
+
return;
|
|
147
|
+
}
|
|
142
148
|
const paramsObj = {
|
|
143
149
|
bundleUrl: getBundleUrl(this.options.host),
|
|
144
|
-
deepLink
|
|
150
|
+
deepLink,
|
|
145
151
|
};
|
|
146
152
|
const searchParams = `?${new URLSearchParams(paramsObj).toString()}`;
|
|
147
153
|
open(`${DEV_PANEL_BASE_URL}${searchParams}`);
|
|
148
154
|
break;
|
|
149
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
|
+
}
|
|
150
181
|
case CTRL_C: {
|
|
151
182
|
this.stopWaitingForCommand();
|
|
152
183
|
process.exit(0);
|
|
@@ -163,13 +194,10 @@ ${chalk.dim('Press Ctrl+C to exit.')}`);
|
|
|
163
194
|
console.log(`See ${chalk.blue.underline.bold('https://developer.android.com/studio/command-line/variables')}`);
|
|
164
195
|
await this.waitForAnyKeyAndPrintInstructions();
|
|
165
196
|
}
|
|
166
|
-
async printDeeplinkQRCode() {
|
|
167
|
-
console.log('\n');
|
|
168
|
-
await printQRCode(getDeeplink(this.miniHandle, this.options, true));
|
|
169
|
-
console.log('Scan the QR code to open Shop Mini on your device (requires the Shop app to be installed)\n');
|
|
170
|
-
}
|
|
171
197
|
async startApp(platform, deviceId) {
|
|
172
198
|
try {
|
|
199
|
+
this.currentPlatform = platform;
|
|
200
|
+
this.currentDeviceId = deviceId;
|
|
173
201
|
await startApp({
|
|
174
202
|
platform,
|
|
175
203
|
deviceId,
|
|
@@ -177,6 +205,18 @@ ${chalk.dim('Press Ctrl+C to exit.')}`);
|
|
|
177
205
|
buildType: this.options.buildType,
|
|
178
206
|
snapshotVersion: this.options.snapshotVersion,
|
|
179
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?.();
|
|
180
220
|
}
|
|
181
221
|
catch (err) {
|
|
182
222
|
this.loadingHandlers.loadingEnd('fail', err?.message || err);
|
|
@@ -185,5 +225,12 @@ ${chalk.dim('Press Ctrl+C to exit.')}`);
|
|
|
185
225
|
get deeplink() {
|
|
186
226
|
return getDeeplink(this.miniHandle, this.options);
|
|
187
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
|
+
}
|
|
188
235
|
}
|
|
189
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;AAE7E,OAAO,EAAC,mBAAmB,EAAE,uBAAuB,EAAC,MAAM,cAAc,CAAA;AACzE,OAAO,
|
|
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;AAE7E,OAAO,EAAC,mBAAmB,EAAE,uBAAuB,EAAC,MAAM,cAAc,CAAA;AACzE,OAAO,EACL,YAAY,EACZ,WAAW,EACX,wBAAwB,GACzB,MAAM,eAAe,CAAA;AACtB,OAAO,EAAC,kBAAkB,EAAC,MAAM,oCAAoC,CAAA;AACrE,OAAO,EAAC,QAAQ,EAAC,MAAM,eAAe,CAAA;AACtC,OAAO,EAAC,aAAa,EAAE,kBAAkB,EAAC,MAAM,gBAAgB,CAAA;AAChE,OAAO,EAAC,QAAQ,EAAC,MAAM,0BAA0B,CAAA;AACjD,OAAO,EAAC,oBAAoB,EAAC,MAAM,2BAA2B,CAAA;AAC9D,OAAO,EACL,eAAe,EACf,oBAAoB,EACpB,mBAAmB,EACnB,kBAAkB,EAClB,yBAAyB,GAC1B,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAC,mBAAmB,EAAC,MAAM,uBAAuB,CAAA;AAEzD,MAAM,EAAC,KAAK,EAAC,GAAG,OAAO,CAAA;AAEvB,SAAS,aAAa;IACpB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAA;AAC9C,CAAC;AAED,MAAM,MAAM,GAAG,QAAQ,CAAA;AAEvB,MAAM,OAAO,mBAAmB;IAC9B,UAAU,CAAQ;IAClB,OAAO,CAAmB;IAC1B,eAAe,GAAG,IAAI,oBAAoB,EAAE,CAAA;IAC5C,eAAe,GAAoB,IAAI,CAAA;IACvC,eAAe,GAAkB,IAAI,CAAA;IAErC,YAAY,OAA0B,EAAE,UAAkB;QACxD,IAAI,CAAC,UAAU,GAAG,UAAU,CAAA;QAC5B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;IACxB,CAAC;IAED,sBAAsB,GAAG,GAAG,EAAE;QAC5B,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE;YACrB,OAAO,CAAC,IAAI,CACV,sFAAsF,CACvF,CAAA;YACD,OAAM;SACP;QACD,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAA;QACtB,KAAK,CAAC,MAAM,EAAE,CAAA;QACd,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAA;QACzB,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC,qBAAqB,CAAC,CAAA;IAC9C,CAAC,CAAA;IAED,qBAAqB,GAAG,GAAG,EAAE;QAC3B,KAAK,CAAC,cAAc,CAAC,MAAM,EAAE,IAAI,CAAC,qBAAqB,CAAC,CAAA;QACxD,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE;YACrB,OAAO,CAAC,IAAI,CACV,sFAAsF,CACvF,CAAA;YACD,OAAM;SACP;QACD,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAA;QACvB,KAAK,CAAC,MAAM,EAAE,CAAA;IAChB,CAAC,CAAA;IAED,iCAAiC,GAAG,KAAK,IAAI,EAAE;QAC7C,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAA;QAC3C,IAAI,CAAC,qBAAqB,EAAE,CAAA;QAC5B,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE;YACrB,OAAO,CAAC,IAAI,CACV,sFAAsF,CACvF,CAAA;YACD,OAAM;SACP;QACD,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAA;QACtB,KAAK,CAAC,MAAM,EAAE,CAAA;QACd,OAAO,IAAI,OAAO,CAAO,OAAO,CAAC,EAAE,CACjC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE;YAC9B,IAAI,CAAC,eAAe,EAAE,CAAA;YACtB,OAAO,EAAE,CAAA;QACX,CAAC,CAAC,CACH,CAAA;IACH,CAAC,CAAA;IAED,eAAe;QACb,OAAO,CAAC,GAAG,CACT;UACI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;UACpB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;CAC7B,EACK,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,eAAe;YAC1C,CAAC,CAAC;UACA,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;UACpB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;CAC7B;YACO,CAAC,CAAC,EAAE,EACN;UACI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;UACpB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;;EAE5B,KAAK,CAAC,GAAG,CAAC,uBAAuB,CAAC,EAAE,CACjC,CAAA;IACH,CAAC;IAED,KAAK;QACH,IAAI,CAAC,eAAe,EAAE,CAAA;QACtB,IAAI,CAAC,sBAAsB,EAAE,CAAA;IAC/B,CAAC;IAED,qBAAqB,GAAG,KAAK,EAAE,GAAW,EAAE,EAAE;QAC5C,IAAI;YACF,IAAI,CAAC,qBAAqB,EAAE,CAAA;YAC5B,MAAM,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAA;SAC/B;QAAC,OAAO,GAAG,EAAE;YACZ,OAAO,CAAC,GAAG,CAAC,0CAA0C,GAAG,EAAE,CAAC,CAAA;YAC5D,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;SACjB;gBAAS;YACR,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAA;YACjC,IAAI,CAAC,sBAAsB,EAAE,CAAA;SAC9B;IACH,CAAC,CAAA;IAED,cAAc,GAAG,KAAK,EAAE,GAAW,EAAE,EAAE;QACrC,QAAQ,GAAG,EAAE;YACX,KAAK,GAAG,CAAC,CAAC;gBACR,IAAI,CAAC,eAAe,EAAE,CAAA;gBACtB,MAAK;aACN;YACD,KAAK,GAAG,CAAC,CAAC;gBACR,aAAa,EAAE,CAAA;gBAEf,IAAI,CAAC,iBAAiB,EAAE,EAAE;oBACxB,IAAI,CAAC,gCAAgC,EAAE,CAAA;oBACvC,MAAK;iBACN;gBAED,MAAM,MAAM,GAAG,MAAM,uBAAuB,EAAE,CAAA;gBAC9C,IAAI,MAAM,EAAE;oBACV,IAAI,MAAM,CAAC,IAAI,KAAK,UAAU,EAAE;wBAC9B,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,oBAAoB,CAAC,CAAA;wBACvD,MAAM,UAAU,GAAG,MAAM,mBAAmB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;wBACzD,IAAI,CAAC,UAAU,EAAE;4BACf,IAAI,CAAC,eAAe,CAAC,UAAU,CAC7B,MAAM,EACN,4BAA4B,MAAM,CAAC,IAAI,EAAE,CAC1C,CAAA;4BACD,MAAK;yBACN;wBACD,MAAM,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC,CAAA;qBAClD;yBAAM;wBACL,MAAM,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,CAAA;qBACnD;iBACF;qBAAM;oBACL,OAAO,CAAC,GAAG,CAAC,kDAAkD,CAAC,CAAA;oBAC/D,OAAO,CAAC,GAAG,CACT,OAAO,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAC9B,gEAAgE,CACjE,kEAAkE,CACpE,CAAA;oBACD,OAAO,CAAC,GAAG,CACT,MAAM,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAC7B,+DAA+D,CAChE,iDAAiD,CACnD,CAAA;oBACD,IAAI,CAAC,iCAAiC,EAAE,CAAA;iBACzC;gBAED,MAAK;aACN;YACD,KAAK,GAAG,CAAC,CAAC;gBACR,aAAa,EAAE,CAAA;gBACf,MAAM,SAAS,GAAG,MAAM,kBAAkB,EAAE,CAAA;gBAC5C,IAAI,SAAS,EAAE;oBACb,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,qBAAqB,CAAC,CAAA;oBACxD,MAAM,aAAa,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA;oBACnC,MAAM,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,EAAE,SAAS,CAAC,IAAI,CAAC,CAAA;iBAClD;qBAAM;oBACL,OAAO,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAA;iBAC7C;gBACD,MAAK;aACN;YACD,KAAK,GAAG,CAAC,CAAC;gBACR,MAAM,QAAQ,GAAG,MAAM,yBAAyB,CAC9C,IAAI,CAAC,UAAU,EACf,IAAI,CAAC,OAAO,CACb,CAAA;gBAED,IAAI,CAAC,QAAQ,EAAE;oBACb,OAAM;iBACP;gBAED,MAAM,SAAS,GAAG;oBAChB,SAAS,EAAE,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;oBAC1C,QAAQ;iBACT,CAAA;gBAED,MAAM,YAAY,GAAG,IAAI,IAAI,eAAe,CAAC,SAAS,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAA;gBAEpE,IAAI,CAAC,GAAG,kBAAkB,GAAG,YAAY,EAAE,CAAC,CAAA;gBAC5C,MAAK;aACN;YACD,KAAK,GAAG,CAAC,CAAC;gBACR,MAAM,GAAG,GAAG,8BAA8B,CAAA;gBAC1C,OAAO,CAAC,GAAG,CAAC,YAAY,GAAG,GAAG,CAAC,CAAA;gBAC/B,IAAI,CAAC,GAAG,CAAC,CAAA;gBACT,MAAK;aACN;YACD,KAAK,GAAG,CAAC,CAAC;gBACR,MAAM,EAAC,QAAQ,EAAE,QAAQ,EAAC,GAAG,IAAI,CAAC,6BAA6B,EAAE,CAAA;gBACjE,IAAI,QAAQ,IAAI,QAAQ,EAAE;oBACxB,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,qBAAqB,CAAC,CAAA;oBACxD,MAAM,IAAI,CAAC,YAAY,CACrB,QAAQ,EACR,QAAQ,EACR,wBAAwB,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,OAAO,CAAC,CACxD,CAAA;iBACF;gBACD,MAAK;aACN;YACD,KAAK,GAAG,CAAC,CAAC;gBACR,MAAM,EAAC,QAAQ,EAAE,QAAQ,EAAC,GAAG,IAAI,CAAC,6BAA6B,EAAE,CAAA;gBACjE,IAAI,QAAQ,IAAI,QAAQ,EAAE;oBACxB,MAAM,MAAM,GAAG,MAAM,eAAe,EAAE,CAAA;oBACtC,MAAM,UAAU,GAAG,MAAM,mBAAmB,CAAC,MAAM,CAAC,CAAA;oBAEpD,kBAAkB,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,CAAA;oBAExC,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,WAAW,MAAM,SAAS,CAAC,CAAA;oBAC7D,MAAM,IAAI,CAAC,YAAY,CACrB,QAAQ,EACR,QAAQ,EACR,oBAAoB,CAAC,MAAM,EAAE,UAAU,CAAC,CACzC,CAAA;iBACF;gBACD,MAAK;aACN;YACD,KAAK,MAAM,CAAC,CAAC;gBACX,IAAI,CAAC,qBAAqB,EAAE,CAAA;gBAC5B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;gBACf,aAAa;gBACb,MAAK;aACN;YACD,OAAO,CAAC,CAAC;gBACP,MAAK;aACN;SACF;IACH,CAAC,CAAA;IAED,KAAK,CAAC,gCAAgC;QACpC,OAAO,CAAC,IAAI,CACV,KAAK,CAAC,GAAG,CACP,yJAAyJ,CAC1J,CACF,CAAA;QACD,OAAO,CAAC,GAAG,CACT,OAAO,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAC9B,6DAA6D,CAC9D,EAAE,CACJ,CAAA;QACD,MAAM,IAAI,CAAC,iCAAiC,EAAE,CAAA;IAChD,CAAC;IAEO,KAAK,CAAC,QAAQ,CAAC,QAAkB,EAAE,QAAgB;QACzD,IAAI;YACF,IAAI,CAAC,eAAe,GAAG,QAAQ,CAAA;YAC/B,IAAI,CAAC,eAAe,GAAG,QAAQ,CAAA;YAE/B,MAAM,QAAQ,CACZ;gBACE,QAAQ;gBACR,QAAQ;gBACR,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS;gBACjC,eAAe,EAAE,IAAI,CAAC,OAAO,CAAC,eAAe;aAC9C,EACD,IAAI,CAAC,eAAe,CACrB,CAAA;YACD,kDAAkD;YAClD,IAAI,CAAC,eAAe,EAAE,CAAA;SACvB;QAAC,OAAO,GAAQ,EAAE;YACjB,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,MAAM,EAAE,GAAG,EAAE,OAAO,IAAI,GAAG,CAAC,CAAA;SAC7D;IACH,CAAC;IAEO,KAAK,CAAC,YAAY,CACxB,QAAkB,EAClB,QAAgB,EAChB,QAAgB;QAEhB,IAAI;YACF,MAAM,EAAC,YAAY,EAAC,GAAG,mBAAmB,CAAC,QAAQ,CAAC,CAAA;YACpD,MAAM,YAAY,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAA;YACtC,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE,EAAE,CAAA;SACpC;QAAC,OAAO,GAAQ,EAAE;YACjB,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,MAAM,EAAE,GAAG,EAAE,OAAO,IAAI,GAAG,CAAC,CAAA;SAC7D;IACH,CAAC;IAED,IAAY,QAAQ;QAClB,OAAO,WAAW,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,OAAO,CAAC,CAAA;IACnD,CAAC;IAEO,6BAA6B;QACnC,IAAI,CAAC,IAAI,CAAC,eAAe,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE;YAClD,OAAO,CAAC,GAAG,CACT,MAAM,KAAK,CAAC,GAAG,CAAC,IAAI,CAClB,GAAG,CACJ,sCAAsC,KAAK,CAAC,IAAI,CAAC,IAAI,CACpD,GAAG,CACJ,eAAe,KAAK,CAAC,IAAI,CAAC,IAAI,CAC7B,GAAG,CACJ,yCAAyC,CAC3C,CAAA;YACD,OAAO,EAAC,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAC,CAAA;SACxC;QAED,OAAO,EAAC,QAAQ,EAAE,IAAI,CAAC,eAAe,EAAE,QAAQ,EAAE,IAAI,CAAC,eAAe,EAAC,CAAA;IACzE,CAAC;CACF"}
|
|
@@ -1,16 +1,14 @@
|
|
|
1
1
|
import path from 'node:path';
|
|
2
2
|
import fs from 'node:fs';
|
|
3
3
|
import { Command } from 'commander';
|
|
4
|
-
import {
|
|
4
|
+
import { renderSelectPrompt, renderSuccess, renderInfo, renderError, } from '@shopify/cli-kit/node/ui';
|
|
5
|
+
import { AbortError, handler as handleError } from '@shopify/cli-kit/node/error';
|
|
5
6
|
import _ from 'lodash';
|
|
6
7
|
import { fetchAllOrgs, fetchAppsForOrg, token, } from '../../data/partners/query.js';
|
|
7
8
|
import { miniCreate } from '../../data/mini-create.js';
|
|
8
9
|
import { getMiniManifest } from '../../utils/minis-manifest.js';
|
|
9
10
|
import { syncManifest } from '../../utils/sync-manifest.js';
|
|
10
|
-
export
|
|
11
|
-
.name('create')
|
|
12
|
-
.description('Create a new Shop Mini')
|
|
13
|
-
.action(async () => {
|
|
11
|
+
export async function loginAndSetup() {
|
|
14
12
|
const envFilePath = path.join(process.cwd(), '.env');
|
|
15
13
|
let envFileContents = '';
|
|
16
14
|
if (fs.existsSync(envFilePath)) {
|
|
@@ -24,22 +22,28 @@ export const command = new Command()
|
|
|
24
22
|
const { handle: miniHandle, name: miniName } = getMiniManifest();
|
|
25
23
|
// Select the organization
|
|
26
24
|
const organizations = await fetchAllOrgs();
|
|
27
|
-
const orgId =
|
|
25
|
+
const orgId = await renderSelectPrompt({
|
|
28
26
|
message: 'Select your organization',
|
|
29
27
|
choices: organizations.map(org => ({
|
|
30
28
|
label: org.businessName,
|
|
31
29
|
value: org.id,
|
|
32
30
|
})),
|
|
33
|
-
})
|
|
31
|
+
});
|
|
34
32
|
// Select the app
|
|
35
33
|
const apps = await fetchAppsForOrg(orgId);
|
|
36
|
-
|
|
34
|
+
if (apps.apps.length === 0) {
|
|
35
|
+
renderInfo({
|
|
36
|
+
body: 'No apps found in the selected organization. Please create a Shopify app by following this guide before continuing: https://shopify.dev/docs/apps/build/scaffold-app.',
|
|
37
|
+
});
|
|
38
|
+
process.exit(0);
|
|
39
|
+
}
|
|
40
|
+
const appId = await renderSelectPrompt({
|
|
37
41
|
message: 'Select your app',
|
|
38
42
|
choices: apps.apps.map(app => ({
|
|
39
43
|
label: app.title,
|
|
40
44
|
value: app.id,
|
|
41
45
|
})),
|
|
42
|
-
})
|
|
46
|
+
});
|
|
43
47
|
const selectedApp = apps.apps.find(app => app.id === appId);
|
|
44
48
|
const result = await miniCreate({
|
|
45
49
|
name: miniName,
|
|
@@ -48,11 +52,26 @@ export const command = new Command()
|
|
|
48
52
|
partnersAccessToken: await token(),
|
|
49
53
|
});
|
|
50
54
|
if (result.userErrors.length > 0) {
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
55
|
+
if (result.userErrors.length === 1) {
|
|
56
|
+
if (result.userErrors[0].code === 'HANDLE_NOT_UNIQUE') {
|
|
57
|
+
renderError({
|
|
58
|
+
body: `A Shop Mini with the name "${miniName}" already exists. Please choose a different name by updating src/manifest.json.`,
|
|
59
|
+
});
|
|
60
|
+
process.exit(0);
|
|
61
|
+
}
|
|
62
|
+
else if (result.userErrors[0].code === 'APP_ALREADY_LINKED') {
|
|
63
|
+
renderError({
|
|
64
|
+
body: `Your Shopify app "${selectedApp.title}" has already been linked to a Shop Mini. Please create a new Shopify app to link to your mini by following this guide: https://shopify.dev/docs/apps/build/scaffold-app.`,
|
|
65
|
+
});
|
|
66
|
+
process.exit(0);
|
|
67
|
+
}
|
|
68
|
+
else {
|
|
69
|
+
throw new AbortError(result.userErrors[0].message);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
else {
|
|
73
|
+
throw new AbortError(result.userErrors.map(({ message }) => message).join('\n'));
|
|
74
|
+
}
|
|
56
75
|
}
|
|
57
76
|
// Append the new SHOP_MINIS_API_KEY to the .env file
|
|
58
77
|
envFileContents += `\nSHOP_MINIS_API_KEY=${result.token}`;
|
|
@@ -73,5 +92,16 @@ export const command = new Command()
|
|
|
73
92
|
],
|
|
74
93
|
});
|
|
75
94
|
}
|
|
95
|
+
}
|
|
96
|
+
export const command = new Command()
|
|
97
|
+
.name('create')
|
|
98
|
+
.description('Create a new Shop Mini')
|
|
99
|
+
.action(async () => {
|
|
100
|
+
try {
|
|
101
|
+
await loginAndSetup();
|
|
102
|
+
}
|
|
103
|
+
catch (error) {
|
|
104
|
+
handleError(error);
|
|
105
|
+
}
|
|
76
106
|
});
|
|
77
107
|
//# sourceMappingURL=create.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create.js","sourceRoot":"","sources":["../../../src/commands/setup/create.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAA;AAC5B,OAAO,EAAE,MAAM,SAAS,CAAA;AAExB,OAAO,EAAC,OAAO,EAAC,MAAM,WAAW,CAAA;AACjC,OAAO,EACL,
|
|
1
|
+
{"version":3,"file":"create.js","sourceRoot":"","sources":["../../../src/commands/setup/create.ts"],"names":[],"mappings":"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"}
|
|
@@ -64,10 +64,15 @@ export function loadCommand(parentProgram) {
|
|
|
64
64
|
});
|
|
65
65
|
const manifestJson = JSON.parse(manifestJsonString) || {};
|
|
66
66
|
manifestJson.handle = miniInfo.handle;
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
}
|
|
67
|
+
if (miniInfo.productionShopifyAppId) {
|
|
68
|
+
manifestJson.shopify_apps ||= {};
|
|
69
|
+
manifestJson.shopify_apps.production = extractIdFromGID(miniInfo.productionShopifyAppId);
|
|
70
|
+
}
|
|
71
|
+
if (miniInfo.developmentShopifyAppIds.length > 0) {
|
|
72
|
+
manifestJson.shopify_apps ||= {};
|
|
73
|
+
manifestJson.shopify_apps.development =
|
|
74
|
+
miniInfo.developmentShopifyAppIds.map(id => extractIdFromGID(id));
|
|
75
|
+
}
|
|
71
76
|
fs.writeFileSync(manifestJsonPath, `${JSON.stringify(manifestJson, null, 2)}\n`, {
|
|
72
77
|
encoding: 'utf-8',
|
|
73
78
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/setup/index.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/setup/index.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAA;AAC5B,OAAO,EAAE,MAAM,SAAS,CAAA;AAExB,OAAO,EAAC,OAAO,EAAC,MAAM,WAAW,CAAA;AACjC,OAAO,OAAO,MAAM,SAAS,CAAA;AAE7B,OAAO,EAAC,wBAAwB,EAAC,MAAM,4CAA4C,CAAA;AACnF,OAAO,EAAC,SAAS,EAAC,MAAM,oBAAoB,CAAA;AAC5C,OAAO,EAAC,wBAAwB,EAAC,MAAM,cAAc,CAAA;AACrD,OAAO,EAAC,gBAAgB,EAAC,MAAM,iCAAiC,CAAA;AAChE,OAAO,EAAC,eAAe,EAAC,MAAM,qBAAqB,CAAA;AACnD,OAAO,EAAC,gBAAgB,EAAC,MAAM,+BAA+B,CAAA;AAE9D,OAAO,EAAC,OAAO,IAAI,aAAa,EAAC,MAAM,aAAa,CAAA;AAEpD,SAAS,QAAQ;IACf,OAAO,CAAC,GAAG,CAAC,0CAA0C,CAAC,CAAA;IACvD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;AACjB,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,aAAsB;IAChD,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE;SAC1B,IAAI,CAAC,OAAO,CAAC;SACb,WAAW,CAAC,wBAAwB,CAAC;SACrC,UAAU,CAAC,aAAa,EAAE,EAAC,MAAM,EAAE,IAAI,EAAC,CAAC,CAAC,sBAAsB;SAChE,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,MAAM,EAAC,sBAAsB,EAAC,GAAG,MAAM,OAAO,CAAC,MAAM,CACnD;YACE,IAAI,EAAE,SAAS;YACf,IAAI,EAAE,wBAAwB;YAC9B,OAAO,EACL,kNAAkN;SACrN,EACD,EAAC,QAAQ,EAAC,CACX,CAAA;QAED,IAAI,CAAC,sBAAsB,EAAE;YAC3B,QAAQ,EAAE,CAAA;SACX;QAED,IAAI,wBAAwB,EAAE;YAC5B,MAAM,EAAC,gBAAgB,EAAC,GAAG,MAAM,OAAO,CAAC,MAAM,CAC7C;gBACE,IAAI,EAAE,SAAS;gBACf,IAAI,EAAE,kBAAkB;gBACxB,OAAO,EACL,kKAAkK;aACrK,EACD,EAAC,QAAQ,EAAC,CACX,CAAA;YAED,IAAI,CAAC,gBAAgB,EAAE;gBACrB,QAAQ,EAAE,CAAA;aACX;SACF;QAED,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,MAAM,CACnC;YACE,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,gBAAgB;YACtB,OAAO,EAAE,qDAAqD;SAC/D,EACD,EAAC,QAAQ,EAAC,CACX,CAAA;QAED,MAAM,KAAK,GAAG,MAAM,wBAAwB,CAC1C,gBAAgB,CAAC,EAAC,IAAI,EAAE,QAAQ,CAAC,cAAc,EAAC,CAAC,EACjD;YACE,cAAc,EAAE,qBAAqB;YACrC,cAAc,EAAE,iBAAiB;SAClC,CACF,CAAA;QAED,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,CAAC,CAAA;QACpD,IAAI,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE;YAC9B,EAAE,CAAC,YAAY,CAAC,WAAW,EAAE,GAAG,WAAW,MAAM,CAAC,CAAA;SACnD;QAED,EAAE,CAAC,aAAa,CAAC,WAAW,EAAE,sBAAsB,KAAK,IAAI,EAAE;YAC7D,QAAQ,EAAE,OAAO;SAClB,CAAC,CAAA;QAEF,IAAI;YACF,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC;gBAC/B,aAAa,EAAE,UAAU,KAAK,EAAE;aACjC,CAAC,CAAA;YAEF,IAAI,QAAQ,EAAE;gBACZ,MAAM,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAChC,eAAe,EAAE,EACjB,mBAAmB,CACpB,CAAA;gBACD,MAAM,kBAAkB,GAAG,EAAE,CAAC,YAAY,CAAC,gBAAgB,EAAE;oBAC3D,QAAQ,EAAE,OAAO;iBAClB,CAAC,CAAA;gBACF,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,IAAI,EAAE,CAAA;gBACzD,YAAY,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAA;gBAErC,IAAI,QAAQ,CAAC,sBAAsB,EAAE;oBACnC,YAAY,CAAC,YAAY,KAAK,EAAE,CAAA;oBAChC,YAAY,CAAC,YAAY,CAAC,UAAU,GAAG,gBAAgB,CACrD,QAAQ,CAAC,sBAAsB,CAChC,CAAA;iBACF;gBAED,IAAI,QAAQ,CAAC,wBAAwB,CAAC,MAAM,GAAG,CAAC,EAAE;oBAChD,YAAY,CAAC,YAAY,KAAK,EAAE,CAAA;oBAChC,YAAY,CAAC,YAAY,CAAC,WAAW;wBACnC,QAAQ,CAAC,wBAAwB,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC,CAAA;iBACpE;gBAED,EAAE,CAAC,aAAa,CACd,gBAAgB,EAChB,GAAG,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAC5C;oBACE,QAAQ,EAAE,OAAO;iBAClB,CACF,CAAA;gBAED,OAAO,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAA;aAC/C;SACF;QAAC,OAAO,KAAU,EAAE;YACnB,IAAI,KAAK,EAAE,QAAQ,EAAE,MAAM,KAAK,GAAG,EAAE;gBACnC,OAAO,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAA;aAC1C;iBAAM;gBACL,OAAO,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAA;gBACnC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;aACrB;SACF;IACH,CAAC,CAAC,CAAA;IAEJ,aAAa,CAAC,UAAU,CAAC,OAAO,CAAC,CAAA;AACnC,CAAC"}
|
package/build/index.js
CHANGED
|
@@ -15,6 +15,7 @@ import { loadCommand as loadSetupCommand } from './commands/setup/index.js';
|
|
|
15
15
|
import { loadCommand as loadSubmitCommand } from './commands/submit/index.js';
|
|
16
16
|
import { loadCommand as loadUpgradeCommand } from './commands/upgrade/index.js';
|
|
17
17
|
import { loadCommand as loadValidateManifestCommand } from './commands/validate-manifest/index.js';
|
|
18
|
+
import { loadCommand as loadAppCommand } from './commands/app/index.js';
|
|
18
19
|
const program = new Command();
|
|
19
20
|
async function loadCommands() {
|
|
20
21
|
loadCreateMiniCommand(program);
|
|
@@ -29,6 +30,7 @@ async function loadCommands() {
|
|
|
29
30
|
loadInfoCommand(program);
|
|
30
31
|
loadSetupCommand(program);
|
|
31
32
|
loadCreateExtensionCommand(program);
|
|
33
|
+
loadAppCommand(program);
|
|
32
34
|
program.addCommand(doctorCommand);
|
|
33
35
|
program.addCommand(featuresCommand);
|
|
34
36
|
}
|
package/build/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAC,OAAO,EAAC,MAAM,WAAW,CAAA;AAEjC,OAAO,EAAC,WAAW,IAAI,2BAA2B,EAAC,MAAM,uCAAuC,CAAA;AAChG,OAAO,EAAC,WAAW,IAAI,0BAA0B,EAAC,MAAM,sCAAsC,CAAA;AAC9F,OAAO,EAAC,WAAW,IAAI,kBAAkB,EAAC,MAAM,6BAA6B,CAAA;AAC7E,OAAO,EAAC,WAAW,EAAC,MAAM,sBAAsB,CAAA;AAChD,OAAO,EAAC,WAAW,IAAI,0BAA0B,EAAC,MAAM,sCAAsC,CAAA;AAC9F,OAAO,EAAC,WAAW,IAAI,qBAAqB,EAAC,MAAM,iCAAiC,CAAA;AACpF,OAAO,EAAC,WAAW,IAAI,cAAc,EAAC,MAAM,yBAAyB,CAAA;AACrE,OAAO,EAAC,OAAO,IAAI,aAAa,EAAC,MAAM,4BAA4B,CAAA;AACnE,OAAO,EAAC,OAAO,IAAI,eAAe,EAAC,MAAM,8BAA8B,CAAA;AACvE,OAAO,EAAC,WAAW,IAAI,+BAA+B,EAAC,MAAM,4CAA4C,CAAA;AACzG,OAAO,EAAC,WAAW,IAAI,eAAe,EAAC,MAAM,0BAA0B,CAAA;AACvE,OAAO,EAAC,WAAW,IAAI,gBAAgB,EAAC,MAAM,2BAA2B,CAAA;AACzE,OAAO,EAAC,WAAW,IAAI,iBAAiB,EAAC,MAAM,4BAA4B,CAAA;AAC3E,OAAO,EAAC,WAAW,IAAI,kBAAkB,EAAC,MAAM,6BAA6B,CAAA;AAC7E,OAAO,EAAC,WAAW,IAAI,2BAA2B,EAAC,MAAM,uCAAuC,CAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAC,OAAO,EAAC,MAAM,WAAW,CAAA;AAEjC,OAAO,EAAC,WAAW,IAAI,2BAA2B,EAAC,MAAM,uCAAuC,CAAA;AAChG,OAAO,EAAC,WAAW,IAAI,0BAA0B,EAAC,MAAM,sCAAsC,CAAA;AAC9F,OAAO,EAAC,WAAW,IAAI,kBAAkB,EAAC,MAAM,6BAA6B,CAAA;AAC7E,OAAO,EAAC,WAAW,EAAC,MAAM,sBAAsB,CAAA;AAChD,OAAO,EAAC,WAAW,IAAI,0BAA0B,EAAC,MAAM,sCAAsC,CAAA;AAC9F,OAAO,EAAC,WAAW,IAAI,qBAAqB,EAAC,MAAM,iCAAiC,CAAA;AACpF,OAAO,EAAC,WAAW,IAAI,cAAc,EAAC,MAAM,yBAAyB,CAAA;AACrE,OAAO,EAAC,OAAO,IAAI,aAAa,EAAC,MAAM,4BAA4B,CAAA;AACnE,OAAO,EAAC,OAAO,IAAI,eAAe,EAAC,MAAM,8BAA8B,CAAA;AACvE,OAAO,EAAC,WAAW,IAAI,+BAA+B,EAAC,MAAM,4CAA4C,CAAA;AACzG,OAAO,EAAC,WAAW,IAAI,eAAe,EAAC,MAAM,0BAA0B,CAAA;AACvE,OAAO,EAAC,WAAW,IAAI,gBAAgB,EAAC,MAAM,2BAA2B,CAAA;AACzE,OAAO,EAAC,WAAW,IAAI,iBAAiB,EAAC,MAAM,4BAA4B,CAAA;AAC3E,OAAO,EAAC,WAAW,IAAI,kBAAkB,EAAC,MAAM,6BAA6B,CAAA;AAC7E,OAAO,EAAC,WAAW,IAAI,2BAA2B,EAAC,MAAM,uCAAuC,CAAA;AAChG,OAAO,EAAC,WAAW,IAAI,cAAc,EAAC,MAAM,yBAAyB,CAAA;AAErE,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAA;AAE7B,KAAK,UAAU,YAAY;IACzB,qBAAqB,CAAC,OAAO,CAAC,CAAA;IAC9B,MAAM,cAAc,CAAC,OAAO,CAAC,CAAA;IAC7B,+BAA+B,CAAC,OAAO,CAAC,CAAA;IACxC,iBAAiB,CAAC,OAAO,CAAC,CAAA;IAC1B,2BAA2B,CAAC,OAAO,CAAC,CAAA;IACpC,0BAA0B,CAAC,OAAO,CAAC,CAAA;IACnC,kBAAkB,CAAC,OAAO,CAAC,CAAA;IAC3B,2BAA2B,CAAC,OAAO,CAAC,CAAA;IACpC,kBAAkB,CAAC,OAAO,CAAC,CAAA;IAC3B,eAAe,CAAC,OAAO,CAAC,CAAA;IACxB,gBAAgB,CAAC,OAAO,CAAC,CAAA;IACzB,0BAA0B,CAAC,OAAO,CAAC,CAAA;IACnC,cAAc,CAAC,OAAO,CAAC,CAAA;IAEvB,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAA;IACjC,OAAO,CAAC,UAAU,CAAC,eAAe,CAAC,CAAA;AACrC,CAAC;AAED,OAAO;KACJ,IAAI,CAAC,YAAY,CAAC;KAClB,WAAW,CAAC,gCAAgC,CAAC;KAC7C,OAAO,CAAC,WAAW,CAAC,CAAA;AAEvB,YAAY,EAAE;KACX,IAAI,CAAC,GAAG,EAAE;IACT,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;QAC3B,sFAAsF;QACtF,OAAO,CAAC,IAAI,EAAE,CAAA;KACf;IACD,OAAO,CAAC,KAAK,EAAE,CAAA;AACjB,CAAC,CAAC;KACD,KAAK,CAAC,GAAG,CAAC,EAAE;IACX,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;IAChB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;AACjB,CAAC,CAAC,CAAA"}
|
package/build/templates-index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"templates-index.js","sourceRoot":"","sources":["../src/templates-index.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB;QACE,KAAK,EAAE,OAAO;QACd,WAAW,EAAE,+CAA+C;QAC5D,KAAK,EAAE,OAAO;KACf;IACD;QACE,KAAK,EAAE,kBAAkB;QACzB,WAAW,EACT,qEAAqE;QACvE,KAAK,EAAE,kBAAkB;KAC1B;IACD;QACE,KAAK,EAAE,iBAAiB;QACxB,WAAW,EACT,qEAAqE;QACvE,KAAK,EAAE,iBAAiB;KACzB;CACF,CAAA;AAED,MAAM,CAAC,MAAM,eAAe,GAAG,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA"}
|
|
1
|
+
{"version":3,"file":"templates-index.js","sourceRoot":"","sources":["../src/templates-index.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB;QACE,KAAK,EAAE,iBAAiB;QACxB,WAAW,EAAE,yDAAyD;QACtE,KAAK,EAAE,iBAAiB;KACzB;IACD;QACE,KAAK,EAAE,OAAO;QACd,WAAW,EAAE,+CAA+C;QAC5D,KAAK,EAAE,OAAO;KACf;IACD;QACE,KAAK,EAAE,kBAAkB;QACzB,WAAW,EACT,qEAAqE;QACvE,KAAK,EAAE,kBAAkB;KAC1B;IACD;QACE,KAAK,EAAE,iBAAiB;QACxB,WAAW,EACT,qEAAqE;QACvE,KAAK,EAAE,iBAAiB;KACzB;CACF,CAAA;AAED,MAAM,CAAC,MAAM,eAAe,GAAG,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA"}
|
|
@@ -10,12 +10,14 @@ export function syncManifest(mini) {
|
|
|
10
10
|
const manifestJson = JSON.parse(manifestJsonString) || {};
|
|
11
11
|
// @ts-ignore
|
|
12
12
|
manifestJson.handle = mini.handle;
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
production
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
13
|
+
if (mini.productionShopifyAppId) {
|
|
14
|
+
manifestJson.shopify_apps ||= {};
|
|
15
|
+
manifestJson.shopify_apps.production = extractIdFromGID(mini.productionShopifyAppId);
|
|
16
|
+
}
|
|
17
|
+
if (mini.developmentShopifyAppIds.length > 0) {
|
|
18
|
+
manifestJson.shopify_apps ||= {};
|
|
19
|
+
manifestJson.shopify_apps.development = mini.developmentShopifyAppIds.map(id => extractIdFromGID(id));
|
|
20
|
+
}
|
|
19
21
|
fs.writeFileSync(manifestJsonPath, `${JSON.stringify(manifestJson, null, 2)}\n`, {
|
|
20
22
|
encoding: 'utf-8',
|
|
21
23
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync-manifest.js","sourceRoot":"","sources":["../../src/utils/sync-manifest.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAA;AACnB,OAAO,IAAI,MAAM,MAAM,CAAA;AAEvB,OAAO,EAAC,eAAe,EAAC,MAAM,WAAW,CAAA;AACzC,OAAO,EAAC,gBAAgB,EAAC,MAAM,qBAAqB,CAAA;AAEpD,MAAM,UAAU,YAAY,CAAC,IAI5B;IACC,MAAM,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE,mBAAmB,CAAC,CAAA;IAC1E,MAAM,kBAAkB,GAAG,EAAE,CAAC,YAAY,CAAC,gBAAgB,EAAE;QAC3D,QAAQ,EAAE,OAAO;KAClB,CAAC,CAAA;IACF,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,IAAI,EAAE,CAAA;IACzD,aAAa;IACb,YAAY,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAA;
|
|
1
|
+
{"version":3,"file":"sync-manifest.js","sourceRoot":"","sources":["../../src/utils/sync-manifest.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAA;AACnB,OAAO,IAAI,MAAM,MAAM,CAAA;AAEvB,OAAO,EAAC,eAAe,EAAC,MAAM,WAAW,CAAA;AACzC,OAAO,EAAC,gBAAgB,EAAC,MAAM,qBAAqB,CAAA;AAEpD,MAAM,UAAU,YAAY,CAAC,IAI5B;IACC,MAAM,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE,mBAAmB,CAAC,CAAA;IAC1E,MAAM,kBAAkB,GAAG,EAAE,CAAC,YAAY,CAAC,gBAAgB,EAAE;QAC3D,QAAQ,EAAE,OAAO;KAClB,CAAC,CAAA;IACF,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,IAAI,EAAE,CAAA;IACzD,aAAa;IACb,YAAY,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAA;IAEjC,IAAI,IAAI,CAAC,sBAAsB,EAAE;QAC/B,YAAY,CAAC,YAAY,KAAK,EAAE,CAAA;QAChC,YAAY,CAAC,YAAY,CAAC,UAAU,GAAG,gBAAgB,CACrD,IAAI,CAAC,sBAAsB,CAC5B,CAAA;KACF;IAED,IAAI,IAAI,CAAC,wBAAwB,CAAC,MAAM,GAAG,CAAC,EAAE;QAC5C,YAAY,CAAC,YAAY,KAAK,EAAE,CAAA;QAChC,YAAY,CAAC,YAAY,CAAC,WAAW,GAAG,IAAI,CAAC,wBAAwB,CAAC,GAAG,CACvE,EAAE,CAAC,EAAE,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAC3B,CAAA;KACF;IAED,EAAE,CAAC,aAAa,CACd,gBAAgB,EAChB,GAAG,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAC5C;QACE,QAAQ,EAAE,OAAO;KAClB,CACF,CAAA;AACH,CAAC"}
|
package/package.json
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
"access": "public",
|
|
5
5
|
"@shopify:registry": "https://registry.npmjs.org/"
|
|
6
6
|
},
|
|
7
|
-
"version": "0.0.
|
|
7
|
+
"version": "0.0.141",
|
|
8
8
|
"description": "Shop Minis CLI",
|
|
9
9
|
"main": "build/index.js",
|
|
10
10
|
"bin": {
|
|
@@ -61,7 +61,6 @@
|
|
|
61
61
|
"@google-cloud/storage": "^7.10.0",
|
|
62
62
|
"@shopify/cli-kit": "3.70.0",
|
|
63
63
|
"@types/jscodeshift": "^0.11.11",
|
|
64
|
-
"@types/qrcode-terminal": "^0.12.0",
|
|
65
64
|
"archiver": "^5.3.1",
|
|
66
65
|
"chalk": "^4.1.2",
|
|
67
66
|
"commander": "^9.4.1",
|
|
@@ -90,7 +89,6 @@
|
|
|
90
89
|
"ora": "^5.4.1",
|
|
91
90
|
"patch-package": "6.5.1",
|
|
92
91
|
"prompts": "^2.4.2",
|
|
93
|
-
"qrcode-terminal": "^0.12.0",
|
|
94
92
|
"replace-in-file": "^6.3.5",
|
|
95
93
|
"semver": "^7.3.8",
|
|
96
94
|
"serve-static": "^1.15.0",
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import {createNativeStackNavigator} from '@react-navigation/native-stack'
|
|
2
|
+
|
|
3
|
+
import {HomeScreen} from './screens/HomeScreen'
|
|
4
|
+
import {NativeFeaturesScreen} from './screens/NativeFeaturesScreen'
|
|
5
|
+
import {ExtensionsScreen} from './screens/ExtensionsScreen'
|
|
6
|
+
|
|
7
|
+
const Stack = createNativeStackNavigator()
|
|
8
|
+
|
|
9
|
+
export function App() {
|
|
10
|
+
return (
|
|
11
|
+
<Stack.Navigator>
|
|
12
|
+
<Stack.Screen
|
|
13
|
+
name="GettingStarted.Home"
|
|
14
|
+
component={HomeScreen}
|
|
15
|
+
options={{headerShown: false}}
|
|
16
|
+
/>
|
|
17
|
+
<Stack.Screen
|
|
18
|
+
name="GettingStarted.NativeFeatures"
|
|
19
|
+
component={NativeFeaturesScreen}
|
|
20
|
+
options={{headerShown: false}}
|
|
21
|
+
/>
|
|
22
|
+
<Stack.Screen
|
|
23
|
+
name="GettingStarted.Extensions"
|
|
24
|
+
component={ExtensionsScreen}
|
|
25
|
+
options={{headerShown: false}}
|
|
26
|
+
/>
|
|
27
|
+
</Stack.Navigator>
|
|
28
|
+
)
|
|
29
|
+
}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import {ScrollView, TouchableOpacity, Platform} from 'react-native'
|
|
2
|
+
import {useNavigation} from '@react-navigation/native'
|
|
3
|
+
import {
|
|
4
|
+
Box,
|
|
5
|
+
SafeAreaView,
|
|
6
|
+
Text,
|
|
7
|
+
useTheme,
|
|
8
|
+
Icon,
|
|
9
|
+
} from '@shopify/shop-minis-platform-sdk'
|
|
10
|
+
|
|
11
|
+
const monospaceFontFamily = Platform.OS === 'ios' ? 'Menlo' : 'monospace'
|
|
12
|
+
|
|
13
|
+
export function ExtensionsScreen() {
|
|
14
|
+
const theme = useTheme()
|
|
15
|
+
const navigation = useNavigation()
|
|
16
|
+
|
|
17
|
+
return (
|
|
18
|
+
<SafeAreaView
|
|
19
|
+
style={{flex: 1, backgroundColor: theme.colors['backgrounds-regular']}}
|
|
20
|
+
>
|
|
21
|
+
<ScrollView>
|
|
22
|
+
<Box
|
|
23
|
+
flex={1}
|
|
24
|
+
paddingHorizontal="gutter"
|
|
25
|
+
backgroundColor="backgrounds-regular"
|
|
26
|
+
>
|
|
27
|
+
<Box>
|
|
28
|
+
<TouchableOpacity
|
|
29
|
+
onPress={() => navigation.goBack()}
|
|
30
|
+
accessibilityLabel="Navigate back"
|
|
31
|
+
>
|
|
32
|
+
<Box marginTop="xs">
|
|
33
|
+
<Icon name="arrow-left" />
|
|
34
|
+
</Box>
|
|
35
|
+
</TouchableOpacity>
|
|
36
|
+
</Box>
|
|
37
|
+
<Text variant="heroBold" marginBottom="s" marginTop="xs">
|
|
38
|
+
Surfacing your Mini
|
|
39
|
+
</Text>
|
|
40
|
+
<Text variant="subtitle" marginBottom="s">
|
|
41
|
+
Let users discover your Mini with Shop Minis Extensions.
|
|
42
|
+
</Text>
|
|
43
|
+
<Text marginBottom="s">
|
|
44
|
+
In your terminal, run{' '}
|
|
45
|
+
<Text fontFamily={monospaceFontFamily}>
|
|
46
|
+
npx shop-minis create-extension
|
|
47
|
+
</Text>{' '}
|
|
48
|
+
to learn more about rendering a component in a Shop app screen to
|
|
49
|
+
open your Mini.
|
|
50
|
+
</Text>
|
|
51
|
+
<Text marginBottom="s">
|
|
52
|
+
We look forward to seeing what you build! Check out the
|
|
53
|
+
documentation at
|
|
54
|
+
</Text>
|
|
55
|
+
<Text>https://shop.app/minis</Text>
|
|
56
|
+
</Box>
|
|
57
|
+
</ScrollView>
|
|
58
|
+
</SafeAreaView>
|
|
59
|
+
)
|
|
60
|
+
}
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
import {useState} from 'react'
|
|
2
|
+
import {ScrollView} from 'react-native'
|
|
3
|
+
import {useNavigation} from '@react-navigation/native'
|
|
4
|
+
import {NativeStackNavigationProp} from '@react-navigation/native-stack'
|
|
5
|
+
import {
|
|
6
|
+
Box,
|
|
7
|
+
SafeAreaView,
|
|
8
|
+
Text,
|
|
9
|
+
TouchableProduct,
|
|
10
|
+
ProductCard,
|
|
11
|
+
useProducts,
|
|
12
|
+
useTheme,
|
|
13
|
+
Button,
|
|
14
|
+
TextField,
|
|
15
|
+
Picker,
|
|
16
|
+
} from '@shopify/shop-minis-platform-sdk'
|
|
17
|
+
|
|
18
|
+
import {RootStackParamList} from '../types/screens'
|
|
19
|
+
|
|
20
|
+
export function HomeScreen() {
|
|
21
|
+
const theme = useTheme()
|
|
22
|
+
const navigation =
|
|
23
|
+
useNavigation<NativeStackNavigationProp<RootStackParamList>>()
|
|
24
|
+
|
|
25
|
+
const {products} = useProducts(
|
|
26
|
+
[
|
|
27
|
+
'gid://shopify/Product/7632803594495',
|
|
28
|
+
'gid://shopify/Product/7541927510271',
|
|
29
|
+
'gid://shopify/Product/7541908734207',
|
|
30
|
+
'gid://shopify/Product/7541924987135',
|
|
31
|
+
],
|
|
32
|
+
'gid://shopify/Shop/62104633599'
|
|
33
|
+
)
|
|
34
|
+
|
|
35
|
+
const [pickerVisible, setPickerVisible] = useState(false)
|
|
36
|
+
|
|
37
|
+
return (
|
|
38
|
+
<SafeAreaView
|
|
39
|
+
style={{flex: 1, backgroundColor: theme.colors['backgrounds-regular']}}
|
|
40
|
+
>
|
|
41
|
+
<ScrollView>
|
|
42
|
+
<Box
|
|
43
|
+
flex={1}
|
|
44
|
+
paddingHorizontal="gutter"
|
|
45
|
+
backgroundColor="backgrounds-regular"
|
|
46
|
+
>
|
|
47
|
+
<Text variant="heroBold" marginBottom="s" marginTop="xs">
|
|
48
|
+
Hello, World!
|
|
49
|
+
</Text>
|
|
50
|
+
<Text variant="subtitle" marginBottom="s">
|
|
51
|
+
You just created a Shop Mini! Nice.
|
|
52
|
+
</Text>
|
|
53
|
+
<Text variant="subtitle" marginBottom="s">
|
|
54
|
+
Let's explore what a Mini can do.
|
|
55
|
+
</Text>
|
|
56
|
+
{products ? (
|
|
57
|
+
<>
|
|
58
|
+
<Text marginBottom="s">
|
|
59
|
+
First up: Product Cards (Since we're all about shopping,
|
|
60
|
+
right?)
|
|
61
|
+
</Text>
|
|
62
|
+
<Box flexDirection="row" paddingHorizontal="gutter">
|
|
63
|
+
{products.slice(0, 2).map(product => (
|
|
64
|
+
<Box key={product.id} flex={1} padding="xs">
|
|
65
|
+
<TouchableProduct product={product}>
|
|
66
|
+
<ProductCard
|
|
67
|
+
shopId="gid://shopify/Shop/62104633599"
|
|
68
|
+
product={product}
|
|
69
|
+
/>
|
|
70
|
+
</TouchableProduct>
|
|
71
|
+
</Box>
|
|
72
|
+
))}
|
|
73
|
+
</Box>
|
|
74
|
+
<Box flexDirection="row" paddingHorizontal="gutter">
|
|
75
|
+
{products.slice(2, 4).map(product => (
|
|
76
|
+
<Box key={product.id} flex={1} padding="xs">
|
|
77
|
+
<TouchableProduct product={product}>
|
|
78
|
+
<ProductCard
|
|
79
|
+
shopId="gid://shopify/Shop/62104633599"
|
|
80
|
+
product={product}
|
|
81
|
+
/>
|
|
82
|
+
</TouchableProduct>
|
|
83
|
+
</Box>
|
|
84
|
+
))}
|
|
85
|
+
</Box>
|
|
86
|
+
</>
|
|
87
|
+
) : null}
|
|
88
|
+
<Text marginBottom="s">
|
|
89
|
+
You can add interactions to your Mini with inputs.
|
|
90
|
+
</Text>
|
|
91
|
+
<Box marginBottom="s">
|
|
92
|
+
<TextField placeholder="Text input" />
|
|
93
|
+
</Box>
|
|
94
|
+
<Box marginBottom="s">
|
|
95
|
+
<Button
|
|
96
|
+
text="Open picker"
|
|
97
|
+
onPress={() => {
|
|
98
|
+
setPickerVisible(true)
|
|
99
|
+
}}
|
|
100
|
+
/>
|
|
101
|
+
</Box>
|
|
102
|
+
{pickerVisible ? (
|
|
103
|
+
<Picker
|
|
104
|
+
items={[
|
|
105
|
+
{label: 'Red', value: 'Red'},
|
|
106
|
+
{label: 'Green', value: 'Green'},
|
|
107
|
+
{label: 'Blue', value: 'Blue'},
|
|
108
|
+
]}
|
|
109
|
+
handleDismiss={() => setPickerVisible(false)}
|
|
110
|
+
headerText="Select a color"
|
|
111
|
+
/>
|
|
112
|
+
) : null}
|
|
113
|
+
<Text marginBottom="s">
|
|
114
|
+
Ready for more? Let's explore native capabilities in the
|
|
115
|
+
screen.
|
|
116
|
+
</Text>
|
|
117
|
+
<Button
|
|
118
|
+
text="Next"
|
|
119
|
+
onPress={() => {
|
|
120
|
+
navigation.navigate('GettingStarted.NativeFeatures')
|
|
121
|
+
}}
|
|
122
|
+
/>
|
|
123
|
+
</Box>
|
|
124
|
+
</ScrollView>
|
|
125
|
+
</SafeAreaView>
|
|
126
|
+
)
|
|
127
|
+
}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import {ScrollView, TouchableOpacity} from 'react-native'
|
|
2
|
+
import {useNavigation} from '@react-navigation/native'
|
|
3
|
+
import {NativeStackNavigationProp} from '@react-navigation/native-stack'
|
|
4
|
+
import ImagePicker from 'react-native-image-crop-picker'
|
|
5
|
+
import Share from 'react-native-share'
|
|
6
|
+
import {
|
|
7
|
+
Box,
|
|
8
|
+
SafeAreaView,
|
|
9
|
+
Text,
|
|
10
|
+
useTheme,
|
|
11
|
+
Button,
|
|
12
|
+
Icon,
|
|
13
|
+
useMinisDimensions,
|
|
14
|
+
} from '@shopify/shop-minis-platform-sdk'
|
|
15
|
+
|
|
16
|
+
import {RootStackParamList} from '../types/screens'
|
|
17
|
+
|
|
18
|
+
export function NativeFeaturesScreen() {
|
|
19
|
+
const theme = useTheme()
|
|
20
|
+
const navigation =
|
|
21
|
+
useNavigation<NativeStackNavigationProp<RootStackParamList>>()
|
|
22
|
+
const {height, width} = useMinisDimensions()
|
|
23
|
+
|
|
24
|
+
return (
|
|
25
|
+
<SafeAreaView
|
|
26
|
+
style={{flex: 1, backgroundColor: theme.colors['backgrounds-regular']}}
|
|
27
|
+
>
|
|
28
|
+
<ScrollView>
|
|
29
|
+
<Box
|
|
30
|
+
flex={1}
|
|
31
|
+
paddingHorizontal="gutter"
|
|
32
|
+
backgroundColor="backgrounds-regular"
|
|
33
|
+
>
|
|
34
|
+
<Box>
|
|
35
|
+
<TouchableOpacity
|
|
36
|
+
onPress={() => navigation.goBack()}
|
|
37
|
+
accessibilityLabel="Navigate back"
|
|
38
|
+
>
|
|
39
|
+
<Box marginTop="xs">
|
|
40
|
+
<Icon name="arrow-left" />
|
|
41
|
+
</Box>
|
|
42
|
+
</TouchableOpacity>
|
|
43
|
+
</Box>
|
|
44
|
+
<Text variant="heroBold" marginBottom="s" marginTop="xs">
|
|
45
|
+
Unlock Native Capabilities
|
|
46
|
+
</Text>
|
|
47
|
+
<Text variant="subtitle" marginBottom="s">
|
|
48
|
+
Let's explore the native capabilities your Shop Mini can
|
|
49
|
+
access.
|
|
50
|
+
</Text>
|
|
51
|
+
<Box marginBottom="s">
|
|
52
|
+
<Button
|
|
53
|
+
text="Camera access"
|
|
54
|
+
onPress={async () => {
|
|
55
|
+
await ImagePicker.openCamera({}).then(image => {
|
|
56
|
+
console.log(image)
|
|
57
|
+
})
|
|
58
|
+
}}
|
|
59
|
+
/>
|
|
60
|
+
<Text variant="bodySmall" marginTop="xs">
|
|
61
|
+
Run this Mini on a real device to access the camera.
|
|
62
|
+
</Text>
|
|
63
|
+
</Box>
|
|
64
|
+
<Box marginBottom="s">
|
|
65
|
+
<Button
|
|
66
|
+
text="Gallery access"
|
|
67
|
+
onPress={async () => {
|
|
68
|
+
await ImagePicker.openPicker({}).then(image => {
|
|
69
|
+
console.log(image)
|
|
70
|
+
})
|
|
71
|
+
}}
|
|
72
|
+
/>
|
|
73
|
+
</Box>
|
|
74
|
+
<Box marginBottom="s">
|
|
75
|
+
<Button
|
|
76
|
+
text="Share sheet"
|
|
77
|
+
onPress={async () => {
|
|
78
|
+
await Share.open({
|
|
79
|
+
url: 'https://shop.app/minis',
|
|
80
|
+
title: 'title',
|
|
81
|
+
})
|
|
82
|
+
}}
|
|
83
|
+
/>
|
|
84
|
+
</Box>
|
|
85
|
+
<Box marginBottom="s">
|
|
86
|
+
<Text>Screen height: {height}</Text>
|
|
87
|
+
<Text>Screen width: {width}</Text>
|
|
88
|
+
</Box>
|
|
89
|
+
<Text marginBottom="s">
|
|
90
|
+
But how do people find your Mini? Let's talk about that in the
|
|
91
|
+
next screen.
|
|
92
|
+
</Text>
|
|
93
|
+
<Button
|
|
94
|
+
text="Next"
|
|
95
|
+
onPress={() => {
|
|
96
|
+
navigation.navigate('GettingStarted.Extensions')
|
|
97
|
+
}}
|
|
98
|
+
/>
|
|
99
|
+
</Box>
|
|
100
|
+
</ScrollView>
|
|
101
|
+
</SafeAreaView>
|
|
102
|
+
)
|
|
103
|
+
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export declare function printQRCode(content: string): Promise<void>;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"qr-code.js","sourceRoot":"","sources":["../../../../src/commands/dev/utils/qr-code.ts"],"names":[],"mappings":"AAAA,OAAO,cAAc,MAAM,iBAAiB,CAAA;AAE5C,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,OAAe;IAC/C,cAAc,CAAC,QAAQ,CAAC,OAAO,EAAE,EAAC,KAAK,EAAE,IAAI,EAAC,EAAE,CAAC,IAAY,EAAE,EAAE,CAC/D,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAClB,CAAA;AACH,CAAC"}
|