@shopify/create-hydrogen 3.4.0 → 3.6.1
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 +23 -0
- package/dist/commands/init.d.ts +1 -0
- package/dist/commands/init.js +11 -3
- package/dist/commands/init.js.map +1 -1
- package/dist/prompts/init.d.ts +1 -0
- package/dist/prompts/init.js +107 -51
- package/dist/prompts/init.js.map +1 -1
- package/dist/services/init.js +0 -8
- package/dist/services/init.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +4 -4
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,28 @@
|
|
|
1
1
|
# @shopify/create-hydrogen
|
|
2
2
|
|
|
3
|
+
## 3.6.1
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- ff382971: Separate create-hydrogen template question into template and language questions.
|
|
8
|
+
- @shopify/cli-kit@3.6.1
|
|
9
|
+
|
|
10
|
+
## 3.6.0
|
|
11
|
+
|
|
12
|
+
### Patch Changes
|
|
13
|
+
|
|
14
|
+
- 6f6dc914: Fix script execution for Windows dev enviroments
|
|
15
|
+
- Updated dependencies [073e514c]
|
|
16
|
+
- Updated dependencies [d9351df4]
|
|
17
|
+
- @shopify/cli-kit@3.6.0
|
|
18
|
+
|
|
19
|
+
## 3.5.0
|
|
20
|
+
|
|
21
|
+
### Patch Changes
|
|
22
|
+
|
|
23
|
+
- Updated dependencies [dabc4bab]
|
|
24
|
+
- @shopify/cli-kit@3.5.0
|
|
25
|
+
|
|
3
26
|
## 3.4.0
|
|
4
27
|
|
|
5
28
|
### Patch Changes
|
package/dist/commands/init.d.ts
CHANGED
|
@@ -4,6 +4,7 @@ export default class Init extends Command {
|
|
|
4
4
|
static flags: {
|
|
5
5
|
name: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string | undefined>;
|
|
6
6
|
template: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string | undefined>;
|
|
7
|
+
ts: import("@oclif/core/lib/interfaces/parser.js").BooleanFlag<boolean>;
|
|
7
8
|
path: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string | undefined>;
|
|
8
9
|
'package-manager': import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string | undefined>;
|
|
9
10
|
'shopify-cli-version': import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string | undefined>;
|
package/dist/commands/init.js
CHANGED
|
@@ -10,6 +10,7 @@ export default class Init extends Command {
|
|
|
10
10
|
const promptAnswers = await initPrompt({
|
|
11
11
|
name: flags.name,
|
|
12
12
|
template: flags.template,
|
|
13
|
+
language: flags.ts ? 'ts' : undefined,
|
|
13
14
|
});
|
|
14
15
|
await initService({
|
|
15
16
|
name: promptAnswers.name,
|
|
@@ -26,36 +27,43 @@ Init.aliases = ['create-hydrogen'];
|
|
|
26
27
|
Init.flags = {
|
|
27
28
|
...cli.globalFlags,
|
|
28
29
|
name: Flags.string({
|
|
30
|
+
description: 'The name of the Hydrogen app.',
|
|
29
31
|
char: 'n',
|
|
30
32
|
env: 'SHOPIFY_FLAG_NAME',
|
|
31
33
|
hidden: false,
|
|
32
34
|
}),
|
|
33
35
|
template: Flags.string({
|
|
36
|
+
description: 'The template to use. Can either be a Shopify template name (hello-world or demo-store) or a custom URL to any template.',
|
|
34
37
|
char: 't',
|
|
35
38
|
env: 'SHOPIFY_FLAG_TEMPLATE',
|
|
36
39
|
hidden: false,
|
|
37
40
|
}),
|
|
41
|
+
ts: Flags.boolean({
|
|
42
|
+
description: 'Set the language of the template to Typescript instead of Javascript.',
|
|
43
|
+
env: 'SHOPIFY_FLAG_LANGUAGE',
|
|
44
|
+
hidden: false,
|
|
45
|
+
}),
|
|
38
46
|
path: Flags.string({
|
|
47
|
+
description: 'The path to the directory where the Hydrogen app will be created.',
|
|
39
48
|
char: 'p',
|
|
40
49
|
env: 'SHOPIFY_FLAG_PATH',
|
|
41
50
|
parse: (input, _) => Promise.resolve(path.resolve(input)),
|
|
42
51
|
hidden: false,
|
|
43
52
|
}),
|
|
44
|
-
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
45
53
|
'package-manager': Flags.string({
|
|
46
54
|
char: 'd',
|
|
47
55
|
env: 'SHOPIFY_FLAG_PACKAGE_MANAGER',
|
|
48
56
|
hidden: false,
|
|
49
57
|
options: ['npm', 'yarn', 'pnpm'],
|
|
50
58
|
}),
|
|
51
|
-
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
52
59
|
'shopify-cli-version': Flags.string({
|
|
60
|
+
description: 'The version of the Shopify CLI to use.',
|
|
53
61
|
char: 's',
|
|
54
62
|
env: 'SHOPIFY_FLAG_SHOPIFY_CLI_VERSION',
|
|
55
63
|
hidden: false,
|
|
56
64
|
}),
|
|
57
|
-
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
58
65
|
'hydrogen-version': Flags.string({
|
|
66
|
+
description: 'The version of Hydrogen to use.',
|
|
59
67
|
char: 'h',
|
|
60
68
|
env: 'SHOPIFY_FLAG_HYDROGEN_VERSION',
|
|
61
69
|
hidden: false,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,UAAU,MAAM,oBAAoB,CAAA;AAC3C,OAAO,WAAW,MAAM,qBAAqB,CAAA;AAC7C,OAAO,EAAC,IAAI,EAAE,GAAG,EAAC,MAAM,kBAAkB,CAAA;AAC1C,OAAO,EAAC,KAAK,EAAC,MAAM,aAAa,CAAA;AACjC,OAAO,OAAO,MAAM,oCAAoC,CAAA;AAExD,MAAM,CAAC,OAAO,OAAO,IAAK,SAAQ,OAAO;
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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","sourcesContent":["import initPrompt from '../prompts/init.js'\nimport initService from '../services/init.js'\nimport {path, cli} from '@shopify/cli-kit'\nimport {Flags} from '@oclif/core'\nimport Command from '@shopify/cli-kit/node/base-command'\n\nexport default class Init extends Command {\n static aliases = ['create-hydrogen']\n\n static flags = {\n ...cli.globalFlags,\n name: Flags.string({\n description: 'The name of the Hydrogen app.',\n char: 'n',\n env: 'SHOPIFY_FLAG_NAME',\n hidden: false,\n }),\n template: Flags.string({\n description:\n 'The template to use. Can either be a Shopify template name (hello-world or demo-store) or a custom URL to any template.',\n char: 't',\n env: 'SHOPIFY_FLAG_TEMPLATE',\n hidden: false,\n }),\n ts: Flags.boolean({\n description: 'Set the language of the template to Typescript instead of Javascript.',\n env: 'SHOPIFY_FLAG_LANGUAGE',\n hidden: false,\n }),\n path: Flags.string({\n description: 'The path to the directory where the Hydrogen app will be created.',\n char: 'p',\n env: 'SHOPIFY_FLAG_PATH',\n parse: (input, _) => Promise.resolve(path.resolve(input)),\n hidden: false,\n }),\n 'package-manager': Flags.string({\n char: 'd',\n env: 'SHOPIFY_FLAG_PACKAGE_MANAGER',\n hidden: false,\n options: ['npm', 'yarn', 'pnpm'],\n }),\n 'shopify-cli-version': Flags.string({\n description: 'The version of the Shopify CLI to use.',\n char: 's',\n env: 'SHOPIFY_FLAG_SHOPIFY_CLI_VERSION',\n hidden: false,\n }),\n 'hydrogen-version': Flags.string({\n description: 'The version of Hydrogen to use.',\n char: 'h',\n env: 'SHOPIFY_FLAG_HYDROGEN_VERSION',\n hidden: false,\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 const promptAnswers = await initPrompt({\n name: flags.name,\n template: flags.template,\n language: flags.ts ? 'ts' : undefined,\n })\n await initService({\n name: promptAnswers.name,\n template: promptAnswers.template,\n packageManager: flags['package-manager'],\n shopifyCliVersion: flags['shopify-cli-version'],\n hydrogenVersion: flags['hydrogen-version'],\n directory,\n local: flags.local,\n })\n }\n}\n"]}
|
package/dist/prompts/init.d.ts
CHANGED
|
@@ -2,6 +2,7 @@ import { ui } from '@shopify/cli-kit';
|
|
|
2
2
|
interface InitOptions {
|
|
3
3
|
name?: string;
|
|
4
4
|
template?: string;
|
|
5
|
+
language?: string;
|
|
5
6
|
}
|
|
6
7
|
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<Required<InitOptions>>;
|
|
7
8
|
export default init;
|
package/dist/prompts/init.js
CHANGED
|
@@ -1,71 +1,127 @@
|
|
|
1
|
-
import { ui, github, string } from '@shopify/cli-kit';
|
|
1
|
+
import { ui, github, string, output } from '@shopify/cli-kit';
|
|
2
2
|
const TEMPLATE_BASE = 'https://github.com/Shopify/hydrogen/templates/';
|
|
3
3
|
const BRANCH = `dist`;
|
|
4
|
-
const
|
|
5
|
-
|
|
6
|
-
'
|
|
7
|
-
description: 'Demo Store',
|
|
8
|
-
},
|
|
9
|
-
'demo-store-ts': {
|
|
10
|
-
description: 'Demo Store (TypeScript)',
|
|
11
|
-
},
|
|
12
|
-
'hello-world-js': {
|
|
13
|
-
description: 'Hello World',
|
|
14
|
-
},
|
|
15
|
-
'hello-world-ts': {
|
|
16
|
-
description: 'Hello World (TypeScript)',
|
|
17
|
-
},
|
|
18
|
-
/* eslint-enable @typescript-eslint/naming-convention */
|
|
4
|
+
const TEMPLATE_NAME_DATA = {
|
|
5
|
+
'demo-store': { name: 'Demo Store' },
|
|
6
|
+
'hello-world': { name: 'Hello World' },
|
|
19
7
|
};
|
|
20
|
-
const
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
function toHydrogenTemplateUrl(key) {
|
|
27
|
-
return `${TEMPLATE_BASE}${key}#${BRANCH}`;
|
|
28
|
-
}
|
|
8
|
+
const LANGUAGE_NAME_DATA = {
|
|
9
|
+
js: { name: 'JavaScript' },
|
|
10
|
+
ts: { name: 'TypeScript' },
|
|
11
|
+
};
|
|
12
|
+
const TEMPLATE_NAMES = Object.keys(TEMPLATE_NAME_DATA);
|
|
13
|
+
const LANGUAGE_NAMES = Object.keys(LANGUAGE_NAME_DATA);
|
|
29
14
|
const init = async (options, prompt = ui.prompt) => {
|
|
30
15
|
const questions = [];
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
message: 'Name your new Hydrogen storefront',
|
|
36
|
-
default: 'hydrogen-app',
|
|
37
|
-
});
|
|
38
|
-
}
|
|
39
|
-
let explicitTemplate = options.template;
|
|
16
|
+
const explicitTemplate = options.template;
|
|
17
|
+
let isAShopifyTemplateName = false;
|
|
18
|
+
// If the template is passed through the CLI, then it can either be a Shopify template name (hello-world or demo-store)
|
|
19
|
+
// or a custom URL to any template.
|
|
40
20
|
if (explicitTemplate) {
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
explicitTemplate = url;
|
|
45
|
-
}
|
|
46
|
-
const parsedTemplate = github.parseRepoUrl(explicitTemplate);
|
|
47
|
-
const missingBranch = !parsedTemplate.ref;
|
|
48
|
-
const looksLikeHydrogenTemplate = parsedTemplate.name === 'hydrogen' &&
|
|
49
|
-
parsedTemplate.user === 'Shopify' &&
|
|
50
|
-
parsedTemplate.subDirectory.startsWith('templates/');
|
|
51
|
-
explicitTemplate =
|
|
52
|
-
looksLikeHydrogenTemplate && missingBranch ? `${parsedTemplate.full}#${BRANCH}` : parsedTemplate.full;
|
|
21
|
+
warnIfDeprecatedTemplateNameFormat(explicitTemplate);
|
|
22
|
+
const hydrogenTemplate = checkIfShopifyTemplateName(explicitTemplate, 'js') || checkIfShopifyTemplateName(explicitTemplate, 'ts');
|
|
23
|
+
isAShopifyTemplateName = Boolean(hydrogenTemplate);
|
|
53
24
|
}
|
|
54
25
|
else {
|
|
26
|
+
isAShopifyTemplateName = true;
|
|
55
27
|
questions.push({
|
|
56
28
|
type: 'select',
|
|
57
29
|
name: 'template',
|
|
58
30
|
message: 'Choose a template',
|
|
59
|
-
choices: Object.keys(
|
|
60
|
-
name:
|
|
31
|
+
choices: Object.keys(TEMPLATE_NAME_DATA).map((value) => ({
|
|
32
|
+
name: TEMPLATE_NAME_DATA[value].name,
|
|
61
33
|
value,
|
|
62
34
|
})),
|
|
63
35
|
default: TEMPLATE_NAMES[0],
|
|
64
|
-
result: toHydrogenTemplateUrl,
|
|
65
36
|
});
|
|
66
37
|
}
|
|
67
|
-
|
|
68
|
-
|
|
38
|
+
// Prompt the user for the template language if it isn't provided and
|
|
39
|
+
// the given template is a URL.
|
|
40
|
+
if (!options.language && isAShopifyTemplateName) {
|
|
41
|
+
questions.push({
|
|
42
|
+
type: 'select',
|
|
43
|
+
name: 'language',
|
|
44
|
+
message: 'Choose a language',
|
|
45
|
+
choices: Object.keys(LANGUAGE_NAME_DATA).map((value) => {
|
|
46
|
+
const { name } = LANGUAGE_NAME_DATA[value];
|
|
47
|
+
return { name, value };
|
|
48
|
+
}),
|
|
49
|
+
default: LANGUAGE_NAMES[0],
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
if (!options.name) {
|
|
53
|
+
questions.push({
|
|
54
|
+
type: 'input',
|
|
55
|
+
name: 'name',
|
|
56
|
+
message: 'Name your new Hydrogen storefront',
|
|
57
|
+
default: 'hydrogen-app',
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
const promptResults = await prompt(questions);
|
|
61
|
+
const name = options.name ?? promptResults.name;
|
|
62
|
+
const templateName = options.template ?? promptResults.template;
|
|
63
|
+
const language = options.language ?? promptResults.language;
|
|
64
|
+
let template = templateName;
|
|
65
|
+
// Get final template URLS
|
|
66
|
+
const hydrogenTemplate = checkIfShopifyTemplateName(templateName, language);
|
|
67
|
+
if (hydrogenTemplate)
|
|
68
|
+
template = convertTemplateNameToUrl(hydrogenTemplate);
|
|
69
|
+
// Else it's a user-provided URL.
|
|
70
|
+
template = parseTemplateUrl(template);
|
|
71
|
+
return { name, template, language };
|
|
72
|
+
};
|
|
73
|
+
/**
|
|
74
|
+
* Checks if the provided name is a Shopify template, or if it's a custom URL to a user-provided template.
|
|
75
|
+
*
|
|
76
|
+
* @param templateName: The name of the template to check.
|
|
77
|
+
* @param language: The language of the template, only provided if the template is a Shopify template
|
|
78
|
+
* @returns: The fully-formed template name (with the language suffixed) if it's a Shopify template, false otherwise.
|
|
79
|
+
*/
|
|
80
|
+
const checkIfShopifyTemplateName = (templateName, language) => {
|
|
81
|
+
if (!templateName)
|
|
82
|
+
return false;
|
|
83
|
+
const normalized = string.hyphenize(templateName).toLocaleLowerCase();
|
|
84
|
+
const endsWithLang = normalized.endsWith('-ts') || normalized.endsWith('-js');
|
|
85
|
+
const withExtension = endsWithLang ? normalized : `${normalized}-${language}`;
|
|
86
|
+
return TEMPLATE_NAMES.includes(normalized) ? withExtension : false;
|
|
87
|
+
};
|
|
88
|
+
/**
|
|
89
|
+
* Lets the user know if they're trying to use a template in the old naming format.
|
|
90
|
+
*
|
|
91
|
+
* @param templateName: The name of the template to check.
|
|
92
|
+
* @returns: True if the template name is in the old format, false otherwise.
|
|
93
|
+
*/
|
|
94
|
+
const warnIfDeprecatedTemplateNameFormat = (templateName) => {
|
|
95
|
+
const normalized = string.hyphenize(templateName).toLocaleLowerCase();
|
|
96
|
+
const endsWithLang = normalized.endsWith('-ts') || normalized.endsWith('-js');
|
|
97
|
+
if (endsWithLang) {
|
|
98
|
+
const template = normalized.slice(0, -3);
|
|
99
|
+
const lang = normalized.slice(-2);
|
|
100
|
+
const ts = lang === 'ts';
|
|
101
|
+
output.warn(`The ${normalized} template has been deprecated. Use --template ${template} ${ts ? `--${lang} ` : ''}to install the ${ts ? 'TypeScript' : 'JavaScript'} template.`);
|
|
102
|
+
}
|
|
103
|
+
};
|
|
104
|
+
/**
|
|
105
|
+
* Takes the name of a Shopify template (for example, demo-store or hello-world) and converts it to a URL.
|
|
106
|
+
*
|
|
107
|
+
* @param templateName: The given name of a Shopify template.
|
|
108
|
+
* @returns: The URL of the template.
|
|
109
|
+
*/
|
|
110
|
+
const convertTemplateNameToUrl = (templateName) => `${TEMPLATE_BASE}${templateName}#${BRANCH}`;
|
|
111
|
+
/**
|
|
112
|
+
* Checks to see if the provided URL can be parsed by Github. For Shopify-specific templates, adds any
|
|
113
|
+
* missing information (for example, a missing branch) to the repo information in the URL.
|
|
114
|
+
*
|
|
115
|
+
* @param templateUrl: The URL of the template to parse.
|
|
116
|
+
* @returns: The parsed URL.
|
|
117
|
+
*/
|
|
118
|
+
const parseTemplateUrl = (templateUrl) => {
|
|
119
|
+
const parsedTemplate = github.parseRepoUrl(templateUrl);
|
|
120
|
+
const missingBranch = !parsedTemplate.ref;
|
|
121
|
+
const looksLikeHydrogenTemplate = parsedTemplate.name === 'hydrogen' &&
|
|
122
|
+
parsedTemplate.user === 'Shopify' &&
|
|
123
|
+
parsedTemplate.subDirectory.startsWith('templates/');
|
|
124
|
+
return looksLikeHydrogenTemplate && missingBranch ? `${parsedTemplate.full}#${BRANCH}` : parsedTemplate.full;
|
|
69
125
|
};
|
|
70
126
|
export default init;
|
|
71
127
|
//# sourceMappingURL=init.js.map
|
package/dist/prompts/init.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/prompts/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAC,MAAM,kBAAkB,CAAA;
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/prompts/init.ts"],"names":[],"mappings":"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","sourcesContent":["import {ui, github, string, output} from '@shopify/cli-kit'\n\nconst TEMPLATE_BASE = 'https://github.com/Shopify/hydrogen/templates/'\nconst BRANCH = `dist`\n\nconst TEMPLATE_NAME_DATA = {\n 'demo-store': {name: 'Demo Store'},\n 'hello-world': {name: 'Hello World'},\n}\n\nconst LANGUAGE_NAME_DATA = {\n js: {name: 'JavaScript'},\n ts: {name: 'TypeScript'},\n}\n\nconst TEMPLATE_NAMES = Object.keys(TEMPLATE_NAME_DATA)\nconst LANGUAGE_NAMES = Object.keys(LANGUAGE_NAME_DATA)\n\ninterface InitOptions {\n name?: string\n template?: string\n language?: string\n}\n\nconst init = async (options: InitOptions, prompt = ui.prompt): Promise<Required<InitOptions>> => {\n const questions: ui.Question[] = []\n const explicitTemplate = options.template\n let isAShopifyTemplateName = false\n // If the template is passed through the CLI, then it can either be a Shopify template name (hello-world or demo-store)\n // or a custom URL to any template.\n if (explicitTemplate) {\n warnIfDeprecatedTemplateNameFormat(explicitTemplate)\n const hydrogenTemplate =\n checkIfShopifyTemplateName(explicitTemplate, 'js') || checkIfShopifyTemplateName(explicitTemplate, 'ts')\n isAShopifyTemplateName = Boolean(hydrogenTemplate)\n } else {\n isAShopifyTemplateName = true\n questions.push({\n type: 'select',\n name: 'template',\n message: 'Choose a template',\n choices: Object.keys(TEMPLATE_NAME_DATA).map((value) => ({\n name: TEMPLATE_NAME_DATA[value as keyof typeof TEMPLATE_NAME_DATA].name,\n value,\n })),\n default: TEMPLATE_NAMES[0],\n })\n }\n\n // Prompt the user for the template language if it isn't provided and\n // the given template is a URL.\n if (!options.language && isAShopifyTemplateName) {\n questions.push({\n type: 'select',\n name: 'language',\n message: 'Choose a language',\n choices: Object.keys(LANGUAGE_NAME_DATA).map((value) => {\n const {name} = LANGUAGE_NAME_DATA[value as keyof typeof LANGUAGE_NAME_DATA]\n return {name, value}\n }),\n default: LANGUAGE_NAMES[0],\n })\n }\n\n if (!options.name) {\n questions.push({\n type: 'input',\n name: 'name',\n message: 'Name your new Hydrogen storefront',\n default: 'hydrogen-app',\n })\n }\n\n const promptResults = await prompt(questions)\n const name = options.name ?? promptResults.name\n const templateName = options.template ?? promptResults.template\n const language = options.language ?? promptResults.language\n let template = templateName\n\n // Get final template URLS\n const hydrogenTemplate = checkIfShopifyTemplateName(templateName, language)\n if (hydrogenTemplate) template = convertTemplateNameToUrl(hydrogenTemplate as string)\n\n // Else it's a user-provided URL.\n template = parseTemplateUrl(template)\n return {name, template, language} as Required<InitOptions>\n}\n\n/**\n * Checks if the provided name is a Shopify template, or if it's a custom URL to a user-provided template.\n *\n * @param templateName: The name of the template to check.\n * @param language: The language of the template, only provided if the template is a Shopify template\n * @returns: The fully-formed template name (with the language suffixed) if it's a Shopify template, false otherwise.\n */\nconst checkIfShopifyTemplateName = (templateName: string, language: string): string | boolean => {\n if (!templateName) return false\n\n const normalized = string.hyphenize(templateName).toLocaleLowerCase()\n const endsWithLang = normalized.endsWith('-ts') || normalized.endsWith('-js')\n const withExtension = endsWithLang ? normalized : `${normalized}-${language}`\n return TEMPLATE_NAMES.includes(normalized) ? withExtension : false\n}\n\n/**\n * Lets the user know if they're trying to use a template in the old naming format.\n *\n * @param templateName: The name of the template to check.\n * @returns: True if the template name is in the old format, false otherwise.\n */\nconst warnIfDeprecatedTemplateNameFormat = (templateName: string): void => {\n const normalized = string.hyphenize(templateName).toLocaleLowerCase()\n const endsWithLang = normalized.endsWith('-ts') || normalized.endsWith('-js')\n if (endsWithLang) {\n const template = normalized.slice(0, -3)\n const lang = normalized.slice(-2)\n const ts = lang === 'ts'\n output.warn(\n `The ${normalized} template has been deprecated. Use --template ${template} ${\n ts ? `--${lang} ` : ''\n }to install the ${ts ? 'TypeScript' : 'JavaScript'} template.`,\n )\n }\n}\n\n/**\n * Takes the name of a Shopify template (for example, demo-store or hello-world) and converts it to a URL.\n *\n * @param templateName: The given name of a Shopify template.\n * @returns: The URL of the template.\n */\nconst convertTemplateNameToUrl = (templateName: string): string => `${TEMPLATE_BASE}${templateName}#${BRANCH}`\n\n/**\n * Checks to see if the provided URL can be parsed by Github. For Shopify-specific templates, adds any\n * missing information (for example, a missing branch) to the repo information in the URL.\n *\n * @param templateUrl: The URL of the template to parse.\n * @returns: The parsed URL.\n */\nconst parseTemplateUrl = (templateUrl: string): string => {\n const parsedTemplate = github.parseRepoUrl(templateUrl)\n const missingBranch = !parsedTemplate.ref\n const looksLikeHydrogenTemplate =\n parsedTemplate.name === 'hydrogen' &&\n parsedTemplate.user === 'Shopify' &&\n parsedTemplate.subDirectory.startsWith('templates/')\n\n return looksLikeHydrogenTemplate && missingBranch ? `${parsedTemplate.full}#${BRANCH}` : parsedTemplate.full\n}\n\nexport default init\n"]}
|
package/dist/services/init.js
CHANGED
|
@@ -52,12 +52,9 @@ async function init(options) {
|
|
|
52
52
|
task: async (_, task) => {
|
|
53
53
|
const templateData = {
|
|
54
54
|
name: hyphenizedName,
|
|
55
|
-
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
56
55
|
shopify_cli_version: cliPackageVersion,
|
|
57
|
-
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
58
56
|
hydrogen_version: hydrogenPackageVersion,
|
|
59
57
|
author: user,
|
|
60
|
-
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
61
58
|
dependency_manager: options.packageManager,
|
|
62
59
|
};
|
|
63
60
|
await template.recursiveDirectoryCopy(templatePath, templateScaffoldDir, templateData);
|
|
@@ -72,13 +69,10 @@ async function init(options) {
|
|
|
72
69
|
await npm.updateAppData(packageJSON, hyphenizedName);
|
|
73
70
|
await updateCLIDependencies(packageJSON, options.local, {
|
|
74
71
|
dependencies: {
|
|
75
|
-
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
76
72
|
'@shopify/hydrogen': hydrogenPackageVersion,
|
|
77
73
|
},
|
|
78
74
|
devDependencies: {
|
|
79
|
-
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
80
75
|
'@shopify/cli-hydrogen': cliHydrogenPackageVersion,
|
|
81
|
-
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
82
76
|
'@shopify/cli': cliVersion,
|
|
83
77
|
},
|
|
84
78
|
});
|
|
@@ -164,9 +158,7 @@ async function updateCLIDependencies(packageJSON, local, packageDependencies) {
|
|
|
164
158
|
});
|
|
165
159
|
if (local) {
|
|
166
160
|
const devDependencyOverrides = {
|
|
167
|
-
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
168
161
|
'@shopify/cli': `file:${(await path.findUp('packages/cli-main', { type: 'directory' }))}`,
|
|
169
|
-
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
170
162
|
'@shopify/cli-hydrogen': `file:${(await path.findUp('packages/cli-hydrogen', { type: 'directory' }))}`,
|
|
171
163
|
};
|
|
172
164
|
packageJSON.overrides = packageJSON.overrides
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/services/init.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n string,\n path,\n error,\n file,\n output,\n os,\n ui,\n npm,\n environment,\n github,\n template,\n git,\n constants,\n version,\n} from '@shopify/cli-kit'\nimport {\n installNodeModules,\n packageManager,\n PackageManager,\n packageManagerUsedForCreating,\n} from '@shopify/cli-kit/node/node-package-manager'\n\nimport {Writable} from 'stream'\n\ninterface InitOptions {\n name: string\n template: string\n directory: string\n packageManager?: string\n shopifyCliVersion?: string\n cliHydrogenPackageVersion?: string\n hydrogenVersion?: string\n local: boolean\n}\n\nconst suggestHydrogenSupport = () => `\nHelp us make Hydrogen better by reporting this error so we can improve this message and/or fix the error.\n - Chat with us on Discord: https://discord.com/invite/ppSbThrFaS\n - Create an issue in GitHub: https://github.com/Shopify/hydrogen/issues/new\n`\n\nasync function init(options: InitOptions) {\n const hydrogenVersion = await version.findPackageVersionUp({fromModuleURL: import.meta.url})\n const user = (await os.username()) ?? ''\n const cliPackageVersion = options.shopifyCliVersion ?? (await constants.versions.cliKit())\n const cliHydrogenPackageVersion = options.cliHydrogenPackageVersion ?? hydrogenVersion\n const hydrogenPackageVersion = options.hydrogenVersion\n const packageManager = inferPackageManager(options.packageManager)\n const hyphenizedName = string.hyphenize(options.name)\n const outputDirectory = path.join(options.directory, hyphenizedName)\n\n await ui.nonEmptyDirectoryPrompt(outputDirectory)\n\n await file.inTemporaryDirectory(async (tmpDir) => {\n const templateDownloadDir = path.join(tmpDir, 'download')\n const templateScaffoldDir = path.join(tmpDir, 'app')\n\n await file.mkdir(templateDownloadDir)\n await file.mkdir(templateScaffoldDir)\n\n let tasks: ui.ListrTasks = []\n\n const templateInfo = await github.parseRepoUrl(options.template)\n const branch = templateInfo.ref ? `#${templateInfo.ref}` : ''\n const templatePath = templateInfo.subDirectory\n ? path.join(templateDownloadDir, templateInfo.subDirectory)\n : templateDownloadDir\n\n const repoUrl = `${templateInfo.http}${branch}`\n await ui.task({\n title: `Downloading template from ${repoUrl}`,\n task: async () => {\n await git.downloadRepository({\n repoUrl,\n destination: templateDownloadDir,\n shallow: true,\n })\n if (!(await file.exists(path.join(templatePath, 'package.json')))) {\n throw new error.Abort(`The template ${templatePath} was not found.`, suggestHydrogenSupport())\n }\n return {successMessage: `Downloaded template from ${repoUrl}`}\n },\n })\n\n tasks = tasks.concat([\n {\n title: `Initializing your app ${hyphenizedName}`,\n task: async (_, parentTask) => {\n return parentTask.newListr(\n [\n {\n title: 'Parsing template files',\n task: async (_, task) => {\n const templateData = {\n name: hyphenizedName,\n // eslint-disable-next-line @typescript-eslint/naming-convention\n shopify_cli_version: cliPackageVersion,\n // eslint-disable-next-line @typescript-eslint/naming-convention\n hydrogen_version: hydrogenPackageVersion,\n author: user,\n // eslint-disable-next-line @typescript-eslint/naming-convention\n dependency_manager: options.packageManager,\n }\n await template.recursiveDirectoryCopy(templatePath, templateScaffoldDir, templateData)\n\n task.title = 'Template files parsed'\n },\n },\n {\n title: 'Updating package.json',\n task: async (_, task) => {\n const packageJSON = await npm.readPackageJSON(templateScaffoldDir)\n const cliVersion = await constants.versions.cliKit()\n await npm.updateAppData(packageJSON, hyphenizedName)\n await updateCLIDependencies(packageJSON, options.local, {\n dependencies: {\n // eslint-disable-next-line @typescript-eslint/naming-convention\n '@shopify/hydrogen': hydrogenPackageVersion,\n },\n devDependencies: {\n // eslint-disable-next-line @typescript-eslint/naming-convention\n '@shopify/cli-hydrogen': cliHydrogenPackageVersion,\n // eslint-disable-next-line @typescript-eslint/naming-convention\n '@shopify/cli': cliVersion,\n },\n })\n await updateCLIScripts(packageJSON)\n await npm.writePackageJSON(templateScaffoldDir, packageJSON)\n\n task.title = 'Package.json updated'\n parentTask.title = 'App initialized'\n },\n },\n ],\n {concurrent: false},\n )\n },\n },\n ])\n\n if (await environment.local.isShopify()) {\n tasks.push({\n title: \"[Shopifolks-only] Configuring the project's NPM registry\",\n task: async (_, task) => {\n await writeToNpmrc(templateScaffoldDir, `@shopify:registry=https://registry.npmjs.org`)\n task.title = \"[Shopifolks-only] Project's NPM registry configured.\"\n },\n })\n }\n\n tasks = tasks.concat([\n {\n title: `Installing dependencies with ${packageManager}`,\n task: async (_, task) => {\n const stdout = new Writable({\n write(chunk, encoding, next) {\n task.output = chunk.toString()\n next()\n },\n })\n await installDependencies(templateScaffoldDir, packageManager, stdout)\n },\n },\n {\n title: 'Cleaning up',\n task: async (_, task) => {\n await cleanup(templateScaffoldDir)\n\n task.title = 'Completed clean up'\n },\n },\n ])\n\n const list = ui.newListr(tasks, {\n concurrent: false,\n rendererOptions: {collapse: false},\n rendererSilent: environment.local.isUnitTest(),\n })\n\n await list.run()\n\n await file.move(templateScaffoldDir, outputDirectory)\n })\n\n output.info(output.content`\n✨ ${hyphenizedName} is ready to build!\n🚀 Run ${output.token.packagejsonScript(\n packageManager,\n 'dev',\n )} to start your local development server and start building.\n\n📚 Docs: ${output.token.link('Quick start guide', 'https://shopify.dev/custom-storefronts/hydrogen')}`)\n\n output.info(output.content`\n👋 Note: your project will display inventory from the Hydrogen Demo Store.\\\n To connect this project to your Shopify store’s inventory instead,\\\n update ${output.token.yellow(`${hyphenizedName}/hydrogen.config.js`)} with your\\\n store ID and Storefront API key.\\n`)\n}\n\nfunction inferPackageManager(optionsPackageManager: string | undefined): PackageManager {\n if (optionsPackageManager && packageManager.includes(optionsPackageManager as PackageManager)) {\n return optionsPackageManager as PackageManager\n }\n return packageManagerUsedForCreating()\n}\n\nexport default init\n\ninterface PackageDependencies {\n devDependencies: {[key: string]: string | undefined}\n dependencies: {[key: string]: string | undefined}\n}\n\nasync function updateCLIScripts(packageJSON: npm.PackageJSON): Promise<npm.PackageJSON> {\n packageJSON.scripts.dev = `shopify hydrogen dev`\n\n return packageJSON\n}\n\nasync function updateCLIDependencies(\n packageJSON: npm.PackageJSON,\n local: boolean,\n packageDependencies: PackageDependencies,\n): Promise<npm.PackageJSON> {\n const {devDependencies, dependencies} = packageDependencies\n\n packageJSON.devDependencies = packageJSON.devDependencies || {}\n packageJSON.dependencies = packageJSON.dependencies || {}\n\n Object.keys(devDependencies).forEach((key) => {\n packageJSON.devDependencies[key] = devDependencies[key] || packageJSON.devDependencies[key]\n })\n\n Object.keys(dependencies).forEach((key) => {\n packageJSON.dependencies[key] = dependencies[key] || packageJSON.dependencies[key]\n })\n\n if (local) {\n const devDependencyOverrides = {\n // eslint-disable-next-line @typescript-eslint/naming-convention\n '@shopify/cli': `file:${(await path.findUp('packages/cli-main', {type: 'directory'})) as string}`,\n // eslint-disable-next-line @typescript-eslint/naming-convention\n '@shopify/cli-hydrogen': `file:${(await path.findUp('packages/cli-hydrogen', {type: 'directory'})) as string}`,\n }\n\n packageJSON.overrides = packageJSON.overrides\n ? {...packageJSON.overrides, ...devDependencyOverrides}\n : devDependencyOverrides\n\n packageJSON.resolutions = packageJSON.resolutions\n ? {...packageJSON.resolutions, ...devDependencyOverrides}\n : devDependencyOverrides\n }\n\n return packageJSON\n}\n\nasync function installDependencies(directory: string, packageManager: PackageManager, stdout: Writable): Promise<void> {\n if (packageManager === 'pnpm') {\n writeToNpmrc(directory, 'auto-install-peers = true')\n }\n await installNodeModules(directory, packageManager, stdout)\n}\n\nasync function writeToNpmrc(directory: string, content: string) {\n const npmrcPath = path.join(directory, '.npmrc')\n const npmrcContent = `${content}\\n`\n if (!(await file.exists(npmrcPath))) {\n await file.touch(npmrcPath)\n }\n await file.appendFile(npmrcPath, npmrcContent)\n}\n\nasync 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, '.stackblitzrc'),\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"]}
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/services/init.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n string,\n path,\n error,\n file,\n output,\n os,\n ui,\n npm,\n environment,\n github,\n template,\n git,\n constants,\n version,\n} from '@shopify/cli-kit'\nimport {\n installNodeModules,\n packageManager,\n PackageManager,\n packageManagerUsedForCreating,\n} from '@shopify/cli-kit/node/node-package-manager'\n\nimport {Writable} from 'stream'\n\ninterface InitOptions {\n name: string\n template: string\n directory: string\n packageManager?: string\n shopifyCliVersion?: string\n cliHydrogenPackageVersion?: string\n hydrogenVersion?: string\n local: boolean\n}\n\nconst suggestHydrogenSupport = () => `\nHelp us make Hydrogen better by reporting this error so we can improve this message and/or fix the error.\n - Chat with us on Discord: https://discord.com/invite/ppSbThrFaS\n - Create an issue in GitHub: https://github.com/Shopify/hydrogen/issues/new\n`\n\nasync function init(options: InitOptions) {\n const hydrogenVersion = await version.findPackageVersionUp({fromModuleURL: import.meta.url})\n const user = (await os.username()) ?? ''\n const cliPackageVersion = options.shopifyCliVersion ?? (await constants.versions.cliKit())\n const cliHydrogenPackageVersion = options.cliHydrogenPackageVersion ?? hydrogenVersion\n const hydrogenPackageVersion = options.hydrogenVersion\n const packageManager = inferPackageManager(options.packageManager)\n const hyphenizedName = string.hyphenize(options.name)\n const outputDirectory = path.join(options.directory, hyphenizedName)\n\n await ui.nonEmptyDirectoryPrompt(outputDirectory)\n\n await file.inTemporaryDirectory(async (tmpDir) => {\n const templateDownloadDir = path.join(tmpDir, 'download')\n const templateScaffoldDir = path.join(tmpDir, 'app')\n\n await file.mkdir(templateDownloadDir)\n await file.mkdir(templateScaffoldDir)\n\n let tasks: ui.ListrTasks = []\n\n const templateInfo = await github.parseRepoUrl(options.template)\n const branch = templateInfo.ref ? `#${templateInfo.ref}` : ''\n const templatePath = templateInfo.subDirectory\n ? path.join(templateDownloadDir, templateInfo.subDirectory)\n : templateDownloadDir\n\n const repoUrl = `${templateInfo.http}${branch}`\n await ui.task({\n title: `Downloading template from ${repoUrl}`,\n task: async () => {\n await git.downloadRepository({\n repoUrl,\n destination: templateDownloadDir,\n shallow: true,\n })\n if (!(await file.exists(path.join(templatePath, 'package.json')))) {\n throw new error.Abort(`The template ${templatePath} was not found.`, suggestHydrogenSupport())\n }\n return {successMessage: `Downloaded template from ${repoUrl}`}\n },\n })\n\n tasks = tasks.concat([\n {\n title: `Initializing your app ${hyphenizedName}`,\n task: async (_, parentTask) => {\n return parentTask.newListr(\n [\n {\n title: 'Parsing template files',\n task: async (_, task) => {\n const templateData = {\n name: hyphenizedName,\n shopify_cli_version: cliPackageVersion,\n hydrogen_version: hydrogenPackageVersion,\n author: user,\n dependency_manager: options.packageManager,\n }\n await template.recursiveDirectoryCopy(templatePath, templateScaffoldDir, templateData)\n\n task.title = 'Template files parsed'\n },\n },\n {\n title: 'Updating package.json',\n task: async (_, task) => {\n const packageJSON = await npm.readPackageJSON(templateScaffoldDir)\n const cliVersion = await constants.versions.cliKit()\n await npm.updateAppData(packageJSON, hyphenizedName)\n await updateCLIDependencies(packageJSON, options.local, {\n dependencies: {\n '@shopify/hydrogen': hydrogenPackageVersion,\n },\n devDependencies: {\n '@shopify/cli-hydrogen': cliHydrogenPackageVersion,\n '@shopify/cli': cliVersion,\n },\n })\n await updateCLIScripts(packageJSON)\n await npm.writePackageJSON(templateScaffoldDir, packageJSON)\n\n task.title = 'Package.json updated'\n parentTask.title = 'App initialized'\n },\n },\n ],\n {concurrent: false},\n )\n },\n },\n ])\n\n if (await environment.local.isShopify()) {\n tasks.push({\n title: \"[Shopifolks-only] Configuring the project's NPM registry\",\n task: async (_, task) => {\n await writeToNpmrc(templateScaffoldDir, `@shopify:registry=https://registry.npmjs.org`)\n task.title = \"[Shopifolks-only] Project's NPM registry configured.\"\n },\n })\n }\n\n tasks = tasks.concat([\n {\n title: `Installing dependencies with ${packageManager}`,\n task: async (_, task) => {\n const stdout = new Writable({\n write(chunk, encoding, next) {\n task.output = chunk.toString()\n next()\n },\n })\n await installDependencies(templateScaffoldDir, packageManager, stdout)\n },\n },\n {\n title: 'Cleaning up',\n task: async (_, task) => {\n await cleanup(templateScaffoldDir)\n\n task.title = 'Completed clean up'\n },\n },\n ])\n\n const list = ui.newListr(tasks, {\n concurrent: false,\n rendererOptions: {collapse: false},\n rendererSilent: environment.local.isUnitTest(),\n })\n\n await list.run()\n\n await file.move(templateScaffoldDir, outputDirectory)\n })\n\n output.info(output.content`\n✨ ${hyphenizedName} is ready to build!\n🚀 Run ${output.token.packagejsonScript(\n packageManager,\n 'dev',\n )} to start your local development server and start building.\n\n📚 Docs: ${output.token.link('Quick start guide', 'https://shopify.dev/custom-storefronts/hydrogen')}`)\n\n output.info(output.content`\n👋 Note: your project will display inventory from the Hydrogen Demo Store.\\\n To connect this project to your Shopify store’s inventory instead,\\\n update ${output.token.yellow(`${hyphenizedName}/hydrogen.config.js`)} with your\\\n store ID and Storefront API key.\\n`)\n}\n\nfunction inferPackageManager(optionsPackageManager: string | undefined): PackageManager {\n if (optionsPackageManager && packageManager.includes(optionsPackageManager as PackageManager)) {\n return optionsPackageManager as PackageManager\n }\n return packageManagerUsedForCreating()\n}\n\nexport default init\n\ninterface PackageDependencies {\n devDependencies: {[key: string]: string | undefined}\n dependencies: {[key: string]: string | undefined}\n}\n\nasync function updateCLIScripts(packageJSON: npm.PackageJSON): Promise<npm.PackageJSON> {\n packageJSON.scripts.dev = `shopify hydrogen dev`\n\n return packageJSON\n}\n\nasync function updateCLIDependencies(\n packageJSON: npm.PackageJSON,\n local: boolean,\n packageDependencies: PackageDependencies,\n): Promise<npm.PackageJSON> {\n const {devDependencies, dependencies} = packageDependencies\n\n packageJSON.devDependencies = packageJSON.devDependencies || {}\n packageJSON.dependencies = packageJSON.dependencies || {}\n\n Object.keys(devDependencies).forEach((key) => {\n packageJSON.devDependencies[key] = devDependencies[key] || packageJSON.devDependencies[key]\n })\n\n Object.keys(dependencies).forEach((key) => {\n packageJSON.dependencies[key] = dependencies[key] || packageJSON.dependencies[key]\n })\n\n if (local) {\n const devDependencyOverrides = {\n '@shopify/cli': `file:${(await path.findUp('packages/cli-main', {type: 'directory'})) as string}`,\n '@shopify/cli-hydrogen': `file:${(await path.findUp('packages/cli-hydrogen', {type: 'directory'})) as string}`,\n }\n\n packageJSON.overrides = packageJSON.overrides\n ? {...packageJSON.overrides, ...devDependencyOverrides}\n : devDependencyOverrides\n\n packageJSON.resolutions = packageJSON.resolutions\n ? {...packageJSON.resolutions, ...devDependencyOverrides}\n : devDependencyOverrides\n }\n\n return packageJSON\n}\n\nasync function installDependencies(directory: string, packageManager: PackageManager, stdout: Writable): Promise<void> {\n if (packageManager === 'pnpm') {\n writeToNpmrc(directory, 'auto-install-peers = true')\n }\n await installNodeModules(directory, packageManager, stdout)\n}\n\nasync function writeToNpmrc(directory: string, content: string) {\n const npmrcPath = path.join(directory, '.npmrc')\n const npmrcContent = `${content}\\n`\n if (!(await file.exists(npmrcPath))) {\n await file.touch(npmrcPath)\n }\n await file.appendFile(npmrcPath, npmrcContent)\n}\n\nasync 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, '.stackblitzrc'),\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"]}
|