@skspwork/config-doc 2.0.4 → 2.0.5

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 (78) hide show
  1. package/package.json +2 -2
  2. package/packages/web/.next/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  3. package/packages/web/.next/standalone/.next/server/app/_not-found.html +1 -1
  4. package/packages/web/.next/standalone/.next/server/app/_not-found.rsc +2 -2
  5. package/packages/web/.next/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +2 -2
  6. package/packages/web/.next/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +2 -2
  7. package/packages/web/.next/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  8. package/packages/web/.next/standalone/.next/server/app/api/config/save/route.js +1 -1
  9. package/packages/web/.next/standalone/.next/server/app/api/config/save/route.js.nft.json +1 -1
  10. package/packages/web/.next/standalone/.next/server/app/api/export/route.js +3 -3
  11. package/packages/web/.next/standalone/.next/server/app/api/export/route.js.nft.json +1 -1
  12. package/packages/web/.next/standalone/.next/server/app/index.html +1 -1
  13. package/packages/web/.next/standalone/.next/server/app/index.rsc +3 -3
  14. package/packages/web/.next/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
  15. package/packages/web/.next/standalone/.next/server/app/index.segments/_full.segment.rsc +3 -3
  16. package/packages/web/.next/standalone/.next/server/app/index.segments/_index.segment.rsc +2 -2
  17. package/packages/web/.next/standalone/.next/server/app/index.segments/_tree.segment.rsc +1 -1
  18. package/packages/web/.next/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
  19. package/packages/web/.next/standalone/.next/server/chunks/[root-of-the-server]__40e87302._.js +3 -0
  20. package/packages/web/.next/standalone/.next/server/chunks/[root-of-the-server]__93da9fce._.js +1 -1
  21. package/packages/web/.next/standalone/.next/server/chunks/[root-of-the-server]__c9655ac8._.js +3 -0
  22. package/packages/web/.next/standalone/.next/server/chunks/[root-of-the-server]__e19366f6._.js +1 -1
  23. package/packages/web/.next/standalone/.next/server/chunks/node_modules_next_dist_esm_build_templates_app-route_d09de205.js +345 -27
  24. package/packages/web/.next/standalone/.next/server/chunks/ssr/app_page_tsx_55b2e5ee._.js +1 -1
  25. package/packages/web/.next/standalone/.next/server/pages/404.html +1 -1
  26. package/packages/web/.next/standalone/.next/static/chunks/02de70e4c30afe2f.js +1 -0
  27. package/packages/web/.next/standalone/.next/static/chunks/862e384b52cfebf3.css +3 -0
  28. package/packages/web/.next/standalone/app/api/config/metadata/route.ts +5 -3
  29. package/packages/web/.next/standalone/playwright-report/index.html +1 -1
  30. package/packages/web/.next/static/chunks/02de70e4c30afe2f.js +1 -0
  31. package/packages/web/.next/static/chunks/862e384b52cfebf3.css +3 -0
  32. package/packages/web/.next/standalone/.next/server/chunks/[root-of-the-server]__1a68b1f3._.js +0 -3
  33. package/packages/web/.next/standalone/.next/server/chunks/[root-of-the-server]__2c94dfea._.js +0 -3
  34. package/packages/web/.next/standalone/.next/static/chunks/9726c2cde77e0916.js +0 -1
  35. package/packages/web/.next/standalone/.next/static/chunks/cd878566fda12635.css +0 -3
  36. package/packages/web/.next/standalone/app/api/config/load/route.ts +0 -57
  37. package/packages/web/.next/standalone/app/api/config/save/route.ts +0 -73
  38. package/packages/web/.next/standalone/app/api/export/route.ts +0 -75
  39. package/packages/web/.next/standalone/app/api/export/settings/route.ts +0 -144
  40. package/packages/web/.next/standalone/app/api/files/browse/route.ts +0 -46
  41. package/packages/web/.next/standalone/app/api/project/route.ts +0 -41
  42. package/packages/web/.next/standalone/app/globals.css +0 -26
  43. package/packages/web/.next/standalone/app/icon.svg +0 -41
  44. package/packages/web/.next/standalone/app/layout.tsx +0 -34
  45. package/packages/web/.next/standalone/app/page.tsx +0 -135
  46. package/packages/web/.next/standalone/components/ConfigFileTabs.tsx +0 -188
  47. package/packages/web/.next/standalone/components/ConfigTree.tsx +0 -176
  48. package/packages/web/.next/standalone/components/EditableList.tsx +0 -337
  49. package/packages/web/.next/standalone/components/ExportDialog.tsx +0 -234
  50. package/packages/web/.next/standalone/components/FieldsEditor.tsx +0 -92
  51. package/packages/web/.next/standalone/components/FileBrowser.tsx +0 -290
  52. package/packages/web/.next/standalone/components/Header.tsx +0 -37
  53. package/packages/web/.next/standalone/components/PropertyEditor.tsx +0 -102
  54. package/packages/web/.next/standalone/components/TagEditor.tsx +0 -86
  55. package/packages/web/.next/standalone/components/Toast.tsx +0 -91
  56. package/packages/web/.next/standalone/eslint.config.mjs +0 -18
  57. package/packages/web/.next/standalone/hooks/useConfigManager.ts +0 -653
  58. package/packages/web/.next/standalone/lib/configManagerUtils.ts +0 -84
  59. package/packages/web/.next/standalone/lib/configParser.ts +0 -155
  60. package/packages/web/.next/standalone/lib/fileSystem.ts +0 -186
  61. package/packages/web/.next/standalone/lib/getRootPath.ts +0 -45
  62. package/packages/web/.next/standalone/lib/htmlGenerator.ts +0 -865
  63. package/packages/web/.next/standalone/lib/jsonUtils.ts +0 -26
  64. package/packages/web/.next/standalone/lib/markdownGenerator.ts +0 -110
  65. package/packages/web/.next/standalone/lib/markdownTableGenerator.ts +0 -103
  66. package/packages/web/.next/standalone/lib/storage.ts +0 -104
  67. package/packages/web/.next/standalone/lib/utils.ts +0 -89
  68. package/packages/web/.next/standalone/next.config.ts +0 -10
  69. package/packages/web/.next/standalone/package-lock.json +0 -8216
  70. package/packages/web/.next/standalone/playwright.config.ts +0 -27
  71. package/packages/web/.next/standalone/postcss.config.mjs +0 -7
  72. package/packages/web/.next/standalone/test-results/.last-run.json +0 -4
  73. package/packages/web/.next/standalone/tsconfig.json +0 -34
  74. package/packages/web/.next/standalone/tsconfig.tsbuildinfo +0 -1
  75. package/packages/web/.next/standalone/types/index.ts +0 -74
  76. package/packages/web/.next/standalone/vitest.config.ts +0 -14
  77. package/packages/web/.next/static/chunks/9726c2cde77e0916.js +0 -1
  78. package/packages/web/.next/static/chunks/cd878566fda12635.css +0 -3
@@ -1,4 +1,4 @@
1
- module.exports=[47482,e=>{"use strict";var t=e.i(47909),r=e.i(74017),n=e.i(96250),a=e.i(59756),i=e.i(61916),o=e.i(74677),l=e.i(69741),s=e.i(16795),c=e.i(87718),d=e.i(95169),p=e.i(47587),f=e.i(66012),u=e.i(70101),h=e.i(26937),g=e.i(10372),m=e.i(93695);e.i(52474);var b=e.i(220),y=e.i(89171),v=e.i(27637),x=e.i(21127);function w(e){return e.replace(/\|/g,"\\|").replace(/\n/g,"<br>").replace(/\r/g,"")}function C(e){return e.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#039;")}function E(e,t){let r=t.split(/(?=\[)|:/),n=e;for(let e of r){if(null==n)return;if(e.startsWith("[")&&e.endsWith("]")){let t=parseInt(e.slice(1,-1),10);if(!Array.isArray(n))return;n=n[t]}else if(e&&"object"==typeof n&&e in n)n=n[e];else if(e)return}return n}class S{fsService;storageService;constructor(e){this.fsService=new v.FileSystemService(e),this.storageService=new x.StorageService(this.fsService)}async generateHtml(){let e=await this.fsService.loadProjectSettings();if(!e||!e.configFiles||0===e.configFiles.length)return this.generateEmptyHtml();let t=e.fields?Object.keys(e.fields):[],r=e.availableTags||[],n=[];for(let t of e.configFiles)try{let e=t.split(/[/\\]/).pop()||"config.json",r=this.storageService.getDocsFileName(t),a=await this.fsService.loadConfigFile(t),i=await this.fsService.loadConfigDocs(r);n.push({filePath:t,fileName:e,configData:a,docs:i||{configFilePath:t,lastModified:new Date().toISOString(),properties:{}}})}catch(e){console.error(`Failed to load config: ${t}`,e)}let a={projectName:e.projectName,createdAt:"",lastModified:new Date().toISOString(),configFiles:[]};return this.generateFullHtml(a,n,t,r)}generateEmptyHtml(){return`<!DOCTYPE html>
1
+ module.exports=[47482,e=>{"use strict";var t=e.i(47909),a=e.i(74017),r=e.i(96250),n=e.i(59756),i=e.i(61916),o=e.i(74677),s=e.i(69741),l=e.i(16795),c=e.i(87718),d=e.i(95169),p=e.i(47587),f=e.i(66012),h=e.i(70101),u=e.i(26937),g=e.i(10372),m=e.i(93695);e.i(52474);var y=e.i(220),b=e.i(89171),P=e.i(27637),v=e.i(21127);function x(e){return e.replace(/\|/g,"\\|").replace(/\n/g,"<br>").replace(/\r/g,"")}function w(e){return e.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#039;")}function C(e,t){let a=t.split(/(?=\[)|:/),r=e;for(let e of a){if(null==r)return;if(e.startsWith("[")&&e.endsWith("]")){let t=parseInt(e.slice(1,-1),10);if(!Array.isArray(r))return;r=r[t]}else if(e&&"object"==typeof r&&e in r)r=r[e];else if(e)return}return r}class D{fsService;storageService;constructor(e){this.fsService=new P.FileSystemService(e),this.storageService=new v.StorageService(this.fsService)}async generateHtml(){let e=await this.fsService.loadProjectSettings();if(!e||!e.configFiles||0===e.configFiles.length)return this.generateEmptyHtml();let t=e.fields?Object.keys(e.fields):[],a=e.availableTags||[],r=[];for(let t of e.configFiles)try{let e=t.split(/[/\\]/).pop()||"config.json",a=this.storageService.getDocsFileName(t),n=await this.fsService.loadConfigFile(t),i=await this.fsService.loadConfigDocs(a);r.push({filePath:t,fileName:e,configData:n,docs:i||{configFilePath:t,lastModified:new Date().toISOString(),properties:{}}})}catch(e){console.error(`Failed to load config: ${t}`,e)}let n={projectName:e.projectName,createdAt:"",lastModified:new Date().toISOString(),configFiles:[]};return this.generateFullHtml(n,r,t,a,e.associativeArrays||[])}generateEmptyHtml(){return`<!DOCTYPE html>
2
2
  <html lang="ja">
3
3
  <head>
4
4
  <meta charset="UTF-8">
@@ -17,19 +17,19 @@ module.exports=[47482,e=>{"use strict";var t=e.i(47909),r=e.i(74017),n=e.i(96250
17
17
  </main>
18
18
  </div>
19
19
  </body>
20
- </html>`}generateFullHtml(e,t,r,n){let a=JSON.stringify(t,null,2),i=JSON.stringify(r),o=JSON.stringify(n);return`<!DOCTYPE html>
20
+ </html>`}generateFullHtml(e,t,a,r,n){let i=JSON.stringify(t,null,2),o=JSON.stringify(a),s=JSON.stringify(r),l=JSON.stringify(n);return`<!DOCTYPE html>
21
21
  <html lang="ja">
22
22
  <head>
23
23
  <meta charset="UTF-8">
24
24
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
25
- <title>${C(e.projectName)} - ConfigDoc</title>
25
+ <title>${w(e.projectName)} - ConfigDoc</title>
26
26
  ${this.getStyles()}
27
27
  </head>
28
28
  <body>
29
29
  <div class="container">
30
30
  <header>
31
31
  <div class="header-content">
32
- <h1>${C(e.projectName)}</h1>
32
+ <h1>${w(e.projectName)}</h1>
33
33
  <p class="meta">最終更新: ${new Date(e.lastModified).toLocaleString("ja-JP")}</p>
34
34
  </div>
35
35
  </header>
@@ -51,9 +51,10 @@ module.exports=[47482,e=>{"use strict";var t=e.i(47909),r=e.i(74017),n=e.i(96250
51
51
  </div>
52
52
 
53
53
  <script>
54
- const configs = ${a};
55
- const fieldKeys = ${i};
56
- const availableTags = ${o};
54
+ const configs = ${i};
55
+ const fieldKeys = ${o};
56
+ const availableTags = ${s};
57
+ const associativeArrays = ${l};
57
58
  let activeConfigIndex = 0;
58
59
  let selectedPath = '';
59
60
  let currentSearchQuery = '';
@@ -71,6 +72,291 @@ module.exports=[47482,e=>{"use strict";var t=e.i(47909),r=e.i(74017),n=e.i(96250
71
72
  });
72
73
  }
73
74
 
75
+ // テンプレートパスに変換(配列インデックスをワイルドカードに)
76
+ function normalizeToTemplatePath(path) {
77
+ return path.replace(/\\[\\d+\\]/g, '[*]');
78
+ }
79
+
80
+ // テンプレートパスにマッチするか判定
81
+ function matchesTemplatePath(concretePath, templatePath) {
82
+ const regexPattern = templatePath
83
+ .replace(/[.*+?^\${}()|[\\]\\\\]/g, '\\\\$&')
84
+ .replace(/\\\\\\[\\\\\\*\\\\\\]/g, '\\\\[\\\\d+\\\\]');
85
+ const regex = new RegExp('^' + regexPattern + '$');
86
+ return regex.test(concretePath);
87
+ }
88
+
89
+ // パスから値を取得するヘルパー関数
90
+ function getValueByPath(obj, path) {
91
+ if (!path || !obj) return obj;
92
+ const keys = path.split(/(?=\\[)|:/);
93
+ let value = obj;
94
+ for (const key of keys) {
95
+ if (value === undefined || value === null) return undefined;
96
+ if (key.startsWith('[') && key.endsWith(']')) {
97
+ const index = parseInt(key.slice(1, -1), 10);
98
+ if (Array.isArray(value)) {
99
+ value = value[index];
100
+ } else {
101
+ return undefined;
102
+ }
103
+ } else if (key && typeof value === 'object' && key in value) {
104
+ value = value[key];
105
+ } else if (key) {
106
+ return undefined;
107
+ }
108
+ }
109
+ return value;
110
+ }
111
+
112
+ // マッチング用にbasePathを正規化するヘルパー関数
113
+ function normalizeBasePathForMatching(basePath, mappings, configData) {
114
+ for (const mapping of mappings) {
115
+ if (basePath.startsWith(mapping.basePath + ':') && mapping.basePath !== basePath) {
116
+ const remainder = basePath.substring(mapping.basePath.length + 1);
117
+ const parts = remainder.split(':');
118
+ const keyName = parts[0];
119
+ const parentObj = getValueByPath(configData, mapping.basePath);
120
+ if (parentObj && typeof parentObj === 'object' && !Array.isArray(parentObj)) {
121
+ const keys = Object.keys(parentObj);
122
+ const keyIndex = keys.indexOf(keyName);
123
+ if (keyIndex >= 0) {
124
+ const restOfBasePath = parts.slice(1).join(':');
125
+ const partiallyNormalized = mapping.basePath + '[' + keyIndex + ']' + (restOfBasePath ? ':' + restOfBasePath : '');
126
+ return normalizeBasePathForMatching(partiallyNormalized, mappings, configData);
127
+ }
128
+ }
129
+ }
130
+ }
131
+ return basePath;
132
+ }
133
+
134
+ // ワイルドカード付きマッピングを適用するヘルパー関数
135
+ function applyWildcardMapping(path, wildcardBasePath, configData) {
136
+ const patternParts = wildcardBasePath.split(':');
137
+ const pathParts = path.split(':');
138
+ const extractedKeys = [];
139
+
140
+ let pathIdx = 0;
141
+ let configPath = '';
142
+
143
+ for (const wPart of patternParts) {
144
+ if (wPart.endsWith('[*]')) {
145
+ const baseKey = wPart.slice(0, -3);
146
+ if (pathParts[pathIdx] === baseKey) {
147
+ configPath = configPath ? configPath + ':' + baseKey : baseKey;
148
+ pathIdx++;
149
+ if (pathIdx < pathParts.length) {
150
+ extractedKeys.push({ key: pathParts[pathIdx], configPath });
151
+ pathIdx++;
152
+ }
153
+ } else {
154
+ return path;
155
+ }
156
+ } else {
157
+ if (pathParts[pathIdx] === wPart) {
158
+ configPath = configPath ? configPath + ':' + wPart : wPart;
159
+ pathIdx++;
160
+ } else {
161
+ return path;
162
+ }
163
+ }
164
+ }
165
+
166
+ const remainder = pathIdx < pathParts.length ? pathParts.slice(pathIdx).join(':') : '';
167
+
168
+ let resultPath = '';
169
+ let currentConfigPath = '';
170
+
171
+ for (const wPart of patternParts) {
172
+ if (wPart.endsWith('[*]')) {
173
+ const baseKey = wPart.slice(0, -3);
174
+ currentConfigPath = currentConfigPath ? currentConfigPath + ':' + baseKey : baseKey;
175
+
176
+ const keyInfo = extractedKeys.find(k => k.configPath === currentConfigPath);
177
+ if (keyInfo) {
178
+ const associativeObj = getValueByPath(configData, currentConfigPath);
179
+ if (associativeObj && typeof associativeObj === 'object' && !Array.isArray(associativeObj)) {
180
+ const keys = Object.keys(associativeObj);
181
+ const keyIndex = keys.indexOf(keyInfo.key);
182
+ if (keyIndex >= 0) {
183
+ resultPath = resultPath ? resultPath + ':' + baseKey + '[' + keyIndex + ']' : baseKey + '[' + keyIndex + ']';
184
+ currentConfigPath = currentConfigPath + ':' + keyInfo.key;
185
+ } else {
186
+ return path;
187
+ }
188
+ } else {
189
+ return path;
190
+ }
191
+ }
192
+ } else {
193
+ resultPath = resultPath ? resultPath + ':' + wPart : wPart;
194
+ currentConfigPath = currentConfigPath ? currentConfigPath + ':' + wPart : wPart;
195
+ }
196
+ }
197
+
198
+ if (remainder) {
199
+ const remainderParts = remainder.split(':');
200
+ const firstKey = remainderParts[0];
201
+
202
+ const lastAssocObj = getValueByPath(configData, currentConfigPath);
203
+ if (lastAssocObj && typeof lastAssocObj === 'object' && !Array.isArray(lastAssocObj)) {
204
+ const keys = Object.keys(lastAssocObj);
205
+ const keyIndex = keys.indexOf(firstKey);
206
+ if (keyIndex >= 0) {
207
+ resultPath = resultPath + '[' + keyIndex + ']';
208
+ if (remainderParts.length > 1) {
209
+ resultPath = resultPath + ':' + remainderParts.slice(1).join(':');
210
+ }
211
+ } else {
212
+ resultPath = resultPath + ':' + remainder;
213
+ }
214
+ } else {
215
+ resultPath = resultPath + ':' + remainder;
216
+ }
217
+ }
218
+
219
+ return resultPath;
220
+ }
221
+
222
+ // 連想配列パスを正規化(キー名を配列インデックスに変換)- 再帰的に処理
223
+ // ワイルドカード付きマッピングにも対応
224
+ function normalizeAssociativeArrayPath(path, mappings, configData) {
225
+ const sortedMappings = [...mappings].sort((a, b) => b.basePath.length - a.basePath.length);
226
+ let normalizedPath = path;
227
+ let changed = true;
228
+
229
+ while (changed) {
230
+ changed = false;
231
+ for (const mapping of sortedMappings) {
232
+ const basePath = mapping.basePath;
233
+
234
+ // ワイルドカード付きマッピングの場合
235
+ if (basePath.includes('[*]')) {
236
+ const result = applyWildcardMapping(normalizedPath, basePath, configData);
237
+ if (result !== normalizedPath) {
238
+ normalizedPath = result;
239
+ changed = true;
240
+ break;
241
+ }
242
+ continue;
243
+ }
244
+
245
+ const normalizedBasePath = normalizeBasePathForMatching(basePath, sortedMappings, configData);
246
+
247
+ if (normalizedPath.startsWith(normalizedBasePath + ':')) {
248
+ const remainder = normalizedPath.substring(normalizedBasePath.length + 1);
249
+ const parts = remainder.split(':');
250
+ const keyName = parts[0];
251
+
252
+ if (keyName.match(/^[d+]$/)) {
253
+ continue;
254
+ }
255
+
256
+ const associativeObj = getValueByPath(configData, basePath);
257
+ if (associativeObj && typeof associativeObj === 'object' && !Array.isArray(associativeObj)) {
258
+ const keys = Object.keys(associativeObj);
259
+ const keyIndex = keys.indexOf(keyName);
260
+ if (keyIndex >= 0) {
261
+ const restOfPath = parts.slice(1).join(':');
262
+ normalizedPath = normalizedBasePath + '[' + keyIndex + ']' + (restOfPath ? ':' + restOfPath : '');
263
+ changed = true;
264
+ break;
265
+ }
266
+ }
267
+ }
268
+ }
269
+ }
270
+ return normalizedPath;
271
+ }
272
+
273
+ // 具体的なパスからテンプレートパスを取得(連想配列も考慮)
274
+ function getTemplatePathForConcrete(concretePath, mappings, configData) {
275
+ let path = concretePath;
276
+ if (configData) {
277
+ path = normalizeAssociativeArrayPath(path, mappings, configData);
278
+ }
279
+ return normalizeToTemplatePath(path);
280
+ }
281
+
282
+ // ドキュメントを検索(テンプレートフォールバック付き)
283
+ function findDocumentationForPath(propertyPath, docsProperties, configData) {
284
+ // 1. 直接ルックアップ
285
+ if (docsProperties[propertyPath]) {
286
+ return docsProperties[propertyPath];
287
+ }
288
+
289
+ // 2. テンプレートパスでフォールバック検索(連想配列も考慮)
290
+ const templatePath = getTemplatePathForConcrete(propertyPath, associativeArrays, configData);
291
+ if (templatePath !== propertyPath && docsProperties[templatePath]) {
292
+ const doc = docsProperties[templatePath];
293
+ if (doc.isTemplate) {
294
+ return doc;
295
+ }
296
+ }
297
+
298
+ // 3. すべてのテンプレートドキュメントを検索
299
+ for (const [docPath, doc] of Object.entries(docsProperties)) {
300
+ if (doc.isTemplate && matchesTemplatePath(propertyPath, docPath)) {
301
+ return doc;
302
+ }
303
+ }
304
+
305
+ return null;
306
+ }
307
+
308
+ // テンプレートドキュメントのみを検索(連想配列も考慮)
309
+ function findTemplateForPath(propertyPath, docsProperties, configData) {
310
+ const templatePath = getTemplatePathForConcrete(propertyPath, associativeArrays, configData);
311
+ if (templatePath !== propertyPath && docsProperties[templatePath]) {
312
+ const doc = docsProperties[templatePath];
313
+ if (doc.isTemplate) {
314
+ return doc;
315
+ }
316
+ }
317
+
318
+ for (const [docPath, doc] of Object.entries(docsProperties)) {
319
+ if (doc.isTemplate && matchesTemplatePath(propertyPath, docPath)) {
320
+ return doc;
321
+ }
322
+ }
323
+
324
+ return null;
325
+ }
326
+
327
+ // ドキュメントを検索してマージ(直接ドキュメントの空フィールドをテンプレートで補完)
328
+ function findAndMergeDocumentation(propertyPath, docsProperties, configData) {
329
+ const directDoc = docsProperties[propertyPath];
330
+ const templateDoc = findTemplateForPath(propertyPath, docsProperties, configData);
331
+
332
+ if (!directDoc && !templateDoc) return null;
333
+ if (directDoc && !templateDoc) return directDoc;
334
+ if (!directDoc && templateDoc) return templateDoc;
335
+
336
+ // 両方ある場合:マージ
337
+ const mergedDoc = { ...directDoc };
338
+
339
+ // タグのマージ
340
+ if ((!directDoc.tags || directDoc.tags.length === 0) && templateDoc.tags && templateDoc.tags.length > 0) {
341
+ mergedDoc.tags = templateDoc.tags;
342
+ }
343
+
344
+ // フィールドのマージ
345
+ if (templateDoc.fields) {
346
+ const mergedFields = { ...(directDoc.fields || {}) };
347
+ for (const [key, value] of Object.entries(templateDoc.fields)) {
348
+ if (!mergedFields[key] || mergedFields[key].trim() === '') {
349
+ if (value && value.trim() !== '') {
350
+ mergedFields[key] = value;
351
+ }
352
+ }
353
+ }
354
+ mergedDoc.fields = mergedFields;
355
+ }
356
+
357
+ return mergedDoc;
358
+ }
359
+
74
360
  ${this.getScripts()}
75
361
  </script>
76
362
  </body>
@@ -413,13 +699,13 @@ module.exports=[47482,e=>{"use strict";var t=e.i(47909),r=e.i(74017),n=e.i(96250
413
699
  }
414
700
  </style>`}getScripts(){return`
415
701
  // ツリー構造を構築
416
- function buildTree(obj, path = '', docs = {}) {
702
+ function buildTree(obj, path = '', docs = {}, configData = null) {
417
703
  const tree = [];
418
704
 
419
705
  for (const key in obj) {
420
706
  const currentPath = path ? \`\${path}:\${key}\` : key;
421
707
  const value = obj[key];
422
- const hasDoc = docs.properties && docs.properties[currentPath];
708
+ const hasDoc = docs.properties && findDocumentationForPath(currentPath, docs.properties, configData);
423
709
 
424
710
  if (typeof value === 'object' && value !== null) {
425
711
  if (Array.isArray(value)) {
@@ -437,8 +723,8 @@ module.exports=[47482,e=>{"use strict";var t=e.i(47909),r=e.i(74017),n=e.i(96250
437
723
  path: elementPath,
438
724
  value: item,
439
725
  hasChildren: true,
440
- hasDoc: !!(docs.properties && docs.properties[elementPath]),
441
- children: buildTree(item, elementPath, docs)
726
+ hasDoc: !!(docs.properties && findDocumentationForPath(elementPath, docs.properties, configData)),
727
+ children: buildTree(item, elementPath, docs, configData)
442
728
  });
443
729
  }
444
730
  });
@@ -469,7 +755,7 @@ module.exports=[47482,e=>{"use strict";var t=e.i(47909),r=e.i(74017),n=e.i(96250
469
755
  value: value,
470
756
  hasChildren: true,
471
757
  hasDoc: !!hasDoc,
472
- children: buildTree(value, currentPath, docs)
758
+ children: buildTree(value, currentPath, docs, configData)
473
759
  });
474
760
  }
475
761
  } else {
@@ -552,7 +838,7 @@ module.exports=[47482,e=>{"use strict";var t=e.i(47909),r=e.i(74017),n=e.i(96250
552
838
  function showPropertyDetail(node) {
553
839
  const detailEl = document.getElementById('propertyDetail');
554
840
  const config = configs[activeConfigIndex];
555
- const doc = config.docs.properties && config.docs.properties[node.path];
841
+ const doc = config.docs.properties ? findAndMergeDocumentation(node.path, config.docs.properties, config.configData) : null;
556
842
 
557
843
  let html = \`<h2>\${escapeHtml(node.key)}</h2>\`;
558
844
  html += \`<div class="property-file" title="\${escapeHtml(config.filePath)}">ファイル: \${escapeHtml(config.filePath)}</div>\`;
@@ -642,7 +928,7 @@ module.exports=[47482,e=>{"use strict";var t=e.i(47909),r=e.i(74017),n=e.i(96250
642
928
  treeEl.innerHTML = '';
643
929
 
644
930
  const config = configs[activeConfigIndex];
645
- const tree = buildTree(config.configData, '', config.docs);
931
+ const tree = buildTree(config.configData, '', config.docs, config.configData);
646
932
  renderTree(tree, treeEl);
647
933
  }
648
934
 
@@ -707,7 +993,7 @@ module.exports=[47482,e=>{"use strict";var t=e.i(47909),r=e.i(74017),n=e.i(96250
707
993
  // 全設定ファイルから検索してマッチした項目を収集
708
994
  let foundInConfigs = [];
709
995
  configs.forEach((config, index) => {
710
- const tree = buildTree(config.configData, '', config.docs);
996
+ const tree = buildTree(config.configData, '', config.docs, config.configData);
711
997
  const hasMatch = searchInTreeForConfig(tree, query, config);
712
998
  if (hasMatch) {
713
999
  foundInConfigs.push(index);
@@ -772,42 +1058,74 @@ module.exports=[47482,e=>{"use strict";var t=e.i(47909),r=e.i(74017),n=e.i(96250
772
1058
  renderCurrentConfig();
773
1059
  setupSearch();
774
1060
  }
775
- `}}class A{static flattenConfig(e,t=""){let r={};for(let n in e){let a=t?`${t}:${n}`:n,i=e[n];i&&"object"==typeof i?Array.isArray(i)?i.some(e=>e&&"object"==typeof e&&!Array.isArray(e))?i.forEach((e,t)=>{e&&"object"==typeof e&&!Array.isArray(e)&&Object.assign(r,this.flattenConfig(e,`${a}[${t}]`))}):r[a]=i:Object.assign(r,this.flattenConfig(i,a)):r[a]=i}return r}static getAllPropertyPaths(e,t=""){let r=[];for(let n in e){let a=t?`${t}:${n}`:n,i=e[n];r.push(a),i&&"object"==typeof i&&(Array.isArray(i)?i.some(e=>e&&"object"==typeof e&&!Array.isArray(e))&&i.forEach((e,t)=>{if(e&&"object"==typeof e&&!Array.isArray(e)){let n=`${a}[${t}]`;r.push(n),r.push(...this.getAllPropertyPaths(e,n))}}):r.push(...this.getAllPropertyPaths(i,a)))}return r}static buildTree(e,t=""){let r=[];for(let n in e){let a=t?`${t}:${n}`:n,i=e[n];if(i&&"object"==typeof i)if(Array.isArray(i))if(i.some(e=>e&&"object"==typeof e&&!Array.isArray(e))){let e=[];i.forEach((t,r)=>{t&&"object"==typeof t&&!Array.isArray(t)&&e.push({key:`[${r}]`,fullPath:`${a}[${r}]`,value:t,children:this.buildTree(t,`${a}[${r}]`),hasDocumentation:!1,type:"object"})}),r.push({key:n,fullPath:a,value:i,children:e.length>0?e:void 0,hasDocumentation:!1,type:"array"})}else r.push({key:n,fullPath:a,value:i,hasDocumentation:!1,type:"array"});else r.push({key:n,fullPath:a,value:i,children:this.buildTree(i,a),hasDocumentation:!1,type:"object"});else r.push({key:n,fullPath:a,value:i,hasDocumentation:!1,type:typeof i})}return r}}function P(e,t){return[...e].sort((e,r)=>{let n=t.indexOf(e),a=t.indexOf(r);return -1!==n&&-1!==a?n-a:-1===n?1:-1===a?-1:0})}class ${rootPath;constructor(e){this.rootPath=e}async generateMarkdown(){let e=new v.FileSystemService(this.rootPath),t=new x.StorageService(e),r=await e.loadProjectSettings();if(!r||0===r.configFiles.length)return"# 設定ファイルドキュメント\n\nドキュメント化された設定ファイルがありません。\n";let n=r.fields?Object.keys(r.fields):[],a=r.availableTags||[],i="# 設定ファイルドキュメント\n\n";for(let o of(i+=`プロジェクト: **${r.projectName}**
1061
+ `}}class j{static flattenConfig(e,t=""){let a={};for(let r in e){let n=t?`${t}:${r}`:r,i=e[r];i&&"object"==typeof i?Array.isArray(i)?i.some(e=>e&&"object"==typeof e&&!Array.isArray(e))?i.forEach((e,t)=>{e&&"object"==typeof e&&!Array.isArray(e)&&Object.assign(a,this.flattenConfig(e,`${n}[${t}]`))}):a[n]=i:Object.assign(a,this.flattenConfig(i,n)):a[n]=i}return a}static getAllPropertyPaths(e,t=""){let a=[];for(let r in e){let n=t?`${t}:${r}`:r,i=e[r];a.push(n),i&&"object"==typeof i&&(Array.isArray(i)?i.some(e=>e&&"object"==typeof e&&!Array.isArray(e))&&i.forEach((e,t)=>{if(e&&"object"==typeof e&&!Array.isArray(e)){let r=`${n}[${t}]`;a.push(r),a.push(...this.getAllPropertyPaths(e,r))}}):a.push(...this.getAllPropertyPaths(i,n)))}return a}static buildTree(e,t=""){let a=[];for(let r in e){let n=t?`${t}:${r}`:r,i=e[r];if(i&&"object"==typeof i)if(Array.isArray(i))if(i.some(e=>e&&"object"==typeof e&&!Array.isArray(e))){let e=[];i.forEach((t,a)=>{t&&"object"==typeof t&&!Array.isArray(t)&&e.push({key:`[${a}]`,fullPath:`${n}[${a}]`,value:t,children:this.buildTree(t,`${n}[${a}]`),hasDocumentation:!1,type:"object"})}),a.push({key:r,fullPath:n,value:i,children:e.length>0?e:void 0,hasDocumentation:!1,type:"array"})}else a.push({key:r,fullPath:n,value:i,hasDocumentation:!1,type:"array"});else a.push({key:r,fullPath:n,value:i,children:this.buildTree(i,n),hasDocumentation:!1,type:"object"});else a.push({key:r,fullPath:n,value:i,hasDocumentation:!1,type:typeof i})}return a}}function k(e,t){return[...e].sort((e,a)=>{let r=t.indexOf(e),n=t.indexOf(a);return -1!==r&&-1!==n?r-n:-1===r?1:-1===n?-1:0})}var A=e.i(61958);class ${rootPath;constructor(e){this.rootPath=e}async generateMarkdownForFile(e){let t=new P.FileSystemService(this.rootPath),a=new v.StorageService(t),r=await t.loadProjectSettings(),n=r?.fields?Object.keys(r.fields):[],i=r?.availableTags||[],o=r?.associativeArrays||[],s=e.split(/[/\\]/).pop()||"config.json",l=await a.loadAllDocs(e),c=await t.loadConfigFile(e),d=`# ${s}
1062
+
1063
+ `;d+=`**ファイルパス:** \`${e}\`
776
1064
 
777
1065
  最終更新: ${new Date().toLocaleString("ja-JP")}
778
1066
 
779
1067
  ---
780
1068
 
781
- `,r.configFiles)){let r=o.split(/[/\\]/).pop()||"config.json",l=await t.loadAllDocs(o),s=await e.loadConfigFile(o);i+=`## ${r}
1069
+ `;let p=j.getAllPropertyPaths(c);if(0===p.length)d+="*プロパティがありません。*\n\n";else for(let e of(d+="## プロパティ一覧\n\n",p)){let t=(0,A.findAndMergeDocumentation)(e,l.properties,o,c),a=C(c,e);if(d+=`### \`${e}\`
1070
+
1071
+ `,null!=a){let e=typeof a,t=Array.isArray(a),r="object"===e&&!t;t?a.length>0&&a.every(e=>"object"!=typeof e||null===e)&&(d+=`**値:** \`${JSON.stringify(a)}\`
1072
+
1073
+ `):r||(d+=`**値:** \`${String(a)}\`
1074
+
1075
+ `)}if(t){if(t.tags&&t.tags.length>0){let e=k(t.tags,i);d+=`**タグ:** ${e.map(e=>`\`${e}\``).join(", ")}
1076
+
1077
+ `}if(t.fields)for(let e of n){let a=t.fields[e];a&&(d+=`**${e}:**
1078
+
1079
+ ${a}
1080
+
1081
+ `)}}else d+="*ドキュメントなし*\n\n";d+="---\n\n"}return d+`
1082
+ *このドキュメントは ConfigDoc により自動生成されました。*
1083
+ `}async generateMarkdown(){let e=new P.FileSystemService(this.rootPath),t=new v.StorageService(e),a=await e.loadProjectSettings();if(!a||0===a.configFiles.length)return"# 設定ファイルドキュメント\n\nドキュメント化された設定ファイルがありません。\n";let r=a.fields?Object.keys(a.fields):[],n=a.availableTags||[],i="# 設定ファイルドキュメント\n\n";for(let o of(i+=`プロジェクト: **${a.projectName}**
1084
+
1085
+ 最終更新: ${new Date().toLocaleString("ja-JP")}
1086
+
1087
+ ---
1088
+
1089
+ `,a.configFiles)){let s=o.split(/[/\\]/).pop()||"config.json",l=await t.loadAllDocs(o),c=await e.loadConfigFile(o);i+=`## ${s}
782
1090
 
783
1091
  **ファイルパス:** \`${o}\`
784
1092
 
785
- `;let c=A.getAllPropertyPaths(s);if(0===c.length){i+="*プロパティがありません。*\n\n";continue}for(let e of(i+="### プロパティ一覧\n\n",c)){let t=l.properties[e],r=E(s,e);if(i+=`#### \`${e}\`
1093
+ `;let d=j.getAllPropertyPaths(c);if(0===d.length){i+="*プロパティがありません。*\n\n";continue}i+="### プロパティ一覧\n\n";let p=a.associativeArrays||[];for(let e of d){let t=(0,A.findAndMergeDocumentation)(e,l.properties,p,c),a=C(c,e);if(i+=`#### \`${e}\`
786
1094
 
787
- `,null!=r){let e=typeof r,t=Array.isArray(r),n="object"===e&&!t;t?r.length>0&&r.every(e=>"object"!=typeof e||null===e)&&(i+=`**値:** \`${JSON.stringify(r)}\`
1095
+ `,null!=a){let e=typeof a,t=Array.isArray(a),r="object"===e&&!t;t?a.length>0&&a.every(e=>"object"!=typeof e||null===e)&&(i+=`**値:** \`${JSON.stringify(a)}\`
788
1096
 
789
- `):n||(i+=`**値:** \`${String(r)}\`
1097
+ `):r||(i+=`**値:** \`${String(a)}\`
790
1098
 
791
- `)}if(t){if(t.tags&&t.tags.length>0){let e=P(t.tags,a);i+=`**タグ:** ${e.map(e=>`\`${e}\``).join(", ")}
1099
+ `)}if(t){if(t.tags&&t.tags.length>0){let e=k(t.tags,n);i+=`**タグ:** ${e.map(e=>`\`${e}\``).join(", ")}
792
1100
 
793
- `}if(t.fields)for(let e of n){let r=t.fields[e];r&&(i+=`**${e}:**
1101
+ `}if(t.fields)for(let e of r){let a=t.fields[e];a&&(i+=`**${e}:**
794
1102
 
795
- ${r}
1103
+ ${a}
796
1104
 
797
1105
  `)}}else i+="*ドキュメントなし*\n\n";i+="---\n\n"}}return i+`
798
1106
  *このドキュメントは ConfigDoc により自動生成されました。*
799
- `}}class T{rootPath;constructor(e){this.rootPath=e}async generateMarkdownTable(){let e=new v.FileSystemService(this.rootPath),t=new x.StorageService(e),r=await e.loadProjectSettings();if(!r||0===r.configFiles.length)return"# 設定ファイルドキュメント\n\nドキュメント化された設定ファイルがありません。\n";let n=r.fields?Object.keys(r.fields):[],a=r.availableTags||[],i="# 設定ファイルドキュメント\n\n";for(let o of(i+=`プロジェクト: **${r.projectName}**
1107
+ `}}class S{rootPath;constructor(e){this.rootPath=e}async generateMarkdownTableForFile(e){let t=new P.FileSystemService(this.rootPath),a=new v.StorageService(t),r=await t.loadProjectSettings(),n=r?.fields?Object.keys(r.fields):[],i=r?.availableTags||[],o=r?.associativeArrays||[],s=e.split(/[/\\]/).pop()||"config.json",l=await a.loadAllDocs(e),c=await t.loadConfigFile(e),d=`# ${s}
1108
+
1109
+ `;d+=`**ファイルパス:** \`${e}\`
1110
+
1111
+ 最終更新: ${new Date().toLocaleString("ja-JP")}
1112
+
1113
+ ---
1114
+
1115
+ `;let p=j.getAllPropertyPaths(c);if(0===p.length)d+="*プロパティがありません。*\n\n";else{for(let e of(d+="| プロパティ名 | タグ | 値 |",n.forEach(e=>{d+=` ${e} |`}),d+="\n|-------------|------|-----|",n.forEach(()=>{d+="------|"}),d+="\n",p)){let t=(0,A.findAndMergeDocumentation)(e,l.properties,o,c),a=x(e),r=t&&t.tags&&t.tags.length>0?k(t.tags,i):[],s=r.length>0?x(r.map(e=>`\`${e}\``).join(", ")):"-",p=x(this.getPropertyValue(c,e));d+=`| ${a} | ${s} | ${p} |`,n.forEach(e=>{let a=t&&t.fields&&t.fields[e]||"-";d+=` ${x(a)} |`}),d+="\n"}d+="\n"}return d+=`
1116
+ *このドキュメントは ConfigDoc により自動生成されました。*
1117
+ `}async generateMarkdownTable(){let e=new P.FileSystemService(this.rootPath),t=new v.StorageService(e),a=await e.loadProjectSettings();if(!a||0===a.configFiles.length)return"# 設定ファイルドキュメント\n\nドキュメント化された設定ファイルがありません。\n";let r=a.fields?Object.keys(a.fields):[],n=a.availableTags||[],i="# 設定ファイルドキュメント\n\n";for(let o of(i+=`プロジェクト: **${a.projectName}**
800
1118
 
801
1119
  最終更新: ${new Date().toLocaleString("ja-JP")}
802
1120
 
803
1121
  ---
804
1122
 
805
- `,r.configFiles)){let r=o.split(/[/\\]/).pop()||"config.json",l=await t.loadAllDocs(o),s=await e.loadConfigFile(o);i+=`## ${r}
1123
+ `,a.configFiles)){let s=o.split(/[/\\]/).pop()||"config.json",l=await t.loadAllDocs(o),c=await e.loadConfigFile(o);i+=`## ${s}
806
1124
 
807
1125
  **ファイルパス:** \`${o}\`
808
1126
 
809
- `;let c=A.getAllPropertyPaths(s);if(0===c.length){i+="*プロパティがありません。*\n\n";continue}for(let e of(i+="| プロパティ名 | タグ | 値 |",n.forEach(e=>{i+=` ${e} |`}),i+="\n|-------------|------|-----|",n.forEach(()=>{i+="------|"}),i+="\n",c)){let t=l.properties[e],r=w(e),o=t&&t.tags&&t.tags.length>0?P(t.tags,a):[],c=o.length>0?w(o.map(e=>`\`${e}\``).join(", ")):"-",d=w(this.getPropertyValue(s,e));i+=`| ${r} | ${c} | ${d} |`,n.forEach(e=>{let r=t&&t.fields&&t.fields[e]||"-";i+=` ${w(r)} |`}),i+="\n"}i+="\n"}return i+=`
1127
+ `;let d=j.getAllPropertyPaths(c);if(0===d.length){i+="*プロパティがありません。*\n\n";continue}i+="| プロパティ名 | タグ | 値 |",r.forEach(e=>{i+=` ${e} |`}),i+="\n|-------------|------|-----|",r.forEach(()=>{i+="------|"}),i+="\n";let p=a.associativeArrays||[];for(let e of d){let t=(0,A.findAndMergeDocumentation)(e,l.properties,p,c),a=x(e),o=t&&t.tags&&t.tags.length>0?k(t.tags,n):[],s=o.length>0?x(o.map(e=>`\`${e}\``).join(", ")):"-",d=x(this.getPropertyValue(c,e));i+=`| ${a} | ${s} | ${d} |`,r.forEach(e=>{let a=t&&t.fields&&t.fields[e]||"-";i+=` ${x(a)} |`}),i+="\n"}i+="\n"}return i+=`
810
1128
  *このドキュメントは ConfigDoc により自動生成されました。*
811
- `}getPropertyValue(e,t){var r=E(e,t);if(null==r)return"-";let n=typeof r,a=Array.isArray(r);return a?r.length>0&&r.every(e=>"object"!=typeof e||null===e)?JSON.stringify(r):"-":"object"!==n||a?String(r):"-"}}var k=e.i(10720),j=e.i(14747),D=e.i(24868);async function R(e){try{let t,r,n=(0,k.getRootPath)();try{t=await e.json()}catch{t={}}let{format:a="html"}=t,i=t.fileName?.trim()||"config-doc",o=t.outputDir?.trim()||"";if("markdown"===a){let e=new $(n);r=await e.generateMarkdown()}else if("markdown-table"===a){let e=new T(n);r=await e.generateMarkdownTable()}else{let e=new S(n);r=await e.generateHtml()}let l=`${i}.${"markdown"===a||"markdown-table"===a?"md":"html"}`,s=new v.FileSystemService(n);await s.ensureConfigDocDir();let c=o?j.default.join(n,o,l):j.default.join(n,l),d=j.default.dirname(c);return await D.default.mkdir(d,{recursive:!0}),await D.default.writeFile(c,r,"utf-8"),y.NextResponse.json({success:!0,message:`${"markdown"===a?"Markdown":"HTML"}ファイルを生成しました`,outputPath:c})}catch(e){return console.error("API Error:",e),y.NextResponse.json({success:!1,error:e instanceof Error?e.message:"Unknown error"},{status:500})}}e.s(["POST",()=>R],49588);var N=e.i(49588);let I=new t.AppRouteRouteModule({definition:{kind:r.RouteKind.APP_ROUTE,page:"/api/export/route",pathname:"/api/export",filename:"route",bundlePath:""},distDir:".next",relativeProjectDir:"",resolvedPagePath:"[project]/app/api/export/route.ts",nextConfigOutput:"standalone",userland:N}),{workAsyncStorage:O,workUnitAsyncStorage:H,serverHooks:F}=I;function L(){return(0,n.patchFetch)({workAsyncStorage:O,workUnitAsyncStorage:H})}async function M(e,t,n){I.isDev&&(0,a.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let y="/api/export/route";y=y.replace(/\/index$/,"")||"/";let v=await I.prepare(e,t,{srcPage:y,multiZoneDraftMode:!1});if(!v)return t.statusCode=400,t.end("Bad Request"),null==n.waitUntil||n.waitUntil.call(n,Promise.resolve()),null;let{buildId:x,params:w,nextConfig:C,parsedUrl:E,isDraftMode:S,prerenderManifest:A,routerServerContext:P,isOnDemandRevalidate:$,revalidateOnlyGenerated:T,resolvedPathname:k,clientReferenceManifest:j,serverActionsManifest:D}=v,R=(0,l.normalizeAppPath)(y),N=!!(A.dynamicRoutes[R]||A.routes[k]),O=async()=>((null==P?void 0:P.render404)?await P.render404(e,t,E,!1):t.end("This page could not be found"),null);if(N&&!S){let e=!!A.routes[k],t=A.dynamicRoutes[R];if(t&&!1===t.fallback&&!e){if(C.experimental.adapterPath)return await O();throw new m.NoFallbackError}}let H=null;!N||I.isDev||S||(H="/index"===(H=k)?"/":H);let F=!0===I.isDev||!N,L=N&&!F;D&&j&&(0,o.setManifestsSingleton)({page:y,clientReferenceManifest:j,serverActionsManifest:D});let M=e.method||"GET",q=(0,i.getTracer)(),U=q.getActiveScopeSpan(),_={params:w,prerenderManifest:A,renderOpts:{experimental:{authInterrupts:!!C.experimental.authInterrupts},cacheComponents:!!C.cacheComponents,supportsDynamicResponse:F,incrementalCache:(0,a.getRequestMeta)(e,"incrementalCache"),cacheLifeProfiles:C.cacheLife,waitUntil:n.waitUntil,onClose:e=>{t.on("close",e)},onAfterTaskError:void 0,onInstrumentationRequestError:(t,r,n,a)=>I.onRequestError(e,t,n,a,P)},sharedContext:{buildId:x}},z=new s.NodeNextRequest(e),B=new s.NodeNextResponse(t),J=c.NextRequestAdapter.fromNodeNextRequest(z,(0,c.signalFromNodeResponse)(t));try{let o=async e=>I.handle(J,_).finally(()=>{if(!e)return;e.setAttributes({"http.status_code":t.statusCode,"next.rsc":!1});let r=q.getRootSpanAttributes();if(!r)return;if(r.get("next.span_type")!==d.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${r.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let n=r.get("next.route");if(n){let t=`${M} ${n}`;e.setAttributes({"next.route":n,"http.route":n,"next.span_name":t}),e.updateName(t)}else e.updateName(`${M} ${y}`)}),l=!!(0,a.getRequestMeta)(e,"minimalMode"),s=async a=>{var i,s;let c=async({previousCacheEntry:r})=>{try{if(!l&&$&&T&&!r)return t.statusCode=404,t.setHeader("x-nextjs-cache","REVALIDATED"),t.end("This page could not be found"),null;let i=await o(a);e.fetchMetrics=_.renderOpts.fetchMetrics;let s=_.renderOpts.pendingWaitUntil;s&&n.waitUntil&&(n.waitUntil(s),s=void 0);let c=_.renderOpts.collectedTags;if(!N)return await (0,f.sendResponse)(z,B,i,_.renderOpts.pendingWaitUntil),null;{let e=await i.blob(),t=(0,u.toNodeOutgoingHttpHeaders)(i.headers);c&&(t[g.NEXT_CACHE_TAGS_HEADER]=c),!t["content-type"]&&e.type&&(t["content-type"]=e.type);let r=void 0!==_.renderOpts.collectedRevalidate&&!(_.renderOpts.collectedRevalidate>=g.INFINITE_CACHE)&&_.renderOpts.collectedRevalidate,n=void 0===_.renderOpts.collectedExpire||_.renderOpts.collectedExpire>=g.INFINITE_CACHE?void 0:_.renderOpts.collectedExpire;return{value:{kind:b.CachedRouteKind.APP_ROUTE,status:i.status,body:Buffer.from(await e.arrayBuffer()),headers:t},cacheControl:{revalidate:r,expire:n}}}}catch(t){throw(null==r?void 0:r.isStale)&&await I.onRequestError(e,t,{routerKind:"App Router",routePath:y,routeType:"route",revalidateReason:(0,p.getRevalidateReason)({isStaticGeneration:L,isOnDemandRevalidate:$})},!1,P),t}},d=await I.handleResponse({req:e,nextConfig:C,cacheKey:H,routeKind:r.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:A,isRoutePPREnabled:!1,isOnDemandRevalidate:$,revalidateOnlyGenerated:T,responseGenerator:c,waitUntil:n.waitUntil,isMinimalMode:l});if(!N)return null;if((null==d||null==(i=d.value)?void 0:i.kind)!==b.CachedRouteKind.APP_ROUTE)throw Object.defineProperty(Error(`Invariant: app-route received invalid cache entry ${null==d||null==(s=d.value)?void 0:s.kind}`),"__NEXT_ERROR_CODE",{value:"E701",enumerable:!1,configurable:!0});l||t.setHeader("x-nextjs-cache",$?"REVALIDATED":d.isMiss?"MISS":d.isStale?"STALE":"HIT"),S&&t.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate");let m=(0,u.fromNodeOutgoingHttpHeaders)(d.value.headers);return l&&N||m.delete(g.NEXT_CACHE_TAGS_HEADER),!d.cacheControl||t.getHeader("Cache-Control")||m.get("Cache-Control")||m.set("Cache-Control",(0,h.getCacheControlHeader)(d.cacheControl)),await (0,f.sendResponse)(z,B,new Response(d.value.body,{headers:m,status:d.value.status||200})),null};U?await s(U):await q.withPropagatedContext(e.headers,()=>q.trace(d.BaseServerSpan.handleRequest,{spanName:`${M} ${y}`,kind:i.SpanKind.SERVER,attributes:{"http.method":M,"http.target":e.url}},s))}catch(t){if(t instanceof m.NoFallbackError||await I.onRequestError(e,t,{routerKind:"App Router",routePath:R,routeType:"route",revalidateReason:(0,p.getRevalidateReason)({isStaticGeneration:L,isOnDemandRevalidate:$})},!1,P),N)throw t;return await (0,f.sendResponse)(z,B,new Response(null,{status:500})),null}}e.s(["handler",()=>M,"patchFetch",()=>L,"routeModule",()=>I,"serverHooks",()=>F,"workAsyncStorage",()=>O,"workUnitAsyncStorage",()=>H],47482)}];
1129
+ `}getPropertyValue(e,t){var a=C(e,t);if(null==a)return"-";let r=typeof a,n=Array.isArray(a);return n?a.length>0&&a.every(e=>"object"!=typeof e||null===e)?JSON.stringify(a):"-":"object"!==r||n?String(a):"-"}}var E=e.i(10720),T=e.i(14747),O=e.i(24868);async function I(e){try{let t,a=(0,E.getRootPath)();try{t=await e.json()}catch{t={}}let{format:r="html"}=t,n=t.fileName?.trim()||"config-doc",i=t.outputDir?.trim()||"",o=new P.FileSystemService(a);await o.ensureConfigDocDir();let s=i?T.default.join(a,i):a;if(await O.default.mkdir(s,{recursive:!0}),"markdown"===r){let e=await o.loadProjectSettings();if(!e||0===e.configFiles.length)return b.NextResponse.json({success:!1,error:"ドキュメント化された設定ファイルがありません"},{status:400});let t=new $(a),r=[];for(let a of e.configFiles){let e=(a.split(/[/\\]/).pop()||"config.json").replace(/\.json$/i,".md"),n=T.default.join(s,e),i=await t.generateMarkdownForFile(a);await O.default.writeFile(n,i,"utf-8"),r.push(n)}return b.NextResponse.json({success:!0,message:`Markdownファイルを${r.length}件生成しました`,outputPaths:r})}if("markdown-table"===r){let e=await o.loadProjectSettings();if(!e||0===e.configFiles.length)return b.NextResponse.json({success:!1,error:"ドキュメント化された設定ファイルがありません"},{status:400});let t=new S(a),r=[];for(let a of e.configFiles){let e=(a.split(/[/\\]/).pop()||"config.json").replace(/\.json$/i,".md"),n=T.default.join(s,e),i=await t.generateMarkdownTableForFile(a);await O.default.writeFile(n,i,"utf-8"),r.push(n)}return b.NextResponse.json({success:!0,message:`Markdownテーブルファイルを${r.length}件生成しました`,outputPaths:r})}let l=new D(a),c=await l.generateHtml(),d=`${n}.html`,p=T.default.join(s,d);return await O.default.writeFile(p,c,"utf-8"),b.NextResponse.json({success:!0,message:"HTMLファイルを生成しました",outputPath:p})}catch(e){return console.error("API Error:",e),b.NextResponse.json({success:!1,error:e instanceof Error?e.message:"Unknown error"},{status:500})}}e.s(["POST",()=>I],49588);var F=e.i(49588);let N=new t.AppRouteRouteModule({definition:{kind:a.RouteKind.APP_ROUTE,page:"/api/export/route",pathname:"/api/export",filename:"route",bundlePath:""},distDir:".next",relativeProjectDir:"",resolvedPagePath:"[project]/app/api/export/route.ts",nextConfigOutput:"standalone",userland:F}),{workAsyncStorage:R,workUnitAsyncStorage:M,serverHooks:H}=N;function z(){return(0,r.patchFetch)({workAsyncStorage:R,workUnitAsyncStorage:M})}async function L(e,t,r){N.isDev&&(0,n.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let b="/api/export/route";b=b.replace(/\/index$/,"")||"/";let P=await N.prepare(e,t,{srcPage:b,multiZoneDraftMode:!1});if(!P)return t.statusCode=400,t.end("Bad Request"),null==r.waitUntil||r.waitUntil.call(r,Promise.resolve()),null;let{buildId:v,params:x,nextConfig:w,parsedUrl:C,isDraftMode:D,prerenderManifest:j,routerServerContext:k,isOnDemandRevalidate:A,revalidateOnlyGenerated:$,resolvedPathname:S,clientReferenceManifest:E,serverActionsManifest:T}=P,O=(0,s.normalizeAppPath)(b),I=!!(j.dynamicRoutes[O]||j.routes[S]),F=async()=>((null==k?void 0:k.render404)?await k.render404(e,t,C,!1):t.end("This page could not be found"),null);if(I&&!D){let e=!!j.routes[S],t=j.dynamicRoutes[O];if(t&&!1===t.fallback&&!e){if(w.experimental.adapterPath)return await F();throw new m.NoFallbackError}}let R=null;!I||N.isDev||D||(R="/index"===(R=S)?"/":R);let M=!0===N.isDev||!I,H=I&&!M;T&&E&&(0,o.setManifestsSingleton)({page:b,clientReferenceManifest:E,serverActionsManifest:T});let z=e.method||"GET",L=(0,i.getTracer)(),B=L.getActiveScopeSpan(),q={params:x,prerenderManifest:j,renderOpts:{experimental:{authInterrupts:!!w.experimental.authInterrupts},cacheComponents:!!w.cacheComponents,supportsDynamicResponse:M,incrementalCache:(0,n.getRequestMeta)(e,"incrementalCache"),cacheLifeProfiles:w.cacheLife,waitUntil:r.waitUntil,onClose:e=>{t.on("close",e)},onAfterTaskError:void 0,onInstrumentationRequestError:(t,a,r,n)=>N.onRequestError(e,t,r,n,k)},sharedContext:{buildId:v}},U=new l.NodeNextRequest(e),K=new l.NodeNextResponse(t),_=c.NextRequestAdapter.fromNodeNextRequest(U,(0,c.signalFromNodeResponse)(t));try{let o=async e=>N.handle(_,q).finally(()=>{if(!e)return;e.setAttributes({"http.status_code":t.statusCode,"next.rsc":!1});let a=L.getRootSpanAttributes();if(!a)return;if(a.get("next.span_type")!==d.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${a.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let r=a.get("next.route");if(r){let t=`${z} ${r}`;e.setAttributes({"next.route":r,"http.route":r,"next.span_name":t}),e.updateName(t)}else e.updateName(`${z} ${b}`)}),s=!!(0,n.getRequestMeta)(e,"minimalMode"),l=async n=>{var i,l;let c=async({previousCacheEntry:a})=>{try{if(!s&&A&&$&&!a)return t.statusCode=404,t.setHeader("x-nextjs-cache","REVALIDATED"),t.end("This page could not be found"),null;let i=await o(n);e.fetchMetrics=q.renderOpts.fetchMetrics;let l=q.renderOpts.pendingWaitUntil;l&&r.waitUntil&&(r.waitUntil(l),l=void 0);let c=q.renderOpts.collectedTags;if(!I)return await (0,f.sendResponse)(U,K,i,q.renderOpts.pendingWaitUntil),null;{let e=await i.blob(),t=(0,h.toNodeOutgoingHttpHeaders)(i.headers);c&&(t[g.NEXT_CACHE_TAGS_HEADER]=c),!t["content-type"]&&e.type&&(t["content-type"]=e.type);let a=void 0!==q.renderOpts.collectedRevalidate&&!(q.renderOpts.collectedRevalidate>=g.INFINITE_CACHE)&&q.renderOpts.collectedRevalidate,r=void 0===q.renderOpts.collectedExpire||q.renderOpts.collectedExpire>=g.INFINITE_CACHE?void 0:q.renderOpts.collectedExpire;return{value:{kind:y.CachedRouteKind.APP_ROUTE,status:i.status,body:Buffer.from(await e.arrayBuffer()),headers:t},cacheControl:{revalidate:a,expire:r}}}}catch(t){throw(null==a?void 0:a.isStale)&&await N.onRequestError(e,t,{routerKind:"App Router",routePath:b,routeType:"route",revalidateReason:(0,p.getRevalidateReason)({isStaticGeneration:H,isOnDemandRevalidate:A})},!1,k),t}},d=await N.handleResponse({req:e,nextConfig:w,cacheKey:R,routeKind:a.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:j,isRoutePPREnabled:!1,isOnDemandRevalidate:A,revalidateOnlyGenerated:$,responseGenerator:c,waitUntil:r.waitUntil,isMinimalMode:s});if(!I)return null;if((null==d||null==(i=d.value)?void 0:i.kind)!==y.CachedRouteKind.APP_ROUTE)throw Object.defineProperty(Error(`Invariant: app-route received invalid cache entry ${null==d||null==(l=d.value)?void 0:l.kind}`),"__NEXT_ERROR_CODE",{value:"E701",enumerable:!1,configurable:!0});s||t.setHeader("x-nextjs-cache",A?"REVALIDATED":d.isMiss?"MISS":d.isStale?"STALE":"HIT"),D&&t.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate");let m=(0,h.fromNodeOutgoingHttpHeaders)(d.value.headers);return s&&I||m.delete(g.NEXT_CACHE_TAGS_HEADER),!d.cacheControl||t.getHeader("Cache-Control")||m.get("Cache-Control")||m.set("Cache-Control",(0,u.getCacheControlHeader)(d.cacheControl)),await (0,f.sendResponse)(U,K,new Response(d.value.body,{headers:m,status:d.value.status||200})),null};B?await l(B):await L.withPropagatedContext(e.headers,()=>L.trace(d.BaseServerSpan.handleRequest,{spanName:`${z} ${b}`,kind:i.SpanKind.SERVER,attributes:{"http.method":z,"http.target":e.url}},l))}catch(t){if(t instanceof m.NoFallbackError||await N.onRequestError(e,t,{routerKind:"App Router",routePath:O,routeType:"route",revalidateReason:(0,p.getRevalidateReason)({isStaticGeneration:H,isOnDemandRevalidate:A})},!1,k),I)throw t;return await (0,f.sendResponse)(U,K,new Response(null,{status:500})),null}}e.s(["handler",()=>L,"patchFetch",()=>z,"routeModule",()=>N,"serverHooks",()=>H,"workAsyncStorage",()=>R,"workUnitAsyncStorage",()=>M],47482)}];
812
1130
 
813
1131
  //# sourceMappingURL=node_modules_next_dist_esm_build_templates_app-route_d09de205.js.map