@shopify/shop-minis-cli 0.0.159 → 0.0.161

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 (40) hide show
  1. package/build/commands/create-mini/index.js +8 -178
  2. package/build/commands/create-mini/index.js.map +1 -1
  3. package/build/commands/create-mini/legacy/index.d.ts +2 -0
  4. package/build/commands/create-mini/legacy/index.js +174 -0
  5. package/build/commands/create-mini/legacy/index.js.map +1 -0
  6. package/build/commands/create-mini/{utils → legacy/utils}/template-app.js +12 -23
  7. package/build/commands/create-mini/legacy/utils/template-app.js.map +1 -0
  8. package/build/commands/create-mini/standalone/examples/with-getting-started/.eslintignore +1 -0
  9. package/build/commands/create-mini/standalone/examples/with-getting-started/.eslintrc.js +3 -0
  10. package/build/commands/create-mini/standalone/examples/with-getting-started/.graphqlrc.js +1 -0
  11. package/build/commands/create-mini/standalone/examples/with-getting-started/.prettierrc.json +8 -0
  12. package/build/commands/create-mini/standalone/examples/with-getting-started/assets.d.ts +14 -0
  13. package/build/commands/create-mini/standalone/examples/with-getting-started/babel.config.js +5 -0
  14. package/build/commands/create-mini/standalone/examples/with-getting-started/index.tsx +5 -0
  15. package/build/commands/create-mini/standalone/examples/with-getting-started/metro.config.js +3 -0
  16. package/build/commands/create-mini/standalone/examples/with-getting-started/package.json +33 -0
  17. package/build/commands/create-mini/standalone/examples/with-getting-started/src/App.tsx +23 -0
  18. package/build/commands/create-mini/standalone/examples/with-getting-started/src/index.tsx +9 -0
  19. package/build/commands/create-mini/standalone/examples/with-getting-started/src/manifest.json +7 -0
  20. package/build/commands/create-mini/standalone/examples/with-getting-started/src/screens/HomeScreen.tsx +133 -0
  21. package/build/commands/create-mini/standalone/examples/with-getting-started/src/screens/NativeFeaturesScreen.tsx +138 -0
  22. package/build/commands/create-mini/standalone/examples/with-getting-started/src/types/screens.ts +5 -0
  23. package/build/commands/create-mini/standalone/examples/with-getting-started/tsconfig.json +41 -0
  24. package/build/commands/create-mini/standalone/index.d.ts +2 -0
  25. package/build/commands/create-mini/standalone/index.js +115 -0
  26. package/build/commands/create-mini/standalone/index.js.map +1 -0
  27. package/build/commands/create-mini/utils/examples.d.ts +4 -1
  28. package/build/commands/create-mini/utils/examples.js +28 -2
  29. package/build/commands/create-mini/utils/examples.js.map +1 -1
  30. package/build/commands/create-mini/utils/index.d.ts +3 -0
  31. package/build/commands/create-mini/utils/index.js +23 -0
  32. package/build/commands/create-mini/utils/index.js.map +1 -0
  33. package/build/utils/package-manager.d.ts +5 -0
  34. package/build/utils/package-manager.js +13 -0
  35. package/build/utils/package-manager.js.map +1 -1
  36. package/package.json +5 -3
  37. package/scripts/{test-template.ts → test-create-mini-legacy.ts} +12 -15
  38. package/scripts/test-create-mini-standalone.ts +63 -0
  39. package/build/commands/create-mini/utils/template-app.js.map +0 -1
  40. /package/build/commands/create-mini/{utils → legacy/utils}/template-app.d.ts +0 -0
@@ -1,181 +1,11 @@
1
- import { existsSync } from 'fs';
2
- import path from 'path';
3
- import { execSync } from 'child_process';
4
- import { renderSelectPrompt, renderTasks, renderTextPrompt, } from '@shopify/cli-kit/node/ui';
5
- import { outputWarn } from '@shopify/cli-kit/node/output';
6
- import { packageManagerFromUserAgent } from '@shopify/cli-kit/node/node-package-manager';
7
- import { Command, Option } from 'commander';
8
- import chalk from 'chalk';
9
- import _ from 'lodash';
10
- import { copy } from 'fs-extra';
11
- import { execAsync } from '../../utils/exec-async-child-process.js';
12
- import { TEMPLATES, TEMPLATE_VALUES } from '../../templates-index.js';
13
- import { formatExtensionFiles } from '../create-extension/utils/format-extension-files.js';
14
- import { EXTENSION_TARGETS_WITH_TEMPLATES } from '../create-extension/constants.js';
15
- import { ExtensionType } from '../../constants/extensions.js';
16
- import { createExtensionFiles } from '../create-extension/utils/create-extension-files.js';
17
- import { generateMiniFromExample, generateMiniFromTemplate, } from './utils/template-app.js';
18
- function logSuccess(miniName, outputDir, miniDir, useYarn) {
19
- console.log(`\n \nShop Mini`, chalk.green.bold(`${miniName}`), 'created. Next steps:\n');
20
- const currentPath = `${process.cwd()}/`;
21
- const cdAbsolutePath = path.resolve(outputDir, miniDir);
22
- const cdPath = cdAbsolutePath.startsWith(currentPath)
23
- ? cdAbsolutePath.replace(currentPath, '')
24
- : cdAbsolutePath;
25
- console.log(chalk.cyan.bold(` cd ${cdPath}`));
26
- console.log(chalk.dim(' Open your Shop Mini’s directory\n'));
27
- console.log(chalk.cyan.bold(` ↪ ${useYarn ? 'yarn' : 'npm'} start`));
28
- console.log(chalk.dim(' Run Shop Mini, and open it on an iOS or Android device.\n'));
29
- console.log(chalk.cyan(' ↪ ') +
30
- chalk.cyan.underline.bold('https://shop.app/minis/docs/'));
31
- console.log(chalk.dim(' Shop Minis documentation.\n \n'));
32
- }
33
- async function selectTemplate() {
34
- return renderSelectPrompt({
35
- message: 'Select a template',
36
- choices: TEMPLATES.map(template => ({
37
- label: template.title,
38
- value: template.value,
39
- })),
40
- infoTable: TEMPLATES.map(template => ({
41
- header: template.title,
42
- helperText: template.description,
43
- items: [],
44
- })),
45
- });
46
- }
1
+ import { loadCommand as loadCreateLegacyMiniCommand } from './legacy/index.js';
2
+ import { loadCommand as loadCreateStandaloneMiniCommand } from './standalone/index.js';
47
3
  export function loadCommand(parentProgram) {
48
- const command = new Command()
49
- .name('create')
50
- .description('Create a new Shop Mini')
51
- .argument('[mini name]', 'the name of your mini')
52
- .option('--verbose', 'print debugging messages')
53
- // TODO: Remove `--useYarn` https://github.com/Shopify/shop-minis-cli/issues/190
54
- .option('--useYarn', '(deprecated) Use yarn as package manager instead of npm')
55
- .option('--alphaMinisRuntime', 'use the alpha tag of @shopify/shop-minis-runtime. uses the latest tag by default')
56
- .option('--alphaMinisSDK', 'use the alpha tag of @shopify/shop-minis-platform-sdk. uses the latest tag by default')
57
- .option('--skip-create-extension', 'skip the create extension step')
58
- .addOption(new Option('--example <example name>', 'name of the example to use'))
59
- .addOption(new Option('--template <template name>', 'name of the template to use').choices(TEMPLATE_VALUES))
60
- .addOption(new Option('--extension-target <extension target name>', 'name of the extension target to use').choices(Object.keys(EXTENSION_TARGETS_WITH_TEMPLATES)))
61
- .addOption(new Option('--extension-type <extension type name>', 'name of the extension type to create').choices(Object.values(ExtensionType)))
62
- .option('--output-dir <path>', 'Specify an output directory for the mini')
63
- .action(async (miniNameArg, options = {}) => {
64
- const currentDirectoryName = path.basename(process.cwd());
65
- // The default has to be out of the 'shop-minis-cli' directory because the cli is using
66
- // modules but the mini is a commonjs app. Running a cjs project inside a modules project causes various issues.
67
- const defaultOutputDir = currentDirectoryName === 'shop-minis-cli' ? '..' : '.';
68
- const outputDir = options.outputDir ?? defaultOutputDir;
69
- if (!existsSync(outputDir)) {
70
- console.error(`Unable to create a mini at the specified output dir of ${outputDir}`);
71
- process.exit(1);
72
- }
73
- let miniName;
74
- let exampleName = null;
75
- let templateName = null;
76
- let createChoice = 'advanced';
77
- try {
78
- if (options.example) {
79
- miniName = options.example;
80
- }
81
- else if (miniNameArg) {
82
- miniName = miniNameArg;
83
- }
84
- else {
85
- miniName = await renderTextPrompt({
86
- message: `Give your Shop Mini a name. ${chalk.dim('You can change it later.')}`,
87
- });
88
- }
89
- if (options.example) {
90
- exampleName = options.example;
91
- createChoice = 'express';
92
- }
93
- else if (options.template) {
94
- if (TEMPLATE_VALUES.includes(options.template)) {
95
- templateName = options.template;
96
- }
97
- else {
98
- outputWarn(`Template ${options.template} not found. Please select a valid template.`);
99
- templateName = await selectTemplate();
100
- }
101
- }
102
- else {
103
- createChoice = await renderSelectPrompt({
104
- message: 'Choose how you want to create your Shop Mini',
105
- choices: [
106
- {
107
- label: 'Express - Start building a Shop Mini immediately',
108
- value: 'express',
109
- },
110
- {
111
- label: 'Advanced - Select from templates to create your Shop Mini',
112
- value: 'advanced',
113
- },
114
- ],
115
- });
116
- if (createChoice === 'express') {
117
- templateName = 'getting_started';
118
- }
119
- else {
120
- templateName = await selectTemplate();
121
- }
122
- }
123
- const miniDir = _.kebabCase(miniName);
124
- const miniDirPath = path.resolve(outputDir, miniDir);
125
- let miniTmpDirPath;
126
- if (exampleName) {
127
- await renderTasks([
128
- {
129
- title: 'Fetching example',
130
- task: async () => {
131
- miniTmpDirPath = await generateMiniFromExample(miniDir, exampleName, options.alphaMinisRuntime, options.alphaMinisSDK);
132
- },
133
- },
134
- ]);
135
- }
136
- else if (templateName) {
137
- await renderTasks([
138
- {
139
- title: 'Fetching template',
140
- task: async () => {
141
- miniTmpDirPath = await generateMiniFromTemplate(miniName, templateName, miniDir, options.alphaMinisRuntime, options.alphaMinisSDK);
142
- },
143
- },
144
- ]);
145
- }
146
- if (!miniTmpDirPath) {
147
- process.exit(1);
148
- }
149
- if (createChoice === 'advanced') {
150
- await createExtensionFiles({
151
- miniName,
152
- specifiedTarget: options.extensionTarget,
153
- specifiedType: options.extensionType,
154
- miniOutputDir: miniTmpDirPath,
155
- });
156
- }
157
- await copy(miniTmpDirPath, miniDirPath);
158
- const useYarn = packageManagerFromUserAgent() === 'yarn';
159
- // Yarn is ignoring the `resolutions` when you install
160
- // via `yarn create @shopify/shop-mini` so use `--ignore-engines` to work around the
161
- // problem with `@apollo/federation`
162
- // npm fails to install for a similar reason on node 15 but runs fine so we will
163
- // use `--force` to get everything installed
164
- const installCmd = useYarn ? 'yarn --ignore-engines' : 'npm i --force';
165
- await execAsync({
166
- cmd: installCmd,
167
- loadingMessage: 'Installing dependencies. This might take a minute...',
168
- successMessage: 'Dependencies installed',
169
- }, { cwd: miniDirPath });
170
- execSync(`${useYarn ? 'yarn' : 'npx'} patch-package --patch-dir node_modules/@shopify/shop-minis-runtime/patches`, { cwd: miniDirPath });
171
- await formatExtensionFiles(miniDirPath);
172
- logSuccess(miniName, outputDir, miniDir, useYarn);
173
- }
174
- catch (err) {
175
- console.error(err?.message || err);
176
- process.exit(1);
177
- }
178
- });
179
- parentProgram.addCommand(command);
4
+ if (process.argv.includes('--legacy')) {
5
+ loadCreateLegacyMiniCommand(parentProgram);
6
+ }
7
+ else {
8
+ loadCreateStandaloneMiniCommand(parentProgram);
9
+ }
180
10
  }
181
11
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/create-mini/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,UAAU,EAAC,MAAM,IAAI,CAAA;AAC7B,OAAO,IAAI,MAAM,MAAM,CAAA;AACvB,OAAO,EAAC,QAAQ,EAAC,MAAM,eAAe,CAAA;AAEtC,OAAO,EACL,kBAAkB,EAClB,WAAW,EACX,gBAAgB,GACjB,MAAM,0BAA0B,CAAA;AACjC,OAAO,EAAC,UAAU,EAAC,MAAM,8BAA8B,CAAA;AACvD,OAAO,EAAC,2BAA2B,EAAC,MAAM,4CAA4C,CAAA;AACtF,OAAO,EAAC,OAAO,EAAE,MAAM,EAAC,MAAM,WAAW,CAAA;AACzC,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,CAAC,MAAM,QAAQ,CAAA;AACtB,OAAO,EAAC,IAAI,EAAC,MAAM,UAAU,CAAA;AAE7B,OAAO,EAAC,SAAS,EAAC,MAAM,yCAAyC,CAAA;AACjE,OAAO,EAAC,SAAS,EAAE,eAAe,EAAC,MAAM,0BAA0B,CAAA;AACnE,OAAO,EAAC,oBAAoB,EAAC,MAAM,qDAAqD,CAAA;AACxF,OAAO,EAAC,gCAAgC,EAAC,MAAM,kCAAkC,CAAA;AACjF,OAAO,EAAC,aAAa,EAAC,MAAM,+BAA+B,CAAA;AAC3D,OAAO,EAAC,oBAAoB,EAAC,MAAM,qDAAqD,CAAA;AAExF,OAAO,EACL,uBAAuB,EACvB,wBAAwB,GACzB,MAAM,yBAAyB,CAAA;AAEhC,SAAS,UAAU,CACjB,QAAgB,EAChB,SAAiB,EACjB,OAAe,EACf,OAAiB;IAEjB,OAAO,CAAC,GAAG,CACT,gBAAgB,EAChB,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,QAAQ,EAAE,CAAC,EAC/B,wBAAwB,CACzB,CAAA;IAED,MAAM,WAAW,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,GAAG,CAAA;IACvC,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,CAAA;IACvD,MAAM,MAAM,GAAG,cAAc,CAAC,UAAU,CAAC,WAAW,CAAC;QACnD,CAAC,CAAC,cAAc,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC;QACzC,CAAC,CAAC,cAAc,CAAA;IAElB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,MAAM,EAAE,CAAC,CAAC,CAAA;IAC9C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,qCAAqC,CAAC,CAAC,CAAA;IAE7D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAA;IACrE,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,GAAG,CAAC,+DAA+D,CAAC,CAC3E,CAAA;IAED,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC;QAChB,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAC5D,CAAA;IACD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC,CAAA;AAC9D,CAAC;AAED,KAAK,UAAU,cAAc;IAC3B,OAAO,kBAAkB,CAAC;QACxB,OAAO,EAAE,mBAAmB;QAC5B,OAAO,EAAE,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;YAClC,KAAK,EAAE,QAAQ,CAAC,KAAK;YACrB,KAAK,EAAE,QAAQ,CAAC,KAAK;SACtB,CAAC,CAAC;QACH,SAAS,EAAE,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;YACpC,MAAM,EAAE,QAAQ,CAAC,KAAK;YACtB,UAAU,EAAE,QAAQ,CAAC,WAAW;YAChC,KAAK,EAAE,EAAE;SACV,CAAC,CAAC;KACJ,CAAC,CAAA;AACJ,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,aAAsB;IAChD,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE;SAC1B,IAAI,CAAC,QAAQ,CAAC;SACd,WAAW,CAAC,wBAAwB,CAAC;SACrC,QAAQ,CAAC,aAAa,EAAE,uBAAuB,CAAC;SAChD,MAAM,CAAC,WAAW,EAAE,0BAA0B,CAAC;QAChD,gFAAgF;SAC/E,MAAM,CACL,WAAW,EACX,yDAAyD,CAC1D;SACA,MAAM,CACL,qBAAqB,EACrB,kFAAkF,CACnF;SACA,MAAM,CACL,iBAAiB,EACjB,uFAAuF,CACxF;SACA,MAAM,CAAC,yBAAyB,EAAE,gCAAgC,CAAC;SACnE,SAAS,CACR,IAAI,MAAM,CAAC,0BAA0B,EAAE,4BAA4B,CAAC,CACrE;SACA,SAAS,CACR,IAAI,MAAM,CACR,4BAA4B,EAC5B,6BAA6B,CAC9B,CAAC,OAAO,CAAC,eAAe,CAAC,CAC3B;SACA,SAAS,CACR,IAAI,MAAM,CACR,4CAA4C,EAC5C,qCAAqC,CACtC,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC,CACzD;SACA,SAAS,CACR,IAAI,MAAM,CACR,wCAAwC,EACxC,sCAAsC,CACvC,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CACxC;SACA,MAAM,CAAC,qBAAqB,EAAE,0CAA0C,CAAC;SACzE,MAAM,CACL,KAAK,EACH,WAAoB,EACpB,UASI,EAAE,EACN,EAAE;QACF,MAAM,oBAAoB,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAA;QAEzD,uFAAuF;QACvF,gHAAgH;QAChH,MAAM,gBAAgB,GACpB,oBAAoB,KAAK,gBAAgB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAA;QAExD,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,gBAAgB,CAAA;QACvD,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE;YAC1B,OAAO,CAAC,KAAK,CACX,0DAA0D,SAAS,EAAE,CACtE,CAAA;YACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;SAChB;QAED,IAAI,QAAgB,CAAA;QACpB,IAAI,WAAW,GAAkB,IAAI,CAAA;QACrC,IAAI,YAAY,GAAkB,IAAI,CAAA;QACtC,IAAI,YAAY,GAA2B,UAAU,CAAA;QAErD,IAAI;YACF,IAAI,OAAO,CAAC,OAAO,EAAE;gBACnB,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAA;aAC3B;iBAAM,IAAI,WAAW,EAAE;gBACtB,QAAQ,GAAG,WAAW,CAAA;aACvB;iBAAM;gBACL,QAAQ,GAAG,MAAM,gBAAgB,CAAC;oBAChC,OAAO,EAAE,+BAA+B,KAAK,CAAC,GAAG,CAC/C,0BAA0B,CAC3B,EAAE;iBACJ,CAAC,CAAA;aACH;YAED,IAAI,OAAO,CAAC,OAAO,EAAE;gBACnB,WAAW,GAAG,OAAO,CAAC,OAAO,CAAA;gBAC7B,YAAY,GAAG,SAAS,CAAA;aACzB;iBAAM,IAAI,OAAO,CAAC,QAAQ,EAAE;gBAC3B,IAAI,eAAe,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;oBAC9C,YAAY,GAAG,OAAO,CAAC,QAAQ,CAAA;iBAChC;qBAAM;oBACL,UAAU,CACR,YAAY,OAAO,CAAC,QAAQ,6CAA6C,CAC1E,CAAA;oBACD,YAAY,GAAG,MAAM,cAAc,EAAE,CAAA;iBACtC;aACF;iBAAM;gBACL,YAAY,GAAG,MAAM,kBAAkB,CAAC;oBACtC,OAAO,EAAE,8CAA8C;oBACvD,OAAO,EAAE;wBACP;4BACE,KAAK,EAAE,kDAAkD;4BACzD,KAAK,EAAE,SAAS;yBACjB;wBACD;4BACE,KAAK,EACH,2DAA2D;4BAC7D,KAAK,EAAE,UAAU;yBAClB;qBACF;iBACF,CAAC,CAAA;gBAEF,IAAI,YAAY,KAAK,SAAS,EAAE;oBAC9B,YAAY,GAAG,iBAAiB,CAAA;iBACjC;qBAAM;oBACL,YAAY,GAAG,MAAM,cAAc,EAAE,CAAA;iBACtC;aACF;YAED,MAAM,OAAO,GAAG,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAA;YACrC,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,CAAA;YAEpD,IAAI,cAAkC,CAAA;YAEtC,IAAI,WAAW,EAAE;gBACf,MAAM,WAAW,CAAC;oBAChB;wBACE,KAAK,EAAE,kBAAkB;wBACzB,IAAI,EAAE,KAAK,IAAI,EAAE;4BACf,cAAc,GAAG,MAAM,uBAAuB,CAC5C,OAAO,EACP,WAAY,EACZ,OAAO,CAAC,iBAAiB,EACzB,OAAO,CAAC,aAAa,CACtB,CAAA;wBACH,CAAC;qBACF;iBACF,CAAC,CAAA;aACH;iBAAM,IAAI,YAAY,EAAE;gBACvB,MAAM,WAAW,CAAC;oBAChB;wBACE,KAAK,EAAE,mBAAmB;wBAC1B,IAAI,EAAE,KAAK,IAAI,EAAE;4BACf,cAAc,GAAG,MAAM,wBAAwB,CAC7C,QAAQ,EACR,YAAa,EACb,OAAO,EACP,OAAO,CAAC,iBAAiB,EACzB,OAAO,CAAC,aAAa,CACtB,CAAA;wBACH,CAAC;qBACF;iBACF,CAAC,CAAA;aACH;YAED,IAAI,CAAC,cAAc,EAAE;gBACnB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;aAChB;YAED,IAAI,YAAY,KAAK,UAAU,EAAE;gBAC/B,MAAM,oBAAoB,CAAC;oBACzB,QAAQ;oBACR,eAAe,EAAE,OAAO,CAAC,eAAe;oBACxC,aAAa,EAAE,OAAO,CAAC,aAAa;oBACpC,aAAa,EAAE,cAAc;iBAC9B,CAAC,CAAA;aACH;YAED,MAAM,IAAI,CAAC,cAAc,EAAE,WAAW,CAAC,CAAA;YAEvC,MAAM,OAAO,GAAG,2BAA2B,EAAE,KAAK,MAAM,CAAA;YAExD,sDAAsD;YACtD,oFAAoF;YACpF,oCAAoC;YACpC,gFAAgF;YAChF,4CAA4C;YAC5C,MAAM,UAAU,GAAG,OAAO,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC,eAAe,CAAA;YAEtE,MAAM,SAAS,CACb;gBACE,GAAG,EAAE,UAAU;gBACf,cAAc,EACZ,sDAAsD;gBACxD,cAAc,EAAE,wBAAwB;aACzC,EACD,EAAC,GAAG,EAAE,WAAW,EAAC,CACnB,CAAA;YAED,QAAQ,CACN,GACE,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KACrB,6EAA6E,EAC7E,EAAC,GAAG,EAAE,WAAW,EAAC,CACnB,CAAA;YAED,MAAM,oBAAoB,CAAC,WAAW,CAAC,CAAA;YAEvC,UAAU,CAAC,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,CAAC,CAAA;SAClD;QAAC,OAAO,GAAQ,EAAE;YACjB,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,OAAO,IAAI,GAAG,CAAC,CAAA;YAClC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;SAChB;IACH,CAAC,CACF,CAAA;IAEH,aAAa,CAAC,UAAU,CAAC,OAAO,CAAC,CAAA;AACnC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/create-mini/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,WAAW,IAAI,2BAA2B,EAAC,MAAM,mBAAmB,CAAA;AAC5E,OAAO,EAAC,WAAW,IAAI,+BAA+B,EAAC,MAAM,uBAAuB,CAAA;AAEpF,MAAM,UAAU,WAAW,CAAC,aAAsB;IAChD,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE;QACrC,2BAA2B,CAAC,aAAa,CAAC,CAAA;KAC3C;SAAM;QACL,+BAA+B,CAAC,aAAa,CAAC,CAAA;KAC/C;AACH,CAAC"}
@@ -0,0 +1,2 @@
1
+ import { Command } from 'commander';
2
+ export declare function loadCommand(parentProgram: Command): void;
@@ -0,0 +1,174 @@
1
+ import { existsSync } from 'fs';
2
+ import path from 'path';
3
+ import { execSync } from 'child_process';
4
+ import { renderSelectPrompt, renderTasks, renderTextPrompt, } from '@shopify/cli-kit/node/ui';
5
+ import { outputWarn } from '@shopify/cli-kit/node/output';
6
+ import { packageManagerFromUserAgent } from '@shopify/cli-kit/node/node-package-manager';
7
+ import { Command, Option } from 'commander';
8
+ import chalk from 'chalk';
9
+ import { copy } from 'fs-extra';
10
+ import { execAsync } from '../../../utils/exec-async-child-process.js';
11
+ import { TEMPLATES, TEMPLATE_VALUES } from '../../../templates-index.js';
12
+ import { formatExtensionFiles } from '../../create-extension/utils/format-extension-files.js';
13
+ import { EXTENSION_TARGETS_WITH_TEMPLATES } from '../../create-extension/constants.js';
14
+ import { ExtensionType } from '../../../constants/extensions.js';
15
+ import { createExtensionFiles } from '../../create-extension/utils/create-extension-files.js';
16
+ import { getCdCommandPath, getHandleFromName, getOutputDirectory, } from '../utils/index.js';
17
+ import { generateMiniFromExample, generateMiniFromTemplate, } from './utils/template-app.js';
18
+ function logSuccess(miniName, outputDir, miniDir, useYarn) {
19
+ console.log(`\n \nShop Mini`, chalk.green.bold(`${miniName}`), 'created. Next steps:\n');
20
+ const cdPath = getCdCommandPath(outputDir, miniDir);
21
+ console.log(chalk.cyan.bold(` cd ${cdPath}`));
22
+ console.log(chalk.dim(' Open your Shop Mini’s directory\n'));
23
+ console.log(chalk.cyan.bold(` ↪ ${useYarn ? 'yarn' : 'npm'} start`));
24
+ console.log(chalk.dim(' Run Shop Mini, and open it on an iOS or Android device.\n'));
25
+ console.log(chalk.cyan(' ↪ ') +
26
+ chalk.cyan.underline.bold('https://shop.app/minis/docs/'));
27
+ console.log(chalk.dim(' Shop Minis documentation.\n \n'));
28
+ }
29
+ async function selectTemplate() {
30
+ return renderSelectPrompt({
31
+ message: 'Select a template',
32
+ choices: TEMPLATES.map(template => ({
33
+ label: template.title,
34
+ value: template.value,
35
+ })),
36
+ infoTable: TEMPLATES.map(template => ({
37
+ header: template.title,
38
+ helperText: template.description,
39
+ items: [],
40
+ })),
41
+ });
42
+ }
43
+ export function loadCommand(parentProgram) {
44
+ const command = new Command()
45
+ .name('create')
46
+ .description('Create a new Shop Mini')
47
+ .argument('[mini name]', 'the name of your mini')
48
+ .option('--verbose', 'print debugging messages')
49
+ // TODO: Remove `--useYarn` https://github.com/Shopify/shop-minis-cli/issues/190
50
+ .option('--useYarn', '(deprecated) Use yarn as package manager instead of npm')
51
+ .option('--alphaMinisRuntime', 'use the alpha tag of @shopify/shop-minis-runtime. uses the latest tag by default')
52
+ .option('--alphaMinisSDK', 'use the alpha tag of @shopify/shop-minis-platform-sdk. uses the latest tag by default')
53
+ .option('--skip-create-extension', 'skip the create extension step')
54
+ .addOption(new Option('--example <example name>', 'name of the example to use'))
55
+ .addOption(new Option('--template <template name>', 'name of the template to use').choices(TEMPLATE_VALUES))
56
+ .addOption(new Option('--extension-target <extension target name>', 'name of the extension target to use').choices(Object.keys(EXTENSION_TARGETS_WITH_TEMPLATES)))
57
+ .addOption(new Option('--extension-type <extension type name>', 'name of the extension type to create').choices(Object.values(ExtensionType)))
58
+ .option('--output-dir <path>', 'Specify an output directory for the mini')
59
+ .option('--legacy', 'Use legacy create command') // TODO: Only used to keep commander happy
60
+ .action(async (miniNameArg, options = {}) => {
61
+ const outputDir = getOutputDirectory(options.outputDir);
62
+ if (!existsSync(outputDir)) {
63
+ console.error(`Unable to create a mini at the specified output dir of ${outputDir}`);
64
+ process.exit(1);
65
+ }
66
+ let miniName;
67
+ let exampleName = null;
68
+ let templateName = null;
69
+ let createChoice = 'advanced';
70
+ try {
71
+ if (options.example) {
72
+ miniName = options.example;
73
+ }
74
+ else if (miniNameArg) {
75
+ miniName = miniNameArg;
76
+ }
77
+ else {
78
+ miniName = await renderTextPrompt({
79
+ message: `Give your Shop Mini a name. ${chalk.dim('You can change it later.')}`,
80
+ });
81
+ }
82
+ if (options.example) {
83
+ exampleName = options.example;
84
+ createChoice = 'express';
85
+ }
86
+ else if (options.template) {
87
+ if (TEMPLATE_VALUES.includes(options.template)) {
88
+ templateName = options.template;
89
+ }
90
+ else {
91
+ outputWarn(`Template ${options.template} not found. Please select a valid template.`);
92
+ templateName = await selectTemplate();
93
+ }
94
+ }
95
+ else {
96
+ createChoice = await renderSelectPrompt({
97
+ message: 'Choose how you want to create your Shop Mini',
98
+ choices: [
99
+ {
100
+ label: 'Express - Start building a Shop Mini immediately',
101
+ value: 'express',
102
+ },
103
+ {
104
+ label: 'Advanced - Select from templates to create your Shop Mini',
105
+ value: 'advanced',
106
+ },
107
+ ],
108
+ });
109
+ if (createChoice === 'express') {
110
+ templateName = 'getting_started';
111
+ }
112
+ else {
113
+ templateName = await selectTemplate();
114
+ }
115
+ }
116
+ const miniDir = getHandleFromName(miniName);
117
+ const miniDirPath = path.resolve(outputDir, miniDir);
118
+ let miniTmpDirPath;
119
+ if (exampleName) {
120
+ await renderTasks([
121
+ {
122
+ title: 'Fetching example',
123
+ task: async () => {
124
+ miniTmpDirPath = await generateMiniFromExample(miniDir, exampleName, options.alphaMinisRuntime, options.alphaMinisSDK);
125
+ },
126
+ },
127
+ ]);
128
+ }
129
+ else if (templateName) {
130
+ await renderTasks([
131
+ {
132
+ title: 'Fetching template',
133
+ task: async () => {
134
+ miniTmpDirPath = await generateMiniFromTemplate(miniName, templateName, miniDir, options.alphaMinisRuntime, options.alphaMinisSDK);
135
+ },
136
+ },
137
+ ]);
138
+ }
139
+ if (!miniTmpDirPath) {
140
+ process.exit(1);
141
+ }
142
+ if (createChoice === 'advanced') {
143
+ await createExtensionFiles({
144
+ miniName,
145
+ specifiedTarget: options.extensionTarget,
146
+ specifiedType: options.extensionType,
147
+ miniOutputDir: miniTmpDirPath,
148
+ });
149
+ }
150
+ await copy(miniTmpDirPath, miniDirPath);
151
+ const useYarn = packageManagerFromUserAgent() === 'yarn';
152
+ // Yarn is ignoring the `resolutions` when you install
153
+ // via `yarn create @shopify/shop-mini` so use `--ignore-engines` to work around the
154
+ // problem with `@apollo/federation`
155
+ // npm fails to install for a similar reason on node 15 but runs fine so we will
156
+ // use `--force` to get everything installed
157
+ const installCmd = useYarn ? 'yarn --ignore-engines' : 'npm i --force';
158
+ await execAsync({
159
+ cmd: installCmd,
160
+ loadingMessage: 'Installing dependencies. This might take a minute...',
161
+ successMessage: 'Dependencies installed',
162
+ }, { cwd: miniDirPath });
163
+ execSync(`${useYarn ? 'yarn' : 'npx'} patch-package --patch-dir node_modules/@shopify/shop-minis-runtime/patches`, { cwd: miniDirPath });
164
+ await formatExtensionFiles(miniDirPath);
165
+ logSuccess(miniName, outputDir, miniDir, useYarn);
166
+ }
167
+ catch (err) {
168
+ console.error(err?.message || err);
169
+ process.exit(1);
170
+ }
171
+ });
172
+ parentProgram.addCommand(command);
173
+ }
174
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/commands/create-mini/legacy/index.ts"],"names":[],"mappings":"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"}
@@ -1,19 +1,20 @@
1
1
  import url from 'node:url';
2
- import { mkdtemp, readFile, writeFile } from 'node:fs/promises';
2
+ import { mkdtemp } from 'node:fs/promises';
3
3
  import path from 'path';
4
4
  import os from 'os';
5
5
  import { copy, move } from 'fs-extra';
6
6
  import _ from 'lodash';
7
- import { CLI_VERSION } from '../../config.js';
8
- import { replaceStringsInTemplate } from '../../../utils/replace-strings-in-template.js';
9
- import { execAsync } from '../../../utils/exec-async-child-process.js';
10
- import { getPackageAlphaVersionCommand, getPackageDependencyVersionCommand, getPackageLatestVersionCommand, } from '../../../utils/package-manager.js';
11
- import { COMMON_PACKAGE_DEPENDENCY_VERSIONS } from '../../../constants/templates.js';
12
- import { cloneShopMinisRepo, getExample } from './examples.js';
7
+ import { CLI_VERSION } from '../../../config.js';
8
+ import { replaceStringsInTemplate } from '../../../../utils/replace-strings-in-template.js';
9
+ import { execAsync } from '../../../../utils/exec-async-child-process.js';
10
+ import { getPackageAlphaVersionCommand, getPackageDependencyVersionCommand, getPackageLatestVersionCommand, overridePackageDependencies, } from '../../../../utils/package-manager.js';
11
+ import { COMMON_PACKAGE_DEPENDENCY_VERSIONS } from '../../../../constants/templates.js';
12
+ import { cloneShopMinisRepo, getExample } from '../../utils/examples.js';
13
13
  const __dirname = url.fileURLToPath(new URL('.', import.meta.url));
14
14
  export async function generateMiniFromTemplate(name, templateName, miniDir, useAlphaRuntime, useAlphaSDK) {
15
15
  const tmpDir = await mkdtemp(path.join(os.tmpdir(), `${miniDir}-`));
16
- const miniTemplateDir = await path.join(__dirname, '../../../../templates', `__template_${templateName}`);
16
+ const miniTemplateDir = await path.join(__dirname, '../../../../../templates', // TODO: this reads from outside the `build` dir, which is weird
17
+ `__template_${templateName}`);
17
18
  const stringsToReplace = {
18
19
  __MINI_APP_NAME__: name,
19
20
  __MINI_APP_NAME_PASCAL_CASE__: _.startCase(miniDir).replace(/ /g, ''),
@@ -29,7 +30,8 @@ export async function generateMiniFromTemplate(name, templateName, miniDir, useA
29
30
  __PACKAGE_VERSION_JEST__: COMMON_PACKAGE_DEPENDENCY_VERSIONS.JEST,
30
31
  __PACKAGE_VERSION_PRETTIER__: COMMON_PACKAGE_DEPENDENCY_VERSIONS.PRETTIER,
31
32
  };
32
- const commonTemplateFilesDir = await path.join(__dirname, '../../../../templates', '__template_common');
33
+ const commonTemplateFilesDir = await path.join(__dirname, '../../../../../templates', // TODO: this reads from outside the `build` dir, which is weird
34
+ '__template_common');
33
35
  await copy(commonTemplateFilesDir, tmpDir);
34
36
  await copy(miniTemplateDir, tmpDir);
35
37
  await move(path.join(tmpDir, 'gitignore'), path.join(tmpDir, '.gitignore'));
@@ -41,7 +43,7 @@ export async function generateMiniFromExample(miniDir, exampleName, useAlphaRunt
41
43
  const shopMinisClonePath = await cloneShopMinisRepo();
42
44
  const examplePath = await getExample(shopMinisClonePath, exampleName);
43
45
  await copy(examplePath, tmpDir);
44
- await overridePackageDependencies(tmpDir, {
46
+ overridePackageDependencies(tmpDir, {
45
47
  dependencies: {
46
48
  '@shopify/shop-minis-runtime': await fetchPackageVersion('@shopify/shop-minis-runtime', '0.0.100', useAlphaRuntime),
47
49
  '@shopify/shop-minis-platform-sdk': await fetchPackageVersion('@shopify/shop-minis-platform-sdk', '0.1.95', useAlphaSDK),
@@ -79,17 +81,4 @@ async function getPackageDependencyVersion(packageName, dependencyName, fallback
79
81
  return fallbackVersion;
80
82
  }
81
83
  }
82
- const overridePackageDependencies = async (directoryPath, versions) => {
83
- const packageJsonPath = path.join(directoryPath, 'package.json');
84
- const packageJson = JSON.parse(await readFile(packageJsonPath, 'utf8'));
85
- packageJson.dependencies = {
86
- ...packageJson.dependencies,
87
- ...versions.dependencies,
88
- };
89
- packageJson.devDependencies = {
90
- ...packageJson.devDependencies,
91
- ...versions.devDependencies,
92
- };
93
- await writeFile(packageJsonPath, JSON.stringify(packageJson, null, 2));
94
- };
95
84
  //# sourceMappingURL=template-app.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"template-app.js","sourceRoot":"","sources":["../../../../../src/commands/create-mini/legacy/utils/template-app.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ const {minisEslintConfig} = require('@shopify/shop-minis-sdk/eslint-config')
2
+
3
+ module.exports = minisEslintConfig
@@ -0,0 +1 @@
1
+ module.exports = require('@shopify/shop-minis-sdk/graphqlrc')
@@ -0,0 +1,8 @@
1
+ {
2
+ "semi": false,
3
+ "singleQuote": true,
4
+ "trailingComma": "es5",
5
+ "arrowParens": "avoid",
6
+ "bracketSpacing": false,
7
+ "printWidth": 80
8
+ }
@@ -0,0 +1,14 @@
1
+ declare module '*.svg' {
2
+ const content: import('react').FC<import('react-native-svg').SvgProps>
3
+ export default content
4
+ }
5
+
6
+ declare module '*.png' {
7
+ const content: import('react-native').ImageRequireSource
8
+ export default content
9
+ }
10
+
11
+ declare module '*.jpg' {
12
+ const content: import('react-native').ImageRequireSource
13
+ export default content
14
+ }
@@ -0,0 +1,5 @@
1
+ module.exports = {
2
+ // Changes to babel config are not supported by the mini platform.
3
+ // Custom configuration can introduce unexpected behaviour in your mini and could be a cause of rejection during the submission process.
4
+ presets: ['@shopify/shop-minis-sdk/babel-preset'],
5
+ }
@@ -0,0 +1,5 @@
1
+ import {renderDevelopmentMini} from '@shopify/shop-minis-sdk/src/renderDevelopmentMini'
2
+
3
+ import MiniApp from './src'
4
+
5
+ renderDevelopmentMini(MiniApp)
@@ -0,0 +1,3 @@
1
+ const {getMinisMetroConfig} = require('@shopify/shop-minis-sdk/metro-config')
2
+
3
+ module.exports = getMinisMetroConfig(__dirname)
@@ -0,0 +1,33 @@
1
+ {
2
+ "name": "getting-started",
3
+ "version": "0.0.1",
4
+ "private": true,
5
+ "scripts": {
6
+ "start": "shop-minis dev",
7
+ "test": "jest",
8
+ "lint": "eslint ."
9
+ },
10
+ "dependencies": {
11
+ "@shopify/shop-minis-sdk": "0.0.11"
12
+ },
13
+ "devDependencies": {
14
+ "@shopify/shop-minis-cli": "0.0.158",
15
+ "@types/jest": "^29.2.6",
16
+ "babel-jest": "^26.6.3",
17
+ "eslint": "^8.32.0",
18
+ "jest": "^29.3.1",
19
+ "prettier": "^2.8.2"
20
+ },
21
+ "jest": {
22
+ "preset": "react-native"
23
+ },
24
+ "overrides": {
25
+ "graphql": "15.8.0",
26
+ "react": "18.2.0",
27
+ "react-native": "0.73.2"
28
+ },
29
+ "resolutions": {
30
+ "@apollo/federation": "0.38.1",
31
+ "graphql": "15.8.0"
32
+ }
33
+ }
@@ -0,0 +1,23 @@
1
+ import {createNativeStackNavigator} from '@react-navigation/native-stack'
2
+
3
+ import {HomeScreen} from './screens/HomeScreen'
4
+ import {NativeFeaturesScreen} from './screens/NativeFeaturesScreen'
5
+
6
+ const Stack = createNativeStackNavigator()
7
+
8
+ export function App() {
9
+ return (
10
+ <Stack.Navigator>
11
+ <Stack.Screen
12
+ name="GettingStarted.Home"
13
+ component={HomeScreen}
14
+ options={{headerShown: false}}
15
+ />
16
+ <Stack.Screen
17
+ name="GettingStarted.NativeFeatures"
18
+ component={NativeFeaturesScreen}
19
+ options={{headerShown: false}}
20
+ />
21
+ </Stack.Navigator>
22
+ )
23
+ }
@@ -0,0 +1,9 @@
1
+ import {MiniAppConfig} from '@shopify/shop-minis-sdk'
2
+
3
+ import {App} from './App'
4
+
5
+ const config: MiniAppConfig = {
6
+ ViewerRoot: App,
7
+ }
8
+
9
+ export default config
@@ -0,0 +1,7 @@
1
+ {
2
+ "name": "Getting Started",
3
+ "handle": "getting-started",
4
+ "description": "Getting Started Example Mini",
5
+ "features": ["FULL_BLEED_VIEWER", "STANDALONE"],
6
+ "permissions": ["GALLERY", "CAMERA"]
7
+ }