speccore 6.45.0 → 6.46.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.
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.GLOBAL_SPEC_FILES = exports.GLOBAL_SPECS_DIR = void 0;
4
4
  exports.resolveGlobalSpecPath = resolveGlobalSpecPath;
5
5
  exports.globalSpecWritePath = globalSpecWritePath;
6
+ exports.parsePlatformList = parsePlatformList;
6
7
  /**
7
8
  * spec-paths — 020-specs/ 目录路径辅助函数
8
9
  *
@@ -39,4 +40,72 @@ async function globalSpecWritePath(specDir, filename) {
39
40
  await (0, fs_extra_1.ensureDir)(dir);
40
41
  return (0, path_1.join)(dir, filename);
41
42
  }
43
+ /**
44
+ * 从 CONSTITUTION.md 解析端列表(v6.46.0+)
45
+ * 优先读取「端列表」章节,回退到「对应需求端」列
46
+ * 返回去重后的端名数组
47
+ */
48
+ async function parsePlatformList() {
49
+ const constitutionPath = (0, path_1.join)('.speccore', 'CONSTITUTION.md');
50
+ if (!(await (0, fs_extra_1.pathExists)(constitutionPath)))
51
+ return [];
52
+ const content = await (0, fs_extra_1.readFile)(constitutionPath, 'utf-8');
53
+ const lines = content.split('\n');
54
+ // 1. 优先解析「端列表」章节(v6.46.0+ 显式声明)
55
+ let inPlatformSection = false;
56
+ const platforms = new Set();
57
+ for (let i = 0; i < lines.length; i++) {
58
+ const line = lines[i].trim();
59
+ // 检测章节标题
60
+ if (line.match(/^##\s+.*\u7aef\u5217\u8868/) || line.match(/^##\s+.*\u5e73\u53f0\u5217\u8868/)) {
61
+ inPlatformSection = true;
62
+ continue;
63
+ }
64
+ // 遇到下一个 ## 章节就停止
65
+ if (inPlatformSection && line.match(/^##\s/))
66
+ break;
67
+ if (!inPlatformSection)
68
+ continue;
69
+ // 解析表格行(跳过标题行和分隔行)
70
+ if (!line.startsWith('|') || line.match(/^\|\s*[-:]/))
71
+ continue;
72
+ const cells = line.split('|').map(c => c.trim()).filter(Boolean);
73
+ if (cells.length >= 1) {
74
+ const platformName = cells[0].trim();
75
+ if (platformName && platformName !== '端名' && platformName !== '平台名') {
76
+ platforms.add(platformName);
77
+ }
78
+ }
79
+ }
80
+ if (platforms.size > 0)
81
+ return [...platforms];
82
+ // 2. 回退:解析「对应需求端」/「对应端」列(旧版格式)
83
+ let headerIdx = -1;
84
+ for (let i = 0; i < lines.length; i++) {
85
+ if (lines[i].includes('对应需求端') || lines[i].includes('对应端')) {
86
+ headerIdx = i;
87
+ break;
88
+ }
89
+ }
90
+ if (headerIdx >= 0) {
91
+ const headers = lines[headerIdx].split('|').map(h => h.trim()).filter(Boolean);
92
+ const platformColIdx = headers.findIndex(h => h.includes('对应需求端') || h.includes('对应端'));
93
+ if (platformColIdx >= 0) {
94
+ for (let i = headerIdx + 1; i < lines.length; i++) {
95
+ const line = lines[i].trim();
96
+ if (!line.startsWith('|') || line.match(/^\|\s*[-:]/))
97
+ continue;
98
+ const cells = line.split('|').map(c => c.trim()).filter(Boolean);
99
+ if (cells[platformColIdx]) {
100
+ cells[platformColIdx].split(',').forEach((p) => {
101
+ const trimmed = p.trim();
102
+ if (trimmed && !trimmed.startsWith('>'))
103
+ platforms.add(trimmed);
104
+ });
105
+ }
106
+ }
107
+ }
108
+ }
109
+ return [...platforms];
110
+ }
42
111
  //# sourceMappingURL=spec-paths.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"spec-paths.js","sourceRoot":"","sources":["../../src/core/spec-paths.ts"],"names":[],"mappings":";;;AAqBA,sDAMC;AAMD,kDAIC;AArCD;;;;;GAKG;AACH,+BAA4B;AAC5B,uCAAiD;AAEjD,eAAe;AACF,QAAA,gBAAgB,GAAG,QAAQ,CAAC;AAEzC,mDAAmD;AACtC,QAAA,iBAAiB,GAAG;IAC/B,gBAAgB,EAAE,aAAa,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,YAAY;CAC5F,CAAC;AAEF;;;GAGG;AACI,KAAK,UAAU,qBAAqB,CAAC,OAAe,EAAE,QAAgB;IAC3E,MAAM,OAAO,GAAG,IAAA,WAAI,EAAC,OAAO,EAAE,wBAAgB,EAAE,QAAQ,CAAC,CAAC;IAC1D,IAAI,MAAM,IAAA,qBAAU,EAAC,OAAO,CAAC;QAAE,OAAO,OAAO,CAAC;IAC9C,MAAM,OAAO,GAAG,IAAA,WAAI,EAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IACxC,IAAI,MAAM,IAAA,qBAAU,EAAC,OAAO,CAAC;QAAE,OAAO,OAAO,CAAC;IAC9C,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;GAGG;AACI,KAAK,UAAU,mBAAmB,CAAC,OAAe,EAAE,QAAgB;IACzE,MAAM,GAAG,GAAG,IAAA,WAAI,EAAC,OAAO,EAAE,wBAAgB,CAAC,CAAC;IAC5C,MAAM,IAAA,oBAAS,EAAC,GAAG,CAAC,CAAC;IACrB,OAAO,IAAA,WAAI,EAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;AAC7B,CAAC"}
1
+ {"version":3,"file":"spec-paths.js","sourceRoot":"","sources":["../../src/core/spec-paths.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "speccore",
3
- "version": "6.45.0",
3
+ "version": "6.46.0",
4
4
  "description": "SpecCore - Code by Spec, Not by Vibe.",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",