@shopify/shop-minis-cli 0.0.69 → 0.0.71

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.
@@ -0,0 +1,6 @@
1
+ import { Command } from 'commander';
2
+ export interface DoctorCommandArgs {
3
+ verbose?: boolean;
4
+ fix?: boolean;
5
+ }
6
+ export declare const command: Command;
@@ -0,0 +1,21 @@
1
+ import { Command } from 'commander';
2
+ import { handler as handleError } from '@shopify/cli-kit/node/error';
3
+ import { diagnoseDependencies } from './utils/diagnose-dependencies.js';
4
+ export const command = new Command()
5
+ .name('doctor')
6
+ .description('Diagnose and fix common Node.js, iOS, Android & React Native issues.')
7
+ .option('--verbose', 'print debugging messages')
8
+ .option('--fix', 'Attempt to fix all diagnosed issues.')
9
+ .action(async (options) => {
10
+ try {
11
+ const dependenciesValidationResult = await diagnoseDependencies(options.fix);
12
+ if (dependenciesValidationResult) {
13
+ console.log('\n✅ The configuration for your mini is correct.');
14
+ }
15
+ }
16
+ catch (err) {
17
+ delete err.stack; // delete the stack to avoid a verbose logging in case of unhandled errors
18
+ await handleError(err);
19
+ }
20
+ });
21
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/doctor/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,EAAC,MAAM,WAAW,CAAA;AACjC,OAAO,EAAC,OAAO,IAAI,WAAW,EAAC,MAAM,6BAA6B,CAAA;AAElE,OAAO,EAAC,oBAAoB,EAAC,MAAM,kCAAkC,CAAA;AAOrE,MAAM,CAAC,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE;KACjC,IAAI,CAAC,QAAQ,CAAC;KACd,WAAW,CACV,sEAAsE,CACvE;KACA,MAAM,CAAC,WAAW,EAAE,0BAA0B,CAAC;KAC/C,MAAM,CAAC,OAAO,EAAE,sCAAsC,CAAC;KACvD,MAAM,CAAC,KAAK,EAAE,OAA0B,EAAE,EAAE;IAC3C,IAAI;QACF,MAAM,4BAA4B,GAAG,MAAM,oBAAoB,CAC7D,OAAO,CAAC,GAAG,CACZ,CAAA;QAED,IAAI,4BAA4B,EAAE;YAChC,OAAO,CAAC,GAAG,CAAC,iDAAiD,CAAC,CAAA;SAC/D;KACF;IAAC,OAAO,GAAG,EAAE;QACZ,OAAQ,GAAa,CAAC,KAAK,CAAA,CAAC,0EAA0E;QACtG,MAAM,WAAW,CAAC,GAAG,CAAC,CAAA;KACvB;AACH,CAAC,CAAC,CAAA"}
@@ -0,0 +1 @@
1
+ export declare function diagnoseDependencies(autoFix?: boolean): Promise<boolean>;
@@ -0,0 +1,78 @@
1
+ import path from 'path';
2
+ import fs from 'fs';
3
+ import { AbortError } from '@shopify/cli-kit/node/error';
4
+ import { hardResetDependencies } from '../../../utils/package-manager.js';
5
+ import { wrapWithLoadingIndicator } from '../../../utils/wrap-with-loading-indicator.js';
6
+ export async function diagnoseDependencies(autoFix) {
7
+ const runtimePackageJsonPath = path.join(process.cwd(), 'node_modules', '@shopify', 'shop-minis-runtime', 'package.json');
8
+ const runtimeDependencies = getPackageJsonByPath(runtimePackageJsonPath).dependencies;
9
+ const miniPackageJsonPath = path.join(process.cwd(), 'package.json');
10
+ const miniPackageJson = getPackageJsonByPath(miniPackageJsonPath);
11
+ const duplicatedDependencies = Object.keys(miniPackageJson.dependencies).filter(dependency => Boolean(runtimeDependencies[dependency]));
12
+ const duplicatedDevDependencies = Object.keys(miniPackageJson.devDependencies).filter(devDependency => Boolean(runtimeDependencies[devDependency]));
13
+ const areDependenciesDuplicated = Boolean(duplicatedDependencies.length + duplicatedDevDependencies.length);
14
+ if (areDependenciesDuplicated) {
15
+ console.log('❌ Found some issues with the dependencies of your mini. Minis can not directly consume any dependency and can only use those listed in @shopify/shop-minis-runtime');
16
+ logDuplicatedDependencies(duplicatedDependencies);
17
+ logDuplicatedDependencies(duplicatedDevDependencies, true);
18
+ }
19
+ if (autoFix) {
20
+ await removeDuplicatedDependencies({
21
+ packageJsonPath: miniPackageJsonPath,
22
+ packageJson: miniPackageJson,
23
+ duplicatedDependencies,
24
+ duplicatedDevDependencies,
25
+ });
26
+ }
27
+ else if (areDependenciesDuplicated) {
28
+ logTroubleshootInstructions();
29
+ }
30
+ // mark the validation as failed if there are any duplicated dependencies or dev dependencies
31
+ return !areDependenciesDuplicated;
32
+ }
33
+ function logDuplicatedDependencies(dependencies, isDev = false) {
34
+ if (dependencies.length === 0) {
35
+ return;
36
+ }
37
+ console.log(`❌ The following ${isDev ? 'devDependencies' : 'dependencies'} are duplicated with @shopify/shop-minis-runtime:`);
38
+ dependencies.forEach(dependency => console.log(`- ${dependency}`));
39
+ }
40
+ function getPackageJsonByPath(packageJsonPath) {
41
+ let packageJson = {};
42
+ try {
43
+ const packageJsonString = fs.readFileSync(packageJsonPath).toString('utf-8');
44
+ packageJson = JSON.parse(packageJsonString);
45
+ }
46
+ catch {
47
+ throw new AbortError(`Failed to read from file on path ${packageJsonPath}`);
48
+ }
49
+ return packageJson;
50
+ }
51
+ function logTroubleshootInstructions() {
52
+ console.log('\nℹ️ This error is potentially fixable with the `--fix` option.');
53
+ console.log('\nℹ️ If you want to fix this error manually, try:');
54
+ console.log('1. Remove the duplicated dependencies and/or devDependencies from your package.json');
55
+ console.log('2. Remove the node_modules folder and the dependencies lockfile (package-lock.json or yarn.lock)');
56
+ console.log('3. Reinstall dependencies');
57
+ console.log('4. Commit the changes to the package.json and lockfile');
58
+ }
59
+ async function removeDuplicatedDependencies({ packageJsonPath, packageJson, duplicatedDependencies, duplicatedDevDependencies, }) {
60
+ if (!duplicatedDependencies.length && !duplicatedDevDependencies.length) {
61
+ return;
62
+ }
63
+ duplicatedDependencies.forEach(dependency => {
64
+ delete packageJson.dependencies[dependency];
65
+ });
66
+ duplicatedDevDependencies.forEach(devDependency => {
67
+ delete packageJson.devDependencies[devDependency];
68
+ });
69
+ fs.writeFileSync(packageJsonPath, `${JSON.stringify(packageJson, null, 2)}\n`, // keep the new line at the end of the file
70
+ {
71
+ encoding: 'utf-8',
72
+ });
73
+ await wrapWithLoadingIndicator(hardResetDependencies(), {
74
+ loadingMessage: 'Removing duplicated dependencies and recreating lockfiles...',
75
+ successMessage: 'Dependencies reinstalled',
76
+ });
77
+ }
78
+ //# sourceMappingURL=diagnose-dependencies.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diagnose-dependencies.js","sourceRoot":"","sources":["../../../../src/commands/doctor/utils/diagnose-dependencies.ts"],"names":[],"mappings":"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"}
package/build/index.js CHANGED
@@ -10,6 +10,7 @@ import { loadCommand as loadUpgradeCommand } from './commands/upgrade/index.js';
10
10
  import { loadCommand as loadCodemodCommand } from './commands/codemod/index.js';
11
11
  import { loadCommand as loadValidateManifestCommand } from './commands/validate-manifest/index.js';
12
12
  import { loadCommand as loadInfoCommand } from './commands/info/index.js';
13
+ import { command as doctorCommand } from './commands/doctor/index.js';
13
14
  import { CLI_VERSION } from './commands/config.js';
14
15
  const program = new Command();
15
16
  async function loadCommands() {
@@ -23,6 +24,7 @@ async function loadCommands() {
23
24
  loadValidateManifestCommand(program);
24
25
  loadCodemodCommand(program);
25
26
  loadInfoCommand(program);
27
+ program.addCommand(doctorCommand);
26
28
  }
27
29
  program
28
30
  .name('shop-minis')
@@ -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,qBAAqB,EAAC,MAAM,iCAAiC,CAAA;AACpF,OAAO,EAAC,WAAW,IAAI,cAAc,EAAC,MAAM,yBAAyB,CAAA;AACrE,OAAO,EAAC,WAAW,IAAI,+BAA+B,EAAC,MAAM,4CAA4C,CAAA;AACzG,OAAO,EAAC,WAAW,IAAI,iBAAiB,EAAC,MAAM,4BAA4B,CAAA;AAC3E,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,IAAI,kBAAkB,EAAC,MAAM,6BAA6B,CAAA;AAC7E,OAAO,EAAC,WAAW,IAAI,2BAA2B,EAAC,MAAM,uCAAuC,CAAA;AAChG,OAAO,EAAC,WAAW,IAAI,eAAe,EAAC,MAAM,0BAA0B,CAAA;AACvE,OAAO,EAAC,WAAW,EAAC,MAAM,sBAAsB,CAAA;AAEhD,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;AAC1B,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,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,qBAAqB,EAAC,MAAM,iCAAiC,CAAA;AACpF,OAAO,EAAC,WAAW,IAAI,cAAc,EAAC,MAAM,yBAAyB,CAAA;AACrE,OAAO,EAAC,WAAW,IAAI,+BAA+B,EAAC,MAAM,4CAA4C,CAAA;AACzG,OAAO,EAAC,WAAW,IAAI,iBAAiB,EAAC,MAAM,4BAA4B,CAAA;AAC3E,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,IAAI,kBAAkB,EAAC,MAAM,6BAA6B,CAAA;AAC7E,OAAO,EAAC,WAAW,IAAI,2BAA2B,EAAC,MAAM,uCAAuC,CAAA;AAChG,OAAO,EAAC,WAAW,IAAI,eAAe,EAAC,MAAM,0BAA0B,CAAA;AACvE,OAAO,EAAC,OAAO,IAAI,aAAa,EAAC,MAAM,4BAA4B,CAAA;AACnE,OAAO,EAAC,WAAW,EAAC,MAAM,sBAAsB,CAAA;AAEhD,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;IAExB,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAA;AACnC,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,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"}
@@ -27,6 +27,12 @@ export declare const getRunBinCommand: (scriptName: string, scriptArgs?: string[
27
27
  * Get a package.json script or a dependency bin command formatted according to the detected package manager
28
28
  */
29
29
  export declare const getPackageLatestVersionCommand: (packageName: string) => Promise<string>;
30
- export declare const hardResetDependencies: () => Promise<void>;
30
+ export declare const hardResetDependencies: () => Promise<[{
31
+ stdout: string[];
32
+ stderr: string[];
33
+ }, {
34
+ stdout: string[];
35
+ stderr: string[];
36
+ }]>;
31
37
  export declare const getPackageVersion: (packageName: string) => Promise<string>;
32
38
  export {};
@@ -1,5 +1,7 @@
1
1
  import path from 'path';
2
2
  import fs from 'fs';
3
+ import os from 'os';
4
+ import { mkdtemp } from 'node:fs/promises';
3
5
  import _ from 'lodash';
4
6
  import { getPackageManager as _getPackageManager } from '@shopify/cli-kit/node/node-package-manager';
5
7
  import { formatPackageManagerCommand, outputDebug, } from '@shopify/cli-kit/node/output';
@@ -74,8 +76,12 @@ export const getPackageLatestVersionCommand = async (packageName) => {
74
76
  };
75
77
  export const hardResetDependencies = async () => {
76
78
  const installCommand = await getInstallCommand(); // get install command before deleting lockfiles, since lockfiles are used to detect package manager
77
- await execAsync('rm -rf yarn.lock package-lock.json node_modules');
78
- await execAsync(installCommand);
79
+ await execAsync('rm -rf yarn.lock package-lock.json');
80
+ // doing `rm -rf node_modules proved to be very slow
81
+ // we move it to a tmp folder instead, so that we can reinstall dependencies while we delete the directory in parallel
82
+ const tmpDir = await mkdtemp(path.join(os.tmpdir(), 'minis_dependencies'));
83
+ await execAsync(`mv node_modules ${tmpDir}`);
84
+ return Promise.all([execAsync(`rm -rf ${tmpDir}`), execAsync(installCommand)]);
79
85
  };
80
86
  export const getPackageVersion = async (packageName) => {
81
87
  const packageJsonPath = path.join(process.cwd(), 'node_modules', ...packageName.split('/'), 'package.json');
@@ -1 +1 @@
1
- {"version":3,"file":"package-manager.js","sourceRoot":"","sources":["../../src/utils/package-manager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"package-manager.js","sourceRoot":"","sources":["../../src/utils/package-manager.ts"],"names":[],"mappings":"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"}
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.69",
7
+ "version": "0.0.71",
8
8
  "description": "Shop Minis CLI",
9
9
  "main": "build/index.js",
10
10
  "bin": {
@@ -21,6 +21,7 @@ import {MultipleChoiceScreen} from './screens/MultipleChoiceScreen'
21
21
  import {QuizScreen} from './screens/QuizScreen'
22
22
  import {ImageMultipleChoiceScreen} from './screens/ImageMultipleChoiceScreen'
23
23
  import {AccordionScreen} from './screens/AccordionScreen'
24
+ import {ShopActionsScreen} from './screens/ShopActionsScreen'
24
25
 
25
26
  const Stack = createNativeStackNavigator()
26
27
 
@@ -132,6 +133,11 @@ export const __MINI_APP_HANDLE_PASCAL_CASE__Navigator = () => {
132
133
  component={AccordionScreen}
133
134
  options={{headerShown: false}}
134
135
  />
136
+ <Stack.Screen
137
+ name="__MINI_APP_HANDLE_PASCAL_CASE__.ShopActions"
138
+ component={ShopActionsScreen}
139
+ options={{headerShown: false}}
140
+ />
135
141
  </Stack.Navigator>
136
142
  )
137
143
  }
@@ -64,6 +64,17 @@ export const HomeScreen = () => {
64
64
  ))}
65
65
  </Box>
66
66
  </Box>
67
+ <Box flex={1} p="gutter" backgroundColor="backgrounds-regular">
68
+ <Text variant="label" mb="s" mt="l">
69
+ Hooks
70
+ </Text>
71
+ <Box flexDirection="column">
72
+ <ComponentListItem
73
+ name="Shop actions"
74
+ screen="__MINI_APP_HANDLE_PASCAL_CASE__.ShopActions"
75
+ />
76
+ </Box>
77
+ </Box>
67
78
  </ScrollView>
68
79
  </SafeAreaView>
69
80
  )
@@ -0,0 +1,48 @@
1
+ import {useState} from 'react'
2
+ import {SafeAreaView, ScrollView} from 'react-native'
3
+ import {
4
+ Box,
5
+ Button,
6
+ KeyboardAvoidingView,
7
+ Text,
8
+ TextField,
9
+ } from '@shopify/shop-minis-platform-sdk'
10
+ import {useShopActions} from '@shopify/shop-minis-platform-sdk/actions'
11
+
12
+ import {Header} from '../components/Header'
13
+
14
+ export const ShopActionsScreen = () => {
15
+ const [navigateToCheckoutUrl, setNavigateToCheckoutUrl] = useState('')
16
+ const {navigateToCheckout} = useShopActions()
17
+
18
+ return (
19
+ <SafeAreaView style={{flex: 1}}>
20
+ <KeyboardAvoidingView>
21
+ <ScrollView style={{flex: 1}}>
22
+ <Header />
23
+ <Box px="gutter">
24
+ <Text variant="headerBold" mb="xs">
25
+ Shop Actions
26
+ </Text>
27
+ <Box marginBottom="m">
28
+ <Box marginBottom="xs">
29
+ <Text variant="bodyLargeBold">Checkout with URL</Text>
30
+ </Box>
31
+ <Box marginBottom="xs">
32
+ <TextField
33
+ placeholder="URL"
34
+ value={navigateToCheckoutUrl}
35
+ onChangeText={text => setNavigateToCheckoutUrl(text)}
36
+ />
37
+ </Box>
38
+ <Button
39
+ text="Go to checkout"
40
+ onPress={() => navigateToCheckout({url: navigateToCheckoutUrl})}
41
+ />
42
+ </Box>
43
+ </Box>
44
+ </ScrollView>
45
+ </KeyboardAvoidingView>
46
+ </SafeAreaView>
47
+ )
48
+ }