@shopify/create-app 3.0.24 → 3.0.27

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,43 @@
1
1
  # @shopify/create-app
2
2
 
3
+ ## 3.0.27
4
+
5
+ ### Patch Changes
6
+
7
+ - Updated dependencies [e2e8b4db]
8
+ - @shopify/cli-kit@3.0.27
9
+
10
+ ## 3.0.26
11
+
12
+ ### Patch Changes
13
+
14
+ - 022a4e24: Internal: build cli-kit using tsc instead of rollup+esbuild
15
+ - e81e52b1: Report error events
16
+ - 2d8e4458: Log Listr task titles to logfile
17
+ - Updated dependencies [dbcffdbb]
18
+ - Updated dependencies [022a4e24]
19
+ - Updated dependencies [e81e52b1]
20
+ - Updated dependencies [c16035f1]
21
+ - Updated dependencies [61f595df]
22
+ - Updated dependencies [87f7843f]
23
+ - Updated dependencies [8ff4e3d7]
24
+ - Updated dependencies [168bb4c6]
25
+ - Updated dependencies [0a9dbc63]
26
+ - Updated dependencies [2d8e4458]
27
+ - @shopify/cli-kit@3.0.26
28
+
29
+ ## 3.0.25
30
+
31
+ ### Patch Changes
32
+
33
+ - Updated dependencies [a6ea9c8d]
34
+ - Updated dependencies [822d0fd3]
35
+ - Updated dependencies [bf8137c2]
36
+ - Updated dependencies [e650b499]
37
+ - Updated dependencies [3360289d]
38
+ - Updated dependencies [2a666db7]
39
+ - @shopify/cli-kit@3.0.25
40
+
3
41
  ## 3.0.24
4
42
 
5
43
  ### Patch Changes
@@ -0,0 +1,15 @@
1
+ import { Command } from '@oclif/core';
2
+ export default class Init extends Command {
3
+ static flags: {
4
+ name: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string | undefined>;
5
+ path: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string | undefined>;
6
+ template: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string | undefined>;
7
+ 'dependency-manager': import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string | undefined>;
8
+ local: import("@oclif/core/lib/interfaces/parser.js").BooleanFlag<boolean>;
9
+ verbose: import("@oclif/core/lib/interfaces/parser.js").BooleanFlag<boolean>;
10
+ };
11
+ run(): Promise<void>;
12
+ startEvent(): Promise<void>;
13
+ validateTemplateValue(template: string | undefined): void;
14
+ parseURL(url: string): URL | undefined;
15
+ }
@@ -1,348 +1,90 @@
1
- import { haiku, ui, path, dependency, file, string, github, git, template, npm, environment, output, error, cli, analytics } from '@shopify/cli-kit';
2
- import { Writable } from 'stream';
3
- import { Flags, Command } from '@oclif/core';
4
-
5
- const templateURLMap = {
6
- node: "https://github.com/Shopify/shopify-app-template-node#cli_three",
7
- php: "https://github.com/Shopify/shopify-app-template-php#cli_three",
8
- ruby: "https://github.com/Shopify/shopify-app-template-ruby"
1
+ import initPrompt, { templateURLMap } from '../prompts/init.js';
2
+ import initService from '../services/init.js';
3
+ import { Command, Flags } from '@oclif/core';
4
+ import { path, cli, analytics, error, output } from '@shopify/cli-kit';
5
+ const InvalidGithubRepository = () => {
6
+ return new error.Abort('Only GitHub repository references are supported. e.g.: https://github.com/Shopify/<repository>/[subpath]#[branch]');
9
7
  };
10
- const init$1 = async (options, prompt = ui.prompt) => {
11
- const defaults = {
12
- name: haiku.generate("app"),
13
- template: templateURLMap.node
14
- };
15
- const questions = [];
16
- if (!options.name) {
17
- questions.push({
18
- type: "input",
19
- name: "name",
20
- preface: "\nWelcome. Let\u2019s get started by naming your app. You can change it later.",
21
- message: "Your app's name?",
22
- default: defaults.name,
23
- validate: (value) => {
24
- if (value.length === 0) {
25
- return "App Name can't be empty";
26
- }
27
- if (value.length > 30) {
28
- return "Enter a shorter name (30 character max.)";
29
- }
30
- return true;
31
- }
32
- });
33
- }
34
- if (!options.template && Object.keys(templateURLMap).length > 1) {
35
- questions.push({
36
- type: "select",
37
- name: "template",
38
- choices: Object.keys(templateURLMap),
39
- message: "Which template would you like to use?",
40
- default: defaults.template
41
- });
42
- }
43
- const promptOutput = await prompt(questions);
44
- const answers = {
45
- ...options,
46
- ...promptOutput
47
- };
48
- const templateURL = templateURLMap[answers.template];
49
- answers.template = templateURL || answers.template || defaults.template;
50
- return answers;
8
+ const UnsupportedTemplateAlias = () => {
9
+ return new error.Abort(output.content `Only ${Object.keys(templateURLMap)
10
+ .map((alias) => output.content `${output.token.yellow(alias)}`.value)
11
+ .join(', ')} template aliases are supported`);
51
12
  };
52
-
53
- var version$1 = "3.0.24";
54
-
55
- var version = "3.0.24";
56
-
57
- async function updateCLIDependencies(packageJSON, local) {
58
- packageJSON.dependencies = packageJSON.dependencies || {};
59
- packageJSON.dependencies["@shopify/cli"] = version$1;
60
- packageJSON.dependencies["@shopify/app"] = version;
61
- if (local) {
62
- const cliPath = `file:${await path.findUp("packages/cli-main", { type: "directory" })}`;
63
- const appPath = `file:${await path.findUp("packages/app", { type: "directory" })}`;
64
- const cliKitPath = `file:${await path.findUp("packages/cli-kit", { type: "directory" })}`;
65
- packageJSON.dependencies["@shopify/cli"] = cliPath;
66
- packageJSON.dependencies["@shopify/app"] = appPath;
67
- const dependencyOverrides = {
68
- "@shopify/cli": cliPath,
69
- "@shopify/app": appPath,
70
- "@shopify/cli-kit": cliKitPath
71
- };
72
- packageJSON.overrides = packageJSON.overrides ? { ...packageJSON.overrides, ...dependencyOverrides } : dependencyOverrides;
73
- packageJSON.resolutions = packageJSON.resolutions ? { ...packageJSON.resolutions, ...dependencyOverrides } : dependencyOverrides;
74
- }
75
- return packageJSON;
76
- }
77
- async function getDeepInstallNPMTasks({
78
- from,
79
- dependencyManager,
80
- didInstallEverything
81
- }) {
82
- const packageJSONFiles = await path.glob([path.join(from, "**/package.json")]);
83
- let foldersInstalled = 0;
84
- return packageJSONFiles.map((filePath) => {
85
- const folderPath = filePath.replace("package.json", "");
86
- const titlePath = folderPath.replace(from, "");
87
- return {
88
- title: `Installing dependencies in ${titlePath}`,
89
- task: async (_, task) => {
90
- const output = new Writable({
91
- write(chunk, _2, next) {
92
- task.output = chunk.toString();
93
- next();
94
- }
13
+ export default class Init extends Command {
14
+ async run() {
15
+ this.startEvent();
16
+ const { flags } = await this.parse(Init);
17
+ const directory = flags.path ? path.resolve(flags.path) : process.cwd();
18
+ this.validateTemplateValue(flags.template);
19
+ const promptAnswers = await initPrompt({
20
+ name: flags.name,
21
+ template: flags.template,
95
22
  });
96
- await dependency.install(folderPath, dependencyManager, output, output);
97
- task.title = `Installed dependencies in ${titlePath}`;
98
- foldersInstalled++;
99
- if (foldersInstalled === packageJSONFiles.length) {
100
- didInstallEverything();
101
- }
102
- }
103
- };
104
- });
105
- }
106
-
107
- async function cleanup(webOutputDirectory) {
108
- const gitPaths = await path.glob([
109
- path.join(webOutputDirectory, "**", ".git"),
110
- path.join(webOutputDirectory, "**", ".github"),
111
- path.join(webOutputDirectory, "**", ".gitmodules"),
112
- path.join(webOutputDirectory, "LICENSE*"),
113
- path.join(webOutputDirectory, "**", "frontend/LICENSE*"),
114
- path.join(webOutputDirectory, "package.json.cli2")
115
- ], {
116
- dot: true,
117
- onlyFiles: false,
118
- onlyDirectories: false,
119
- ignore: ["**/node_modules/**"]
120
- });
121
- return Promise.all(gitPaths.map((path2) => file.rmdir(path2, { force: true }))).then(() => {
122
- });
123
- }
124
-
125
- const DirectoryExistsError = (name) => {
126
- return new error.Abort(`
127
- A directory with this name (${name}) already exists.
128
- Choose a new name for your app.`);
129
- };
130
- async function init(options) {
131
- const dependencyManager = inferDependencyManager(options.dependencyManager);
132
- const hyphenizedName = string.hyphenize(options.name);
133
- const outputDirectory = path.join(options.directory, hyphenizedName);
134
- const githubRepo = github.parseGithubRepoReference(options.template);
135
- await ensureAppDirectoryIsAvailable(outputDirectory, hyphenizedName);
136
- await file.inTemporaryDirectory(async (tmpDir) => {
137
- const templateDownloadDir = path.join(tmpDir, "download");
138
- const templatePathDir = githubRepo.filePath ? path.join(templateDownloadDir, githubRepo.filePath) : templateDownloadDir;
139
- const templateScaffoldDir = path.join(tmpDir, "app");
140
- const repoUrl = githubRepo.branch ? `${githubRepo.repoBaseUrl}#${githubRepo.branch}` : githubRepo.repoBaseUrl;
141
- await file.mkdir(templateDownloadDir);
142
- let tasks = [];
143
- tasks = tasks.concat([
144
- {
145
- title: "Download template",
146
- task: async (_, task) => {
147
- task.title = "Downloading template";
148
- await git.downloadRepository({
149
- repoUrl,
150
- destination: templateDownloadDir,
151
- shallow: true,
152
- progressUpdater: (statusString) => {
153
- const taskOutput = `Cloning template from ${repoUrl}:
154
- ${statusString}`;
155
- task.output = taskOutput;
156
- }
157
- });
158
- task.title = "Template downloaded";
159
- }
160
- },
161
- {
162
- title: `Initialize your app ${hyphenizedName}`,
163
- task: async (_, parentTask) => {
164
- parentTask.title = `Initializing your app ${hyphenizedName}`;
165
- return parentTask.newListr([
166
- {
167
- title: "Parse liquid",
168
- task: async (_2, task) => {
169
- task.title = "Parsing liquid";
170
- await template.recursiveDirectoryCopy(templatePathDir, templateScaffoldDir, {
171
- dependency_manager: dependencyManager,
172
- app_name: options.name
173
- });
174
- task.title = "Liquid parsed";
175
- }
176
- },
177
- {
178
- title: "Update package.json",
179
- task: async (_2, task) => {
180
- task.title = "Updating package.json";
181
- const packageJSON = await npm.readPackageJSON(templateScaffoldDir);
182
- await npm.updateAppData(packageJSON, hyphenizedName);
183
- await updateCLIDependencies(packageJSON, options.local);
184
- await npm.writePackageJSON(templateScaffoldDir, packageJSON);
185
- task.title = "Updated package.json";
186
- parentTask.title = "App initialized";
187
- }
188
- }
189
- ]);
190
- }
191
- }
192
- ]);
193
- if (await environment.local.isShopify()) {
194
- tasks.push({
195
- title: "[Shopifolks-only] Configure the project's NPM registry",
196
- task: async (_, task) => {
197
- task.title = "[Shopifolks-only] Configuring the project's NPM registry";
198
- const npmrcPath = path.join(templateScaffoldDir, ".npmrc");
199
- const npmrcContent = `@shopify:registry=https://registry.npmjs.org
200
- `;
201
- await file.append(npmrcPath, npmrcContent);
202
- task.title = "[Shopifolks-only] Project's NPM registry configured.";
203
- }
204
- });
23
+ await initService({
24
+ name: promptAnswers.name,
25
+ dependencyManager: flags['dependency-manager'],
26
+ template: promptAnswers.template,
27
+ local: flags.local,
28
+ directory,
29
+ });
30
+ await analytics.reportEvent();
205
31
  }
206
- tasks = tasks.concat([
207
- {
208
- title: `Install dependencies with ${dependencyManager}`,
209
- task: async (_, parentTask) => {
210
- parentTask.title = `Installing dependencies with ${dependencyManager}`;
211
- function didInstallEverything() {
212
- parentTask.title = `Dependencies installed with ${dependencyManager}`;
213
- }
214
- return parentTask.newListr(await getDeepInstallNPMTasks({
215
- from: templateScaffoldDir,
216
- dependencyManager,
217
- didInstallEverything
218
- }), { concurrent: false });
32
+ async startEvent() {
33
+ const commandIndex = process.argv.indexOf('init');
34
+ const args = process.argv.slice(commandIndex + 1).join(' ');
35
+ analytics.start({ command: 'create-app', args });
36
+ }
37
+ validateTemplateValue(template) {
38
+ if (!template) {
39
+ return;
219
40
  }
220
- },
221
- {
222
- title: "Clean up",
223
- task: async (_, task) => {
224
- task.title = "Cleaning up";
225
- await cleanup(templateScaffoldDir);
226
- task.title = "Completed clean up";
41
+ const url = this.parseURL(template);
42
+ if (url && url.origin !== 'https://github.com')
43
+ throw InvalidGithubRepository();
44
+ if (!url && !Object.keys(templateURLMap).includes(template))
45
+ throw UnsupportedTemplateAlias();
46
+ }
47
+ parseURL(url) {
48
+ try {
49
+ return new URL(url);
50
+ // eslint-disable-next-line no-catch-all/no-catch-all
227
51
  }
228
- },
229
- {
230
- title: "Initializing a Git repository...",
231
- task: async (_, task) => {
232
- await git.initializeRepository(templateScaffoldDir);
233
- task.title = "Git repository initialized";
52
+ catch (error) {
53
+ return undefined;
234
54
  }
235
- }
236
- ]);
237
- const list = new ui.Listr(tasks, {
238
- concurrent: false,
239
- rendererOptions: { collapse: false },
240
- rendererSilent: environment.local.isUnitTest()
241
- });
242
- await list.run();
243
- await file.move(templateScaffoldDir, outputDirectory);
244
- });
245
- output.info(output.content`
246
- ${hyphenizedName} is ready for you to build! Remember to ${output.token.genericShellCommand(`cd ${hyphenizedName}`)}
247
- To preview your project, run ${output.token.packagejsonScript(dependencyManager, "dev")}
248
- To add extensions, run ${output.token.packagejsonScript(dependencyManager, "scaffold extension")}
249
- For more details on all that you can build, see the docs: ${output.token.link("shopify.dev", "https://shopify.dev")} ✨
250
-
251
- For help and a list of commands, enter ${output.token.packagejsonScript(dependencyManager, "shopify app", "--help")}
252
- `);
253
- }
254
- function inferDependencyManager(optionsDependencyManager) {
255
- if (optionsDependencyManager && dependency.dependencyManager.includes(optionsDependencyManager)) {
256
- return optionsDependencyManager;
257
- }
258
- return dependency.dependencyManagerUsedForCreating();
259
- }
260
- async function ensureAppDirectoryIsAvailable(directory, name) {
261
- const exists = await file.exists(directory);
262
- if (exists)
263
- throw DirectoryExistsError(name);
264
- }
265
-
266
- const InvalidGithubRepository = () => {
267
- return new error.Abort("Only GitHub repository references are supported. e.g.: https://github.com/Shopify/<repository>/[subpath]#[branch]");
268
- };
269
- const UnsupportedTemplateAlias = () => {
270
- return new error.Abort(output.content`Only ${Object.keys(templateURLMap).map((alias) => output.content`${output.token.yellow(alias)}`.value).join(", ")} template aliases are supported`);
271
- };
272
- const _Init = class extends Command {
273
- async run() {
274
- const { flags } = await this.parse(_Init);
275
- const directory = flags.path ? path.resolve(flags.path) : process.cwd();
276
- this.validateTemplateValue(flags.template);
277
- const promptAnswers = await init$1({
278
- name: flags.name,
279
- template: flags.template
280
- });
281
- await init({
282
- name: promptAnswers.name,
283
- dependencyManager: flags["dependency-manager"],
284
- template: promptAnswers.template,
285
- local: flags.local,
286
- directory
287
- });
288
- await this.reportEvent();
289
- }
290
- async reportEvent() {
291
- const commandIndex = process.argv.indexOf("init");
292
- const args = process.argv.slice(commandIndex + 1);
293
- await analytics.reportEvent("create-app", args);
294
- }
295
- validateTemplateValue(template) {
296
- if (!template) {
297
- return;
298
55
  }
299
- const url = this.parseURL(template);
300
- if (url && url.origin !== "https://github.com")
301
- throw InvalidGithubRepository();
302
- if (!url && !Object.keys(templateURLMap).includes(template))
303
- throw UnsupportedTemplateAlias();
304
- }
305
- parseURL(url) {
306
- try {
307
- return new URL(url);
308
- } catch (error2) {
309
- return void 0;
310
- }
311
- }
312
- };
313
- let Init = _Init;
56
+ }
314
57
  Init.flags = {
315
- ...cli.globalFlags,
316
- name: Flags.string({
317
- char: "n",
318
- env: "SHOPIFY_FLAG_NAME",
319
- hidden: false
320
- }),
321
- path: Flags.string({
322
- char: "p",
323
- env: "SHOPIFY_FLAG_PATH",
324
- parse: (input, _) => Promise.resolve(path.resolve(input)),
325
- hidden: false
326
- }),
327
- template: Flags.string({
328
- description: `The app template. Accepts one of the following:
329
- - <${Object.keys(templateURLMap).join("|")}>
58
+ ...cli.globalFlags,
59
+ name: Flags.string({
60
+ char: 'n',
61
+ env: 'SHOPIFY_FLAG_NAME',
62
+ hidden: false,
63
+ }),
64
+ path: Flags.string({
65
+ char: 'p',
66
+ env: 'SHOPIFY_FLAG_PATH',
67
+ parse: (input, _) => Promise.resolve(path.resolve(input)),
68
+ hidden: false,
69
+ }),
70
+ template: Flags.string({
71
+ description: `The app template. Accepts one of the following:
72
+ - <${Object.keys(templateURLMap).join('|')}>
330
73
  - Any GitHub repo with optional branch and subpath eg: https://github.com/Shopify/<repository>/[subpath]#[branch]`,
331
- env: "SHOPIFY_FLAG_TEMPLATE"
332
- }),
333
- "dependency-manager": Flags.string({
334
- char: "d",
335
- env: "SHOPIFY_FLAG_DEPENDENCY_MANAGER",
336
- hidden: false,
337
- options: ["npm", "yarn", "pnpm"]
338
- }),
339
- local: Flags.boolean({
340
- char: "l",
341
- env: "SHOPIFY_FLAG_LOCAL",
342
- default: false,
343
- hidden: true
344
- })
74
+ env: 'SHOPIFY_FLAG_TEMPLATE',
75
+ }),
76
+ // eslint-disable-next-line @typescript-eslint/naming-convention
77
+ 'dependency-manager': Flags.string({
78
+ char: 'd',
79
+ env: 'SHOPIFY_FLAG_DEPENDENCY_MANAGER',
80
+ hidden: false,
81
+ options: ['npm', 'yarn', 'pnpm'],
82
+ }),
83
+ local: Flags.boolean({
84
+ char: 'l',
85
+ env: 'SHOPIFY_FLAG_LOCAL',
86
+ default: false,
87
+ hidden: true,
88
+ }),
345
89
  };
346
-
347
- export { Init as default };
348
- //# sourceMappingURL=init.js.map
90
+ //# sourceMappingURL=init.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"init.js","sources":["../../src/prompts/init.ts","../../src/utils/template/npm.ts","../../src/utils/template/cleanup.ts","../../src/services/init.ts","../../src/commands/init.ts"],"sourcesContent":["import {haiku, ui} from '@shopify/cli-kit'\n\ninterface InitOptions {\n name?: string\n template?: string\n}\n\ninterface InitOutput {\n name: string\n template: string\n}\n\n// Eventually this list should be taken from a remote location\n// That way we don't have to update the CLI every time we add a template\nexport const templateURLMap = {\n node: 'https://github.com/Shopify/shopify-app-template-node#cli_three',\n php: 'https://github.com/Shopify/shopify-app-template-php#cli_three',\n ruby: 'https://github.com/Shopify/shopify-app-template-ruby',\n} as const\n\nconst init = async (options: InitOptions, prompt = ui.prompt): Promise<InitOutput> => {\n const defaults = {\n name: haiku.generate('app'),\n template: templateURLMap.node,\n } as const\n\n const questions: ui.Question<'name' | 'template'>[] = []\n if (!options.name) {\n questions.push({\n type: 'input',\n name: 'name',\n preface: '\\nWelcome. Let’s get started by naming your app. You can change it later.',\n message: \"Your app's name?\",\n default: defaults.name,\n validate: (value) => {\n if (value.length === 0) {\n return \"App Name can't be empty\"\n }\n if (value.length > 30) {\n return 'Enter a shorter name (30 character max.)'\n }\n return true\n },\n })\n }\n\n if (!options.template && Object.keys(templateURLMap).length > 1) {\n questions.push({\n type: 'select',\n name: 'template',\n choices: Object.keys(templateURLMap),\n message: 'Which template would you like to use?',\n default: defaults.template,\n })\n }\n\n const promptOutput: InitOutput = await prompt(questions)\n const answers = {\n ...options,\n ...promptOutput,\n }\n\n const templateURL = templateURLMap[answers.template as keyof typeof templateURLMap]\n answers.template = templateURL || answers.template || defaults.template\n\n return answers\n}\n\nexport default init\n","import {version as cliVersion} from '../../../../cli-main/package.json'\nimport {version as appVersion} from '../../../../app/package.json'\nimport {path, dependency, ui, npm} from '@shopify/cli-kit'\nimport {Writable} from 'stream'\n\nexport async function updateCLIDependencies(packageJSON: npm.PackageJSON, local: boolean): Promise<npm.PackageJSON> {\n packageJSON.dependencies = packageJSON.dependencies || {}\n packageJSON.dependencies['@shopify/cli'] = cliVersion\n packageJSON.dependencies['@shopify/app'] = appVersion\n\n if (local) {\n const cliPath = `file:${(await path.findUp('packages/cli-main', {type: 'directory'})) as string}`\n const appPath = `file:${(await path.findUp('packages/app', {type: 'directory'})) as string}`\n const cliKitPath = `file:${(await path.findUp('packages/cli-kit', {type: 'directory'})) as string}`\n\n // eslint-disable-next-line require-atomic-updates\n packageJSON.dependencies['@shopify/cli'] = cliPath\n // eslint-disable-next-line require-atomic-updates\n packageJSON.dependencies['@shopify/app'] = appPath\n\n const dependencyOverrides = {\n // eslint-disable-next-line @typescript-eslint/naming-convention\n '@shopify/cli': cliPath,\n // eslint-disable-next-line @typescript-eslint/naming-convention\n '@shopify/app': appPath,\n // eslint-disable-next-line @typescript-eslint/naming-convention\n '@shopify/cli-kit': cliKitPath,\n }\n\n packageJSON.overrides = packageJSON.overrides\n ? {...packageJSON.overrides, ...dependencyOverrides}\n : dependencyOverrides\n\n packageJSON.resolutions = packageJSON.resolutions\n ? {...packageJSON.resolutions, ...dependencyOverrides}\n : dependencyOverrides\n }\n\n return packageJSON\n}\n\nexport async function getDeepInstallNPMTasks({\n from,\n dependencyManager,\n didInstallEverything,\n}: {\n from: string\n dependencyManager: dependency.DependencyManager\n didInstallEverything(): void\n}): Promise<ui.ListrTask[]> {\n const packageJSONFiles = await path.glob([path.join(from, '**/package.json')])\n let foldersInstalled = 0\n\n return packageJSONFiles.map((filePath) => {\n const folderPath = filePath.replace('package.json', '')\n const titlePath = folderPath.replace(from, '')\n\n return {\n title: `Installing dependencies in ${titlePath}`,\n task: async (_, task) => {\n const output = new Writable({\n write(chunk, _, next) {\n task.output = chunk.toString()\n next()\n },\n })\n\n await dependency.install(folderPath, dependencyManager, output, output)\n\n task.title = `Installed dependencies in ${titlePath}`\n\n foldersInstalled++\n\n if (foldersInstalled === packageJSONFiles.length) {\n didInstallEverything()\n }\n },\n }\n })\n}\n","import {file, path} from '@shopify/cli-kit'\n\nexport default async function cleanup(webOutputDirectory: string) {\n const gitPaths = await path.glob(\n [\n path.join(webOutputDirectory, '**', '.git'),\n path.join(webOutputDirectory, '**', '.github'),\n path.join(webOutputDirectory, '**', '.gitmodules'),\n path.join(webOutputDirectory, 'LICENSE*'),\n path.join(webOutputDirectory, '**', 'frontend/LICENSE*'),\n path.join(webOutputDirectory, 'package.json.cli2'),\n ],\n {\n dot: true,\n onlyFiles: false,\n onlyDirectories: false,\n ignore: ['**/node_modules/**'],\n },\n )\n\n return Promise.all(gitPaths.map((path) => file.rmdir(path, {force: true}))).then(() => {})\n}\n","import {getDeepInstallNPMTasks, updateCLIDependencies} from '../utils/template/npm'\nimport cleanup from '../utils/template/cleanup'\n\nimport {\n string,\n path,\n file,\n output,\n ui,\n dependency,\n template,\n npm,\n git,\n github,\n environment,\n error,\n} from '@shopify/cli-kit'\n\ninterface InitOptions {\n name: string\n directory: string\n template: string\n dependencyManager: string | undefined\n local: boolean\n}\n\nconst DirectoryExistsError = (name: string) => {\n return new error.Abort(`\\nA directory with this name (${name}) already exists.\\nChoose a new name for your app.`)\n}\n\nasync function init(options: InitOptions) {\n const dependencyManager: dependency.DependencyManager = inferDependencyManager(options.dependencyManager)\n const hyphenizedName = string.hyphenize(options.name)\n const outputDirectory = path.join(options.directory, hyphenizedName)\n const githubRepo = github.parseGithubRepoReference(options.template)\n\n await ensureAppDirectoryIsAvailable(outputDirectory, hyphenizedName)\n\n await file.inTemporaryDirectory(async (tmpDir) => {\n const templateDownloadDir = path.join(tmpDir, 'download')\n const templatePathDir = githubRepo.filePath\n ? path.join(templateDownloadDir, githubRepo.filePath)\n : templateDownloadDir\n const templateScaffoldDir = path.join(tmpDir, 'app')\n const repoUrl = githubRepo.branch ? `${githubRepo.repoBaseUrl}#${githubRepo.branch}` : githubRepo.repoBaseUrl\n\n await file.mkdir(templateDownloadDir)\n let tasks: ConstructorParameters<typeof ui.Listr>[0] = []\n\n tasks = tasks.concat([\n {\n title: 'Download template',\n task: async (_, task) => {\n task.title = 'Downloading template'\n await git.downloadRepository({\n repoUrl,\n destination: templateDownloadDir,\n shallow: true,\n progressUpdater: (statusString: string) => {\n const taskOutput = `Cloning template from ${repoUrl}:\\n${statusString}`\n task.output = taskOutput\n },\n })\n task.title = 'Template downloaded'\n },\n },\n {\n title: `Initialize your app ${hyphenizedName}`,\n task: async (_, parentTask) => {\n parentTask.title = `Initializing your app ${hyphenizedName}`\n return parentTask.newListr([\n {\n title: 'Parse liquid',\n task: async (_, task) => {\n task.title = 'Parsing liquid'\n await template.recursiveDirectoryCopy(templatePathDir, templateScaffoldDir, {\n // eslint-disable-next-line @typescript-eslint/naming-convention\n dependency_manager: dependencyManager,\n // eslint-disable-next-line @typescript-eslint/naming-convention\n app_name: options.name,\n })\n\n task.title = 'Liquid parsed'\n },\n },\n {\n title: 'Update package.json',\n task: async (_, task) => {\n task.title = 'Updating package.json'\n const packageJSON = await npm.readPackageJSON(templateScaffoldDir)\n\n await npm.updateAppData(packageJSON, hyphenizedName)\n await updateCLIDependencies(packageJSON, options.local)\n\n await npm.writePackageJSON(templateScaffoldDir, packageJSON)\n\n task.title = 'Updated package.json'\n parentTask.title = 'App initialized'\n },\n },\n ])\n },\n },\n ])\n\n if (await environment.local.isShopify()) {\n tasks.push({\n title: \"[Shopifolks-only] Configure the project's NPM registry\",\n task: async (_, task) => {\n task.title = \"[Shopifolks-only] Configuring the project's NPM registry\"\n const npmrcPath = path.join(templateScaffoldDir, '.npmrc')\n const npmrcContent = `@shopify:registry=https://registry.npmjs.org\\n`\n await file.append(npmrcPath, npmrcContent)\n task.title = \"[Shopifolks-only] Project's NPM registry configured.\"\n },\n })\n }\n\n tasks = tasks.concat([\n {\n title: `Install dependencies with ${dependencyManager}`,\n task: async (_, parentTask) => {\n parentTask.title = `Installing dependencies with ${dependencyManager}`\n function didInstallEverything() {\n parentTask.title = `Dependencies installed with ${dependencyManager}`\n }\n\n return parentTask.newListr(\n await getDeepInstallNPMTasks({\n from: templateScaffoldDir,\n dependencyManager,\n didInstallEverything,\n }),\n {concurrent: false},\n )\n },\n },\n {\n title: 'Clean up',\n task: async (_, task) => {\n task.title = 'Cleaning up'\n await cleanup(templateScaffoldDir)\n task.title = 'Completed clean up'\n },\n },\n {\n title: 'Initializing a Git repository...',\n task: async (_, task) => {\n await git.initializeRepository(templateScaffoldDir)\n task.title = 'Git repository initialized'\n },\n },\n ])\n\n const list = new ui.Listr(tasks, {\n concurrent: false,\n rendererOptions: {collapse: false},\n rendererSilent: environment.local.isUnitTest(),\n })\n await list.run()\n\n await file.move(templateScaffoldDir, outputDirectory)\n })\n\n output.info(output.content`\n ${hyphenizedName} is ready for you to build! Remember to ${output.token.genericShellCommand(`cd ${hyphenizedName}`)}\n To preview your project, run ${output.token.packagejsonScript(dependencyManager, 'dev')}\n To add extensions, run ${output.token.packagejsonScript(dependencyManager, 'scaffold extension')}\n For more details on all that you can build, see the docs: ${output.token.link(\n 'shopify.dev',\n 'https://shopify.dev',\n )} ✨\n\n For help and a list of commands, enter ${output.token.packagejsonScript(dependencyManager, 'shopify app', '--help')}\n `)\n}\n\nfunction inferDependencyManager(optionsDependencyManager: string | undefined): dependency.DependencyManager {\n if (\n optionsDependencyManager &&\n dependency.dependencyManager.includes(optionsDependencyManager as dependency.DependencyManager)\n ) {\n return optionsDependencyManager as dependency.DependencyManager\n }\n return dependency.dependencyManagerUsedForCreating()\n}\n\nasync function ensureAppDirectoryIsAvailable(directory: string, name: string): Promise<void> {\n const exists = await file.exists(directory)\n if (exists) throw DirectoryExistsError(name)\n}\n\nexport default init\n","import initPrompt, {templateURLMap} from '../prompts/init'\nimport initService from '../services/init'\nimport {Command, Flags} from '@oclif/core'\nimport {path, cli, analytics, error, output} from '@shopify/cli-kit'\n\nconst InvalidGithubRepository = () => {\n return new error.Abort(\n 'Only GitHub repository references are supported. e.g.: https://github.com/Shopify/<repository>/[subpath]#[branch]',\n )\n}\n\nconst UnsupportedTemplateAlias = () => {\n return new error.Abort(\n output.content`Only ${Object.keys(templateURLMap)\n .map((alias) => output.content`${output.token.yellow(alias)}`.value)\n .join(', ')} template aliases are supported`,\n )\n}\nexport default class Init extends Command {\n static flags = {\n ...cli.globalFlags,\n name: Flags.string({\n char: 'n',\n env: 'SHOPIFY_FLAG_NAME',\n hidden: false,\n }),\n path: Flags.string({\n char: 'p',\n env: 'SHOPIFY_FLAG_PATH',\n parse: (input, _) => Promise.resolve(path.resolve(input)),\n hidden: false,\n }),\n template: Flags.string({\n description: `The app template. Accepts one of the following:\n - <${Object.keys(templateURLMap).join('|')}>\n - Any GitHub repo with optional branch and subpath eg: https://github.com/Shopify/<repository>/[subpath]#[branch]`,\n env: 'SHOPIFY_FLAG_TEMPLATE',\n }),\n // eslint-disable-next-line @typescript-eslint/naming-convention\n 'dependency-manager': Flags.string({\n char: 'd',\n env: 'SHOPIFY_FLAG_DEPENDENCY_MANAGER',\n hidden: false,\n options: ['npm', 'yarn', 'pnpm'],\n }),\n local: Flags.boolean({\n char: 'l',\n env: 'SHOPIFY_FLAG_LOCAL',\n default: false,\n hidden: true,\n }),\n }\n\n async run(): Promise<void> {\n const {flags} = await this.parse(Init)\n const directory = flags.path ? path.resolve(flags.path) : process.cwd()\n\n this.validateTemplateValue(flags.template)\n\n const promptAnswers = await initPrompt({\n name: flags.name,\n template: flags.template,\n })\n\n await initService({\n name: promptAnswers.name,\n dependencyManager: flags['dependency-manager'],\n template: promptAnswers.template,\n local: flags.local,\n directory,\n })\n await this.reportEvent()\n }\n\n async reportEvent(): Promise<void> {\n const commandIndex = process.argv.indexOf('init')\n const args = process.argv.slice(commandIndex + 1)\n await analytics.reportEvent('create-app', args)\n }\n\n validateTemplateValue(template: string | undefined) {\n if (!template) {\n return\n }\n\n const url = this.parseURL(template)\n if (url && url.origin !== 'https://github.com') throw InvalidGithubRepository()\n if (!url && !Object.keys(templateURLMap).includes(template)) throw UnsupportedTemplateAlias()\n }\n\n parseURL(url: string): URL | undefined {\n try {\n return new URL(url)\n // eslint-disable-next-line no-catch-all/no-catch-all\n } catch (error) {\n return undefined\n }\n }\n}\n"],"names":["init","cliVersion","appVersion","initPrompt","initService"],"mappings":"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"}
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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","sourcesContent":["import initPrompt, {templateURLMap} from '../prompts/init.js'\nimport initService from '../services/init.js'\nimport {Command, Flags} from '@oclif/core'\nimport {path, cli, analytics, error, output} from '@shopify/cli-kit'\n\nconst InvalidGithubRepository = () => {\n return new error.Abort(\n 'Only GitHub repository references are supported. e.g.: https://github.com/Shopify/<repository>/[subpath]#[branch]',\n )\n}\n\nconst UnsupportedTemplateAlias = () => {\n return new error.Abort(\n output.content`Only ${Object.keys(templateURLMap)\n .map((alias) => output.content`${output.token.yellow(alias)}`.value)\n .join(', ')} template aliases are supported`,\n )\n}\nexport default class Init extends Command {\n static flags = {\n ...cli.globalFlags,\n name: Flags.string({\n char: 'n',\n env: 'SHOPIFY_FLAG_NAME',\n hidden: false,\n }),\n path: Flags.string({\n char: 'p',\n env: 'SHOPIFY_FLAG_PATH',\n parse: (input, _) => Promise.resolve(path.resolve(input)),\n hidden: false,\n }),\n template: Flags.string({\n description: `The app template. Accepts one of the following:\n - <${Object.keys(templateURLMap).join('|')}>\n - Any GitHub repo with optional branch and subpath eg: https://github.com/Shopify/<repository>/[subpath]#[branch]`,\n env: 'SHOPIFY_FLAG_TEMPLATE',\n }),\n // eslint-disable-next-line @typescript-eslint/naming-convention\n 'dependency-manager': Flags.string({\n char: 'd',\n env: 'SHOPIFY_FLAG_DEPENDENCY_MANAGER',\n hidden: false,\n options: ['npm', 'yarn', 'pnpm'],\n }),\n local: Flags.boolean({\n char: 'l',\n env: 'SHOPIFY_FLAG_LOCAL',\n default: false,\n hidden: true,\n }),\n }\n\n async run(): Promise<void> {\n this.startEvent()\n const {flags} = await this.parse(Init)\n const directory = flags.path ? path.resolve(flags.path) : process.cwd()\n\n this.validateTemplateValue(flags.template)\n\n const promptAnswers = await initPrompt({\n name: flags.name,\n template: flags.template,\n })\n\n await initService({\n name: promptAnswers.name,\n dependencyManager: flags['dependency-manager'],\n template: promptAnswers.template,\n local: flags.local,\n directory,\n })\n await analytics.reportEvent()\n }\n\n async startEvent(): Promise<void> {\n const commandIndex = process.argv.indexOf('init')\n const args = process.argv.slice(commandIndex + 1).join(' ')\n analytics.start({command: 'create-app', args})\n }\n\n validateTemplateValue(template: string | undefined) {\n if (!template) {\n return\n }\n\n const url = this.parseURL(template)\n if (url && url.origin !== 'https://github.com') throw InvalidGithubRepository()\n if (!url && !Object.keys(templateURLMap).includes(template)) throw UnsupportedTemplateAlias()\n }\n\n parseURL(url: string): URL | undefined {\n try {\n return new URL(url)\n // eslint-disable-next-line no-catch-all/no-catch-all\n } catch (error) {\n return undefined\n }\n }\n}\n"]}
File without changes
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"","sourcesContent":[""]}
@@ -0,0 +1,2 @@
1
+ declare function runCreateAppCLI(): Promise<void>;
2
+ export default runCreateAppCLI;
package/dist/index.js CHANGED
@@ -1,26 +1,9 @@
1
- import { settings, run, flush } from '@oclif/core';
2
- import { output, environment, error } from '@shopify/cli-kit';
3
-
4
- function runCreateApp() {
5
- output.initiateLogging({ filename: "shopify.create-app.log" });
6
- const initIndex = process.argv.findIndex((arg) => arg.includes("init"));
7
- if (initIndex === -1) {
8
- const initIndex2 = process.argv.findIndex((arg) => arg.match(/bin(\/|\\)(create-app|dev|run)/)) + 1;
9
- process.argv.splice(initIndex2, 0, "init");
10
- }
11
- if (environment.local.isDebug()) {
12
- settings.debug = true;
13
- }
14
- run(void 0, import.meta.url).then(flush).catch((error$1) => {
15
- const kitMapper = error.mapper;
16
- const kitHandle = error.handler;
17
- return kitMapper(error$1).then((error2) => {
18
- return kitHandle(error2);
19
- }).then(() => {
20
- process.exit(1);
1
+ import { runCreateCLI } from '@shopify/cli-kit/node/cli';
2
+ async function runCreateAppCLI() {
3
+ await runCreateCLI({
4
+ moduleURL: import.meta.url,
5
+ logFilename: 'shopify.create-app.log',
21
6
  });
22
- });
23
7
  }
24
-
25
- export { runCreateApp as default };
26
- //# sourceMappingURL=index.js.map
8
+ export default runCreateAppCLI;
9
+ //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/index.ts"],"sourcesContent":["import {run, flush, settings} from '@oclif/core'\nimport {error as kitError, environment, output} from '@shopify/cli-kit'\n\nfunction runCreateApp() {\n output.initiateLogging({filename: 'shopify.create-app.log'})\n const initIndex = process.argv.findIndex((arg) => arg.includes('init'))\n if (initIndex === -1) {\n const initIndex = process.argv.findIndex((arg) => arg.match(/bin(\\/|\\\\)(create-app|dev|run)/)) + 1\n process.argv.splice(initIndex, 0, 'init')\n }\n\n if (environment.local.isDebug()) {\n settings.debug = true\n }\n\n // Start the CLI\n run(undefined, import.meta.url)\n .then(flush)\n .catch((error: Error): Promise<void | Error> => {\n const kitMapper = kitError.mapper\n const kitHandle = kitError.handler\n // eslint-disable-next-line promise/no-nesting\n return kitMapper(error)\n .then((error: Error) => {\n return kitHandle(error)\n })\n .then(() => {\n process.exit(1)\n })\n })\n}\n\nexport default runCreateApp\n"],"names":["error","kitError"],"mappings":";;;AAGA,SAAwB,YAAA,GAAA;AACtB,EAAA,MAAA,CAAO,eAAgB,CAAA,EAAC,QAAU,EAAA,wBAAA,EAAyB,CAAA,CAAA;AAC3D,EAAM,MAAA,SAAA,GAAY,QAAQ,IAAK,CAAA,SAAA,CAAU,CAAC,GAAQ,KAAA,GAAA,CAAI,QAAS,CAAA,MAAM,CAAC,CAAA,CAAA;AACtE,EAAA,IAAI,cAAc,CAAI,CAAA,EAAA;AACpB,IAAM,MAAA,UAAA,GAAY,OAAQ,CAAA,IAAA,CAAK,SAAU,CAAA,CAAC,QAAQ,GAAI,CAAA,KAAA,CAAM,gCAAgC,CAAC,CAAI,GAAA,CAAA,CAAA;AACjG,IAAA,OAAA,CAAQ,IAAK,CAAA,MAAA,CAAO,UAAW,EAAA,CAAA,EAAG,MAAM,CAAA,CAAA;AAAA,GAC1C;AAEA,EAAI,IAAA,WAAA,CAAY,KAAM,CAAA,OAAA,EAAW,EAAA;AAC/B,IAAA,QAAA,CAAS,KAAQ,GAAA,IAAA,CAAA;AAAA,GACnB;AAGA,EAAI,GAAA,CAAA,KAAA,CAAA,EAAW,YAAY,GAAG,CAAA,CAC3B,KAAK,KAAK,CAAA,CACV,KAAM,CAAA,CAACA,OAAwC,KAAA;AAC9C,IAAA,MAAM,YAAYC,KAAS,CAAA,MAAA,CAAA;AAC3B,IAAA,MAAM,YAAYA,KAAS,CAAA,OAAA,CAAA;AAE3B,IAAA,OAAO,SAAU,CAAAD,OAAK,CACnB,CAAA,IAAA,CAAK,CAAC,MAAiB,KAAA;AACtB,MAAA,OAAO,UAAU,MAAK,CAAA,CAAA;AAAA,KACvB,CACA,CAAA,IAAA,CAAK,MAAM;AACV,MAAA,OAAA,CAAQ,KAAK,CAAC,CAAA,CAAA;AAAA,KACf,CAAA,CAAA;AAAA,GACJ,CAAA,CAAA;AACL;;;;"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,YAAY,EAAC,MAAM,2BAA2B,CAAA;AAEtD,KAAK,UAAU,eAAe;IAC5B,MAAM,YAAY,CAAC;QACjB,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG;QAC1B,WAAW,EAAE,wBAAwB;KACtC,CAAC,CAAA;AACJ,CAAC;AAED,eAAe,eAAe,CAAA","sourcesContent":["import {runCreateCLI} from '@shopify/cli-kit/node/cli'\n\nasync function runCreateAppCLI() {\n await runCreateCLI({\n moduleURL: import.meta.url,\n logFilename: 'shopify.create-app.log',\n })\n}\n\nexport default runCreateAppCLI\n"]}
@@ -0,0 +1,16 @@
1
+ import { ui } from '@shopify/cli-kit';
2
+ interface InitOptions {
3
+ name?: string;
4
+ template?: string;
5
+ }
6
+ interface InitOutput {
7
+ name: string;
8
+ template: string;
9
+ }
10
+ export declare const templateURLMap: {
11
+ readonly node: "https://github.com/Shopify/shopify-app-template-node#cli_three";
12
+ readonly php: "https://github.com/Shopify/shopify-app-template-php#cli_three";
13
+ readonly ruby: "https://github.com/Shopify/shopify-app-template-ruby";
14
+ };
15
+ declare const init: (options: InitOptions, prompt?: <TName extends string & keyof TAnswers, TAnswers extends { [key in TName]: string; } = { [key_1 in TName]: string; }>(questions: readonly ui.Question<TName>[], debugForceInquirer?: boolean | undefined) => Promise<TAnswers>) => Promise<InitOutput>;
16
+ export default init;