@d-zero/create-frontend 5.0.0-alpha.8 → 5.0.0-beta.0

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,180 @@
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-beta.0](https://github.com/d-zero-dev/frontend-env/compare/v5.0.0-alpha.46...v5.0.0-beta.0) (2025-06-20)
7
+
8
+ ### Bug Fixes
9
+
10
+ - resolve Yarn v4 compatibility issues in tests ([c83d417](https://github.com/d-zero-dev/frontend-env/commit/c83d4172356b816133eb0e2bb30da30f5cf42083))
11
+
12
+ ### Reverts
13
+
14
+ - Revert "chore(repo): migrate to Yarn v4" ([d9d6623](https://github.com/d-zero-dev/frontend-env/commit/d9d66235d04bc0b7c423a9d2a0678bfedd6022b3))
15
+
16
+ # [5.0.0-alpha.46](https://github.com/d-zero-dev/frontend-env/compare/v5.0.0-alpha.45...v5.0.0-alpha.46) (2025-05-19)
17
+
18
+ **Note:** Version bump only for package @d-zero/create-frontend
19
+
20
+ # [5.0.0-alpha.45](https://github.com/d-zero-dev/frontend-env/compare/v5.0.0-alpha.44...v5.0.0-alpha.45) (2025-04-11)
21
+
22
+ **Note:** Version bump only for package @d-zero/create-frontend
23
+
24
+ # [5.0.0-alpha.44](https://github.com/d-zero-dev/frontend-env/compare/v5.0.0-alpha.43...v5.0.0-alpha.44) (2025-03-12)
25
+
26
+ **Note:** Version bump only for package @d-zero/create-frontend
27
+
28
+ # [5.0.0-alpha.43](https://github.com/d-zero-dev/frontend-env/compare/v5.0.0-alpha.42...v5.0.0-alpha.43) (2025-03-12)
29
+
30
+ **Note:** Version bump only for package @d-zero/create-frontend
31
+
32
+ # [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)
33
+
34
+ ### Features
35
+
36
+ - **create-frontend:** add pattern for test files in plop configuration ([97e1f1e](https://github.com/d-zero-dev/frontend-env/commit/97e1f1e36f43cc98cadf18c71d304290fac74bce))
37
+
38
+ # [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)
39
+
40
+ **Note:** Version bump only for package @d-zero/create-frontend
41
+
42
+ # [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)
43
+
44
+ **Note:** Version bump only for package @d-zero/create-frontend
45
+
46
+ # [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)
47
+
48
+ **Note:** Version bump only for package @d-zero/create-frontend
49
+
50
+ # [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)
51
+
52
+ **Note:** Version bump only for package @d-zero/create-frontend
53
+
54
+ # [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)
55
+
56
+ ### Bug Fixes
57
+
58
+ - **scaffold:** .bge-contentsクラス名のsが抜けていたので修正 ([c9b4757](https://github.com/d-zero-dev/frontend-env/commit/c9b4757e16aa35178883fed8e8e0fb5a34b24c90))
59
+ - **scaffold:** bge-style.scssのファイル名変更に伴う周辺処理の更新 ([bcca3a1](https://github.com/d-zero-dev/frontend-env/commit/bcca3a18d560694da914b207c01b9309c184ef39))
60
+
61
+ # [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)
62
+
63
+ **Note:** Version bump only for package @d-zero/create-frontend
64
+
65
+ # [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)
66
+
67
+ **Note:** Version bump only for package @d-zero/create-frontend
68
+
69
+ # [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)
70
+
71
+ **Note:** Version bump only for package @d-zero/create-frontend
72
+
73
+ # [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)
74
+
75
+ **Note:** Version bump only for package @d-zero/create-frontend
76
+
77
+ # [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)
78
+
79
+ **Note:** Version bump only for package @d-zero/create-frontend
80
+
81
+ # [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)
82
+
83
+ **Note:** Version bump only for package @d-zero/create-frontend
84
+
85
+ # [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)
86
+
87
+ **Note:** Version bump only for package @d-zero/create-frontend
88
+
89
+ # [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)
90
+
91
+ **Note:** Version bump only for package @d-zero/create-frontend
92
+
93
+ # [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)
94
+
95
+ **Note:** Version bump only for package @d-zero/create-frontend
96
+
97
+ # [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)
98
+
99
+ **Note:** Version bump only for package @d-zero/create-frontend
100
+
101
+ # [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)
102
+
103
+ **Note:** Version bump only for package @d-zero/create-frontend
104
+
105
+ # [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)
106
+
107
+ ### Features
108
+
109
+ - **create-frontend:** add `--debug` option ([835529e](https://github.com/d-zero-dev/frontend-env/commit/835529e798d634ed75dbb5ec8d7e3e75f58b0fae))
110
+ - **create-frontend:** add interactive mode ([e0cf69d](https://github.com/d-zero-dev/frontend-env/commit/e0cf69daca825b26fd490ea0ea6bc10a3f258c58))
111
+ - **create-frontend:** add settings for `type=burger` ([b755336](https://github.com/d-zero-dev/frontend-env/commit/b755336b704086adcc67af8111a49a0bcb5b82cd))
112
+ - **create-frontend:** add settings for `type=static` ([7298f7e](https://github.com/d-zero-dev/frontend-env/commit/7298f7edbda2cfdf267cd9145686be7cb125587f))
113
+
114
+ # [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)
115
+
116
+ **Note:** Version bump only for package @d-zero/create-frontend
117
+
118
+ # [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)
119
+
120
+ **Note:** Version bump only for package @d-zero/create-frontend
121
+
122
+ # [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)
123
+
124
+ **Note:** Version bump only for package @d-zero/create-frontend
125
+
126
+ # [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)
127
+
128
+ **Note:** Version bump only for package @d-zero/create-frontend
129
+
130
+ # [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)
131
+
132
+ **Note:** Version bump only for package @d-zero/create-frontend
133
+
134
+ # [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)
135
+
136
+ **Note:** Version bump only for package @d-zero/create-frontend
137
+
138
+ # [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)
139
+
140
+ **Note:** Version bump only for package @d-zero/create-frontend
141
+
142
+ # [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)
143
+
144
+ **Note:** Version bump only for package @d-zero/create-frontend
145
+
146
+ # [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)
147
+
148
+ **Note:** Version bump only for package @d-zero/create-frontend
149
+
150
+ # [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)
151
+
152
+ **Note:** Version bump only for package @d-zero/create-frontend
153
+
154
+ # [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)
155
+
156
+ **Note:** Version bump only for package @d-zero/create-frontend
157
+
158
+ # [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)
159
+
160
+ **Note:** Version bump only for package @d-zero/create-frontend
161
+
162
+ # [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)
163
+
164
+ **Note:** Version bump only for package @d-zero/create-frontend
165
+
166
+ # [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)
167
+
168
+ **Note:** Version bump only for package @d-zero/create-frontend
169
+
170
+ # [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)
171
+
172
+ ### Bug Fixes
173
+
174
+ - **scaffold:** 生成ファイルや静的ファイルがリント対象となっていたため除外設定を追加 ([0938636](https://github.com/d-zero-dev/frontend-env/commit/0938636ec260337914eaa4d0ab98aead709164fc))
175
+
176
+ # [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)
177
+
178
+ **Note:** Version bump only for package @d-zero/create-frontend
179
+
6
180
  # [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)
7
181
 
8
182
  **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 CHANGED
@@ -5,6 +5,10 @@ import path from 'node:path';
5
5
  import { execa } from 'execa';
6
6
  import { describe, test, expect, beforeEach } from 'vitest';
7
7
 
8
+ /**
9
+ *
10
+ * @param task
11
+ */
8
12
  function getName(task) {
9
13
  return encodeURIComponent(`${task.suite.name}_${task.name}`.toLowerCase());
10
14
  }
@@ -14,14 +18,17 @@ beforeEach((ctx) => {
14
18
  });
15
19
 
16
20
  describe('CLI', () => {
17
- test('npx', async ({ tmpDir, task }) => {
18
- const dir = path.join(tmpDir, getName(task));
21
+ /**
22
+ *
23
+ * @param dir
24
+ * @param type
25
+ */
26
+ async function cliTest(dir, type) {
19
27
  const { stdout } = await execa(
20
28
  'npx',
21
29
  [
22
30
  '@d-zero/create-frontend',
23
- '--type',
24
- 'burger',
31
+ ...(type ? ['--type', type] : []),
25
32
  '--dir',
26
33
  dir,
27
34
  '--no-install',
@@ -34,28 +41,133 @@ describe('CLI', () => {
34
41
  },
35
42
  },
36
43
  );
37
- expect(stdout.replaceAll(path.sep, '/').split('\n')).toStrictEqual([
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}/.yarnrc.yml`,
62
+ `✔ ++ ${dir}/.textlintrc.js`,
63
+ `✔ ++ ${dir}/.textlintignore`,
64
+ `✔ ++ ${dir}/.stylelintrc`,
65
+ `✔ ++ ${dir}/.pug-lintrc`,
66
+ `✔ ++ ${dir}/.prettierrc.mjs`,
67
+ `✔ ++ ${dir}/.postcssrc.js`,
68
+ `✔ ++ ${dir}/.npmignore`,
69
+ `✔ ++ ${dir}/.gitignore`,
70
+ `✔ ++ ${dir}/.editorconfig`,
71
+ `✔ ++ ${dir}/.clinerules`,
72
+ `✔ ++ ${dir}/.clineignore`,
73
+ `✔ ++ ${dir}/ai-tasks/page-to-burger.md`,
74
+ `✔ ++ ${dir}/ai-tasks/create-page.md`,
75
+ `✔ ++ ${dir}/ai-tasks/create-component.md`,
76
+ `✔ ++ ${dir}/__info/print.txt`,
77
+ `✔ ++ ${dir}/__assets/htdocs/index.pug`,
78
+ `✔ ++ ${dir}/__assets/htdocs/js/script.ts`,
79
+ `✔ ++ ${dir}/__assets/htdocs/css/style.css`,
80
+ `✔ ++ ${dir}/__assets/htdocs/css/bge_style.css`,
81
+ `✔ ++ ${dir}/__assets/htdocs/__tmpl/index.pug`,
82
+ `✔ ++ ${dir}/__assets/htdocs/__tmpl/302_form_complete.pug`,
83
+ `✔ ++ ${dir}/__assets/htdocs/__tmpl/301_form_confirm.pug`,
84
+ `✔ ++ ${dir}/__assets/htdocs/__tmpl/300_form_input.pug`,
85
+ `✔ ++ ${dir}/__assets/htdocs/__tmpl/210_blog_index.pug`,
86
+ `✔ ++ ${dir}/__assets/htdocs/__tmpl/200_blog_index.pug`,
87
+ `✔ ++ ${dir}/__assets/htdocs/__tmpl/100_sub.pug`,
88
+ `✔ ++ ${dir}/__assets/htdocs/__tmpl/000_home.pug`,
89
+ `✔ ++ ${dir}/__assets/htdocs/__tmpl/.markuplintrc`,
90
+ `✔ ++ ${dir}/__assets/_libs/.markuplintrc`,
91
+ `✔ ++ ${dir}/__assets/_libs/style/general/img.css`,
92
+ `✔ ++ ${dir}/__assets/_libs/style/general/button.css`,
93
+ `✔ ++ ${dir}/__assets/_libs/style/general/body.css`,
94
+ `✔ ++ ${dir}/__assets/_libs/style/general/all.css`,
95
+ `✔ ++ ${dir}/__assets/_libs/style/base/root.css`,
96
+ `✔ ++ ${dir}/__assets/_libs/script/index.ts`,
97
+ `✔ ++ ${dir}/__assets/_libs/mixin/meta.pug`,
98
+ `✔ ++ ${dir}/__assets/_libs/img/bg-repeat-01.gif`,
99
+ `✔ ++ ${dir}/__assets/_libs/img/bg-arrow.svg`,
100
+ `✔ ++ ${dir}/__assets/_libs/data/data.yml`,
101
+ `✔ ++ ${dir}/__assets/_libs/data/blocks.js`,
102
+ `✔ ++ ${dir}/__assets/_libs/data/blocks.html`,
103
+ `✔ ++ ${dir}/__assets/_libs/data/bge-blocks.html`,
104
+ `✔ ++ ${dir}/__assets/_libs/data/.markuplintrc`,
105
+ `✔ ++ ${dir}/__assets/_libs/component/c-title-page.pug`,
106
+ `✔ ++ ${dir}/__assets/_libs/component/c-title-page.css`,
107
+ `✔ ++ ${dir}/__assets/_libs/component/c-pagination.pug`,
108
+ `✔ ++ ${dir}/__assets/_libs/component/c-pagination.css`,
109
+ `✔ ++ ${dir}/__assets/_libs/component/c-page-sub.css`,
110
+ `✔ ++ ${dir}/__assets/_libs/component/c-page-home.css`,
111
+ `✔ ++ ${dir}/__assets/_libs/component/c-nav-sitemap.pug`,
112
+ `✔ ++ ${dir}/__assets/_libs/component/c-nav-sitemap.css`,
113
+ `✔ ++ ${dir}/__assets/_libs/component/c-nav-global.pug`,
114
+ `✔ ++ ${dir}/__assets/_libs/component/c-nav-global.css`,
115
+ `✔ ++ ${dir}/__assets/_libs/component/c-nav-breadcrumb.pug`,
116
+ `✔ ++ ${dir}/__assets/_libs/component/c-nav-breadcrumb.css`,
117
+ `✔ ++ ${dir}/__assets/_libs/component/c-media.pug`,
118
+ `✔ ++ ${dir}/__assets/_libs/component/c-media.css`,
119
+ `✔ ++ ${dir}/__assets/_libs/component/c-media-list.css`,
120
+ `✔ ++ ${dir}/__assets/_libs/component/c-header.pug`,
121
+ `✔ ++ ${dir}/__assets/_libs/component/c-header.css`,
122
+ `✔ ++ ${dir}/__assets/_libs/component/c-footer.pug`,
123
+ `✔ ++ ${dir}/__assets/_libs/component/c-footer.css`,
124
+ `✔ ++ ${dir}/__assets/_libs/component/c-content-main.css`,
125
+ `✔ ++ ${dir}/__assets/_libs/component/c-content-index.css`,
126
+ `✔ ++ ${dir}/__assets/_libs/component/c-card.pug`,
127
+ `✔ ++ ${dir}/__assets/_libs/component/c-card.css`,
128
+ `✔ ++ ${dir}/__assets/_libs/component/c-card-list.css`,
129
+ `✔ ++ ${dir}/__assets/_libs/component/bge-contents.css`,
130
+ `✔ ++ ${dir}/.vscode/settings.json`,
131
+ `✔ ++ ${dir}/.vscode/extensions.json`,
132
+ `✔ ++ ${dir}/.husky/pre-commit`,
133
+ '✔ Install dependencies : skipped',
134
+ ]);
135
+ });
136
+
137
+ test('npx --type burger', async ({ tmpDir, task }) => {
138
+ const dir = path.join(tmpDir, getName(task));
139
+ const actual = await cliTest(dir, 'burger');
140
+ expect(actual).toStrictEqual([
38
141
  `✔ ++ ${dir}/tsconfig.json`,
142
+ `✔ ++ ${dir}/prh.yaml`,
39
143
  `✔ ++ ${dir}/package.json`,
144
+ `✔ ++ ${dir}/markuplint.config.js`,
40
145
  `✔ ++ ${dir}/lint-staged.config.mjs`,
41
- `✔ ++ ${dir}/eleventy.config.cjs`,
146
+ `✔ ++ ${dir}/eslint.config.js`,
147
+ `✔ ++ ${dir}/eleventy.config.mjs`,
42
148
  `✔ ++ ${dir}/cspell.json`,
43
149
  `✔ ++ ${dir}/README.md`,
44
150
  `✔ ++ ${dir}/CHANGELOG.md`,
151
+ `✔ ++ ${dir}/.yarnrc.yml`,
45
152
  `✔ ++ ${dir}/.textlintrc.js`,
153
+ `✔ ++ ${dir}/.textlintignore`,
46
154
  `✔ ++ ${dir}/.stylelintrc`,
47
155
  `✔ ++ ${dir}/.pug-lintrc`,
48
156
  `✔ ++ ${dir}/.prettierrc.mjs`,
49
157
  `✔ ++ ${dir}/.postcssrc.js`,
50
158
  `✔ ++ ${dir}/.npmignore`,
51
- `✔ ++ ${dir}/.markuplintrc`,
52
159
  `✔ ++ ${dir}/.gitignore`,
53
- `✔ ++ ${dir}/.eslintrc.cjs`,
54
160
  `✔ ++ ${dir}/.editorconfig`,
161
+ `✔ ++ ${dir}/.clinerules`,
162
+ `✔ ++ ${dir}/.clineignore`,
163
+ `✔ ++ ${dir}/ai-tasks/page-to-burger.md`,
164
+ `✔ ++ ${dir}/ai-tasks/create-page.md`,
165
+ `✔ ++ ${dir}/ai-tasks/create-component.md`,
166
+ `✔ ++ ${dir}/__info/print.txt`,
55
167
  `✔ ++ ${dir}/__assets/htdocs/index.pug`,
56
- `✔ ++ ${dir}/__assets/htdocs/.eslintrc`,
57
168
  `✔ ++ ${dir}/__assets/htdocs/js/script.ts`,
58
- `✔ ++ ${dir}/__assets/htdocs/css/style.scss`,
169
+ `✔ ++ ${dir}/__assets/htdocs/css/style.css`,
170
+ `✔ ++ ${dir}/__assets/htdocs/css/bge_style.css`,
59
171
  `✔ ++ ${dir}/__assets/htdocs/__tmpl/index.pug`,
60
172
  `✔ ++ ${dir}/__assets/htdocs/__tmpl/302_form_complete.pug`,
61
173
  `✔ ++ ${dir}/__assets/htdocs/__tmpl/301_form_confirm.pug`,
@@ -66,50 +178,126 @@ describe('CLI', () => {
66
178
  `✔ ++ ${dir}/__assets/htdocs/__tmpl/000_home.pug`,
67
179
  `✔ ++ ${dir}/__assets/htdocs/__tmpl/.markuplintrc`,
68
180
  `✔ ++ ${dir}/__assets/_libs/.markuplintrc`,
69
- `✔ ++ ${dir}/__assets/_libs/style/theme/_index.scss`,
70
- `✔ ++ ${dir}/__assets/_libs/style/theme/_font.scss`,
71
- `✔ ++ ${dir}/__assets/_libs/style/theme/_dimension.scss`,
72
- `✔ ++ ${dir}/__assets/_libs/style/theme/_color.scss`,
73
- `✔ ++ ${dir}/__assets/_libs/style/general/_img.scss`,
74
- `✔ ++ ${dir}/__assets/_libs/style/general/_button.scss`,
75
- `✔ ++ ${dir}/__assets/_libs/style/general/_body.scss`,
76
- `✔ ++ ${dir}/__assets/_libs/style/general/_all.scss`,
77
- `✔ ++ ${dir}/__assets/_libs/style/base/_root.scss`,
181
+ `✔ ++ ${dir}/__assets/_libs/style/general/img.css`,
182
+ `✔ ++ ${dir}/__assets/_libs/style/general/button.css`,
183
+ `✔ ++ ${dir}/__assets/_libs/style/general/body.css`,
184
+ `✔ ++ ${dir}/__assets/_libs/style/general/all.css`,
185
+ `✔ ++ ${dir}/__assets/_libs/style/base/root.css`,
186
+ `✔ ++ ${dir}/__assets/_libs/script/index.ts`,
187
+ `✔ ++ ${dir}/__assets/_libs/mixin/meta.pug`,
188
+ `✔ ++ ${dir}/__assets/_libs/img/bg-repeat-01.gif`,
189
+ `✔ ++ ${dir}/__assets/_libs/img/bg-arrow.svg`,
190
+ `✔ ++ ${dir}/__assets/_libs/data/data.yml`,
191
+ `✔ ++ ${dir}/__assets/_libs/data/blocks.js`,
192
+ `✔ ++ ${dir}/__assets/_libs/data/blocks.html`,
193
+ `✔ ++ ${dir}/__assets/_libs/data/bge-blocks.html`,
194
+ `✔ ++ ${dir}/__assets/_libs/data/.markuplintrc`,
195
+ `✔ ++ ${dir}/__assets/_libs/component/c-title-page.pug`,
196
+ `✔ ++ ${dir}/__assets/_libs/component/c-title-page.css`,
197
+ `✔ ++ ${dir}/__assets/_libs/component/c-pagination.pug`,
198
+ `✔ ++ ${dir}/__assets/_libs/component/c-pagination.css`,
199
+ `✔ ++ ${dir}/__assets/_libs/component/c-page-sub.css`,
200
+ `✔ ++ ${dir}/__assets/_libs/component/c-page-home.css`,
201
+ `✔ ++ ${dir}/__assets/_libs/component/c-nav-sitemap.pug`,
202
+ `✔ ++ ${dir}/__assets/_libs/component/c-nav-sitemap.css`,
203
+ `✔ ++ ${dir}/__assets/_libs/component/c-nav-global.pug`,
204
+ `✔ ++ ${dir}/__assets/_libs/component/c-nav-global.css`,
205
+ `✔ ++ ${dir}/__assets/_libs/component/c-nav-breadcrumb.pug`,
206
+ `✔ ++ ${dir}/__assets/_libs/component/c-nav-breadcrumb.css`,
207
+ `✔ ++ ${dir}/__assets/_libs/component/c-media.pug`,
208
+ `✔ ++ ${dir}/__assets/_libs/component/c-media.css`,
209
+ `✔ ++ ${dir}/__assets/_libs/component/c-media-list.css`,
210
+ `✔ ++ ${dir}/__assets/_libs/component/c-header.pug`,
211
+ `✔ ++ ${dir}/__assets/_libs/component/c-header.css`,
212
+ `✔ ++ ${dir}/__assets/_libs/component/c-footer.pug`,
213
+ `✔ ++ ${dir}/__assets/_libs/component/c-footer.css`,
214
+ `✔ ++ ${dir}/__assets/_libs/component/c-content-main.css`,
215
+ `✔ ++ ${dir}/__assets/_libs/component/c-content-index.css`,
216
+ `✔ ++ ${dir}/__assets/_libs/component/c-card.pug`,
217
+ `✔ ++ ${dir}/__assets/_libs/component/c-card.css`,
218
+ `✔ ++ ${dir}/__assets/_libs/component/c-card-list.css`,
219
+ `✔ ++ ${dir}/__assets/_libs/component/bge-contents.css`,
220
+ `✔ ++ ${dir}/.vscode/settings.json`,
221
+ `✔ ++ ${dir}/.vscode/extensions.json`,
222
+ `✔ ++ ${dir}/.husky/pre-commit`,
223
+ '✔ Install dependencies : skipped',
224
+ ]);
225
+ });
226
+
227
+ test('npx --type static', async ({ tmpDir, task }) => {
228
+ const dir = path.join(tmpDir, getName(task));
229
+ const actual = await cliTest(dir, 'static');
230
+ expect(actual).toStrictEqual([
231
+ `✔ ++ ${dir}/tsconfig.json`,
232
+ `✔ ++ ${dir}/prh.yaml`,
233
+ `✔ ++ ${dir}/package.json`,
234
+ `✔ ++ ${dir}/markuplint.config.js`,
235
+ `✔ ++ ${dir}/lint-staged.config.mjs`,
236
+ `✔ ++ ${dir}/eslint.config.js`,
237
+ `✔ ++ ${dir}/eleventy.config.mjs`,
238
+ `✔ ++ ${dir}/cspell.json`,
239
+ `✔ ++ ${dir}/README.md`,
240
+ `✔ ++ ${dir}/CHANGELOG.md`,
241
+ `✔ ++ ${dir}/.yarnrc.yml`,
242
+ `✔ ++ ${dir}/.textlintrc.js`,
243
+ `✔ ++ ${dir}/.textlintignore`,
244
+ `✔ ++ ${dir}/.stylelintrc`,
245
+ `✔ ++ ${dir}/.pug-lintrc`,
246
+ `✔ ++ ${dir}/.prettierrc.mjs`,
247
+ `✔ ++ ${dir}/.postcssrc.js`,
248
+ `✔ ++ ${dir}/.npmignore`,
249
+ `✔ ++ ${dir}/.gitignore`,
250
+ `✔ ++ ${dir}/.editorconfig`,
251
+ `✔ ++ ${dir}/.clinerules`,
252
+ `✔ ++ ${dir}/.clineignore`,
253
+ `✔ ++ ${dir}/ai-tasks/page-to-burger.md`,
254
+ `✔ ++ ${dir}/ai-tasks/create-page.md`,
255
+ `✔ ++ ${dir}/ai-tasks/create-component.md`,
256
+ `✔ ++ ${dir}/__info/print.txt`,
257
+ `✔ ++ ${dir}/__assets/htdocs/index.pug`,
258
+ `✔ ++ ${dir}/__assets/htdocs/js/script.ts`,
259
+ `✔ ++ ${dir}/__assets/htdocs/css/style.css`,
260
+ `✔ ++ ${dir}/__assets/_libs/.markuplintrc`,
261
+ `✔ ++ ${dir}/__assets/_libs/style/general/img.css`,
262
+ `✔ ++ ${dir}/__assets/_libs/style/general/button.css`,
263
+ `✔ ++ ${dir}/__assets/_libs/style/general/body.css`,
264
+ `✔ ++ ${dir}/__assets/_libs/style/general/all.css`,
265
+ `✔ ++ ${dir}/__assets/_libs/style/base/root.css`,
78
266
  `✔ ++ ${dir}/__assets/_libs/script/index.ts`,
79
267
  `✔ ++ ${dir}/__assets/_libs/mixin/meta.pug`,
80
268
  `✔ ++ ${dir}/__assets/_libs/img/bg-repeat-01.gif`,
81
269
  `✔ ++ ${dir}/__assets/_libs/img/bg-arrow.svg`,
82
270
  `✔ ++ ${dir}/__assets/_libs/data/data.yml`,
271
+ `✔ ++ ${dir}/__assets/_libs/data/blocks.js`,
83
272
  `✔ ++ ${dir}/__assets/_libs/data/blocks.html`,
84
- `✔ ++ ${dir}/__assets/_libs/data/blocks.cjs`,
85
- `✔ ++ ${dir}/__assets/_libs/data/blocks-burger.html`,
86
273
  `✔ ++ ${dir}/__assets/_libs/data/.markuplintrc`,
87
- `✔ ++ ${dir}/__assets/_libs/component/_c-title-page.scss`,
88
- `✔ ++ ${dir}/__assets/_libs/component/_c-title-page.pug`,
89
- `✔ ++ ${dir}/__assets/_libs/component/_c-pagination.scss`,
90
- `✔ ++ ${dir}/__assets/_libs/component/_c-pagination.pug`,
91
- `✔ ++ ${dir}/__assets/_libs/component/_c-page-sub.scss`,
92
- `✔ ++ ${dir}/__assets/_libs/component/_c-page-home.scss`,
93
- `✔ ++ ${dir}/__assets/_libs/component/_c-nav-sitemap.scss`,
94
- `✔ ++ ${dir}/__assets/_libs/component/_c-nav-sitemap.pug`,
95
- `✔ ++ ${dir}/__assets/_libs/component/_c-nav-global.scss`,
96
- `✔ ++ ${dir}/__assets/_libs/component/_c-nav-global.pug`,
97
- `✔ ++ ${dir}/__assets/_libs/component/_c-nav-breadcrumb.scss`,
98
- `✔ ++ ${dir}/__assets/_libs/component/_c-nav-breadcrumb.pug`,
99
- `✔ ++ ${dir}/__assets/_libs/component/_c-media.scss`,
100
- `✔ ++ ${dir}/__assets/_libs/component/_c-media.pug`,
101
- `✔ ++ ${dir}/__assets/_libs/component/_c-media-list.scss`,
102
- `✔ ++ ${dir}/__assets/_libs/component/_c-header.scss`,
103
- `✔ ++ ${dir}/__assets/_libs/component/_c-header.pug`,
104
- `✔ ++ ${dir}/__assets/_libs/component/_c-footer.scss`,
105
- `✔ ++ ${dir}/__assets/_libs/component/_c-footer.pug`,
106
- `✔ ++ ${dir}/__assets/_libs/component/_c-content-main.scss`,
107
- `✔ ++ ${dir}/__assets/_libs/component/_c-content-index.scss`,
108
- `✔ ++ ${dir}/__assets/_libs/component/_c-card.scss`,
109
- `✔ ++ ${dir}/__assets/_libs/component/_c-card.pug`,
110
- `✔ ++ ${dir}/__assets/_libs/component/_c-card-list.scss`,
274
+ `✔ ++ ${dir}/__assets/_libs/component/c-title-page.pug`,
275
+ `✔ ++ ${dir}/__assets/_libs/component/c-title-page.css`,
276
+ `✔ ++ ${dir}/__assets/_libs/component/c-pagination.pug`,
277
+ `✔ ++ ${dir}/__assets/_libs/component/c-pagination.css`,
278
+ `✔ ++ ${dir}/__assets/_libs/component/c-page-sub.css`,
279
+ `✔ ++ ${dir}/__assets/_libs/component/c-page-home.css`,
280
+ `✔ ++ ${dir}/__assets/_libs/component/c-nav-sitemap.pug`,
281
+ `✔ ++ ${dir}/__assets/_libs/component/c-nav-sitemap.css`,
282
+ `✔ ++ ${dir}/__assets/_libs/component/c-nav-global.pug`,
283
+ `✔ ++ ${dir}/__assets/_libs/component/c-nav-global.css`,
284
+ `✔ ++ ${dir}/__assets/_libs/component/c-nav-breadcrumb.pug`,
285
+ `✔ ++ ${dir}/__assets/_libs/component/c-nav-breadcrumb.css`,
286
+ `✔ ++ ${dir}/__assets/_libs/component/c-media.pug`,
287
+ `✔ ++ ${dir}/__assets/_libs/component/c-media.css`,
288
+ `✔ ++ ${dir}/__assets/_libs/component/c-media-list.css`,
289
+ `✔ ++ ${dir}/__assets/_libs/component/c-header.pug`,
290
+ `✔ ++ ${dir}/__assets/_libs/component/c-header.css`,
291
+ `✔ ++ ${dir}/__assets/_libs/component/c-footer.pug`,
292
+ `✔ ++ ${dir}/__assets/_libs/component/c-footer.css`,
293
+ `✔ ++ ${dir}/__assets/_libs/component/c-content-main.css`,
294
+ `✔ ++ ${dir}/__assets/_libs/component/c-content-index.css`,
295
+ `✔ ++ ${dir}/__assets/_libs/component/c-card.pug`,
296
+ `✔ ++ ${dir}/__assets/_libs/component/c-card.css`,
297
+ `✔ ++ ${dir}/__assets/_libs/component/c-card-list.css`,
111
298
  `✔ ++ ${dir}/.vscode/settings.json`,
112
299
  `✔ ++ ${dir}/.vscode/extensions.json`,
300
+ `✔ ++ ${dir}/.husky/pre-commit`,
113
301
  '✔ Install dependencies : skipped',
114
302
  ]);
115
303
  });
package/package.json CHANGED
@@ -1,11 +1,10 @@
1
1
  {
2
2
  "name": "@d-zero/create-frontend",
3
- "version": "5.0.0-alpha.8",
3
+ "version": "5.0.0-beta.0",
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.",
7
7
  "license": "MIT",
8
- "private": false,
9
8
  "publishConfig": {
10
9
  "access": "public"
11
10
  },
@@ -14,15 +13,16 @@
14
13
  "create-dzero-frontend": "./index.js"
15
14
  },
16
15
  "dependencies": {
17
- "@d-zero/scaffold": "5.0.0-alpha.8",
18
- "glob": "10.3.16",
19
- "i18n-js": "4.4.3",
20
- "ignore": "5.3.1",
16
+ "@d-zero/scaffold": "5.0.0-beta.0",
17
+ "glob": "11.0.3",
18
+ "i18n-js": "4.5.1",
19
+ "ignore": "7.0.5",
21
20
  "meow": "13.2.0",
22
21
  "plop": "4.0.1"
23
22
  },
24
23
  "devDependencies": {
25
- "@types/glob": "8.1.0"
24
+ "@types/glob": "8.1.0",
25
+ "execa": "9.6.0"
26
26
  },
27
- "gitHead": "54795ac0cc526ff91b6fba685240b1578a43bd4d"
27
+ "gitHead": "5cc4a9e00ee763e56923ae878704e237d9ce3705"
28
28
  }
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,9 +95,7 @@ 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);
78
99
 
79
100
  const { promise, resolve, reject } = Promise.withResolvers();
80
101
 
@@ -110,34 +131,43 @@ export default function (plop) {
110
131
  name: '__d-zero_project_type__',
111
132
  message: t`What's the type of project?`,
112
133
  choices: [
113
- //
114
- 'Static',
134
+ {
135
+ name: 'Static',
136
+ value: 'static',
137
+ },
115
138
  'CMS (WordPress etc.)',
116
139
  {
117
140
  name: 'CMS (baserCMS with BurgerEditor)',
118
141
  value: 'burger',
119
142
  },
120
143
  ],
121
- default: cli.flags.type ?? 'burger',
144
+ default: cli.flags.type,
122
145
  filter: (val) => val.toLowerCase(),
123
- when: !cli.flags.type,
146
+ when: interactive,
124
147
  },
125
148
  {
126
149
  type: 'input',
127
150
  name: '__d-zero_scaffold_dest__',
128
151
  message: t`Destination path`,
129
- default: '.',
130
- when: !cli.flags.type,
152
+ default: cli.flags.dir,
153
+ when: interactive,
131
154
  },
132
155
  {
133
156
  type: 'confirm',
134
157
  name: '__d-zero_scaffold_yarn_install__',
135
158
  message: t`Install dependencies with yarn?`,
136
- default: true,
137
- when: !cli.flags.type,
159
+ default: cli.flags.install,
160
+ when: interactive,
138
161
  },
139
162
  ],
140
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
+
141
171
  return [
142
172
  ...scaffoldFiles.map(
143
173
  /**
@@ -145,26 +175,43 @@ export default function (plop) {
145
175
  * @type {import('plop').AddActionConfig}
146
176
  */
147
177
  (originFile) => {
148
- const dest = answers['__d-zero_scaffold_dest__'] ?? cli.flags.dir ?? '.';
149
178
  return {
150
179
  type: 'add',
151
- path: path.resolve(dest, originFile),
180
+ path: path.resolve(config.dest, originFile),
152
181
  templateFile: path.resolve(scaffoldDir, originFile),
153
182
  transform(content) {
154
- if (originFile === 'package.json') {
155
- const nameCandidate = path.basename(path.resolve(dest));
156
- const pkg = JSON.parse(content);
157
- pkg._createdBy = `${pkg.name}@${pkg.version}`;
158
- pkg.name = nameCandidate;
159
- pkg.private = true;
160
- delete pkg.version;
161
- delete pkg.description;
162
- delete pkg.repository;
163
- delete pkg.author;
164
- delete pkg.license;
165
- delete pkg.publishConfig;
166
- delete pkg.files;
167
- 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
+ }
168
215
  }
169
216
  return content;
170
217
  },
@@ -178,3 +225,15 @@ export default function (plop) {
178
225
  },
179
226
  });
180
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');