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

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,172 @@
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.42](https://github.com/d-zero-dev/frontend-env/compare/v5.0.0-alpha.41...v5.0.0-alpha.42) (2025-03-06)
7
+
8
+ ### Features
9
+
10
+ - **create-frontend:** add pattern for test files in plop configuration ([97e1f1e](https://github.com/d-zero-dev/frontend-env/commit/97e1f1e36f43cc98cadf18c71d304290fac74bce))
11
+
12
+ # [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)
13
+
14
+ **Note:** Version bump only for package @d-zero/create-frontend
15
+
16
+ # [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)
17
+
18
+ **Note:** Version bump only for package @d-zero/create-frontend
19
+
20
+ # [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)
21
+
22
+ **Note:** Version bump only for package @d-zero/create-frontend
23
+
24
+ # [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)
25
+
26
+ **Note:** Version bump only for package @d-zero/create-frontend
27
+
28
+ # [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)
29
+
30
+ ### Bug Fixes
31
+
32
+ - **scaffold:** .bge-contentsクラス名のsが抜けていたので修正 ([c9b4757](https://github.com/d-zero-dev/frontend-env/commit/c9b4757e16aa35178883fed8e8e0fb5a34b24c90))
33
+ - **scaffold:** bge-style.scssのファイル名変更に伴う周辺処理の更新 ([bcca3a1](https://github.com/d-zero-dev/frontend-env/commit/bcca3a18d560694da914b207c01b9309c184ef39))
34
+
35
+ # [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)
36
+
37
+ **Note:** Version bump only for package @d-zero/create-frontend
38
+
39
+ # [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)
40
+
41
+ **Note:** Version bump only for package @d-zero/create-frontend
42
+
43
+ # [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)
44
+
45
+ **Note:** Version bump only for package @d-zero/create-frontend
46
+
47
+ # [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)
48
+
49
+ **Note:** Version bump only for package @d-zero/create-frontend
50
+
51
+ # [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)
52
+
53
+ **Note:** Version bump only for package @d-zero/create-frontend
54
+
55
+ # [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)
56
+
57
+ **Note:** Version bump only for package @d-zero/create-frontend
58
+
59
+ # [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)
60
+
61
+ **Note:** Version bump only for package @d-zero/create-frontend
62
+
63
+ # [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)
64
+
65
+ **Note:** Version bump only for package @d-zero/create-frontend
66
+
67
+ # [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)
68
+
69
+ **Note:** Version bump only for package @d-zero/create-frontend
70
+
71
+ # [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)
72
+
73
+ **Note:** Version bump only for package @d-zero/create-frontend
74
+
75
+ # [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)
76
+
77
+ **Note:** Version bump only for package @d-zero/create-frontend
78
+
79
+ # [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)
80
+
81
+ ### Features
82
+
83
+ - **create-frontend:** add `--debug` option ([835529e](https://github.com/d-zero-dev/frontend-env/commit/835529e798d634ed75dbb5ec8d7e3e75f58b0fae))
84
+ - **create-frontend:** add interactive mode ([e0cf69d](https://github.com/d-zero-dev/frontend-env/commit/e0cf69daca825b26fd490ea0ea6bc10a3f258c58))
85
+ - **create-frontend:** add settings for `type=burger` ([b755336](https://github.com/d-zero-dev/frontend-env/commit/b755336b704086adcc67af8111a49a0bcb5b82cd))
86
+ - **create-frontend:** add settings for `type=static` ([7298f7e](https://github.com/d-zero-dev/frontend-env/commit/7298f7edbda2cfdf267cd9145686be7cb125587f))
87
+
88
+ # [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)
89
+
90
+ **Note:** Version bump only for package @d-zero/create-frontend
91
+
92
+ # [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)
93
+
94
+ **Note:** Version bump only for package @d-zero/create-frontend
95
+
96
+ # [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)
97
+
98
+ **Note:** Version bump only for package @d-zero/create-frontend
99
+
100
+ # [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)
101
+
102
+ **Note:** Version bump only for package @d-zero/create-frontend
103
+
104
+ # [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)
105
+
106
+ **Note:** Version bump only for package @d-zero/create-frontend
107
+
108
+ # [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)
109
+
110
+ **Note:** Version bump only for package @d-zero/create-frontend
111
+
112
+ # [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)
113
+
114
+ **Note:** Version bump only for package @d-zero/create-frontend
115
+
116
+ # [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)
117
+
118
+ **Note:** Version bump only for package @d-zero/create-frontend
119
+
120
+ # [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)
121
+
122
+ **Note:** Version bump only for package @d-zero/create-frontend
123
+
124
+ # [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)
125
+
126
+ **Note:** Version bump only for package @d-zero/create-frontend
127
+
128
+ # [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)
129
+
130
+ **Note:** Version bump only for package @d-zero/create-frontend
131
+
132
+ # [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)
133
+
134
+ **Note:** Version bump only for package @d-zero/create-frontend
135
+
136
+ # [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)
137
+
138
+ **Note:** Version bump only for package @d-zero/create-frontend
139
+
140
+ # [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)
141
+
142
+ **Note:** Version bump only for package @d-zero/create-frontend
143
+
144
+ # [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)
145
+
146
+ ### Bug Fixes
147
+
148
+ - **scaffold:** 生成ファイルや静的ファイルがリント対象となっていたため除外設定を追加 ([0938636](https://github.com/d-zero-dev/frontend-env/commit/0938636ec260337914eaa4d0ab98aead709164fc))
149
+
150
+ # [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)
151
+
152
+ **Note:** Version bump only for package @d-zero/create-frontend
153
+
154
+ # [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)
155
+
156
+ **Note:** Version bump only for package @d-zero/create-frontend
157
+
158
+ # [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)
159
+
160
+ **Note:** Version bump only for package @d-zero/create-frontend
161
+
162
+ # [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)
163
+
164
+ ### Bug Fixes
165
+
166
+ - **repo:** fix each version ([50d50ad](https://github.com/d-zero-dev/frontend-env/commit/50d50adc605b700389e2945d03b72c5c4a00495a))
167
+
168
+ # [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)
169
+
170
+ **Note:** Version bump only for package @d-zero/create-frontend
171
+
6
172
  # [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
173
 
8
174
  **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.42",
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.42",
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": "05d2e3386535b08b726cc1766aef098363c0ce5f"
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,17 @@ export default function (plop) {
61
74
  .add([
62
75
  // Test directories
63
76
  '**/*.test/**/*',
64
- ]);
77
+ // Test Files
78
+ '*.test.*',
79
+ ])
80
+ .add(
81
+ // BurgerEditor
82
+ cli.flags.type === 'burger' ? [] : ['**/bge-*', '**/bge_*'],
83
+ )
84
+ .add(
85
+ // static
86
+ cli.flags.type === 'static' ? ['**/__tmpl/**/*'] : [],
87
+ );
65
88
 
66
89
  const scaffoldFiles = ig.filter(
67
90
  globSync('**/*', {
@@ -72,19 +95,32 @@ export default function (plop) {
72
95
  );
73
96
 
74
97
  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;
98
+ const { dest, doInstall } = answerToConfig(answers);
99
+
100
+ const { promise, resolve, reject } = Promise.withResolvers();
101
+
78
102
  if (doInstall) {
79
103
  const child = spawn('yarn', ['install'], {
80
104
  cwd: path.resolve(process.cwd(), dest),
81
105
  stdio: 'inherit',
82
106
  });
83
107
 
108
+ child.on('exit', (code) => {
109
+ if (code === 0) {
110
+ resolve(': success');
111
+ } else {
112
+ reject(new Error('Failed to install dependencies'));
113
+ }
114
+ });
115
+
84
116
  process.on('SIGINT', () => {
85
117
  child.kill('SIGINT');
86
118
  });
119
+ } else {
120
+ resolve(': skipped');
87
121
  }
122
+
123
+ return promise;
88
124
  });
89
125
 
90
126
  plop.setGenerator('basic', {
@@ -95,34 +131,43 @@ export default function (plop) {
95
131
  name: '__d-zero_project_type__',
96
132
  message: t`What's the type of project?`,
97
133
  choices: [
98
- //
99
- 'Static',
134
+ {
135
+ name: 'Static',
136
+ value: 'static',
137
+ },
100
138
  'CMS (WordPress etc.)',
101
139
  {
102
140
  name: 'CMS (baserCMS with BurgerEditor)',
103
141
  value: 'burger',
104
142
  },
105
143
  ],
106
- default: cli.flags.type ?? 'burger',
144
+ default: cli.flags.type,
107
145
  filter: (val) => val.toLowerCase(),
108
- when: !cli.flags.type,
146
+ when: interactive,
109
147
  },
110
148
  {
111
149
  type: 'input',
112
150
  name: '__d-zero_scaffold_dest__',
113
151
  message: t`Destination path`,
114
- default: '.',
115
- when: !cli.flags.type,
152
+ default: cli.flags.dir,
153
+ when: interactive,
116
154
  },
117
155
  {
118
156
  type: 'confirm',
119
157
  name: '__d-zero_scaffold_yarn_install__',
120
158
  message: t`Install dependencies with yarn?`,
121
- default: true,
122
- when: !cli.flags.type,
159
+ default: cli.flags.install,
160
+ when: interactive,
123
161
  },
124
162
  ],
125
163
  actions: function (answers) {
164
+ const config = answerToConfig(answers);
165
+
166
+ if (cli.flags.debug) {
167
+ // eslint-disable-next-line no-console
168
+ console.log(config);
169
+ }
170
+
126
171
  return [
127
172
  ...scaffoldFiles.map(
128
173
  /**
@@ -130,26 +175,43 @@ export default function (plop) {
130
175
  * @type {import('plop').AddActionConfig}
131
176
  */
132
177
  (originFile) => {
133
- const dest = answers['__d-zero_scaffold_dest__'] ?? cli.flags.dir ?? '.';
134
178
  return {
135
179
  type: 'add',
136
- path: path.resolve(dest, originFile),
180
+ path: path.resolve(config.dest, originFile),
137
181
  templateFile: path.resolve(scaffoldDir, originFile),
138
182
  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');
183
+ const nameCandidate = path.basename(path.resolve(config.dest));
184
+
185
+ switch (originFile) {
186
+ case 'package.json': {
187
+ const pkg = JSON.parse(content);
188
+ pkg._createdBy = `${pkg.name}@${pkg.version}`;
189
+ pkg.name = nameCandidate;
190
+ pkg.private = true;
191
+ delete pkg.version;
192
+ delete pkg.description;
193
+ delete pkg.repository;
194
+ delete pkg.author;
195
+ delete pkg.license;
196
+ delete pkg.publishConfig;
197
+ delete pkg.files;
198
+ content = JSON.stringify(pkg, null, '\t');
199
+ break;
200
+ }
201
+ case '__assets/_libs/data/blocks.cjs': {
202
+ if (config.type === 'burger') {
203
+ content = content.replace("blocks.html'", "bge-blocks.html'");
204
+ }
205
+ break;
206
+ }
207
+ case '__assets/htdocs/index.pug': {
208
+ if (config.type === 'static') {
209
+ content = fs.readFileSync(
210
+ path.resolve(scaffoldDir, '__assets/htdocs/__tmpl/000_home.pug'),
211
+ 'utf8',
212
+ );
213
+ }
214
+ }
153
215
  }
154
216
  return content;
155
217
  },
@@ -163,3 +225,15 @@ export default function (plop) {
163
225
  },
164
226
  });
165
227
  }
228
+
229
+ /**
230
+ *
231
+ * @param answers
232
+ */
233
+ function answerToConfig(answers) {
234
+ const type = answers['__d-zero_project_type__'] ?? cli.flags.type;
235
+ const dest = answers['__d-zero_scaffold_dest__'] ?? cli.flags.dir;
236
+ const doInstall = answers['__d-zero_scaffold_yarn_install__'] ?? cli.flags.install;
237
+
238
+ return { type, dest, doInstall };
239
+ }
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');