@phoenix-wing/kt-codegen 0.4.1

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 (144) hide show
  1. package/LICENSE +201 -0
  2. package/NOTICE +4 -0
  3. package/README.md +328 -0
  4. package/dist/KtCodegenAdapter.d.ts +42 -0
  5. package/dist/KtCodegenAdapter.d.ts.map +1 -0
  6. package/dist/KtCodegenAdapter.js +90 -0
  7. package/dist/KtCodegenAdapter.js.map +1 -0
  8. package/dist/KtCodegenApply.d.ts +93 -0
  9. package/dist/KtCodegenApply.d.ts.map +1 -0
  10. package/dist/KtCodegenApply.js +194 -0
  11. package/dist/KtCodegenApply.js.map +1 -0
  12. package/dist/KtCodegenBlockPresentation.d.ts +14 -0
  13. package/dist/KtCodegenBlockPresentation.d.ts.map +1 -0
  14. package/dist/KtCodegenBlockPresentation.js +56 -0
  15. package/dist/KtCodegenBlockPresentation.js.map +1 -0
  16. package/dist/KtCodegenController.d.ts +68 -0
  17. package/dist/KtCodegenController.d.ts.map +1 -0
  18. package/dist/KtCodegenController.js +100 -0
  19. package/dist/KtCodegenController.js.map +1 -0
  20. package/dist/KtCodegenCore.d.ts +87 -0
  21. package/dist/KtCodegenCore.d.ts.map +1 -0
  22. package/dist/KtCodegenCore.js +234 -0
  23. package/dist/KtCodegenCore.js.map +1 -0
  24. package/dist/KtCodegenItem.d.ts +84 -0
  25. package/dist/KtCodegenItem.d.ts.map +1 -0
  26. package/dist/KtCodegenItem.js +88 -0
  27. package/dist/KtCodegenItem.js.map +1 -0
  28. package/dist/KtCodegenMarker.d.ts +110 -0
  29. package/dist/KtCodegenMarker.d.ts.map +1 -0
  30. package/dist/KtCodegenMarker.js +246 -0
  31. package/dist/KtCodegenMarker.js.map +1 -0
  32. package/dist/KtCodegenOptions.d.ts +29 -0
  33. package/dist/KtCodegenOptions.d.ts.map +1 -0
  34. package/dist/KtCodegenOptions.js +97 -0
  35. package/dist/KtCodegenOptions.js.map +1 -0
  36. package/dist/KtCodegenParam.d.ts +60 -0
  37. package/dist/KtCodegenParam.d.ts.map +1 -0
  38. package/dist/KtCodegenParam.js +68 -0
  39. package/dist/KtCodegenParam.js.map +1 -0
  40. package/dist/KtCodegenReader.d.ts +23 -0
  41. package/dist/KtCodegenReader.d.ts.map +1 -0
  42. package/dist/KtCodegenReader.js +28 -0
  43. package/dist/KtCodegenReader.js.map +1 -0
  44. package/dist/KtCodegenRenderer.d.ts +114 -0
  45. package/dist/KtCodegenRenderer.d.ts.map +1 -0
  46. package/dist/KtCodegenRenderer.js +1388 -0
  47. package/dist/KtCodegenRenderer.js.map +1 -0
  48. package/dist/KtCodegenTableColumns.d.ts +103 -0
  49. package/dist/KtCodegenTableColumns.d.ts.map +1 -0
  50. package/dist/KtCodegenTableColumns.js +35 -0
  51. package/dist/KtCodegenTableColumns.js.map +1 -0
  52. package/dist/KtCodegenTableCore.d.ts +61 -0
  53. package/dist/KtCodegenTableCore.d.ts.map +1 -0
  54. package/dist/KtCodegenTableCore.js +240 -0
  55. package/dist/KtCodegenTableCore.js.map +1 -0
  56. package/dist/KtCodegenTableData.d.ts +22 -0
  57. package/dist/KtCodegenTableData.d.ts.map +1 -0
  58. package/dist/KtCodegenTableData.js +17 -0
  59. package/dist/KtCodegenTableData.js.map +1 -0
  60. package/dist/api/analyze.d.ts +8 -0
  61. package/dist/api/analyze.d.ts.map +1 -0
  62. package/dist/api/analyze.js +102 -0
  63. package/dist/api/analyze.js.map +1 -0
  64. package/dist/api/contracts.d.ts +93 -0
  65. package/dist/api/contracts.d.ts.map +1 -0
  66. package/dist/api/contracts.js +3 -0
  67. package/dist/api/contracts.js.map +1 -0
  68. package/dist/api/index.d.ts +3 -0
  69. package/dist/api/index.d.ts.map +1 -0
  70. package/dist/api/index.js +4 -0
  71. package/dist/api/index.js.map +1 -0
  72. package/dist/blocks/index.d.ts +2 -0
  73. package/dist/blocks/index.d.ts.map +1 -0
  74. package/dist/blocks/index.js +3 -0
  75. package/dist/blocks/index.js.map +1 -0
  76. package/dist/blocks/legacy-blocks.d.ts +309 -0
  77. package/dist/blocks/legacy-blocks.d.ts.map +1 -0
  78. package/dist/blocks/legacy-blocks.js +343 -0
  79. package/dist/blocks/legacy-blocks.js.map +1 -0
  80. package/dist/index.d.ts +19 -0
  81. package/dist/index.d.ts.map +1 -0
  82. package/dist/index.js +20 -0
  83. package/dist/index.js.map +1 -0
  84. package/dist/legacy/csv.d.ts +25 -0
  85. package/dist/legacy/csv.d.ts.map +1 -0
  86. package/dist/legacy/csv.js +197 -0
  87. package/dist/legacy/csv.js.map +1 -0
  88. package/dist/legacy/index.d.ts +4 -0
  89. package/dist/legacy/index.d.ts.map +1 -0
  90. package/dist/legacy/index.js +5 -0
  91. package/dist/legacy/index.js.map +1 -0
  92. package/dist/legacy/v4-json.d.ts +12 -0
  93. package/dist/legacy/v4-json.d.ts.map +1 -0
  94. package/dist/legacy/v4-json.js +363 -0
  95. package/dist/legacy/v4-json.js.map +1 -0
  96. package/dist/legacy/v4-schema.d.ts +30 -0
  97. package/dist/legacy/v4-schema.d.ts.map +1 -0
  98. package/dist/legacy/v4-schema.js +63 -0
  99. package/dist/legacy/v4-schema.js.map +1 -0
  100. package/dist/model/diagnostic.d.ts +38 -0
  101. package/dist/model/diagnostic.d.ts.map +1 -0
  102. package/dist/model/diagnostic.js +6 -0
  103. package/dist/model/diagnostic.js.map +1 -0
  104. package/dist/model/equal.d.ts +10 -0
  105. package/dist/model/equal.d.ts.map +1 -0
  106. package/dist/model/equal.js +64 -0
  107. package/dist/model/equal.js.map +1 -0
  108. package/dist/model/index.d.ts +5 -0
  109. package/dist/model/index.d.ts.map +1 -0
  110. package/dist/model/index.js +6 -0
  111. package/dist/model/index.js.map +1 -0
  112. package/dist/model/target.d.ts +58 -0
  113. package/dist/model/target.d.ts.map +1 -0
  114. package/dist/model/target.js +32 -0
  115. package/dist/model/target.js.map +1 -0
  116. package/dist/model/validate.d.ts +9 -0
  117. package/dist/model/validate.d.ts.map +1 -0
  118. package/dist/model/validate.js +52 -0
  119. package/dist/model/validate.js.map +1 -0
  120. package/dist/table/KtCodegenTable.d.ts +75 -0
  121. package/dist/table/KtCodegenTable.d.ts.map +1 -0
  122. package/dist/table/KtCodegenTable.js +541 -0
  123. package/dist/table/KtCodegenTable.js.map +1 -0
  124. package/dist/table/index.d.ts +4 -0
  125. package/dist/table/index.d.ts.map +1 -0
  126. package/dist/table/index.js +5 -0
  127. package/dist/table/index.js.map +1 -0
  128. package/doc/CAA/344/270/216Qt/345/257/271/350/257/235/346/241/206/345/217/214/345/220/221/346/233/264/346/226/260/345/235/227/350/277/201/347/247/273.md +74 -0
  129. package/doc/CAA/345/257/271/350/257/235/346/241/206/351/200/232/347/237/245/345/235/227/350/277/201/347/247/273.md +45 -0
  130. package/doc/CAA/346/216/245/345/217/243/345/244/264/346/226/207/344/273/266/345/235/227/350/277/201/347/247/273.md +75 -0
  131. package/doc/CAA/347/211/271/345/276/201/350/257/273/345/206/231/345/235/227/350/277/201/347/247/273.md +77 -0
  132. package/doc/CAA/347/233/256/345/275/225/344/270/216/346/240/221/345/267/245/345/216/202/345/235/227/350/277/201/347/247/273.md +78 -0
  133. package/doc/CommandAgent/347/224/237/345/221/275/345/221/250/346/234/237/345/235/227/350/277/201/347/247/273.md +47 -0
  134. package/doc/Command/345/212/250/344/275/234/344/270/216/346/264/273/345/212/250/345/255/227/346/256/265/345/235/227/350/277/201/347/247/273.md +46 -0
  135. package/doc/Command/345/233/276/344/270/216/347/212/266/346/200/201/345/235/227/350/277/201/347/247/273.md +64 -0
  136. package/doc/Dialog/345/255/227/346/256/265/344/270/216/345/272/237/345/274/203/345/205/274/345/256/271/345/235/227/350/277/201/347/247/273.md +60 -0
  137. package/doc/KtCodegen/345/221/275/345/220/215/350/277/201/347/247/273/350/257/264/346/230/216.md +55 -0
  138. package/doc//344/270/244/345/260/217/346/227/266/350/277/201/347/247/273/350/256/241/345/210/222/344/270/216/351/252/214/346/224/266.md +52 -0
  139. package/doc//346/231/256/351/200/232C++/345/217/202/346/225/260/345/235/227/350/277/201/347/247/273.md +72 -0
  140. package/doc//346/235/245/346/272/220/344/270/216/350/256/270/345/217/257/345/275/222/346/241/243.md +29 -0
  141. package/doc//347/224/237/346/210/220/345/235/227/350/277/201/347/247/273/347/237/251/351/230/265.md +75 -0
  142. package/doc//350/207/252/345/212/250/344/273/243/347/240/201/346/240/207/350/256/260/346/211/253/346/217/217.md +84 -0
  143. package/package.json +62 -0
  144. package/src/index.ts +20 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"KtCodegenAdapter.js","sourceRoot":"","sources":["../src/KtCodegenAdapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,93 @@
1
+ import type { KtCodegenBlockKey } from "./blocks/legacy-blocks.js";
2
+ import type { KtCodegenDiagnostic } from "./model/diagnostic.js";
3
+ import type { KtCodegenPlan, KtCodegenTargetStatus } from "./api/contracts.js";
4
+ export interface KtCodegenApplySource {
5
+ readonly path: string;
6
+ readonly text: string;
7
+ readonly fingerprint: string;
8
+ }
9
+ export interface KtCodegenApplyChange {
10
+ readonly path: string;
11
+ readonly before: string;
12
+ readonly after: string;
13
+ readonly regionCount: number;
14
+ readonly regions: readonly KtCodegenApplyRegionChange[];
15
+ }
16
+ /** 单个 Artifact 在 Apply 投影中绑定的区域元数据,供宿主逐区域审计。 */
17
+ export interface KtCodegenApplyRegionChange {
18
+ readonly id: string;
19
+ readonly artifactId: string;
20
+ readonly blockKey: KtCodegenBlockKey;
21
+ readonly classId: string;
22
+ readonly nameSuffix: string;
23
+ /** 从0开始的 Start Marker 行号。 */
24
+ readonly line: number;
25
+ }
26
+ export interface KtCodegenApplyProjection {
27
+ readonly changes: readonly KtCodegenApplyChange[];
28
+ readonly diagnostics: readonly KtCodegenDiagnostic[];
29
+ }
30
+ export interface KtCodegenApplyBlockSummary {
31
+ readonly blockKey: KtCodegenBlockKey;
32
+ readonly regionCount: number;
33
+ readonly artifactCount: number;
34
+ readonly paths: readonly string[];
35
+ }
36
+ export interface KtCodegenApplyTargetSummary {
37
+ readonly target: string;
38
+ readonly status: KtCodegenTargetStatus;
39
+ readonly artifactCount: number;
40
+ }
41
+ export interface KtCodegenApplyPlanSummary {
42
+ readonly canApply: boolean;
43
+ readonly regionCount: number;
44
+ readonly artifactCount: number;
45
+ readonly diagnosticCount: number;
46
+ readonly targets: readonly KtCodegenApplyTargetSummary[];
47
+ readonly blocks: readonly KtCodegenApplyBlockSummary[];
48
+ readonly missingBlockKeys: readonly KtCodegenBlockKey[];
49
+ readonly blocksWithoutArtifacts: readonly KtCodegenBlockKey[];
50
+ }
51
+ export interface KtCodegenApplyWrite<TTarget> {
52
+ readonly target: TTarget;
53
+ readonly before: Uint8Array;
54
+ readonly after: Uint8Array;
55
+ }
56
+ export interface KtCodegenApplyWritePort<TTarget> {
57
+ readFile(target: TTarget): PromiseLike<Uint8Array>;
58
+ writeFile(target: TTarget, content: Uint8Array): PromiseLike<void>;
59
+ }
60
+ export declare class KtCodegenApplyConcurrentChangeError<TTarget = unknown> extends Error {
61
+ readonly target: TTarget;
62
+ readonly name = "KtCodegenApplyConcurrentChangeError";
63
+ constructor(target: TTarget);
64
+ }
65
+ export type KtCodegenApplyCommitResult<TTarget> = {
66
+ readonly ok: true;
67
+ } | {
68
+ readonly ok: false;
69
+ readonly error: unknown;
70
+ readonly rollbackFailures: readonly TTarget[];
71
+ };
72
+ /**
73
+ * 汇总计划中的 Target、控制符区域和 Artifact 绑定关系。
74
+ *
75
+ * 返回结构化数据而不生成宿主日志,Desk Tools、VS Code 和测试可各自决定
76
+ * 如何呈现“控制符未命中”或“区域没有产物”等信息。
77
+ */
78
+ export declare function ktCodegenInspectApplyPlan(plan: KtCodegenPlan): KtCodegenApplyPlanSummary;
79
+ /** 生成器统一产出 LF;Apply 投影按目标源码换行写回。 */
80
+ export declare function ktCodegenNormalizeGeneratedEol(text: string, eol: "lf" | "crlf"): string;
81
+ /**
82
+ * 纯 Apply 投影:一次性验证计划、指纹和区域重叠后,产生整文件新文本。
83
+ * 本函数不访问文件系统,也不修改传入的计划或源码快照。
84
+ */
85
+ export declare function ktCodegenProjectApply(plan: KtCodegenPlan, sources: readonly KtCodegenApplySource[]): KtCodegenApplyProjection;
86
+ /**
87
+ * 多文件 Apply 的宿主无关事务边界。
88
+ *
89
+ * 每个目标写入前复读并与 before 比较;失败时逆序恢复已尝试目标。回滚只
90
+ * 覆盖仍等于本次 after 的文件,避免误删 Apply 期间出现的第三方修改。
91
+ */
92
+ export declare function ktCodegenCommitApplyWrites<TTarget>(port: KtCodegenApplyWritePort<TTarget>, writes: readonly KtCodegenApplyWrite<TTarget>[]): Promise<KtCodegenApplyCommitResult<TTarget>>;
93
+ //# sourceMappingURL=KtCodegenApply.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"KtCodegenApply.d.ts","sourceRoot":"","sources":["../src/KtCodegenApply.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,194 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ export class KtCodegenApplyConcurrentChangeError extends Error {
3
+ target;
4
+ name = "KtCodegenApplyConcurrentChangeError";
5
+ constructor(target) {
6
+ super("源码在 Apply 最终写入前再次变化");
7
+ this.target = target;
8
+ }
9
+ }
10
+ function ktCodegenApplyDiagnostic(code, message, file, row) {
11
+ return {
12
+ code,
13
+ severity: "error",
14
+ message,
15
+ ...(file ? { path: { source: "source", file, row: row ?? 0, column: 0 } } : {}),
16
+ };
17
+ }
18
+ /**
19
+ * 汇总计划中的 Target、控制符区域和 Artifact 绑定关系。
20
+ *
21
+ * 返回结构化数据而不生成宿主日志,Desk Tools、VS Code 和测试可各自决定
22
+ * 如何呈现“控制符未命中”或“区域没有产物”等信息。
23
+ */
24
+ export function ktCodegenInspectApplyPlan(plan) {
25
+ const artifactsByRegion = new Map();
26
+ for (const artifact of plan.artifacts) {
27
+ artifactsByRegion.set(artifact.regionId, (artifactsByRegion.get(artifact.regionId) ?? 0) + 1);
28
+ }
29
+ const blocks = plan.blockKeys.map((blockKey) => {
30
+ const regions = plan.markerRegions.filter((region) => region.blockKey === blockKey);
31
+ return {
32
+ blockKey,
33
+ regionCount: regions.length,
34
+ artifactCount: regions.reduce((total, region) => total + (artifactsByRegion.get(region.id) ?? 0), 0),
35
+ paths: [...new Set(regions.map((region) => region.path))].sort(),
36
+ };
37
+ });
38
+ return {
39
+ canApply: plan.canApply,
40
+ regionCount: plan.markerRegions.length,
41
+ artifactCount: plan.artifacts.length,
42
+ diagnosticCount: plan.diagnostics.length,
43
+ targets: plan.targets.map((target) => ({
44
+ target: target.target,
45
+ status: target.status,
46
+ artifactCount: target.artifactCount,
47
+ })),
48
+ blocks,
49
+ missingBlockKeys: blocks.filter((block) => block.regionCount === 0).map((block) => block.blockKey),
50
+ blocksWithoutArtifacts: blocks
51
+ .filter((block) => block.regionCount > 0 && block.artifactCount === 0)
52
+ .map((block) => block.blockKey),
53
+ };
54
+ }
55
+ /** 生成器统一产出 LF;Apply 投影按目标源码换行写回。 */
56
+ export function ktCodegenNormalizeGeneratedEol(text, eol) {
57
+ return text.replace(/\r\n|\r|\n/g, eol === "crlf" ? "\r\n" : "\n");
58
+ }
59
+ /**
60
+ * 纯 Apply 投影:一次性验证计划、指纹和区域重叠后,产生整文件新文本。
61
+ * 本函数不访问文件系统,也不修改传入的计划或源码快照。
62
+ */
63
+ export function ktCodegenProjectApply(plan, sources) {
64
+ if (!plan.canApply) {
65
+ return {
66
+ changes: [],
67
+ diagnostics: [ktCodegenApplyDiagnostic("apply.plan-not-applicable", "当前预检计划包含错误或没有可应用的生成产物。")],
68
+ };
69
+ }
70
+ const diagnostics = [];
71
+ const sourceByPath = new Map(sources.map((source) => [source.path, source]));
72
+ const regionById = new Map(plan.markerRegions.map((region) => [region.id, region]));
73
+ const replacementsByPath = new Map();
74
+ const usedRegions = new Set();
75
+ for (const artifact of plan.artifacts) {
76
+ const region = regionById.get(artifact.regionId);
77
+ if (!region) {
78
+ diagnostics.push(ktCodegenApplyDiagnostic("apply.region-not-found", `生成产物 ${artifact.id} 对应的控制符区域已不存在。`));
79
+ continue;
80
+ }
81
+ if (usedRegions.has(region.id)) {
82
+ diagnostics.push(ktCodegenApplyDiagnostic("apply.duplicate-region", `控制符区域 ${region.blockKey} 收到多个生成产物,已阻止写入。`, region.path, region.start.line));
83
+ continue;
84
+ }
85
+ usedRegions.add(region.id);
86
+ const replacements = replacementsByPath.get(region.path) ?? [];
87
+ replacements.push({
88
+ start: region.replaceStartOffset,
89
+ end: region.replaceEndOffset,
90
+ content: artifact.content,
91
+ line: region.start.line,
92
+ fingerprint: region.sourceFingerprint,
93
+ region: {
94
+ id: region.id,
95
+ artifactId: artifact.id,
96
+ blockKey: region.blockKey,
97
+ classId: region.classId,
98
+ nameSuffix: region.nameSuffix,
99
+ line: region.start.line,
100
+ },
101
+ });
102
+ replacementsByPath.set(region.path, replacements);
103
+ }
104
+ const changes = [];
105
+ for (const [path, replacements] of replacementsByPath) {
106
+ const source = sourceByPath.get(path);
107
+ if (!source) {
108
+ diagnostics.push(ktCodegenApplyDiagnostic("apply.source-missing", "Apply 前无法重新读取源码文件。", path));
109
+ continue;
110
+ }
111
+ const expectedFingerprints = new Set(replacements.map((item) => item.fingerprint));
112
+ if (expectedFingerprints.size !== 1 || !expectedFingerprints.has(source.fingerprint)) {
113
+ diagnostics.push(ktCodegenApplyDiagnostic("apply.source-changed", "源码在预检后发生变化,请重新预检后再 Apply。", path, replacements[0]?.line));
114
+ continue;
115
+ }
116
+ const ordered = [...replacements].sort((left, right) => right.start - left.start);
117
+ let previousStart = source.text.length;
118
+ let output = source.text;
119
+ let valid = true;
120
+ const sourceEol = source.text.includes("\r\n") ? "crlf" : "lf";
121
+ for (const replacement of ordered) {
122
+ if (replacement.start < 0
123
+ || replacement.end < replacement.start
124
+ || replacement.end > source.text.length
125
+ || replacement.end > previousStart) {
126
+ diagnostics.push(ktCodegenApplyDiagnostic("apply.invalid-range", "预检区域偏移无效或互相重叠,请清理缓存后重新预检。", path, replacement.line));
127
+ valid = false;
128
+ break;
129
+ }
130
+ const content = ktCodegenNormalizeGeneratedEol(replacement.content, sourceEol);
131
+ output = output.slice(0, replacement.start) + content + output.slice(replacement.end);
132
+ previousStart = replacement.start;
133
+ }
134
+ if (valid && output !== source.text) {
135
+ changes.push({
136
+ path,
137
+ before: source.text,
138
+ after: output,
139
+ regionCount: replacements.length,
140
+ regions: [...replacements]
141
+ .sort((left, right) => left.start - right.start)
142
+ .map((replacement) => replacement.region),
143
+ });
144
+ }
145
+ }
146
+ return { changes: diagnostics.length ? [] : changes, diagnostics };
147
+ }
148
+ /**
149
+ * 多文件 Apply 的宿主无关事务边界。
150
+ *
151
+ * 每个目标写入前复读并与 before 比较;失败时逆序恢复已尝试目标。回滚只
152
+ * 覆盖仍等于本次 after 的文件,避免误删 Apply 期间出现的第三方修改。
153
+ */
154
+ export async function ktCodegenCommitApplyWrites(port, writes) {
155
+ const attempted = [];
156
+ try {
157
+ for (const write of writes) {
158
+ const current = await port.readFile(write.target);
159
+ if (!ktCodegenBytesEqual(current, write.before)) {
160
+ throw new KtCodegenApplyConcurrentChangeError(write.target);
161
+ }
162
+ attempted.push(write);
163
+ await port.writeFile(write.target, write.after);
164
+ }
165
+ return { ok: true };
166
+ }
167
+ catch (error) {
168
+ const rollbackFailures = [];
169
+ for (const write of [...attempted].reverse()) {
170
+ try {
171
+ const current = await port.readFile(write.target);
172
+ if (!ktCodegenBytesEqual(current, write.after)) {
173
+ rollbackFailures.push(write.target);
174
+ continue;
175
+ }
176
+ await port.writeFile(write.target, write.before);
177
+ }
178
+ catch {
179
+ rollbackFailures.push(write.target);
180
+ }
181
+ }
182
+ return { ok: false, error, rollbackFailures };
183
+ }
184
+ }
185
+ function ktCodegenBytesEqual(left, right) {
186
+ if (left.byteLength !== right.byteLength)
187
+ return false;
188
+ for (let index = 0; index < left.byteLength; index += 1) {
189
+ if (left[index] !== right[index])
190
+ return false;
191
+ }
192
+ return true;
193
+ }
194
+ //# sourceMappingURL=KtCodegenApply.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"KtCodegenApply.js","sourceRoot":"","sources":["../src/KtCodegenApply.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import { type KtCodegenBlockKey } from "./blocks/legacy-blocks.js";
2
+ export interface KtCodegenBlockPresentation {
3
+ readonly key: KtCodegenBlockKey;
4
+ readonly legacyId: number;
5
+ readonly title: string;
6
+ readonly controlWords: string;
7
+ readonly notes: string;
8
+ }
9
+ /** 跨 VS Code/Desk Tools 复用的控制符表格展示数据。 */
10
+ export declare const KT_CODEGEN_BLOCK_PRESENTATIONS: readonly KtCodegenBlockPresentation[];
11
+ export type KtCodegenBlockPreset = "all" | "none" | "cpp-only" | "field-code";
12
+ /** 复现旧 VB 的全选、全不选、C++ only 与 Field Code 选择规则。 */
13
+ export declare function ktCodegenBlockKeysForPreset(preset: KtCodegenBlockPreset): KtCodegenBlockKey[];
14
+ //# sourceMappingURL=KtCodegenBlockPresentation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"KtCodegenBlockPresentation.d.ts","sourceRoot":"","sources":["../src/KtCodegenBlockPresentation.ts"],"names":[],"mappings":"AAEA,OAAO,EAEL,KAAK,iBAAiB,EACvB,MAAM,2BAA2B,CAAC;AAsCnC,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,GAAG,EAAE,iBAAiB,CAAC;IAChC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AAED,yCAAyC;AACzC,eAAO,MAAM,8BAA8B,EAAE,SAAS,0BAA0B,EAO3E,CAAC;AAEN,MAAM,MAAM,oBAAoB,GAAG,KAAK,GAAG,MAAM,GAAG,UAAU,GAAG,YAAY,CAAC;AAE9E,iDAAiD;AACjD,wBAAgB,2BAA2B,CACzC,MAAM,EAAE,oBAAoB,GAC3B,iBAAiB,EAAE,CAOrB"}
@@ -0,0 +1,56 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ import { KT_CODEGEN_LEGACY_BLOCKS, } from "./blocks/legacy-blocks.js";
3
+ /** 旧 VB `KevinControlTitle` 的32个用户可读标题,顺序与 legacyId 一致。 */
4
+ const KT_CODEGEN_LEGACY_BLOCK_TITLES = [
5
+ "CATALOG Param define",
6
+ "Param on Tree",
7
+ "Implement CPP Get",
8
+ "Implement CPP Set",
9
+ "Implement HEAD Get",
10
+ "Implement HEAD Set",
11
+ "Implement PARAM Get",
12
+ "Implement PARAM Set",
13
+ "Interface HEAD Get",
14
+ "Interface HEAD Set",
15
+ "PARAM Initial",
16
+ "PARAM define",
17
+ "PARAM destructor",
18
+ "PARAM equal",
19
+ "Dialog Change Notify",
20
+ "Update CAA Dialog",
21
+ "Update CAA param",
22
+ "Update QT Dialog",
23
+ "Update QT param",
24
+ "Dlg Define Field Type",
25
+ "Dlg Set Active Field",
26
+ "Dlg Get Selector List",
27
+ "Cmd Agent Declare",
28
+ "Cmd Agent Constructor",
29
+ "Cmd Agent Destructor",
30
+ "Cmd Agent Build Graph",
31
+ "Cmd Agent Update State",
32
+ "Cmd Agent fia Clear",
33
+ "Cmd Action Pda",
34
+ "Cmd Action Fia",
35
+ "Cmd Element Selected",
36
+ "Cmd Set Active Field",
37
+ ];
38
+ /** 跨 VS Code/Desk Tools 复用的控制符表格展示数据。 */
39
+ export const KT_CODEGEN_BLOCK_PRESENTATIONS = KT_CODEGEN_LEGACY_BLOCKS.map((block) => ({
40
+ key: block.key,
41
+ legacyId: block.legacyId,
42
+ title: KT_CODEGEN_LEGACY_BLOCK_TITLES[block.legacyId] ?? block.key,
43
+ controlWords: block.key,
44
+ notes: block.legacyCall,
45
+ }));
46
+ /** 复现旧 VB 的全选、全不选、C++ only 与 Field Code 选择规则。 */
47
+ export function ktCodegenBlockKeysForPreset(preset) {
48
+ if (preset === "none")
49
+ return [];
50
+ return KT_CODEGEN_LEGACY_BLOCKS
51
+ .filter((block) => preset === "all"
52
+ || (preset === "cpp-only" && block.legacyId >= 10 && block.legacyId <= 13)
53
+ || (preset === "field-code" && block.legacyId >= 19 && block.legacyId <= 31))
54
+ .map((block) => block.key);
55
+ }
56
+ //# sourceMappingURL=KtCodegenBlockPresentation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"KtCodegenBlockPresentation.js","sourceRoot":"","sources":["../src/KtCodegenBlockPresentation.ts"],"names":[],"mappings":"AAAA,sCAAsC;AAEtC,OAAO,EACL,wBAAwB,GAEzB,MAAM,2BAA2B,CAAC;AAEnC,2DAA2D;AAC3D,MAAM,8BAA8B,GAAG;IACrC,sBAAsB;IACtB,eAAe;IACf,mBAAmB;IACnB,mBAAmB;IACnB,oBAAoB;IACpB,oBAAoB;IACpB,qBAAqB;IACrB,qBAAqB;IACrB,oBAAoB;IACpB,oBAAoB;IACpB,eAAe;IACf,cAAc;IACd,kBAAkB;IAClB,aAAa;IACb,sBAAsB;IACtB,mBAAmB;IACnB,kBAAkB;IAClB,kBAAkB;IAClB,iBAAiB;IACjB,uBAAuB;IACvB,sBAAsB;IACtB,uBAAuB;IACvB,mBAAmB;IACnB,uBAAuB;IACvB,sBAAsB;IACtB,uBAAuB;IACvB,wBAAwB;IACxB,qBAAqB;IACrB,gBAAgB;IAChB,gBAAgB;IAChB,sBAAsB;IACtB,sBAAsB;CACd,CAAC;AAUX,yCAAyC;AACzC,MAAM,CAAC,MAAM,8BAA8B,GACzC,wBAAwB,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACvC,GAAG,EAAE,KAAK,CAAC,GAAG;IACd,QAAQ,EAAE,KAAK,CAAC,QAAQ;IACxB,KAAK,EAAE,8BAA8B,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAC,GAAG;IAClE,YAAY,EAAE,KAAK,CAAC,GAAG;IACvB,KAAK,EAAE,KAAK,CAAC,UAAU;CACxB,CAAC,CAAC,CAAC;AAIN,iDAAiD;AACjD,MAAM,UAAU,2BAA2B,CACzC,MAA4B;IAE5B,IAAI,MAAM,KAAK,MAAM;QAAE,OAAO,EAAE,CAAC;IACjC,OAAO,wBAAwB;SAC5B,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,KAAK,KAAK;WAC9B,CAAC,MAAM,KAAK,UAAU,IAAI,KAAK,CAAC,QAAQ,IAAI,EAAE,IAAI,KAAK,CAAC,QAAQ,IAAI,EAAE,CAAC;WACvE,CAAC,MAAM,KAAK,YAAY,IAAI,KAAK,CAAC,QAAQ,IAAI,EAAE,IAAI,KAAK,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC;SAC9E,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AAC/B,CAAC"}
@@ -0,0 +1,68 @@
1
+ import type { KtCodegenDataResult } from "./model/diagnostic.js";
2
+ import type { KtCodegenLegacyCsvWriteOptions } from "./legacy/csv.js";
3
+ import type { KtCodegenAnalyzeRequest, KtCodegenPlan } from "./api/contracts.js";
4
+ import { KtCodegenAdapter } from "./KtCodegenAdapter.js";
5
+ import { KtCodegenCore } from "./KtCodegenCore.js";
6
+ import { KtCodegenParam } from "./KtCodegenParam.js";
7
+ import { KtCodegenReader } from "./KtCodegenReader.js";
8
+ /**
9
+ * 宿主编排层:维护共享 Param,并协调 Reader、Adapter 与 Core。
10
+ *
11
+ * `kt-auto-code` 或 `phoenix-desk-tools` 通常持有一个 Controller。界面、表格和
12
+ * 生成流程都通过 `param` 访问同一数据实例。Controller 不实现具体 CSV/JSON
13
+ * 语法,也不包含目标代码生成算法。
14
+ */
15
+ export declare class KtCodegenController {
16
+ /** 最近一次成功读取的旧 JSON 根字段顺序;CSV/原生数据不带布局模板。 */
17
+ private legacyJsonRootKeys;
18
+ /** MVC-C 各消费者共享的唯一参数数据实例。 */
19
+ readonly param: KtCodegenParam;
20
+ /** CSV/JSON 输入边界;先读取临时数据,不直接修改共享实例。 */
21
+ readonly reader: KtCodegenReader;
22
+ /** 旧格式写出和共享实例原地更新边界。 */
23
+ readonly adapter: KtCodegenAdapter;
24
+ /** 与 UI 和文件系统无关的 Analyze/生成核心。 */
25
+ readonly core: KtCodegenCore;
26
+ /**
27
+ * 创建 Controller,并允许宿主注入共享数据或自定义职责实现。
28
+ *
29
+ * 未注入的对象使用标准默认实现。`param` 属性本身只读,避免宿主意外替换
30
+ * 共享实例;其中的公开字段仍可按 MVC-C 约定直接修改。
31
+ */
32
+ constructor(options?: {
33
+ param?: KtCodegenParam;
34
+ reader?: KtCodegenReader;
35
+ adapter?: KtCodegenAdapter;
36
+ core?: KtCodegenCore;
37
+ });
38
+ /**
39
+ * 读取旧 v4 JSON;只有完整读取成功后才原地更新共享 `param`。
40
+ *
41
+ * 失败时保留此前所有共享数据,并通过结果返回诊断。
42
+ */
43
+ readJson(input: string | unknown): KtCodegenDataResult<KtCodegenParam>;
44
+ /**
45
+ * 读取旧17列 CSV;只有完整读取成功后才原地更新共享 `param`。
46
+ *
47
+ * 失败时保留此前所有共享数据,并通过结果返回诊断。
48
+ */
49
+ readCsv(text: string): KtCodegenDataResult<KtCodegenParam>;
50
+ /** 将当前共享数据写成旧 v4 JSON,不执行文件系统写入。 */
51
+ writeJson(space?: number): KtCodegenDataResult<string>;
52
+ /** 将当前共享数据写成旧17列 CSV,不执行文件系统写入。 */
53
+ writeCsv(options?: KtCodegenLegacyCsvWriteOptions): KtCodegenDataResult<string>;
54
+ /** 清空共享数据内容,但不替换 `param`、`items` 等共享容器引用。 */
55
+ clear(): void;
56
+ /**
57
+ * 使用当前共享数据分析指定目标,并返回不可直接写文件的生成计划。
58
+ *
59
+ * 当前会扫描调用者提供的源码快照;普通 C++、CAA 与 Qt 共三十二块
60
+ * 可以产生 artifact。Analyze 只返回计划,不直接写文件。
61
+ */
62
+ analyze(request: Omit<KtCodegenAnalyzeRequest, "param">): KtCodegenPlan;
63
+ /** 把成功读取的临时数据应用到共享实例;失败结果直接向调用者传递。 */
64
+ private applyReadResult;
65
+ /** 成功解析后的第二次轻量读取只提取布局,不参与数据语义。 */
66
+ private readRootKeys;
67
+ }
68
+ //# sourceMappingURL=KtCodegenController.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"KtCodegenController.d.ts","sourceRoot":"","sources":["../src/KtCodegenController.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AACjE,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,iBAAiB,CAAC;AACtE,OAAO,KAAK,EACV,uBAAuB,EACvB,aAAa,EACd,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEvD;;;;;;GAMG;AACH,qBAAa,mBAAmB;IAC9B,4CAA4C;IAC5C,OAAO,CAAC,kBAAkB,CAAgB;IAE1C,6BAA6B;IAC7B,SAAgB,KAAK,EAAE,cAAc,CAAC;IAEtC,uCAAuC;IACvC,SAAgB,MAAM,EAAE,eAAe,CAAC;IAExC,wBAAwB;IACxB,SAAgB,OAAO,EAAE,gBAAgB,CAAC;IAE1C,kCAAkC;IAClC,SAAgB,IAAI,EAAE,aAAa,CAAC;IAEpC;;;;;OAKG;gBACS,OAAO,GAAE;QACnB,KAAK,CAAC,EAAE,cAAc,CAAC;QACvB,MAAM,CAAC,EAAE,eAAe,CAAC;QACzB,OAAO,CAAC,EAAE,gBAAgB,CAAC;QAC3B,IAAI,CAAC,EAAE,aAAa,CAAC;KACjB;IAON;;;;OAIG;IACH,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,GAAG,mBAAmB,CAAC,cAAc,CAAC;IAMtE;;;;OAIG;IACH,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,mBAAmB,CAAC,cAAc,CAAC;IAM1D,oCAAoC;IACpC,SAAS,CAAC,KAAK,SAAI,GAAG,mBAAmB,CAAC,MAAM,CAAC;IAIjD,mCAAmC;IACnC,QAAQ,CAAC,OAAO,GAAE,8BAAmC,GAAG,mBAAmB,CAAC,MAAM,CAAC;IAInF,6CAA6C;IAC7C,KAAK,IAAI,IAAI;IAKb;;;;;OAKG;IACH,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,uBAAuB,EAAE,OAAO,CAAC,GAAG,aAAa;IAIvE,sCAAsC;IACtC,OAAO,CAAC,eAAe;IAQvB,kCAAkC;IAClC,OAAO,CAAC,YAAY;CAUrB"}
@@ -0,0 +1,100 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ import { KtCodegenAdapter } from "./KtCodegenAdapter.js";
3
+ import { KtCodegenCore } from "./KtCodegenCore.js";
4
+ import { KtCodegenParam } from "./KtCodegenParam.js";
5
+ import { KtCodegenReader } from "./KtCodegenReader.js";
6
+ /**
7
+ * 宿主编排层:维护共享 Param,并协调 Reader、Adapter 与 Core。
8
+ *
9
+ * `kt-auto-code` 或 `phoenix-desk-tools` 通常持有一个 Controller。界面、表格和
10
+ * 生成流程都通过 `param` 访问同一数据实例。Controller 不实现具体 CSV/JSON
11
+ * 语法,也不包含目标代码生成算法。
12
+ */
13
+ export class KtCodegenController {
14
+ /** 最近一次成功读取的旧 JSON 根字段顺序;CSV/原生数据不带布局模板。 */
15
+ legacyJsonRootKeys = [];
16
+ /** MVC-C 各消费者共享的唯一参数数据实例。 */
17
+ param;
18
+ /** CSV/JSON 输入边界;先读取临时数据,不直接修改共享实例。 */
19
+ reader;
20
+ /** 旧格式写出和共享实例原地更新边界。 */
21
+ adapter;
22
+ /** 与 UI 和文件系统无关的 Analyze/生成核心。 */
23
+ core;
24
+ /**
25
+ * 创建 Controller,并允许宿主注入共享数据或自定义职责实现。
26
+ *
27
+ * 未注入的对象使用标准默认实现。`param` 属性本身只读,避免宿主意外替换
28
+ * 共享实例;其中的公开字段仍可按 MVC-C 约定直接修改。
29
+ */
30
+ constructor(options = {}) {
31
+ this.param = options.param ?? new KtCodegenParam();
32
+ this.reader = options.reader ?? new KtCodegenReader();
33
+ this.adapter = options.adapter ?? new KtCodegenAdapter();
34
+ this.core = options.core ?? new KtCodegenCore();
35
+ }
36
+ /**
37
+ * 读取旧 v4 JSON;只有完整读取成功后才原地更新共享 `param`。
38
+ *
39
+ * 失败时保留此前所有共享数据,并通过结果返回诊断。
40
+ */
41
+ readJson(input) {
42
+ const result = this.applyReadResult(this.reader.readJson(input));
43
+ if (result.ok && result.value)
44
+ this.legacyJsonRootKeys = this.readRootKeys(input);
45
+ return result;
46
+ }
47
+ /**
48
+ * 读取旧17列 CSV;只有完整读取成功后才原地更新共享 `param`。
49
+ *
50
+ * 失败时保留此前所有共享数据,并通过结果返回诊断。
51
+ */
52
+ readCsv(text) {
53
+ const result = this.applyReadResult(this.reader.readCsv(text));
54
+ if (result.ok && result.value)
55
+ this.legacyJsonRootKeys = [];
56
+ return result;
57
+ }
58
+ /** 将当前共享数据写成旧 v4 JSON,不执行文件系统写入。 */
59
+ writeJson(space = 4) {
60
+ return this.adapter.writeJson(this.param, space, this.legacyJsonRootKeys);
61
+ }
62
+ /** 将当前共享数据写成旧17列 CSV,不执行文件系统写入。 */
63
+ writeCsv(options = {}) {
64
+ return this.adapter.writeCsv(this.param, options);
65
+ }
66
+ /** 清空共享数据内容,但不替换 `param`、`items` 等共享容器引用。 */
67
+ clear() {
68
+ this.adapter.clear(this.param);
69
+ this.legacyJsonRootKeys = [];
70
+ }
71
+ /**
72
+ * 使用当前共享数据分析指定目标,并返回不可直接写文件的生成计划。
73
+ *
74
+ * 当前会扫描调用者提供的源码快照;普通 C++、CAA 与 Qt 共三十二块
75
+ * 可以产生 artifact。Analyze 只返回计划,不直接写文件。
76
+ */
77
+ analyze(request) {
78
+ return this.core.analyze(this.param, request);
79
+ }
80
+ /** 把成功读取的临时数据应用到共享实例;失败结果直接向调用者传递。 */
81
+ applyReadResult(result) {
82
+ if (!result.ok || !result.value)
83
+ return result;
84
+ this.adapter.replace(this.param, result.value);
85
+ return { ...result, value: this.param };
86
+ }
87
+ /** 成功解析后的第二次轻量读取只提取布局,不参与数据语义。 */
88
+ readRootKeys(input) {
89
+ try {
90
+ const value = typeof input === "string" ? JSON.parse(input) : input;
91
+ return typeof value === "object" && value !== null && !Array.isArray(value)
92
+ ? Object.keys(value)
93
+ : [];
94
+ }
95
+ catch {
96
+ return [];
97
+ }
98
+ }
99
+ }
100
+ //# sourceMappingURL=KtCodegenController.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"KtCodegenController.js","sourceRoot":"","sources":["../src/KtCodegenController.ts"],"names":[],"mappings":"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"}