prd-to-flutter 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +149 -0
- package/bin/p2f.mjs +18 -0
- package/dist/cli.js +203 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/clean.js +35 -0
- package/dist/commands/clean.js.map +1 -0
- package/dist/commands/doctor.js +148 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/generate.js +120 -0
- package/dist/commands/generate.js.map +1 -0
- package/dist/commands/init.js +46 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/paths.js +58 -0
- package/dist/commands/paths.js.map +1 -0
- package/dist/commands/remove.js +23 -0
- package/dist/commands/remove.js.map +1 -0
- package/dist/commands/screenshots-audit.js +39 -0
- package/dist/commands/screenshots-audit.js.map +1 -0
- package/dist/commands/skills-install.js +21 -0
- package/dist/commands/skills-install.js.map +1 -0
- package/dist/commands/sync.js +84 -0
- package/dist/commands/sync.js.map +1 -0
- package/dist/commands/update.js +93 -0
- package/dist/commands/update.js.map +1 -0
- package/dist/core/existing-page-detector.js +463 -0
- package/dist/core/existing-page-detector.js.map +1 -0
- package/dist/core/fail-fast.js +50 -0
- package/dist/core/fail-fast.js.map +1 -0
- package/dist/core/feature-coverage-builder.js +667 -0
- package/dist/core/feature-coverage-builder.js.map +1 -0
- package/dist/core/flutter-project-scanner.js +393 -0
- package/dist/core/flutter-project-scanner.js.map +1 -0
- package/dist/core/implementation-plan-writer.js +190 -0
- package/dist/core/implementation-plan-writer.js.map +1 -0
- package/dist/core/logger.js +39 -0
- package/dist/core/logger.js.map +1 -0
- package/dist/core/package-info.js +33 -0
- package/dist/core/package-info.js.map +1 -0
- package/dist/core/paths.js +37 -0
- package/dist/core/paths.js.map +1 -0
- package/dist/core/playwright-capture.js +539 -0
- package/dist/core/playwright-capture.js.map +1 -0
- package/dist/core/playwright-cli.js +26 -0
- package/dist/core/playwright-cli.js.map +1 -0
- package/dist/core/playwright-install.js +40 -0
- package/dist/core/playwright-install.js.map +1 -0
- package/dist/core/prd-clone.js +131 -0
- package/dist/core/prd-clone.js.map +1 -0
- package/dist/core/prd-install.js +108 -0
- package/dist/core/prd-install.js.map +1 -0
- package/dist/core/profile.js +149 -0
- package/dist/core/profile.js.map +1 -0
- package/dist/core/project-doc-reader.js +252 -0
- package/dist/core/project-doc-reader.js.map +1 -0
- package/dist/core/report-writer.js +90 -0
- package/dist/core/report-writer.js.map +1 -0
- package/dist/core/route-name.js +60 -0
- package/dist/core/route-name.js.map +1 -0
- package/dist/core/run-context.js +160 -0
- package/dist/core/run-context.js.map +1 -0
- package/dist/core/screenshot-auditor.js +405 -0
- package/dist/core/screenshot-auditor.js.map +1 -0
- package/dist/core/screenshot-exploration-plan-writer.js +200 -0
- package/dist/core/screenshot-exploration-plan-writer.js.map +1 -0
- package/dist/core/semantic-model-builder.js +922 -0
- package/dist/core/semantic-model-builder.js.map +1 -0
- package/dist/core/skill-install.js +78 -0
- package/dist/core/skill-install.js.map +1 -0
- package/dist/core/stage-stub.js +24 -0
- package/dist/core/stage-stub.js.map +1 -0
- package/dist/core/task-index-writer.js +149 -0
- package/dist/core/task-index-writer.js.map +1 -0
- package/dist/core/update-checker.js +155 -0
- package/dist/core/update-checker.js.map +1 -0
- package/dist/core/vue-page-locator.js +748 -0
- package/dist/core/vue-page-locator.js.map +1 -0
- package/dist/core/vue-project-reader.js +116 -0
- package/dist/core/vue-project-reader.js.map +1 -0
- package/docs/artifacts-and-agent.md +203 -0
- package/docs/development.md +118 -0
- package/docs/usage.md +246 -0
- package/package.json +50 -0
- package/skills/p2f/SKILL.md +303 -0
- package/skills/p2f/references/page-layout-patterns.md +120 -0
- package/skills/p2f/references/youfi-flutter-guidelines.md +71 -0
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
import { mkdirSync, writeFileSync } from 'node:fs';
|
|
2
|
+
import { join, relative } from 'node:path';
|
|
3
|
+
import { markComplete } from './run-context.js';
|
|
4
|
+
import { logger } from './logger.js';
|
|
5
|
+
export function writeImplementationPlan(ctx, model, verdict, snapshot) {
|
|
6
|
+
const outDir = join(ctx.pageDir, 'analysis');
|
|
7
|
+
mkdirSync(outDir, { recursive: true });
|
|
8
|
+
const planPath = join(outDir, 'implementation-plan.md');
|
|
9
|
+
const highRisk = [];
|
|
10
|
+
if (verdict.status === 'missing')
|
|
11
|
+
highRisk.push('Flutter 目标页面未命中,需新增文件与路由。');
|
|
12
|
+
if (verdict.status === 'uncertain') {
|
|
13
|
+
highRisk.push(`existing-page 判定不确定(confidence=${verdict.confidence}),agent 必须先复核 \`flutter-mapping.md\`,确认后再修改或新增页面。`);
|
|
14
|
+
}
|
|
15
|
+
if (verdict.status === 'exists' && verdict.confidence < 0.85) {
|
|
16
|
+
highRisk.push(`existing-page 虽为 exists 但置信度未达 0.85(confidence=${verdict.confidence}),建议快速复核 \`flutter-mapping.md\`。`);
|
|
17
|
+
}
|
|
18
|
+
const unknowns = [];
|
|
19
|
+
if (model.blocked)
|
|
20
|
+
unknowns.push('语义模型标记 blocked=true,采集不完整,后续生成可能偏离原型。');
|
|
21
|
+
if (verdict.evidence.length === 0)
|
|
22
|
+
unknowns.push('页面存在性判断没有可用数据,默认按未初始化处理。');
|
|
23
|
+
if (verdict.agentReview.required)
|
|
24
|
+
unknowns.push(`页面存在性需要 agent 复核:${verdict.agentReview.reason}`);
|
|
25
|
+
if (model.outline.candidateInteractions.length === 0) {
|
|
26
|
+
unknowns.push('未识别到任何候选交互,Tab/弹窗等次要状态未覆盖。');
|
|
27
|
+
}
|
|
28
|
+
unknowns.push('CLI 不再自动截图;实现前必须由 agent 打开原型页面、主动探索并补齐 agent/screenshots/ 与 agent/runtime/agent-screenshot-exploration.json。');
|
|
29
|
+
const lines = [];
|
|
30
|
+
lines.push(`# 实现计划 — ${model.pageName}`);
|
|
31
|
+
lines.push('');
|
|
32
|
+
lines.push(`- 页面目录名:\`${model.pageKey}\``);
|
|
33
|
+
lines.push(`- 页面类型:\`${model.pageType}\``);
|
|
34
|
+
lines.push(`- 原型链接:${ctx.options.prototypeUrl}`);
|
|
35
|
+
lines.push(`- 原型提交:${ctx.prototypeCommit ?? '(未知)'}`);
|
|
36
|
+
lines.push(`- 原型来源:${ctx.prototypeSource ?? '(未知)'}`);
|
|
37
|
+
lines.push('');
|
|
38
|
+
lines.push('## 判定');
|
|
39
|
+
lines.push('');
|
|
40
|
+
lines.push(`- 页面存在性状态:**${verdict.status}**(置信度=${verdict.confidence})`);
|
|
41
|
+
lines.push(`- 页面是否已确认存在:**${verdict.pageExists}**`);
|
|
42
|
+
lines.push(`- 是否需要 agent 复核:**${verdict.agentReview.required}**`);
|
|
43
|
+
lines.push(`- 目标模块:\`${verdict.targetModule || '(无)'}\``);
|
|
44
|
+
if (verdict.status === 'exists') {
|
|
45
|
+
lines.push(`- 目标页面文件:\`${verdict.targetPageFile ?? '(无)'}\``);
|
|
46
|
+
lines.push(`- 目标 Widget 类:\`${verdict.targetWidgetClass ?? '(无)'}\``);
|
|
47
|
+
lines.push(`- 目标路由:\`AppRoutes.${verdict.targetRouteKey ?? '(?)'}\``);
|
|
48
|
+
}
|
|
49
|
+
else if (verdict.status === 'uncertain') {
|
|
50
|
+
lines.push(`- 候选文件:${verdict.agentReview.candidateFiles.map((f) => `\`${f}\``).join(', ') || '(无)'}`);
|
|
51
|
+
lines.push(`- 新建文件备选:\`${verdict.proposal.pageFile}\``);
|
|
52
|
+
lines.push(`- 新建类备选:\`${verdict.proposal.widgetClass}\``);
|
|
53
|
+
}
|
|
54
|
+
else {
|
|
55
|
+
lines.push(`- 新建文件提案:\`${verdict.proposal.pageFile}\``);
|
|
56
|
+
lines.push(`- 新建类提案:\`${verdict.proposal.widgetClass}\``);
|
|
57
|
+
lines.push(`- 新增路由提案:\`AppRoutes.${verdict.proposal.routeKey} = '${verdict.proposal.routePath}'\``);
|
|
58
|
+
}
|
|
59
|
+
lines.push('');
|
|
60
|
+
if (verdict.agentReview.required) {
|
|
61
|
+
lines.push('## agent 页面存在性复核');
|
|
62
|
+
lines.push('');
|
|
63
|
+
lines.push(`- 复核原因:${verdict.agentReview.reason}`);
|
|
64
|
+
lines.push('- 复核完成前,不要创建新页面,也不要修改候选页面。');
|
|
65
|
+
lines.push('');
|
|
66
|
+
lines.push('### 建议搜索命令');
|
|
67
|
+
lines.push('');
|
|
68
|
+
for (const cmd of verdict.agentReview.commands)
|
|
69
|
+
lines.push(`- \`${cmd}\``);
|
|
70
|
+
lines.push('');
|
|
71
|
+
lines.push('### 复核清单');
|
|
72
|
+
lines.push('');
|
|
73
|
+
for (const item of verdict.agentReview.checklist)
|
|
74
|
+
lines.push(`- ${item}`);
|
|
75
|
+
lines.push('');
|
|
76
|
+
}
|
|
77
|
+
lines.push('## agent 实现建议');
|
|
78
|
+
lines.push('');
|
|
79
|
+
if (verdict.status === 'exists') {
|
|
80
|
+
lines.push(`- 建议在既有页面 \`${verdict.targetPageFile ?? '(未知)'}\` 上扩展实现,保留现有业务结构。`);
|
|
81
|
+
}
|
|
82
|
+
else if (verdict.status === 'uncertain') {
|
|
83
|
+
lines.push('- 先完成上面的页面存在性复核。');
|
|
84
|
+
lines.push('- 若确认已有页面:在确认后的既有页面上扩展实现,保留现有业务结构。');
|
|
85
|
+
lines.push(`- 若确认不存在:使用新增备选 \`${verdict.proposal.pageFile}\` / \`${verdict.proposal.widgetClass}\`。`);
|
|
86
|
+
lines.push(`- 路由入口:\`${snapshot.structure.routeConstantsFile ?? '(未检测到)'}\` 和 \`${snapshot.structure.routePagesFile ?? '(未检测到)'}\`。`);
|
|
87
|
+
}
|
|
88
|
+
else {
|
|
89
|
+
lines.push(`- 建议新增页面文件:\`${verdict.proposal.pageFile}\``);
|
|
90
|
+
lines.push(`- 建议新增页面类:\`${verdict.proposal.widgetClass}\``);
|
|
91
|
+
lines.push(`- 建议新增路由:\`AppRoutes.${verdict.proposal.routeKey} = '${verdict.proposal.routePath}'\``);
|
|
92
|
+
lines.push(`- 路由入口:\`${snapshot.structure.routeConstantsFile ?? '(未检测到)'}\` 和 \`${snapshot.structure.routePagesFile ?? '(未检测到)'}\`。`);
|
|
93
|
+
lines.push('- 如果用户指定页面入口文件或模块,agent 实现时以用户指定为准,并在实现说明中记录。');
|
|
94
|
+
lines.push('- 按 YouFi 项目现有翻译规范补齐可见文本 key。');
|
|
95
|
+
}
|
|
96
|
+
lines.push('');
|
|
97
|
+
lines.push('> p2f CLI 不直接生成 Dart 页面代码;请由 agent 读取本任务目录数据后实现。');
|
|
98
|
+
lines.push('');
|
|
99
|
+
lines.push('## 资源处理');
|
|
100
|
+
lines.push('');
|
|
101
|
+
lines.push('- CLI 不直接复制 App 资源。请由 agent 按 YouFi 项目资源规范判断复用或新增。');
|
|
102
|
+
lines.push('');
|
|
103
|
+
lines.push('## 可复用资源');
|
|
104
|
+
lines.push('');
|
|
105
|
+
lines.push(`- 公共组件候选:${verdict.reuseCandidates.widgets.join(', ') || '(无)'}`);
|
|
106
|
+
lines.push(`- 主题 token 候选:${verdict.reuseCandidates.themeTokens.join(', ') || '(无)'}`);
|
|
107
|
+
lines.push('');
|
|
108
|
+
lines.push('## 主题约束');
|
|
109
|
+
lines.push('');
|
|
110
|
+
lines.push(`- 字体样式映射必须先读 \`${relative(ctx.taskDir, model.textStyleMapPath)}\`,按其中的 CSS → YouFi textStyle 映射实现。`);
|
|
111
|
+
lines.push('- 文字样式优先使用 `themeService.textStyles.*`。');
|
|
112
|
+
lines.push('- 颜色优先使用 `themeService.colors.*`。');
|
|
113
|
+
lines.push('- 不要为了贴合截图硬编码 `Color(0x...)`、十六进制颜色、字体大小或行高;没有对应 token 时在实现说明里标记差异。');
|
|
114
|
+
lines.push('- 如果实现代码选择了与 `text-style-map.md` 不同的 textStyle token,必须在实现说明里解释原因。');
|
|
115
|
+
lines.push('');
|
|
116
|
+
lines.push('## GetX 响应式约束');
|
|
117
|
+
lines.push('');
|
|
118
|
+
lines.push('- 页面优先使用 `BaseGetView<T>` + `GetxController`,但不要在 `buildView()` 外层套整页 `Obx`。');
|
|
119
|
+
lines.push('- `Obx` 只能包直接消费 Rx 的最小 UI 片段,禁止包住整页、整块静态布局或无关子树。');
|
|
120
|
+
lines.push('- 禁止在 `Obx` 中写 `controller.xxx.value;` 这种不参与渲染的空读来规避 GetX 检查。');
|
|
121
|
+
lines.push('- Rx 值必须直接参与当前 `Obx` builder 返回的 widget 渲染,例如文本、颜色、图标、选中态、显隐分支或列表内容。');
|
|
122
|
+
lines.push('- 如果子组件依赖 Rx,优先在子组件内部使用局部 `Obx`,或在父级 `Obx` 中读取 `.value` 后把普通值传给子组件。');
|
|
123
|
+
lines.push('- `dart analyze` 通过不代表 GetX 响应式范围正确;实现后必须运行页面,确认没有 `[Get] improper use of a GetX` 红屏。');
|
|
124
|
+
lines.push('');
|
|
125
|
+
lines.push('## Tab / 分段控件实现约束');
|
|
126
|
+
lines.push('');
|
|
127
|
+
lines.push('- 对 Tab、segmented control、筛选 chip、指标切换等高频点击控件,应尽量保留原型的轻量过渡感。');
|
|
128
|
+
lines.push('- 对胶囊型选中态,优先用一个单独的选中 pill / indicator 背景层在选项之间移动,例如 `Stack` + `AnimatedPositioned` / `AnimatedAlign`。不要让每个 Tab item 各自用 `AnimatedContainer` 绘制选中背景,避免旧背景退场和新背景入场叠加造成残影/闪烁。');
|
|
129
|
+
lines.push('- 文本颜色过渡使用 `AnimatedDefaultTextStyle`、`DefaultTextStyle` 配合父级动画,或项目已有组件;容器背景移动和文字颜色变化应使用接近的 `duration` / `curve`。');
|
|
130
|
+
lines.push('- 需要强调选中态时,优先只切换单一 pill 背景位置、边框和文字颜色,避免多个 item 背景同时动画与字体重栅格化叠加。');
|
|
131
|
+
lines.push('- Tab 组的 `Obx` 范围要收敛到实际消费 active state 的最小组件;不要把无关静态内容或整块面板包进同一个 `Obx`。');
|
|
132
|
+
lines.push('');
|
|
133
|
+
lines.push('## agent 截图前置任务');
|
|
134
|
+
lines.push('');
|
|
135
|
+
lines.push('- 先读 `cli/analysis/screenshot-exploration-plan.md`。');
|
|
136
|
+
lines.push('- Agent 必须打开 live prototype,主动探索页面、滚动、Tab、弹窗、下拉、输入聚焦、展开项和源码/文档提示的状态。');
|
|
137
|
+
lines.push('- 截图必须截 `.phone-screen` 元素,不能保存包含 TradeApp Workflow Hub 平台菜单的整页截图。');
|
|
138
|
+
lines.push('- 截图写入 `agent/screenshots/`,探索日志写入 `agent/runtime/agent-screenshot-exploration.json`。');
|
|
139
|
+
lines.push('- agent 创建截图、探索日志、说明文件或修改 Flutter 文件后,必须同步更新 `agent/manifest.json`。');
|
|
140
|
+
lines.push('- 截图完成后执行 `p2f screenshots-audit --url "<页面链接>"`,处理重复图和疑似平台壳层截图。');
|
|
141
|
+
lines.push('- 不要只依赖 `cli/runtime/interactions.candidate.json`;它只是线索,不是完整状态列表。');
|
|
142
|
+
lines.push('');
|
|
143
|
+
lines.push('## 读取策略');
|
|
144
|
+
lines.push('');
|
|
145
|
+
lines.push('- 先读 `main.md`、`cli/analysis/page-summary.md`、`cli/analysis/feature-coverage.md`、本计划和 agent 已生成的截图/探索日志。');
|
|
146
|
+
lines.push('- 大型 JSON 按需读取:需要查结构时读 `cli/runtime/dom.json` 的相关片段,需要查样式时读 `cli/runtime/computed-styles.json` 或 `cli/analysis/text-style-map.md`。');
|
|
147
|
+
lines.push('- 不要把全部 CLI 产物一次性塞入上下文;先用 Markdown 摘要和清单建立范围,再针对具体组件、文案、selector 读取 JSON。');
|
|
148
|
+
lines.push('');
|
|
149
|
+
lines.push('## 候选交互(尚未触发截图)');
|
|
150
|
+
lines.push('');
|
|
151
|
+
if (model.outline.candidateInteractions.length === 0) {
|
|
152
|
+
lines.push('- (空)');
|
|
153
|
+
}
|
|
154
|
+
else {
|
|
155
|
+
for (const c of model.outline.candidateInteractions.slice(0, 20)) {
|
|
156
|
+
lines.push(`- \`${c.selector}\` · ${c.kind}${c.label ? ` · ${c.label}` : ''}`);
|
|
157
|
+
}
|
|
158
|
+
if (model.outline.candidateInteractions.length > 20) {
|
|
159
|
+
lines.push(`- …共 ${model.outline.candidateInteractions.length} 项(仅展示前 20)`);
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
lines.push('');
|
|
163
|
+
lines.push('## 高风险点');
|
|
164
|
+
lines.push('');
|
|
165
|
+
if (highRisk.length === 0)
|
|
166
|
+
lines.push('- (无)');
|
|
167
|
+
for (const r of highRisk)
|
|
168
|
+
lines.push(`- ${r}`);
|
|
169
|
+
lines.push('');
|
|
170
|
+
lines.push('## 不确定项');
|
|
171
|
+
lines.push('');
|
|
172
|
+
if (unknowns.length === 0)
|
|
173
|
+
lines.push('- (无)');
|
|
174
|
+
for (const u of unknowns)
|
|
175
|
+
lines.push(`- ${u}`);
|
|
176
|
+
lines.push('');
|
|
177
|
+
lines.push('## 下一步');
|
|
178
|
+
lines.push('');
|
|
179
|
+
if (highRisk.length > 0 || unknowns.length > 0) {
|
|
180
|
+
lines.push('> 请先审阅上述高风险点与不确定项,再让 agent 基于数据实现 Flutter 页面。');
|
|
181
|
+
}
|
|
182
|
+
else {
|
|
183
|
+
lines.push('> 让 agent 先完成 live-page 截图探索,再按需读取 `main.md`、agent 截图/日志、CLI Markdown 摘要和必要 runtime JSON 实现 Flutter 页面。');
|
|
184
|
+
}
|
|
185
|
+
writeFileSync(planPath, lines.join('\n') + '\n', 'utf8');
|
|
186
|
+
logger.success(`Implementation plan → ${planPath}`);
|
|
187
|
+
markComplete(ctx, 'write-implementation-plan');
|
|
188
|
+
return { planPath, highRisk, unknowns };
|
|
189
|
+
}
|
|
190
|
+
//# sourceMappingURL=implementation-plan-writer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"implementation-plan-writer.js","sourceRoot":"","sources":["../../src/core/implementation-plan-writer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import pc from 'picocolors';
|
|
2
|
+
const prefix = {
|
|
3
|
+
debug: pc.gray('·'),
|
|
4
|
+
info: pc.cyan('i'),
|
|
5
|
+
warn: pc.yellow('!'),
|
|
6
|
+
error: pc.red('✖'),
|
|
7
|
+
success: pc.green('✓'),
|
|
8
|
+
stage: pc.magenta('▶'),
|
|
9
|
+
};
|
|
10
|
+
function emit(level, message, ...rest) {
|
|
11
|
+
const line = `${prefix[level]} ${message}`;
|
|
12
|
+
if (level === 'error') {
|
|
13
|
+
console.error(line, ...rest);
|
|
14
|
+
return;
|
|
15
|
+
}
|
|
16
|
+
console.log(line, ...rest);
|
|
17
|
+
}
|
|
18
|
+
export const logger = {
|
|
19
|
+
debug(message, ...rest) {
|
|
20
|
+
if (process.env.P2F_DEBUG)
|
|
21
|
+
emit('debug', message, ...rest);
|
|
22
|
+
},
|
|
23
|
+
info(message, ...rest) {
|
|
24
|
+
emit('info', message, ...rest);
|
|
25
|
+
},
|
|
26
|
+
warn(message, ...rest) {
|
|
27
|
+
emit('warn', message, ...rest);
|
|
28
|
+
},
|
|
29
|
+
error(message, ...rest) {
|
|
30
|
+
emit('error', message, ...rest);
|
|
31
|
+
},
|
|
32
|
+
success(message, ...rest) {
|
|
33
|
+
emit('success', message, ...rest);
|
|
34
|
+
},
|
|
35
|
+
stage(message) {
|
|
36
|
+
emit('stage', pc.bold(message));
|
|
37
|
+
},
|
|
38
|
+
};
|
|
39
|
+
//# sourceMappingURL=logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/core/logger.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,YAAY,CAAC;AAI5B,MAAM,MAAM,GAA0B;IACpC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC;IACnB,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC;IAClB,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC;IACpB,KAAK,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC;IAClB,OAAO,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC;IACtB,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC;CACvB,CAAC;AAEF,SAAS,IAAI,CAAC,KAAY,EAAE,OAAe,EAAE,GAAG,IAAe;IAC7D,MAAM,IAAI,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,OAAO,EAAE,CAAC;IAC3C,IAAI,KAAK,KAAK,OAAO,EAAE,CAAC;QACtB,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,CAAC;QAC7B,OAAO;IACT,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,CAAC;AAC7B,CAAC;AAED,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,KAAK,CAAC,OAAe,EAAE,GAAG,IAAe;QACvC,IAAI,OAAO,CAAC,GAAG,CAAC,SAAS;YAAE,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;IAC7D,CAAC;IACD,IAAI,CAAC,OAAe,EAAE,GAAG,IAAe;QACtC,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;IACjC,CAAC;IACD,IAAI,CAAC,OAAe,EAAE,GAAG,IAAe;QACtC,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;IACjC,CAAC;IACD,KAAK,CAAC,OAAe,EAAE,GAAG,IAAe;QACvC,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;IAClC,CAAC;IACD,OAAO,CAAC,OAAe,EAAE,GAAG,IAAe;QACzC,IAAI,CAAC,SAAS,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;IACpC,CAAC;IACD,KAAK,CAAC,OAAe;QACnB,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;IAClC,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { existsSync, readFileSync } from 'node:fs';
|
|
2
|
+
import { dirname, join, resolve } from 'node:path';
|
|
3
|
+
import { fileURLToPath } from 'node:url';
|
|
4
|
+
export function readPackageInfo() {
|
|
5
|
+
const pkgPath = join(resolvePackageRoot(), 'package.json');
|
|
6
|
+
const raw = JSON.parse(readFileSync(pkgPath, 'utf8'));
|
|
7
|
+
if (!isRecord(raw)) {
|
|
8
|
+
throw new Error(`package.json 格式无效:${pkgPath}`);
|
|
9
|
+
}
|
|
10
|
+
const name = typeof raw.name === 'string' ? raw.name : 'p2f';
|
|
11
|
+
const version = typeof raw.version === 'string' ? raw.version : '0.0.0';
|
|
12
|
+
const p2f = isRecord(raw.p2f) ? raw.p2f : undefined;
|
|
13
|
+
const updateRepo = typeof p2f?.updateRepo === 'string' ? p2f.updateRepo : undefined;
|
|
14
|
+
return { name, version, updateRepo };
|
|
15
|
+
}
|
|
16
|
+
function resolvePackageRoot() {
|
|
17
|
+
let cur = dirname(fileURLToPath(import.meta.url));
|
|
18
|
+
for (let i = 0; i < 8; i += 1) {
|
|
19
|
+
const pkgPath = join(cur, 'package.json');
|
|
20
|
+
if (existsSync(pkgPath)) {
|
|
21
|
+
return cur;
|
|
22
|
+
}
|
|
23
|
+
const parent = dirname(cur);
|
|
24
|
+
if (parent === cur)
|
|
25
|
+
break;
|
|
26
|
+
cur = parent;
|
|
27
|
+
}
|
|
28
|
+
return resolve(dirname(fileURLToPath(import.meta.url)), '..', '..');
|
|
29
|
+
}
|
|
30
|
+
function isRecord(value) {
|
|
31
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=package-info.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"package-info.js","sourceRoot":"","sources":["../../src/core/package-info.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAQzC,MAAM,UAAU,eAAe;IAC7B,MAAM,OAAO,GAAG,IAAI,CAAC,kBAAkB,EAAE,EAAE,cAAc,CAAC,CAAC;IAC3D,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,CAAY,CAAC;IACjE,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QACnB,MAAM,IAAI,KAAK,CAAC,qBAAqB,OAAO,EAAE,CAAC,CAAC;IAClD,CAAC;IAED,MAAM,IAAI,GAAG,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC;IAC7D,MAAM,OAAO,GAAG,OAAO,GAAG,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC;IACxE,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC;IACpD,MAAM,UAAU,GAAG,OAAO,GAAG,EAAE,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC;IAEpF,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC;AACvC,CAAC;AAED,SAAS,kBAAkB;IACzB,IAAI,GAAG,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IAClD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QAC9B,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;QAC1C,IAAI,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YACxB,OAAO,GAAG,CAAC;QACb,CAAC;QACD,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;QAC5B,IAAI,MAAM,KAAK,GAAG;YAAE,MAAM;QAC1B,GAAG,GAAG,MAAM,CAAC;IACf,CAAC;IACD,OAAO,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AACtE,CAAC;AAED,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9E,CAAC"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { dirname, resolve, join } from 'node:path';
|
|
2
|
+
import { existsSync, statSync } from 'node:fs';
|
|
3
|
+
export function resolveWorkspaceRoot(hint) {
|
|
4
|
+
if (hint)
|
|
5
|
+
return resolve(hint);
|
|
6
|
+
// Walk up from cwd until we find pubspec.yaml; that's the Flutter workspace root.
|
|
7
|
+
let cur = process.cwd();
|
|
8
|
+
for (let i = 0; i < 16; i += 1) {
|
|
9
|
+
const candidate = join(cur, 'pubspec.yaml');
|
|
10
|
+
if (existsSync(candidate) && statSync(candidate).isFile()) {
|
|
11
|
+
return cur;
|
|
12
|
+
}
|
|
13
|
+
const parent = dirname(cur);
|
|
14
|
+
if (parent === cur)
|
|
15
|
+
break;
|
|
16
|
+
cur = parent;
|
|
17
|
+
}
|
|
18
|
+
// Fallback to cwd; callers can still validate presence of pubspec.yaml.
|
|
19
|
+
return process.cwd();
|
|
20
|
+
}
|
|
21
|
+
export function buildWorkspacePaths(hint) {
|
|
22
|
+
const root = resolveWorkspaceRoot(hint);
|
|
23
|
+
const workspaceDir = join(root, '.p2f-workspace');
|
|
24
|
+
return {
|
|
25
|
+
root,
|
|
26
|
+
workspaceDir,
|
|
27
|
+
prdSourceDir: join(workspaceDir, 'prd-source'),
|
|
28
|
+
pagesDir: join(workspaceDir, 'pages'),
|
|
29
|
+
projectDir: join(workspaceDir, 'project'),
|
|
30
|
+
logsDir: join(workspaceDir, 'logs'),
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
/** Canonical remote for the prototype repo. */
|
|
34
|
+
export const PROTOTYPE_REMOTE = 'git@code.nexita.net:inno/youfi/web/TradeAppPrd.git';
|
|
35
|
+
/** Canonical branch name. */
|
|
36
|
+
export const PROTOTYPE_BRANCH = 'master';
|
|
37
|
+
//# sourceMappingURL=paths.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"paths.js","sourceRoot":"","sources":["../../src/core/paths.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAqB/C,MAAM,UAAU,oBAAoB,CAAC,IAAa;IAChD,IAAI,IAAI;QAAE,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/B,kFAAkF;IAClF,IAAI,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IACxB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QAC/B,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;QAC5C,IAAI,UAAU,CAAC,SAAS,CAAC,IAAI,QAAQ,CAAC,SAAS,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC;YAC1D,OAAO,GAAG,CAAC;QACb,CAAC;QACD,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;QAC5B,IAAI,MAAM,KAAK,GAAG;YAAE,MAAM;QAC1B,GAAG,GAAG,MAAM,CAAC;IACf,CAAC;IACD,wEAAwE;IACxE,OAAO,OAAO,CAAC,GAAG,EAAE,CAAC;AACvB,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,IAAa;IAC/C,MAAM,IAAI,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC;IACxC,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAAC;IAClD,OAAO;QACL,IAAI;QACJ,YAAY;QACZ,YAAY,EAAE,IAAI,CAAC,YAAY,EAAE,YAAY,CAAC;QAC9C,QAAQ,EAAE,IAAI,CAAC,YAAY,EAAE,OAAO,CAAC;QACrC,UAAU,EAAE,IAAI,CAAC,YAAY,EAAE,SAAS,CAAC;QACzC,OAAO,EAAE,IAAI,CAAC,YAAY,EAAE,MAAM,CAAC;KACpC,CAAC;AACJ,CAAC;AAED,+CAA+C;AAC/C,MAAM,CAAC,MAAM,gBAAgB,GAAG,oDAAoD,CAAC;AAErF,6BAA6B;AAC7B,MAAM,CAAC,MAAM,gBAAgB,GAAG,QAAQ,CAAC"}
|