@d-zero/create-frontend 5.0.0-alpha.4 → 5.0.0-alpha.41

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ CHANGELOG.md
package/CHANGELOG.md CHANGED
@@ -3,6 +3,166 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ # [5.0.0-alpha.41](https://github.com/d-zero-dev/frontend-env/compare/v5.0.0-alpha.40...v5.0.0-alpha.41) (2025-03-03)
7
+
8
+ **Note:** Version bump only for package @d-zero/create-frontend
9
+
10
+ # [5.0.0-alpha.40](https://github.com/d-zero-dev/frontend-env/compare/v5.0.0-alpha.39...v5.0.0-alpha.40) (2025-03-03)
11
+
12
+ **Note:** Version bump only for package @d-zero/create-frontend
13
+
14
+ # [5.0.0-alpha.39](https://github.com/d-zero-dev/frontend-env/compare/v5.0.0-alpha.38...v5.0.0-alpha.39) (2025-02-12)
15
+
16
+ **Note:** Version bump only for package @d-zero/create-frontend
17
+
18
+ # [5.0.0-alpha.38](https://github.com/d-zero-dev/frontend-env/compare/v5.0.0-alpha.37...v5.0.0-alpha.38) (2025-02-05)
19
+
20
+ **Note:** Version bump only for package @d-zero/create-frontend
21
+
22
+ # [5.0.0-alpha.37](https://github.com/d-zero-dev/frontend-env/compare/v5.0.0-alpha.36...v5.0.0-alpha.37) (2025-02-03)
23
+
24
+ ### Bug Fixes
25
+
26
+ - **scaffold:** .bge-contentsクラス名のsが抜けていたので修正 ([c9b4757](https://github.com/d-zero-dev/frontend-env/commit/c9b4757e16aa35178883fed8e8e0fb5a34b24c90))
27
+ - **scaffold:** bge-style.scssのファイル名変更に伴う周辺処理の更新 ([bcca3a1](https://github.com/d-zero-dev/frontend-env/commit/bcca3a18d560694da914b207c01b9309c184ef39))
28
+
29
+ # [5.0.0-alpha.36](https://github.com/d-zero-dev/frontend-env/compare/v5.0.0-alpha.35...v5.0.0-alpha.36) (2025-01-06)
30
+
31
+ **Note:** Version bump only for package @d-zero/create-frontend
32
+
33
+ # [5.0.0-alpha.35](https://github.com/d-zero-dev/frontend-env/compare/v5.0.0-alpha.34...v5.0.0-alpha.35) (2024-12-23)
34
+
35
+ **Note:** Version bump only for package @d-zero/create-frontend
36
+
37
+ # [5.0.0-alpha.34](https://github.com/d-zero-dev/frontend-env/compare/v5.0.0-alpha.33...v5.0.0-alpha.34) (2024-12-16)
38
+
39
+ **Note:** Version bump only for package @d-zero/create-frontend
40
+
41
+ # [5.0.0-alpha.33](https://github.com/d-zero-dev/frontend-env/compare/v5.0.0-alpha.32...v5.0.0-alpha.33) (2024-12-10)
42
+
43
+ **Note:** Version bump only for package @d-zero/create-frontend
44
+
45
+ # [5.0.0-alpha.32](https://github.com/d-zero-dev/frontend-env/compare/v5.0.0-alpha.31...v5.0.0-alpha.32) (2024-12-10)
46
+
47
+ **Note:** Version bump only for package @d-zero/create-frontend
48
+
49
+ # [5.0.0-alpha.31](https://github.com/d-zero-dev/frontend-env/compare/v5.0.0-alpha.30...v5.0.0-alpha.31) (2024-11-06)
50
+
51
+ **Note:** Version bump only for package @d-zero/create-frontend
52
+
53
+ # [5.0.0-alpha.30](https://github.com/d-zero-dev/frontend-env/compare/v5.0.0-alpha.29...v5.0.0-alpha.30) (2024-11-06)
54
+
55
+ **Note:** Version bump only for package @d-zero/create-frontend
56
+
57
+ # [5.0.0-alpha.29](https://github.com/d-zero-dev/frontend-env/compare/v5.0.0-alpha.28...v5.0.0-alpha.29) (2024-11-06)
58
+
59
+ **Note:** Version bump only for package @d-zero/create-frontend
60
+
61
+ # [5.0.0-alpha.28](https://github.com/d-zero-dev/frontend-env/compare/v5.0.0-alpha.27...v5.0.0-alpha.28) (2024-11-05)
62
+
63
+ **Note:** Version bump only for package @d-zero/create-frontend
64
+
65
+ # [5.0.0-alpha.27](https://github.com/d-zero-dev/frontend-env/compare/v5.0.0-alpha.26...v5.0.0-alpha.27) (2024-10-31)
66
+
67
+ **Note:** Version bump only for package @d-zero/create-frontend
68
+
69
+ # [5.0.0-alpha.26](https://github.com/d-zero-dev/frontend-env/compare/v5.0.0-alpha.25...v5.0.0-alpha.26) (2024-10-31)
70
+
71
+ **Note:** Version bump only for package @d-zero/create-frontend
72
+
73
+ # [5.0.0-alpha.25](https://github.com/d-zero-dev/frontend-env/compare/v5.0.0-alpha.24...v5.0.0-alpha.25) (2024-10-29)
74
+
75
+ ### Features
76
+
77
+ - **create-frontend:** add `--debug` option ([835529e](https://github.com/d-zero-dev/frontend-env/commit/835529e798d634ed75dbb5ec8d7e3e75f58b0fae))
78
+ - **create-frontend:** add interactive mode ([e0cf69d](https://github.com/d-zero-dev/frontend-env/commit/e0cf69daca825b26fd490ea0ea6bc10a3f258c58))
79
+ - **create-frontend:** add settings for `type=burger` ([b755336](https://github.com/d-zero-dev/frontend-env/commit/b755336b704086adcc67af8111a49a0bcb5b82cd))
80
+ - **create-frontend:** add settings for `type=static` ([7298f7e](https://github.com/d-zero-dev/frontend-env/commit/7298f7edbda2cfdf267cd9145686be7cb125587f))
81
+
82
+ # [5.0.0-alpha.24](https://github.com/d-zero-dev/frontend-env/compare/v5.0.0-alpha.23...v5.0.0-alpha.24) (2024-10-24)
83
+
84
+ **Note:** Version bump only for package @d-zero/create-frontend
85
+
86
+ # [5.0.0-alpha.23](https://github.com/d-zero-dev/frontend-env/compare/v5.0.0-alpha.22...v5.0.0-alpha.23) (2024-10-15)
87
+
88
+ **Note:** Version bump only for package @d-zero/create-frontend
89
+
90
+ # [5.0.0-alpha.22](https://github.com/d-zero-dev/frontend-env/compare/v5.0.0-alpha.21...v5.0.0-alpha.22) (2024-10-11)
91
+
92
+ **Note:** Version bump only for package @d-zero/create-frontend
93
+
94
+ # [5.0.0-alpha.21](https://github.com/d-zero-dev/frontend-env/compare/v5.0.0-alpha.20...v5.0.0-alpha.21) (2024-10-11)
95
+
96
+ **Note:** Version bump only for package @d-zero/create-frontend
97
+
98
+ # [5.0.0-alpha.20](https://github.com/d-zero-dev/frontend-env/compare/v5.0.0-alpha.19...v5.0.0-alpha.20) (2024-10-11)
99
+
100
+ **Note:** Version bump only for package @d-zero/create-frontend
101
+
102
+ # [5.0.0-alpha.19](https://github.com/d-zero-dev/frontend-env/compare/v5.0.0-alpha.18...v5.0.0-alpha.19) (2024-10-11)
103
+
104
+ **Note:** Version bump only for package @d-zero/create-frontend
105
+
106
+ # [5.0.0-alpha.18](https://github.com/d-zero-dev/frontend-env/compare/v5.0.0-alpha.17...v5.0.0-alpha.18) (2024-10-11)
107
+
108
+ **Note:** Version bump only for package @d-zero/create-frontend
109
+
110
+ # [5.0.0-alpha.17](https://github.com/d-zero-dev/frontend-env/compare/v5.0.0-alpha.16...v5.0.0-alpha.17) (2024-10-10)
111
+
112
+ **Note:** Version bump only for package @d-zero/create-frontend
113
+
114
+ # [5.0.0-alpha.16](https://github.com/d-zero-dev/frontend-env/compare/v5.0.0-alpha.15...v5.0.0-alpha.16) (2024-10-09)
115
+
116
+ **Note:** Version bump only for package @d-zero/create-frontend
117
+
118
+ # [5.0.0-alpha.15](https://github.com/d-zero-dev/frontend-env/compare/v5.0.0-alpha.14...v5.0.0-alpha.15) (2024-10-01)
119
+
120
+ **Note:** Version bump only for package @d-zero/create-frontend
121
+
122
+ # [5.0.0-alpha.14](https://github.com/d-zero-dev/frontend-env/compare/v5.0.0-alpha.13...v5.0.0-alpha.14) (2024-07-31)
123
+
124
+ **Note:** Version bump only for package @d-zero/create-frontend
125
+
126
+ # [5.0.0-alpha.13](https://github.com/d-zero-dev/frontend-env/compare/v5.0.0-alpha.12...v5.0.0-alpha.13) (2024-07-22)
127
+
128
+ **Note:** Version bump only for package @d-zero/create-frontend
129
+
130
+ # [5.0.0-alpha.12](https://github.com/d-zero-dev/frontend-env/compare/v5.0.0-alpha.11...v5.0.0-alpha.12) (2024-07-05)
131
+
132
+ **Note:** Version bump only for package @d-zero/create-frontend
133
+
134
+ # [5.0.0-alpha.11](https://github.com/d-zero-dev/frontend-env/compare/v5.0.0-alpha.10...v5.0.0-alpha.11) (2024-07-05)
135
+
136
+ **Note:** Version bump only for package @d-zero/create-frontend
137
+
138
+ # [5.0.0-alpha.10](https://github.com/d-zero-dev/frontend-env/compare/v5.0.0-alpha.9...v5.0.0-alpha.10) (2024-06-11)
139
+
140
+ ### Bug Fixes
141
+
142
+ - **scaffold:** 生成ファイルや静的ファイルがリント対象となっていたため除外設定を追加 ([0938636](https://github.com/d-zero-dev/frontend-env/commit/0938636ec260337914eaa4d0ab98aead709164fc))
143
+
144
+ # [5.0.0-alpha.9](https://github.com/d-zero-dev/frontend-env/compare/v5.0.0-alpha.8...v5.0.0-alpha.9) (2024-06-10)
145
+
146
+ **Note:** Version bump only for package @d-zero/create-frontend
147
+
148
+ # [5.0.0-alpha.8](https://github.com/d-zero-dev/frontend-env/compare/v5.0.0-alpha.7...v5.0.0-alpha.8) (2024-05-23)
149
+
150
+ **Note:** Version bump only for package @d-zero/create-frontend
151
+
152
+ # [5.0.0-alpha.7](https://github.com/d-zero-dev/frontend-env/compare/v5.0.0-alpha.6...v5.0.0-alpha.7) (2024-05-14)
153
+
154
+ **Note:** Version bump only for package @d-zero/create-frontend
155
+
156
+ # [5.0.0-alpha.6](https://github.com/d-zero-dev/frontend-env/compare/v5.0.0-alpha.5...v5.0.0-alpha.6) (2024-05-14)
157
+
158
+ ### Bug Fixes
159
+
160
+ - **repo:** fix each version ([50d50ad](https://github.com/d-zero-dev/frontend-env/commit/50d50adc605b700389e2945d03b72c5c4a00495a))
161
+
162
+ # [5.0.0-alpha.5](https://github.com/d-zero-dev/frontend-env/compare/v5.0.0-alpha.4...v5.0.0-alpha.5) (2024-05-14)
163
+
164
+ **Note:** Version bump only for package @d-zero/create-frontend
165
+
6
166
  # [5.0.0-alpha.4](https://github.com/d-zero-dev/frontend-env/compare/v5.0.0-alpha.2...v5.0.0-alpha.4) (2024-05-14)
7
167
 
8
168
  **Note:** Version bump only for package @d-zero/create-frontend
package/index.js CHANGED
@@ -1,14 +1,11 @@
1
1
  #!/usr/bin/env node
2
2
  import path from 'node:path';
3
- import { fileURLToPath } from 'node:url';
4
3
 
5
4
  import { Plop, run } from 'plop';
6
5
 
7
- const __dirname = path.dirname(fileURLToPath(import.meta.url));
8
-
9
6
  Plop.prepare(
10
7
  {
11
- configPath: path.join(__dirname, 'plopfile.js'),
8
+ configPath: path.join(import.meta.dirname, 'plopfile.js'),
12
9
  },
13
10
  (env) =>
14
11
  Plop.execute(
package/index.spec.js ADDED
@@ -0,0 +1,295 @@
1
+ import fs from 'node:fs';
2
+ import os from 'node:os';
3
+ import path from 'node:path';
4
+
5
+ import { execa } from 'execa';
6
+ import { describe, test, expect, beforeEach } from 'vitest';
7
+
8
+ /**
9
+ *
10
+ * @param task
11
+ */
12
+ function getName(task) {
13
+ return encodeURIComponent(`${task.suite.name}_${task.name}`.toLowerCase());
14
+ }
15
+
16
+ beforeEach((ctx) => {
17
+ ctx.tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), 'test-'));
18
+ });
19
+
20
+ describe('CLI', () => {
21
+ /**
22
+ *
23
+ * @param dir
24
+ * @param type
25
+ */
26
+ async function cliTest(dir, type) {
27
+ const { stdout } = await execa(
28
+ 'npx',
29
+ [
30
+ '@d-zero/create-frontend',
31
+ ...(type ? ['--type', type] : []),
32
+ '--dir',
33
+ dir,
34
+ '--no-install',
35
+ '--silent',
36
+ ],
37
+ {
38
+ failed: true,
39
+ env: {
40
+ NODE_NO_WARNINGS: '1',
41
+ },
42
+ },
43
+ );
44
+ return stdout.replaceAll(path.sep, '/').split('\n');
45
+ }
46
+
47
+ test('npx', async ({ tmpDir, task }) => {
48
+ const dir = path.join(tmpDir, getName(task));
49
+ const actual = await cliTest(dir);
50
+ expect(actual).toStrictEqual([
51
+ `✔ ++ ${dir}/tsconfig.json`,
52
+ `✔ ++ ${dir}/prh.yaml`,
53
+ `✔ ++ ${dir}/package.json`,
54
+ `✔ ++ ${dir}/markuplint.config.js`,
55
+ `✔ ++ ${dir}/lint-staged.config.mjs`,
56
+ `✔ ++ ${dir}/eslint.config.js`,
57
+ `✔ ++ ${dir}/eleventy.config.mjs`,
58
+ `✔ ++ ${dir}/cspell.json`,
59
+ `✔ ++ ${dir}/README.md`,
60
+ `✔ ++ ${dir}/CHANGELOG.md`,
61
+ `✔ ++ ${dir}/.textlintrc.js`,
62
+ `✔ ++ ${dir}/.textlintignore`,
63
+ `✔ ++ ${dir}/.stylelintrc`,
64
+ `✔ ++ ${dir}/.pug-lintrc`,
65
+ `✔ ++ ${dir}/.prettierrc.mjs`,
66
+ `✔ ++ ${dir}/.postcssrc.js`,
67
+ `✔ ++ ${dir}/.npmignore`,
68
+ `✔ ++ ${dir}/.gitignore`,
69
+ `✔ ++ ${dir}/.editorconfig`,
70
+ `✔ ++ ${dir}/__assets/htdocs/index.pug`,
71
+ `✔ ++ ${dir}/__assets/htdocs/js/script.ts`,
72
+ `✔ ++ ${dir}/__assets/htdocs/css/style.scss`,
73
+ `✔ ++ ${dir}/__assets/htdocs/css/bge_style.scss`,
74
+ `✔ ++ ${dir}/__assets/htdocs/__tmpl/index.pug`,
75
+ `✔ ++ ${dir}/__assets/htdocs/__tmpl/302_form_complete.pug`,
76
+ `✔ ++ ${dir}/__assets/htdocs/__tmpl/301_form_confirm.pug`,
77
+ `✔ ++ ${dir}/__assets/htdocs/__tmpl/300_form_input.pug`,
78
+ `✔ ++ ${dir}/__assets/htdocs/__tmpl/210_blog_index.pug`,
79
+ `✔ ++ ${dir}/__assets/htdocs/__tmpl/200_blog_index.pug`,
80
+ `✔ ++ ${dir}/__assets/htdocs/__tmpl/100_sub.pug`,
81
+ `✔ ++ ${dir}/__assets/htdocs/__tmpl/000_home.pug`,
82
+ `✔ ++ ${dir}/__assets/htdocs/__tmpl/.markuplintrc`,
83
+ `✔ ++ ${dir}/__assets/_libs/.markuplintrc`,
84
+ `✔ ++ ${dir}/__assets/_libs/style/theme/index.scss`,
85
+ `✔ ++ ${dir}/__assets/_libs/style/theme/font.scss`,
86
+ `✔ ++ ${dir}/__assets/_libs/style/theme/dimension.scss`,
87
+ `✔ ++ ${dir}/__assets/_libs/style/theme/color.scss`,
88
+ `✔ ++ ${dir}/__assets/_libs/style/general/img.scss`,
89
+ `✔ ++ ${dir}/__assets/_libs/style/general/button.scss`,
90
+ `✔ ++ ${dir}/__assets/_libs/style/general/body.scss`,
91
+ `✔ ++ ${dir}/__assets/_libs/style/general/all.scss`,
92
+ `✔ ++ ${dir}/__assets/_libs/style/base/root.scss`,
93
+ `✔ ++ ${dir}/__assets/_libs/script/index.ts`,
94
+ `✔ ++ ${dir}/__assets/_libs/mixin/meta.pug`,
95
+ `✔ ++ ${dir}/__assets/_libs/img/bg-repeat-01.gif`,
96
+ `✔ ++ ${dir}/__assets/_libs/img/bg-arrow.svg`,
97
+ `✔ ++ ${dir}/__assets/_libs/data/data.yml`,
98
+ `✔ ++ ${dir}/__assets/_libs/data/blocks.js`,
99
+ `✔ ++ ${dir}/__assets/_libs/data/blocks.html`,
100
+ `✔ ++ ${dir}/__assets/_libs/data/bge-blocks.html`,
101
+ `✔ ++ ${dir}/__assets/_libs/data/.markuplintrc`,
102
+ `✔ ++ ${dir}/__assets/_libs/component/c-title-page.scss`,
103
+ `✔ ++ ${dir}/__assets/_libs/component/c-title-page.pug`,
104
+ `✔ ++ ${dir}/__assets/_libs/component/c-pagination.scss`,
105
+ `✔ ++ ${dir}/__assets/_libs/component/c-pagination.pug`,
106
+ `✔ ++ ${dir}/__assets/_libs/component/c-page-sub.scss`,
107
+ `✔ ++ ${dir}/__assets/_libs/component/c-page-home.scss`,
108
+ `✔ ++ ${dir}/__assets/_libs/component/c-nav-sitemap.scss`,
109
+ `✔ ++ ${dir}/__assets/_libs/component/c-nav-sitemap.pug`,
110
+ `✔ ++ ${dir}/__assets/_libs/component/c-nav-global.scss`,
111
+ `✔ ++ ${dir}/__assets/_libs/component/c-nav-global.pug`,
112
+ `✔ ++ ${dir}/__assets/_libs/component/c-nav-breadcrumb.scss`,
113
+ `✔ ++ ${dir}/__assets/_libs/component/c-nav-breadcrumb.pug`,
114
+ `✔ ++ ${dir}/__assets/_libs/component/c-media.scss`,
115
+ `✔ ++ ${dir}/__assets/_libs/component/c-media.pug`,
116
+ `✔ ++ ${dir}/__assets/_libs/component/c-media-list.scss`,
117
+ `✔ ++ ${dir}/__assets/_libs/component/c-header.scss`,
118
+ `✔ ++ ${dir}/__assets/_libs/component/c-header.pug`,
119
+ `✔ ++ ${dir}/__assets/_libs/component/c-footer.scss`,
120
+ `✔ ++ ${dir}/__assets/_libs/component/c-footer.pug`,
121
+ `✔ ++ ${dir}/__assets/_libs/component/c-content-main.scss`,
122
+ `✔ ++ ${dir}/__assets/_libs/component/c-content-index.scss`,
123
+ `✔ ++ ${dir}/__assets/_libs/component/c-card.scss`,
124
+ `✔ ++ ${dir}/__assets/_libs/component/c-card.pug`,
125
+ `✔ ++ ${dir}/__assets/_libs/component/c-card-list.scss`,
126
+ `✔ ++ ${dir}/__assets/_libs/component/bge-contents.scss`,
127
+ `✔ ++ ${dir}/.vscode/settings.json`,
128
+ `✔ ++ ${dir}/.vscode/extensions.json`,
129
+ `✔ ++ ${dir}/.husky/pre-commit`,
130
+ '✔ Install dependencies : skipped',
131
+ ]);
132
+ });
133
+
134
+ test('npx --type burger', async ({ tmpDir, task }) => {
135
+ const dir = path.join(tmpDir, getName(task));
136
+ const actual = await cliTest(dir, 'burger');
137
+ expect(actual).toStrictEqual([
138
+ `✔ ++ ${dir}/tsconfig.json`,
139
+ `✔ ++ ${dir}/prh.yaml`,
140
+ `✔ ++ ${dir}/package.json`,
141
+ `✔ ++ ${dir}/markuplint.config.js`,
142
+ `✔ ++ ${dir}/lint-staged.config.mjs`,
143
+ `✔ ++ ${dir}/eslint.config.js`,
144
+ `✔ ++ ${dir}/eleventy.config.mjs`,
145
+ `✔ ++ ${dir}/cspell.json`,
146
+ `✔ ++ ${dir}/README.md`,
147
+ `✔ ++ ${dir}/CHANGELOG.md`,
148
+ `✔ ++ ${dir}/.textlintrc.js`,
149
+ `✔ ++ ${dir}/.textlintignore`,
150
+ `✔ ++ ${dir}/.stylelintrc`,
151
+ `✔ ++ ${dir}/.pug-lintrc`,
152
+ `✔ ++ ${dir}/.prettierrc.mjs`,
153
+ `✔ ++ ${dir}/.postcssrc.js`,
154
+ `✔ ++ ${dir}/.npmignore`,
155
+ `✔ ++ ${dir}/.gitignore`,
156
+ `✔ ++ ${dir}/.editorconfig`,
157
+ `✔ ++ ${dir}/__assets/htdocs/index.pug`,
158
+ `✔ ++ ${dir}/__assets/htdocs/js/script.ts`,
159
+ `✔ ++ ${dir}/__assets/htdocs/css/style.scss`,
160
+ `✔ ++ ${dir}/__assets/htdocs/css/bge_style.scss`,
161
+ `✔ ++ ${dir}/__assets/htdocs/__tmpl/index.pug`,
162
+ `✔ ++ ${dir}/__assets/htdocs/__tmpl/302_form_complete.pug`,
163
+ `✔ ++ ${dir}/__assets/htdocs/__tmpl/301_form_confirm.pug`,
164
+ `✔ ++ ${dir}/__assets/htdocs/__tmpl/300_form_input.pug`,
165
+ `✔ ++ ${dir}/__assets/htdocs/__tmpl/210_blog_index.pug`,
166
+ `✔ ++ ${dir}/__assets/htdocs/__tmpl/200_blog_index.pug`,
167
+ `✔ ++ ${dir}/__assets/htdocs/__tmpl/100_sub.pug`,
168
+ `✔ ++ ${dir}/__assets/htdocs/__tmpl/000_home.pug`,
169
+ `✔ ++ ${dir}/__assets/htdocs/__tmpl/.markuplintrc`,
170
+ `✔ ++ ${dir}/__assets/_libs/.markuplintrc`,
171
+ `✔ ++ ${dir}/__assets/_libs/style/theme/index.scss`,
172
+ `✔ ++ ${dir}/__assets/_libs/style/theme/font.scss`,
173
+ `✔ ++ ${dir}/__assets/_libs/style/theme/dimension.scss`,
174
+ `✔ ++ ${dir}/__assets/_libs/style/theme/color.scss`,
175
+ `✔ ++ ${dir}/__assets/_libs/style/general/img.scss`,
176
+ `✔ ++ ${dir}/__assets/_libs/style/general/button.scss`,
177
+ `✔ ++ ${dir}/__assets/_libs/style/general/body.scss`,
178
+ `✔ ++ ${dir}/__assets/_libs/style/general/all.scss`,
179
+ `✔ ++ ${dir}/__assets/_libs/style/base/root.scss`,
180
+ `✔ ++ ${dir}/__assets/_libs/script/index.ts`,
181
+ `✔ ++ ${dir}/__assets/_libs/mixin/meta.pug`,
182
+ `✔ ++ ${dir}/__assets/_libs/img/bg-repeat-01.gif`,
183
+ `✔ ++ ${dir}/__assets/_libs/img/bg-arrow.svg`,
184
+ `✔ ++ ${dir}/__assets/_libs/data/data.yml`,
185
+ `✔ ++ ${dir}/__assets/_libs/data/blocks.js`,
186
+ `✔ ++ ${dir}/__assets/_libs/data/blocks.html`,
187
+ `✔ ++ ${dir}/__assets/_libs/data/bge-blocks.html`,
188
+ `✔ ++ ${dir}/__assets/_libs/data/.markuplintrc`,
189
+ `✔ ++ ${dir}/__assets/_libs/component/c-title-page.scss`,
190
+ `✔ ++ ${dir}/__assets/_libs/component/c-title-page.pug`,
191
+ `✔ ++ ${dir}/__assets/_libs/component/c-pagination.scss`,
192
+ `✔ ++ ${dir}/__assets/_libs/component/c-pagination.pug`,
193
+ `✔ ++ ${dir}/__assets/_libs/component/c-page-sub.scss`,
194
+ `✔ ++ ${dir}/__assets/_libs/component/c-page-home.scss`,
195
+ `✔ ++ ${dir}/__assets/_libs/component/c-nav-sitemap.scss`,
196
+ `✔ ++ ${dir}/__assets/_libs/component/c-nav-sitemap.pug`,
197
+ `✔ ++ ${dir}/__assets/_libs/component/c-nav-global.scss`,
198
+ `✔ ++ ${dir}/__assets/_libs/component/c-nav-global.pug`,
199
+ `✔ ++ ${dir}/__assets/_libs/component/c-nav-breadcrumb.scss`,
200
+ `✔ ++ ${dir}/__assets/_libs/component/c-nav-breadcrumb.pug`,
201
+ `✔ ++ ${dir}/__assets/_libs/component/c-media.scss`,
202
+ `✔ ++ ${dir}/__assets/_libs/component/c-media.pug`,
203
+ `✔ ++ ${dir}/__assets/_libs/component/c-media-list.scss`,
204
+ `✔ ++ ${dir}/__assets/_libs/component/c-header.scss`,
205
+ `✔ ++ ${dir}/__assets/_libs/component/c-header.pug`,
206
+ `✔ ++ ${dir}/__assets/_libs/component/c-footer.scss`,
207
+ `✔ ++ ${dir}/__assets/_libs/component/c-footer.pug`,
208
+ `✔ ++ ${dir}/__assets/_libs/component/c-content-main.scss`,
209
+ `✔ ++ ${dir}/__assets/_libs/component/c-content-index.scss`,
210
+ `✔ ++ ${dir}/__assets/_libs/component/c-card.scss`,
211
+ `✔ ++ ${dir}/__assets/_libs/component/c-card.pug`,
212
+ `✔ ++ ${dir}/__assets/_libs/component/c-card-list.scss`,
213
+ `✔ ++ ${dir}/__assets/_libs/component/bge-contents.scss`,
214
+ `✔ ++ ${dir}/.vscode/settings.json`,
215
+ `✔ ++ ${dir}/.vscode/extensions.json`,
216
+ `✔ ++ ${dir}/.husky/pre-commit`,
217
+ '✔ Install dependencies : skipped',
218
+ ]);
219
+ });
220
+
221
+ test('npx --type static', async ({ tmpDir, task }) => {
222
+ const dir = path.join(tmpDir, getName(task));
223
+ const actual = await cliTest(dir, 'static');
224
+ expect(actual).toStrictEqual([
225
+ `✔ ++ ${dir}/tsconfig.json`,
226
+ `✔ ++ ${dir}/prh.yaml`,
227
+ `✔ ++ ${dir}/package.json`,
228
+ `✔ ++ ${dir}/markuplint.config.js`,
229
+ `✔ ++ ${dir}/lint-staged.config.mjs`,
230
+ `✔ ++ ${dir}/eslint.config.js`,
231
+ `✔ ++ ${dir}/eleventy.config.mjs`,
232
+ `✔ ++ ${dir}/cspell.json`,
233
+ `✔ ++ ${dir}/README.md`,
234
+ `✔ ++ ${dir}/CHANGELOG.md`,
235
+ `✔ ++ ${dir}/.textlintrc.js`,
236
+ `✔ ++ ${dir}/.textlintignore`,
237
+ `✔ ++ ${dir}/.stylelintrc`,
238
+ `✔ ++ ${dir}/.pug-lintrc`,
239
+ `✔ ++ ${dir}/.prettierrc.mjs`,
240
+ `✔ ++ ${dir}/.postcssrc.js`,
241
+ `✔ ++ ${dir}/.npmignore`,
242
+ `✔ ++ ${dir}/.gitignore`,
243
+ `✔ ++ ${dir}/.editorconfig`,
244
+ `✔ ++ ${dir}/__assets/htdocs/index.pug`,
245
+ `✔ ++ ${dir}/__assets/htdocs/js/script.ts`,
246
+ `✔ ++ ${dir}/__assets/htdocs/css/style.scss`,
247
+ `✔ ++ ${dir}/__assets/_libs/.markuplintrc`,
248
+ `✔ ++ ${dir}/__assets/_libs/style/theme/index.scss`,
249
+ `✔ ++ ${dir}/__assets/_libs/style/theme/font.scss`,
250
+ `✔ ++ ${dir}/__assets/_libs/style/theme/dimension.scss`,
251
+ `✔ ++ ${dir}/__assets/_libs/style/theme/color.scss`,
252
+ `✔ ++ ${dir}/__assets/_libs/style/general/img.scss`,
253
+ `✔ ++ ${dir}/__assets/_libs/style/general/button.scss`,
254
+ `✔ ++ ${dir}/__assets/_libs/style/general/body.scss`,
255
+ `✔ ++ ${dir}/__assets/_libs/style/general/all.scss`,
256
+ `✔ ++ ${dir}/__assets/_libs/style/base/root.scss`,
257
+ `✔ ++ ${dir}/__assets/_libs/script/index.ts`,
258
+ `✔ ++ ${dir}/__assets/_libs/mixin/meta.pug`,
259
+ `✔ ++ ${dir}/__assets/_libs/img/bg-repeat-01.gif`,
260
+ `✔ ++ ${dir}/__assets/_libs/img/bg-arrow.svg`,
261
+ `✔ ++ ${dir}/__assets/_libs/data/data.yml`,
262
+ `✔ ++ ${dir}/__assets/_libs/data/blocks.js`,
263
+ `✔ ++ ${dir}/__assets/_libs/data/blocks.html`,
264
+ `✔ ++ ${dir}/__assets/_libs/data/.markuplintrc`,
265
+ `✔ ++ ${dir}/__assets/_libs/component/c-title-page.scss`,
266
+ `✔ ++ ${dir}/__assets/_libs/component/c-title-page.pug`,
267
+ `✔ ++ ${dir}/__assets/_libs/component/c-pagination.scss`,
268
+ `✔ ++ ${dir}/__assets/_libs/component/c-pagination.pug`,
269
+ `✔ ++ ${dir}/__assets/_libs/component/c-page-sub.scss`,
270
+ `✔ ++ ${dir}/__assets/_libs/component/c-page-home.scss`,
271
+ `✔ ++ ${dir}/__assets/_libs/component/c-nav-sitemap.scss`,
272
+ `✔ ++ ${dir}/__assets/_libs/component/c-nav-sitemap.pug`,
273
+ `✔ ++ ${dir}/__assets/_libs/component/c-nav-global.scss`,
274
+ `✔ ++ ${dir}/__assets/_libs/component/c-nav-global.pug`,
275
+ `✔ ++ ${dir}/__assets/_libs/component/c-nav-breadcrumb.scss`,
276
+ `✔ ++ ${dir}/__assets/_libs/component/c-nav-breadcrumb.pug`,
277
+ `✔ ++ ${dir}/__assets/_libs/component/c-media.scss`,
278
+ `✔ ++ ${dir}/__assets/_libs/component/c-media.pug`,
279
+ `✔ ++ ${dir}/__assets/_libs/component/c-media-list.scss`,
280
+ `✔ ++ ${dir}/__assets/_libs/component/c-header.scss`,
281
+ `✔ ++ ${dir}/__assets/_libs/component/c-header.pug`,
282
+ `✔ ++ ${dir}/__assets/_libs/component/c-footer.scss`,
283
+ `✔ ++ ${dir}/__assets/_libs/component/c-footer.pug`,
284
+ `✔ ++ ${dir}/__assets/_libs/component/c-content-main.scss`,
285
+ `✔ ++ ${dir}/__assets/_libs/component/c-content-index.scss`,
286
+ `✔ ++ ${dir}/__assets/_libs/component/c-card.scss`,
287
+ `✔ ++ ${dir}/__assets/_libs/component/c-card.pug`,
288
+ `✔ ++ ${dir}/__assets/_libs/component/c-card-list.scss`,
289
+ `✔ ++ ${dir}/.vscode/settings.json`,
290
+ `✔ ++ ${dir}/.vscode/extensions.json`,
291
+ `✔ ++ ${dir}/.husky/pre-commit`,
292
+ '✔ Install dependencies : skipped',
293
+ ]);
294
+ });
295
+ });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@d-zero/create-frontend",
3
- "version": "5.0.0-alpha.4",
3
+ "version": "5.0.0-alpha.41",
4
4
  "description": "Create a new frontend project from a scaffolding template",
5
5
  "repository": "https://github.com/d-zero-dev/frontend-env.git",
6
6
  "author": "D-ZERO Co., Ltd.",
@@ -14,15 +14,16 @@
14
14
  "create-dzero-frontend": "./index.js"
15
15
  },
16
16
  "dependencies": {
17
- "@d-zero/scaffold": "5.0.0-alpha.2",
18
- "glob": "10.3.15",
19
- "i18n-js": "4.4.3",
20
- "ignore": "5.3.1",
17
+ "@d-zero/scaffold": "5.0.0-alpha.41",
18
+ "glob": "11.0.1",
19
+ "i18n-js": "4.5.1",
20
+ "ignore": "7.0.3",
21
21
  "meow": "13.2.0",
22
22
  "plop": "4.0.1"
23
23
  },
24
24
  "devDependencies": {
25
- "@types/glob": "8.1.0"
25
+ "@types/glob": "8.1.0",
26
+ "execa": "9.5.2"
26
27
  },
27
- "gitHead": "39dfd058877adc83489fa6ad61649ab98171aaa7"
28
+ "gitHead": "7d2a6aa41d103833181fa8b8e34951cd3450b2c2"
28
29
  }
package/plopfile.js CHANGED
@@ -1,5 +1,7 @@
1
1
  import { spawn } from 'node:child_process';
2
+ import fs from 'node:fs';
2
3
  import path from 'node:path';
4
+ import { argv } from 'node:process';
3
5
 
4
6
  import { globSync } from 'glob';
5
7
  import ignore from 'ignore';
@@ -23,6 +25,9 @@ const cli = meow(
23
25
  Examples
24
26
  $ yarn create @d-zero/frontend
25
27
  $ yarn create @d-zero/frontend --type cms --dir ./my-cms --install
28
+
29
+ Note
30
+ Running the command without any options will start in interactive mode, allowing you to configure the project step-by-step.
26
31
  `,
27
32
  {
28
33
  importMeta: import.meta,
@@ -30,15 +35,21 @@ const cli = meow(
30
35
  type: {
31
36
  type: 'string',
32
37
  shortFlag: 't',
38
+ default: 'burger',
33
39
  },
34
40
  dir: {
35
41
  type: 'string',
36
42
  shortFlag: 'd',
43
+ default: '.',
37
44
  },
38
45
  install: {
39
46
  type: 'boolean',
40
47
  default: true,
41
48
  },
49
+ debug: {
50
+ type: 'boolean',
51
+ default: false,
52
+ },
42
53
  },
43
54
  },
44
55
  );
@@ -53,6 +64,8 @@ export default function (plop) {
53
64
 
54
65
  const gitignore = readFileSafe(path.resolve(scaffoldDir, '.gitignore'));
55
66
  const ignoreFiles = gitignore?.split('\n').filter(Boolean) ?? [];
67
+ const hasArgs = argv.length > 2;
68
+ const interactive = !hasArgs;
56
69
 
57
70
  const ig = ignore()
58
71
  // Ignore files in .gitignore
@@ -61,7 +74,15 @@ export default function (plop) {
61
74
  .add([
62
75
  // Test directories
63
76
  '**/*.test/**/*',
64
- ]);
77
+ ])
78
+ .add(
79
+ // BurgerEditor
80
+ cli.flags.type === 'burger' ? [] : ['**/bge-*', '**/bge_*'],
81
+ )
82
+ .add(
83
+ // static
84
+ cli.flags.type === 'static' ? ['**/__tmpl/**/*'] : [],
85
+ );
65
86
 
66
87
  const scaffoldFiles = ig.filter(
67
88
  globSync('**/*', {
@@ -72,19 +93,32 @@ export default function (plop) {
72
93
  );
73
94
 
74
95
  plop.setActionType('Install dependencies', (answers) => {
75
- const dest = answers['__d-zero_scaffold_dest__'] ?? cli.flags.dir ?? '.';
76
- const doInstall =
77
- answers['__d-zero_scaffold_yarn_install__'] ?? cli.flags.install ?? true;
96
+ const { dest, doInstall } = answerToConfig(answers);
97
+
98
+ const { promise, resolve, reject } = Promise.withResolvers();
99
+
78
100
  if (doInstall) {
79
101
  const child = spawn('yarn', ['install'], {
80
102
  cwd: path.resolve(process.cwd(), dest),
81
103
  stdio: 'inherit',
82
104
  });
83
105
 
106
+ child.on('exit', (code) => {
107
+ if (code === 0) {
108
+ resolve(': success');
109
+ } else {
110
+ reject(new Error('Failed to install dependencies'));
111
+ }
112
+ });
113
+
84
114
  process.on('SIGINT', () => {
85
115
  child.kill('SIGINT');
86
116
  });
117
+ } else {
118
+ resolve(': skipped');
87
119
  }
120
+
121
+ return promise;
88
122
  });
89
123
 
90
124
  plop.setGenerator('basic', {
@@ -95,34 +129,43 @@ export default function (plop) {
95
129
  name: '__d-zero_project_type__',
96
130
  message: t`What's the type of project?`,
97
131
  choices: [
98
- //
99
- 'Static',
132
+ {
133
+ name: 'Static',
134
+ value: 'static',
135
+ },
100
136
  'CMS (WordPress etc.)',
101
137
  {
102
138
  name: 'CMS (baserCMS with BurgerEditor)',
103
139
  value: 'burger',
104
140
  },
105
141
  ],
106
- default: cli.flags.type ?? 'burger',
142
+ default: cli.flags.type,
107
143
  filter: (val) => val.toLowerCase(),
108
- when: !cli.flags.type,
144
+ when: interactive,
109
145
  },
110
146
  {
111
147
  type: 'input',
112
148
  name: '__d-zero_scaffold_dest__',
113
149
  message: t`Destination path`,
114
- default: '.',
115
- when: !cli.flags.type,
150
+ default: cli.flags.dir,
151
+ when: interactive,
116
152
  },
117
153
  {
118
154
  type: 'confirm',
119
155
  name: '__d-zero_scaffold_yarn_install__',
120
156
  message: t`Install dependencies with yarn?`,
121
- default: true,
122
- when: !cli.flags.type,
157
+ default: cli.flags.install,
158
+ when: interactive,
123
159
  },
124
160
  ],
125
161
  actions: function (answers) {
162
+ const config = answerToConfig(answers);
163
+
164
+ if (cli.flags.debug) {
165
+ // eslint-disable-next-line no-console
166
+ console.log(config);
167
+ }
168
+
126
169
  return [
127
170
  ...scaffoldFiles.map(
128
171
  /**
@@ -130,26 +173,43 @@ export default function (plop) {
130
173
  * @type {import('plop').AddActionConfig}
131
174
  */
132
175
  (originFile) => {
133
- const dest = answers['__d-zero_scaffold_dest__'] ?? cli.flags.dir ?? '.';
134
176
  return {
135
177
  type: 'add',
136
- path: path.resolve(dest, originFile),
178
+ path: path.resolve(config.dest, originFile),
137
179
  templateFile: path.resolve(scaffoldDir, originFile),
138
180
  transform(content) {
139
- if (originFile === 'package.json') {
140
- const nameCandidate = path.basename(path.resolve(dest));
141
- const pkg = JSON.parse(content);
142
- pkg._createdBy = `${pkg.name}@${pkg.version}`;
143
- pkg.name = nameCandidate;
144
- pkg.private = true;
145
- delete pkg.version;
146
- delete pkg.description;
147
- delete pkg.repository;
148
- delete pkg.author;
149
- delete pkg.license;
150
- delete pkg.publishConfig;
151
- delete pkg.files;
152
- content = JSON.stringify(pkg, null, '\t');
181
+ const nameCandidate = path.basename(path.resolve(config.dest));
182
+
183
+ switch (originFile) {
184
+ case 'package.json': {
185
+ const pkg = JSON.parse(content);
186
+ pkg._createdBy = `${pkg.name}@${pkg.version}`;
187
+ pkg.name = nameCandidate;
188
+ pkg.private = true;
189
+ delete pkg.version;
190
+ delete pkg.description;
191
+ delete pkg.repository;
192
+ delete pkg.author;
193
+ delete pkg.license;
194
+ delete pkg.publishConfig;
195
+ delete pkg.files;
196
+ content = JSON.stringify(pkg, null, '\t');
197
+ break;
198
+ }
199
+ case '__assets/_libs/data/blocks.cjs': {
200
+ if (config.type === 'burger') {
201
+ content = content.replace("blocks.html'", "bge-blocks.html'");
202
+ }
203
+ break;
204
+ }
205
+ case '__assets/htdocs/index.pug': {
206
+ if (config.type === 'static') {
207
+ content = fs.readFileSync(
208
+ path.resolve(scaffoldDir, '__assets/htdocs/__tmpl/000_home.pug'),
209
+ 'utf8',
210
+ );
211
+ }
212
+ }
153
213
  }
154
214
  return content;
155
215
  },
@@ -163,3 +223,15 @@ export default function (plop) {
163
223
  },
164
224
  });
165
225
  }
226
+
227
+ /**
228
+ *
229
+ * @param answers
230
+ */
231
+ function answerToConfig(answers) {
232
+ const type = answers['__d-zero_project_type__'] ?? cli.flags.type;
233
+ const dest = answers['__d-zero_scaffold_dest__'] ?? cli.flags.dir;
234
+ const doInstall = answers['__d-zero_scaffold_yarn_install__'] ?? cli.flags.install;
235
+
236
+ return { type, dest, doInstall };
237
+ }
package/read-file-safe.js CHANGED
@@ -1,5 +1,9 @@
1
1
  import fs from 'node:fs';
2
2
 
3
+ /**
4
+ *
5
+ * @param filePath
6
+ */
3
7
  export function readFileSafe(filePath) {
4
8
  try {
5
9
  return fs.readFileSync(filePath, 'utf8');