@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 +38 -0
- package/dist/commands/init.d.ts +15 -0
- package/dist/commands/init.js +79 -337
- package/dist/commands/init.js.map +1 -1
- package/dist/constants.d.ts +0 -0
- package/dist/constants.js +2 -0
- package/dist/constants.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +7 -24
- package/dist/index.js.map +1 -1
- package/dist/prompts/init.d.ts +16 -0
- package/dist/prompts/init.js +52 -0
- package/dist/prompts/init.js.map +1 -0
- package/dist/services/init.d.ts +9 -0
- package/dist/services/init.js +146 -0
- package/dist/services/init.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/dist/utils/template/cleanup.d.ts +1 -0
- package/dist/utils/template/cleanup.js +18 -0
- package/dist/utils/template/cleanup.js.map +1 -0
- package/dist/utils/template/npm.d.ts +7 -0
- package/dist/utils/template/npm.js +59 -0
- package/dist/utils/template/npm.js.map +1 -0
- package/dist/utils/versions.d.ts +1 -0
- package/dist/utils/versions.js +18 -0
- package/dist/utils/versions.js.map +1 -0
- package/package.json +4 -5
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
|
+
}
|
package/dist/commands/init.js
CHANGED
|
@@ -1,348 +1,90 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
3
|
-
import {
|
|
4
|
-
|
|
5
|
-
const
|
|
6
|
-
|
|
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
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
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
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
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
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
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
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
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
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
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
|
-
|
|
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
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
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
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
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":";;;;AAcO,MAAM,cAAiB,GAAA;AAAA,EAC5B,IAAM,EAAA,gEAAA;AAAA,EACN,GAAK,EAAA,+DAAA;AAAA,EACL,IAAM,EAAA,sDAAA;AACR,CAAA,CAAA;AAEA,MAAMA,MAAO,GAAA,OAAO,OAAsB,EAAA,MAAA,GAAS,GAAG,MAAgC,KAAA;AACpF,EAAA,MAAM,QAAW,GAAA;AAAA,IACf,IAAA,EAAM,KAAM,CAAA,QAAA,CAAS,KAAK,CAAA;AAAA,IAC1B,UAAU,cAAe,CAAA,IAAA;AAAA,GAC3B,CAAA;AAEA,EAAA,MAAM,YAAgD,EAAC,CAAA;AACvD,EAAI,IAAA,CAAC,QAAQ,IAAM,EAAA;AACjB,IAAA,SAAA,CAAU,IAAK,CAAA;AAAA,MACb,IAAM,EAAA,OAAA;AAAA,MACN,IAAM,EAAA,MAAA;AAAA,MACN,OAAS,EAAA,gFAAA;AAAA,MACT,OAAS,EAAA,kBAAA;AAAA,MACT,SAAS,QAAS,CAAA,IAAA;AAAA,MAClB,QAAA,EAAU,CAAC,KAAU,KAAA;AACnB,QAAI,IAAA,KAAA,CAAM,WAAW,CAAG,EAAA;AACtB,UAAO,OAAA,yBAAA,CAAA;AAAA,SACT;AACA,QAAI,IAAA,KAAA,CAAM,SAAS,EAAI,EAAA;AACrB,UAAO,OAAA,0CAAA,CAAA;AAAA,SACT;AACA,QAAO,OAAA,IAAA,CAAA;AAAA,OACT;AAAA,KACD,CAAA,CAAA;AAAA,GACH;AAEA,EAAI,IAAA,CAAC,QAAQ,QAAY,IAAA,MAAA,CAAO,KAAK,cAAc,CAAA,CAAE,SAAS,CAAG,EAAA;AAC/D,IAAA,SAAA,CAAU,IAAK,CAAA;AAAA,MACb,IAAM,EAAA,QAAA;AAAA,MACN,IAAM,EAAA,UAAA;AAAA,MACN,OAAA,EAAS,MAAO,CAAA,IAAA,CAAK,cAAc,CAAA;AAAA,MACnC,OAAS,EAAA,uCAAA;AAAA,MACT,SAAS,QAAS,CAAA,QAAA;AAAA,KACnB,CAAA,CAAA;AAAA,GACH;AAEA,EAAM,MAAA,YAAA,GAA2B,MAAM,MAAA,CAAO,SAAS,CAAA,CAAA;AACvD,EAAA,MAAM,OAAU,GAAA;AAAA,IACd,GAAG,OAAA;AAAA,IACH,GAAG,YAAA;AAAA,GACL,CAAA;AAEA,EAAM,MAAA,WAAA,GAAc,eAAe,OAAQ,CAAA,QAAA,CAAA,CAAA;AAC3C,EAAA,OAAA,CAAQ,QAAW,GAAA,WAAA,IAAe,OAAQ,CAAA,QAAA,IAAY,QAAS,CAAA,QAAA,CAAA;AAE/D,EAAO,OAAA,OAAA,CAAA;AACT,CAAA;;;;;;AC7DA,eAAA,qBAAA,CAA4C,aAA8B,KAA0C,EAAA;AAClH,EAAY,WAAA,CAAA,YAAA,GAAe,WAAY,CAAA,YAAA,IAAgB,EAAC,CAAA;AACxD,EAAA,WAAA,CAAY,aAAa,cAAkB,CAAA,GAAAC,SAAA,CAAA;AAC3C,EAAA,WAAA,CAAY,aAAa,cAAkB,CAAA,GAAAC,OAAA,CAAA;AAE3C,EAAA,IAAI,KAAO,EAAA;AACT,IAAM,MAAA,OAAA,GAAU,QAAS,MAAM,IAAA,CAAK,OAAO,mBAAqB,EAAA,EAAC,IAAM,EAAA,WAAA,EAAY,CAAA,CAAA,CAAA,CAAA;AACnF,IAAM,MAAA,OAAA,GAAU,QAAS,MAAM,IAAA,CAAK,OAAO,cAAgB,EAAA,EAAC,IAAM,EAAA,WAAA,EAAY,CAAA,CAAA,CAAA,CAAA;AAC9E,IAAM,MAAA,UAAA,GAAa,QAAS,MAAM,IAAA,CAAK,OAAO,kBAAoB,EAAA,EAAC,IAAM,EAAA,WAAA,EAAY,CAAA,CAAA,CAAA,CAAA;AAGrF,IAAA,WAAA,CAAY,aAAa,cAAkB,CAAA,GAAA,OAAA,CAAA;AAE3C,IAAA,WAAA,CAAY,aAAa,cAAkB,CAAA,GAAA,OAAA,CAAA;AAE3C,IAAA,MAAM,mBAAsB,GAAA;AAAA,MAE1B,cAAgB,EAAA,OAAA;AAAA,MAEhB,cAAgB,EAAA,OAAA;AAAA,MAEhB,kBAAoB,EAAA,UAAA;AAAA,KACtB,CAAA;AAEA,IAAY,WAAA,CAAA,SAAA,GAAY,YAAY,SAChC,GAAA,EAAC,GAAG,WAAY,CAAA,SAAA,EAAW,GAAG,mBAAA,EAC9B,GAAA,mBAAA,CAAA;AAEJ,IAAY,WAAA,CAAA,WAAA,GAAc,YAAY,WAClC,GAAA,EAAC,GAAG,WAAY,CAAA,WAAA,EAAa,GAAG,mBAAA,EAChC,GAAA,mBAAA,CAAA;AAAA,GACN;AAEA,EAAO,OAAA,WAAA,CAAA;AACT,CAAA;AAE6C,eAAA,sBAAA,CAAA;AAAA,EAC3C,IAAA;AAAA,EACA,iBAAA;AAAA,EACA,oBAAA;AAAA,CAK0B,EAAA;AAC1B,EAAM,MAAA,gBAAA,GAAmB,MAAM,IAAA,CAAK,IAAK,CAAA,CAAC,KAAK,IAAK,CAAA,IAAA,EAAM,iBAAiB,CAAC,CAAC,CAAA,CAAA;AAC7E,EAAA,IAAI,gBAAmB,GAAA,CAAA,CAAA;AAEvB,EAAO,OAAA,gBAAA,CAAiB,GAAI,CAAA,CAAC,QAAa,KAAA;AACxC,IAAA,MAAM,UAAa,GAAA,QAAA,CAAS,OAAQ,CAAA,cAAA,EAAgB,EAAE,CAAA,CAAA;AACtD,IAAA,MAAM,SAAY,GAAA,UAAA,CAAW,OAAQ,CAAA,IAAA,EAAM,EAAE,CAAA,CAAA;AAE7C,IAAO,OAAA;AAAA,MACL,OAAO,CAA8B,2BAAA,EAAA,SAAA,CAAA,CAAA;AAAA,MACrC,IAAA,EAAM,OAAO,CAAA,EAAG,IAAS,KAAA;AACvB,QAAM,MAAA,MAAA,GAAS,IAAI,QAAS,CAAA;AAAA,UAC1B,KAAA,CAAM,KAAO,EAAA,EAAA,EAAG,IAAM,EAAA;AACpB,YAAK,IAAA,CAAA,MAAA,GAAS,MAAM,QAAS,EAAA,CAAA;AAC7B,YAAK,IAAA,EAAA,CAAA;AAAA,WACP;AAAA,SACD,CAAA,CAAA;AAED,QAAA,MAAM,UAAW,CAAA,OAAA,CAAQ,UAAY,EAAA,iBAAA,EAAmB,QAAQ,MAAM,CAAA,CAAA;AAEtE,QAAA,IAAA,CAAK,QAAQ,CAA6B,0BAAA,EAAA,SAAA,CAAA,CAAA,CAAA;AAE1C,QAAA,gBAAA,EAAA,CAAA;AAEA,QAAI,IAAA,gBAAA,KAAqB,iBAAiB,MAAQ,EAAA;AAChD,UAAqB,oBAAA,EAAA,CAAA;AAAA,SACvB;AAAA,OACF;AAAA,KACF,CAAA;AAAA,GACD,CAAA,CAAA;AACH;;AC7EA,eAAA,OAAA,CAAsC,kBAA4B,EAAA;AAChE,EAAM,MAAA,QAAA,GAAW,MAAM,IAAA,CAAK,IAC1B,CAAA;AAAA,IACE,IAAK,CAAA,IAAA,CAAK,kBAAoB,EAAA,IAAA,EAAM,MAAM,CAAA;AAAA,IAC1C,IAAK,CAAA,IAAA,CAAK,kBAAoB,EAAA,IAAA,EAAM,SAAS,CAAA;AAAA,IAC7C,IAAK,CAAA,IAAA,CAAK,kBAAoB,EAAA,IAAA,EAAM,aAAa,CAAA;AAAA,IACjD,IAAA,CAAK,IAAK,CAAA,kBAAA,EAAoB,UAAU,CAAA;AAAA,IACxC,IAAK,CAAA,IAAA,CAAK,kBAAoB,EAAA,IAAA,EAAM,mBAAmB,CAAA;AAAA,IACvD,IAAA,CAAK,IAAK,CAAA,kBAAA,EAAoB,mBAAmB,CAAA;AAAA,GAEnD,EAAA;AAAA,IACE,GAAK,EAAA,IAAA;AAAA,IACL,SAAW,EAAA,KAAA;AAAA,IACX,eAAiB,EAAA,KAAA;AAAA,IACjB,MAAA,EAAQ,CAAC,oBAAoB,CAAA;AAAA,GAEjC,CAAA,CAAA;AAEA,EAAA,OAAO,QAAQ,GAAI,CAAA,QAAA,CAAS,GAAI,CAAA,CAAC,UAAS,IAAK,CAAA,KAAA,CAAM,KAAM,EAAA,EAAC,OAAO,IAAI,EAAC,CAAC,CAAC,CAAA,CAAE,KAAK,MAAM;AAAA,GAAE,CAAA,CAAA;AAC3F;;ACKA,MAAM,oBAAA,GAAuB,CAAC,IAAiB,KAAA;AAC7C,EAAO,OAAA,IAAI,MAAM,KAAM,CAAA,CAAA;AAAA,4BAAiC,EAAA,IAAA,CAAA;AAAA,+BAAwD,CAAA,CAAA,CAAA;AAClH,CAAA,CAAA;AAEA,eAAA,IAAA,CAAoB,OAAsB,EAAA;AACxC,EAAM,MAAA,iBAAA,GAAkD,sBAAuB,CAAA,OAAA,CAAQ,iBAAiB,CAAA,CAAA;AACxG,EAAA,MAAM,cAAiB,GAAA,MAAA,CAAO,SAAU,CAAA,OAAA,CAAQ,IAAI,CAAA,CAAA;AACpD,EAAA,MAAM,eAAkB,GAAA,IAAA,CAAK,IAAK,CAAA,OAAA,CAAQ,WAAW,cAAc,CAAA,CAAA;AACnE,EAAA,MAAM,UAAa,GAAA,MAAA,CAAO,wBAAyB,CAAA,OAAA,CAAQ,QAAQ,CAAA,CAAA;AAEnE,EAAM,MAAA,6BAAA,CAA8B,iBAAiB,cAAc,CAAA,CAAA;AAEnE,EAAM,MAAA,IAAA,CAAK,oBAAqB,CAAA,OAAO,MAAW,KAAA;AAChD,IAAA,MAAM,mBAAsB,GAAA,IAAA,CAAK,IAAK,CAAA,MAAA,EAAQ,UAAU,CAAA,CAAA;AACxD,IAAM,MAAA,eAAA,GAAkB,WAAW,QAC/B,GAAA,IAAA,CAAK,KAAK,mBAAqB,EAAA,UAAA,CAAW,QAAQ,CAClD,GAAA,mBAAA,CAAA;AACJ,IAAA,MAAM,mBAAsB,GAAA,IAAA,CAAK,IAAK,CAAA,MAAA,EAAQ,KAAK,CAAA,CAAA;AACnD,IAAM,MAAA,OAAA,GAAU,WAAW,MAAS,GAAA,CAAA,EAAG,WAAW,WAAe,CAAA,CAAA,EAAA,UAAA,CAAW,WAAW,UAAW,CAAA,WAAA,CAAA;AAElG,IAAM,MAAA,IAAA,CAAK,MAAM,mBAAmB,CAAA,CAAA;AACpC,IAAA,IAAI,QAAmD,EAAC,CAAA;AAExD,IAAA,KAAA,GAAQ,MAAM,MAAO,CAAA;AAAA,MACnB;AAAA,QACE,KAAO,EAAA,mBAAA;AAAA,QACP,IAAA,EAAM,OAAO,CAAA,EAAG,IAAS,KAAA;AACvB,UAAA,IAAA,CAAK,KAAQ,GAAA,sBAAA,CAAA;AACb,UAAA,MAAM,IAAI,kBAAmB,CAAA;AAAA,YAC3B,OAAA;AAAA,YACA,WAAa,EAAA,mBAAA;AAAA,YACb,OAAS,EAAA,IAAA;AAAA,YACT,eAAA,EAAiB,CAAC,YAAyB,KAAA;AACzC,cAAA,MAAM,aAAa,CAAyB,sBAAA,EAAA,OAAA,CAAA;AAAA,EAAa,YAAA,CAAA,CAAA,CAAA;AACzD,cAAA,IAAA,CAAK,MAAS,GAAA,UAAA,CAAA;AAAA,aAChB;AAAA,WACD,CAAA,CAAA;AACD,UAAA,IAAA,CAAK,KAAQ,GAAA,qBAAA,CAAA;AAAA,SACf;AAAA,OACF;AAAA,MACA;AAAA,QACE,OAAO,CAAuB,oBAAA,EAAA,cAAA,CAAA,CAAA;AAAA,QAC9B,IAAA,EAAM,OAAO,CAAA,EAAG,UAAe,KAAA;AAC7B,UAAA,UAAA,CAAW,QAAQ,CAAyB,sBAAA,EAAA,cAAA,CAAA,CAAA,CAAA;AAC5C,UAAA,OAAO,WAAW,QAAS,CAAA;AAAA,YACzB;AAAA,cACE,KAAO,EAAA,cAAA;AAAA,cACP,IAAA,EAAM,OAAO,EAAA,EAAG,IAAS,KAAA;AACvB,gBAAA,IAAA,CAAK,KAAQ,GAAA,gBAAA,CAAA;AACb,gBAAM,MAAA,QAAA,CAAS,sBAAuB,CAAA,eAAA,EAAiB,mBAAqB,EAAA;AAAA,kBAE1E,kBAAoB,EAAA,iBAAA;AAAA,kBAEpB,UAAU,OAAQ,CAAA,IAAA;AAAA,iBACnB,CAAA,CAAA;AAED,gBAAA,IAAA,CAAK,KAAQ,GAAA,eAAA,CAAA;AAAA,eACf;AAAA,aACF;AAAA,YACA;AAAA,cACE,KAAO,EAAA,qBAAA;AAAA,cACP,IAAA,EAAM,OAAO,EAAA,EAAG,IAAS,KAAA;AACvB,gBAAA,IAAA,CAAK,KAAQ,GAAA,uBAAA,CAAA;AACb,gBAAA,MAAM,WAAc,GAAA,MAAM,GAAI,CAAA,eAAA,CAAgB,mBAAmB,CAAA,CAAA;AAEjE,gBAAM,MAAA,GAAA,CAAI,aAAc,CAAA,WAAA,EAAa,cAAc,CAAA,CAAA;AACnD,gBAAM,MAAA,qBAAA,CAAsB,WAAa,EAAA,OAAA,CAAQ,KAAK,CAAA,CAAA;AAEtD,gBAAM,MAAA,GAAA,CAAI,gBAAiB,CAAA,mBAAA,EAAqB,WAAW,CAAA,CAAA;AAE3D,gBAAA,IAAA,CAAK,KAAQ,GAAA,sBAAA,CAAA;AACb,gBAAA,UAAA,CAAW,KAAQ,GAAA,iBAAA,CAAA;AAAA,eACrB;AAAA,aACF;AAAA,WACD,CAAA,CAAA;AAAA,SACH;AAAA,OACF;AAAA,KACD,CAAA,CAAA;AAED,IAAA,IAAI,MAAM,WAAA,CAAY,KAAM,CAAA,SAAA,EAAa,EAAA;AACvC,MAAA,KAAA,CAAM,IAAK,CAAA;AAAA,QACT,KAAO,EAAA,wDAAA;AAAA,QACP,IAAA,EAAM,OAAO,CAAA,EAAG,IAAS,KAAA;AACvB,UAAA,IAAA,CAAK,KAAQ,GAAA,0DAAA,CAAA;AACb,UAAA,MAAM,SAAY,GAAA,IAAA,CAAK,IAAK,CAAA,mBAAA,EAAqB,QAAQ,CAAA,CAAA;AACzD,UAAA,MAAM,YAAe,GAAA,CAAA;AAAA,CAAA,CAAA;AACrB,UAAM,MAAA,IAAA,CAAK,MAAO,CAAA,SAAA,EAAW,YAAY,CAAA,CAAA;AACzC,UAAA,IAAA,CAAK,KAAQ,GAAA,sDAAA,CAAA;AAAA,SACf;AAAA,OACD,CAAA,CAAA;AAAA,KACH;AAEA,IAAA,KAAA,GAAQ,MAAM,MAAO,CAAA;AAAA,MACnB;AAAA,QACE,OAAO,CAA6B,0BAAA,EAAA,iBAAA,CAAA,CAAA;AAAA,QACpC,IAAA,EAAM,OAAO,CAAA,EAAG,UAAe,KAAA;AAC7B,UAAA,UAAA,CAAW,QAAQ,CAAgC,6BAAA,EAAA,iBAAA,CAAA,CAAA,CAAA;AACnD,UAAgC,SAAA,oBAAA,GAAA;AAC9B,YAAA,UAAA,CAAW,QAAQ,CAA+B,4BAAA,EAAA,iBAAA,CAAA,CAAA,CAAA;AAAA,WACpD;AAEA,UAAO,OAAA,UAAA,CAAW,QAChB,CAAA,MAAM,sBAAuB,CAAA;AAAA,YAC3B,IAAM,EAAA,mBAAA;AAAA,YACN,iBAAA;AAAA,YACA,oBAAA;AAAA,WACD,CAAA,EACD,EAAC,UAAA,EAAY,OACf,CAAA,CAAA;AAAA,SACF;AAAA,OACF;AAAA,MACA;AAAA,QACE,KAAO,EAAA,UAAA;AAAA,QACP,IAAA,EAAM,OAAO,CAAA,EAAG,IAAS,KAAA;AACvB,UAAA,IAAA,CAAK,KAAQ,GAAA,aAAA,CAAA;AACb,UAAA,MAAM,QAAQ,mBAAmB,CAAA,CAAA;AACjC,UAAA,IAAA,CAAK,KAAQ,GAAA,oBAAA,CAAA;AAAA,SACf;AAAA,OACF;AAAA,MACA;AAAA,QACE,KAAO,EAAA,kCAAA;AAAA,QACP,IAAA,EAAM,OAAO,CAAA,EAAG,IAAS,KAAA;AACvB,UAAM,MAAA,GAAA,CAAI,qBAAqB,mBAAmB,CAAA,CAAA;AAClD,UAAA,IAAA,CAAK,KAAQ,GAAA,4BAAA,CAAA;AAAA,SACf;AAAA,OACF;AAAA,KACD,CAAA,CAAA;AAED,IAAA,MAAM,IAAO,GAAA,IAAI,EAAG,CAAA,KAAA,CAAM,KAAO,EAAA;AAAA,MAC/B,UAAY,EAAA,KAAA;AAAA,MACZ,eAAA,EAAiB,EAAC,QAAA,EAAU,KAAK,EAAA;AAAA,MACjC,cAAA,EAAgB,WAAY,CAAA,KAAA,CAAM,UAAW,EAAA;AAAA,KAC9C,CAAA,CAAA;AACD,IAAA,MAAM,KAAK,GAAI,EAAA,CAAA;AAEf,IAAM,MAAA,IAAA,CAAK,IAAK,CAAA,mBAAA,EAAqB,eAAe,CAAA,CAAA;AAAA,GACrD,CAAA,CAAA;AAED,EAAA,MAAA,CAAO,KAAK,MAAO,CAAA,OAAA,CAAA;AAAA,EAAA,EACjB,cAAyD,CAAA,wCAAA,EAAA,MAAA,CAAO,KAAM,CAAA,mBAAA,CAAoB,MAAM,cAAgB,CAAA,CAAA,CAAA,CAAA;AAAA,+BAAA,EACnF,MAAO,CAAA,KAAA,CAAM,iBAAkB,CAAA,iBAAA,EAAmB,KAAK,CAAA,CAAA;AAAA,yBAAA,EAC7D,MAAO,CAAA,KAAA,CAAM,iBAAkB,CAAA,iBAAA,EAAmB,oBAAoB,CAAA,CAAA;AAAA,4DAAA,EACnC,MAAO,CAAA,KAAA,CAAM,IACvE,CAAA,aAAA,EACA,qBACF,CAAA,CAAA;AAAA;AAAA,yCAAA,EAEyC,MAAO,CAAA,KAAA,CAAM,iBAAkB,CAAA,iBAAA,EAAmB,eAAe,QAAQ,CAAA,CAAA;AAAA,EACjH,CAAA,CAAA,CAAA;AACH,CAAA;AAEA,SAAA,sBAAA,CAAgC,wBAA4E,EAAA;AAC1G,EAAA,IACE,wBACA,IAAA,UAAA,CAAW,iBAAkB,CAAA,QAAA,CAAS,wBAAwD,CAC9F,EAAA;AACA,IAAO,OAAA,wBAAA,CAAA;AAAA,GACT;AACA,EAAA,OAAO,WAAW,gCAAiC,EAAA,CAAA;AACrD,CAAA;AAEA,eAAA,6BAAA,CAA6C,WAAmB,IAA6B,EAAA;AAC3F,EAAA,MAAM,MAAS,GAAA,MAAM,IAAK,CAAA,MAAA,CAAO,SAAS,CAAA,CAAA;AAC1C,EAAI,IAAA,MAAA;AAAQ,IAAA,MAAM,qBAAqB,IAAI,CAAA,CAAA;AAC7C;;ACzLA,MAAM,0BAA0B,MAAM;AACpC,EAAO,OAAA,IAAI,KAAM,CAAA,KAAA,CACf,mHACF,CAAA,CAAA;AACF,CAAA,CAAA;AAEA,MAAM,2BAA2B,MAAM;AACrC,EAAO,OAAA,IAAI,MAAM,KACf,CAAA,MAAA,CAAO,eAAe,MAAO,CAAA,IAAA,CAAK,cAAc,CAAA,CAC7C,GAAI,CAAA,CAAC,UAAU,MAAO,CAAA,OAAA,CAAA,EAAU,MAAO,CAAA,KAAA,CAAM,MAAO,CAAA,KAAK,IAAI,KAAK,CAAA,CAClE,IAAK,CAAA,IAAI,CACd,CAAA,+BAAA,CAAA,CAAA,CAAA;AACF,CAAA,CAAA;AACA,MAAqB,KAAA,GAArB,cAAkC,OAAQ,CAAA;AAAA,EAmCxC,MAAM,GAAqB,GAAA;AACzB,IAAA,MAAM,EAAC,KAAA,EAAA,GAAS,MAAM,IAAA,CAAK,MAAM,KAAI,CAAA,CAAA;AACrC,IAAM,MAAA,SAAA,GAAY,MAAM,IAAO,GAAA,IAAA,CAAK,QAAQ,KAAM,CAAA,IAAI,CAAI,GAAA,OAAA,CAAQ,GAAI,EAAA,CAAA;AAEtE,IAAK,IAAA,CAAA,qBAAA,CAAsB,MAAM,QAAQ,CAAA,CAAA;AAEzC,IAAM,MAAA,aAAA,GAAgB,MAAMC,MAAW,CAAA;AAAA,MACrC,MAAM,KAAM,CAAA,IAAA;AAAA,MACZ,UAAU,KAAM,CAAA,QAAA;AAAA,KACjB,CAAA,CAAA;AAED,IAAA,MAAMC,IAAY,CAAA;AAAA,MAChB,MAAM,aAAc,CAAA,IAAA;AAAA,MACpB,mBAAmB,KAAM,CAAA,oBAAA,CAAA;AAAA,MACzB,UAAU,aAAc,CAAA,QAAA;AAAA,MACxB,OAAO,KAAM,CAAA,KAAA;AAAA,MACb,SAAA;AAAA,KACD,CAAA,CAAA;AACD,IAAA,MAAM,KAAK,WAAY,EAAA,CAAA;AAAA,GACzB;AAAA,EAEA,MAAM,WAA6B,GAAA;AACjC,IAAA,MAAM,YAAe,GAAA,OAAA,CAAQ,IAAK,CAAA,OAAA,CAAQ,MAAM,CAAA,CAAA;AAChD,IAAA,MAAM,IAAO,GAAA,OAAA,CAAQ,IAAK,CAAA,KAAA,CAAM,eAAe,CAAC,CAAA,CAAA;AAChD,IAAM,MAAA,SAAA,CAAU,WAAY,CAAA,YAAA,EAAc,IAAI,CAAA,CAAA;AAAA,GAChD;AAAA,EAEA,sBAAsB,QAA8B,EAAA;AAClD,IAAA,IAAI,CAAC,QAAU,EAAA;AACb,MAAA,OAAA;AAAA,KACF;AAEA,IAAM,MAAA,GAAA,GAAM,IAAK,CAAA,QAAA,CAAS,QAAQ,CAAA,CAAA;AAClC,IAAI,IAAA,GAAA,IAAO,IAAI,MAAW,KAAA,oBAAA;AAAsB,MAAA,MAAM,uBAAwB,EAAA,CAAA;AAC9E,IAAI,IAAA,CAAC,OAAO,CAAC,MAAA,CAAO,KAAK,cAAc,CAAA,CAAE,SAAS,QAAQ,CAAA;AAAG,MAAA,MAAM,wBAAyB,EAAA,CAAA;AAAA,GAC9F;AAAA,EAEA,SAAS,GAA8B,EAAA;AACrC,IAAI,IAAA;AACF,MAAO,OAAA,IAAI,IAAI,GAAG,CAAA,CAAA;AAAA,aAEX,MAAP,EAAA;AACA,MAAO,OAAA,KAAA,CAAA,CAAA;AAAA,KACT;AAAA,GACF;AACF,CAAA,CAAA;AAhFA,IAAqB,IAArB,GAAA,MAAA;AAAqB,KACZ,KAAQ,GAAA;AAAA,EACb,GAAG,GAAI,CAAA,WAAA;AAAA,EACP,IAAA,EAAM,MAAM,MAAO,CAAA;AAAA,IACjB,IAAM,EAAA,GAAA;AAAA,IACN,GAAK,EAAA,mBAAA;AAAA,IACL,MAAQ,EAAA,KAAA;AAAA,GACT,CAAA;AAAA,EACD,IAAA,EAAM,MAAM,MAAO,CAAA;AAAA,IACjB,IAAM,EAAA,GAAA;AAAA,IACN,GAAK,EAAA,mBAAA;AAAA,IACL,KAAA,EAAO,CAAC,KAAO,EAAA,CAAA,KAAM,QAAQ,OAAQ,CAAA,IAAA,CAAK,OAAQ,CAAA,KAAK,CAAC,CAAA;AAAA,IACxD,MAAQ,EAAA,KAAA;AAAA,GACT,CAAA;AAAA,EACD,QAAA,EAAU,MAAM,MAAO,CAAA;AAAA,IACrB,WAAa,EAAA,CAAA;AAAA,UAAA,EACP,MAAO,CAAA,IAAA,CAAK,cAAc,CAAA,CAAE,KAAK,GAAG,CAAA,CAAA;AAAA,wHAAA,CAAA;AAAA,IAE1C,GAAK,EAAA,uBAAA;AAAA,GACN,CAAA;AAAA,EAED,oBAAA,EAAsB,MAAM,MAAO,CAAA;AAAA,IACjC,IAAM,EAAA,GAAA;AAAA,IACN,GAAK,EAAA,iCAAA;AAAA,IACL,MAAQ,EAAA,KAAA;AAAA,IACR,OAAS,EAAA,CAAC,KAAO,EAAA,MAAA,EAAQ,MAAM,CAAA;AAAA,GAChC,CAAA;AAAA,EACD,KAAA,EAAO,MAAM,OAAQ,CAAA;AAAA,IACnB,IAAM,EAAA,GAAA;AAAA,IACN,GAAK,EAAA,oBAAA;AAAA,IACL,OAAS,EAAA,KAAA;AAAA,IACT,MAAQ,EAAA,IAAA;AAAA,GACT,CAAA;AACH,CAAA;;;;"}
|
|
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 @@
|
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"","sourcesContent":[""]}
|
package/dist/index.d.ts
ADDED
package/dist/index.js
CHANGED
|
@@ -1,26 +1,9 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
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
|
-
|
|
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"],"
|
|
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;
|