@tenjuu99/blog 0.3.5 → 0.4.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.
Files changed (53) hide show
  1. package/bin/dev-server +3 -1
  2. package/bin/server +8 -1
  3. package/docs/develop.md +36 -6
  4. package/docs/dictionary.json +1806 -0
  5. package/lib/dir.js +3 -0
  6. package/lib/distribute.js +19 -5
  7. package/lib/files.js +2 -0
  8. package/lib/filter.js +7 -0
  9. package/lib/generate.js +5 -0
  10. package/lib/helper.js +3 -0
  11. package/lib/imageDistributor.js +59 -0
  12. package/lib/indexer.js +3 -0
  13. package/lib/pageData.js +7 -0
  14. package/lib/render.js +5 -0
  15. package/lib/replaceVariablesFilter.js +5 -0
  16. package/lib/server/helper/parseRequestBody.js +46 -0
  17. package/lib/server.js +7 -3
  18. package/lib/tryServer.js +3 -1
  19. package/package.json +8 -5
  20. package/packages/breadcrumbs/helper/breadcrumbs.js +3 -0
  21. package/packages/category/helper/category.js +13 -0
  22. package/packages/category/helper/categoryIndexer.js +12 -0
  23. package/packages/category/helper/pagination.js +5 -0
  24. package/packages/editor/css/editor.css +98 -10
  25. package/packages/editor/helper/sidebarTree.js +11 -0
  26. package/packages/editor/js/autoPreviewInitializer.js +11 -0
  27. package/packages/editor/js/autoSaveInitializer.js +15 -0
  28. package/packages/editor/js/debouncer.js +21 -0
  29. package/packages/editor/js/editor.js +370 -45
  30. package/packages/editor/js/frontmatter_template.js +67 -0
  31. package/packages/editor/js/imageReferenceExtractor.js +19 -0
  32. package/packages/editor/js/image_upload.js +12 -0
  33. package/packages/editor/js/tree.js +81 -0
  34. package/packages/editor/server/changeReflector.js +47 -0
  35. package/packages/editor/server/converters/sharp.js +14 -0
  36. package/packages/editor/server/createConverter.js +26 -0
  37. package/packages/editor/server/get_editor_target.js +2 -2
  38. package/packages/editor/server/get_frontmatter_templates.js +22 -0
  39. package/packages/editor/server/get_publication_status.js +29 -0
  40. package/packages/editor/server/get_sidebar.js +51 -0
  41. package/packages/editor/server/image_upload.js +122 -0
  42. package/packages/editor/server/preview.js +49 -19
  43. package/packages/editor/server/publicationStatus.js +27 -0
  44. package/packages/editor/server/publish.js +135 -0
  45. package/packages/editor/server/publishTargetCollector.js +19 -0
  46. package/packages/editor/server/save.js +97 -0
  47. package/packages/editor/server/sidebarStatusCollector.js +17 -0
  48. package/packages/editor/template/editor.html +28 -22
  49. package/src-sample/converters/webp.js +20 -0
  50. package/src-sample/helper/add.js +2 -0
  51. package/src-sample/helper/index.js +9 -0
  52. package/src-sample/image/test.jpg +0 -0
  53. package/packages/editor/server/editor.js +0 -43
package/bin/dev-server CHANGED
@@ -10,6 +10,7 @@ const __filename = fileURLToPath(import.meta.url);
10
10
  const libDir = path.dirname(__filename) + '/../lib/'
11
11
  const binDir = path.dirname(__filename) + '/../bin/'
12
12
 
13
+ const imageDir = path.join(srcDir, 'image')
13
14
  watchers.push({
14
15
  paths: [srcDir, libDir, packageDirCore],
15
16
  event: ['change', 'add', 'unlink'],
@@ -19,7 +20,8 @@ watchers.push({
19
20
  console.error('restarting')
20
21
  },
21
22
  watchOptions: {
22
- ignoreInitial: true
23
+ ignoreInitial: true,
24
+ ignored: (filePath) => filePath.startsWith(imageDir)
23
25
  }
24
26
  })
25
27
  watch()
package/bin/server CHANGED
@@ -4,4 +4,11 @@ import server from '../lib/server.js'
4
4
  import generate from '../lib/generate.js'
5
5
 
6
6
  generate()
7
- server().listen(process.env.PORT || 8000)
7
+ const httpServer = server().listen(process.env.PORT || 8000)
8
+
9
+ const shutdown = () => {
10
+ httpServer.close(() => process.exit(0))
11
+ setTimeout(() => process.exit(0), 15000).unref()
12
+ }
13
+ process.on('SIGINT', shutdown)
14
+ process.on('SIGTERM', shutdown)
package/docs/develop.md CHANGED
@@ -105,8 +105,8 @@ tenjuu99-blog/
105
105
 
106
106
  1. **Red(テスト作成)**: 失敗するテストを書く
107
107
  ```bash
108
- # test/ ディレクトリにテストファイルを作成
109
- # 例: test/category-tree.test.js
108
+ # tests/ ディレクトリにテストファイルを作成
109
+ # 例: tests/category-tree.test.js
110
110
  ```
111
111
 
112
112
  2. **Green(最小限の実装)**: テストがパスする最小限のコードを書く
@@ -124,13 +124,13 @@ tenjuu99-blog/
124
124
 
125
125
  **テストファイルの配置:**
126
126
 
127
- - `test/` ディレクトリに `*.test.js` 形式で配置
127
+ - `tests/` ディレクトリに `*.test.js` 形式で配置
128
128
  - Node.js標準のテストランナーを使用(`node --test`)
129
129
 
130
130
  **テストの例:**
131
131
 
132
132
  ```javascript
133
- // test/example.test.js
133
+ // tests/example.test.js
134
134
  import { test } from 'node:test'
135
135
  import assert from 'node:assert'
136
136
  import { myFunction } from '../lib/myModule.js'
@@ -143,7 +143,7 @@ test('機能の説明', () => {
143
143
 
144
144
  **実装例(カテゴリー機能の場合):**
145
145
 
146
- 1. `test/category-tree.test.js` - カテゴリーツリー構築のテスト(12件)
146
+ 1. `tests/category-tree.test.js` - カテゴリーツリー構築のテスト(12件)
147
147
  2. `packages/category/helper/category.js` - 実装
148
148
  3. `npm test` - テスト実行
149
149
  4. すべてパス後、次のテストを作成
@@ -480,7 +480,7 @@ npm run test:watch # ウォッチモード
480
480
  新しいテストを追加する場合:
481
481
 
482
482
  ```javascript
483
- // test/example.test.js
483
+ // tests/example.test.js
484
484
  import { test } from 'node:test';
485
485
  import assert from 'node:assert';
486
486
 
@@ -493,6 +493,36 @@ test('テストの説明', () => {
493
493
 
494
494
  ユニットテストに加えて、`src-sample/` での手動テストも推奨します。
495
495
 
496
+ ### 受け入れテスト
497
+
498
+ ブラウザを使ったE2Eテストには **Playwright** を使用します。
499
+
500
+ **配置場所**: `tests/acceptance/*.spec.ts`
501
+
502
+ **実行方法**:
503
+
504
+ ```bash
505
+ npx playwright test # 全受け入れテスト実行
506
+ npx playwright test --ui # UIモードで実行
507
+ npx playwright test --headed # ブラウザを表示して実行
508
+ ```
509
+
510
+ **対象**: ユニットテストでは検証しにくいブラウザ操作・画面表示を伴う機能(主に `packages/editor` の操作フロー)。
511
+
512
+ **テストファイルの例**:
513
+
514
+ ```typescript
515
+ // tests/acceptance/example.spec.ts
516
+ import { test, expect } from '@playwright/test';
517
+
518
+ test('機能の説明', async ({ page }) => {
519
+ await page.goto('/');
520
+ await expect(page.getByRole('heading')).toBeVisible();
521
+ });
522
+ ```
523
+
524
+ 設定は `playwright.config.ts` を参照してください。開発サーバーは `node bin/server`(ポート8000)が自動起動します。
525
+
496
526
  ## コントリビューション
497
527
 
498
528
  ### コーディングスタイル