@loom-framework/core 0.1.0-alpha.165 → 0.1.0-alpha.166
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/builtin-skills/loom/SKILL.md +9 -6
- package/builtin-skills/loom/references/eject.md +102 -0
- package/dist/cli/commands/eject.d.ts.map +1 -1
- package/dist/cli/commands/eject.js +52 -285
- package/dist/cli/commands/eject.js.map +1 -1
- package/dist/cli/commands/generate-system-settings.d.ts +3 -3
- package/dist/cli/commands/generate-system-settings.d.ts.map +1 -1
- package/dist/cli/commands/generate-system-settings.js +29 -204
- package/dist/cli/commands/generate-system-settings.js.map +1 -1
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +27 -44
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/helpers/app-tsx-utils.d.ts +12 -0
- package/dist/cli/helpers/app-tsx-utils.d.ts.map +1 -0
- package/dist/cli/helpers/app-tsx-utils.js +22 -0
- package/dist/cli/helpers/app-tsx-utils.js.map +1 -0
- package/dist/cli/helpers/app-tsx-wiring-engine.d.ts +70 -0
- package/dist/cli/helpers/app-tsx-wiring-engine.d.ts.map +1 -0
- package/dist/cli/helpers/app-tsx-wiring-engine.js +546 -0
- package/dist/cli/helpers/app-tsx-wiring-engine.js.map +1 -0
- package/dist/cli/helpers/app-tsx-wiring.d.ts +4 -39
- package/dist/cli/helpers/app-tsx-wiring.d.ts.map +1 -1
- package/dist/cli/helpers/app-tsx-wiring.js +5 -608
- package/dist/cli/helpers/app-tsx-wiring.js.map +1 -1
- package/dist/cli/helpers/system-page-config.d.ts +27 -0
- package/dist/cli/helpers/system-page-config.d.ts.map +1 -0
- package/dist/cli/helpers/system-page-config.js +73 -0
- package/dist/cli/helpers/system-page-config.js.map +1 -0
- package/dist/cli/templates/login-page.d.ts +2 -3
- package/dist/cli/templates/login-page.d.ts.map +1 -1
- package/dist/cli/templates/login-page.js +18 -29
- package/dist/cli/templates/login-page.js.map +1 -1
- package/dist/cli/templates/model-management-page.d.ts +2 -3
- package/dist/cli/templates/model-management-page.d.ts.map +1 -1
- package/dist/cli/templates/model-management-page.js +11 -9
- package/dist/cli/templates/model-management-page.js.map +1 -1
- package/dist/cli/templates/notification-center-page.d.ts +2 -3
- package/dist/cli/templates/notification-center-page.d.ts.map +1 -1
- package/dist/cli/templates/notification-center-page.js +25 -62
- package/dist/cli/templates/notification-center-page.js.map +1 -1
- package/dist/cli/templates/notification-detail-page.d.ts +2 -3
- package/dist/cli/templates/notification-detail-page.d.ts.map +1 -1
- package/dist/cli/templates/notification-detail-page.js +13 -41
- package/dist/cli/templates/notification-detail-page.js.map +1 -1
- package/dist/cli/templates/process-management-page.d.ts +3 -3
- package/dist/cli/templates/process-management-page.d.ts.map +1 -1
- package/dist/cli/templates/process-management-page.js +75 -565
- package/dist/cli/templates/process-management-page.js.map +1 -1
- package/dist/cli/templates/skill-management-page.d.ts +2 -3
- package/dist/cli/templates/skill-management-page.d.ts.map +1 -1
- package/dist/cli/templates/skill-management-page.js +12 -15
- package/dist/cli/templates/skill-management-page.js.map +1 -1
- package/dist/cli/templates/user-management-page.d.ts +2 -4
- package/dist/cli/templates/user-management-page.d.ts.map +1 -1
- package/dist/cli/templates/user-management-page.js +21 -22
- package/dist/cli/templates/user-management-page.js.map +1 -1
- package/package.json +4 -2
|
@@ -0,0 +1,546 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Unified App.tsx wiring engine for system settings pages.
|
|
3
|
+
*
|
|
4
|
+
* Driven by SYSTEM_PAGE_CONFIG and WiringMode, this replaces the scattered
|
|
5
|
+
* inline wiring helpers in eject.ts and the per-page-type functions in
|
|
6
|
+
* app-tsx-wiring.ts.
|
|
7
|
+
*
|
|
8
|
+
* Pure step functions are individually testable. The main `wireAppTsx()`
|
|
9
|
+
* dispatches steps based on WiringMode + action.
|
|
10
|
+
*/
|
|
11
|
+
import { promises as fs } from 'fs';
|
|
12
|
+
import path from 'path';
|
|
13
|
+
import { findLastImportEnd } from './app-tsx-utils.js';
|
|
14
|
+
// ── Pure step functions ──
|
|
15
|
+
/** Add a name to the npm import from @loom-framework/frontend-antd. */
|
|
16
|
+
export function ensureNpmImport(content, componentName) {
|
|
17
|
+
const existingNpmImport = content.match(/import\s*\{([^}]+)\}\s*from\s*'@loom-framework\/frontend-antd';/);
|
|
18
|
+
if (existingNpmImport) {
|
|
19
|
+
const currentNames = existingNpmImport[1].split(',').map(s => s.trim()).filter(Boolean);
|
|
20
|
+
if (currentNames.includes(componentName))
|
|
21
|
+
return content;
|
|
22
|
+
const newNames = [...currentNames, componentName].join(', ');
|
|
23
|
+
const newImport = `import { ${newNames} } from '@loom-framework/frontend-antd';`;
|
|
24
|
+
return content.replace(existingNpmImport[0], newImport);
|
|
25
|
+
}
|
|
26
|
+
const importLine = `import { ${componentName} } from '@loom-framework/frontend-antd';`;
|
|
27
|
+
const lastImportEnd = findLastImportEnd(content);
|
|
28
|
+
if (lastImportEnd === null)
|
|
29
|
+
return content;
|
|
30
|
+
return content.slice(0, lastImportEnd) + '\n' + importLine + content.slice(lastImportEnd);
|
|
31
|
+
}
|
|
32
|
+
/** Remove a name from the npm import from @loom-framework/frontend-antd. */
|
|
33
|
+
export function removeNpmImportName(content, name) {
|
|
34
|
+
const npmImportMatches = content.match(/import\s*\{([^}]+)\}\s*from\s*'@loom-framework\/frontend-antd';/g);
|
|
35
|
+
if (!npmImportMatches)
|
|
36
|
+
return content;
|
|
37
|
+
let modified = content;
|
|
38
|
+
for (const importLine of npmImportMatches) {
|
|
39
|
+
if (!importLine.includes(name))
|
|
40
|
+
continue;
|
|
41
|
+
const namesMatch = importLine.match(/import\s*\{([^}]+)\}/);
|
|
42
|
+
if (!namesMatch)
|
|
43
|
+
continue;
|
|
44
|
+
const importNames = namesMatch[1].split(',').map(s => s.trim()).filter(Boolean);
|
|
45
|
+
const filtered = importNames.filter(n => n !== name);
|
|
46
|
+
if (filtered.length > 0) {
|
|
47
|
+
const newImport = `import { ${filtered.join(', ')} } from '@loom-framework/frontend-antd';`;
|
|
48
|
+
modified = modified.replace(importLine, newImport);
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
modified = modified.replace(importLine, '');
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
return modified;
|
|
55
|
+
}
|
|
56
|
+
/** Add a local import line: import XPage from './components/pages/X'; */
|
|
57
|
+
export function ensureLocalImport(content, pascalName) {
|
|
58
|
+
const importLine = `import ${pascalName}Page from './components/pages/${pascalName}';`;
|
|
59
|
+
if (content.includes(importLine))
|
|
60
|
+
return content;
|
|
61
|
+
const lastImportEnd = findLastImportEnd(content);
|
|
62
|
+
if (lastImportEnd === null)
|
|
63
|
+
return content;
|
|
64
|
+
return content.slice(0, lastImportEnd) + '\n' + importLine + content.slice(lastImportEnd);
|
|
65
|
+
}
|
|
66
|
+
/** Remove a local import line. */
|
|
67
|
+
export function removeLocalImport(content, pascalName) {
|
|
68
|
+
const regex = new RegExp(`import\\s+${pascalName}Page\\s+from\\s*'\\.\\/components\\/pages\\/${pascalName}';\\n?`, 'g');
|
|
69
|
+
return content.replace(regex, '');
|
|
70
|
+
}
|
|
71
|
+
/** Ensure registerMessages is imported from @loom-framework/frontend-antd. */
|
|
72
|
+
export function ensureRegisterMessagesImport(content) {
|
|
73
|
+
if (content.includes('registerMessages'))
|
|
74
|
+
return content;
|
|
75
|
+
return content.replace(/\}\s*from\s*'@loom-framework\/frontend-antd';/, ", registerMessages } from '@loom-framework/frontend-antd';");
|
|
76
|
+
}
|
|
77
|
+
/** Register i18n keys for nav.system-settings and the page's nav key. */
|
|
78
|
+
export function ensureI18nRegistration(content, navKey, navLabelZh, navLabelEn) {
|
|
79
|
+
const lines = [];
|
|
80
|
+
if (!content.includes("'nav.system-settings'")) {
|
|
81
|
+
lines.push(`registerMessages('zh-CN', { 'nav.system-settings': '系统配置' });`, `registerMessages('en-US', { 'nav.system-settings': 'System Settings' });`);
|
|
82
|
+
}
|
|
83
|
+
if (!content.includes(`'nav.${navKey}'`)) {
|
|
84
|
+
lines.push(`registerMessages('zh-CN', { 'nav.${navKey}': '${navLabelZh}' });`, `registerMessages('en-US', { 'nav.${navKey}': '${navLabelEn}' });`);
|
|
85
|
+
}
|
|
86
|
+
if (lines.length === 0)
|
|
87
|
+
return content;
|
|
88
|
+
const registerBlock = lines.join('\n');
|
|
89
|
+
const afterImportsIdx = findLastImportEnd(content);
|
|
90
|
+
if (afterImportsIdx === null)
|
|
91
|
+
return content;
|
|
92
|
+
return content.slice(0, afterImportsIdx) + '\n' + registerBlock + content.slice(afterImportsIdx);
|
|
93
|
+
}
|
|
94
|
+
/** Ensure navItem in system-settings submenu. If skipNav, only ensures submenu exists without adding child. */
|
|
95
|
+
export function ensureNavItem(content, navKey, navLabelZh, navLabelEn, skipNav = false) {
|
|
96
|
+
const childNavItem = `{ key: '${navKey}', label: t('nav.${navKey}') }`;
|
|
97
|
+
// If skipNav, we don't need a nav item but the submenu might already exist
|
|
98
|
+
if (skipNav && content.includes("key: 'system-settings'"))
|
|
99
|
+
return content;
|
|
100
|
+
if (content.includes("key: 'system-settings'") && content.includes('children:')) {
|
|
101
|
+
// Submenu exists — check if this child already exists
|
|
102
|
+
if (!skipNav) {
|
|
103
|
+
const childAlreadyInNav = content.includes(`key: '${navKey}', label: t('nav.${navKey}')`) ||
|
|
104
|
+
content.includes(`key: '${navKey}', label:`);
|
|
105
|
+
if (!childAlreadyInNav) {
|
|
106
|
+
const childrenMatch = content.match(/key:\s*'system-settings',\s*label:\s*t\('nav\.system-settings'\),\s*children:\s*\[/);
|
|
107
|
+
if (childrenMatch) {
|
|
108
|
+
const childrenStart = childrenMatch.index + childrenMatch[0].length;
|
|
109
|
+
let depth = 1;
|
|
110
|
+
let pos = childrenStart;
|
|
111
|
+
while (pos < content.length && depth > 0) {
|
|
112
|
+
if (content[pos] === '[')
|
|
113
|
+
depth++;
|
|
114
|
+
else if (content[pos] === ']')
|
|
115
|
+
depth--;
|
|
116
|
+
pos++;
|
|
117
|
+
}
|
|
118
|
+
const childrenEnd = pos - 1;
|
|
119
|
+
const beforeClose = content.slice(0, childrenEnd).trimEnd();
|
|
120
|
+
const needsComma = beforeClose.endsWith('}');
|
|
121
|
+
content = beforeClose + (needsComma ? ',' : '') + '\n ' + childNavItem + content.slice(childrenEnd);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
else {
|
|
127
|
+
// No submenu — create one (only if not skipNav)
|
|
128
|
+
if (skipNav)
|
|
129
|
+
return content;
|
|
130
|
+
// Remove any old flat navItem for system-settings
|
|
131
|
+
content = content.replace(/\{\s*key:\s*'system-settings',\s*label:\s*t\('nav\.system-settings'\)\s*\},?\n?/g, '');
|
|
132
|
+
const submenuItem = ` { key: 'system-settings', label: t('nav.system-settings'), children: [\n ${childNavItem},\n ] },`;
|
|
133
|
+
const commentIdx = content.indexOf('// Add nav items');
|
|
134
|
+
if (commentIdx !== -1) {
|
|
135
|
+
const lineStart = content.lastIndexOf('\n', commentIdx) + 1;
|
|
136
|
+
content = content.slice(0, lineStart) + submenuItem + '\n' + content.slice(lineStart);
|
|
137
|
+
}
|
|
138
|
+
else {
|
|
139
|
+
const navArrayMatch = content.match(/const navItems\s*=\s*\[/);
|
|
140
|
+
if (!navArrayMatch)
|
|
141
|
+
return content;
|
|
142
|
+
const arrayStart = navArrayMatch.index + navArrayMatch[0].length;
|
|
143
|
+
let depth = 1;
|
|
144
|
+
let pos = arrayStart;
|
|
145
|
+
while (pos < content.length && depth > 0) {
|
|
146
|
+
if (content[pos] === '[')
|
|
147
|
+
depth++;
|
|
148
|
+
else if (content[pos] === ']')
|
|
149
|
+
depth--;
|
|
150
|
+
pos++;
|
|
151
|
+
}
|
|
152
|
+
const closingBracket = pos - 1;
|
|
153
|
+
const lineStart = content.lastIndexOf('\n', closingBracket) + 1;
|
|
154
|
+
content = content.slice(0, lineStart) + submenuItem + '\n' + content.slice(lineStart);
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
return content;
|
|
158
|
+
}
|
|
159
|
+
/** Add a switch case before the default case. */
|
|
160
|
+
export function ensureSwitchCase(content, navKey, componentName) {
|
|
161
|
+
if (content.includes(`case '${navKey}':`))
|
|
162
|
+
return content;
|
|
163
|
+
const caseLine = ` case '${navKey}': return <${componentName} />;`;
|
|
164
|
+
const defaultIdx = content.indexOf('default:');
|
|
165
|
+
if (defaultIdx === -1)
|
|
166
|
+
return content;
|
|
167
|
+
const lineStart = content.lastIndexOf('\n', defaultIdx) + 1;
|
|
168
|
+
return content.slice(0, lineStart) + caseLine + '\n' + content.slice(lineStart);
|
|
169
|
+
}
|
|
170
|
+
/** Replace the component in a switch case. */
|
|
171
|
+
export function replaceSwitchCase(content, navKey, oldComponent, newComponent) {
|
|
172
|
+
const oldCaseRegex = new RegExp(`case\\s*'${navKey}':\\s*return\\s*<${oldComponent}\\s*\\/?>;`, 'g');
|
|
173
|
+
return content.replace(oldCaseRegex, `case '${navKey}': return <${newComponent} />;`);
|
|
174
|
+
}
|
|
175
|
+
/** Ensure breadcrumb mapping for a nav key. */
|
|
176
|
+
export function ensureBreadcrumb(content, navKey, navLabelZh, navLabelEn) {
|
|
177
|
+
const breadcrumbLine = ` '${navKey}': [{ title: t('nav.${navKey}') }],`;
|
|
178
|
+
const bcMapMatch = content.match(/const\s+breadcrumbMap[^=]*=\s*\{([\s\S]*?)\n\s*\};/);
|
|
179
|
+
const hasBreadcrumb = bcMapMatch ? bcMapMatch[1].includes(`'${navKey}':`) : content.includes(`'${navKey}': [{ title:`);
|
|
180
|
+
if (hasBreadcrumb)
|
|
181
|
+
return content;
|
|
182
|
+
const breadcrumbCommentIdx = content.indexOf('// Add breadcrumb mappings');
|
|
183
|
+
if (breadcrumbCommentIdx !== -1) {
|
|
184
|
+
const lineStart = content.lastIndexOf('\n', breadcrumbCommentIdx) + 1;
|
|
185
|
+
return content.slice(0, lineStart) + breadcrumbLine + '\n' + content.slice(lineStart);
|
|
186
|
+
}
|
|
187
|
+
// Fallback: add to existing breadcrumbMap
|
|
188
|
+
const mapObjMatch = content.match(/const\s+breadcrumbMap[^=]*=\s*\{/);
|
|
189
|
+
if (mapObjMatch) {
|
|
190
|
+
const mapStart = mapObjMatch.index + mapObjMatch[0].length;
|
|
191
|
+
return content.slice(0, mapStart) + '\n' + breadcrumbLine + content.slice(mapStart);
|
|
192
|
+
}
|
|
193
|
+
return content;
|
|
194
|
+
}
|
|
195
|
+
/** Ensure system-settings breadcrumb exists if system-settings nav exists. */
|
|
196
|
+
export function ensureSystemSettingsBreadcrumb(content) {
|
|
197
|
+
if (!content.includes("'system-settings':") && content.includes("key: 'system-settings'")) {
|
|
198
|
+
const sysBcLine = ` 'system-settings': [{ title: t('nav.system-settings') }],`;
|
|
199
|
+
const breadcrumbCommentIdx = content.indexOf('// Add breadcrumb mappings');
|
|
200
|
+
if (breadcrumbCommentIdx !== -1) {
|
|
201
|
+
const lineStart = content.lastIndexOf('\n', breadcrumbCommentIdx) + 1;
|
|
202
|
+
return content.slice(0, lineStart) + sysBcLine + '\n' + content.slice(lineStart);
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
return content;
|
|
206
|
+
}
|
|
207
|
+
/** Add AuthGuard fallback prop: <AuthGuard> → <AuthGuard fallback={<LoginPage />}> */
|
|
208
|
+
export function ensureAuthGuardFallback(content, componentName) {
|
|
209
|
+
const pattern = `<AuthGuard fallback={<${componentName} />}>`;
|
|
210
|
+
if (content.includes(pattern))
|
|
211
|
+
return content;
|
|
212
|
+
return content.replace(/<AuthGuard>/g, `<AuthGuard fallback={<${componentName} />}>`);
|
|
213
|
+
}
|
|
214
|
+
/** Remove AuthGuard fallback prop: <AuthGuard fallback={<LoginPage />}> → <AuthGuard> */
|
|
215
|
+
export function removeAuthGuardFallback(content, componentName) {
|
|
216
|
+
const pattern = new RegExp(`<AuthGuard\\s+fallback=\\{<${componentName}\\s*\\/>\\}>`, 'g');
|
|
217
|
+
return content.replace(pattern, '<AuthGuard>');
|
|
218
|
+
}
|
|
219
|
+
/** Ensure AuthProvider + AuthGuard wrapping in App.tsx. */
|
|
220
|
+
export function ensureAuthProviderWrapping(content) {
|
|
221
|
+
// Add AuthProvider + AuthGuard imports
|
|
222
|
+
if (content.includes('AuthProvider') && content.includes('AuthGuard'))
|
|
223
|
+
return content;
|
|
224
|
+
let modified = content;
|
|
225
|
+
if (!modified.includes('AuthProvider')) {
|
|
226
|
+
const authImport = `import { AuthProvider, AuthGuard } from '@loom-framework/frontend-antd';`;
|
|
227
|
+
const lastImportEnd = findLastImportEnd(modified);
|
|
228
|
+
if (lastImportEnd === null)
|
|
229
|
+
return content;
|
|
230
|
+
modified = modified.slice(0, lastImportEnd) + '\n' + authImport + modified.slice(lastImportEnd);
|
|
231
|
+
}
|
|
232
|
+
// Wrap the main content with AuthProvider > AuthGuard
|
|
233
|
+
const loomProviderMatch = modified.match(/<LoomConfigProvider[^>]*>/);
|
|
234
|
+
if (loomProviderMatch) {
|
|
235
|
+
const providerStart = loomProviderMatch.index + loomProviderMatch[0].length;
|
|
236
|
+
const closingTag = '</LoomConfigProvider>';
|
|
237
|
+
const closingIdx = modified.lastIndexOf(closingTag);
|
|
238
|
+
if (closingIdx === -1)
|
|
239
|
+
return content;
|
|
240
|
+
modified = modified.slice(0, providerStart) +
|
|
241
|
+
'\n <AuthProvider>\n <AuthGuard>' +
|
|
242
|
+
modified.slice(providerStart, closingIdx) +
|
|
243
|
+
'</AuthGuard>\n </AuthProvider>\n ' +
|
|
244
|
+
modified.slice(closingIdx);
|
|
245
|
+
}
|
|
246
|
+
return modified;
|
|
247
|
+
}
|
|
248
|
+
/** Ensure NotificationCenterProvider wrapping and notification props on AppShell. */
|
|
249
|
+
export function ensureNotificationProvider(content) {
|
|
250
|
+
if (content.includes('NotificationCenterProvider'))
|
|
251
|
+
return content;
|
|
252
|
+
let modified = content;
|
|
253
|
+
// Add NotificationCenterProvider to npm import
|
|
254
|
+
const existingNpmImport = modified.match(/import\s*\{([^}]+)\}\s*from\s*'@loom-framework\/frontend-antd';/);
|
|
255
|
+
if (existingNpmImport) {
|
|
256
|
+
const currentNames = existingNpmImport[1].split(',').map(s => s.trim()).filter(Boolean);
|
|
257
|
+
if (!currentNames.includes('NotificationCenterProvider')) {
|
|
258
|
+
const newNames = [...currentNames, 'NotificationCenterProvider'].join(', ');
|
|
259
|
+
const newImport = `import { ${newNames} } from '@loom-framework/frontend-antd';`;
|
|
260
|
+
modified = modified.replace(existingNpmImport[0], newImport);
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
else {
|
|
264
|
+
const notifImport = `import { NotificationCenterProvider } from '@loom-framework/frontend-antd';`;
|
|
265
|
+
const lastImportEnd = findLastImportEnd(modified);
|
|
266
|
+
if (lastImportEnd === null)
|
|
267
|
+
return content;
|
|
268
|
+
modified = modified.slice(0, lastImportEnd) + '\n' + notifImport + modified.slice(lastImportEnd);
|
|
269
|
+
}
|
|
270
|
+
// Wrap with NotificationCenterProvider (inside AuthProvider, outside AuthGuard)
|
|
271
|
+
if (modified.includes('<AuthProvider>') && modified.includes('<AuthGuard>')) {
|
|
272
|
+
modified = modified.replace('<AuthGuard>', '<NotificationCenterProvider>\n <AuthGuard>');
|
|
273
|
+
modified = modified.replace('</AuthGuard>', '</AuthGuard>\n </NotificationCenterProvider>');
|
|
274
|
+
}
|
|
275
|
+
else if (modified.includes('<LoomConfigProvider')) {
|
|
276
|
+
const loomProviderMatch = modified.match(/<LoomConfigProvider[^>]*>/);
|
|
277
|
+
if (loomProviderMatch) {
|
|
278
|
+
const providerStart = loomProviderMatch.index + loomProviderMatch[0].length;
|
|
279
|
+
const closingTag = '</LoomConfigProvider>';
|
|
280
|
+
const closingIdx = modified.lastIndexOf(closingTag);
|
|
281
|
+
if (closingIdx === -1)
|
|
282
|
+
return content;
|
|
283
|
+
modified = modified.slice(0, providerStart) +
|
|
284
|
+
'\n <NotificationCenterProvider>' +
|
|
285
|
+
modified.slice(providerStart, closingIdx) +
|
|
286
|
+
'</NotificationCenterProvider>\n ' +
|
|
287
|
+
modified.slice(closingIdx);
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
return modified;
|
|
291
|
+
}
|
|
292
|
+
/** Register i18n keys for notification pages. */
|
|
293
|
+
export function ensureNotificationI18n(content) {
|
|
294
|
+
if (content.includes("'nav.notifications'"))
|
|
295
|
+
return content;
|
|
296
|
+
const registerBlock = `registerMessages('zh-CN', { 'nav.notifications': '通知', 'notification.detail': '通知详情' });\nregisterMessages('en-US', { 'nav.notifications': 'Notifications', 'notification.detail': 'Notification Detail' });`;
|
|
297
|
+
const afterImportsIdx = findLastImportEnd(content);
|
|
298
|
+
if (afterImportsIdx === null)
|
|
299
|
+
return content;
|
|
300
|
+
return content.slice(0, afterImportsIdx) + '\n' + registerBlock + content.slice(afterImportsIdx);
|
|
301
|
+
}
|
|
302
|
+
/** Add notification switch cases. */
|
|
303
|
+
export function ensureNotificationSwitchCases(content, centerComponent, detailComponent) {
|
|
304
|
+
let modified = content;
|
|
305
|
+
if (!modified.includes("case 'notifications':")) {
|
|
306
|
+
const caseLine = ` case 'notifications': return <${centerComponent} />;`;
|
|
307
|
+
const defaultIdx = modified.indexOf('default:');
|
|
308
|
+
if (defaultIdx !== -1) {
|
|
309
|
+
const lineStart = modified.lastIndexOf('\n', defaultIdx) + 1;
|
|
310
|
+
modified = modified.slice(0, lineStart) + caseLine + '\n' + modified.slice(lineStart);
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
if (!modified.includes("case 'notification-detail':")) {
|
|
314
|
+
const detailCaseLine = ` case 'notification-detail': return <${detailComponent} />;`;
|
|
315
|
+
const notifCaseIdx = modified.indexOf("case 'notifications':");
|
|
316
|
+
if (notifCaseIdx !== -1) {
|
|
317
|
+
const afterCase = modified.indexOf('\n', notifCaseIdx) + 1;
|
|
318
|
+
modified = modified.slice(0, afterCase) + detailCaseLine + '\n' + modified.slice(afterCase);
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
return modified;
|
|
322
|
+
}
|
|
323
|
+
/** Ensure notification breadcrumbs. */
|
|
324
|
+
export function ensureNotificationBreadcrumbs(content) {
|
|
325
|
+
const breadcrumbLine = ` 'notifications': [{ title: t('nav.notifications') }],`;
|
|
326
|
+
const detailBreadcrumbLine = ` 'notification-detail': [{ title: t('nav.notifications'), path: 'notifications' }, { title: t('notification.detail') }],`;
|
|
327
|
+
const bcMapMatch = content.match(/const\s+breadcrumbMap[^=]*=\s*\{([\s\S]*?)\n\s*\};/);
|
|
328
|
+
const hasBreadcrumb = bcMapMatch ? bcMapMatch[1].includes("'notifications':") : content.includes("'notifications': [{ title:");
|
|
329
|
+
const hasDetailBreadcrumb = bcMapMatch ? bcMapMatch[1].includes("'notification-detail':") : content.includes("'notification-detail':");
|
|
330
|
+
const toAdd = [];
|
|
331
|
+
if (!hasBreadcrumb)
|
|
332
|
+
toAdd.push(breadcrumbLine);
|
|
333
|
+
if (!hasDetailBreadcrumb)
|
|
334
|
+
toAdd.push(detailBreadcrumbLine);
|
|
335
|
+
if (toAdd.length === 0)
|
|
336
|
+
return content;
|
|
337
|
+
const allLines = toAdd.join('\n') + '\n';
|
|
338
|
+
const breadcrumbCommentIdx = content.indexOf('// Add breadcrumb mappings');
|
|
339
|
+
if (breadcrumbCommentIdx !== -1) {
|
|
340
|
+
const lineStart = content.lastIndexOf('\n', breadcrumbCommentIdx) + 1;
|
|
341
|
+
return content.slice(0, lineStart) + allLines + content.slice(lineStart);
|
|
342
|
+
}
|
|
343
|
+
const mapObjMatch = content.match(/const\s+breadcrumbMap[^=]*=\s*\{/);
|
|
344
|
+
if (mapObjMatch) {
|
|
345
|
+
const mapStart = mapObjMatch.index + mapObjMatch[0].length;
|
|
346
|
+
return content.slice(0, mapStart) + '\n' + allLines + content.slice(mapStart);
|
|
347
|
+
}
|
|
348
|
+
return content;
|
|
349
|
+
}
|
|
350
|
+
/** Add onNotificationViewAll + onNotificationClick props to AppShell. */
|
|
351
|
+
export function ensureNotificationAppShellProps(content) {
|
|
352
|
+
if (content.includes('<AppShell') && !content.includes('onNotificationViewAll')) {
|
|
353
|
+
return content.replace('onNavClick={setSelectedKey}', "onNavClick={setSelectedKey}\n onNotificationViewAll={() => setSelectedKey('notifications')}\n onNotificationClick={(id) => setSelectedKey('notification-detail')}");
|
|
354
|
+
}
|
|
355
|
+
return content;
|
|
356
|
+
}
|
|
357
|
+
/** Migration: ensure breadcrumbsMap prop on AppShell. */
|
|
358
|
+
export function ensureMigrationCleanups(content) {
|
|
359
|
+
let modified = content;
|
|
360
|
+
if (modified.includes('<AppShell')) {
|
|
361
|
+
if (modified.includes('breadcrumbs={breadcrumbMap[selectedKey]}')) {
|
|
362
|
+
modified = modified.replace('breadcrumbs={breadcrumbMap[selectedKey]}', 'breadcrumbsMap={breadcrumbMap}');
|
|
363
|
+
}
|
|
364
|
+
else if (!modified.includes('breadcrumbsMap=')) {
|
|
365
|
+
modified = modified.replace('onNavClick={setSelectedKey}', 'onNavClick={setSelectedKey}\n breadcrumbsMap={breadcrumbMap}');
|
|
366
|
+
}
|
|
367
|
+
}
|
|
368
|
+
if (modified.includes('<AppShell') && !modified.includes('baseUrl=')) {
|
|
369
|
+
modified = modified.replace('<AppShell', '<AppShell\n baseUrl=""');
|
|
370
|
+
}
|
|
371
|
+
return modified;
|
|
372
|
+
}
|
|
373
|
+
/** Migrate legacy npm page imports to local imports (used by add-local/eject action). */
|
|
374
|
+
function migrateNpmPageImportsToLocal(content) {
|
|
375
|
+
const migratedImports = [];
|
|
376
|
+
const migratedComponents = [];
|
|
377
|
+
const legacyPageImport = content.match(/import\s*\{([^}]+)\}\s*from\s*'@loom-framework\/frontend-antd';/g);
|
|
378
|
+
if (legacyPageImport) {
|
|
379
|
+
for (const importLine of legacyPageImport) {
|
|
380
|
+
const namesMatch = importLine.match(/import\s*\{([^}]+)\}/);
|
|
381
|
+
if (!namesMatch)
|
|
382
|
+
continue;
|
|
383
|
+
const importNames = namesMatch[1].split(',').map(s => s.trim()).filter(Boolean);
|
|
384
|
+
const pageNames = importNames.filter(n => n.endsWith('Page'));
|
|
385
|
+
const nonPageNames = importNames.filter(n => !n.endsWith('Page'));
|
|
386
|
+
if (pageNames.length === 0)
|
|
387
|
+
continue;
|
|
388
|
+
for (const name of pageNames) {
|
|
389
|
+
const pascalName = name.slice(0, -4);
|
|
390
|
+
migratedImports.push(`import ${name} from './components/pages/${pascalName}';`);
|
|
391
|
+
const navKey = pascalName.replace(/([A-Z])/g, (m, c, i) => i === 0 ? c.toLowerCase() : '-' + c.toLowerCase()).replace(/^-/, '');
|
|
392
|
+
migratedComponents.push({ pascalName, navKey });
|
|
393
|
+
}
|
|
394
|
+
if (nonPageNames.length > 0) {
|
|
395
|
+
const keptImport = `import { ${nonPageNames.join(', ')} } from '@loom-framework/frontend-antd';`;
|
|
396
|
+
content = content.replace(importLine, keptImport);
|
|
397
|
+
}
|
|
398
|
+
else {
|
|
399
|
+
content = content.replace(importLine, '');
|
|
400
|
+
}
|
|
401
|
+
}
|
|
402
|
+
}
|
|
403
|
+
// Also remove legacy SystemSettingsPage import
|
|
404
|
+
const legacySystemImport = content.match(/import\s*\{\s*SystemSettingsPage\s*\}\s*from\s*'@loom-framework\/frontend-antd';/);
|
|
405
|
+
if (legacySystemImport) {
|
|
406
|
+
content = content.replace(legacySystemImport[0], '');
|
|
407
|
+
}
|
|
408
|
+
return { content, migratedImports, migratedComponents };
|
|
409
|
+
}
|
|
410
|
+
// ── Main engine ──
|
|
411
|
+
/**
|
|
412
|
+
* Wire App.tsx for a system settings page.
|
|
413
|
+
*
|
|
414
|
+
* Reads the config's wiringMode to determine which steps to apply
|
|
415
|
+
* based on the action (add-npm, add-local, eject, uneject).
|
|
416
|
+
*/
|
|
417
|
+
export async function wireAppTsx(options) {
|
|
418
|
+
const { projectRoot, pageConfig, action } = options;
|
|
419
|
+
const appPath = path.join(projectRoot, 'frontend', 'src', 'App.tsx');
|
|
420
|
+
let content;
|
|
421
|
+
try {
|
|
422
|
+
content = await fs.readFile(appPath, 'utf-8');
|
|
423
|
+
}
|
|
424
|
+
catch {
|
|
425
|
+
return { modified: false };
|
|
426
|
+
}
|
|
427
|
+
const componentName = `${pageConfig.pascalName}Page`;
|
|
428
|
+
const originalContent = content;
|
|
429
|
+
let modified = content;
|
|
430
|
+
const isSidebarNav = pageConfig.wiringMode === 'sidebar-nav';
|
|
431
|
+
const isAuthFallback = pageConfig.wiringMode === 'auth-fallback';
|
|
432
|
+
const isSkipNav = pageConfig.wiringMode === 'skip-nav';
|
|
433
|
+
// ── Import modifications ──
|
|
434
|
+
if (action === 'add-npm') {
|
|
435
|
+
// Check if already wired
|
|
436
|
+
if (modified.includes(componentName))
|
|
437
|
+
return { modified: false };
|
|
438
|
+
// auth-fallback pages (e.g. Login) are rendered by AuthGuard internally;
|
|
439
|
+
// no need to import them into App.tsx
|
|
440
|
+
if (!isAuthFallback) {
|
|
441
|
+
modified = ensureNpmImport(modified, componentName);
|
|
442
|
+
}
|
|
443
|
+
modified = ensureRegisterMessagesImport(modified);
|
|
444
|
+
}
|
|
445
|
+
else if (action === 'add-local') {
|
|
446
|
+
// Check if already wired with local import
|
|
447
|
+
if (modified.includes(`from './components/pages/${pageConfig.pascalName}'`))
|
|
448
|
+
return { modified: false };
|
|
449
|
+
// Migrate any existing npm imports to local
|
|
450
|
+
const migration = migrateNpmPageImportsToLocal(modified);
|
|
451
|
+
modified = migration.content;
|
|
452
|
+
modified = ensureLocalImport(modified, pageConfig.pascalName);
|
|
453
|
+
for (const migImport of migration.migratedImports) {
|
|
454
|
+
if (!modified.includes(migImport)) {
|
|
455
|
+
const lastImportEnd = findLastImportEnd(modified);
|
|
456
|
+
if (lastImportEnd !== null) {
|
|
457
|
+
modified = modified.slice(0, lastImportEnd) + '\n' + migImport + modified.slice(lastImportEnd);
|
|
458
|
+
}
|
|
459
|
+
}
|
|
460
|
+
}
|
|
461
|
+
modified = ensureRegisterMessagesImport(modified);
|
|
462
|
+
}
|
|
463
|
+
else if (action === 'eject') {
|
|
464
|
+
// Switch from npm to local import
|
|
465
|
+
if (isAuthFallback) {
|
|
466
|
+
modified = ensureLocalImport(modified, pageConfig.pascalName);
|
|
467
|
+
modified = ensureAuthGuardFallback(modified, componentName);
|
|
468
|
+
modified = removeNpmImportName(modified, pageConfig.npmComponent);
|
|
469
|
+
}
|
|
470
|
+
else {
|
|
471
|
+
modified = removeNpmImportName(modified, pageConfig.npmComponent);
|
|
472
|
+
modified = ensureLocalImport(modified, pageConfig.pascalName);
|
|
473
|
+
if (pageConfig.navKey) {
|
|
474
|
+
modified = replaceSwitchCase(modified, pageConfig.navKey, pageConfig.npmComponent, componentName);
|
|
475
|
+
if (!modified.includes(`case '${pageConfig.navKey}':`)) {
|
|
476
|
+
modified = ensureSwitchCase(modified, pageConfig.navKey, componentName);
|
|
477
|
+
}
|
|
478
|
+
}
|
|
479
|
+
modified = ensureRegisterMessagesImport(modified);
|
|
480
|
+
}
|
|
481
|
+
}
|
|
482
|
+
else if (action === 'uneject') {
|
|
483
|
+
// Switch from local to npm import
|
|
484
|
+
if (isAuthFallback) {
|
|
485
|
+
modified = removeLocalImport(modified, pageConfig.pascalName);
|
|
486
|
+
modified = removeAuthGuardFallback(modified, componentName);
|
|
487
|
+
modified = ensureNpmImport(modified, pageConfig.npmComponent);
|
|
488
|
+
}
|
|
489
|
+
else {
|
|
490
|
+
modified = removeLocalImport(modified, pageConfig.pascalName);
|
|
491
|
+
modified = ensureNpmImport(modified, pageConfig.npmComponent);
|
|
492
|
+
if (pageConfig.navKey) {
|
|
493
|
+
modified = replaceSwitchCase(modified, pageConfig.navKey, componentName, pageConfig.npmComponent);
|
|
494
|
+
if (!modified.includes(`case '${pageConfig.navKey}':`)) {
|
|
495
|
+
modified = ensureSwitchCase(modified, pageConfig.navKey, pageConfig.npmComponent);
|
|
496
|
+
}
|
|
497
|
+
}
|
|
498
|
+
}
|
|
499
|
+
}
|
|
500
|
+
// ── Navigation (sidebar-nav and skip-nav) ──
|
|
501
|
+
if ((isSidebarNav || isSkipNav) && pageConfig.navKey && pageConfig.navLabelZh && pageConfig.navLabelEn) {
|
|
502
|
+
const skipNav = isSkipNav;
|
|
503
|
+
modified = ensureI18nRegistration(modified, pageConfig.navKey, pageConfig.navLabelZh, pageConfig.navLabelEn);
|
|
504
|
+
modified = ensureNavItem(modified, pageConfig.navKey, pageConfig.navLabelZh, pageConfig.navLabelEn, skipNav);
|
|
505
|
+
const switchComponent = (action === 'uneject') ? pageConfig.npmComponent : componentName;
|
|
506
|
+
if (action !== 'eject' || !modified.includes(`case '${pageConfig.navKey}':`)) {
|
|
507
|
+
// For eject, switchCase was already replaced above; only add if missing
|
|
508
|
+
if (action !== 'eject') {
|
|
509
|
+
// Determine the component name for the switch case
|
|
510
|
+
const useNpmComponent = (action === 'add-npm' || action === 'uneject') ? pageConfig.npmComponent : componentName;
|
|
511
|
+
modified = ensureSwitchCase(modified, pageConfig.navKey, useNpmComponent);
|
|
512
|
+
}
|
|
513
|
+
}
|
|
514
|
+
modified = ensureBreadcrumb(modified, pageConfig.navKey, pageConfig.navLabelZh, pageConfig.navLabelEn);
|
|
515
|
+
modified = ensureSystemSettingsBreadcrumb(modified);
|
|
516
|
+
}
|
|
517
|
+
// ── Auth provider/fallback (add-npm / add-local) ──
|
|
518
|
+
if ((isAuthFallback || pageConfig.needsAuthProvider) && (action === 'add-npm' || action === 'add-local')) {
|
|
519
|
+
modified = ensureAuthProviderWrapping(modified);
|
|
520
|
+
}
|
|
521
|
+
// ── Notification provider ──
|
|
522
|
+
if (pageConfig.needsNotificationProvider && (action === 'add-npm' || action === 'add-local' || action === 'eject')) {
|
|
523
|
+
modified = ensureNotificationProvider(modified);
|
|
524
|
+
modified = ensureNotificationI18n(modified);
|
|
525
|
+
// Determine component names for notification switch cases
|
|
526
|
+
const centerComponent = (action === 'add-npm') ? pageConfig.npmComponent : componentName;
|
|
527
|
+
const detailConfig = pageConfig.extraFiles?.[0];
|
|
528
|
+
const detailComponent = detailConfig
|
|
529
|
+
? ((action === 'add-npm') ? detailConfig.npmComponent : `${detailConfig.pascalName}Page`)
|
|
530
|
+
: 'NotificationDetailPage';
|
|
531
|
+
modified = ensureNotificationSwitchCases(modified, centerComponent, detailComponent);
|
|
532
|
+
modified = ensureNotificationBreadcrumbs(modified);
|
|
533
|
+
modified = ensureNotificationAppShellProps(modified);
|
|
534
|
+
// Also wire extra files (notification detail) switch case + breadcrumb
|
|
535
|
+
if (detailConfig && detailConfig.navKey && detailConfig.navLabelZh && detailConfig.navLabelEn) {
|
|
536
|
+
modified = ensureBreadcrumb(modified, detailConfig.navKey, detailConfig.navLabelZh, detailConfig.navLabelEn);
|
|
537
|
+
}
|
|
538
|
+
}
|
|
539
|
+
// ── Migration cleanups ──
|
|
540
|
+
modified = ensureMigrationCleanups(modified);
|
|
541
|
+
if (modified === originalContent)
|
|
542
|
+
return { modified: false };
|
|
543
|
+
await fs.writeFile(appPath, modified, 'utf-8');
|
|
544
|
+
return { modified: true };
|
|
545
|
+
}
|
|
546
|
+
//# sourceMappingURL=app-tsx-wiring-engine.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app-tsx-wiring-engine.js","sourceRoot":"","sources":["../../../src/cli/helpers/app-tsx-wiring-engine.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,52 +3,17 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Surgically modifies App.tsx to add imports, navItems, and switch cases.
|
|
5
5
|
* Nav labels use t() calls, so i18n keys are registered via registerMessages.
|
|
6
|
+
*
|
|
7
|
+
* For system settings pages (model/skill/user/login/process/notification),
|
|
8
|
+
* use wireAppTsx() from app-tsx-wiring-engine.ts instead.
|
|
6
9
|
*/
|
|
7
10
|
/**
|
|
8
11
|
* Auto-wire App.tsx: add import, navItem, and switch case for a new page.
|
|
12
|
+
* Used by `loom generate page` for CRUD pages (not system settings pages).
|
|
9
13
|
* Returns true if successful, false if App.tsx structure is unexpected.
|
|
10
14
|
*/
|
|
11
15
|
export declare function wireAppTsxAutomatic(projectRoot: string, pascalName: string, navKey: string, navLabel: string, options?: {
|
|
12
16
|
insertAtTop?: boolean;
|
|
13
17
|
navLabelEn?: string;
|
|
14
18
|
}): Promise<boolean>;
|
|
15
|
-
/**
|
|
16
|
-
* Auto-wire the system-settings navigation group into App.tsx.
|
|
17
|
-
* Creates or extends a system-settings submenu with the given page as a child.
|
|
18
|
-
*
|
|
19
|
-
* On first call, creates the submenu structure. On subsequent calls, appends
|
|
20
|
-
* the new child to the existing submenu. Also handles migration from legacy
|
|
21
|
-
* npm-import pattern to local imports.
|
|
22
|
-
*
|
|
23
|
-
* Returns true if wiring was performed, false if already wired or structure is unexpected.
|
|
24
|
-
*/
|
|
25
|
-
export declare function wireAppTsxForSystemSettings(projectRoot: string, pascalName: string, navKey: string, navLabelZh: string, navLabelEn: string): Promise<boolean>;
|
|
26
|
-
/**
|
|
27
|
-
* Wire App.tsx for npm-first system settings pages.
|
|
28
|
-
* Instead of writing local files, imports page components directly from @loom-framework/frontend-antd.
|
|
29
|
-
* Follows the same nav/breadcrumb/switch pattern as wireAppTsxForSystemSettings but uses npm imports.
|
|
30
|
-
*
|
|
31
|
-
* Returns true if wiring was performed, false if already wired or structure unexpected.
|
|
32
|
-
*/
|
|
33
|
-
export declare function wireAppTsxForNpmSystemSettings(projectRoot: string, pascalName: string, navKey: string, navLabelZh: string, navLabelEn: string, options?: {
|
|
34
|
-
skipNav?: boolean;
|
|
35
|
-
}): Promise<boolean>;
|
|
36
|
-
/**
|
|
37
|
-
* Wire App.tsx for Auth: inject AuthProvider + AuthGuard wrapping.
|
|
38
|
-
* Provider order: LoomConfigProvider > AuthProvider > AuthGuard > AppContent
|
|
39
|
-
*
|
|
40
|
-
* Returns true if wiring was performed, false if already wired or structure unexpected.
|
|
41
|
-
*/
|
|
42
|
-
export declare function wireAppTsxForAuth(projectRoot: string): Promise<boolean>;
|
|
43
|
-
/**
|
|
44
|
-
* Wire App.tsx for Notifications: inject NotificationCenterProvider wrapping
|
|
45
|
-
* and add notification switch case + breadcrumb + i18n.
|
|
46
|
-
*
|
|
47
|
-
* Navigation is via the bell icon in AppShell header (no sidebar navItem needed).
|
|
48
|
-
*
|
|
49
|
-
* Provider order: LoomConfigProvider > AuthProvider > NotificationCenterProvider > AuthGuard > AppContent
|
|
50
|
-
*
|
|
51
|
-
* Returns true if wiring was performed, false if already wired or structure unexpected.
|
|
52
|
-
*/
|
|
53
|
-
export declare function wireAppTsxForNotification(projectRoot: string): Promise<boolean>;
|
|
54
19
|
//# sourceMappingURL=app-tsx-wiring.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app-tsx-wiring.d.ts","sourceRoot":"","sources":["../../../src/cli/helpers/app-tsx-wiring.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"app-tsx-wiring.d.ts","sourceRoot":"","sources":["../../../src/cli/helpers/app-tsx-wiring.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAMH;;;;GAIG;AACH,wBAAsB,mBAAmB,CACvC,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE;IAAE,WAAW,CAAC,EAAE,OAAO,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,GACvD,OAAO,CAAC,OAAO,CAAC,CAqIlB"}
|