@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.
Files changed (34) hide show
  1. package/build/commands/dev/utils/app-screens.d.ts +8 -0
  2. package/build/commands/dev/utils/app-screens.js +150 -0
  3. package/build/commands/dev/utils/app-screens.js.map +1 -0
  4. package/build/commands/dev/utils/deeplink.d.ts +2 -1
  5. package/build/commands/dev/utils/deeplink.js +9 -2
  6. package/build/commands/dev/utils/deeplink.js.map +1 -1
  7. package/build/commands/dev/utils/env-config.d.ts +2 -0
  8. package/build/commands/dev/utils/env-config.js +47 -0
  9. package/build/commands/dev/utils/env-config.js.map +1 -0
  10. package/build/commands/dev/utils/interactive-terminal.d.ts +5 -1
  11. package/build/commands/dev/utils/interactive-terminal.js +63 -16
  12. package/build/commands/dev/utils/interactive-terminal.js.map +1 -1
  13. package/build/commands/setup/create.d.ts +1 -0
  14. package/build/commands/setup/create.js +44 -14
  15. package/build/commands/setup/create.js.map +1 -1
  16. package/build/commands/setup/index.js +9 -4
  17. package/build/commands/setup/index.js.map +1 -1
  18. package/build/index.js +2 -0
  19. package/build/index.js.map +1 -1
  20. package/build/templates-index.js +5 -0
  21. package/build/templates-index.js.map +1 -1
  22. package/build/utils/sync-manifest.d.ts +1 -1
  23. package/build/utils/sync-manifest.js +8 -6
  24. package/build/utils/sync-manifest.js.map +1 -1
  25. package/package.json +1 -3
  26. package/templates/__template_getting_started/src/App.tsx +29 -0
  27. package/templates/__template_getting_started/src/index.tsx +9 -0
  28. package/templates/__template_getting_started/src/screens/ExtensionsScreen.tsx +60 -0
  29. package/templates/__template_getting_started/src/screens/HomeScreen.tsx +127 -0
  30. package/templates/__template_getting_started/src/screens/NativeFeaturesScreen.tsx +103 -0
  31. package/templates/__template_getting_started/src/types/screens.ts +5 -0
  32. package/build/commands/dev/utils/qr-code.d.ts +0 -1
  33. package/build/commands/dev/utils/qr-code.js +0 -5
  34. 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":"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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;IAErB,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,GAAG,OAAO,CAAC,gBAAgB,EAAE,MAAM;QACnD,CAAC,CAAC,yBAAyB;QAC3B,CAAC,CAAC,eAAe,CAAA;IAEnB,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"}
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,2 @@
1
+ export declare function getEnvConfigValue(envConfigKey: string): string | undefined;
2
+ export declare function setEnvConfigValue(envConfigKey: string, envConfigValue: string): void;
@@ -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
- Press ${chalk.cyan.bold(`q`)} │ Print QR code in terminal. Scan to open your Shop Mini on an iOS device with Shop installed
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
- // TODO: Should we send these as params? or should the dev panel website already know how to fetch them without the need of query params?
141
- // Advantage would be that people could just type the base url in the browser whenever they want to open the dev panel. That's impossible with the query params being required
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: getDeeplink(this.miniHandle, this.options, true),
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,EAAC,YAAY,EAAE,WAAW,EAAC,MAAM,eAAe,CAAA;AACvD,OAAO,EAAC,kBAAkB,EAAC,MAAM,oCAAoC,CAAA;AACrE,OAAO,EAAC,QAAQ,EAAC,MAAM,eAAe,CAAA;AACtC,OAAO,EAAC,WAAW,EAAC,MAAM,cAAc,CAAA;AACxC,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;AAE9D,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;IAE5C,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,CAAC;UACN,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;UACpB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;;UAEpB,KAAK,CAAC,IAAI,CAAC,IAAI,CACnB,GAAG,CACJ;UACK,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;;EAE5B,KAAK,CAAC,GAAG,CAAC,uBAAuB,CAAC,EAAE,CAAC,CAAA;IACrC,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,IAAI,CAAC,mBAAmB,EAAE,CAAA;gBAChC,MAAK;aACN;YACD,KAAK,GAAG,CAAC,CAAC;gBACR,yIAAyI;gBACzI,8KAA8K;gBAC9K,MAAM,SAAS,GAAG;oBAChB,SAAS,EAAE,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;oBAC1C,QAAQ,EAAE,WAAW,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC;iBAC3D,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,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;IAED,KAAK,CAAC,mBAAmB;QACvB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;QACjB,MAAM,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAA;QACnE,OAAO,CAAC,GAAG,CACT,6FAA6F,CAC9F,CAAA;IACH,CAAC;IAEO,KAAK,CAAC,QAAQ,CAAC,QAAkB,EAAE,QAAgB;QACzD,IAAI;YACF,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;SACF;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;CACF"}
1
+ {"version":3,"file":"interactive-terminal.js","sourceRoot":"","sources":["../../../../src/commands/dev/utils/interactive-terminal.ts"],"names":[],"mappings":"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"}
@@ -1,2 +1,3 @@
1
1
  import { Command } from 'commander';
2
+ export declare function loginAndSetup(): Promise<void>;
2
3
  export declare const command: Command;
@@ -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 { renderError, renderSelectPrompt, renderSuccess, } from '@shopify/cli-kit/node/ui';
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 const command = new Command()
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 = (await renderSelectPrompt({
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
- const appId = (await renderSelectPrompt({
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
- renderError({
52
- headline: 'Error creating Shop Mini',
53
- body: result.userErrors.map(error => error.message),
54
- });
55
- return;
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":"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"}
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,kBAAkB,EAClB,aAAa,EACb,UAAU,EACV,WAAW,GACZ,MAAM,0BAA0B,CAAA;AACjC,OAAO,EAAC,UAAU,EAAE,OAAO,IAAI,WAAW,EAAC,MAAM,6BAA6B,CAAA;AAC9E,OAAO,CAAC,MAAM,QAAQ,CAAA;AAEtB,OAAO,EACL,YAAY,EACZ,eAAe,EACf,KAAK,GACN,MAAM,8BAA8B,CAAA;AACrC,OAAO,EAAC,UAAU,EAAC,MAAM,2BAA2B,CAAA;AACpD,OAAO,EAAC,eAAe,EAAC,MAAM,+BAA+B,CAAA;AAC7D,OAAO,EAAC,YAAY,EAAC,MAAM,8BAA8B,CAAA;AAEzD,MAAM,CAAC,KAAK,UAAU,aAAa;IACjC,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,CAAC,CAAA;IACpD,IAAI,eAAe,GAAG,EAAE,CAAA;IAExB,IAAI,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE;QAC9B,eAAe,GAAG,EAAE,CAAC,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAA;QACvD,mEAAmE;QACnE,IAAI,eAAe,CAAC,QAAQ,CAAC,oBAAoB,CAAC,EAAE;YAClD,OAAO,CAAC,KAAK,CAAC,sDAAsD,CAAC,CAAA;YACrE,OAAM;SACP;KACF;IAED,MAAM,EAAC,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAC,GAAG,eAAe,EAAE,CAAA;IAE9D,0BAA0B;IAC1B,MAAM,aAAa,GAAG,MAAM,YAAY,EAAE,CAAA;IAC1C,MAAM,KAAK,GAAG,MAAM,kBAAkB,CAAC;QACrC,OAAO,EAAE,0BAA0B;QACnC,OAAO,EAAE,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACjC,KAAK,EAAE,GAAG,CAAC,YAAY;YACvB,KAAK,EAAE,GAAG,CAAC,EAAE;SACd,CAAC,CAAC;KACJ,CAAC,CAAA;IAEF,iBAAiB;IACjB,MAAM,IAAI,GAAG,MAAM,eAAe,CAAC,KAAK,CAAC,CAAA;IACzC,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;QAC1B,UAAU,CAAC;YACT,IAAI,EAAE,sKAAsK;SAC7K,CAAC,CAAA;QAEF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;KAChB;IAED,MAAM,KAAK,GAAG,MAAM,kBAAkB,CAAC;QACrC,OAAO,EAAE,iBAAiB;QAC1B,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAC7B,KAAK,EAAE,GAAG,CAAC,KAAK;YAChB,KAAK,EAAE,GAAG,CAAC,EAAE;SACd,CAAC,CAAC;KACJ,CAAC,CAAA;IAEF,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,KAAK,CAAE,CAAA;IAE5D,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC;QAC9B,IAAI,EAAE,QAAQ;QACd,MAAM,EAAE,UAAU,IAAI,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC;QAC3C,SAAS,EAAE,WAAW,CAAC,MAAM;QAC7B,mBAAmB,EAAE,MAAM,KAAK,EAAE;KACnC,CAAC,CAAA;IAEF,IAAI,MAAM,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE;QAChC,IAAI,MAAM,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE;YAClC,IAAI,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,mBAAmB,EAAE;gBACrD,WAAW,CAAC;oBACV,IAAI,EAAE,8BAA8B,QAAQ,iFAAiF;iBAC9H,CAAC,CAAA;gBAEF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;aAChB;iBAAM,IAAI,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,oBAAoB,EAAE;gBAC7D,WAAW,CAAC;oBACV,IAAI,EAAE,qBAAqB,WAAW,CAAC,KAAK,2KAA2K;iBACxN,CAAC,CAAA;gBAEF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;aAChB;iBAAM;gBACL,MAAM,IAAI,UAAU,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAA;aACnD;SACF;aAAM;YACL,MAAM,IAAI,UAAU,CAClB,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,EAAC,OAAO,EAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CACzD,CAAA;SACF;KACF;IAED,qDAAqD;IACrD,eAAe,IAAI,wBAAwB,MAAM,CAAC,KAAK,EAAE,CAAA;IACzD,EAAE,CAAC,aAAa,CAAC,WAAW,EAAE,eAAe,EAAE;QAC7C,QAAQ,EAAE,OAAO;KAClB,CAAC,CAAA;IAEF,oBAAoB;IACpB,IAAI,MAAM,CAAC,IAAI,EAAE;QACf,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;QACzB,aAAa,CAAC;YACZ,QAAQ,EAAE,mBAAmB;YAC7B,IAAI,EAAE;gBACJ,uBAAuB;gBACvB;oBACE,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM;iBACzB;gBACD,mBAAmB;aACpB;SACF,CAAC,CAAA;KACH;AACH,CAAC;AAED,MAAM,CAAC,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE;KACjC,IAAI,CAAC,QAAQ,CAAC;KACd,WAAW,CAAC,wBAAwB,CAAC;KACrC,MAAM,CAAC,KAAK,IAAI,EAAE;IACjB,IAAI;QACF,MAAM,aAAa,EAAE,CAAA;KACtB;IAAC,OAAO,KAAK,EAAE;QACd,WAAW,CAAC,KAAK,CAAC,CAAA;KACnB;AACH,CAAC,CAAC,CAAA"}
@@ -64,10 +64,15 @@ export function loadCommand(parentProgram) {
64
64
  });
65
65
  const manifestJson = JSON.parse(manifestJsonString) || {};
66
66
  manifestJson.handle = miniInfo.handle;
67
- manifestJson.shopify_apps = {
68
- production: extractIdFromGID(miniInfo.productionShopifyAppId),
69
- development: miniInfo.developmentShopifyAppIds.map(id => extractIdFromGID(id)),
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":"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"}
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
  }
@@ -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;AAEhG,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;IAEnC,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"}
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"}
@@ -1,4 +1,9 @@
1
1
  export const TEMPLATES = [
2
+ {
3
+ title: 'Getting Started',
4
+ description: 'A template that generates a fully functioning Shop Mini',
5
+ value: 'getting_started',
6
+ },
2
7
  {
3
8
  title: 'Blank',
4
9
  description: 'A blank canvas so you can create from scratch',
@@ -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"}
@@ -1,5 +1,5 @@
1
1
  export declare function syncManifest(mini: {
2
2
  handle: string;
3
- productionShopifyAppId: string;
3
+ productionShopifyAppId?: string;
4
4
  developmentShopifyAppIds: string[];
5
5
  }): void;
@@ -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
- manifestJson.shopify_apps = {
14
- // @ts-ignore
15
- production: extractIdFromGID(mini.productionShopifyAppId),
16
- // @ts-ignore
17
- development: mini.developmentShopifyAppIds.map(id => extractIdFromGID(id)),
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;IACjC,YAAY,CAAC,YAAY,GAAG;QAC1B,aAAa;QACb,UAAU,EAAE,gBAAgB,CAAC,IAAI,CAAC,sBAAsB,CAAC;QACzD,aAAa;QACb,WAAW,EAAE,IAAI,CAAC,wBAAwB,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC;KAC3E,CAAA;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"}
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.140",
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,9 @@
1
+ import {MiniAppConfig} from '@shopify/shop-minis-platform-sdk'
2
+
3
+ import {App} from './App'
4
+
5
+ const config: MiniAppConfig = {
6
+ ViewerRoot: App,
7
+ }
8
+
9
+ export default config
@@ -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&apos;s explore what a Mini can do.
55
+ </Text>
56
+ {products ? (
57
+ <>
58
+ <Text marginBottom="s">
59
+ First up: Product Cards (Since we&apos;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&apos;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&apos;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&apos;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
+ }
@@ -0,0 +1,5 @@
1
+ import {ParamListBase} from '@react-navigation/native'
2
+
3
+ export interface RootStackParamList extends ParamListBase {
4
+ 'GettingStarted.Home': undefined
5
+ }
@@ -1 +0,0 @@
1
- export declare function printQRCode(content: string): Promise<void>;
@@ -1,5 +0,0 @@
1
- import qrcodeTerminal from 'qrcode-terminal';
2
- export async function printQRCode(content) {
3
- qrcodeTerminal.generate(content, { small: true }, (code) => console.log(code));
4
- }
5
- //# sourceMappingURL=qr-code.js.map
@@ -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"}