@caryhu/codemine-forge 0.0.1-alpha.1 → 0.0.1-alpha.3

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.
@@ -34,10 +34,15 @@ class DefaultDevServerPreview {
34
34
  },
35
35
  };
36
36
  this.sessions.set(sessionId, record);
37
- const devScriptDiagnostics = await this.validateDevScript();
38
- if (devScriptDiagnostics.length > 0) {
39
- return this.failStart(record, devScriptDiagnostics, "dev-script");
37
+ const devManifestResult = await this.readDevManifest();
38
+ if (!devManifestResult.success) {
39
+ return this.failStart(record, devManifestResult.diagnostics, "dev-script");
40
40
  }
41
+ record.adapter = selectDevServerAdapter(devManifestResult.manifest);
42
+ record.session = {
43
+ ...record.session,
44
+ adapter: record.adapter,
45
+ };
41
46
  const buildResult = await this.options.buildPipeline.build({
42
47
  entry: options.entry,
43
48
  signal: options.signal,
@@ -45,15 +50,19 @@ class DefaultDevServerPreview {
45
50
  if (!buildResult.success) {
46
51
  return this.failStart(record, buildResult.diagnostics, "initial-build", buildResult);
47
52
  }
48
- const previewDocument = await this.createPreviewDocument(sessionId, previewUrl, 1, buildResult);
53
+ const previewDocument = await this.createPreviewDocument(sessionId, previewUrl, 1, buildResult, record.adapter);
54
+ record.lastSuccessfulBuildResult = buildResult;
55
+ record.lastSuccessfulPreviewDocument = previewDocument;
49
56
  const session = {
50
57
  ...record.session,
51
58
  status: "running",
59
+ adapter: record.adapter,
52
60
  revision: 1,
53
61
  updatedAt: this.now(),
54
62
  diagnostics: buildResult.diagnostics,
55
63
  buildResult,
56
64
  previewDocument,
65
+ errorOverlayDocument: undefined,
57
66
  };
58
67
  record.session = session;
59
68
  record.unsubscribe = this.options.fileSystem.watch((event) => {
@@ -88,6 +97,7 @@ class DefaultDevServerPreview {
88
97
  status: "stopped",
89
98
  updatedAt: this.now(),
90
99
  diagnostics: [],
100
+ errorOverlayDocument: undefined,
91
101
  };
92
102
  record.session = session;
93
103
  this.emit({ type: "dev:session-stopped", session });
@@ -106,21 +116,34 @@ class DefaultDevServerPreview {
106
116
  this.listeners.delete(listener);
107
117
  };
108
118
  }
109
- async validateDevScript() {
119
+ async readDevManifest() {
110
120
  try {
111
121
  const manifest = await (0, package_resolution_1.readPackageManifest)(this.options.fileSystem);
112
122
  const devScript = manifest.scripts.dev;
113
123
  if (devScript === undefined) {
114
- return [(0, diagnostics_1.createMissingDevScriptDiagnostic)()];
124
+ return {
125
+ success: false,
126
+ diagnostics: [(0, diagnostics_1.createMissingDevScriptDiagnostic)()],
127
+ };
115
128
  }
116
129
  if (!isSupportedViteDevScript(devScript)) {
117
- return [(0, diagnostics_1.createUnsupportedDevScriptDiagnostic)(devScript)];
130
+ return {
131
+ success: false,
132
+ diagnostics: [(0, diagnostics_1.createUnsupportedDevScriptDiagnostic)(devScript)],
133
+ };
118
134
  }
119
- return [];
135
+ return {
136
+ success: true,
137
+ diagnostics: [],
138
+ manifest,
139
+ };
120
140
  }
121
141
  catch (error) {
122
142
  if (error instanceof package_resolution_1.ForgePackageResolutionError) {
123
- return [error.diagnostic];
143
+ return {
144
+ success: false,
145
+ diagnostics: [error.diagnostic],
146
+ };
124
147
  }
125
148
  throw error;
126
149
  }
@@ -154,13 +177,59 @@ class DefaultDevServerPreview {
154
177
  return;
155
178
  }
156
179
  const previous = record.rebuildQueue ?? Promise.resolve(undefined);
157
- const next = previous.then(() => this.performRebuild(record, change.reason, record.entry));
180
+ const next = previous.then(() => this.handleWorkspaceChange(record, event, change.reason));
158
181
  record.rebuildQueue = next;
159
182
  void next.catch(() => {
160
183
  record.rebuildQueue = undefined;
161
184
  });
162
185
  }
163
- async performRebuild(record, reason, entry, signal) {
186
+ async handleWorkspaceChange(record, event, reason) {
187
+ const cssPath = getUpdatedCssPath(event);
188
+ if (cssPath !== undefined &&
189
+ record.session.status === "running" &&
190
+ this.wasCssPathBundled(record, cssPath)) {
191
+ await this.performStyleUpdate(record, cssPath, reason);
192
+ return;
193
+ }
194
+ const scriptPath = getUpdatedScriptModulePath(event);
195
+ if (scriptPath !== undefined &&
196
+ record.session.status === "running" &&
197
+ this.wasWorkspaceModuleBundled(record, scriptPath)) {
198
+ return this.performModuleUpdate(record, scriptPath, reason);
199
+ }
200
+ return this.performRebuild(record, reason, record.entry);
201
+ }
202
+ wasCssPathBundled(record, path) {
203
+ const styleId = createForgeCssStyleId(path);
204
+ return (record.lastSuccessfulBuildResult?.outputFiles.some((file) => file.contentType === "text/javascript" &&
205
+ file.content.includes(styleId)) ?? false);
206
+ }
207
+ wasWorkspaceModuleBundled(record, path) {
208
+ return (record.lastSuccessfulBuildResult?.browserBundle?.modules.some((moduleRecord) => moduleRecord.origin === "workspace" &&
209
+ moduleRecord.sourcePath === path) ?? false);
210
+ }
211
+ async performStyleUpdate(record, sourcePath, reason) {
212
+ const content = await this.options.fileSystem.readText(sourcePath);
213
+ const session = {
214
+ ...record.session,
215
+ status: "running",
216
+ updatedAt: this.now(),
217
+ errorOverlayDocument: undefined,
218
+ };
219
+ record.session = session;
220
+ this.emit({
221
+ type: "preview:style-updated",
222
+ session,
223
+ styleUpdate: {
224
+ content,
225
+ contentType: "text/css",
226
+ sourcePath,
227
+ styleId: createForgeCssStyleId(sourcePath),
228
+ },
229
+ reason,
230
+ });
231
+ }
232
+ async performModuleUpdate(record, sourcePath, reason) {
164
233
  if (record.session.status === "stopped") {
165
234
  const diagnostic = (0, diagnostics_1.createSessionStoppedDiagnostic)(record.session.id);
166
235
  return {
@@ -169,37 +238,74 @@ class DefaultDevServerPreview {
169
238
  diagnostics: [diagnostic],
170
239
  };
171
240
  }
241
+ const previousBuildResult = record.lastSuccessfulBuildResult;
172
242
  record.session = {
173
243
  ...record.session,
174
244
  status: "rebuilding",
175
245
  updatedAt: this.now(),
246
+ errorOverlayDocument: undefined,
176
247
  };
177
- const buildResult = await this.options.buildPipeline.build({ entry, signal });
248
+ const buildResult = await this.options.buildPipeline.build({
249
+ entry: record.entry,
250
+ });
178
251
  if (!buildResult.success) {
179
- const session = {
180
- ...record.session,
181
- status: "failed",
182
- updatedAt: this.now(),
183
- diagnostics: buildResult.diagnostics,
184
- buildResult,
185
- };
186
- record.session = session;
187
- this.emit({
188
- type: "dev:session-failed",
189
- session,
190
- diagnostics: buildResult.diagnostics,
191
- buildResult,
192
- reason,
193
- });
252
+ return this.completeFailedRebuild(record, reason, buildResult);
253
+ }
254
+ const moduleUpdate = createModuleUpdate(previousBuildResult, buildResult, sourcePath);
255
+ if (moduleUpdate === undefined) {
256
+ return this.completeSuccessfulRefresh(record, reason, buildResult);
257
+ }
258
+ record.lastSuccessfulBuildResult = buildResult;
259
+ const session = {
260
+ ...record.session,
261
+ status: "running",
262
+ updatedAt: this.now(),
263
+ diagnostics: buildResult.diagnostics,
264
+ buildResult,
265
+ previewDocument: record.lastSuccessfulPreviewDocument ?? record.session.previewDocument,
266
+ errorOverlayDocument: undefined,
267
+ };
268
+ record.session = session;
269
+ this.emit({
270
+ type: "preview:module-updated",
271
+ session,
272
+ moduleUpdate,
273
+ buildResult,
274
+ reason,
275
+ });
276
+ return {
277
+ success: true,
278
+ session,
279
+ diagnostics: buildResult.diagnostics,
280
+ buildResult,
281
+ };
282
+ }
283
+ async performRebuild(record, reason, entry, signal) {
284
+ if (record.session.status === "stopped") {
285
+ const diagnostic = (0, diagnostics_1.createSessionStoppedDiagnostic)(record.session.id);
194
286
  return {
195
287
  success: false,
196
- session,
197
- diagnostics: buildResult.diagnostics,
198
- buildResult,
288
+ session: record.session,
289
+ diagnostics: [diagnostic],
199
290
  };
200
291
  }
292
+ record.session = {
293
+ ...record.session,
294
+ status: "rebuilding",
295
+ updatedAt: this.now(),
296
+ errorOverlayDocument: undefined,
297
+ };
298
+ const buildResult = await this.options.buildPipeline.build({ entry, signal });
299
+ if (!buildResult.success) {
300
+ return this.completeFailedRebuild(record, reason, buildResult);
301
+ }
302
+ return this.completeSuccessfulRefresh(record, reason, buildResult);
303
+ }
304
+ async completeSuccessfulRefresh(record, reason, buildResult) {
201
305
  const revision = record.session.revision + 1;
202
- const previewDocument = await this.createPreviewDocument(record.session.id, record.session.previewUrl, revision, buildResult);
306
+ const previewDocument = await this.createPreviewDocument(record.session.id, record.session.previewUrl, revision, buildResult, record.adapter);
307
+ record.lastSuccessfulBuildResult = buildResult;
308
+ record.lastSuccessfulPreviewDocument = previewDocument;
203
309
  const session = {
204
310
  ...record.session,
205
311
  status: "running",
@@ -208,6 +314,7 @@ class DefaultDevServerPreview {
208
314
  diagnostics: buildResult.diagnostics,
209
315
  buildResult,
210
316
  previewDocument,
317
+ errorOverlayDocument: undefined,
211
318
  };
212
319
  record.session = session;
213
320
  this.emit({
@@ -223,11 +330,41 @@ class DefaultDevServerPreview {
223
330
  buildResult,
224
331
  };
225
332
  }
226
- async createPreviewDocument(sessionId, previewUrl, revision, buildResult) {
333
+ completeFailedRebuild(record, reason, buildResult) {
334
+ const previousPreviewDocument = record.lastSuccessfulPreviewDocument ?? record.session.previewDocument;
335
+ const errorOverlayDocument = previousPreviewDocument === undefined
336
+ ? undefined
337
+ : (0, preview_document_1.createForgePreviewErrorOverlayDocument)(previousPreviewDocument, buildResult.diagnostics);
338
+ const session = {
339
+ ...record.session,
340
+ status: "failed",
341
+ updatedAt: this.now(),
342
+ diagnostics: buildResult.diagnostics,
343
+ buildResult,
344
+ previewDocument: previousPreviewDocument,
345
+ errorOverlayDocument,
346
+ };
347
+ record.session = session;
348
+ this.emit({
349
+ type: "dev:session-failed",
350
+ session,
351
+ diagnostics: buildResult.diagnostics,
352
+ buildResult,
353
+ reason,
354
+ });
355
+ return {
356
+ success: false,
357
+ session,
358
+ diagnostics: buildResult.diagnostics,
359
+ buildResult,
360
+ };
361
+ }
362
+ async createPreviewDocument(sessionId, previewUrl, revision, buildResult, adapter) {
227
363
  const htmlShell = (await this.options.fileSystem.exists("/index.html"))
228
364
  ? await this.options.fileSystem.readText("/index.html")
229
365
  : undefined;
230
366
  return (0, preview_document_1.createForgePreviewDocument)({
367
+ adapter,
231
368
  buildResult,
232
369
  htmlShell,
233
370
  previewUrl,
@@ -269,6 +406,30 @@ exports.isSupportedViteDevScript = isSupportedViteDevScript;
269
406
  function createPreviewUrl(sessionId) {
270
407
  return `/preview/${encodeURIComponent(sessionId)}/`;
271
408
  }
409
+ function selectDevServerAdapter(manifest) {
410
+ const dependencies = {
411
+ ...manifest.dependencies,
412
+ ...manifest.devDependencies,
413
+ };
414
+ if ("react" in dependencies || "react-dom" in dependencies) {
415
+ return createDevServerAdapterMetadata("vite-react", "react");
416
+ }
417
+ if ("vue" in dependencies) {
418
+ return createDevServerAdapterMetadata("vite-vue", "vue");
419
+ }
420
+ return createDevServerAdapterMetadata("vite-vanilla", "vanilla");
421
+ }
422
+ function createDevServerAdapterMetadata(name, framework) {
423
+ return {
424
+ framework,
425
+ hmrMode: "hmr-lite",
426
+ name,
427
+ preservesState: false,
428
+ };
429
+ }
430
+ function createForgeCssStyleId(path) {
431
+ return `forge-css:${path}`;
432
+ }
272
433
  function describeFileChange(event) {
273
434
  const path = event.type === "file:renamed" ? event.to : event.path;
274
435
  if (path.startsWith("/.forge/")) {
@@ -278,3 +439,56 @@ function describeFileChange(event) {
278
439
  reason: `${event.type}:${path}`,
279
440
  };
280
441
  }
442
+ function getUpdatedCssPath(event) {
443
+ return event.type === "file:updated" &&
444
+ event.path.endsWith(".css") &&
445
+ !event.path.endsWith(".module.css")
446
+ ? event.path
447
+ : undefined;
448
+ }
449
+ function getUpdatedScriptModulePath(event) {
450
+ return event.type === "file:updated" && isHmrScriptPath(event.path)
451
+ ? event.path
452
+ : undefined;
453
+ }
454
+ function createModuleUpdate(previousBuildResult, buildResult, sourcePath) {
455
+ const previousBundle = previousBuildResult?.browserBundle;
456
+ const nextBundle = buildResult.browserBundle;
457
+ if (previousBundle === undefined ||
458
+ nextBundle === undefined ||
459
+ previousBundle.entry === sourcePath ||
460
+ nextBundle.entry === sourcePath ||
461
+ !sameOutputPaths(previousBundle.outputPaths, nextBundle.outputPaths)) {
462
+ return undefined;
463
+ }
464
+ const previousModule = findWorkspaceModule(previousBundle.modules, sourcePath);
465
+ const nextModule = findWorkspaceModule(nextBundle.modules, sourcePath);
466
+ if (previousModule === undefined ||
467
+ nextModule === undefined ||
468
+ previousModule.outputPath !== nextModule.outputPath) {
469
+ return undefined;
470
+ }
471
+ const outputFile = buildResult.outputFiles.find((file) => file.path === nextModule.outputPath &&
472
+ file.contentType === "text/javascript");
473
+ return outputFile === undefined
474
+ ? undefined
475
+ : {
476
+ content: outputFile.content,
477
+ contentType: "text/javascript",
478
+ outputPath: nextModule.outputPath,
479
+ sourcePath,
480
+ };
481
+ }
482
+ function findWorkspaceModule(modules, sourcePath) {
483
+ return modules.find((moduleRecord) => moduleRecord.origin === "workspace" &&
484
+ moduleRecord.sourcePath === sourcePath);
485
+ }
486
+ function sameOutputPaths(left, right) {
487
+ const sortedLeft = [...left].sort();
488
+ const sortedRight = [...right].sort();
489
+ return (sortedLeft.length === sortedRight.length &&
490
+ sortedLeft.every((path, index) => path === sortedRight[index]));
491
+ }
492
+ function isHmrScriptPath(path) {
493
+ return /\.(?:jsx?|tsx?)$/i.test(path);
494
+ }
@@ -4,6 +4,15 @@ import type { ForgeFileEvent, ForgeUnsubscribe, ForgeVirtualFileSystem } from ".
4
4
  export declare const DEV_SERVER_PREVIEW_CAPABILITY: "dev-server-preview";
5
5
  export type ForgeDevSessionStatus = "starting" | "running" | "rebuilding" | "stopped" | "failed";
6
6
  export type ForgeDevServerPreviewDiagnosticCode = "missing_dev_script" | "session_not_found" | "session_stopped" | "unsupported_dev_script";
7
+ export type ForgeDevServerAdapterName = "vite-react" | "vite-vanilla" | "vite-vue";
8
+ export type ForgeDevServerAdapterFramework = "react" | "vanilla" | "vue";
9
+ export type ForgeDevServerAdapterHmrMode = "hmr-lite";
10
+ export interface ForgeDevServerAdapterMetadata {
11
+ readonly framework: ForgeDevServerAdapterFramework;
12
+ readonly hmrMode: ForgeDevServerAdapterHmrMode;
13
+ readonly name: ForgeDevServerAdapterName;
14
+ readonly preservesState: false;
15
+ }
7
16
  export interface ForgeDevServerPreviewDiagnostic {
8
17
  readonly code: ForgeDevServerPreviewDiagnosticCode;
9
18
  readonly severity: "error";
@@ -19,7 +28,20 @@ export interface ForgePreviewDocument {
19
28
  readonly revision: number;
20
29
  readonly sessionId: string;
21
30
  }
31
+ export interface ForgePreviewStyleUpdate {
32
+ readonly content: string;
33
+ readonly contentType: "text/css";
34
+ readonly sourcePath: string;
35
+ readonly styleId: string;
36
+ }
37
+ export interface ForgePreviewModuleUpdate {
38
+ readonly content: string;
39
+ readonly contentType: "text/javascript";
40
+ readonly outputPath: string;
41
+ readonly sourcePath: string;
42
+ }
22
43
  export interface ForgeDevSession {
44
+ readonly adapter?: ForgeDevServerAdapterMetadata;
23
45
  readonly id: string;
24
46
  readonly status: ForgeDevSessionStatus;
25
47
  readonly previewUrl: string;
@@ -29,6 +51,7 @@ export interface ForgeDevSession {
29
51
  readonly diagnostics: readonly ForgeDevSessionDiagnostic[];
30
52
  readonly buildResult?: ForgeBuildResult;
31
53
  readonly previewDocument?: ForgePreviewDocument;
54
+ readonly errorOverlayDocument?: ForgePreviewDocument;
32
55
  }
33
56
  export interface ForgeStartDevSessionOptions {
34
57
  readonly entry?: string;
@@ -57,7 +80,7 @@ export interface ForgeDevSessionStopResult {
57
80
  readonly session?: ForgeDevSession;
58
81
  readonly diagnostics: readonly ForgeDevSessionDiagnostic[];
59
82
  }
60
- export type ForgeDevServerPreviewEvent = ForgeDevSessionFailedEvent | ForgeDevSessionStartedEvent | ForgeDevSessionStoppedEvent | ForgePreviewRefreshedEvent;
83
+ export type ForgeDevServerPreviewEvent = ForgeDevSessionFailedEvent | ForgePreviewModuleUpdatedEvent | ForgeDevSessionStartedEvent | ForgeDevSessionStoppedEvent | ForgePreviewStyleUpdatedEvent | ForgePreviewRefreshedEvent;
61
84
  export interface ForgeDevSessionStartedEvent {
62
85
  readonly type: "dev:session-started";
63
86
  readonly session: ForgeDevSession;
@@ -72,6 +95,19 @@ export interface ForgePreviewRefreshedEvent {
72
95
  readonly buildResult: ForgeBuildResult;
73
96
  readonly reason: string;
74
97
  }
98
+ export interface ForgePreviewStyleUpdatedEvent {
99
+ readonly type: "preview:style-updated";
100
+ readonly session: ForgeDevSession;
101
+ readonly styleUpdate: ForgePreviewStyleUpdate;
102
+ readonly reason: string;
103
+ }
104
+ export interface ForgePreviewModuleUpdatedEvent {
105
+ readonly type: "preview:module-updated";
106
+ readonly session: ForgeDevSession;
107
+ readonly moduleUpdate: ForgePreviewModuleUpdate;
108
+ readonly buildResult: ForgeBuildResult;
109
+ readonly reason: string;
110
+ }
75
111
  export interface ForgeDevSessionFailedEvent {
76
112
  readonly type: "dev:session-failed";
77
113
  readonly session: ForgeDevSession;
@@ -87,6 +123,7 @@ export interface ForgeDevServerPreviewOptions {
87
123
  readonly now?: () => string;
88
124
  }
89
125
  export interface ForgeCreatePreviewDocumentOptions {
126
+ readonly adapter?: ForgeDevServerAdapterMetadata;
90
127
  readonly buildResult: ForgeBuildResult;
91
128
  readonly htmlShell?: string;
92
129
  readonly previewUrl: string;
package/dist/index.d.ts CHANGED
@@ -1,8 +1,8 @@
1
1
  export { createEsbuildWasmWorkerMessageHandler, createEsbuildWasmWorkerService, createTransformFailureDiagnostic, createUnsupportedOperationDiagnostic, createWasmInitializationFailureDiagnostic, createWorkerNotInitializedDiagnostic, createWorkerStartupFailureDiagnostic, DefaultEsbuildWasmWorkerService, ESBUILD_WASM_WORKER_CAPABILITY, ESBUILD_WASM_WORKER_PROTOCOL, installEsbuildWasmWorker, type ForgeEsbuildWasmDiagnosticCauseCategory, type ForgeEsbuildWasmInitializeFailureResult, type ForgeEsbuildWasmInitializeRequest, type ForgeEsbuildWasmInitializeResult, type ForgeEsbuildWasmInitializeSuccessResult, type ForgeEsbuildWasmInitializeWorkerFailureResponse, type ForgeEsbuildWasmInitializeWorkerRequest, type ForgeEsbuildWasmInitializeWorkerSuccessResponse, type ForgeEsbuildWasmRuntime, type ForgeEsbuildWasmRuntimeMetadata, type ForgeEsbuildWasmTransformFailureResult, type ForgeEsbuildWasmTransformLoader, type ForgeEsbuildWasmTransformRequest, type ForgeEsbuildWasmTransformResult, type ForgeEsbuildWasmTransformSuccessResult, type ForgeEsbuildWasmTransformWarning, type ForgeEsbuildWasmTransformWorkerFailureResponse, type ForgeEsbuildWasmTransformWorkerRequest, type ForgeEsbuildWasmTransformWorkerSuccessResponse, type ForgeEsbuildWasmUnsupportedOperation, type ForgeEsbuildWasmUnsupportedOperationResult, type ForgeEsbuildWasmUrl, type ForgeEsbuildWasmWorkerAdapterOptions, type ForgeEsbuildWasmWorkerDiagnostic, type ForgeEsbuildWasmWorkerDiagnosticCode, type ForgeEsbuildWasmWorkerFactory, type ForgeEsbuildWasmWorkerGlobalScope, type ForgeEsbuildWasmWorkerMessageEvent, type ForgeEsbuildWasmWorkerPort, type ForgeEsbuildWasmWorkerRequestMessage, type ForgeEsbuildWasmWorkerResponseMessage, type ForgeEsbuildWasmWorkerService, type ForgeEsbuildWasmWorkerServiceOptions, } from "./esbuild-wasm-worker";
2
2
  export { createForgeController, openForgeController, type ForgeController, type ForgeControllerOptions, type ForgeOpenControllerOptions, } from "./forge-controller";
3
- export { BUILD_PIPELINE_CAPABILITY, createBuildCancelledDiagnostic, createBuildPipeline, createEsbuildWorkerTransformDiagnostic, createMissingBuildScriptDiagnostic, createMissingEntryDiagnostic, createUnresolvedImportDiagnostic, createUnsupportedBuildScriptDiagnostic, createViteConfigNotExecutedDiagnostic, DefaultBuildPipeline, isSupportedViteBuildScript, type ForgeBrowserBundle, type ForgeBrowserBundleManifest, type ForgeBuildDiagnostic, type ForgeBuildManifest, type ForgeBuildMode, type ForgeBuildOutputFile, type ForgeBuildPipeline, type ForgeBuildPipelineDiagnostic, type ForgeBuildPipelineDiagnosticCode, type ForgeBuildPipelineOptions, type ForgeBuildRequest, type ForgeBuildResult, type ForgeBuildTiming, } from "./build-pipeline";
3
+ export { BUILD_PIPELINE_CAPABILITY, createBuildCancelledDiagnostic, createBuildPipeline, createEsbuildWorkerTransformDiagnostic, createMissingBuildScriptDiagnostic, createMissingEntryDiagnostic, createUnresolvedImportDiagnostic, createUnsupportedBuildScriptDiagnostic, createViteConfigNotExecutedDiagnostic, DefaultBuildPipeline, isSupportedViteBuildScript, type ForgeBrowserBundle, type ForgeBrowserBundleManifest, type ForgeBrowserBundleModule, type ForgeBrowserBundleModuleOrigin, type ForgeBuildDiagnostic, type ForgeBuildManifest, type ForgeBuildMode, type ForgeBuildOutputFile, type ForgeBuildPipeline, type ForgeBuildPipelineDiagnostic, type ForgeBuildPipelineDiagnosticCode, type ForgeBuildPipelineOptions, type ForgeBuildRequest, type ForgeBuildResult, type ForgeBuildTiming, } from "./build-pipeline";
4
4
  export { createInvalidDependencyDiagnostic, createInvalidManifestDiagnostic, createCdnPackageSource, createOfflineCacheMissDiagnostic, createPackageCacheKey, createPackageResolutionDiagnostic, createPackageResolver, createUnsupportedRangeDiagnostic, createUnresolvedPackageDiagnostic, collectDependencyRequests, DEFAULT_FORGE_MANIFEST_PATH, DefaultPackageResolver, ForgePackageResolutionError, PACKAGE_RESOLUTION_CAPABILITY, readPackageManifest, type ForgeBundleAliases, type ForgeCdnPackageFetch, type ForgeCdnPackageMetadataUrlFactory, type ForgeCdnPackageSourceOptions, type ForgeDependencyKind, type ForgeDependencyRequest, type ForgeImportMap, type ForgePackageCacheMode, type ForgePackageDiagnostic, type ForgePackageFile, type ForgePackageLockMetadata, type ForgePackageLockPackage, type ForgePackageManifest, type ForgePackageRecord, type ForgePackageResolutionDiagnostic, type ForgePackageResolutionDiagnosticCode, type ForgePackageResolutionMode, type ForgePackageResolutionResult, type ForgePackageResolver, type ForgePackageResolverOptions, type ForgePackageSource, type ForgeResolvePackagesOptions, } from "./package-resolution";
5
- export { createDevServerPreview, createForgePreviewDocument, createMissingDevScriptDiagnostic, createSessionNotFoundDiagnostic, createSessionStoppedDiagnostic, createUnsupportedDevScriptDiagnostic, DefaultDevServerPreview, DEV_SERVER_PREVIEW_CAPABILITY, isSupportedViteDevScript, type ForgeCreatePreviewDocumentOptions, type ForgeDevServerPreview, type ForgeDevServerPreviewDiagnostic, type ForgeDevServerPreviewDiagnosticCode, type ForgeDevServerPreviewEvent, type ForgeDevServerPreviewEventListener, type ForgeDevServerPreviewOptions, type ForgeDevSession, type ForgeDevSessionDiagnostic, type ForgeDevSessionFailedEvent, type ForgeDevSessionFileChange, type ForgeDevSessionRefreshResult, type ForgeDevSessionStartedEvent, type ForgeDevSessionStartResult, type ForgeDevSessionStatus, type ForgeDevSessionStoppedEvent, type ForgeDevSessionStopResult, type ForgePreviewDocument, type ForgePreviewRefreshedEvent, type ForgeRebuildDevSessionOptions, type ForgeStartDevSessionOptions, } from "./dev-server-preview";
5
+ export { createDevServerPreview, createForgePreviewDocument, createForgePreviewErrorOverlayDocument, createMissingDevScriptDiagnostic, createSessionNotFoundDiagnostic, createSessionStoppedDiagnostic, createUnsupportedDevScriptDiagnostic, DefaultDevServerPreview, DEV_SERVER_PREVIEW_CAPABILITY, isSupportedViteDevScript, type ForgeCreatePreviewDocumentOptions, type ForgeDevServerAdapterFramework, type ForgeDevServerAdapterHmrMode, type ForgeDevServerAdapterMetadata, type ForgeDevServerAdapterName, type ForgeDevServerPreview, type ForgeDevServerPreviewDiagnostic, type ForgeDevServerPreviewDiagnosticCode, type ForgeDevServerPreviewEvent, type ForgeDevServerPreviewEventListener, type ForgeDevServerPreviewOptions, type ForgeDevSession, type ForgeDevSessionDiagnostic, type ForgeDevSessionFailedEvent, type ForgeDevSessionFileChange, type ForgeDevSessionRefreshResult, type ForgeDevSessionStartedEvent, type ForgeDevSessionStartResult, type ForgeDevSessionStatus, type ForgeDevSessionStoppedEvent, type ForgeDevSessionStopResult, type ForgePreviewDocument, type ForgePreviewModuleUpdate, type ForgePreviewModuleUpdatedEvent, type ForgePreviewRefreshedEvent, type ForgePreviewStyleUpdate, type ForgePreviewStyleUpdatedEvent, type ForgeRebuildDevSessionOptions, type ForgeStartDevSessionOptions, } from "./dev-server-preview";
6
6
  export { createForgeTerminal, createNpmInstallCommandHandler, createNpmRunBuildCommandHandler, createNpmRunDevCommandHandler, createParseErrorDiagnostic, createUnsupportedCommandDiagnostic, DefaultForgeTerminal, NpmInstallCommandHandler, NpmRunBuildCommandHandler, NpmRunDevCommandHandler, parseForgeCommandText, TERMINAL_COMMANDS_CAPABILITY, type ForgeCommand, type ForgeCommandContext, type ForgeCommandDiagnostic, type ForgeCommandHandler, type ForgeCommandParseResult, type ForgeCommandResult, type ForgeTerminal, type ForgeTerminalDiagnostic, type ForgeTerminalDiagnosticCode, type ForgeTerminalExecuteOptions, type ForgeTerminalOptions, type ForgeTerminalOutputKind, type ForgeTerminalOutputLine, } from "./terminal-commands";
7
7
  export { completeForgeTelemetryTiming, createForgeUnsupportedPackageReason, emitForgeTelemetry, startForgeTelemetryTiming, summarizeForgeTelemetryDiagnostics, TELEMETRY_CAPABILITY, type ForgeBuildTelemetryEvent, type ForgePackageResolutionTelemetryEvent, type ForgeTelemetryDiagnosticLike, type ForgeTelemetryDiagnosticSummary, type ForgeTelemetryEvent, type ForgeTelemetryOperation, type ForgeTelemetryOutcome, type ForgeTelemetryReporter, type ForgeTelemetryTiming, type ForgeTelemetryTimingStart, type ForgeUnsupportedPackageReason, } from "./telemetry";
8
8
  export { createVirtualFileSystem, createForgeDiagnostic, createInvalidPathDiagnostic, createInvalidSnapshotDiagnostic, createMissingParentDiagnostic, createNotFoundDiagnostic, createNotImplementedDiagnostic, createPathTraversalDiagnostic, createIndexedDbForgeStorage, createLimitExceededDiagnostic, exportWorkspaceSnapshot, ForgeFileSystemError, DEFAULT_FORGE_VFS_LIMITS, FORGE_INDEXED_DB_NAME, FORGE_INDEXED_DB_STORES, FORGE_INDEXED_DB_VERSION, FORGE_WORKSPACE_SNAPSHOT_EXPORT_SCHEMA_VERSION, IndexedDbForgeStorage, importWorkspaceSnapshot, normalizeForgePath, openVirtualFileSystem, resolveForgeVirtualFileSystemLimits, VIRTUAL_FILE_SYSTEM_CAPABILITY, type ForgeBuildCacheRecord, type ForgeDiagnosticInput, type ForgeDeleteOptions, type ForgeDiagnostic, type ForgeDiagnosticCode, type ForgeDiagnosticSeverity, type ForgeDirEntry, type ForgeFileCreatedEvent, type ForgeFileDeletedEvent, type ForgeFileEvent, type ForgeFileKind, type ForgeFileRecord, type ForgeFileRenamedEvent, type ForgeFileSource, type ForgeFileStat, type ForgeFileUpdatedEvent, type ForgeFileWatchListener, type ForgeLimitDiagnostic, type ForgeMkdirOptions, type ForgeOpenVirtualFileSystemOptions, type ForgePackageCacheRecord, type ForgePersistedWorkspace, type ForgeSerializedFileRecord, type ForgeSerializedWorkspaceSnapshot, type ForgeSerializedWorkspaceSnapshotPayload, type ForgeVirtualFileSystemLimits, type ResolvedForgeVirtualFileSystemLimits, type ForgeRestoreOptions, type ForgeSnapshot, type ForgeSnapshotOptions, type ForgeUnsubscribe, type ForgeVirtualFileSystemOptions, type ForgeVirtualFileSystemStorage, type ForgeVirtualFileSystem, type ForgeWorkspace, type ForgeWorkspaceMetadata, type ForgeWorkspaceSnapshotExportOptions, type ForgeWriteFileOptions, type ForgePathNormalizationResult, type IndexedDbForgeStorageOptions, } from "./virtual-file-system";
package/dist/index.js CHANGED
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.createNpmInstallCommandHandler = exports.createForgeTerminal = exports.isSupportedViteDevScript = exports.DEV_SERVER_PREVIEW_CAPABILITY = exports.DefaultDevServerPreview = exports.createUnsupportedDevScriptDiagnostic = exports.createSessionStoppedDiagnostic = exports.createSessionNotFoundDiagnostic = exports.createMissingDevScriptDiagnostic = exports.createForgePreviewDocument = exports.createDevServerPreview = exports.readPackageManifest = exports.PACKAGE_RESOLUTION_CAPABILITY = exports.ForgePackageResolutionError = exports.DefaultPackageResolver = exports.DEFAULT_FORGE_MANIFEST_PATH = exports.collectDependencyRequests = exports.createUnresolvedPackageDiagnostic = exports.createUnsupportedRangeDiagnostic = exports.createPackageResolver = exports.createPackageResolutionDiagnostic = exports.createPackageCacheKey = exports.createOfflineCacheMissDiagnostic = exports.createCdnPackageSource = exports.createInvalidManifestDiagnostic = exports.createInvalidDependencyDiagnostic = exports.isSupportedViteBuildScript = exports.DefaultBuildPipeline = exports.createViteConfigNotExecutedDiagnostic = exports.createUnsupportedBuildScriptDiagnostic = exports.createUnresolvedImportDiagnostic = exports.createMissingEntryDiagnostic = exports.createMissingBuildScriptDiagnostic = exports.createEsbuildWorkerTransformDiagnostic = exports.createBuildPipeline = exports.createBuildCancelledDiagnostic = exports.BUILD_PIPELINE_CAPABILITY = exports.openForgeController = exports.createForgeController = exports.installEsbuildWasmWorker = exports.ESBUILD_WASM_WORKER_PROTOCOL = exports.ESBUILD_WASM_WORKER_CAPABILITY = exports.DefaultEsbuildWasmWorkerService = exports.createWorkerStartupFailureDiagnostic = exports.createWorkerNotInitializedDiagnostic = exports.createWasmInitializationFailureDiagnostic = exports.createUnsupportedOperationDiagnostic = exports.createTransformFailureDiagnostic = exports.createEsbuildWasmWorkerService = exports.createEsbuildWasmWorkerMessageHandler = void 0;
4
- exports.VIRTUAL_FILE_SYSTEM_CAPABILITY = exports.resolveForgeVirtualFileSystemLimits = exports.openVirtualFileSystem = exports.normalizeForgePath = exports.importWorkspaceSnapshot = exports.IndexedDbForgeStorage = exports.FORGE_WORKSPACE_SNAPSHOT_EXPORT_SCHEMA_VERSION = exports.FORGE_INDEXED_DB_VERSION = exports.FORGE_INDEXED_DB_STORES = exports.FORGE_INDEXED_DB_NAME = exports.DEFAULT_FORGE_VFS_LIMITS = exports.ForgeFileSystemError = exports.exportWorkspaceSnapshot = exports.createLimitExceededDiagnostic = exports.createIndexedDbForgeStorage = exports.createPathTraversalDiagnostic = exports.createNotImplementedDiagnostic = exports.createNotFoundDiagnostic = exports.createMissingParentDiagnostic = exports.createInvalidSnapshotDiagnostic = exports.createInvalidPathDiagnostic = exports.createForgeDiagnostic = exports.createVirtualFileSystem = exports.TELEMETRY_CAPABILITY = exports.summarizeForgeTelemetryDiagnostics = exports.startForgeTelemetryTiming = exports.emitForgeTelemetry = exports.createForgeUnsupportedPackageReason = exports.completeForgeTelemetryTiming = exports.TERMINAL_COMMANDS_CAPABILITY = exports.parseForgeCommandText = exports.NpmRunDevCommandHandler = exports.NpmRunBuildCommandHandler = exports.NpmInstallCommandHandler = exports.DefaultForgeTerminal = exports.createUnsupportedCommandDiagnostic = exports.createParseErrorDiagnostic = exports.createNpmRunDevCommandHandler = exports.createNpmRunBuildCommandHandler = void 0;
3
+ exports.createForgeTerminal = exports.isSupportedViteDevScript = exports.DEV_SERVER_PREVIEW_CAPABILITY = exports.DefaultDevServerPreview = exports.createUnsupportedDevScriptDiagnostic = exports.createSessionStoppedDiagnostic = exports.createSessionNotFoundDiagnostic = exports.createMissingDevScriptDiagnostic = exports.createForgePreviewErrorOverlayDocument = exports.createForgePreviewDocument = exports.createDevServerPreview = exports.readPackageManifest = exports.PACKAGE_RESOLUTION_CAPABILITY = exports.ForgePackageResolutionError = exports.DefaultPackageResolver = exports.DEFAULT_FORGE_MANIFEST_PATH = exports.collectDependencyRequests = exports.createUnresolvedPackageDiagnostic = exports.createUnsupportedRangeDiagnostic = exports.createPackageResolver = exports.createPackageResolutionDiagnostic = exports.createPackageCacheKey = exports.createOfflineCacheMissDiagnostic = exports.createCdnPackageSource = exports.createInvalidManifestDiagnostic = exports.createInvalidDependencyDiagnostic = exports.isSupportedViteBuildScript = exports.DefaultBuildPipeline = exports.createViteConfigNotExecutedDiagnostic = exports.createUnsupportedBuildScriptDiagnostic = exports.createUnresolvedImportDiagnostic = exports.createMissingEntryDiagnostic = exports.createMissingBuildScriptDiagnostic = exports.createEsbuildWorkerTransformDiagnostic = exports.createBuildPipeline = exports.createBuildCancelledDiagnostic = exports.BUILD_PIPELINE_CAPABILITY = exports.openForgeController = exports.createForgeController = exports.installEsbuildWasmWorker = exports.ESBUILD_WASM_WORKER_PROTOCOL = exports.ESBUILD_WASM_WORKER_CAPABILITY = exports.DefaultEsbuildWasmWorkerService = exports.createWorkerStartupFailureDiagnostic = exports.createWorkerNotInitializedDiagnostic = exports.createWasmInitializationFailureDiagnostic = exports.createUnsupportedOperationDiagnostic = exports.createTransformFailureDiagnostic = exports.createEsbuildWasmWorkerService = exports.createEsbuildWasmWorkerMessageHandler = void 0;
4
+ exports.VIRTUAL_FILE_SYSTEM_CAPABILITY = exports.resolveForgeVirtualFileSystemLimits = exports.openVirtualFileSystem = exports.normalizeForgePath = exports.importWorkspaceSnapshot = exports.IndexedDbForgeStorage = exports.FORGE_WORKSPACE_SNAPSHOT_EXPORT_SCHEMA_VERSION = exports.FORGE_INDEXED_DB_VERSION = exports.FORGE_INDEXED_DB_STORES = exports.FORGE_INDEXED_DB_NAME = exports.DEFAULT_FORGE_VFS_LIMITS = exports.ForgeFileSystemError = exports.exportWorkspaceSnapshot = exports.createLimitExceededDiagnostic = exports.createIndexedDbForgeStorage = exports.createPathTraversalDiagnostic = exports.createNotImplementedDiagnostic = exports.createNotFoundDiagnostic = exports.createMissingParentDiagnostic = exports.createInvalidSnapshotDiagnostic = exports.createInvalidPathDiagnostic = exports.createForgeDiagnostic = exports.createVirtualFileSystem = exports.TELEMETRY_CAPABILITY = exports.summarizeForgeTelemetryDiagnostics = exports.startForgeTelemetryTiming = exports.emitForgeTelemetry = exports.createForgeUnsupportedPackageReason = exports.completeForgeTelemetryTiming = exports.TERMINAL_COMMANDS_CAPABILITY = exports.parseForgeCommandText = exports.NpmRunDevCommandHandler = exports.NpmRunBuildCommandHandler = exports.NpmInstallCommandHandler = exports.DefaultForgeTerminal = exports.createUnsupportedCommandDiagnostic = exports.createParseErrorDiagnostic = exports.createNpmRunDevCommandHandler = exports.createNpmRunBuildCommandHandler = exports.createNpmInstallCommandHandler = void 0;
5
5
  var esbuild_wasm_worker_1 = require("./esbuild-wasm-worker");
6
6
  Object.defineProperty(exports, "createEsbuildWasmWorkerMessageHandler", { enumerable: true, get: function () { return esbuild_wasm_worker_1.createEsbuildWasmWorkerMessageHandler; } });
7
7
  Object.defineProperty(exports, "createEsbuildWasmWorkerService", { enumerable: true, get: function () { return esbuild_wasm_worker_1.createEsbuildWasmWorkerService; } });
@@ -48,6 +48,7 @@ Object.defineProperty(exports, "readPackageManifest", { enumerable: true, get: f
48
48
  var dev_server_preview_1 = require("./dev-server-preview");
49
49
  Object.defineProperty(exports, "createDevServerPreview", { enumerable: true, get: function () { return dev_server_preview_1.createDevServerPreview; } });
50
50
  Object.defineProperty(exports, "createForgePreviewDocument", { enumerable: true, get: function () { return dev_server_preview_1.createForgePreviewDocument; } });
51
+ Object.defineProperty(exports, "createForgePreviewErrorOverlayDocument", { enumerable: true, get: function () { return dev_server_preview_1.createForgePreviewErrorOverlayDocument; } });
51
52
  Object.defineProperty(exports, "createMissingDevScriptDiagnostic", { enumerable: true, get: function () { return dev_server_preview_1.createMissingDevScriptDiagnostic; } });
52
53
  Object.defineProperty(exports, "createSessionNotFoundDiagnostic", { enumerable: true, get: function () { return dev_server_preview_1.createSessionNotFoundDiagnostic; } });
53
54
  Object.defineProperty(exports, "createSessionStoppedDiagnostic", { enumerable: true, get: function () { return dev_server_preview_1.createSessionStoppedDiagnostic; } });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@caryhu/codemine-forge",
3
- "version": "0.0.1-alpha.1",
3
+ "version": "0.0.1-alpha.3",
4
4
  "description": "Browser-side runtime layer for Codemine demos.",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",
@@ -18,6 +18,7 @@
18
18
  "access": "public"
19
19
  },
20
20
  "dependencies": {
21
+ "@vue/compiler-sfc": "3.4.0",
21
22
  "esbuild-wasm": "^0.28.1",
22
23
  "typescript": "4.9.5"
23
24
  },
@@ -34,7 +35,7 @@
34
35
  "publish:npm": "node scripts/publish-npm.mjs",
35
36
  "typecheck": "tsc -p tsconfig.json",
36
37
  "test:build": "tsc -p tsconfig.test.json",
37
- "test": "pnpm run test:build && node test/virtual-file-system.test.mjs && node test/indexeddb-workspace-restore.test.mjs && node test/react-vite-template-dev-loop.test.mjs && node test/react-vite-template-diagnostics.test.mjs && node test/package-resolution.test.mjs && node test/build-pipeline.test.mjs && node test/dev-server-preview.test.mjs && node test/terminal-commands.test.mjs && node test/esbuild-wasm-worker.test.mjs && node test/browser-preview-execution.test.mjs && node test/demo-samples.test.mjs",
38
+ "test": "pnpm run test:build && node test/virtual-file-system.test.mjs && node test/indexeddb-workspace-restore.test.mjs && node test/react-vite-template-dev-loop.test.mjs && node test/react-vite-template-diagnostics.test.mjs && node test/vue-vite-template-dev-loop.test.mjs && node test/package-resolution.test.mjs && node test/build-pipeline.test.mjs && node test/dev-server-preview.test.mjs && node test/terminal-commands.test.mjs && node test/esbuild-wasm-worker.test.mjs && node test/browser-preview-execution.test.mjs && node test/demo-samples.test.mjs",
38
39
  "test:browser-preview": "pnpm run test:build && node test/browser-preview-execution.test.mjs",
39
40
  "test:demo-samples": "pnpm run test:build && node test/demo-samples.test.mjs",
40
41
  "test:static-demo": "node test/static-demo.test.mjs",