@d-zero/create-frontend 5.0.0-beta.9 → 5.0.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.
package/CHANGELOG.md CHANGED
@@ -3,6 +3,69 @@
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](https://github.com/d-zero-dev/frontend-env/compare/v5.0.0-beta.19...v5.0.0) (2026-01-05)
7
+
8
+ **Note:** Version bump only for package @d-zero/create-frontend
9
+
10
+ # [5.0.0-beta.19](https://github.com/d-zero-dev/frontend-env/compare/v5.0.0-beta.18...v5.0.0-beta.19) (2025-12-22)
11
+
12
+ **Note:** Version bump only for package @d-zero/create-frontend
13
+
14
+ # [5.0.0-beta.18](https://github.com/d-zero-dev/frontend-env/compare/v5.0.0-beta.17...v5.0.0-beta.18) (2025-11-25)
15
+
16
+ **Note:** Version bump only for package @d-zero/create-frontend
17
+
18
+ # [5.0.0-beta.17](https://github.com/d-zero-dev/frontend-env/compare/v5.0.0-beta.16...v5.0.0-beta.17) (2025-10-23)
19
+
20
+ **Note:** Version bump only for package @d-zero/create-frontend
21
+
22
+ # [5.0.0-beta.16](https://github.com/d-zero-dev/frontend-env/compare/v5.0.0-beta.15...v5.0.0-beta.16) (2025-10-23)
23
+
24
+ ### Features
25
+
26
+ - **create-frontend:** remove burger editor scripts and add css dependency for basercms ([609d11c](https://github.com/d-zero-dev/frontend-env/commit/609d11cba279068aac411ec240f7c5d4bec24370))
27
+
28
+ # [5.0.0-beta.15](https://github.com/d-zero-dev/frontend-env/compare/v5.0.0-beta.14...v5.0.0-beta.15) (2025-10-20)
29
+
30
+ **Note:** Version bump only for package @d-zero/create-frontend
31
+
32
+ # [5.0.0-beta.14](https://github.com/d-zero-dev/frontend-env/compare/v5.0.0-beta.13...v5.0.0-beta.14) (2025-10-20)
33
+
34
+ ### Bug Fixes
35
+
36
+ - **create-frontend:** prevent gitignore file copy from being skipped ([6b80db7](https://github.com/d-zero-dev/frontend-env/commit/6b80db70238b3e3cb403a18a4b1f03f047ef144c))
37
+
38
+ # [5.0.0-beta.13](https://github.com/d-zero-dev/frontend-env/compare/v5.0.0-beta.12...v5.0.0-beta.13) (2025-10-20)
39
+
40
+ ### Bug Fixes
41
+
42
+ - **create-frontend:** correct typo in volta-install-node command ([a18fda9](https://github.com/d-zero-dev/frontend-env/commit/a18fda9bbfbbeab1ae5233d4eb5655936b1ed458))
43
+
44
+ # [5.0.0-beta.12](https://github.com/d-zero-dev/frontend-env/compare/v5.0.0-beta.11...v5.0.0-beta.12) (2025-10-20)
45
+
46
+ ### Features
47
+
48
+ - **create-frontend:** add volta and node installation support ([29e4fff](https://github.com/d-zero-dev/frontend-env/commit/29e4fff6af41be56397ba25f699e946a1f16c10a))
49
+
50
+ # [5.0.0-beta.11](https://github.com/d-zero-dev/frontend-env/compare/v5.0.0-beta.10...v5.0.0-beta.11) (2025-10-20)
51
+
52
+ ### Features
53
+
54
+ - **create-frontend:** improve command execution and add volta setup ([e54a526](https://github.com/d-zero-dev/frontend-env/commit/e54a526da7629a9b86fb6d5a53f0aaba72118d9b))
55
+
56
+ # [5.0.0-beta.10](https://github.com/d-zero-dev/frontend-env/compare/v5.0.0-beta.9...v5.0.0-beta.10) (2025-10-20)
57
+
58
+ ### Bug Fixes
59
+
60
+ - **create-frontend:** correct file extension from .cjs to .js in blocks data path ([b425f76](https://github.com/d-zero-dev/frontend-env/commit/b425f76b9fb51302a0b26f0149407787679f33ac))
61
+
62
+ ### Features
63
+
64
+ - **create-frontend:** add gitignore rewrite functionality ([e2a6e75](https://github.com/d-zero-dev/frontend-env/commit/e2a6e75ad6d58416cee8b35642ccdc542532ab73))
65
+ - **create-frontend:** add library copying functionality for baserCMS projects ([8e73300](https://github.com/d-zero-dev/frontend-env/commit/8e73300a730aa7dcdcc2f19bb57b99eb5f4d561c))
66
+ - **create-frontend:** update project type options and remove unused blocks.html ([b003628](https://github.com/d-zero-dev/frontend-env/commit/b00362847c11493ab14f8c87c01f9577563f2e07))
67
+ - **scaffold:** add baserCMS-specific meta template and conditional inclusion ([885fe35](https://github.com/d-zero-dev/frontend-env/commit/885fe352ecb692cd1ccf3ca4ee1d82749193a60d))
68
+
6
69
  # [5.0.0-beta.9](https://github.com/d-zero-dev/frontend-env/compare/v5.0.0-beta.8...v5.0.0-beta.9) (2025-10-05)
7
70
 
8
71
  **Note:** Version bump only for package @d-zero/create-frontend
package/README.md CHANGED
@@ -7,11 +7,61 @@
7
7
  空のリポジトリで次のパッケージを実行します。
8
8
 
9
9
  ```shell
10
+ yarn create @d-zero/frontend
11
+
12
+ # 非推奨: `.gitignore`が生成ができない
10
13
  npx @d-zero/create-frontend
14
+ ```
11
15
 
12
- # もしくは
16
+ ### オプション
13
17
 
14
- yarn create @d-zero/frontend
18
+ | オプション | 短縮形 | 説明 | デフォルト値 |
19
+ | ----------- | ------ | ------------------------------------------------------------------------------ | ------------------------- |
20
+ | `--type` | `-t` | プロジェクトのタイプを指定します。指定した場合、対話モードはスキップされます。 | `static` |
21
+ | `--dir` | `-d` | 出力先ディレクトリを指定します。 | `.`(現在のディレクトリ) |
22
+ | `--install` | - | スキャフォールディング後にyarnで依存関係をインストールします。 | `true` |
23
+
24
+ #### プロジェクトタイプ
25
+
26
+ ##### `static` - 静的サイト
27
+
28
+ - **用途**: 静的なWebサイトの開発
29
+ - **特徴**:
30
+ - [BurgerEditor Local App](https://github.com/d-zero-dev/BurgerEditor) v4 が組み込まれており、ローカル環境でのビジュアル編集が可能
31
+ - [kamado](https://github.com/kamado-io/kamado) による静的サイトジェネレーター
32
+ - **開発コマンド**:
33
+ - `yarn dev`: 開発サーバー起動(http://localhost:8000/)
34
+ - `yarn bge`: BurgerEditor Local App 起動(http://localhost:8100/)
35
+ - `yarn build`: 本番用ビルド
36
+
37
+ ##### `basercms4` - baserCMS v4
38
+
39
+ - **用途**: [baserCMS](https://basercms.net/) v4 のテーマ開発
40
+ - **特徴**:
41
+ - BurgerEditor v2 対応のテーマファイル
42
+ - baserCMS 固有のテンプレート構造
43
+ - jQuery および関連ライブラリが自動で依存関係に追加
44
+ - baserCMS のテンプレート変数やヘルパー関数に対応
45
+ - BurgerEditor のブロック定義ファイル(`bge-blocks-v2.html`)を使用
46
+ - **追加される依存関係**:
47
+ - `jquery`: 最新版
48
+ - `jquery-colorbox`: v1.5
49
+
50
+ ### 使用例
51
+
52
+ ```shell
53
+ # 対話モードで実行
54
+ npx @d-zero/create-frontend
55
+
56
+ # 静的サイトプロジェクトを指定ディレクトリに作成し、依存関係をインストール
57
+ npx @d-zero/create-frontend --type static --dir ./my-project --install
58
+
59
+ # baserCMS v4プロジェクトを作成(依存関係のインストールはスキップ)
60
+ yarn create @d-zero/frontend --type basercms4 --dir ./my-cms --no-install
15
61
  ```
16
62
 
63
+ ### 注意事項
64
+
65
+ オプションを指定せずにコマンドを実行すると、対話モードが開始され、プロジェクトを段階的に設定できます。
66
+
17
67
  インストールで展開されるファイルは[`@d-zero/scaffold`](https://github.com/d-zero-dev/frontend-env/blob/main/packages/%40d-zero/scaffold/)に格納されています。
package/command.js ADDED
@@ -0,0 +1,48 @@
1
+ import { spawn } from 'node:child_process';
2
+
3
+ /**
4
+ *
5
+ * @param {string} commandName
6
+ * @param {string[]} args
7
+ * @param {import("node:child_process").SpawnOptionsWithoutStdio} options
8
+ * @returns {Promise<string>}
9
+ */
10
+ export async function command(commandName, args, options) {
11
+ return new Promise((resolve, reject) => {
12
+ const child = spawn(commandName, args, options);
13
+
14
+ child.on('error', (error) => {
15
+ reject(error);
16
+ });
17
+
18
+ process.on('SIGINT', () => {
19
+ child.kill('SIGINT');
20
+ });
21
+
22
+ if (child.stdout) {
23
+ let returnValue = '';
24
+
25
+ child.stdout.on('data', (data) => {
26
+ returnValue += data.toString();
27
+ });
28
+
29
+ child.stdout.on('end', () => {
30
+ resolve(returnValue.trim());
31
+ });
32
+
33
+ return;
34
+ }
35
+
36
+ child.on('exit', (code) => {
37
+ if (code !== 0) {
38
+ reject(
39
+ new Error(
40
+ `Command "${commandName} ${args.join(' ')}" exited with code ${code}`,
41
+ ),
42
+ );
43
+ return;
44
+ }
45
+ resolve('');
46
+ });
47
+ });
48
+ }
package/index.spec.js CHANGED
@@ -1,3 +1,4 @@
1
+ import { createHash } from 'node:crypto';
1
2
  import fs from 'node:fs';
2
3
  import os from 'node:os';
3
4
  import path from 'node:path';
@@ -10,7 +11,7 @@ import { describe, test, expect, beforeEach } from 'vitest';
10
11
  * @param task
11
12
  */
12
13
  function getName(task) {
13
- return encodeURIComponent(`${task.suite.name}_${task.name}`.toLowerCase());
14
+ return createHash('sha256').update(`${task.suite.name}_${task.name}`).digest('hex');
14
15
  }
15
16
 
16
17
  beforeEach((ctx) => {
@@ -38,217 +39,195 @@ describe('CLI', () => {
38
39
  failed: true,
39
40
  env: {
40
41
  NODE_NO_WARNINGS: '1',
42
+ NO_COLOR: '1',
43
+ FORCE_COLOR: '0',
41
44
  },
42
45
  },
43
46
  );
44
- return stdout.replaceAll(path.sep, '/').split('\n');
47
+ return stdout
48
+ .replaceAll(path.sep, '/')
49
+ .split('\n')
50
+ .filter((line) => line.trim() !== '');
45
51
  }
46
52
 
47
53
  test('npx', async ({ tmpDir, task }) => {
48
54
  const dir = path.join(tmpDir, getName(task));
49
55
  const actual = await cliTest(dir);
50
56
  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}/burgereditor.config.js`,
60
- `✔ ++ ${dir}/README.md`,
61
- `✔ ++ ${dir}/CHANGELOG.md`,
62
- `✔ ++ ${dir}/.yarnrc.yml`,
63
- `✔ ++ ${dir}/.textlintrc.js`,
64
- `✔ ++ ${dir}/.textlintignore`,
65
- `✔ ++ ${dir}/.stylelintrc`,
66
- `✔ ++ ${dir}/.pug-lintrc`,
67
- `✔ ++ ${dir}/.prettierrc.mjs`,
68
- `✔ ++ ${dir}/.postcssrc.js`,
69
- `✔ ++ ${dir}/.npmignore`,
70
- `✔ ++ ${dir}/.gitignore`,
71
57
  `✔ ++ ${dir}/.editorconfig`,
72
- `✔ ++ ${dir}/.clinerules`,
73
- `✔ ++ ${dir}/.clineignore`,
74
- `✔ ++ ${dir}/htdocs/files/images/sample.png`,
75
- `✔ ++ ${dir}/ai-tasks/page-to-burger.md`,
76
- `✔ ++ ${dir}/ai-tasks/create-page.md`,
77
- `✔ ++ ${dir}/ai-tasks/create-component.md`,
78
- `✔ ++ ${dir}/__info/print.txt`,
79
- `✔ ++ ${dir}/__assets/htdocs/index.pug`,
80
- `✔ ++ ${dir}/__assets/htdocs/sample/index.html`,
81
- `✔ ++ ${dir}/__assets/htdocs/js/script.ts`,
82
- `✔ ++ ${dir}/__assets/htdocs/css/style.css`,
83
- `✔ ++ ${dir}/__assets/htdocs/css/bge_style.css`,
84
- `✔ ++ ${dir}/__assets/htdocs/__tmpl/index.pug`,
85
- `✔ ++ ${dir}/__assets/htdocs/__tmpl/302_form_complete.pug`,
86
- `✔ ++ ${dir}/__assets/htdocs/__tmpl/302_form_complete.json`,
87
- `✔ ++ ${dir}/__assets/htdocs/__tmpl/301_form_confirm.pug`,
88
- `✔ ++ ${dir}/__assets/htdocs/__tmpl/301_form_confirm.json`,
89
- `✔ ++ ${dir}/__assets/htdocs/__tmpl/300_form_input.pug`,
90
- `✔ ++ ${dir}/__assets/htdocs/__tmpl/300_form_input.json`,
91
- `✔ ++ ${dir}/__assets/htdocs/__tmpl/210_blog_index.pug`,
92
- `✔ ++ ${dir}/__assets/htdocs/__tmpl/210_blog_index.json`,
93
- `✔ ++ ${dir}/__assets/htdocs/__tmpl/200_blog_index.pug`,
94
- `✔ ++ ${dir}/__assets/htdocs/__tmpl/200_blog_index.json`,
95
- `✔ ++ ${dir}/__assets/htdocs/__tmpl/100_sub.pug`,
96
- `✔ ++ ${dir}/__assets/htdocs/__tmpl/100_sub.json`,
97
- `✔ ++ ${dir}/__assets/htdocs/__tmpl/000_home.pug`,
98
- `✔ ++ ${dir}/__assets/htdocs/__tmpl/000_home.json`,
99
- `✔ ++ ${dir}/__assets/htdocs/__tmpl/.markuplintrc`,
58
+ `✔ ++ ${dir}/.gitignore`,
59
+ `✔ ++ ${dir}/.husky/pre-commit`,
60
+ `✔ ++ ${dir}/.npmignore`,
61
+ `✔ ++ ${dir}/.postcssrc.js`,
62
+ `✔ ++ ${dir}/.prettierrc.mjs`,
63
+ `✔ ++ ${dir}/.pug-lintrc`,
64
+ `✔ ++ ${dir}/.stylelintrc`,
65
+ `✔ ++ ${dir}/.textlintignore`,
66
+ `✔ ++ ${dir}/.textlintrc.js`,
67
+ `✔ ++ ${dir}/.vscode/extensions.json`,
68
+ `✔ ++ ${dir}/.vscode/settings.json`,
69
+ `✔ ++ ${dir}/.yarnrc.yml`,
70
+ `✔ ++ ${dir}/CHANGELOG.md`,
71
+ `✔ ++ ${dir}/README.md`,
100
72
  `✔ ++ ${dir}/__assets/_libs/.markuplintrc`,
101
- `✔ ++ ${dir}/__assets/_libs/style/general/img.css`,
102
- `✔ ++ ${dir}/__assets/_libs/style/general/button.css`,
103
- `✔ ++ ${dir}/__assets/_libs/style/general/body.css`,
104
- `✔ ++ ${dir}/__assets/_libs/style/general/all.css`,
105
- `✔ ++ ${dir}/__assets/_libs/style/base/root.css`,
106
- `✔ ++ ${dir}/__assets/_libs/script/index.ts`,
107
- `✔ ++ ${dir}/__assets/_libs/mixin/meta.pug`,
108
- `✔ ++ ${dir}/__assets/_libs/layouts/sub.pug`,
109
- `✔ ++ ${dir}/__assets/_libs/layouts/home.pug`,
110
- `✔ ++ ${dir}/__assets/_libs/img/bg-repeat-01.gif`,
111
- `✔ ++ ${dir}/__assets/_libs/img/bg-arrow.svg`,
112
- `✔ ++ ${dir}/__assets/_libs/data/titlelist.js`,
113
- `✔ ++ ${dir}/__assets/_libs/data/data.yml`,
114
- `✔ ++ ${dir}/__assets/_libs/data/breadcrumbs.js`,
115
- `✔ ++ ${dir}/__assets/_libs/data/blocks.js`,
116
- `✔ ++ ${dir}/__assets/_libs/data/blocks.html`,
117
- `✔ ++ ${dir}/__assets/_libs/data/bge-blocks.html`,
118
- `✔ ++ ${dir}/__assets/_libs/data/bge-blocks-v2.html`,
119
- `✔ ++ ${dir}/__assets/_libs/data/.markuplintrc`,
120
- `✔ ++ ${dir}/__assets/_libs/component/c-title-page.pug`,
121
- `✔ ++ ${dir}/__assets/_libs/component/c-title-page.css`,
122
- `✔ ++ ${dir}/__assets/_libs/component/c-pagination.pug`,
123
- `✔ ++ ${dir}/__assets/_libs/component/c-pagination.css`,
124
- `✔ ++ ${dir}/__assets/_libs/component/c-page-sub.css`,
125
- `✔ ++ ${dir}/__assets/_libs/component/c-page-home.css`,
126
- `✔ ++ ${dir}/__assets/_libs/component/c-nav-sitemap.pug`,
127
- `✔ ++ ${dir}/__assets/_libs/component/c-nav-sitemap.css`,
128
- `✔ ++ ${dir}/__assets/_libs/component/c-nav-global.pug`,
129
- `✔ ++ ${dir}/__assets/_libs/component/c-nav-global.css`,
130
- `✔ ++ ${dir}/__assets/_libs/component/c-nav-breadcrumb.pug`,
131
- `✔ ++ ${dir}/__assets/_libs/component/c-nav-breadcrumb.css`,
132
- `✔ ++ ${dir}/__assets/_libs/component/c-media.pug`,
133
- `✔ ++ ${dir}/__assets/_libs/component/c-media.css`,
134
- `✔ ++ ${dir}/__assets/_libs/component/c-media-list.css`,
135
- `✔ ++ ${dir}/__assets/_libs/component/c-header.pug`,
136
- `✔ ++ ${dir}/__assets/_libs/component/c-header.css`,
137
- `✔ ++ ${dir}/__assets/_libs/component/c-footer.pug`,
138
- `✔ ++ ${dir}/__assets/_libs/component/c-footer.css`,
139
- `✔ ++ ${dir}/__assets/_libs/component/c-content-main.css`,
140
- `✔ ++ ${dir}/__assets/_libs/component/c-content-index.css`,
141
- `✔ ++ ${dir}/__assets/_libs/component/c-card.pug`,
142
- `✔ ++ ${dir}/__assets/_libs/component/c-card.css`,
143
73
  `✔ ++ ${dir}/__assets/_libs/component/c-card-list.css`,
144
- `✔ ++ ${dir}/.vscode/settings.json`,
145
- `✔ ++ ${dir}/.vscode/extensions.json`,
146
- `✔ ++ ${dir}/.husky/pre-commit`,
147
- '✔ Install dependencies : skipped',
74
+ `✔ ++ ${dir}/__assets/_libs/component/c-card.css`,
75
+ `✔ ++ ${dir}/__assets/_libs/component/c-card.pug`,
76
+ `✔ ++ ${dir}/__assets/_libs/component/c-content-index.css`,
77
+ `✔ ++ ${dir}/__assets/_libs/component/c-content-main.css`,
78
+ `✔ ++ ${dir}/__assets/_libs/component/c-footer.css`,
79
+ `✔ ++ ${dir}/__assets/_libs/component/c-footer.pug`,
80
+ `✔ ++ ${dir}/__assets/_libs/component/c-header.css`,
81
+ `✔ ++ ${dir}/__assets/_libs/component/c-header.pug`,
82
+ `✔ ++ ${dir}/__assets/_libs/component/c-media-list.css`,
83
+ `✔ ++ ${dir}/__assets/_libs/component/c-media.css`,
84
+ `✔ ++ ${dir}/__assets/_libs/component/c-media.pug`,
85
+ `✔ ++ ${dir}/__assets/_libs/component/c-nav-breadcrumb.css`,
86
+ `✔ ++ ${dir}/__assets/_libs/component/c-nav-breadcrumb.pug`,
87
+ `✔ ++ ${dir}/__assets/_libs/component/c-nav-global.css`,
88
+ `✔ ++ ${dir}/__assets/_libs/component/c-nav-global.pug`,
89
+ `✔ ++ ${dir}/__assets/_libs/component/c-nav-sitemap.css`,
90
+ `✔ ++ ${dir}/__assets/_libs/component/c-nav-sitemap.pug`,
91
+ `✔ ++ ${dir}/__assets/_libs/component/c-page-home.css`,
92
+ `✔ ++ ${dir}/__assets/_libs/component/c-page-sub.css`,
93
+ `✔ ++ ${dir}/__assets/_libs/component/c-pagination.css`,
94
+ `✔ ++ ${dir}/__assets/_libs/component/c-pagination.pug`,
95
+ `✔ ++ ${dir}/__assets/_libs/component/c-title-page.css`,
96
+ `✔ ++ ${dir}/__assets/_libs/component/c-title-page.pug`,
97
+ `✔ ++ ${dir}/__assets/_libs/data/.markuplintrc`,
98
+ `✔ ++ ${dir}/__assets/_libs/data/bge-blocks-v2.html`,
99
+ `✔ ++ ${dir}/__assets/_libs/data/bge-blocks.html`,
100
+ `✔ ++ ${dir}/__assets/_libs/data/blocks.js`,
101
+ `✔ ++ ${dir}/__assets/_libs/data/data.yml`,
102
+ `✔ ++ ${dir}/__assets/_libs/img/bg-arrow.svg`,
103
+ `✔ ++ ${dir}/__assets/_libs/img/bg-repeat-01.gif`,
104
+ `✔ ++ ${dir}/__assets/_libs/layouts/home.pug`,
105
+ `✔ ++ ${dir}/__assets/_libs/layouts/sub.pug`,
106
+ `✔ ++ ${dir}/__assets/_libs/mixin/meta-basercms.pug`,
107
+ `✔ ++ ${dir}/__assets/_libs/mixin/meta.pug`,
108
+ `✔ ++ ${dir}/__assets/_libs/script/index.ts`,
109
+ `✔ ++ ${dir}/__assets/_libs/style/base/root.css`,
110
+ `✔ ++ ${dir}/__assets/_libs/style/general/all.css`,
111
+ `✔ ++ ${dir}/__assets/_libs/style/general/body.css`,
112
+ `✔ ++ ${dir}/__assets/_libs/style/general/button.css`,
113
+ `✔ ++ ${dir}/__assets/_libs/style/general/img.css`,
114
+ `✔ ++ ${dir}/__assets/htdocs/css/style.css`,
115
+ `✔ ++ ${dir}/__assets/htdocs/index.pug`,
116
+ `✔ ++ ${dir}/__assets/htdocs/js/script.ts`,
117
+ `✔ ++ ${dir}/__assets/htdocs/sample/index.html`,
118
+ `✔ ++ ${dir}/__info/print.txt`,
119
+ `✔ ++ ${dir}/burgereditor.config.js`,
120
+ `✔ ++ ${dir}/cspell.json`,
121
+ `✔ ++ ${dir}/eslint.config.js`,
122
+ `✔ ++ ${dir}/htdocs/files/images/sample.png`,
123
+ `✔ ++ ${dir}/kamado.config.ts`,
124
+ `✔ ++ ${dir}/lint-staged.config.mjs`,
125
+ `✔ ++ ${dir}/markuplint.config.js`,
126
+ `✔ ++ ${dir}/package.json`,
127
+ `✔ ++ ${dir}/prh.yaml`,
128
+ `✔ ++ ${dir}/tsconfig.json`,
129
+ '✔ Install dependencies skipped',
130
+ '✔ Finalize finalized',
148
131
  ]);
149
132
  });
150
133
 
151
- test('npx --type burger', async ({ tmpDir, task }) => {
134
+ test('npx --type basercms4', async ({ tmpDir, task }) => {
152
135
  const dir = path.join(tmpDir, getName(task));
153
- const actual = await cliTest(dir, 'burger');
136
+ const actual = await cliTest(dir, 'basercms4');
154
137
  expect(actual).toStrictEqual([
155
- `✔ ++ ${dir}/tsconfig.json`,
156
- `✔ ++ ${dir}/prh.yaml`,
157
- `✔ ++ ${dir}/package.json`,
158
- `✔ ++ ${dir}/markuplint.config.js`,
159
- `✔ ++ ${dir}/lint-staged.config.mjs`,
160
- `✔ ++ ${dir}/eslint.config.js`,
161
- `✔ ++ ${dir}/eleventy.config.mjs`,
162
- `✔ ++ ${dir}/cspell.json`,
163
- `✔ ++ ${dir}/burgereditor.config.js`,
164
- `✔ ++ ${dir}/README.md`,
165
- `✔ ++ ${dir}/CHANGELOG.md`,
166
- `✔ ++ ${dir}/.yarnrc.yml`,
167
- `✔ ++ ${dir}/.textlintrc.js`,
168
- `✔ ++ ${dir}/.textlintignore`,
169
- `✔ ++ ${dir}/.stylelintrc`,
170
- `✔ ++ ${dir}/.pug-lintrc`,
171
- `✔ ++ ${dir}/.prettierrc.mjs`,
172
- `✔ ++ ${dir}/.postcssrc.js`,
173
- `✔ ++ ${dir}/.npmignore`,
174
- `✔ ++ ${dir}/.gitignore`,
175
138
  `✔ ++ ${dir}/.editorconfig`,
176
- `✔ ++ ${dir}/.clinerules`,
177
- `✔ ++ ${dir}/.clineignore`,
178
- `✔ ++ ${dir}/htdocs/files/images/sample.png`,
179
- `✔ ++ ${dir}/ai-tasks/page-to-burger.md`,
180
- `✔ ++ ${dir}/ai-tasks/create-page.md`,
181
- `✔ ++ ${dir}/ai-tasks/create-component.md`,
182
- `✔ ++ ${dir}/__info/print.txt`,
183
- `✔ ++ ${dir}/__assets/htdocs/index.pug`,
184
- `✔ ++ ${dir}/__assets/htdocs/sample/index.html`,
185
- `✔ ++ ${dir}/__assets/htdocs/js/script.ts`,
186
- `✔ ++ ${dir}/__assets/htdocs/css/style.css`,
187
- `✔ ++ ${dir}/__assets/htdocs/css/bge_style.css`,
188
- `✔ ++ ${dir}/__assets/htdocs/__tmpl/index.pug`,
189
- `✔ ++ ${dir}/__assets/htdocs/__tmpl/302_form_complete.pug`,
190
- `✔ ++ ${dir}/__assets/htdocs/__tmpl/302_form_complete.json`,
191
- `✔ ++ ${dir}/__assets/htdocs/__tmpl/301_form_confirm.pug`,
192
- `✔ ++ ${dir}/__assets/htdocs/__tmpl/301_form_confirm.json`,
193
- `✔ ++ ${dir}/__assets/htdocs/__tmpl/300_form_input.pug`,
194
- `✔ ++ ${dir}/__assets/htdocs/__tmpl/300_form_input.json`,
195
- `✔ ++ ${dir}/__assets/htdocs/__tmpl/210_blog_index.pug`,
196
- `✔ ++ ${dir}/__assets/htdocs/__tmpl/210_blog_index.json`,
197
- `✔ ++ ${dir}/__assets/htdocs/__tmpl/200_blog_index.pug`,
198
- `✔ ++ ${dir}/__assets/htdocs/__tmpl/200_blog_index.json`,
199
- `✔ ++ ${dir}/__assets/htdocs/__tmpl/100_sub.pug`,
200
- `✔ ++ ${dir}/__assets/htdocs/__tmpl/100_sub.json`,
201
- `✔ ++ ${dir}/__assets/htdocs/__tmpl/000_home.pug`,
202
- `✔ ++ ${dir}/__assets/htdocs/__tmpl/000_home.json`,
203
- `✔ ++ ${dir}/__assets/htdocs/__tmpl/.markuplintrc`,
139
+ `✔ ++ ${dir}/.gitignore`,
140
+ `✔ ++ ${dir}/.husky/pre-commit`,
141
+ `✔ ++ ${dir}/.npmignore`,
142
+ `✔ ++ ${dir}/.postcssrc.js`,
143
+ `✔ ++ ${dir}/.prettierrc.mjs`,
144
+ `✔ ++ ${dir}/.pug-lintrc`,
145
+ `✔ ++ ${dir}/.stylelintrc`,
146
+ `✔ ++ ${dir}/.textlintignore`,
147
+ `✔ ++ ${dir}/.textlintrc.js`,
148
+ `✔ ++ ${dir}/.vscode/extensions.json`,
149
+ `✔ ++ ${dir}/.vscode/settings.json`,
150
+ `✔ ++ ${dir}/.yarnrc.yml`,
151
+ `✔ ++ ${dir}/CHANGELOG.md`,
152
+ `✔ ++ ${dir}/README.md`,
204
153
  `✔ ++ ${dir}/__assets/_libs/.markuplintrc`,
205
- `✔ ++ ${dir}/__assets/_libs/style/general/img.css`,
206
- `✔ ++ ${dir}/__assets/_libs/style/general/button.css`,
207
- `✔ ++ ${dir}/__assets/_libs/style/general/body.css`,
208
- `✔ ++ ${dir}/__assets/_libs/style/general/all.css`,
209
- `✔ ++ ${dir}/__assets/_libs/style/base/root.css`,
210
- `✔ ++ ${dir}/__assets/_libs/script/index.ts`,
211
- `✔ ++ ${dir}/__assets/_libs/mixin/meta.pug`,
212
- `✔ ++ ${dir}/__assets/_libs/layouts/sub.pug`,
213
- `✔ ++ ${dir}/__assets/_libs/layouts/home.pug`,
214
- `✔ ++ ${dir}/__assets/_libs/img/bg-repeat-01.gif`,
215
- `✔ ++ ${dir}/__assets/_libs/img/bg-arrow.svg`,
216
- `✔ ++ ${dir}/__assets/_libs/data/titlelist.js`,
217
- `✔ ++ ${dir}/__assets/_libs/data/data.yml`,
218
- `✔ ++ ${dir}/__assets/_libs/data/breadcrumbs.js`,
219
- `✔ ++ ${dir}/__assets/_libs/data/blocks.js`,
220
- `✔ ++ ${dir}/__assets/_libs/data/blocks.html`,
221
- `✔ ++ ${dir}/__assets/_libs/data/bge-blocks.html`,
222
- `✔ ++ ${dir}/__assets/_libs/data/bge-blocks-v2.html`,
223
- `✔ ++ ${dir}/__assets/_libs/data/.markuplintrc`,
224
- `✔ ++ ${dir}/__assets/_libs/component/c-title-page.pug`,
225
- `✔ ++ ${dir}/__assets/_libs/component/c-title-page.css`,
226
- `✔ ++ ${dir}/__assets/_libs/component/c-pagination.pug`,
227
- `✔ ++ ${dir}/__assets/_libs/component/c-pagination.css`,
228
- `✔ ++ ${dir}/__assets/_libs/component/c-page-sub.css`,
229
- `✔ ++ ${dir}/__assets/_libs/component/c-page-home.css`,
230
- `✔ ++ ${dir}/__assets/_libs/component/c-nav-sitemap.pug`,
231
- `✔ ++ ${dir}/__assets/_libs/component/c-nav-sitemap.css`,
232
- `✔ ++ ${dir}/__assets/_libs/component/c-nav-global.pug`,
233
- `✔ ++ ${dir}/__assets/_libs/component/c-nav-global.css`,
234
- `✔ ++ ${dir}/__assets/_libs/component/c-nav-breadcrumb.pug`,
235
- `✔ ++ ${dir}/__assets/_libs/component/c-nav-breadcrumb.css`,
236
- `✔ ++ ${dir}/__assets/_libs/component/c-media.pug`,
237
- `✔ ++ ${dir}/__assets/_libs/component/c-media.css`,
238
- `✔ ++ ${dir}/__assets/_libs/component/c-media-list.css`,
239
- `✔ ++ ${dir}/__assets/_libs/component/c-header.pug`,
240
- `✔ ++ ${dir}/__assets/_libs/component/c-header.css`,
241
- `✔ ++ ${dir}/__assets/_libs/component/c-footer.pug`,
242
- `✔ ++ ${dir}/__assets/_libs/component/c-footer.css`,
243
- `✔ ++ ${dir}/__assets/_libs/component/c-content-main.css`,
244
- `✔ ++ ${dir}/__assets/_libs/component/c-content-index.css`,
245
- `✔ ++ ${dir}/__assets/_libs/component/c-card.pug`,
246
- `✔ ++ ${dir}/__assets/_libs/component/c-card.css`,
247
154
  `✔ ++ ${dir}/__assets/_libs/component/c-card-list.css`,
248
- `✔ ++ ${dir}/.vscode/settings.json`,
249
- `✔ ++ ${dir}/.vscode/extensions.json`,
250
- `✔ ++ ${dir}/.husky/pre-commit`,
251
- '✔ Install dependencies : skipped',
155
+ `✔ ++ ${dir}/__assets/_libs/component/c-card.css`,
156
+ `✔ ++ ${dir}/__assets/_libs/component/c-card.pug`,
157
+ `✔ ++ ${dir}/__assets/_libs/component/c-content-index.css`,
158
+ `✔ ++ ${dir}/__assets/_libs/component/c-content-main.css`,
159
+ `✔ ++ ${dir}/__assets/_libs/component/c-footer.css`,
160
+ `✔ ++ ${dir}/__assets/_libs/component/c-footer.pug`,
161
+ `✔ ++ ${dir}/__assets/_libs/component/c-header.css`,
162
+ `✔ ++ ${dir}/__assets/_libs/component/c-header.pug`,
163
+ `✔ ++ ${dir}/__assets/_libs/component/c-media-list.css`,
164
+ `✔ ++ ${dir}/__assets/_libs/component/c-media.css`,
165
+ `✔ ++ ${dir}/__assets/_libs/component/c-media.pug`,
166
+ `✔ ++ ${dir}/__assets/_libs/component/c-nav-breadcrumb.css`,
167
+ `✔ ++ ${dir}/__assets/_libs/component/c-nav-breadcrumb.pug`,
168
+ `✔ ++ ${dir}/__assets/_libs/component/c-nav-global.css`,
169
+ `✔ ++ ${dir}/__assets/_libs/component/c-nav-global.pug`,
170
+ `✔ ++ ${dir}/__assets/_libs/component/c-nav-sitemap.css`,
171
+ `✔ ++ ${dir}/__assets/_libs/component/c-nav-sitemap.pug`,
172
+ `✔ ++ ${dir}/__assets/_libs/component/c-page-home.css`,
173
+ `✔ ++ ${dir}/__assets/_libs/component/c-page-sub.css`,
174
+ `✔ ++ ${dir}/__assets/_libs/component/c-pagination.css`,
175
+ `✔ ++ ${dir}/__assets/_libs/component/c-pagination.pug`,
176
+ `✔ ++ ${dir}/__assets/_libs/component/c-title-page.css`,
177
+ `✔ ++ ${dir}/__assets/_libs/component/c-title-page.pug`,
178
+ `✔ ++ ${dir}/__assets/_libs/data/.markuplintrc`,
179
+ `✔ ++ ${dir}/__assets/_libs/data/bge-blocks-v2.html`,
180
+ `✔ ++ ${dir}/__assets/_libs/data/bge-blocks.html`,
181
+ `✔ ++ ${dir}/__assets/_libs/data/blocks.js`,
182
+ `✔ ++ ${dir}/__assets/_libs/data/data.yml`,
183
+ `✔ ++ ${dir}/__assets/_libs/img/bg-arrow.svg`,
184
+ `✔ ++ ${dir}/__assets/_libs/img/bg-repeat-01.gif`,
185
+ `✔ ++ ${dir}/__assets/_libs/layouts/home.pug`,
186
+ `✔ ++ ${dir}/__assets/_libs/layouts/sub.pug`,
187
+ `✔ ++ ${dir}/__assets/_libs/mixin/meta-basercms.pug`,
188
+ `✔ ++ ${dir}/__assets/_libs/mixin/meta.pug`,
189
+ `✔ ++ ${dir}/__assets/_libs/script/index.ts`,
190
+ `✔ ++ ${dir}/__assets/_libs/style/base/root.css`,
191
+ `✔ ++ ${dir}/__assets/_libs/style/general/all.css`,
192
+ `✔ ++ ${dir}/__assets/_libs/style/general/body.css`,
193
+ `✔ ++ ${dir}/__assets/_libs/style/general/button.css`,
194
+ `✔ ++ ${dir}/__assets/_libs/style/general/img.css`,
195
+ `✔ ++ ${dir}/__assets/htdocs/__tmpl/.markuplintrc`,
196
+ `✔ ++ ${dir}/__assets/htdocs/__tmpl/000_home.json`,
197
+ `✔ ++ ${dir}/__assets/htdocs/__tmpl/000_home.pug`,
198
+ `✔ ++ ${dir}/__assets/htdocs/__tmpl/100_sub.json`,
199
+ `✔ ++ ${dir}/__assets/htdocs/__tmpl/100_sub.pug`,
200
+ `✔ ++ ${dir}/__assets/htdocs/__tmpl/200_blog_index.json`,
201
+ `✔ ++ ${dir}/__assets/htdocs/__tmpl/200_blog_index.pug`,
202
+ `✔ ++ ${dir}/__assets/htdocs/__tmpl/210_blog_index.json`,
203
+ `✔ ++ ${dir}/__assets/htdocs/__tmpl/210_blog_index.pug`,
204
+ `✔ ++ ${dir}/__assets/htdocs/__tmpl/300_form_input.json`,
205
+ `✔ ++ ${dir}/__assets/htdocs/__tmpl/300_form_input.pug`,
206
+ `✔ ++ ${dir}/__assets/htdocs/__tmpl/301_form_confirm.json`,
207
+ `✔ ++ ${dir}/__assets/htdocs/__tmpl/301_form_confirm.pug`,
208
+ `✔ ++ ${dir}/__assets/htdocs/__tmpl/302_form_complete.json`,
209
+ `✔ ++ ${dir}/__assets/htdocs/__tmpl/302_form_complete.pug`,
210
+ `✔ ++ ${dir}/__assets/htdocs/__tmpl/index.pug`,
211
+ `✔ ++ ${dir}/__assets/htdocs/css/bge_style.css`,
212
+ `✔ ++ ${dir}/__assets/htdocs/css/style.css`,
213
+ `✔ ++ ${dir}/__assets/htdocs/index.pug`,
214
+ `✔ ++ ${dir}/__assets/htdocs/js/script.ts`,
215
+ `✔ ++ ${dir}/__assets/htdocs/sample/index.html`,
216
+ `✔ ++ ${dir}/__info/print.txt`,
217
+ `✔ ++ ${dir}/burgereditor.config.js`,
218
+ `✔ ++ ${dir}/cspell.json`,
219
+ `✔ ++ ${dir}/eslint.config.js`,
220
+ `✔ ++ ${dir}/htdocs/__tmpl/__burger_editor/img/bg-sample.png`,
221
+ `✔ ++ ${dir}/htdocs/__tmpl/__burger_editor/js/bge_modules/bge_functions.min.js`,
222
+ `✔ ++ ${dir}/htdocs/files/images/sample.png`,
223
+ `✔ ++ ${dir}/kamado.config.ts`,
224
+ `✔ ++ ${dir}/lint-staged.config.mjs`,
225
+ `✔ ++ ${dir}/markuplint.config.js`,
226
+ `✔ ++ ${dir}/package.json`,
227
+ `✔ ++ ${dir}/prh.yaml`,
228
+ `✔ ++ ${dir}/tsconfig.json`,
229
+ '✔ Install dependencies skipped',
230
+ '✔ Finalize finalized',
252
231
  ]);
253
232
  });
254
233
 
@@ -256,84 +235,80 @@ describe('CLI', () => {
256
235
  const dir = path.join(tmpDir, getName(task));
257
236
  const actual = await cliTest(dir, 'static');
258
237
  expect(actual).toStrictEqual([
259
- `✔ ++ ${dir}/tsconfig.json`,
260
- `✔ ++ ${dir}/prh.yaml`,
261
- `✔ ++ ${dir}/package.json`,
262
- `✔ ++ ${dir}/markuplint.config.js`,
263
- `✔ ++ ${dir}/lint-staged.config.mjs`,
264
- `✔ ++ ${dir}/eslint.config.js`,
265
- `✔ ++ ${dir}/eleventy.config.mjs`,
266
- `✔ ++ ${dir}/cspell.json`,
267
- `✔ ++ ${dir}/burgereditor.config.js`,
268
- `✔ ++ ${dir}/README.md`,
269
- `✔ ++ ${dir}/CHANGELOG.md`,
270
- `✔ ++ ${dir}/.yarnrc.yml`,
271
- `✔ ++ ${dir}/.textlintrc.js`,
272
- `✔ ++ ${dir}/.textlintignore`,
273
- `✔ ++ ${dir}/.stylelintrc`,
274
- `✔ ++ ${dir}/.pug-lintrc`,
275
- `✔ ++ ${dir}/.prettierrc.mjs`,
276
- `✔ ++ ${dir}/.postcssrc.js`,
277
- `✔ ++ ${dir}/.npmignore`,
278
- `✔ ++ ${dir}/.gitignore`,
279
238
  `✔ ++ ${dir}/.editorconfig`,
280
- `✔ ++ ${dir}/.clinerules`,
281
- `✔ ++ ${dir}/.clineignore`,
282
- `✔ ++ ${dir}/htdocs/files/images/sample.png`,
283
- `✔ ++ ${dir}/ai-tasks/page-to-burger.md`,
284
- `✔ ++ ${dir}/ai-tasks/create-page.md`,
285
- `✔ ++ ${dir}/ai-tasks/create-component.md`,
286
- `✔ ++ ${dir}/__info/print.txt`,
287
- `✔ ++ ${dir}/__assets/htdocs/index.pug`,
288
- `✔ ++ ${dir}/__assets/htdocs/sample/index.html`,
289
- `✔ ++ ${dir}/__assets/htdocs/js/script.ts`,
290
- `✔ ++ ${dir}/__assets/htdocs/css/style.css`,
239
+ `✔ ++ ${dir}/.gitignore`,
240
+ `✔ ++ ${dir}/.husky/pre-commit`,
241
+ `✔ ++ ${dir}/.npmignore`,
242
+ `✔ ++ ${dir}/.postcssrc.js`,
243
+ `✔ ++ ${dir}/.prettierrc.mjs`,
244
+ `✔ ++ ${dir}/.pug-lintrc`,
245
+ `✔ ++ ${dir}/.stylelintrc`,
246
+ `✔ ++ ${dir}/.textlintignore`,
247
+ `✔ ++ ${dir}/.textlintrc.js`,
248
+ `✔ ++ ${dir}/.vscode/extensions.json`,
249
+ `✔ ++ ${dir}/.vscode/settings.json`,
250
+ `✔ ++ ${dir}/.yarnrc.yml`,
251
+ `✔ ++ ${dir}/CHANGELOG.md`,
252
+ `✔ ++ ${dir}/README.md`,
291
253
  `✔ ++ ${dir}/__assets/_libs/.markuplintrc`,
292
- `✔ ++ ${dir}/__assets/_libs/style/general/img.css`,
293
- `✔ ++ ${dir}/__assets/_libs/style/general/button.css`,
294
- `✔ ++ ${dir}/__assets/_libs/style/general/body.css`,
295
- `✔ ++ ${dir}/__assets/_libs/style/general/all.css`,
296
- `✔ ++ ${dir}/__assets/_libs/style/base/root.css`,
297
- `✔ ++ ${dir}/__assets/_libs/script/index.ts`,
298
- `✔ ++ ${dir}/__assets/_libs/mixin/meta.pug`,
299
- `✔ ++ ${dir}/__assets/_libs/layouts/sub.pug`,
300
- `✔ ++ ${dir}/__assets/_libs/layouts/home.pug`,
301
- `✔ ++ ${dir}/__assets/_libs/img/bg-repeat-01.gif`,
302
- `✔ ++ ${dir}/__assets/_libs/img/bg-arrow.svg`,
303
- `✔ ++ ${dir}/__assets/_libs/data/titlelist.js`,
304
- `✔ ++ ${dir}/__assets/_libs/data/data.yml`,
305
- `✔ ++ ${dir}/__assets/_libs/data/breadcrumbs.js`,
306
- `✔ ++ ${dir}/__assets/_libs/data/blocks.js`,
307
- `✔ ++ ${dir}/__assets/_libs/data/blocks.html`,
308
- `✔ ++ ${dir}/__assets/_libs/data/.markuplintrc`,
309
- `✔ ++ ${dir}/__assets/_libs/component/c-title-page.pug`,
310
- `✔ ++ ${dir}/__assets/_libs/component/c-title-page.css`,
311
- `✔ ++ ${dir}/__assets/_libs/component/c-pagination.pug`,
312
- `✔ ++ ${dir}/__assets/_libs/component/c-pagination.css`,
313
- `✔ ++ ${dir}/__assets/_libs/component/c-page-sub.css`,
314
- `✔ ++ ${dir}/__assets/_libs/component/c-page-home.css`,
315
- `✔ ++ ${dir}/__assets/_libs/component/c-nav-sitemap.pug`,
316
- `✔ ++ ${dir}/__assets/_libs/component/c-nav-sitemap.css`,
317
- `✔ ++ ${dir}/__assets/_libs/component/c-nav-global.pug`,
318
- `✔ ++ ${dir}/__assets/_libs/component/c-nav-global.css`,
319
- `✔ ++ ${dir}/__assets/_libs/component/c-nav-breadcrumb.pug`,
320
- `✔ ++ ${dir}/__assets/_libs/component/c-nav-breadcrumb.css`,
321
- `✔ ++ ${dir}/__assets/_libs/component/c-media.pug`,
322
- `✔ ++ ${dir}/__assets/_libs/component/c-media.css`,
323
- `✔ ++ ${dir}/__assets/_libs/component/c-media-list.css`,
324
- `✔ ++ ${dir}/__assets/_libs/component/c-header.pug`,
325
- `✔ ++ ${dir}/__assets/_libs/component/c-header.css`,
326
- `✔ ++ ${dir}/__assets/_libs/component/c-footer.pug`,
327
- `✔ ++ ${dir}/__assets/_libs/component/c-footer.css`,
328
- `✔ ++ ${dir}/__assets/_libs/component/c-content-main.css`,
329
- `✔ ++ ${dir}/__assets/_libs/component/c-content-index.css`,
330
- `✔ ++ ${dir}/__assets/_libs/component/c-card.pug`,
331
- `✔ ++ ${dir}/__assets/_libs/component/c-card.css`,
332
254
  `✔ ++ ${dir}/__assets/_libs/component/c-card-list.css`,
333
- `✔ ++ ${dir}/.vscode/settings.json`,
334
- `✔ ++ ${dir}/.vscode/extensions.json`,
335
- `✔ ++ ${dir}/.husky/pre-commit`,
336
- '✔ Install dependencies : skipped',
255
+ `✔ ++ ${dir}/__assets/_libs/component/c-card.css`,
256
+ `✔ ++ ${dir}/__assets/_libs/component/c-card.pug`,
257
+ `✔ ++ ${dir}/__assets/_libs/component/c-content-index.css`,
258
+ `✔ ++ ${dir}/__assets/_libs/component/c-content-main.css`,
259
+ `✔ ++ ${dir}/__assets/_libs/component/c-footer.css`,
260
+ `✔ ++ ${dir}/__assets/_libs/component/c-footer.pug`,
261
+ `✔ ++ ${dir}/__assets/_libs/component/c-header.css`,
262
+ `✔ ++ ${dir}/__assets/_libs/component/c-header.pug`,
263
+ `✔ ++ ${dir}/__assets/_libs/component/c-media-list.css`,
264
+ `✔ ++ ${dir}/__assets/_libs/component/c-media.css`,
265
+ `✔ ++ ${dir}/__assets/_libs/component/c-media.pug`,
266
+ `✔ ++ ${dir}/__assets/_libs/component/c-nav-breadcrumb.css`,
267
+ `✔ ++ ${dir}/__assets/_libs/component/c-nav-breadcrumb.pug`,
268
+ `✔ ++ ${dir}/__assets/_libs/component/c-nav-global.css`,
269
+ `✔ ++ ${dir}/__assets/_libs/component/c-nav-global.pug`,
270
+ `✔ ++ ${dir}/__assets/_libs/component/c-nav-sitemap.css`,
271
+ `✔ ++ ${dir}/__assets/_libs/component/c-nav-sitemap.pug`,
272
+ `✔ ++ ${dir}/__assets/_libs/component/c-page-home.css`,
273
+ `✔ ++ ${dir}/__assets/_libs/component/c-page-sub.css`,
274
+ `✔ ++ ${dir}/__assets/_libs/component/c-pagination.css`,
275
+ `✔ ++ ${dir}/__assets/_libs/component/c-pagination.pug`,
276
+ `✔ ++ ${dir}/__assets/_libs/component/c-title-page.css`,
277
+ `✔ ++ ${dir}/__assets/_libs/component/c-title-page.pug`,
278
+ `✔ ++ ${dir}/__assets/_libs/data/.markuplintrc`,
279
+ `✔ ++ ${dir}/__assets/_libs/data/bge-blocks-v2.html`,
280
+ `✔ ++ ${dir}/__assets/_libs/data/bge-blocks.html`,
281
+ `✔ ++ ${dir}/__assets/_libs/data/blocks.js`,
282
+ `✔ ++ ${dir}/__assets/_libs/data/data.yml`,
283
+ `✔ ++ ${dir}/__assets/_libs/img/bg-arrow.svg`,
284
+ `✔ ++ ${dir}/__assets/_libs/img/bg-repeat-01.gif`,
285
+ `✔ ++ ${dir}/__assets/_libs/layouts/home.pug`,
286
+ `✔ ++ ${dir}/__assets/_libs/layouts/sub.pug`,
287
+ `✔ ++ ${dir}/__assets/_libs/mixin/meta-basercms.pug`,
288
+ `✔ ++ ${dir}/__assets/_libs/mixin/meta.pug`,
289
+ `✔ ++ ${dir}/__assets/_libs/script/index.ts`,
290
+ `✔ ++ ${dir}/__assets/_libs/style/base/root.css`,
291
+ `✔ ++ ${dir}/__assets/_libs/style/general/all.css`,
292
+ `✔ ++ ${dir}/__assets/_libs/style/general/body.css`,
293
+ `✔ ++ ${dir}/__assets/_libs/style/general/button.css`,
294
+ `✔ ++ ${dir}/__assets/_libs/style/general/img.css`,
295
+ `✔ ++ ${dir}/__assets/htdocs/css/style.css`,
296
+ `✔ ++ ${dir}/__assets/htdocs/index.pug`,
297
+ `✔ ++ ${dir}/__assets/htdocs/js/script.ts`,
298
+ `✔ ++ ${dir}/__assets/htdocs/sample/index.html`,
299
+ `✔ ++ ${dir}/__info/print.txt`,
300
+ `✔ ++ ${dir}/burgereditor.config.js`,
301
+ `✔ ++ ${dir}/cspell.json`,
302
+ `✔ ++ ${dir}/eslint.config.js`,
303
+ `✔ ++ ${dir}/htdocs/files/images/sample.png`,
304
+ `✔ ++ ${dir}/kamado.config.ts`,
305
+ `✔ ++ ${dir}/lint-staged.config.mjs`,
306
+ `✔ ++ ${dir}/markuplint.config.js`,
307
+ `✔ ++ ${dir}/package.json`,
308
+ `✔ ++ ${dir}/prh.yaml`,
309
+ `✔ ++ ${dir}/tsconfig.json`,
310
+ '✔ Install dependencies skipped',
311
+ '✔ Finalize finalized',
337
312
  ]);
338
313
  });
339
314
  });
package/libraries.js ADDED
@@ -0,0 +1,53 @@
1
+ import fs from 'node:fs/promises';
2
+ import path from 'node:path';
3
+
4
+ const basercms4Libraries = [
5
+ {
6
+ from: 'node_modules/jquery/dist/jquery.min.js',
7
+ to: 'htdocs/js/jquery.min.js',
8
+ },
9
+ {
10
+ from: 'node_modules/jquery-colorbox/example3/colorbox.css',
11
+ to: 'htdocs/__tmpl/__burger_editor/css/colorbox.css',
12
+ },
13
+ {
14
+ from: 'node_modules/jquery-colorbox/example3/images/loading.gif',
15
+ to: 'htdocs/__tmpl/__burger_editor/css/images/loading.gif',
16
+ },
17
+ {
18
+ from: 'node_modules/jquery-colorbox/example3/images/controls.png',
19
+ to: 'htdocs/__tmpl/__burger_editor/css/images/controls.png',
20
+ },
21
+ {
22
+ from: 'node_modules/jquery-colorbox/jquery.colorbox-min.js',
23
+ to: 'htdocs/__tmpl/__burger_editor/js/bge_modules/jquery.colorbox-min.js',
24
+ },
25
+ ];
26
+
27
+ /**
28
+ *
29
+ * @param type
30
+ * @param dest
31
+ */
32
+ export async function copyLibraries(type, dest) {
33
+ dest = path.isAbsolute(dest) ? dest : path.resolve(process.cwd(), dest);
34
+ let libraries = [];
35
+ switch (type) {
36
+ case 'basercms4': {
37
+ libraries = basercms4Libraries;
38
+ break;
39
+ }
40
+ }
41
+
42
+ for (const library of libraries) {
43
+ const from = path.join(dest, library.from);
44
+ const dist = path.join(dest, library.to);
45
+ const dir = path.dirname(dist);
46
+ const stats = await fs.stat(from).catch(() => null);
47
+ if (!stats?.isFile()) {
48
+ continue;
49
+ }
50
+ await fs.mkdir(dir, { recursive: true });
51
+ await fs.copyFile(from, dist);
52
+ }
53
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@d-zero/create-frontend",
3
- "version": "5.0.0-beta.9",
3
+ "version": "5.0.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.",
@@ -13,16 +13,15 @@
13
13
  "create-dzero-frontend": "./index.js"
14
14
  },
15
15
  "dependencies": {
16
- "@d-zero/scaffold": "5.0.0-beta.9",
17
- "glob": "11.0.3",
16
+ "@d-zero/scaffold": "5.0.0",
18
17
  "i18n-js": "4.5.1",
19
18
  "ignore": "7.0.5",
20
19
  "meow": "14.0.0",
21
- "plop": "4.0.2"
20
+ "plop": "4.0.4"
22
21
  },
23
22
  "devDependencies": {
24
- "@types/glob": "9.0.0",
25
- "execa": "9.6.0"
23
+ "@types/node": "25.0.3",
24
+ "execa": "9.6.1"
26
25
  },
27
- "gitHead": "ba74910999437f13873b324db632798851997e58"
26
+ "gitHead": "d5be73bc1f2fbfb85eea684d6b4807323a8999ff"
28
27
  }
package/plopfile.js CHANGED
@@ -1,14 +1,16 @@
1
- import { spawn } from 'node:child_process';
2
1
  import fs from 'node:fs';
2
+ import fsp from 'node:fs/promises';
3
3
  import path from 'node:path';
4
4
  import { argv } from 'node:process';
5
5
 
6
- import { globSync } from 'glob';
7
6
  import ignore from 'ignore';
8
7
  import meow from 'meow';
9
8
 
9
+ import { command } from './command.js';
10
+ import { copyLibraries } from './libraries.js';
10
11
  import { t } from './locale.js';
11
12
  import { readFileSafe } from './read-file-safe.js';
13
+ import { voltaInstallNode } from './volta-install-node.js';
12
14
 
13
15
  const cli = meow(
14
16
  `
@@ -35,7 +37,7 @@ const cli = meow(
35
37
  type: {
36
38
  type: 'string',
37
39
  shortFlag: 't',
38
- default: 'burger',
40
+ default: 'static',
39
41
  },
40
42
  dir: {
41
43
  type: 'string',
@@ -54,16 +56,42 @@ const cli = meow(
54
56
  },
55
57
  );
56
58
 
59
+ /**
60
+ * Recursively get all files in a directory
61
+ * @param {string} dir - Directory to search
62
+ * @param {string} rootDir - Root directory for relative paths
63
+ * @returns {Promise<string[]>} Array of relative file paths
64
+ */
65
+ async function getAllFiles(dir, rootDir) {
66
+ const files = [];
67
+ const entries = await fsp.readdir(dir, { withFileTypes: true });
68
+
69
+ for (const entry of entries) {
70
+ const fullPath = path.join(dir, entry.name);
71
+ const relativePath = path.relative(rootDir, fullPath);
72
+
73
+ if (entry.isDirectory()) {
74
+ const subFiles = await getAllFiles(fullPath, rootDir);
75
+ files.push(...subFiles);
76
+ } else {
77
+ files.push(relativePath);
78
+ }
79
+ }
80
+
81
+ return files;
82
+ }
83
+
57
84
  /**
58
85
  * @param {import('plop').NodePlopAPI} plop
59
86
  */
60
- export default function (plop) {
87
+ export default async function (plop) {
61
88
  const scaffoldDir = path.normalize(
62
89
  path.dirname(import.meta.resolve('@d-zero/scaffold').replace('file:', '')),
63
90
  );
64
91
 
65
- const gitignore = readFileSafe(path.resolve(scaffoldDir, '.gitignore'));
66
- const ignoreFiles = gitignore?.split('\n').filter(Boolean) ?? [];
92
+ const gitignoreOriginContent =
93
+ readFileSafe(path.resolve(scaffoldDir, '.gitignore')) ?? '';
94
+ const ignoreFiles = gitignoreOriginContent?.split('\n').filter(Boolean) ?? [];
67
95
  const hasArgs = argv.length > 2;
68
96
  const interactive = !hasArgs;
69
97
 
@@ -78,49 +106,35 @@ export default function (plop) {
78
106
  '*.test.*',
79
107
  ])
80
108
  .add(
81
- // BurgerEditor
82
- cli.flags.type === 'burger' ? [] : ['**/bge-*', '**/bge_*'],
109
+ // BurgerEditor for baserCMS
110
+ cli.flags.type.startsWith('basercms') ? [] : ['**/bge_style.css'],
83
111
  )
84
112
  .add(
85
113
  // static
86
114
  cli.flags.type === 'static' ? ['**/__tmpl/**/*'] : [],
87
115
  );
88
116
 
89
- const scaffoldFiles = ig.filter(
90
- globSync('**/*', {
91
- cwd: scaffoldDir,
92
- nodir: true,
93
- dot: true,
94
- }),
95
- );
117
+ const scaffoldFiles = ig.filter(await getAllFiles(scaffoldDir, scaffoldDir)).toSorted();
96
118
 
97
- plop.setActionType('Install dependencies', (answers) => {
119
+ plop.setActionType('Install dependencies', async (answers) => {
98
120
  const { dest, doInstall } = answerToConfig(answers);
121
+ if (doInstall) {
122
+ await installDependencies(dest);
123
+ return 'success';
124
+ }
125
+ return 'skipped';
126
+ });
99
127
 
100
- const { promise, resolve, reject } = Promise.withResolvers();
101
-
128
+ plop.setActionType('Finalize', async (answers) => {
129
+ const { dest, type, doInstall } = answerToConfig(answers);
102
130
  if (doInstall) {
103
- const child = spawn('yarn', ['install'], {
104
- cwd: path.resolve(process.cwd(), dest),
105
- stdio: 'inherit',
106
- });
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
-
116
- process.on('SIGINT', () => {
117
- child.kill('SIGINT');
118
- });
119
- } else {
120
- resolve(': skipped');
131
+ rewriteDotGitignore(dest, gitignoreOriginContent);
121
132
  }
122
133
 
123
- return promise;
134
+ if (type.startsWith('basercms')) {
135
+ await copyLibraries(type, dest);
136
+ }
137
+ return 'finalized';
124
138
  });
125
139
 
126
140
  plop.setGenerator('basic', {
@@ -132,13 +146,12 @@ export default function (plop) {
132
146
  message: t`What's the type of project?`,
133
147
  choices: [
134
148
  {
135
- name: 'Static',
149
+ name: 'Static Site (with BurgerEditor Local App)',
136
150
  value: 'static',
137
151
  },
138
- 'CMS (WordPress etc.)',
139
152
  {
140
- name: 'CMS (baserCMS with BurgerEditor)',
141
- value: 'burger',
153
+ name: 'baserCMS v4 (with BurgerEditor v2)',
154
+ value: 'basercms4',
142
155
  },
143
156
  ],
144
157
  default: cli.flags.type,
@@ -195,12 +208,25 @@ export default function (plop) {
195
208
  delete pkg.license;
196
209
  delete pkg.publishConfig;
197
210
  delete pkg.files;
211
+ if (config.type.startsWith('basercms')) {
212
+ delete pkg.scripts.bge;
213
+ delete pkg.devDependencies['@burger-editor/local'];
214
+ pkg.dependencies['@burger-editor/css'] = '2';
215
+ pkg.dependencies['jquery'] = 'latest';
216
+ pkg.dependencies['jquery-colorbox'] = '1.5';
217
+ }
198
218
  content = JSON.stringify(pkg, null, '\t');
199
219
  break;
200
220
  }
201
- case '__assets/_libs/data/blocks.cjs': {
202
- if (config.type === 'burger') {
203
- content = content.replace("blocks.html'", "bge-blocks.html'");
221
+ case '__assets/_libs/data/blocks.js': {
222
+ if (config.type === 'basercms4') {
223
+ content = content.replace('bge-blocks.html', 'bge-blocks-v2.html');
224
+ }
225
+ break;
226
+ }
227
+ case '__assets/_libs/mixin/meta.pug': {
228
+ if (!config.type.startsWith('basercms')) {
229
+ content = content.replace('\ninclude meta-basercms.pug', '');
204
230
  }
205
231
  break;
206
232
  }
@@ -221,6 +247,9 @@ export default function (plop) {
221
247
  {
222
248
  type: 'Install dependencies',
223
249
  },
250
+ {
251
+ type: 'Finalize',
252
+ },
224
253
  ];
225
254
  },
226
255
  });
@@ -237,3 +266,34 @@ function answerToConfig(answers) {
237
266
 
238
267
  return { type, dest, doInstall };
239
268
  }
269
+
270
+ /**
271
+ *
272
+ * @param dest
273
+ */
274
+ async function installDependencies(dest) {
275
+ await voltaInstallNode();
276
+ await command('yarn', ['install'], {
277
+ cwd: path.resolve(process.cwd(), dest),
278
+ stdio: 'inherit',
279
+ }).catch(() => {
280
+ throw new Error('Failed to install dependencies');
281
+ });
282
+ }
283
+
284
+ /**
285
+ *
286
+ * @param {string} dest
287
+ * @param {string} gitignoreOriginContent
288
+ */
289
+ function rewriteDotGitignore(dest, gitignoreOriginContent) {
290
+ let gitignore = gitignoreOriginContent;
291
+
292
+ // Remove after `# Document Root` section
293
+ const documentRootSection = gitignore.indexOf('\n# Document Root\n');
294
+ if (documentRootSection !== -1) {
295
+ gitignore = gitignore.slice(0, documentRootSection);
296
+ }
297
+
298
+ return fs.writeFileSync(path.resolve(dest, '.gitignore'), gitignore);
299
+ }
@@ -0,0 +1,24 @@
1
+ import { readFile } from 'node:fs/promises';
2
+ import path from 'node:path';
3
+
4
+ import { command } from './command.js';
5
+
6
+ /**
7
+ *
8
+ */
9
+ export async function voltaInstallNode() {
10
+ const node = await command('node', ['-v']).catch(() => null);
11
+ if (node) {
12
+ return;
13
+ }
14
+ const pkg = await readFile(path.join(import.meta.dirname, 'package.json'), 'utf8');
15
+ const pkgJson = JSON.parse(pkg);
16
+ const nodeVersion = pkgJson.devDependencies['@types/node'].split('.')[0];
17
+ const volta = await command('volta', ['-v']).catch(() => null);
18
+ if (volta) {
19
+ await command('volta', ['setup'], { stdio: 'inherit' });
20
+ await command('volta', ['install', `node@${nodeVersion}`], { stdio: 'inherit' });
21
+ return;
22
+ }
23
+ throw new Error('command not found: "node" or "volta"');
24
+ }