create-specment 0.2.2

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 (113) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +314 -0
  3. package/bin/commands/create.d.ts +3 -0
  4. package/bin/commands/create.d.ts.map +1 -0
  5. package/bin/commands/create.js +30 -0
  6. package/bin/commands/create.js.map +1 -0
  7. package/bin/constants/languages.d.ts +15 -0
  8. package/bin/constants/languages.d.ts.map +1 -0
  9. package/bin/constants/languages.js +14 -0
  10. package/bin/constants/languages.js.map +1 -0
  11. package/bin/core/interactive-setup.d.ts +15 -0
  12. package/bin/core/interactive-setup.d.ts.map +1 -0
  13. package/bin/core/interactive-setup.js +171 -0
  14. package/bin/core/interactive-setup.js.map +1 -0
  15. package/bin/core/interactive-setup.test.d.ts +2 -0
  16. package/bin/core/interactive-setup.test.d.ts.map +1 -0
  17. package/bin/core/interactive-setup.test.js +97 -0
  18. package/bin/core/interactive-setup.test.js.map +1 -0
  19. package/bin/core/project-generator.d.ts +12 -0
  20. package/bin/core/project-generator.d.ts.map +1 -0
  21. package/bin/core/project-generator.js +83 -0
  22. package/bin/core/project-generator.js.map +1 -0
  23. package/bin/features/index.d.ts +3 -0
  24. package/bin/features/index.d.ts.map +1 -0
  25. package/bin/features/index.js +47 -0
  26. package/bin/features/index.js.map +1 -0
  27. package/bin/generators/docusaurus-config.d.ts +3 -0
  28. package/bin/generators/docusaurus-config.d.ts.map +1 -0
  29. package/bin/generators/docusaurus-config.js +285 -0
  30. package/bin/generators/docusaurus-config.js.map +1 -0
  31. package/bin/generators/package-json.d.ts +3 -0
  32. package/bin/generators/package-json.d.ts.map +1 -0
  33. package/bin/generators/package-json.js +98 -0
  34. package/bin/generators/package-json.js.map +1 -0
  35. package/bin/generators/template-files.d.ts +3 -0
  36. package/bin/generators/template-files.d.ts.map +1 -0
  37. package/bin/generators/template-files.js +370 -0
  38. package/bin/generators/template-files.js.map +1 -0
  39. package/bin/index.d.ts +5 -0
  40. package/bin/index.d.ts.map +1 -0
  41. package/bin/index.js +37 -0
  42. package/bin/index.js.map +1 -0
  43. package/bin/plugins/i18n-integration.d.ts +25 -0
  44. package/bin/plugins/i18n-integration.d.ts.map +1 -0
  45. package/bin/plugins/i18n-integration.js +309 -0
  46. package/bin/plugins/i18n-integration.js.map +1 -0
  47. package/bin/plugins/plantuml-integration.d.ts +17 -0
  48. package/bin/plugins/plantuml-integration.d.ts.map +1 -0
  49. package/bin/plugins/plantuml-integration.js +111 -0
  50. package/bin/plugins/plantuml-integration.js.map +1 -0
  51. package/bin/plugins/redoc-integration.d.ts +25 -0
  52. package/bin/plugins/redoc-integration.d.ts.map +1 -0
  53. package/bin/plugins/redoc-integration.js +372 -0
  54. package/bin/plugins/redoc-integration.js.map +1 -0
  55. package/bin/plugins/search-integration.d.ts +20 -0
  56. package/bin/plugins/search-integration.d.ts.map +1 -0
  57. package/bin/plugins/search-integration.js +165 -0
  58. package/bin/plugins/search-integration.js.map +1 -0
  59. package/bin/templates/index.d.ts +4 -0
  60. package/bin/templates/index.d.ts.map +1 -0
  61. package/bin/templates/index.js +60 -0
  62. package/bin/templates/index.js.map +1 -0
  63. package/bin/templates/template-definitions.d.ts +10 -0
  64. package/bin/templates/template-definitions.d.ts.map +1 -0
  65. package/bin/templates/template-definitions.js +296 -0
  66. package/bin/templates/template-definitions.js.map +1 -0
  67. package/bin/tests/integration.test.d.ts +2 -0
  68. package/bin/tests/integration.test.d.ts.map +1 -0
  69. package/bin/tests/integration.test.js +171 -0
  70. package/bin/tests/integration.test.js.map +1 -0
  71. package/bin/types/index.d.ts +44 -0
  72. package/bin/types/index.d.ts.map +1 -0
  73. package/bin/types/index.js +2 -0
  74. package/bin/types/index.js.map +1 -0
  75. package/bin/utils/config-merger.d.ts +32 -0
  76. package/bin/utils/config-merger.d.ts.map +1 -0
  77. package/bin/utils/config-merger.js +216 -0
  78. package/bin/utils/config-merger.js.map +1 -0
  79. package/bin/utils/errors.d.ts +9 -0
  80. package/bin/utils/errors.d.ts.map +1 -0
  81. package/bin/utils/errors.js +22 -0
  82. package/bin/utils/errors.js.map +1 -0
  83. package/bin/utils/install.d.ts +5 -0
  84. package/bin/utils/install.d.ts.map +1 -0
  85. package/bin/utils/install.js +38 -0
  86. package/bin/utils/install.js.map +1 -0
  87. package/bin/utils/message-formatter.d.ts +15 -0
  88. package/bin/utils/message-formatter.d.ts.map +1 -0
  89. package/bin/utils/message-formatter.js +85 -0
  90. package/bin/utils/message-formatter.js.map +1 -0
  91. package/bin/utils/template-processor.d.ts +54 -0
  92. package/bin/utils/template-processor.d.ts.map +1 -0
  93. package/bin/utils/template-processor.js +139 -0
  94. package/bin/utils/template-processor.js.map +1 -0
  95. package/bin/utils/template-processor.test.d.ts +2 -0
  96. package/bin/utils/template-processor.test.d.ts.map +1 -0
  97. package/bin/utils/template-processor.test.js +120 -0
  98. package/bin/utils/template-processor.test.js.map +1 -0
  99. package/bin/utils/version.d.ts +2 -0
  100. package/bin/utils/version.d.ts.map +1 -0
  101. package/bin/utils/version.js +10 -0
  102. package/bin/utils/version.js.map +1 -0
  103. package/package.json +67 -0
  104. package/templates/classic-spec/docusaurus.config.js.template +106 -0
  105. package/templates/classic-spec/package.json.template +36 -0
  106. package/templates/external-design/docusaurus.config.js.template +123 -0
  107. package/templates/external-design/package.json.template +36 -0
  108. package/templates/internal-design/docusaurus.config.js.template +123 -0
  109. package/templates/internal-design/package.json.template +36 -0
  110. package/templates/project-analysis/docusaurus.config.js.template +113 -0
  111. package/templates/project-analysis/package.json.template +36 -0
  112. package/templates/requirements/docusaurus.config.js.template +119 -0
  113. package/templates/requirements/package.json.template +36 -0
@@ -0,0 +1,372 @@
1
+ export class RedocIntegration {
2
+ static getDefaultConfig() {
3
+ return {
4
+ specs: [
5
+ {
6
+ spec: 'static/openapi.yaml',
7
+ route: '/api/',
8
+ id: 'main-api'
9
+ }
10
+ ],
11
+ theme: {
12
+ primaryColor: '#1976d2',
13
+ primaryColorDark: '#1565c0'
14
+ }
15
+ };
16
+ }
17
+ static generateDocusaurusConfig(feature) {
18
+ const config = feature.config?.redocusaurus || RedocIntegration.getDefaultConfig();
19
+ return {
20
+ plugins: [
21
+ [
22
+ 'redocusaurus',
23
+ {
24
+ specs: config.specs || RedocIntegration.getDefaultConfig().specs,
25
+ theme: config.theme || RedocIntegration.getDefaultConfig().theme
26
+ }
27
+ ]
28
+ ]
29
+ };
30
+ }
31
+ static getDependencies() {
32
+ return {
33
+ 'redocusaurus': '^2.0.0'
34
+ };
35
+ }
36
+ static generateSampleOpenAPISpec() {
37
+ return `openapi: 3.0.3
38
+ info:
39
+ title: Sample API
40
+ description: |
41
+ これはサンプルAPIの仕様書です。
42
+
43
+ This is a sample API specification.
44
+ version: 1.0.0
45
+ contact:
46
+ name: API Support
47
+ email: support@example.com
48
+ license:
49
+ name: MIT
50
+ url: https://opensource.org/licenses/MIT
51
+
52
+ servers:
53
+ - url: https://api.example.com/v1
54
+ description: Production server
55
+ - url: https://staging-api.example.com/v1
56
+ description: Staging server
57
+
58
+ paths:
59
+ /users:
60
+ get:
61
+ summary: ユーザー一覧を取得 (Get list of users)
62
+ description: システムに登録されているユーザーの一覧を取得します
63
+ tags:
64
+ - Users
65
+ parameters:
66
+ - name: limit
67
+ in: query
68
+ description: 取得する件数の上限
69
+ required: false
70
+ schema:
71
+ type: integer
72
+ minimum: 1
73
+ maximum: 100
74
+ default: 20
75
+ - name: offset
76
+ in: query
77
+ description: 取得開始位置
78
+ required: false
79
+ schema:
80
+ type: integer
81
+ minimum: 0
82
+ default: 0
83
+ responses:
84
+ '200':
85
+ description: ユーザー一覧の取得に成功
86
+ content:
87
+ application/json:
88
+ schema:
89
+ type: object
90
+ properties:
91
+ users:
92
+ type: array
93
+ items:
94
+ $ref: '#/components/schemas/User'
95
+ total:
96
+ type: integer
97
+ description: 総件数
98
+ limit:
99
+ type: integer
100
+ description: 取得件数の上限
101
+ offset:
102
+ type: integer
103
+ description: 取得開始位置
104
+ '400':
105
+ description: リクエストパラメータが不正
106
+ content:
107
+ application/json:
108
+ schema:
109
+ $ref: '#/components/schemas/Error'
110
+ '500':
111
+ description: サーバーエラー
112
+ content:
113
+ application/json:
114
+ schema:
115
+ $ref: '#/components/schemas/Error'
116
+ post:
117
+ summary: 新しいユーザーを作成 (Create a new user)
118
+ description: 新しいユーザーをシステムに登録します
119
+ tags:
120
+ - Users
121
+ requestBody:
122
+ required: true
123
+ content:
124
+ application/json:
125
+ schema:
126
+ $ref: '#/components/schemas/CreateUserRequest'
127
+ responses:
128
+ '201':
129
+ description: ユーザーの作成に成功
130
+ content:
131
+ application/json:
132
+ schema:
133
+ $ref: '#/components/schemas/User'
134
+ '400':
135
+ description: リクエストボディが不正
136
+ content:
137
+ application/json:
138
+ schema:
139
+ $ref: '#/components/schemas/Error'
140
+ '409':
141
+ description: ユーザーが既に存在
142
+ content:
143
+ application/json:
144
+ schema:
145
+ $ref: '#/components/schemas/Error'
146
+ '500':
147
+ description: サーバーエラー
148
+ content:
149
+ application/json:
150
+ schema:
151
+ $ref: '#/components/schemas/Error'
152
+
153
+ /users/{userId}:
154
+ get:
155
+ summary: ユーザー詳細を取得 (Get user details)
156
+ description: 指定されたIDのユーザー詳細情報を取得します
157
+ tags:
158
+ - Users
159
+ parameters:
160
+ - name: userId
161
+ in: path
162
+ required: true
163
+ description: ユーザーID
164
+ schema:
165
+ type: string
166
+ format: uuid
167
+ responses:
168
+ '200':
169
+ description: ユーザー詳細の取得に成功
170
+ content:
171
+ application/json:
172
+ schema:
173
+ $ref: '#/components/schemas/User'
174
+ '404':
175
+ description: ユーザーが見つからない
176
+ content:
177
+ application/json:
178
+ schema:
179
+ $ref: '#/components/schemas/Error'
180
+ '500':
181
+ description: サーバーエラー
182
+ content:
183
+ application/json:
184
+ schema:
185
+ $ref: '#/components/schemas/Error'
186
+
187
+ components:
188
+ schemas:
189
+ User:
190
+ type: object
191
+ required:
192
+ - id
193
+ - name
194
+ - email
195
+ - createdAt
196
+ properties:
197
+ id:
198
+ type: string
199
+ format: uuid
200
+ description: ユーザーID
201
+ example: "123e4567-e89b-12d3-a456-426614174000"
202
+ name:
203
+ type: string
204
+ description: ユーザー名
205
+ minLength: 1
206
+ maxLength: 100
207
+ example: "田中太郎"
208
+ email:
209
+ type: string
210
+ format: email
211
+ description: メールアドレス
212
+ example: "tanaka@example.com"
213
+ age:
214
+ type: integer
215
+ description: 年齢
216
+ minimum: 0
217
+ maximum: 150
218
+ example: 30
219
+ createdAt:
220
+ type: string
221
+ format: date-time
222
+ description: 作成日時
223
+ example: "2023-01-01T00:00:00Z"
224
+ updatedAt:
225
+ type: string
226
+ format: date-time
227
+ description: 更新日時
228
+ example: "2023-01-01T00:00:00Z"
229
+
230
+ CreateUserRequest:
231
+ type: object
232
+ required:
233
+ - name
234
+ - email
235
+ properties:
236
+ name:
237
+ type: string
238
+ description: ユーザー名
239
+ minLength: 1
240
+ maxLength: 100
241
+ example: "田中太郎"
242
+ email:
243
+ type: string
244
+ format: email
245
+ description: メールアドレス
246
+ example: "tanaka@example.com"
247
+ age:
248
+ type: integer
249
+ description: 年齢
250
+ minimum: 0
251
+ maximum: 150
252
+ example: 30
253
+
254
+ Error:
255
+ type: object
256
+ required:
257
+ - code
258
+ - message
259
+ properties:
260
+ code:
261
+ type: string
262
+ description: エラーコード
263
+ example: "INVALID_REQUEST"
264
+ message:
265
+ type: string
266
+ description: エラーメッセージ
267
+ example: "リクエストパラメータが不正です"
268
+ details:
269
+ type: object
270
+ description: エラーの詳細情報
271
+ additionalProperties: true
272
+
273
+ securitySchemes:
274
+ BearerAuth:
275
+ type: http
276
+ scheme: bearer
277
+ bearerFormat: JWT
278
+
279
+ security:
280
+ - BearerAuth: []
281
+
282
+ tags:
283
+ - name: Users
284
+ description: ユーザー管理API (User management API)
285
+ `;
286
+ }
287
+ static generateSampleDocumentation() {
288
+ return `# API Documentation
289
+
290
+ このページではRedocを使用してOpenAPI仕様書を表示しています。
291
+
292
+ ## API概要
293
+
294
+ Sample APIは、ユーザー管理機能を提供するRESTful APIです。
295
+
296
+ ### 主な機能
297
+
298
+ 1. **ユーザー管理**
299
+ - ユーザー一覧の取得
300
+ - ユーザー詳細の取得
301
+ - 新しいユーザーの作成
302
+
303
+ ### 認証
304
+
305
+ このAPIはJWT(JSON Web Token)を使用したBearer認証を採用しています。
306
+
307
+ ### レスポンス形式
308
+
309
+ すべてのAPIレスポンスはJSON形式で返されます。
310
+
311
+ ### エラーハンドリング
312
+
313
+ エラーが発生した場合、適切なHTTPステータスコードとエラー情報を含むJSONレスポンスが返されます。
314
+
315
+ ## API仕様書
316
+
317
+ 以下のRedocビューアーでAPI仕様書の詳細を確認できます:
318
+
319
+ import Redoc from '@theme/Redoc';
320
+
321
+ <Redoc specUrl="/openapi.yaml" />
322
+
323
+ ## 使用例
324
+
325
+ ### ユーザー一覧の取得
326
+
327
+ \`\`\`bash
328
+ curl -X GET "https://api.example.com/v1/users?limit=10&offset=0" \\
329
+ -H "Authorization: Bearer YOUR_JWT_TOKEN"
330
+ \`\`\`
331
+
332
+ ### 新しいユーザーの作成
333
+
334
+ \`\`\`bash
335
+ curl -X POST "https://api.example.com/v1/users" \\
336
+ -H "Content-Type: application/json" \\
337
+ -H "Authorization: Bearer YOUR_JWT_TOKEN" \\
338
+ -d '{
339
+ "name": "田中太郎",
340
+ "email": "tanaka@example.com",
341
+ "age": 30
342
+ }'
343
+ \`\`\`
344
+
345
+ 詳細な使用方法については、上記のAPI仕様書を参照してください。
346
+ `;
347
+ }
348
+ static validateConfig(config) {
349
+ if (!config.specs || config.specs.length === 0) {
350
+ return {
351
+ valid: false,
352
+ message: 'At least one OpenAPI spec must be configured'
353
+ };
354
+ }
355
+ for (const spec of config.specs) {
356
+ if (!spec.spec || !spec.route) {
357
+ return {
358
+ valid: false,
359
+ message: 'Each spec must have both "spec" and "route" properties'
360
+ };
361
+ }
362
+ if (!spec.route.startsWith('/')) {
363
+ return {
364
+ valid: false,
365
+ message: 'Route must start with "/"'
366
+ };
367
+ }
368
+ }
369
+ return { valid: true };
370
+ }
371
+ }
372
+ //# sourceMappingURL=redoc-integration.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redoc-integration.js","sourceRoot":"","sources":["../../src/plugins/redoc-integration.ts"],"names":[],"mappings":"AAgBA,MAAM,OAAO,gBAAgB;IAC3B,MAAM,CAAC,gBAAgB;QACrB,OAAO;YACL,KAAK,EAAE;gBACL;oBACE,IAAI,EAAE,qBAAqB;oBAC3B,KAAK,EAAE,OAAO;oBACd,EAAE,EAAE,UAAU;iBACf;aACF;YACD,KAAK,EAAE;gBACL,YAAY,EAAE,SAAS;gBACvB,gBAAgB,EAAE,SAAS;aAC5B;SACF,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,wBAAwB,CAAC,OAAyB;QACvD,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,YAAY,IAAI,gBAAgB,CAAC,gBAAgB,EAAE,CAAC;QAEnF,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,cAAc;oBACd;wBACE,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,gBAAgB,CAAC,gBAAgB,EAAE,CAAC,KAAK;wBAChE,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,gBAAgB,CAAC,gBAAgB,EAAE,CAAC,KAAK;qBACjE;iBACF;aACF;SACF,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,eAAe;QACpB,OAAO;YACL,cAAc,EAAE,QAAQ;SACzB,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,yBAAyB;QAC9B,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwPV,CAAC;IACA,CAAC;IAED,MAAM,CAAC,2BAA2B;QAChC,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA0DV,CAAC;IACA,CAAC;IAED,MAAM,CAAC,cAAc,CAAC,MAAmB;QACvC,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC/C,OAAO;gBACL,KAAK,EAAE,KAAK;gBACZ,OAAO,EAAE,8CAA8C;aACxD,CAAC;QACJ,CAAC;QAED,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;YAChC,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;gBAC9B,OAAO;oBACL,KAAK,EAAE,KAAK;oBACZ,OAAO,EAAE,wDAAwD;iBAClE,CAAC;YACJ,CAAC;YAED,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;gBAChC,OAAO;oBACL,KAAK,EAAE,KAAK;oBACZ,OAAO,EAAE,2BAA2B;iBACrC,CAAC;YACJ,CAAC;QACH,CAAC;QAED,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IACzB,CAAC;CACF"}
@@ -0,0 +1,20 @@
1
+ import type { FeatureSelection } from '../types/index.js';
2
+ export interface SearchConfig {
3
+ hashed?: boolean;
4
+ language?: string[];
5
+ removeDefaultStopWordFilter?: boolean;
6
+ highlightSearchTermsOnTargetPage?: boolean;
7
+ searchResultLimits?: number;
8
+ searchResultContextMaxLength?: number;
9
+ }
10
+ export declare class SearchIntegration {
11
+ static getDefaultConfig(): SearchConfig;
12
+ static generateDocusaurusConfig(feature: FeatureSelection): any;
13
+ static getDependencies(): Record<string, string>;
14
+ static generateSearchDocumentation(): string;
15
+ static validateConfig(config: SearchConfig): {
16
+ valid: boolean;
17
+ message?: string;
18
+ };
19
+ }
20
+ //# sourceMappingURL=search-integration.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search-integration.d.ts","sourceRoot":"","sources":["../../src/plugins/search-integration.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAG1D,MAAM,WAAW,YAAY;IAC3B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,2BAA2B,CAAC,EAAE,OAAO,CAAC;IACtC,gCAAgC,CAAC,EAAE,OAAO,CAAC;IAC3C,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,4BAA4B,CAAC,EAAE,MAAM,CAAC;CACvC;AAED,qBAAa,iBAAiB;IAC5B,MAAM,CAAC,gBAAgB,IAAI,YAAY;IAWvC,MAAM,CAAC,wBAAwB,CAAC,OAAO,EAAE,gBAAgB,GAAG,GAAG;IA0B/D,MAAM,CAAC,eAAe,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAMhD,MAAM,CAAC,2BAA2B,IAAI,MAAM;IAsG5C,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,YAAY,GAAG;QAAE,KAAK,EAAE,OAAO,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE;CAwBlF"}
@@ -0,0 +1,165 @@
1
+ import { LANG } from '../constants/languages.js';
2
+ export class SearchIntegration {
3
+ static getDefaultConfig() {
4
+ return {
5
+ hashed: false,
6
+ language: [LANG.EN.code, 'ja'],
7
+ removeDefaultStopWordFilter: false,
8
+ highlightSearchTermsOnTargetPage: true,
9
+ searchResultLimits: 8,
10
+ searchResultContextMaxLength: 50
11
+ };
12
+ }
13
+ static generateDocusaurusConfig(feature) {
14
+ const config = feature.config?.search || SearchIntegration.getDefaultConfig();
15
+ return {
16
+ themes: [
17
+ [
18
+ '@easyops-cn/docusaurus-search-local',
19
+ {
20
+ hashed: config.hashed,
21
+ language: config.language,
22
+ removeDefaultStopWordFilter: config.removeDefaultStopWordFilter,
23
+ highlightSearchTermsOnTargetPage: config.highlightSearchTermsOnTargetPage,
24
+ searchResultLimits: config.searchResultLimits,
25
+ searchResultContextMaxLength: config.searchResultContextMaxLength,
26
+ // 日本語検索の最適化
27
+ indexDocs: true,
28
+ indexBlog: true,
29
+ indexPages: false,
30
+ docsRouteBasePath: '/docs',
31
+ blogRouteBasePath: '/blog'
32
+ }
33
+ ]
34
+ ]
35
+ };
36
+ }
37
+ static getDependencies() {
38
+ return {
39
+ '@easyops-cn/docusaurus-search-local': '^0.52.2'
40
+ };
41
+ }
42
+ static generateSearchDocumentation() {
43
+ return `# 検索機能 (Search Functionality)
44
+
45
+ このドキュメントサイトには@easyops-cn/docusaurus-search-localを使用したローカル検索機能が統合されています。
46
+
47
+ ## 使用方法
48
+
49
+ 1. **キーボードショートカット**
50
+ - \`Ctrl + K\` (Windows/Linux) または \`Cmd + K\` (Mac) で検索ボックスを開く
51
+ - \`/\` キーでも検索ボックスを開くことができます
52
+
53
+ 2. **検索ボックス**
54
+ - ナビゲーションバーの検索アイコンをクリック
55
+ - 検索したいキーワードを入力
56
+
57
+ ## 検索のコツ
58
+
59
+ ### 基本的な検索
60
+
61
+ - **単語検索**: 単語を入力するだけで関連するページを検索
62
+ - **フレーズ検索**: 引用符で囲むと完全一致検索
63
+ - **部分一致**: 単語の一部でも検索可能
64
+
65
+ ### 高度な検索
66
+
67
+ - **AND検索**: 複数のキーワードをスペースで区切る
68
+ - **除外検索**: \`-keyword\` で特定の単語を除外
69
+
70
+ ### 日本語検索
71
+
72
+ - ひらがな、カタカナ、漢字での検索に対応
73
+ - 部分一致検索が可能
74
+ - 英語と日本語の混在検索も可能
75
+
76
+ ## 検索対象
77
+
78
+ 以下のコンテンツが検索対象となります:
79
+
80
+ - ドキュメントページのタイトル
81
+ - ドキュメントの本文
82
+ - ヘッダー(見出し)
83
+ - ブログ記事(有効な場合)
84
+
85
+ ## 検索結果
86
+
87
+ 検索結果には以下の情報が表示されます:
88
+
89
+ - **ページタイトル**: 該当するページの名前
90
+ - **セクション**: 該当する見出しレベル
91
+ - **プレビュー**: 検索キーワード周辺のテキスト
92
+ - **パンくずリスト**: ページの階層構造
93
+
94
+ ## 設定オプション
95
+
96
+ ### 基本設定
97
+
98
+ - **hashed**: 検索インデックスのハッシュ化(デフォルト: false)
99
+ - **language**: 検索対象言語(デフォルト: ['en', 'ja'])
100
+ - **removeDefaultStopWordFilter**: デフォルトストップワードフィルターの無効化
101
+ - **highlightSearchTermsOnTargetPage**: 検索語のハイライト表示
102
+ - **searchResultLimits**: 検索結果の表示件数制限
103
+ - **searchResultContextMaxLength**: 検索結果コンテキストの最大長
104
+
105
+ ### 詳細設定
106
+
107
+ - **indexDocs**: ドキュメントのインデックス化(デフォルト: true)
108
+ - **indexBlog**: ブログのインデックス化(デフォルト: true)
109
+ - **indexPages**: 静的ページのインデックス化(デフォルト: false)
110
+
111
+ ## トラブルシューティング
112
+
113
+ ### 検索結果が表示されない場合
114
+
115
+ 1. **キーワードの確認**
116
+ - スペルミスがないか確認
117
+ - 別の表現や類義語を試す
118
+
119
+ 2. **検索範囲の確認**
120
+ - 該当するコンテンツが存在するか確認
121
+ - 最近追加されたコンテンツは検索インデックスの更新が必要な場合があります
122
+
123
+ 3. **ブラウザの確認**
124
+ - ブラウザのキャッシュをクリア
125
+ - JavaScriptが有効になっているか確認
126
+
127
+ ### 検索が遅い場合
128
+
129
+ - より具体的なキーワードを使用
130
+ - 検索結果を絞り込むために追加のキーワードを使用
131
+
132
+ ### 日本語検索で問題がある場合
133
+
134
+ - 異なる表記(ひらがな/カタカナ/漢字)を試す
135
+ - 英語での検索も併用する
136
+
137
+ ## 参考資料
138
+
139
+ - [@easyops-cn/docusaurus-search-local ドキュメント](https://github.com/easyops-cn/docusaurus-search-local)
140
+ - [Docusaurus 検索ガイド](https://docusaurus.io/docs/search)
141
+ `;
142
+ }
143
+ static validateConfig(config) {
144
+ if (config.language && !Array.isArray(config.language)) {
145
+ return {
146
+ valid: false,
147
+ message: 'Search language must be an array'
148
+ };
149
+ }
150
+ if (config.searchResultLimits && (typeof config.searchResultLimits !== 'number' || config.searchResultLimits <= 0)) {
151
+ return {
152
+ valid: false,
153
+ message: 'Search result limits must be a positive number'
154
+ };
155
+ }
156
+ if (config.searchResultContextMaxLength && (typeof config.searchResultContextMaxLength !== 'number' || config.searchResultContextMaxLength <= 0)) {
157
+ return {
158
+ valid: false,
159
+ message: 'Search result context max length must be a positive number'
160
+ };
161
+ }
162
+ return { valid: true };
163
+ }
164
+ }
165
+ //# sourceMappingURL=search-integration.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search-integration.js","sourceRoot":"","sources":["../../src/plugins/search-integration.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,2BAA2B,CAAC;AAWjD,MAAM,OAAO,iBAAiB;IAC5B,MAAM,CAAC,gBAAgB;QACrB,OAAO;YACL,MAAM,EAAE,KAAK;YACb,QAAQ,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;YAC9B,2BAA2B,EAAE,KAAK;YAClC,gCAAgC,EAAE,IAAI;YACtC,kBAAkB,EAAE,CAAC;YACrB,4BAA4B,EAAE,EAAE;SACjC,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,wBAAwB,CAAC,OAAyB;QACvD,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,MAAM,IAAI,iBAAiB,CAAC,gBAAgB,EAAE,CAAC;QAE9E,OAAO;YACL,MAAM,EAAE;gBACN;oBACE,qCAAqC;oBACrC;wBACE,MAAM,EAAE,MAAM,CAAC,MAAM;wBACrB,QAAQ,EAAE,MAAM,CAAC,QAAQ;wBACzB,2BAA2B,EAAE,MAAM,CAAC,2BAA2B;wBAC/D,gCAAgC,EAAE,MAAM,CAAC,gCAAgC;wBACzE,kBAAkB,EAAE,MAAM,CAAC,kBAAkB;wBAC7C,4BAA4B,EAAE,MAAM,CAAC,4BAA4B;wBACjE,YAAY;wBACZ,SAAS,EAAE,IAAI;wBACf,SAAS,EAAE,IAAI;wBACf,UAAU,EAAE,KAAK;wBACjB,iBAAiB,EAAE,OAAO;wBAC1B,iBAAiB,EAAE,OAAO;qBAC3B;iBACF;aACF;SACF,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,eAAe;QACpB,OAAO;YACL,qCAAqC,EAAE,SAAS;SACjD,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,2BAA2B;QAChC,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkGV,CAAC;IACA,CAAC;IAED,MAAM,CAAC,cAAc,CAAC,MAAoB;QACxC,IAAI,MAAM,CAAC,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;YACvD,OAAO;gBACL,KAAK,EAAE,KAAK;gBACZ,OAAO,EAAE,kCAAkC;aAC5C,CAAC;QACJ,CAAC;QAED,IAAI,MAAM,CAAC,kBAAkB,IAAI,CAAC,OAAO,MAAM,CAAC,kBAAkB,KAAK,QAAQ,IAAI,MAAM,CAAC,kBAAkB,IAAI,CAAC,CAAC,EAAE,CAAC;YACnH,OAAO;gBACL,KAAK,EAAE,KAAK;gBACZ,OAAO,EAAE,gDAAgD;aAC1D,CAAC;QACJ,CAAC;QAED,IAAI,MAAM,CAAC,4BAA4B,IAAI,CAAC,OAAO,MAAM,CAAC,4BAA4B,KAAK,QAAQ,IAAI,MAAM,CAAC,4BAA4B,IAAI,CAAC,CAAC,EAAE,CAAC;YACjJ,OAAO;gBACL,KAAK,EAAE,KAAK;gBACZ,OAAO,EAAE,4DAA4D;aACtE,CAAC;QACJ,CAAC;QAED,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IACzB,CAAC;CACF"}
@@ -0,0 +1,4 @@
1
+ import type { TemplateType } from '../types/index.js';
2
+ import { type Language } from '../constants/languages.js';
3
+ export declare function getAvailableTemplates(language?: Language): TemplateType[];
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/templates/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAQ,KAAK,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAkEhE,wBAAgB,qBAAqB,CAAC,QAAQ,GAAE,QAAuB,GAAG,YAAY,EAAE,CAOvF"}
@@ -0,0 +1,60 @@
1
+ import { LANG } from '../constants/languages.js';
2
+ const TEMPLATE_DATA = [
3
+ {
4
+ name: 'classic-spec',
5
+ displayName: {
6
+ [LANG.EN.code]: 'Classic Specification',
7
+ [LANG.JP.code]: '基本仕様書'
8
+ },
9
+ description: {
10
+ [LANG.EN.code]: 'General-purpose specification documentation template',
11
+ [LANG.JP.code]: '汎用的な仕様書ドキュメントテンプレート'
12
+ },
13
+ features: ['search', 'plantuml']
14
+ },
15
+ {
16
+ name: 'api-spec',
17
+ displayName: {
18
+ [LANG.EN.code]: 'API Specification',
19
+ [LANG.JP.code]: 'API仕様書'
20
+ },
21
+ description: {
22
+ [LANG.EN.code]: 'Template for API specification and documentation',
23
+ [LANG.JP.code]: 'API仕様書・ドキュメント用テンプレート'
24
+ },
25
+ features: ['search', 'plantuml', 'redoc']
26
+ },
27
+ {
28
+ name: 'technical-spec',
29
+ displayName: {
30
+ [LANG.EN.code]: 'Technical Specification',
31
+ [LANG.JP.code]: '技術仕様書'
32
+ },
33
+ description: {
34
+ [LANG.EN.code]: 'Template for technical specification and architecture',
35
+ [LANG.JP.code]: '技術仕様書・アーキテクチャ用テンプレート'
36
+ },
37
+ features: ['search', 'plantuml']
38
+ },
39
+ {
40
+ name: 'enterprise-spec',
41
+ displayName: {
42
+ [LANG.EN.code]: 'Enterprise Specification',
43
+ [LANG.JP.code]: '企業向け仕様書'
44
+ },
45
+ description: {
46
+ [LANG.EN.code]: 'Template for enterprise specification and documentation',
47
+ [LANG.JP.code]: '企業向け仕様書・ドキュメント用テンプレート'
48
+ },
49
+ features: ['search', 'plantuml', 'redoc', 'i18n']
50
+ }
51
+ ];
52
+ export function getAvailableTemplates(language = LANG.EN.code) {
53
+ return TEMPLATE_DATA.map(template => ({
54
+ name: template.name,
55
+ displayName: template.displayName[language],
56
+ description: template.description[language],
57
+ features: template.features
58
+ }));
59
+ }
60
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/templates/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAiB,MAAM,2BAA2B,CAAC;AAehE,MAAM,aAAa,GAAmB;IACpC;QACE,IAAI,EAAE,cAAc;QACpB,WAAW,EAAE;YACX,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,uBAAuB;YACvC,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,OAAO;SACxB;QACD,WAAW,EAAE;YACX,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,sDAAsD;YACtE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,qBAAqB;SACtC;QACD,QAAQ,EAAE,CAAC,QAAQ,EAAE,UAAU,CAAC;KACjC;IACD;QACE,IAAI,EAAE,UAAU;QAChB,WAAW,EAAE;YACX,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,mBAAmB;YACnC,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,QAAQ;SACzB;QACD,WAAW,EAAE;YACX,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,kDAAkD;YAClE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,sBAAsB;SACvC;QACD,QAAQ,EAAE,CAAC,QAAQ,EAAE,UAAU,EAAE,OAAO,CAAC;KAC1C;IACD;QACE,IAAI,EAAE,gBAAgB;QACtB,WAAW,EAAE;YACX,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,yBAAyB;YACzC,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,OAAO;SACxB;QACD,WAAW,EAAE;YACX,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,uDAAuD;YACvE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,sBAAsB;SACvC;QACD,QAAQ,EAAE,CAAC,QAAQ,EAAE,UAAU,CAAC;KACjC;IACD;QACE,IAAI,EAAE,iBAAiB;QACvB,WAAW,EAAE;YACX,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,0BAA0B;YAC1C,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,SAAS;SAC1B;QACD,WAAW,EAAE;YACX,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,yDAAyD;YACzE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,uBAAuB;SACxC;QACD,QAAQ,EAAE,CAAC,QAAQ,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,CAAC;KAClD;CACF,CAAC;AAEF,MAAM,UAAU,qBAAqB,CAAC,WAAqB,IAAI,CAAC,EAAE,CAAC,IAAI;IACrE,OAAO,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QACpC,IAAI,EAAE,QAAQ,CAAC,IAA4B;QAC3C,WAAW,EAAE,QAAQ,CAAC,WAAW,CAAC,QAAQ,CAAC;QAC3C,WAAW,EAAE,QAAQ,CAAC,WAAW,CAAC,QAAQ,CAAC;QAC3C,QAAQ,EAAE,QAAQ,CAAC,QAAQ;KAC5B,CAAC,CAAC,CAAC;AACN,CAAC"}
@@ -0,0 +1,10 @@
1
+ import type { TemplateConfig } from '../types/index.js';
2
+ export declare const templateDefinitions: Record<string, TemplateConfig>;
3
+ export declare function getTemplateDefinition(templateName: string): TemplateConfig | undefined;
4
+ export declare function getAllTemplateNames(): string[];
5
+ export declare function getTemplateDisplayNames(): Array<{
6
+ name: string;
7
+ displayName: string;
8
+ description: string;
9
+ }>;
10
+ //# sourceMappingURL=template-definitions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"template-definitions.d.ts","sourceRoot":"","sources":["../../src/templates/template-definitions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAExD,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CA6R9D,CAAC;AAEF,wBAAgB,qBAAqB,CAAC,YAAY,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS,CAEtF;AAED,wBAAgB,mBAAmB,IAAI,MAAM,EAAE,CAE9C;AAED,wBAAgB,uBAAuB,IAAI,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,CAAC,CAM3G"}