polen 0.11.0-next.27 → 0.11.0-next.29

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.
@@ -1 +1 @@
1
- {"version":3,"file":"generate.d.ts","sourceRoot":"","sources":["../../../../src/api/builder/ssg/generate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAA;AAK3C,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAA;AAGxD,OAAO,EAAgB,MAAM,EAAS,MAAM,QAAQ,CAAA;AAcpD,eAAO,MAAM,QAAQ,GAAI,QAAQ,MAAM,CAAC,MAAM,KAAG,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,UAAU,CA8MlF,CAAA"}
1
+ {"version":3,"file":"generate.d.ts","sourceRoot":"","sources":["../../../../src/api/builder/ssg/generate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAA;AAI3C,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAA;AAGxD,OAAO,EAA0B,MAAM,EAA8B,MAAM,QAAQ,CAAA;AAYnF,eAAO,MAAM,QAAQ,GAAI,QAAQ,MAAM,CAAC,MAAM,KAAG,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,UAAU,CA0PlF,CAAA"}
@@ -1,16 +1,14 @@
1
1
  import { Routes } from '#api/routes/$';
2
- import { debugPolen } from '#singletons/debug';
3
2
  import { Worker } from '@effect/platform';
4
3
  import { NodeContext, NodeWorker } from '@effect/platform-node';
5
4
  import { FileSystem } from '@effect/platform/FileSystem';
6
5
  import { Path } from '@wollybeard/kit';
7
6
  import consola from 'consola';
8
- import { Array, Chunk, Effect, Layer } from 'effect';
7
+ import { Array, Chunk, Duration, Effect, Either, Layer, Logger, Ref } from 'effect';
9
8
  import getPort from 'get-port';
10
9
  import { cpus, totalmem } from 'node:os';
11
10
  import { GeneratePagesMessage, PageMessage, ServerMessage, StartServerMessage, } from './worker-messages.js';
12
11
  import { createPageSpawner, createServerSpawner } from './worker-spawners.js';
13
- const debug = debugPolen.sub(`api:ssg:generate`);
14
12
  export const generate = (config) => Effect.gen(function* () {
15
13
  // Read routes from the manifest generated during build
16
14
  const manifest = yield* Routes.Manifest.get(config.paths.project.absolute.build.assets.root);
@@ -34,19 +32,19 @@ export const generate = (config) => Effect.gen(function* () {
34
32
  consola.info(` Clients: ${optimalWorkers} page generators (to capture HTML)`);
35
33
  consola.info(` Distribution: ${batches.length} batches × ~${batchSize} pages each`);
36
34
  consola.info(` System: ${cpuCount} CPUs, ${memoryGB.toFixed(1)}GB RAM`);
37
- debug(`SSG configuration`, {
35
+ yield* Effect.logDebug(`SSG configuration`).pipe(Effect.annotateLogs({
38
36
  totalRoutes,
39
37
  optimalWorkers,
40
38
  cpuCount,
41
39
  memoryGB,
42
40
  batchSize,
43
41
  totalBatches: batches.length,
44
- });
42
+ }));
45
43
  // Create worker spawner layers
46
44
  const serverPath = config.paths.project.absolute.build.serverEntrypoint;
47
45
  const serverRunnerPath = Path.join(config.paths.framework.sourceDir, 'api/builder/ssg/server-runner.worker' + config.paths.framework.sourceExtension);
48
46
  const pageGeneratorPath = Path.join(config.paths.framework.sourceDir, 'api/builder/ssg/page-generator.worker' + config.paths.framework.sourceExtension);
49
- debug(`Creating worker pools with ${optimalWorkers} workers each`);
47
+ yield* Effect.logDebug(`Creating worker pools with ${optimalWorkers} workers each`);
50
48
  // Create and use worker pools within a scoped context
51
49
  yield* Effect.scoped(Effect.gen(function* () {
52
50
  // Create the server pool with its spawner
@@ -61,7 +59,7 @@ export const generate = (config) => Effect.gen(function* () {
61
59
  const serverPorts = [];
62
60
  consola.info(`\nStarting SSG infrastructure:`);
63
61
  consola.info(` Launching ${optimalWorkers} Polen app instances...`);
64
- debug(`Finding available ports for servers`);
62
+ yield* Effect.logDebug(`Finding available ports for servers`);
65
63
  // Get available ports
66
64
  for (let i = 0; i < optimalWorkers; i++) {
67
65
  const port = yield* Effect.tryPromise({
@@ -70,19 +68,18 @@ export const generate = (config) => Effect.gen(function* () {
70
68
  });
71
69
  serverPorts.push(port);
72
70
  }
73
- debug(`Using ports:`, serverPorts);
71
+ yield* Effect.logDebug(`Using ports: ${serverPorts.join(', ')}`);
74
72
  // Start servers using Effect
75
73
  yield* Effect.all(serverPorts.map((port) => serverPool.executeEffect(new StartServerMessage({
76
74
  serverPath,
77
75
  port,
78
76
  }))), { concurrency: 'unbounded' });
79
77
  consola.success(` All ${optimalWorkers} app instances ready on ports: ${serverPorts.join(', ')}`);
80
- debug(`All servers started successfully`);
78
+ yield* Effect.logDebug(`All servers started successfully`);
81
79
  // Prepare page generation configs
82
80
  // Each batch is assigned to a server in round-robin fashion
83
81
  const generateConfigs = batches.map((batch, index) => {
84
82
  const assignedPort = serverPorts[index % serverPorts.length];
85
- debug(`Batch ${index + 1}: ${batch.length} routes → server on port ${assignedPort}`);
86
83
  return {
87
84
  batch,
88
85
  assignedPort,
@@ -94,56 +91,86 @@ export const generate = (config) => Effect.gen(function* () {
94
91
  consola.info(` Routes are distributed round-robin across ${optimalWorkers} servers`);
95
92
  // Process batches
96
93
  consola.info(`\nGenerating pages...`);
97
- const startTime = Date.now();
98
- let completedBatches = 0;
99
- let totalPagesProcessed = 0;
100
- // Process batches using Effect.forEach
101
- const results = yield* Effect.forEach(generateConfigs, ({ batch, assignedPort, index }) => pagePool
94
+ const completedBatchesRef = yield* Ref.make(0);
95
+ const totalPagesProcessedRef = yield* Ref.make(0);
96
+ // Process batches using Effect.all with timing
97
+ const [elapsedTime, results] = yield* Effect.all(generateConfigs.map(({ batch, assignedPort, index }) => pagePool
102
98
  .executeEffect(new GeneratePagesMessage({
103
99
  routes: batch,
104
100
  serverPort: assignedPort,
105
101
  outputDir: config.paths.project.absolute.build.root,
102
+ ...(config.build.base ? { basePath: config.build.base } : {}),
106
103
  }))
107
- .pipe(Effect.tap((result) => Effect.sync(() => {
108
- completedBatches++;
109
- totalPagesProcessed += result.processedCount;
110
- const elapsed = (Date.now() - startTime) / 1000;
111
- const pagesPerSec = elapsed > 0 ? (totalPagesProcessed / elapsed).toFixed(1) : '0';
104
+ .pipe(Effect.tap((result) => Effect.gen(function* () {
105
+ const completedBatches = yield* Ref.updateAndGet(completedBatchesRef, n => n + 1);
106
+ const totalPagesProcessed = yield* Ref.updateAndGet(totalPagesProcessedRef, n => n + result.processedCount);
107
+ // Still use process.stdout.write for progress bar - this is UI, not logging
112
108
  const progress = Math.floor((completedBatches / batches.length) * 100);
113
- process.stdout.write(`\r Progress: ${completedBatches}/${batches.length} batches (${progress}%) ${totalPagesProcessed}/${totalRoutes} pages • ${pagesPerSec} pages/s`);
114
- })), Effect.catchAll((error) => {
115
- consola.error(`\nBatch ${index} failed:`, error);
116
- debug(`Batch ${index} error details`, { error, batch });
117
- return Effect.fail(new Error(`Batch ${index} failed: ${error}`));
118
- })), {
119
- concurrency: optimalWorkers,
120
- concurrentFinalizers: true,
121
- });
122
- const successfulResults = results.filter((r) => r.success);
109
+ yield* Effect.sync(() => {
110
+ process.stdout.write(`\r Progress: ${completedBatches}/${batches.length} batches (${progress}%) ${totalPagesProcessed}/${totalRoutes} pages`);
111
+ });
112
+ })), Effect.tapError((error) => Effect.logError(`Batch ${index} failed`).pipe(Effect.annotateLogs({ error: String(error), batch }))), Effect.map((result) => ({ ...result, batchIndex: index })), Effect.either)), { concurrency: optimalWorkers }).pipe(Effect.timed);
113
+ // Partition results into successes and failures
114
+ const [lefts, rights] = Array.partition(results, Either.isRight);
115
+ const successfulResults = rights.map(r => r.right);
116
+ const failedBatches = lefts.map(r => ({
117
+ error: r.left instanceof Error ? r.left.message : String(r.left),
118
+ }));
123
119
  // Final stats using successful results
124
- const totalTime = ((Date.now() - startTime) / 1000).toFixed(1);
125
- const totalMemoryMB = Array.reduce(successfulResults, 0, (sum, r) => sum + r.memoryUsed) / (1024 * 1024);
126
- const avgTimePerBatch = Array.reduce(successfulResults, 0, (sum, r) => sum + r.duration)
127
- / successfulResults.length
128
- / 1000;
129
- consola.success(`\n\nSSG Complete!`);
130
- consola.info(` Generated: ${totalRoutes} pages in ${totalTime}s`);
131
- consola.info(` Performance: ${(totalRoutes / parseFloat(totalTime)).toFixed(1)} pages/sec`);
132
- consola.info(` Avg batch time: ${avgTimePerBatch.toFixed(1)}s`);
133
- consola.info(` Peak memory: ${totalMemoryMB.toFixed(0)}MB`);
134
- debug(`SSG generation complete`, {
120
+ const totalTime = (Duration.toMillis(elapsedTime) / 1000).toFixed(1);
121
+ const actualPagesGenerated = yield* Ref.get(totalPagesProcessedRef);
122
+ const totalFailures = totalRoutes - actualPagesGenerated;
123
+ if (successfulResults.length > 0) {
124
+ const totalMemoryMB = Array.reduce(successfulResults, 0, (sum, r) => sum + r.memoryUsed) / (1024 * 1024);
125
+ const avgTimePerBatch = Array.reduce(successfulResults, 0, (sum, r) => sum + r.duration)
126
+ / successfulResults.length
127
+ / 1000;
128
+ if (totalFailures === 0) {
129
+ consola.success(`\n\nSSG Complete!`);
130
+ consola.info(` Generated: ${actualPagesGenerated} pages in ${totalTime}s`);
131
+ consola.info(` Performance: ${(actualPagesGenerated / parseFloat(totalTime)).toFixed(1)} pages/sec`);
132
+ consola.info(` Avg batch time: ${avgTimePerBatch.toFixed(1)}s`);
133
+ consola.info(` Peak memory: ${totalMemoryMB.toFixed(0)}MB`);
134
+ }
135
+ else {
136
+ consola.warn(`\n\nSSG Completed with Errors`);
137
+ consola.info(` Generated: ${actualPagesGenerated} out of ${totalRoutes} pages`);
138
+ consola.error(` Failed: ${totalFailures} pages`);
139
+ consola.info(` Time: ${totalTime}s`);
140
+ consola.info(` Performance: ${(actualPagesGenerated / parseFloat(totalTime)).toFixed(1)} pages/sec`);
141
+ consola.info(` Avg batch time: ${avgTimePerBatch.toFixed(1)}s`);
142
+ consola.info(` Peak memory: ${totalMemoryMB.toFixed(0)}MB`);
143
+ // Log details of failures from each batch
144
+ const allFailures = successfulResults.flatMap(r => r.failures ?? []);
145
+ if (allFailures.length > 0) {
146
+ consola.error(`\n Failed routes:`);
147
+ for (const failure of allFailures.slice(0, 10)) {
148
+ consola.error(` - ${failure.route}: ${failure.error}`);
149
+ }
150
+ if (allFailures.length > 10) {
151
+ consola.error(` ... and ${allFailures.length - 10} more`);
152
+ }
153
+ }
154
+ // Fail the effect to indicate error
155
+ yield* Effect.fail(new Error(`SSG failed: ${totalFailures} pages could not be generated`));
156
+ }
157
+ }
158
+ else {
159
+ consola.error(`\n\nSSG Failed Completely`);
160
+ consola.error(` No pages were generated out of ${totalRoutes} total`);
161
+ yield* Effect.fail(new Error(`SSG failed: No pages could be generated`));
162
+ }
163
+ yield* Effect.logDebug(`SSG generation complete`).pipe(Effect.annotateLogs({
135
164
  totalTime,
136
- avgTimePerBatch,
137
- totalMemoryMB,
138
165
  successfulBatches: successfulResults.length,
139
- });
140
- // Cleanup happens automatically when the scope ends
141
- debug(`SSG generation complete, cleaning up resources`);
166
+ }));
142
167
  }).pipe(
143
168
  // Provide NodeContext for Path service used in page generator
144
- Effect.provide(NodeContext.layer)));
145
- consola.info('\nShutting down...');
146
- consola.success('Cleanup complete.');
147
- debug(`All resources cleaned up`);
169
+ Effect.provide(NodeContext.layer))).pipe(
170
+ // After scoped resources are released
171
+ Effect.tap(() => Effect.sync(() => {
172
+ consola.info('\nShutting down...');
173
+ consola.success('Cleanup complete.');
174
+ })), Effect.tap(() => Effect.logDebug(`All resources cleaned up`)));
148
175
  });
149
176
  //# sourceMappingURL=generate.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"generate.js","sourceRoot":"","sources":["../../../../src/api/builder/ssg/generate.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"generate.js","sourceRoot":"","sources":["../../../../src/api/builder/ssg/generate.ts"],"names":[],"mappings":"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"}
@@ -2,13 +2,10 @@
2
2
  * Worker that generates static pages by fetching from servers.
3
3
  * This is executed in a worker thread using Effect Worker API.
4
4
  */
5
- import { debugPolen } from '#singletons/debug';
6
- import { Path, WorkerRunner } from '@effect/platform';
5
+ import { FileSystem, Path, WorkerRunner } from '@effect/platform';
7
6
  import { NodeContext, NodeRuntime, NodeWorkerRunner } from '@effect/platform-node';
8
- import { Data, Effect, Layer } from 'effect';
9
- import { promises as fs } from 'node:fs';
7
+ import { Array, Data, Duration, Effect, Either, Layer } from 'effect';
10
8
  import { PageMessage } from './worker-messages.js';
11
- const debug = debugPolen.sub(`api:ssg:page-generator`);
12
9
  // ============================================================================
13
10
  // Error Types
14
11
  // ============================================================================
@@ -23,68 +20,78 @@ class RouteProcessingError extends Data.Error {
23
20
  // ============================================================================
24
21
  // Generate Pages Handler
25
22
  // ============================================================================
23
+ // Fetch HTML from server using Effect patterns
24
+ const fetchPage = (url) => Effect.gen(function* () {
25
+ const response = yield* Effect.tryPromise({
26
+ try: () => fetch(url),
27
+ catch: (error) => new Error(`Network error: ${error}`),
28
+ });
29
+ if (!response.ok) {
30
+ return yield* Effect.fail(new Error(`HTTP ${response.status}: ${response.statusText}`));
31
+ }
32
+ return yield* Effect.tryPromise({
33
+ try: () => response.text(),
34
+ catch: (error) => new Error(`Failed to read response: ${error}`),
35
+ });
36
+ });
37
+ // Write HTML to file system
38
+ const writeHtmlFile = (outputPath, html) => Effect.gen(function* () {
39
+ const fs = yield* FileSystem.FileSystem;
40
+ const path = yield* Path.Path;
41
+ const dir = path.dirname(outputPath);
42
+ yield* fs.makeDirectory(dir, { recursive: true });
43
+ yield* fs.writeFileString(outputPath, html);
44
+ });
45
+ // Process a single route
46
+ const processRoute = (route, serverPort, outputDir, basePath) => Effect.gen(function* () {
47
+ const path = yield* Path.Path;
48
+ // Fetch the page from the server
49
+ // Construct URL with base path if provided
50
+ const basePathNormalized = basePath ? basePath.replace(/\/$/, '') : '';
51
+ const url = `http://localhost:${serverPort}${basePathNormalized}${route}`;
52
+ const html = yield* fetchPage(url).pipe(Effect.mapError(error => new RouteProcessingError({ route, cause: error })));
53
+ // Determine output file path
54
+ const outputPath = path.join(outputDir, route === '/' ? 'index.html' : `${route.slice(1)}/index.html`);
55
+ // Write the HTML file
56
+ yield* writeHtmlFile(outputPath, html).pipe(Effect.mapError(error => new RouteProcessingError({ route, cause: error })));
57
+ return route;
58
+ });
26
59
  const handlers = {
27
- GeneratePages: ({ routes, serverPort, outputDir }) => Effect.gen(function* () {
28
- const path = yield* Path.Path;
29
- const startTime = Date.now();
30
- let processedCount = 0;
31
- debug(`Starting batch generation`, {
60
+ GeneratePages: ({ routes, serverPort, outputDir, basePath }) => Effect.gen(function* () {
61
+ yield* Effect.logDebug(`Starting batch generation`).pipe(Effect.annotateLogs({
32
62
  totalRoutes: routes.length,
33
63
  serverPort,
34
- });
35
- // Process each route by fetching from the server
36
- for (const route of routes) {
37
- yield* Effect.tryPromise({
38
- try: async () => {
39
- // Fetch the page from the server
40
- const url = `http://localhost:${serverPort}${route}`;
41
- const response = await fetch(url);
42
- if (!response.ok) {
43
- throw new Error(`Failed to fetch ${route}: ${response.status} ${response.statusText}`);
44
- }
45
- const html = await response.text();
46
- // Determine output file path
47
- const outputPath = path.join(outputDir, route === '/' ? 'index.html' : `${route.slice(1)}/index.html`);
48
- // Ensure directory exists
49
- const dir = path.dirname(outputPath);
50
- await fs.mkdir(dir, { recursive: true });
51
- // Write the HTML file
52
- await fs.writeFile(outputPath, html, 'utf-8');
53
- processedCount++;
54
- // Log progress every 5 routes or on last route
55
- if (processedCount % 5 === 0 || processedCount === routes.length) {
56
- debug(`Progress`, {
57
- processedCount,
58
- totalRoutes: routes.length,
59
- serverPort,
60
- });
61
- }
62
- },
63
- catch: (error) => {
64
- debug(`Failed to process route`, { route, error });
65
- return new RouteProcessingError({ route, cause: error });
66
- },
67
- });
68
- }
64
+ basePath: basePath || 'none',
65
+ }));
66
+ // Process all routes with timing, collecting both successes and failures
67
+ const [duration, results] = yield* Effect.forEach(routes, (route, index) => processRoute(route, serverPort, outputDir, basePath).pipe(Effect.tap(() =>
68
+ // Log progress every 5 routes
69
+ (index + 1) % 5 === 0 || index === routes.length - 1
70
+ ? Effect.logDebug(`Progress: ${index + 1}/${routes.length} routes processed`)
71
+ : Effect.void), Effect.either), { concurrency: 1 }).pipe(Effect.timed);
72
+ // Partition results into successes and failures
73
+ const [failures, successes] = Array.partition(results, Either.isRight);
74
+ const processedCount = successes.length;
69
75
  const result = {
70
- success: true,
76
+ success: failures.length === 0,
71
77
  processedCount,
72
- duration: Date.now() - startTime,
78
+ duration: Duration.toMillis(duration),
73
79
  memoryUsed: process.memoryUsage().heapUsed,
80
+ ...(failures.length > 0 && {
81
+ error: `Failed to generate ${failures.length} out of ${routes.length} routes`,
82
+ failures: failures.map((f) => ({
83
+ route: f.left.route,
84
+ error: f.left.cause instanceof Error ? f.left.cause.message : String(f.left.cause),
85
+ })),
86
+ }),
74
87
  };
75
- debug(`Batch generation complete`, result);
88
+ yield* Effect.logDebug(`Batch generation complete`).pipe(Effect.annotateLogs(result));
76
89
  return result;
77
- }).pipe(Effect.catchAll((error) => Effect.succeed({
78
- success: false,
79
- processedCount: 0,
80
- duration: Date.now() - Date.now(),
81
- memoryUsed: process.memoryUsage().heapUsed,
82
- error: error instanceof Error ? error.message : String(error),
83
- }))),
90
+ }),
84
91
  };
85
92
  // ============================================================================
86
93
  // Worker Runner
87
94
  // ============================================================================
88
95
  // Run the worker
89
- WorkerRunner.launch(Layer.provide(WorkerRunner.layerSerialized(PageMessage, handlers), Layer.merge(NodeWorkerRunner.layer, NodeContext.layer))).pipe(NodeRuntime.runMain);
96
+ WorkerRunner.launch(Layer.provide(WorkerRunner.layerSerialized(PageMessage, handlers), Layer.mergeAll(NodeWorkerRunner.layer, NodeContext.layer))).pipe(NodeRuntime.runMain);
90
97
  //# sourceMappingURL=page-generator.worker.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"page-generator.worker.js","sourceRoot":"","sources":["../../../../src/api/builder/ssg/page-generator.worker.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"page-generator.worker.js","sourceRoot":"","sources":["../../../../src/api/builder/ssg/page-generator.worker.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AACjE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AAClF,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAA;AACrE,OAAO,EAAuB,WAAW,EAAE,MAAM,sBAAsB,CAAA;AAEvE,+EAA+E;AAC/E,cAAc;AACd,+EAA+E;AAE/E,MAAM,oBAAqB,SAAQ,IAAI,CAAC,KAGtC;IACA,IAAa,OAAO;QAClB,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,YAAY,KAAK;YAC9C,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO;YACpB,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QACtB,OAAO,2BAA2B,IAAI,CAAC,KAAK,KAAK,YAAY,EAAE,CAAA;IACjE,CAAC;CACF;AAED,+EAA+E;AAC/E,yBAAyB;AACzB,+EAA+E;AAE/E,+CAA+C;AAC/C,MAAM,SAAS,GAAG,CAAC,GAAW,EAAE,EAAE,CAChC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC;QACxC,GAAG,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC;QACrB,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,KAAK,CAAC,kBAAkB,KAAK,EAAE,CAAC;KACvD,CAAC,CAAA;IAEF,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,OAAO,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,CACvB,IAAI,KAAK,CAAC,QAAQ,QAAQ,CAAC,MAAM,KAAK,QAAQ,CAAC,UAAU,EAAE,CAAC,CAC7D,CAAA;IACH,CAAC;IAED,OAAO,KAAK,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC;QAC9B,GAAG,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE;QAC1B,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,KAAK,CAAC,4BAA4B,KAAK,EAAE,CAAC;KACjE,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA;AAEJ,4BAA4B;AAC5B,MAAM,aAAa,GAAG,CAAC,UAAkB,EAAE,IAAY,EAAE,EAAE,CACzD,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,MAAM,EAAE,GAAG,KAAK,CAAC,CAAC,UAAU,CAAC,UAAU,CAAA;IACvC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAA;IAE7B,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAA;IACpC,KAAK,CAAC,CAAC,EAAE,CAAC,aAAa,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IACjD,KAAK,CAAC,CAAC,EAAE,CAAC,eAAe,CAAC,UAAU,EAAE,IAAI,CAAC,CAAA;AAC7C,CAAC,CAAC,CAAA;AAEJ,yBAAyB;AACzB,MAAM,YAAY,GAAG,CACnB,KAAa,EACb,UAAkB,EAClB,SAAiB,EACjB,QAAiB,EACjB,EAAE,CACF,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAA;IAE7B,iCAAiC;IACjC,2CAA2C;IAC3C,MAAM,kBAAkB,GAAG,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;IACtE,MAAM,GAAG,GAAG,oBAAoB,UAAU,GAAG,kBAAkB,GAAG,KAAK,EAAE,CAAA;IACzE,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,CACrC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,oBAAoB,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,CAC5E,CAAA;IAED,6BAA6B;IAC7B,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAC1B,SAAS,EACT,KAAK,KAAK,GAAG,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,aAAa,CAC9D,CAAA;IAED,sBAAsB;IACtB,KAAK,CAAC,CAAC,aAAa,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC,IAAI,CACzC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,oBAAoB,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,CAC5E,CAAA;IAED,OAAO,KAAK,CAAA;AACd,CAAC,CAAC,CAAA;AAEJ,MAAM,QAAQ,GAAG;IACf,aAAa,EAAE,CACb,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAuG,EAChJ,EAAE,CACF,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QAClB,KAAK,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,2BAA2B,CAAC,CAAC,IAAI,CACtD,MAAM,CAAC,YAAY,CAAC;YAClB,WAAW,EAAE,MAAM,CAAC,MAAM;YAC1B,UAAU;YACV,QAAQ,EAAE,QAAQ,IAAI,MAAM;SAC7B,CAAC,CACH,CAAA;QAED,yEAAyE;QACzE,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAC/C,MAAM,EACN,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CACf,YAAY,CAAC,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC,IAAI,CACvD,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE;QACd,8BAA8B;QAC9B,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,KAAK,KAAK,MAAM,CAAC,MAAM,GAAG,CAAC;YAClD,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,KAAK,GAAG,CAAC,IAAI,MAAM,CAAC,MAAM,mBAAmB,CAAC;YAC7E,CAAC,CAAC,MAAM,CAAC,IAAI,CAChB,EACD,MAAM,CAAC,MAAM,CACd,EACH,EAAE,WAAW,EAAE,CAAC,EAAE,CACnB,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;QAEpB,gDAAgD;QAChD,MAAM,CAAC,QAAQ,EAAE,SAAS,CAAC,GAAG,KAAK,CAAC,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,CAAA;QACtE,MAAM,cAAc,GAAG,SAAS,CAAC,MAAM,CAAA;QAEvC,MAAM,MAAM,GAAmB;YAC7B,OAAO,EAAE,QAAQ,CAAC,MAAM,KAAK,CAAC;YAC9B,cAAc;YACd,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC;YACrC,UAAU,EAAE,OAAO,CAAC,WAAW,EAAE,CAAC,QAAQ;YAC1C,GAAG,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI;gBACzB,KAAK,EAAE,sBAAsB,QAAQ,CAAC,MAAM,WAAW,MAAM,CAAC,MAAM,SAAS;gBAC7E,QAAQ,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;oBAC7B,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK;oBACnB,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;iBACnF,CAAC,CAAC;aACJ,CAAC;SACH,CAAA;QAED,KAAK,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,2BAA2B,CAAC,CAAC,IAAI,CACtD,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,CAC5B,CAAA;QAED,OAAO,MAAM,CAAA;IACf,CAAC,CAAC;CACL,CAAA;AAED,+EAA+E;AAC/E,gBAAgB;AAChB,+EAA+E;AAE/E,iBAAiB;AACjB,YAAY,CAAC,MAAM,CACjB,KAAK,CAAC,OAAO,CACX,YAAY,CAAC,eAAe,CAAC,WAAW,EAAE,QAAQ,CAAC,EACnD,KAAK,CAAC,QAAQ,CACZ,gBAAgB,CAAC,KAAK,EACtB,WAAW,CAAC,KAAK,CAClB,CACF,CACF,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAA"}
@@ -2,48 +2,48 @@
2
2
  * Worker that runs a Polen server for SSG.
3
3
  * This is executed in a child process using Effect Worker API.
4
4
  */
5
- import { debugPolen } from '#singletons/debug';
6
5
  import { WorkerRunner } from '@effect/platform';
7
6
  import { NodeRuntime, NodeWorkerRunner } from '@effect/platform-node';
8
- import { Duration, Effect, Layer, Scope } from 'effect';
7
+ import { Duration, Effect, Layer, Ref, Scope } from 'effect';
9
8
  import { spawn } from 'node:child_process';
10
9
  import { ServerMessage } from './worker-messages.js';
11
- const debug = debugPolen.sub(`api:ssg:server-runner`);
12
- // Store the server process for cleanup
13
- let serverProcess = null;
10
+ // Store the server process reference for cleanup
11
+ const serverProcessRef = Ref.unsafeMake(null);
14
12
  // ============================================================================
15
13
  // Handlers
16
14
  // ============================================================================
17
15
  const handlers = {
18
16
  StartServer: ({ serverPath, port }) => Effect.gen(function* () {
19
17
  // If there's already a server running, stop it first
20
- if (serverProcess) {
21
- serverProcess.kill('SIGTERM');
18
+ const existingProcess = yield* Ref.get(serverProcessRef);
19
+ if (existingProcess) {
20
+ existingProcess.kill('SIGTERM');
22
21
  yield* Effect.sleep(Duration.millis(500));
23
- if (!serverProcess.killed) {
24
- serverProcess.kill('SIGKILL');
22
+ if (!existingProcess.killed) {
23
+ existingProcess.kill('SIGKILL');
25
24
  }
26
- serverProcess = null;
25
+ yield* Ref.set(serverProcessRef, null);
27
26
  }
28
27
  // Start the server process
29
- const startServer = Effect.sync(() => {
30
- debug(`Starting server with command: node ${serverPath}`);
31
- serverProcess = spawn('node', [serverPath], {
28
+ yield* Effect.logDebug(`Starting server with command: node ${serverPath}`);
29
+ const proc = yield* Effect.sync(() => {
30
+ const serverProc = spawn('node', [serverPath], {
32
31
  env: {
33
32
  ...process.env,
34
33
  PORT: port.toString(),
35
34
  },
36
35
  stdio: ['ignore', 'pipe', 'pipe'],
37
36
  });
38
- serverProcess.stdout?.on('data', (data) => {
39
- debug(`[Server ${port}] stdout`, data.toString().trim());
37
+ // Log server output
38
+ serverProc.stdout?.on('data', (data) => {
39
+ Effect.logDebug(`[Server ${port}] stdout: ${data.toString().trim()}`).pipe(Effect.runSync);
40
40
  });
41
- serverProcess.stderr?.on('data', (data) => {
42
- debug(`[Server ${port}] stderr`, data.toString().trim());
41
+ serverProc.stderr?.on('data', (data) => {
42
+ Effect.logDebug(`[Server ${port}] stderr: ${data.toString().trim()}`).pipe(Effect.runSync);
43
43
  });
44
- return serverProcess;
44
+ return serverProc;
45
45
  });
46
- const proc = yield* startServer;
46
+ yield* Ref.set(serverProcessRef, proc);
47
47
  // Wait for server to be ready with proper interruption support
48
48
  const waitForReady = Effect.async((resume) => {
49
49
  // Handle process errors
@@ -64,7 +64,7 @@ const handlers = {
64
64
  try {
65
65
  const response = await fetch(`http://localhost:${port}/`);
66
66
  if (response.ok || response.status === 404) {
67
- debug(`[Server ${port}] Ready!`);
67
+ Effect.logDebug(`[Server ${port}] Ready!`).pipe(Effect.runSync);
68
68
  if (checkInterval)
69
69
  clearInterval(checkInterval);
70
70
  proc.removeListener('error', errorHandler);
@@ -92,30 +92,24 @@ const handlers = {
92
92
  });
93
93
  // Apply timeout with proper Effect interruption
94
94
  yield* waitForReady.pipe(Effect.timeout(Duration.seconds(30)), Effect.catchTag('TimeoutException', () => Effect.die(new Error(`Server on port ${port} failed to start within 30 seconds`))));
95
- // Add finalizer to ensure cleanup
96
- yield* Effect.addFinalizer(() => Effect.sync(() => {
97
- debug(`Finalizer: Stopping server on port ${port}`);
98
- if (serverProcess && !serverProcess.killed) {
99
- serverProcess.kill('SIGTERM');
100
- // Try to kill forcefully after a brief wait
101
- setTimeout(() => {
102
- if (serverProcess && !serverProcess.killed) {
103
- serverProcess.kill('SIGKILL');
104
- }
105
- serverProcess = null;
106
- }, 100);
95
+ yield* Effect.logDebug(`Server on port ${port} started successfully`);
96
+ }),
97
+ StopServer: ({ port }) => Effect.gen(function* () {
98
+ const serverProc = yield* Ref.get(serverProcessRef);
99
+ if (serverProc) {
100
+ if (port !== undefined) {
101
+ yield* Effect.logDebug(`Stopping server on port ${port}`);
107
102
  }
108
- }));
109
- }).pipe(Effect.scoped),
110
- StopServer: () => Effect.gen(function* () {
111
- if (serverProcess) {
112
- serverProcess.kill('SIGTERM');
103
+ serverProc.kill('SIGTERM');
113
104
  // Give it time to shut down gracefully
114
105
  yield* Effect.sleep(Duration.millis(500));
115
- if (!serverProcess.killed) {
116
- serverProcess.kill('SIGKILL');
106
+ if (!serverProc.killed) {
107
+ serverProc.kill('SIGKILL');
108
+ }
109
+ yield* Ref.set(serverProcessRef, null);
110
+ if (port !== undefined) {
111
+ yield* Effect.logDebug(`Server on port ${port} stopped`);
117
112
  }
118
- serverProcess = null;
119
113
  }
120
114
  }),
121
115
  };
@@ -1 +1 @@
1
- {"version":3,"file":"server-runner.worker.js","sourceRoot":"","sources":["../../../../src/api/builder/ssg/server-runner.worker.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server-runner.worker.js","sourceRoot":"","sources":["../../../../src/api/builder/ssg/server-runner.worker.ts"],"names":[],"mappings":"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"}