@trojanbox-vcp-test/site-edit-engine 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.
Files changed (174) hide show
  1. package/README.md +85 -0
  2. package/dist/execute-integration/execute-fixture-harness.d.ts +25 -0
  3. package/dist/execute-integration/execute-fixture-harness.js +37 -0
  4. package/dist/index.d.ts +3 -0
  5. package/dist/index.js +2 -0
  6. package/dist/internal/ast/diagnostics/index.d.ts +5 -0
  7. package/dist/internal/ast/diagnostics/index.js +25 -0
  8. package/dist/internal/ast/history/index.d.ts +15 -0
  9. package/dist/internal/ast/history/index.js +62 -0
  10. package/dist/internal/ast/index.d.ts +8 -0
  11. package/dist/internal/ast/index.js +5 -0
  12. package/dist/internal/ast/locators/index.d.ts +1 -0
  13. package/dist/internal/ast/locators/index.js +1 -0
  14. package/dist/internal/ast/locators/resolve-locator.d.ts +16 -0
  15. package/dist/internal/ast/locators/resolve-locator.js +920 -0
  16. package/dist/internal/ast/parser/SourceParser.d.ts +30 -0
  17. package/dist/internal/ast/parser/SourceParser.js +49 -0
  18. package/dist/internal/ast/parser/index.d.ts +21 -0
  19. package/dist/internal/ast/parser/index.js +64 -0
  20. package/dist/internal/ast/primitives/conditional/conditional-primitives.d.ts +18 -0
  21. package/dist/internal/ast/primitives/conditional/conditional-primitives.js +237 -0
  22. package/dist/internal/ast/primitives/conditional/index.d.ts +1 -0
  23. package/dist/internal/ast/primitives/conditional/index.js +1 -0
  24. package/dist/internal/ast/primitives/imports/add-import.d.ts +18 -0
  25. package/dist/internal/ast/primitives/imports/add-import.js +111 -0
  26. package/dist/internal/ast/primitives/imports/index.d.ts +2 -0
  27. package/dist/internal/ast/primitives/imports/index.js +2 -0
  28. package/dist/internal/ast/primitives/imports/remove-import.d.ts +15 -0
  29. package/dist/internal/ast/primitives/imports/remove-import.js +72 -0
  30. package/dist/internal/ast/primitives/index.d.ts +10 -0
  31. package/dist/internal/ast/primitives/index.js +10 -0
  32. package/dist/internal/ast/primitives/jsx/index.d.ts +4 -0
  33. package/dist/internal/ast/primitives/jsx/index.js +4 -0
  34. package/dist/internal/ast/primitives/jsx/insert-child.d.ts +11 -0
  35. package/dist/internal/ast/primitives/jsx/insert-child.js +69 -0
  36. package/dist/internal/ast/primitives/jsx/move-node.d.ts +9 -0
  37. package/dist/internal/ast/primitives/jsx/move-node.js +76 -0
  38. package/dist/internal/ast/primitives/jsx/remove-node.d.ts +7 -0
  39. package/dist/internal/ast/primitives/jsx/remove-node.js +36 -0
  40. package/dist/internal/ast/primitives/jsx/update-text.d.ts +8 -0
  41. package/dist/internal/ast/primitives/jsx/update-text.js +81 -0
  42. package/dist/internal/ast/primitives/next/index.d.ts +1 -0
  43. package/dist/internal/ast/primitives/next/index.js +1 -0
  44. package/dist/internal/ast/primitives/next/next-primitives.d.ts +43 -0
  45. package/dist/internal/ast/primitives/next/next-primitives.js +211 -0
  46. package/dist/internal/ast/primitives/shared.d.ts +60 -0
  47. package/dist/internal/ast/primitives/shared.js +176 -0
  48. package/dist/internal/ast/primitives/style/class-expression.d.ts +23 -0
  49. package/dist/internal/ast/primitives/style/class-expression.js +174 -0
  50. package/dist/internal/ast/primitives/style/index.d.ts +1 -0
  51. package/dist/internal/ast/primitives/style/index.js +1 -0
  52. package/dist/internal/ast/primitives/style/style-primitives.d.ts +49 -0
  53. package/dist/internal/ast/primitives/style/style-primitives.js +555 -0
  54. package/dist/internal/ast/primitives/values/index.d.ts +1 -0
  55. package/dist/internal/ast/primitives/values/index.js +1 -0
  56. package/dist/internal/ast/primitives/values/value-primitives.d.ts +42 -0
  57. package/dist/internal/ast/primitives/values/value-primitives.js +158 -0
  58. package/dist/internal/ast/printer/SourcePrinter.d.ts +21 -0
  59. package/dist/internal/ast/printer/SourcePrinter.js +76 -0
  60. package/dist/internal/ast/printer/index.d.ts +6 -0
  61. package/dist/internal/ast/printer/index.js +126 -0
  62. package/dist/internal/ast/types.d.ts +190 -0
  63. package/dist/internal/ast/types.js +1 -0
  64. package/dist/internal/capability/capability-resolver.d.ts +16 -0
  65. package/dist/internal/capability/capability-resolver.js +127 -0
  66. package/dist/internal/classname-source.d.ts +24 -0
  67. package/dist/internal/classname-source.js +220 -0
  68. package/dist/internal/contracts/IEditEngineRuntime.d.ts +18 -0
  69. package/dist/internal/contracts/IEditEngineRuntime.js +1 -0
  70. package/dist/internal/domain/EditDiagnostic.d.ts +38 -0
  71. package/dist/internal/domain/EditDiagnostic.js +43 -0
  72. package/dist/internal/events/event-bus.d.ts +14 -0
  73. package/dist/internal/events/event-bus.js +21 -0
  74. package/dist/internal/graph/graph-builder.d.ts +12 -0
  75. package/dist/internal/graph/graph-builder.js +1371 -0
  76. package/dist/internal/graph/import-resolver.d.ts +31 -0
  77. package/dist/internal/graph/import-resolver.js +109 -0
  78. package/dist/internal/graph/project-graph-builder.d.ts +32 -0
  79. package/dist/internal/graph/project-graph-builder.js +133 -0
  80. package/dist/internal/graph/types.d.ts +114 -0
  81. package/dist/internal/graph/types.js +6 -0
  82. package/dist/internal/history/undo-redo.d.ts +28 -0
  83. package/dist/internal/history/undo-redo.js +42 -0
  84. package/dist/internal/index.d.ts +2 -0
  85. package/dist/internal/index.js +1 -0
  86. package/dist/internal/planner/planner.d.ts +104 -0
  87. package/dist/internal/planner/planner.js +2533 -0
  88. package/dist/internal/planner/types.d.ts +275 -0
  89. package/dist/internal/planner/types.js +6 -0
  90. package/dist/internal/protocol/boundary.d.ts +10 -0
  91. package/dist/internal/protocol/boundary.js +3 -0
  92. package/dist/internal/protocol/capability.d.ts +47 -0
  93. package/dist/internal/protocol/capability.js +8 -0
  94. package/dist/internal/protocol/error.d.ts +43 -0
  95. package/dist/internal/protocol/error.js +38 -0
  96. package/dist/internal/protocol/event.d.ts +39 -0
  97. package/dist/internal/protocol/event.js +3 -0
  98. package/dist/internal/protocol/identity.d.ts +26 -0
  99. package/dist/internal/protocol/identity.js +30 -0
  100. package/dist/internal/protocol/operation.d.ts +224 -0
  101. package/dist/internal/protocol/operation.js +8 -0
  102. package/dist/internal/protocol/render.d.ts +212 -0
  103. package/dist/internal/protocol/render.js +3 -0
  104. package/dist/internal/protocol.d.ts +9 -0
  105. package/dist/internal/protocol.js +2 -0
  106. package/dist/internal/provenance/binding-graph.d.ts +39 -0
  107. package/dist/internal/provenance/binding-graph.js +184 -0
  108. package/dist/internal/provenance/capability-policy.d.ts +15 -0
  109. package/dist/internal/provenance/capability-policy.js +96 -0
  110. package/dist/internal/provenance/data-source-classifier.d.ts +14 -0
  111. package/dist/internal/provenance/data-source-classifier.js +281 -0
  112. package/dist/internal/provenance/resolve-text-provenance.d.ts +45 -0
  113. package/dist/internal/provenance/resolve-text-provenance.js +3090 -0
  114. package/dist/internal/provenance/types.d.ts +89 -0
  115. package/dist/internal/provenance/types.js +1 -0
  116. package/dist/internal/render/component-semantic.d.ts +11 -0
  117. package/dist/internal/render/component-semantic.js +141 -0
  118. package/dist/internal/render/content-model.d.ts +3 -0
  119. package/dist/internal/render/content-model.js +89 -0
  120. package/dist/internal/render/media-model.d.ts +3 -0
  121. package/dist/internal/render/media-model.js +45 -0
  122. package/dist/internal/render/provenance-types.d.ts +33 -0
  123. package/dist/internal/render/provenance-types.js +1 -0
  124. package/dist/internal/render/render-projection.d.ts +24 -0
  125. package/dist/internal/render/render-projection.js +281 -0
  126. package/dist/internal/render/tailwind-style-model.d.ts +19 -0
  127. package/dist/internal/render/tailwind-style-model.js +1187 -0
  128. package/dist/internal/runtime/EditEngineRuntime.d.ts +25 -0
  129. package/dist/internal/runtime/EditEngineRuntime.js +89 -0
  130. package/dist/internal/runtime/EditEngineRuntimeSnapshot.d.ts +31 -0
  131. package/dist/internal/runtime/EditEngineRuntimeSnapshot.js +15 -0
  132. package/dist/internal/runtime/InternalEditEngine.d.ts +44 -0
  133. package/dist/internal/runtime/InternalEditEngine.js +1391 -0
  134. package/dist/internal/runtime.d.ts +3 -0
  135. package/dist/internal/runtime.js +1 -0
  136. package/dist/internal/topology/topology.d.ts +6 -0
  137. package/dist/internal/topology/topology.js +98 -0
  138. package/dist/internal/topology/types.d.ts +35 -0
  139. package/dist/internal/topology/types.js +5 -0
  140. package/dist/internal/types.d.ts +1 -0
  141. package/dist/internal/types.js +1 -0
  142. package/dist/internal/writeback/in-memory-fs.d.ts +7 -0
  143. package/dist/internal/writeback/in-memory-fs.js +44 -0
  144. package/dist/internal/writeback/types.d.ts +45 -0
  145. package/dist/internal/writeback/types.js +7 -0
  146. package/dist/internal/writeback/writeback-service.d.ts +7 -0
  147. package/dist/internal/writeback/writeback-service.js +568 -0
  148. package/dist/internal-adapter.d.ts +18 -0
  149. package/dist/internal-adapter.js +350 -0
  150. package/dist/next-app-router-fs.d.ts +2 -0
  151. package/dist/next-app-router-fs.js +64 -0
  152. package/dist/next-app-router.d.ts +11 -0
  153. package/dist/next-app-router.js +140 -0
  154. package/dist/preview-runtime.d.ts +394 -0
  155. package/dist/preview-runtime.js +102 -0
  156. package/dist/public-file-system.d.ts +7 -0
  157. package/dist/public-file-system.js +1 -0
  158. package/dist/runtime-sync.d.ts +95 -0
  159. package/dist/runtime-sync.js +321 -0
  160. package/dist/runtime.d.ts +340 -0
  161. package/dist/runtime.js +134 -0
  162. package/dist/site-edit-instrumentation.d.ts +19 -0
  163. package/dist/site-edit-instrumentation.js +322 -0
  164. package/dist/snapshot-file-system.d.ts +19 -0
  165. package/dist/snapshot-file-system.js +49 -0
  166. package/dist/source-watcher.d.ts +20 -0
  167. package/dist/source-watcher.js +150 -0
  168. package/dist/source-writeback-test-harness.d.ts +244 -0
  169. package/dist/source-writeback-test-harness.js +119 -0
  170. package/dist/types.d.ts +68 -0
  171. package/dist/types.js +1 -0
  172. package/dist/webpack-loader.cjs +592 -0
  173. package/dist/webpack-loader.d.ts +27 -0
  174. package/package.json +66 -0
@@ -0,0 +1,25 @@
1
+ import type { SiteEditGetClassNameSourceResult, SiteEditObjectCapabilities, SiteEditSetClassNameSourceRequest, SiteEditSetClassNameSourceResult } from "@trojanbox-vcp-test/contracts";
2
+ import type { DesignerEvent, OperationRequest, OperationResult, RenderDocument, RenderObjectDetail } from "../protocol.js";
3
+ import type { IEditEngineRuntime } from "../contracts/IEditEngineRuntime.js";
4
+ import type { EditEngineRuntimeOptions } from "./EditEngineRuntimeSnapshot.js";
5
+ export declare class EditEngineRuntime implements IEditEngineRuntime {
6
+ private readonly engine;
7
+ private readonly options;
8
+ constructor(options: EditEngineRuntimeOptions);
9
+ get status(): IEditEngineRuntime["status"];
10
+ registerRoute(routeId: string, entryFile: string): void;
11
+ setActiveRoute(routeId: string): Promise<void>;
12
+ getDocument(routeId: string): RenderDocument;
13
+ getObjectCapabilities(key: string, routeId?: string): SiteEditObjectCapabilities;
14
+ getRenderDetail(key: string, routeId?: string): RenderObjectDetail;
15
+ getClassNameSource(key: string, routeId?: string): SiteEditGetClassNameSourceResult;
16
+ setClassNameSource(request: SiteEditSetClassNameSourceRequest): Promise<SiteEditSetClassNameSourceResult>;
17
+ execute(request: OperationRequest): Promise<OperationResult>;
18
+ undo(): Promise<OperationResult>;
19
+ redo(): Promise<OperationResult>;
20
+ notifyFileChanged(file: string): void;
21
+ subscribe(listener: (event: DesignerEvent) => void): () => void;
22
+ dispose(): void;
23
+ private createFileSystem;
24
+ }
25
+ export declare function createEditEngineRuntime(options: EditEngineRuntimeOptions): IEditEngineRuntime;
@@ -0,0 +1,89 @@
1
+ import fs from "node:fs/promises";
2
+ import path from "node:path";
3
+ import { createInternalEditEngine, } from "./InternalEditEngine.js";
4
+ export class EditEngineRuntime {
5
+ constructor(options) {
6
+ this.options = options;
7
+ this.engine = createInternalEditEngine({
8
+ ...options,
9
+ fileSystem: this.createFileSystem(),
10
+ });
11
+ }
12
+ get status() {
13
+ return this.engine.status;
14
+ }
15
+ registerRoute(routeId, entryFile) {
16
+ this.engine.registerRoute(routeId, entryFile);
17
+ }
18
+ async setActiveRoute(routeId) {
19
+ await this.engine.setActiveRoute(routeId);
20
+ }
21
+ getDocument(routeId) {
22
+ return this.engine.getDocument(routeId);
23
+ }
24
+ getObjectCapabilities(key, routeId) {
25
+ return this.engine.getObjectCapabilities(key, routeId);
26
+ }
27
+ getRenderDetail(key, routeId) {
28
+ return this.engine.getRenderDetail(key, routeId);
29
+ }
30
+ getClassNameSource(key, routeId) {
31
+ return this.engine.getClassNameSource(key, routeId);
32
+ }
33
+ setClassNameSource(request) {
34
+ return this.engine.setClassNameSource(request);
35
+ }
36
+ execute(request) {
37
+ return this.engine.execute(request);
38
+ }
39
+ undo() {
40
+ return this.engine.undo();
41
+ }
42
+ redo() {
43
+ return this.engine.redo();
44
+ }
45
+ notifyFileChanged(file) {
46
+ this.engine.notifyFileChanged(file);
47
+ }
48
+ subscribe(listener) {
49
+ return this.engine.subscribe(listener);
50
+ }
51
+ dispose() {
52
+ this.engine.dispose();
53
+ }
54
+ createFileSystem() {
55
+ if (this.options.fileSystem) {
56
+ return this.options.fileSystem;
57
+ }
58
+ const versions = new Map();
59
+ const { projectRoot } = this.options;
60
+ return {
61
+ async readFile(file) {
62
+ return fs.readFile(path.join(projectRoot, file), "utf8");
63
+ },
64
+ async writeFile(file, content) {
65
+ await fs.writeFile(path.join(projectRoot, file), content, "utf8");
66
+ },
67
+ async exists(file) {
68
+ try {
69
+ await fs.access(path.join(projectRoot, file));
70
+ return true;
71
+ }
72
+ catch {
73
+ return false;
74
+ }
75
+ },
76
+ getVersion(file) {
77
+ return versions.get(file) ?? 0;
78
+ },
79
+ bumpVersion(file) {
80
+ const nextVersion = (versions.get(file) ?? 0) + 1;
81
+ versions.set(file, nextVersion);
82
+ return nextVersion;
83
+ },
84
+ };
85
+ }
86
+ }
87
+ export function createEditEngineRuntime(options) {
88
+ return new EditEngineRuntime(options);
89
+ }
@@ -0,0 +1,31 @@
1
+ import type { DesignerEvent, RenderDocument, RenderObjectDetail } from "../protocol.js";
2
+ import type { ExternalSourceResolver, FunctionCallContract } from "../provenance/types.js";
3
+ import type { ProjectFileSystem } from "../types.js";
4
+ import type { ExternalWritebackAdapter } from "../writeback/types.js";
5
+ export type { ExternalSourceResolver, FunctionCallContract, } from "../provenance/types.js";
6
+ export type { ProjectFileSystem } from "../types.js";
7
+ export type { ExternalWritebackAdapter } from "../writeback/types.js";
8
+ export type RuntimeRouteConfig = {
9
+ routeId: string;
10
+ entryFile: string;
11
+ };
12
+ export type EditEngineRuntimeOptions = {
13
+ projectRoot: string;
14
+ fileSystem?: ProjectFileSystem;
15
+ externalAdapters?: ExternalWritebackAdapter[];
16
+ externalSourceResolvers?: ExternalSourceResolver[];
17
+ functionCallContracts?: FunctionCallContract[];
18
+ onEvent?: (event: DesignerEvent) => void;
19
+ dev?: boolean;
20
+ routes: RuntimeRouteConfig[];
21
+ };
22
+ export declare class EditEngineRuntimeSnapshot {
23
+ readonly routeId: string;
24
+ readonly initialDocument: RenderDocument;
25
+ readonly initialDetails: Record<string, RenderObjectDetail>;
26
+ constructor(routeId: string, initialDocument: RenderDocument, initialDetails: Record<string, RenderObjectDetail>);
27
+ static capture(routeId: string, runtime: Pick<{
28
+ getDocument(routeId: string): RenderDocument;
29
+ getRenderDetail(key: string): RenderObjectDetail;
30
+ }, "getDocument" | "getRenderDetail">): EditEngineRuntimeSnapshot;
31
+ }
@@ -0,0 +1,15 @@
1
+ export class EditEngineRuntimeSnapshot {
2
+ constructor(routeId, initialDocument, initialDetails) {
3
+ this.routeId = routeId;
4
+ this.initialDocument = initialDocument;
5
+ this.initialDetails = initialDetails;
6
+ }
7
+ static capture(routeId, runtime) {
8
+ const initialDocument = runtime.getDocument(routeId);
9
+ const initialDetails = Object.fromEntries(initialDocument.entries.map((entry) => [
10
+ entry.key,
11
+ runtime.getRenderDetail(entry.key),
12
+ ]));
13
+ return new EditEngineRuntimeSnapshot(routeId, initialDocument, initialDetails);
14
+ }
15
+ }
@@ -0,0 +1,44 @@
1
+ import type { SiteEditGetClassNameSourceResult, SiteEditObjectCapabilities, SiteEditSetClassNameSourceRequest, SiteEditSetClassNameSourceResult } from "@trojanbox-vcp-test/contracts";
2
+ import type { RenderDocument, RenderObjectDetail, OperationRequest, OperationResult, DesignerEvent } from "../protocol.js";
3
+ import type { ProjectFileSystem } from "./EditEngineRuntimeSnapshot.js";
4
+ import type { ExternalSourceResolver, FunctionCallContract } from "../provenance/types.js";
5
+ import type { ExternalWritebackAdapter } from "../writeback/types.js";
6
+ /**
7
+ * Engine 配置。
8
+ */
9
+ export interface InternalEditEngineConfig {
10
+ projectRoot: string;
11
+ routes?: Array<{
12
+ routeId: string;
13
+ entryFile: string;
14
+ }>;
15
+ fileSystem?: ProjectFileSystem;
16
+ externalAdapters?: ExternalWritebackAdapter[];
17
+ externalSourceResolvers?: ExternalSourceResolver[];
18
+ functionCallContracts?: FunctionCallContract[];
19
+ onEvent?: (event: DesignerEvent) => void;
20
+ dev?: boolean;
21
+ }
22
+ /**
23
+ * DesignerEngine —— 核心引擎接口。
24
+ */
25
+ export interface InternalEditEngine {
26
+ readonly status: "idle" | "building" | "ready" | "disposed";
27
+ dispose(): void;
28
+ registerRoute(routeId: string, entryFile: string): void;
29
+ setActiveRoute(routeId: string): Promise<void>;
30
+ getDocument(routeId: string): RenderDocument;
31
+ getObjectCapabilities(key: string, routeId?: string): SiteEditObjectCapabilities;
32
+ getRenderDetail(key: string, routeId?: string): RenderObjectDetail;
33
+ getClassNameSource(key: string, routeId?: string): SiteEditGetClassNameSourceResult;
34
+ setClassNameSource(request: SiteEditSetClassNameSourceRequest): Promise<SiteEditSetClassNameSourceResult>;
35
+ execute(request: OperationRequest): Promise<OperationResult>;
36
+ undo(): Promise<OperationResult>;
37
+ redo(): Promise<OperationResult>;
38
+ notifyFileChanged(file: string): void;
39
+ subscribe(listener: (event: DesignerEvent) => void): () => void;
40
+ }
41
+ /**
42
+ * 创建 DesignerEngine 实例。
43
+ */
44
+ export declare function createInternalEditEngine(config: InternalEditEngineConfig): InternalEditEngine;