@trojanbox-vcp-test/site-edit-engine 0.1.0 → 0.2.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 (163) hide show
  1. package/dist/index.d.ts +3 -0
  2. package/dist/index.js +127 -2
  3. package/dist/internal/protocol/operation.d.ts +2 -0
  4. package/dist/internal/protocol/render.d.ts +3 -30
  5. package/dist/internal/protocol.d.ts +1 -1
  6. package/dist/next-app-router.js +1 -140
  7. package/dist/preview-runtime.d.ts +249 -303
  8. package/dist/runtime-sync.d.ts +8 -8
  9. package/dist/runtime.d.ts +1 -127
  10. package/dist/site-edit-instrumentation.d.ts +1 -1
  11. package/dist/source-watcher.js +1 -150
  12. package/dist/types.d.ts +12 -14
  13. package/dist/webpack-loader.cjs +50 -588
  14. package/package.json +2 -2
  15. package/dist/execute-integration/execute-fixture-harness.d.ts +0 -25
  16. package/dist/execute-integration/execute-fixture-harness.js +0 -37
  17. package/dist/internal/ast/diagnostics/index.d.ts +0 -5
  18. package/dist/internal/ast/diagnostics/index.js +0 -25
  19. package/dist/internal/ast/history/index.d.ts +0 -15
  20. package/dist/internal/ast/history/index.js +0 -62
  21. package/dist/internal/ast/index.d.ts +0 -8
  22. package/dist/internal/ast/index.js +0 -5
  23. package/dist/internal/ast/locators/index.d.ts +0 -1
  24. package/dist/internal/ast/locators/index.js +0 -1
  25. package/dist/internal/ast/locators/resolve-locator.d.ts +0 -16
  26. package/dist/internal/ast/locators/resolve-locator.js +0 -920
  27. package/dist/internal/ast/parser/SourceParser.d.ts +0 -30
  28. package/dist/internal/ast/parser/SourceParser.js +0 -49
  29. package/dist/internal/ast/parser/index.d.ts +0 -21
  30. package/dist/internal/ast/parser/index.js +0 -64
  31. package/dist/internal/ast/primitives/conditional/conditional-primitives.d.ts +0 -18
  32. package/dist/internal/ast/primitives/conditional/conditional-primitives.js +0 -237
  33. package/dist/internal/ast/primitives/conditional/index.d.ts +0 -1
  34. package/dist/internal/ast/primitives/conditional/index.js +0 -1
  35. package/dist/internal/ast/primitives/imports/add-import.d.ts +0 -18
  36. package/dist/internal/ast/primitives/imports/add-import.js +0 -111
  37. package/dist/internal/ast/primitives/imports/index.d.ts +0 -2
  38. package/dist/internal/ast/primitives/imports/index.js +0 -2
  39. package/dist/internal/ast/primitives/imports/remove-import.d.ts +0 -15
  40. package/dist/internal/ast/primitives/imports/remove-import.js +0 -72
  41. package/dist/internal/ast/primitives/index.d.ts +0 -10
  42. package/dist/internal/ast/primitives/index.js +0 -10
  43. package/dist/internal/ast/primitives/jsx/index.d.ts +0 -4
  44. package/dist/internal/ast/primitives/jsx/index.js +0 -4
  45. package/dist/internal/ast/primitives/jsx/insert-child.d.ts +0 -11
  46. package/dist/internal/ast/primitives/jsx/insert-child.js +0 -69
  47. package/dist/internal/ast/primitives/jsx/move-node.d.ts +0 -9
  48. package/dist/internal/ast/primitives/jsx/move-node.js +0 -76
  49. package/dist/internal/ast/primitives/jsx/remove-node.d.ts +0 -7
  50. package/dist/internal/ast/primitives/jsx/remove-node.js +0 -36
  51. package/dist/internal/ast/primitives/jsx/update-text.d.ts +0 -8
  52. package/dist/internal/ast/primitives/jsx/update-text.js +0 -81
  53. package/dist/internal/ast/primitives/next/index.d.ts +0 -1
  54. package/dist/internal/ast/primitives/next/index.js +0 -1
  55. package/dist/internal/ast/primitives/next/next-primitives.d.ts +0 -43
  56. package/dist/internal/ast/primitives/next/next-primitives.js +0 -211
  57. package/dist/internal/ast/primitives/shared.d.ts +0 -60
  58. package/dist/internal/ast/primitives/shared.js +0 -176
  59. package/dist/internal/ast/primitives/style/class-expression.d.ts +0 -23
  60. package/dist/internal/ast/primitives/style/class-expression.js +0 -174
  61. package/dist/internal/ast/primitives/style/index.d.ts +0 -1
  62. package/dist/internal/ast/primitives/style/index.js +0 -1
  63. package/dist/internal/ast/primitives/style/style-primitives.d.ts +0 -49
  64. package/dist/internal/ast/primitives/style/style-primitives.js +0 -555
  65. package/dist/internal/ast/primitives/values/index.d.ts +0 -1
  66. package/dist/internal/ast/primitives/values/index.js +0 -1
  67. package/dist/internal/ast/primitives/values/value-primitives.d.ts +0 -42
  68. package/dist/internal/ast/primitives/values/value-primitives.js +0 -158
  69. package/dist/internal/ast/printer/SourcePrinter.d.ts +0 -21
  70. package/dist/internal/ast/printer/SourcePrinter.js +0 -76
  71. package/dist/internal/ast/printer/index.d.ts +0 -6
  72. package/dist/internal/ast/printer/index.js +0 -126
  73. package/dist/internal/ast/types.d.ts +0 -190
  74. package/dist/internal/ast/types.js +0 -1
  75. package/dist/internal/capability/capability-resolver.d.ts +0 -16
  76. package/dist/internal/capability/capability-resolver.js +0 -127
  77. package/dist/internal/classname-source.d.ts +0 -24
  78. package/dist/internal/classname-source.js +0 -220
  79. package/dist/internal/contracts/IEditEngineRuntime.d.ts +0 -18
  80. package/dist/internal/contracts/IEditEngineRuntime.js +0 -1
  81. package/dist/internal/domain/EditDiagnostic.d.ts +0 -38
  82. package/dist/internal/domain/EditDiagnostic.js +0 -43
  83. package/dist/internal/events/event-bus.d.ts +0 -14
  84. package/dist/internal/events/event-bus.js +0 -21
  85. package/dist/internal/graph/graph-builder.d.ts +0 -12
  86. package/dist/internal/graph/graph-builder.js +0 -1371
  87. package/dist/internal/graph/import-resolver.d.ts +0 -31
  88. package/dist/internal/graph/import-resolver.js +0 -109
  89. package/dist/internal/graph/project-graph-builder.d.ts +0 -32
  90. package/dist/internal/graph/project-graph-builder.js +0 -133
  91. package/dist/internal/graph/types.d.ts +0 -114
  92. package/dist/internal/graph/types.js +0 -6
  93. package/dist/internal/history/undo-redo.d.ts +0 -28
  94. package/dist/internal/history/undo-redo.js +0 -42
  95. package/dist/internal/index.d.ts +0 -2
  96. package/dist/internal/index.js +0 -1
  97. package/dist/internal/planner/planner.d.ts +0 -104
  98. package/dist/internal/planner/planner.js +0 -2533
  99. package/dist/internal/planner/types.d.ts +0 -275
  100. package/dist/internal/planner/types.js +0 -6
  101. package/dist/internal/protocol/boundary.js +0 -3
  102. package/dist/internal/protocol/capability.js +0 -8
  103. package/dist/internal/protocol/error.js +0 -38
  104. package/dist/internal/protocol/event.js +0 -3
  105. package/dist/internal/protocol/identity.js +0 -30
  106. package/dist/internal/protocol/operation.js +0 -8
  107. package/dist/internal/protocol/render.js +0 -3
  108. package/dist/internal/protocol.js +0 -2
  109. package/dist/internal/provenance/binding-graph.d.ts +0 -39
  110. package/dist/internal/provenance/binding-graph.js +0 -184
  111. package/dist/internal/provenance/capability-policy.d.ts +0 -15
  112. package/dist/internal/provenance/capability-policy.js +0 -96
  113. package/dist/internal/provenance/data-source-classifier.d.ts +0 -14
  114. package/dist/internal/provenance/data-source-classifier.js +0 -281
  115. package/dist/internal/provenance/resolve-text-provenance.d.ts +0 -45
  116. package/dist/internal/provenance/resolve-text-provenance.js +0 -3090
  117. package/dist/internal/provenance/types.d.ts +0 -89
  118. package/dist/internal/provenance/types.js +0 -1
  119. package/dist/internal/render/component-semantic.d.ts +0 -11
  120. package/dist/internal/render/component-semantic.js +0 -141
  121. package/dist/internal/render/content-model.d.ts +0 -3
  122. package/dist/internal/render/content-model.js +0 -89
  123. package/dist/internal/render/media-model.d.ts +0 -3
  124. package/dist/internal/render/media-model.js +0 -45
  125. package/dist/internal/render/provenance-types.d.ts +0 -33
  126. package/dist/internal/render/provenance-types.js +0 -1
  127. package/dist/internal/render/render-projection.d.ts +0 -24
  128. package/dist/internal/render/render-projection.js +0 -281
  129. package/dist/internal/render/tailwind-style-model.d.ts +0 -19
  130. package/dist/internal/render/tailwind-style-model.js +0 -1187
  131. package/dist/internal/runtime/EditEngineRuntime.d.ts +0 -25
  132. package/dist/internal/runtime/EditEngineRuntime.js +0 -89
  133. package/dist/internal/runtime/EditEngineRuntimeSnapshot.d.ts +0 -31
  134. package/dist/internal/runtime/EditEngineRuntimeSnapshot.js +0 -15
  135. package/dist/internal/runtime/InternalEditEngine.d.ts +0 -44
  136. package/dist/internal/runtime/InternalEditEngine.js +0 -1391
  137. package/dist/internal/runtime.d.ts +0 -3
  138. package/dist/internal/runtime.js +0 -1
  139. package/dist/internal/topology/topology.d.ts +0 -6
  140. package/dist/internal/topology/topology.js +0 -98
  141. package/dist/internal/topology/types.d.ts +0 -35
  142. package/dist/internal/topology/types.js +0 -5
  143. package/dist/internal/types.d.ts +0 -1
  144. package/dist/internal/types.js +0 -1
  145. package/dist/internal/writeback/in-memory-fs.d.ts +0 -7
  146. package/dist/internal/writeback/in-memory-fs.js +0 -44
  147. package/dist/internal/writeback/types.d.ts +0 -45
  148. package/dist/internal/writeback/types.js +0 -7
  149. package/dist/internal/writeback/writeback-service.d.ts +0 -7
  150. package/dist/internal/writeback/writeback-service.js +0 -568
  151. package/dist/internal-adapter.d.ts +0 -18
  152. package/dist/internal-adapter.js +0 -350
  153. package/dist/next-app-router-fs.js +0 -64
  154. package/dist/preview-runtime.js +0 -102
  155. package/dist/public-file-system.js +0 -1
  156. package/dist/runtime-sync.js +0 -321
  157. package/dist/runtime.js +0 -134
  158. package/dist/site-edit-instrumentation.js +0 -322
  159. package/dist/snapshot-file-system.d.ts +0 -19
  160. package/dist/snapshot-file-system.js +0 -49
  161. package/dist/source-writeback-test-harness.d.ts +0 -244
  162. package/dist/source-writeback-test-harness.js +0 -119
  163. package/dist/types.js +0 -1
@@ -12,24 +12,24 @@ export type SiteEditRuntimeAttributes = {
12
12
  readonly [key in keyof typeof SITE_EDIT_RUNTIME_ATTRIBUTES]: string;
13
13
  };
14
14
  export type SiteEditRenderDocumentDiff = {
15
- added_keys: string[];
16
- removed_keys: string[];
17
- retained_keys: string[];
15
+ addedKeys: string[];
16
+ removedKeys: string[];
17
+ retainedKeys: string[];
18
18
  changed_parentKeys: string[];
19
- changed_child_order_keys: string[];
19
+ changedChildOrderKeys: string[];
20
20
  };
21
21
  export type SiteEditRuntimeElementSnapshot = {
22
22
  key: string;
23
23
  instance_index?: number;
24
24
  instance_count?: number;
25
- tag_name: string;
26
- source_kind?: string;
25
+ tagName: string;
26
+ sourceKind?: string;
27
27
  componentName?: string;
28
28
  sourceFile?: string;
29
29
  parentKey?: string;
30
30
  text_preview?: string;
31
31
  attributes: Record<string, string>;
32
- runtime_flags: {
32
+ runtimeFlags: {
33
33
  editable: boolean;
34
34
  movable: boolean;
35
35
  removable: boolean;
@@ -64,7 +64,7 @@ export type SiteEditRuntimeReadyInput = {
64
64
  next_document: SiteEditRenderDocument;
65
65
  request?: SiteEditOperationRequest;
66
66
  result: SiteEditOperationResult;
67
- selected_key?: string | null;
67
+ selectedKey?: string | null;
68
68
  timeout_ms?: number;
69
69
  };
70
70
  export declare function diffSiteEditRenderDocuments(previous_document: SiteEditRenderDocument, next_document: SiteEditRenderDocument): SiteEditRenderDocumentDiff;
package/dist/runtime.d.ts CHANGED
@@ -155,39 +155,6 @@ export declare class SnapshotSiteEditEngineRuntime implements SiteEditEngineRunt
155
155
  } | undefined;
156
156
  componentSemantic?: Record<string, unknown> | undefined;
157
157
  };
158
- getObjectStyleDetail(key: string, routeId?: string): {
159
- key: string;
160
- styleSource?: {
161
- kind: "class-name-source";
162
- className: string;
163
- sourceKind: "missing" | "static-attribute" | "static-expression" | "dynamic-expression";
164
- editable: boolean;
165
- operationBoundary: ("update-text" | "remove-node" | "insert-child" | "move-node" | "replace-rich-text-content" | "insert-rich-text-block" | "remove-rich-text-block" | "set-media-field" | "set-component-slot-content" | "set-object-field" | "insert-object-field" | "remove-object-field" | "update-array-item" | "insert-array-item" | "remove-array-item" | "move-array-item" | "replace-conditional-expression" | "set-conditional-branch-content" | "set-jsx-prop" | "remove-jsx-prop" | "set-class-name" | "add-class-token" | "remove-class-token" | "set-style-property" | "set-style-properties" | "set-css-module-class" | "set-directive" | "remove-directive" | "set-route-export" | "set-metadata-field" | "set-generate-metadata")[];
166
- sourcePath?: string | undefined;
167
- diagnostics?: {
168
- code: "missing-class-name" | "dynamic-binding" | "non-string-binding";
169
- message: string;
170
- }[] | undefined;
171
- } | undefined;
172
- styleModel?: Record<string, unknown> | {
173
- kind: "css-style-model";
174
- properties: {
175
- property: "display" | "position" | "top" | "right" | "bottom" | "left" | "zIndex" | "flexDirection" | "flexWrap" | "flexGrow" | "flexShrink" | "flexBasis" | "order" | "gridTemplateColumns" | "gridTemplateRows" | "columns" | "gridColumn" | "gridRow" | "gap" | "gapX" | "gapY" | "spaceX" | "spaceY" | "alignItems" | "justifyContent" | "marginTop" | "marginRight" | "marginBottom" | "marginLeft" | "paddingTop" | "paddingRight" | "paddingBottom" | "paddingLeft" | "width" | "height" | "minWidth" | "minHeight" | "maxWidth" | "maxHeight" | "overflow" | "fontFamily" | "fontSize" | "fontWeight" | "lineHeight" | "letterSpacing" | "textAlign" | "textTransform" | "textDecoration" | "textOverflow" | "textIndent" | "writingMode" | "whiteSpace" | "wordBreak" | "lineClamp" | "fontVariantNumeric" | "screenReaderOnly" | "color" | "backgroundColor" | "backgroundImage" | "borderStyle" | "borderWidth" | "borderRadius" | "borderColor" | "objectFit" | "objectPosition" | "aspectRatio" | "opacity" | "boxShadow" | "transform" | "transformOrigin" | "transitionProperty" | "transitionDuration" | "transitionTimingFunction" | "animation" | "pointerEvents" | "cursor" | "userSelect" | "fontStyle" | "textUnderlineOffset" | "scrollMarginTop" | "alignSelf" | "flex" | "outlineStyle" | "resize" | "ringWidth" | "ringColor" | "backdropFilter" | "overscrollBehavior" | "divideWidth" | "divideColor";
176
- value: string | number | boolean | null;
177
- editable: boolean;
178
- resolvedValue?: string | number | boolean | null | undefined;
179
- breakpoint?: "sm" | "md" | "lg" | "xl" | "2xl" | undefined;
180
- state?: "hover" | "active" | "focus" | "disabled" | undefined;
181
- variants?: string[] | undefined;
182
- options?: (string | number)[] | undefined;
183
- diagnostics?: {
184
- code: string;
185
- message: string;
186
- }[] | undefined;
187
- operationBoundary?: ("update-text" | "remove-node" | "insert-child" | "move-node" | "replace-rich-text-content" | "insert-rich-text-block" | "remove-rich-text-block" | "set-media-field" | "set-component-slot-content" | "set-object-field" | "insert-object-field" | "remove-object-field" | "update-array-item" | "insert-array-item" | "remove-array-item" | "move-array-item" | "replace-conditional-expression" | "set-conditional-branch-content" | "set-jsx-prop" | "remove-jsx-prop" | "set-class-name" | "add-class-token" | "remove-class-token" | "set-style-property" | "set-style-properties" | "set-css-module-class" | "set-directive" | "remove-directive" | "set-route-export" | "set-metadata-field" | "set-generate-metadata")[] | undefined;
188
- }[];
189
- } | undefined;
190
- };
191
158
  getObjectContentDetail(key: string, routeId?: string): {
192
159
  key: string;
193
160
  contentModel?: Record<string, unknown> | undefined;
@@ -238,100 +205,7 @@ export declare class SnapshotSiteEditEngineRuntime implements SiteEditEngineRunt
238
205
  message: string;
239
206
  }[];
240
207
  };
241
- setClassNameSource(request: Parameters<SiteEditEngineRuntime["setClassNameSource"]>[0]): Promise<{
242
- ok: true;
243
- source: {
244
- key: string;
245
- routeId: string;
246
- filePath: string;
247
- componentName: string;
248
- sourceKind: "missing" | "expression" | "stringLiteral";
249
- attrRaw: string | null;
250
- valueRaw: string | null;
251
- attrRange: {
252
- start: number;
253
- end: number;
254
- startLine?: number | undefined;
255
- startColumn?: number | undefined;
256
- endLine?: number | undefined;
257
- endColumn?: number | undefined;
258
- } | null;
259
- valueRange: {
260
- start: number;
261
- end: number;
262
- startLine?: number | undefined;
263
- startColumn?: number | undefined;
264
- endLine?: number | undefined;
265
- endColumn?: number | undefined;
266
- } | null;
267
- openingElementRange: {
268
- start: number;
269
- end: number;
270
- startLine?: number | undefined;
271
- startColumn?: number | undefined;
272
- endLine?: number | undefined;
273
- endColumn?: number | undefined;
274
- };
275
- version: {
276
- documentVersion: number;
277
- contentHash: string;
278
- parserVersion: string;
279
- };
280
- diagnostics: {
281
- code: "missing-class-name" | "unsupported-attribute-name" | "source-locator-warning" | "invalid-new-attr" | "version-conflict" | "write-failed";
282
- message: string;
283
- }[];
284
- };
285
- } | {
286
- ok: false;
287
- reason: "node_not_found" | "document_version_stale" | "file_hash_mismatch" | "range_mismatch" | "old_attr_mismatch" | "invalid_new_attr" | "unsupported_target" | "write_failed";
288
- diagnostics: {
289
- code: "missing-class-name" | "unsupported-attribute-name" | "source-locator-warning" | "invalid-new-attr" | "version-conflict" | "write-failed";
290
- message: string;
291
- }[];
292
- current?: {
293
- key: string;
294
- routeId: string;
295
- filePath: string;
296
- componentName: string;
297
- sourceKind: "missing" | "expression" | "stringLiteral";
298
- attrRaw: string | null;
299
- valueRaw: string | null;
300
- attrRange: {
301
- start: number;
302
- end: number;
303
- startLine?: number | undefined;
304
- startColumn?: number | undefined;
305
- endLine?: number | undefined;
306
- endColumn?: number | undefined;
307
- } | null;
308
- valueRange: {
309
- start: number;
310
- end: number;
311
- startLine?: number | undefined;
312
- startColumn?: number | undefined;
313
- endLine?: number | undefined;
314
- endColumn?: number | undefined;
315
- } | null;
316
- openingElementRange: {
317
- start: number;
318
- end: number;
319
- startLine?: number | undefined;
320
- startColumn?: number | undefined;
321
- endLine?: number | undefined;
322
- endColumn?: number | undefined;
323
- };
324
- version: {
325
- documentVersion: number;
326
- contentHash: string;
327
- parserVersion: string;
328
- };
329
- diagnostics: {
330
- code: "missing-class-name" | "unsupported-attribute-name" | "source-locator-warning" | "invalid-new-attr" | "version-conflict" | "write-failed";
331
- message: string;
332
- }[];
333
- } | undefined;
334
- }>;
208
+ setClassNameSource(request: Parameters<SiteEditEngineRuntime["setClassNameSource"]>[0]): Promise<import("@trojanbox-vcp-test/contracts").SiteEditSetClassNameSourceResult>;
335
209
  planOperation(request: Parameters<SiteEditEngineRuntime["planOperation"]>[0]): Promise<SiteEditPlanOperationResult>;
336
210
  dispose(): void;
337
211
  private createEngine;
@@ -10,7 +10,7 @@ export type SiteEditInstrumentedElement = {
10
10
  tag: string;
11
11
  componentName: string;
12
12
  sourceFile: string;
13
- source_kind: "jsx" | "component-call";
13
+ sourceKind: "jsx" | "component-call";
14
14
  };
15
15
  export type SiteEditInstrumentationResult = {
16
16
  code: string;
@@ -1,150 +1 @@
1
- import fs from "node:fs";
2
- import path from "node:path";
3
- const defaultWatchDirs = [
4
- "app",
5
- "src/app",
6
- "components",
7
- "src/components",
8
- "lib",
9
- "src/lib",
10
- ];
11
- const sourceFilePattern = /\.(?:tsx|ts|jsx|js|mjs|cjs|css|scss|sass)$/;
12
- const ignoredPathPattern = /^(?:\.next|node_modules|\.git)(?:\/|$)/;
13
- export class SiteEditSourceWatcher {
14
- constructor(options) {
15
- this.options = options;
16
- this.watchers = [];
17
- this.fileMtimes = new Map();
18
- this.pollingTimer = null;
19
- this.isPolling = false;
20
- }
21
- start() {
22
- for (const relativeDirectory of this.getWatchDirs()) {
23
- const baseDir = path.join(this.options.projectRoot, relativeDirectory);
24
- if (!fs.existsSync(baseDir)) {
25
- continue;
26
- }
27
- if (this.registerWatcher(baseDir, true)) {
28
- continue;
29
- }
30
- for (const nestedDir of collectSubdirectories(baseDir)) {
31
- this.registerWatcher(nestedDir, false);
32
- }
33
- }
34
- this.scanFiles();
35
- this.pollingTimer = setInterval(() => this.poll(), this.options.interval_ms ?? 1_000);
36
- return () => this.stop();
37
- }
38
- stop() {
39
- if (this.pollingTimer) {
40
- clearInterval(this.pollingTimer);
41
- this.pollingTimer = null;
42
- }
43
- for (const watcher of this.watchers) {
44
- watcher.close();
45
- }
46
- this.watchers.length = 0;
47
- }
48
- getWatchDirs() {
49
- return this.options.watch_dirs?.length
50
- ? this.options.watch_dirs
51
- : defaultWatchDirs;
52
- }
53
- registerWatcher(baseDir, recursive) {
54
- try {
55
- const watcher = fs.watch(baseDir, { recursive }, (_eventType, filename) => {
56
- const changedFile = normalizeChangedFile(this.options.projectRoot, baseDir, filename);
57
- if (changedFile) {
58
- this.options.on_change(changedFile);
59
- }
60
- });
61
- this.watchers.push(watcher);
62
- return true;
63
- }
64
- catch {
65
- return false;
66
- }
67
- }
68
- poll() {
69
- if (this.isPolling) {
70
- return;
71
- }
72
- this.isPolling = true;
73
- try {
74
- this.scanFiles();
75
- }
76
- finally {
77
- this.isPolling = false;
78
- }
79
- }
80
- scanFiles() {
81
- for (const relativeDirectory of this.getWatchDirs()) {
82
- const baseDir = path.join(this.options.projectRoot, relativeDirectory);
83
- if (!fs.existsSync(baseDir)) {
84
- continue;
85
- }
86
- for (const absoluteFile of collectWatchedFiles(this.options.projectRoot, baseDir)) {
87
- try {
88
- const stat = fs.statSync(absoluteFile);
89
- const relativeFile = toProjectRelativePath(this.options.projectRoot, absoluteFile);
90
- const previousMtime = this.fileMtimes.get(relativeFile);
91
- if (previousMtime !== undefined && previousMtime !== stat.mtimeMs) {
92
- this.options.on_change(relativeFile);
93
- }
94
- this.fileMtimes.set(relativeFile, stat.mtimeMs);
95
- }
96
- catch {
97
- // Files can disappear while Next is recompiling; the next scan settles state.
98
- }
99
- }
100
- }
101
- }
102
- }
103
- function collectSubdirectories(baseDir) {
104
- const directories = [baseDir];
105
- for (const entry of fs.readdirSync(baseDir, { withFileTypes: true })) {
106
- if (!entry.isDirectory() ||
107
- entry.name.startsWith(".") ||
108
- entry.name === "node_modules") {
109
- continue;
110
- }
111
- directories.push(...collectSubdirectories(path.join(baseDir, entry.name)));
112
- }
113
- return directories;
114
- }
115
- function collectWatchedFiles(projectRoot, baseDir) {
116
- const files = [];
117
- for (const entry of fs.readdirSync(baseDir, { withFileTypes: true })) {
118
- const absolutePath = path.join(baseDir, entry.name);
119
- if (entry.isDirectory()) {
120
- if (entry.name.startsWith(".") || entry.name === "node_modules") {
121
- continue;
122
- }
123
- files.push(...collectWatchedFiles(projectRoot, absolutePath));
124
- continue;
125
- }
126
- const relativeFile = toProjectRelativePath(projectRoot, absolutePath);
127
- if (!ignoredPathPattern.test(relativeFile) &&
128
- sourceFilePattern.test(relativeFile)) {
129
- files.push(absolutePath);
130
- }
131
- }
132
- return files;
133
- }
134
- function normalizeChangedFile(projectRoot, baseDir, filename) {
135
- if (!filename) {
136
- return null;
137
- }
138
- const absoluteFile = path.join(baseDir, filename.toString());
139
- const relativeFile = toProjectRelativePath(projectRoot, absoluteFile);
140
- if (!relativeFile ||
141
- relativeFile.startsWith("..") ||
142
- ignoredPathPattern.test(relativeFile) ||
143
- !sourceFilePattern.test(relativeFile)) {
144
- return null;
145
- }
146
- return relativeFile;
147
- }
148
- function toProjectRelativePath(projectRoot, absoluteFile) {
149
- return path.relative(projectRoot, absoluteFile).replace(/\\/g, "/");
150
- }
1
+ import r from"node:fs";import c from"node:path";var g=["app","src/app","components","src/components","lib","src/lib"],u=/\.(?:tsx|ts|jsx|js|mjs|cjs|css|scss|sass)$/,f=/^(?:\.next|node_modules|\.git)(?:\/|$)/,a=class{constructor(t){this.options=t,this.watchers=[],this.fileMtimes=new Map,this.pollingTimer=null,this.isPolling=!1}start(){for(let t of this.getWatchDirs()){let s=c.join(this.options.projectRoot,t);if(r.existsSync(s)&&!this.registerWatcher(s,!0))for(let i of p(s))this.registerWatcher(i,!1)}return this.scanFiles(),this.pollingTimer=setInterval(()=>this.poll(),this.options.interval_ms??1e3),()=>this.stop()}stop(){this.pollingTimer&&(clearInterval(this.pollingTimer),this.pollingTimer=null);for(let t of this.watchers)t.close();this.watchers.length=0}getWatchDirs(){return this.options.watch_dirs?.length?this.options.watch_dirs:g}registerWatcher(t,s){try{let i=r.watch(t,{recursive:s},(e,n)=>{let l=d(this.options.projectRoot,t,n);l&&this.options.on_change(l)});return this.watchers.push(i),!0}catch{return!1}}poll(){if(!this.isPolling){this.isPolling=!0;try{this.scanFiles()}finally{this.isPolling=!1}}}scanFiles(){for(let t of this.getWatchDirs()){let s=c.join(this.options.projectRoot,t);if(r.existsSync(s))for(let i of m(this.options.projectRoot,s))try{let e=r.statSync(i),n=h(this.options.projectRoot,i),l=this.fileMtimes.get(n);l!==void 0&&l!==e.mtimeMs&&this.options.on_change(n),this.fileMtimes.set(n,e.mtimeMs)}catch{}}}};function p(o){let t=[o];for(let s of r.readdirSync(o,{withFileTypes:!0}))!s.isDirectory()||s.name.startsWith(".")||s.name==="node_modules"||t.push(...p(c.join(o,s.name)));return t}function m(o,t){let s=[];for(let i of r.readdirSync(t,{withFileTypes:!0})){let e=c.join(t,i.name);if(i.isDirectory()){if(i.name.startsWith(".")||i.name==="node_modules")continue;s.push(...m(o,e));continue}let n=h(o,e);!f.test(n)&&u.test(n)&&s.push(e)}return s}function d(o,t,s){if(!s)return null;let i=c.join(t,s.toString()),e=h(o,i);return!e||e.startsWith("..")||f.test(e)||!u.test(e)?null:e}function h(o,t){return c.relative(o,t).replace(/\\/g,"/")}export{a as SiteEditSourceWatcher};
package/dist/types.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import type { SiteEditEvent, SiteEditGetClassNameSourceResult, SiteEditObjectCapabilities, SiteEditObjectContentDetail, SiteEditObjectEditContext, SiteEditObjectMediaDetail, SiteEditObjectStyleDetail, SiteEditObjectSummary, SiteEditOperationRequest, SiteEditOperationResult, SiteEditPatchPlan, SiteEditRenderDocument, SiteEditSetClassNameSourceRequest, SiteEditSetClassNameSourceResult } from "@trojanbox-vcp-test/contracts";
1
+ import type { SiteEditCommandSuccess, SiteEditEvent, SiteEditGetClassNameSourceCommandResult, SiteEditGetClassNameSourceResult, SiteEditObjectCapabilities, SiteEditObjectContentDetail, SiteEditObjectEditContext, SiteEditObjectMediaDetail, SiteEditObjectSummary, SiteEditOperationCommandResult, SiteEditOperationRequest, SiteEditPatchPlan, SiteEditRenderDocument, SiteEditSetClassNameSourceRequest, SiteEditSetClassNameSourceResult } from "@trojanbox-vcp-test/contracts";
2
2
  import type { SiteEditProjectFileSystem } from "./public-file-system.js";
3
3
  export type { SiteEditProjectFileSystem } from "./public-file-system.js";
4
4
  export interface SiteEditSnapshotFile {
@@ -19,7 +19,7 @@ export interface SiteEditEngineRuntimeOptions {
19
19
  dev?: boolean;
20
20
  }
21
21
  export interface SiteEditPlanOperationResult {
22
- result: SiteEditOperationResult;
22
+ result: SiteEditOperationCommandResult;
23
23
  patchPlan?: SiteEditPatchPlan;
24
24
  }
25
25
  export interface SiteEditEngineRuntime {
@@ -29,7 +29,6 @@ export interface SiteEditEngineRuntime {
29
29
  getObjectCapabilities(key: string, routeId?: string): SiteEditObjectCapabilities;
30
30
  getObjectSummary(key: string, routeId?: string): SiteEditObjectSummary;
31
31
  getObjectEditContext(key: string, routeId?: string): SiteEditObjectEditContext;
32
- getObjectStyleDetail(key: string, routeId?: string): SiteEditObjectStyleDetail;
33
32
  getObjectContentDetail(key: string, routeId?: string): SiteEditObjectContentDetail;
34
33
  getObjectMediaDetail(key: string, routeId?: string): SiteEditObjectMediaDetail;
35
34
  getClassNameSource(key: string, routeId?: string): SiteEditGetClassNameSourceResult;
@@ -50,18 +49,17 @@ export interface PreviewSiteEditEngineRuntime {
50
49
  readonly status: "idle" | "building" | "ready" | "error" | "disposed";
51
50
  registerRoute(routeId: string, entryFile: string): void;
52
51
  setActiveRoute(routeId: string): Promise<void>;
53
- getDocument(routeId: string): SiteEditRenderDocument;
54
- getObjectCapabilities(key: string, routeId?: string): SiteEditObjectCapabilities;
55
- getObjectSummary(key: string, routeId?: string): SiteEditObjectSummary;
56
- getObjectEditContext(key: string, routeId?: string): SiteEditObjectEditContext;
57
- getObjectStyleDetail(key: string, routeId?: string): SiteEditObjectStyleDetail;
58
- getObjectContentDetail(key: string, routeId?: string): SiteEditObjectContentDetail;
59
- getObjectMediaDetail(key: string, routeId?: string): SiteEditObjectMediaDetail;
60
- getClassNameSource(key: string, routeId?: string): SiteEditGetClassNameSourceResult;
52
+ getDocument(routeId: string): SiteEditCommandSuccess<SiteEditRenderDocument>;
53
+ getObjectCapabilities(key: string, routeId?: string): SiteEditCommandSuccess<SiteEditObjectCapabilities>;
54
+ getObjectSummary(key: string, routeId?: string): SiteEditCommandSuccess<SiteEditObjectSummary>;
55
+ getObjectEditContext(key: string, routeId?: string): SiteEditCommandSuccess<SiteEditObjectEditContext>;
56
+ getObjectContentDetail(key: string, routeId?: string): SiteEditCommandSuccess<SiteEditObjectContentDetail>;
57
+ getObjectMediaDetail(key: string, routeId?: string): SiteEditCommandSuccess<SiteEditObjectMediaDetail>;
58
+ getClassNameSource(key: string, routeId?: string): SiteEditGetClassNameSourceCommandResult;
61
59
  setClassNameSource(request: SiteEditSetClassNameSourceRequest): Promise<SiteEditSetClassNameSourceResult>;
62
- executeOperation(request: SiteEditOperationRequest): Promise<SiteEditOperationResult>;
63
- undo(): Promise<SiteEditOperationResult>;
64
- redo(): Promise<SiteEditOperationResult>;
60
+ executeOperation(request: SiteEditOperationRequest): Promise<SiteEditOperationCommandResult>;
61
+ undo(): Promise<SiteEditOperationCommandResult>;
62
+ redo(): Promise<SiteEditOperationCommandResult>;
65
63
  notifyFileChanged(file: string): void;
66
64
  subscribe(listener: (event: SiteEditEvent) => void): () => void;
67
65
  dispose(): void;