polen 0.11.0-next.27 → 0.11.0-next.28

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.
@@ -12,6 +12,10 @@ const GenerateResultSchema = S.Struct({
12
12
  duration: S.Number,
13
13
  memoryUsed: S.Number,
14
14
  error: S.optional(S.String),
15
+ failures: S.optional(S.Array(S.Struct({
16
+ route: S.String,
17
+ error: S.String,
18
+ }))),
15
19
  });
16
20
  // ============================================================================
17
21
  // Server Messages
@@ -27,7 +31,9 @@ export class StartServerMessage extends S.TaggedRequest()('StartServer', {
27
31
  }
28
32
  export class StopServerMessage extends S.TaggedRequest()('StopServer', {
29
33
  failure: S.Never,
30
- payload: {},
34
+ payload: {
35
+ port: S.optional(S.Number),
36
+ },
31
37
  success: S.Void,
32
38
  }) {
33
39
  }
@@ -1 +1 @@
1
- {"version":3,"file":"worker-messages.js","sourceRoot":"","sources":["../../../../src/api/builder/ssg/worker-messages.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,sBAAsB,CAAA;AAExC,+EAA+E;AAC/E,eAAe;AACf,+EAA+E;AAE/E,MAAM,WAAW,GAAG,CAAC,CAAC,MAAM,CAAA;AAE5B,+EAA+E;AAC/E,yBAAyB;AACzB,+EAA+E;AAE/E,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC;IACpC,OAAO,EAAE,CAAC,CAAC,OAAO;IAClB,cAAc,EAAE,CAAC,CAAC,MAAM;IACxB,QAAQ,EAAE,CAAC,CAAC,MAAM;IAClB,UAAU,EAAE,CAAC,CAAC,MAAM;IACpB,KAAK,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC;CAC5B,CAAC,CAAA;AAIF,+EAA+E;AAC/E,kBAAkB;AAClB,+EAA+E;AAE/E,MAAM,OAAO,kBAAmB,SAAQ,CAAC,CAAC,aAAa,EAAsB,CAC3E,aAAa,EACb;IACE,OAAO,EAAE,CAAC,CAAC,KAAK;IAChB,OAAO,EAAE;QACP,UAAU,EAAE,CAAC,CAAC,MAAM;QACpB,IAAI,EAAE,CAAC,CAAC,MAAM;KACf;IACD,OAAO,EAAE,CAAC,CAAC,IAAI;CAChB,CACF;CAAG;AAEJ,MAAM,OAAO,iBAAkB,SAAQ,CAAC,CAAC,aAAa,EAAqB,CACzE,YAAY,EACZ;IACE,OAAO,EAAE,CAAC,CAAC,KAAK;IAChB,OAAO,EAAE,EAAE;IACX,OAAO,EAAE,CAAC,CAAC,IAAI;CAChB,CACF;CAAG;AAGJ,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,kBAAkB,EAAE,iBAAiB,CAAC,CAAA;AAE3E,+EAA+E;AAC/E,0BAA0B;AAC1B,+EAA+E;AAE/E,MAAM,OAAO,oBAAqB,SAAQ,CAAC,CAAC,aAAa,EAAwB,CAC/E,eAAe,EACf;IACE,OAAO,EAAE,CAAC,CAAC,MAAM;IACjB,OAAO,EAAE;QACP,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC;QAC5B,UAAU,EAAE,CAAC,CAAC,MAAM;QACpB,SAAS,EAAE,CAAC,CAAC,MAAM;KACpB;IACD,OAAO,EAAE,oBAAoB;CAC9B,CACF;CAAG;AAGJ,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAA"}
1
+ {"version":3,"file":"worker-messages.js","sourceRoot":"","sources":["../../../../src/api/builder/ssg/worker-messages.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,sBAAsB,CAAA;AAExC,+EAA+E;AAC/E,eAAe;AACf,+EAA+E;AAE/E,MAAM,WAAW,GAAG,CAAC,CAAC,MAAM,CAAA;AAE5B,+EAA+E;AAC/E,yBAAyB;AACzB,+EAA+E;AAE/E,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC;IACpC,OAAO,EAAE,CAAC,CAAC,OAAO;IAClB,cAAc,EAAE,CAAC,CAAC,MAAM;IACxB,QAAQ,EAAE,CAAC,CAAC,MAAM;IAClB,UAAU,EAAE,CAAC,CAAC,MAAM;IACpB,KAAK,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC;IAC3B,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAClB,CAAC,CAAC,KAAK,CACL,CAAC,CAAC,MAAM,CAAC;QACP,KAAK,EAAE,CAAC,CAAC,MAAM;QACf,KAAK,EAAE,CAAC,CAAC,MAAM;KAChB,CAAC,CACH,CACF;CACF,CAAC,CAAA;AAIF,+EAA+E;AAC/E,kBAAkB;AAClB,+EAA+E;AAE/E,MAAM,OAAO,kBAAmB,SAAQ,CAAC,CAAC,aAAa,EAAsB,CAC3E,aAAa,EACb;IACE,OAAO,EAAE,CAAC,CAAC,KAAK;IAChB,OAAO,EAAE;QACP,UAAU,EAAE,CAAC,CAAC,MAAM;QACpB,IAAI,EAAE,CAAC,CAAC,MAAM;KACf;IACD,OAAO,EAAE,CAAC,CAAC,IAAI;CAChB,CACF;CAAG;AAEJ,MAAM,OAAO,iBAAkB,SAAQ,CAAC,CAAC,aAAa,EAAqB,CACzE,YAAY,EACZ;IACE,OAAO,EAAE,CAAC,CAAC,KAAK;IAChB,OAAO,EAAE;QACP,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC;KAC3B;IACD,OAAO,EAAE,CAAC,CAAC,IAAI;CAChB,CACF;CAAG;AAGJ,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,kBAAkB,EAAE,iBAAiB,CAAC,CAAA;AAE3E,+EAA+E;AAC/E,0BAA0B;AAC1B,+EAA+E;AAE/E,MAAM,OAAO,oBAAqB,SAAQ,CAAC,CAAC,aAAa,EAAwB,CAC/E,eAAe,EACf;IACE,OAAO,EAAE,CAAC,CAAC,MAAM;IACjB,OAAO,EAAE;QACP,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC;QAC5B,UAAU,EAAE,CAAC,CAAC,MAAM;QACpB,SAAS,EAAE,CAAC,CAAC,MAAM;KACpB;IACD,OAAO,EAAE,oBAAoB;CAC9B,CACF;CAAG;AAGJ,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"routes-manifest.d.ts","sourceRoot":"","sources":["../../../src/vite/plugins/routes-manifest.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,QAAQ,CAAA;AAC5B,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAA;AAUtC;;;;GAIG;AACH,eAAO,MAAM,cAAc,GAAI,QAAQ,GAAG,CAAC,MAAM,CAAC,MAAM,KAAG,IAAI,CAAC,MAgF/D,CAAA"}
1
+ {"version":3,"file":"routes-manifest.d.ts","sourceRoot":"","sources":["../../../src/vite/plugins/routes-manifest.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,QAAQ,CAAA;AAC5B,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAA;AAWtC;;;;GAIG;AACH,eAAO,MAAM,cAAc,GAAI,QAAQ,GAAG,CAAC,MAAM,CAAC,MAAM,KAAG,IAAI,CAAC,MAgF/D,CAAA"}
@@ -3,6 +3,7 @@ import { Vite } from '#dep/vite/index';
3
3
  import { Catalog } from '#lib/catalog/$';
4
4
  import { FileRouter } from '#lib/file-router/$';
5
5
  import { SchemaDefinition } from '#lib/schema-definition/$';
6
+ import { Version } from '#lib/version/$';
6
7
  import { debugPolen } from '#singletons/debug';
7
8
  import * as NodeFileSystem from '@effect/platform-node/NodeFileSystem';
8
9
  import consola from 'consola';
@@ -66,8 +67,10 @@ export const RoutesManifest = (config) => {
66
67
  function processVersionedCatalog(catalog, routes) {
67
68
  for (const schema of Catalog.Versioned.getAll(catalog)) {
68
69
  const version = schema.version;
69
- routes.push(`/reference/version/${version}`);
70
- processSchemaDefinition(schema.definition, routes, `/reference/version/${version}`);
70
+ // Properly encode the version to its string representation
71
+ const versionValue = Version.encodeSync(version);
72
+ routes.push(`/reference/version/${versionValue}`);
73
+ processSchemaDefinition(schema.definition, routes, `/reference/version/${versionValue}`);
71
74
  }
72
75
  }
73
76
  function processUnversionedCatalog(catalog, routes) {
@@ -1 +1 @@
1
- {"version":3,"file":"routes-manifest.js","sourceRoot":"","sources":["../../../src/vite/plugins/routes-manifest.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"routes-manifest.js","sourceRoot":"","sources":["../../../src/vite/plugins/routes-manifest.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "polen",
3
- "version": "0.11.0-next.27",
3
+ "version": "0.11.0-next.28",
4
4
  "type": "module",
5
5
  "description": "A framework for delightful GraphQL developer portals",
6
6
  "author": {
@@ -55,9 +55,6 @@
55
55
  "#lib/version/version": {
56
56
  "default": "./build/lib/version/$$.js"
57
57
  },
58
- "#lib/extensible-data": {
59
- "default": "./build/lib/extensible-data/$.js"
60
- },
61
58
  "#lib/favicon": {
62
59
  "default": "./build/lib/favicon/$.js"
63
60
  },
@@ -274,27 +271,27 @@
274
271
  "README.md"
275
272
  ],
276
273
  "dependencies": {
277
- "@0no-co/graphql.web": "^1.1.2",
278
- "@effect/cli": "^0.63.0",
279
- "@effect/platform": "^0.90.0",
280
- "@effect/platform-node": "^0.94.0",
274
+ "@0no-co/graphql.web": "^1.2.0",
275
+ "@effect/cli": "^0.69.2",
276
+ "@effect/platform": "^0.90.7",
277
+ "@effect/platform-node": "^0.96.1",
281
278
  "@effect/printer-ansi": "^0.45.0",
282
279
  "@graphql-inspector/core": "^6.2.1",
283
280
  "@graphql-tools/load": "^8.1.2",
284
281
  "@hiogawa/vite-plugin-ssr-css": "^0.0.1",
285
- "@hono/node-server": "^1.17.1",
286
- "@mdx-js/mdx": "^3.1.0",
287
- "@mdx-js/react": "^3.1.0",
288
- "@mdx-js/rollup": "^3.1.0",
282
+ "@hono/node-server": "^1.19.1",
283
+ "@mdx-js/mdx": "^3.1.1",
284
+ "@mdx-js/react": "^3.1.1",
285
+ "@mdx-js/rollup": "^3.1.1",
289
286
  "@radix-ui/react-icons": "^1.3.2",
290
287
  "@radix-ui/react-slot": "^1.2.3",
291
288
  "@radix-ui/themes": "^3.2.1",
292
- "@rolldown/pluginutils": "1.0.0-beta.29",
293
- "@rollup/pluginutils": "^5.2.0",
289
+ "@rolldown/pluginutils": "1.0.0-beta.36",
290
+ "@rollup/pluginutils": "^5.3.0",
294
291
  "@types/jsesc": "^3.0.3",
295
- "@vitejs/plugin-react": "^4.7.0",
296
- "@vitejs/plugin-react-oxc": "^0.3.0",
297
- "@vltpkg/semver": "0.0.0-18",
292
+ "@vitejs/plugin-react": "^5.0.2",
293
+ "@vitejs/plugin-react-oxc": "^0.4.1",
294
+ "@vltpkg/semver": "0.0.0-29",
298
295
  "@wollybeard/kit": "^0.41.0",
299
296
  "@wollybeard/projector": "^0.3.0",
300
297
  "ansis": "^4.1.0",
@@ -302,20 +299,20 @@
302
299
  "codehike": "^1.0.7",
303
300
  "consola": "^3.4.2",
304
301
  "defu": "^6.1.4",
305
- "effect": "^3.17.0",
302
+ "effect": "^3.17.13",
306
303
  "embla-carousel-react": "^8.6.0",
307
- "es-toolkit": "^1.39.7",
304
+ "es-toolkit": "^1.39.10",
308
305
  "fuse.js": "^7.1.0",
309
306
  "get-port": "^7.1.0",
310
307
  "graffle": "8.0.0-next.163",
311
308
  "graphql": "^16.11.0",
312
309
  "gray-matter": "^4.0.3",
313
- "hono": "^4.8.5",
310
+ "hono": "^4.9.6",
314
311
  "jsesc": "^3.1.0",
315
312
  "jsonc-parser": "^3.3.1",
316
- "react": "^19.1.0",
317
- "react-dom": "^19.1.0",
318
- "react-router": "^7.7.0",
313
+ "react": "^19.1.1",
314
+ "react-dom": "^19.1.1",
315
+ "react-router": "^7.8.2",
319
316
  "rehype-stringify": "^10.0.1",
320
317
  "remark": "^15.0.1",
321
318
  "remark-frontmatter": "^5.0.0",
@@ -324,23 +321,22 @@
324
321
  "remark-parse": "^11.0.0",
325
322
  "remark-rehype": "^11.1.2",
326
323
  "resolve.imports": "^2.0.3",
327
- "rolldown": "1.0.0-beta.29",
324
+ "rolldown": "1.0.0-beta.36",
328
325
  "simple-git": "^3.28.0",
329
- "source-map": "^0.7.4",
326
+ "source-map": "^0.7.6",
330
327
  "superjson": "^2.2.2",
331
- "tinyglobby": "^0.2.14",
328
+ "tinyglobby": "^0.2.15",
332
329
  "tree-sitter-graphql-grammar-wasm": "^1.1.0",
333
- "tsx": "^4.20.3",
330
+ "tsx": "^4.20.5",
334
331
  "type-fest": "^4.41.0",
335
- "typescript": "^5.9.2",
336
332
  "unified": "^11.0.5",
337
- "valtio": "^2.1.5",
333
+ "valtio": "^2.1.7",
338
334
  "vfile": "^6.0.3",
339
335
  "vite": "npm:rolldown-vite@^7.0.10",
340
- "vite-plugin-inspect": "^11.3.0",
341
- "web-tree-sitter": "^0.25.8",
336
+ "vite-plugin-inspect": "^11.3.3",
337
+ "web-tree-sitter": "^0.25.9",
342
338
  "youch-core": "^0.3.3",
343
- "zx": "8.7.1"
339
+ "zx": "8.8.1"
344
340
  },
345
341
  "devDependencies": {
346
342
  "@actions/core": "^1.11.1",
@@ -348,31 +344,31 @@
348
344
  "@actions/github": "^6.0.1",
349
345
  "@actions/glob": "^0.5.0",
350
346
  "@actions/io": "^1.1.3",
351
- "@changesets/cli": "^2.29.5",
352
- "@effect/vitest": "^0.25.0",
347
+ "@changesets/cli": "^2.29.6",
348
+ "@effect/vitest": "^0.25.1",
353
349
  "@molt/command": "^0.9.0",
354
350
  "@octokit/core": "^7.0.3",
355
351
  "@octokit/types": "^14.1.0",
356
- "@playwright/browser-chromium": "^1.54.1",
352
+ "@playwright/browser-chromium": "^1.55.0",
357
353
  "@testing-library/react": "^16.3.0",
358
354
  "@tsconfig/node-lts": "^22.0.2",
359
355
  "@tsconfig/node22": "^22.0.2",
360
356
  "@tsconfig/strictest": "^2.0.5",
361
357
  "@types/jsdom": "^21.1.7",
362
- "@types/node": "^24.1.0",
363
- "@types/react": "^19.1.8",
364
- "@types/react-dom": "^19.1.6",
358
+ "@types/node": "^24.3.1",
359
+ "@types/react": "^19.1.12",
360
+ "@types/react-dom": "^19.1.9",
365
361
  "dprint": "^0.50.1",
366
362
  "dripip": "^0.10.0",
367
- "fast-check": "^4.2.0",
363
+ "fast-check": "^4.3.0",
368
364
  "fs-jetpack": "^5.1.0",
369
365
  "get-port-please": "^3.2.0",
370
366
  "globals": "^16.3.0",
371
367
  "jsdom": "^26.1.0",
372
- "playwright": "1.54.1",
368
+ "playwright": "1.55.0",
373
369
  "publint": "^0.3.12",
374
- "strip-ansi": "^7.1.0",
375
- "typescript": "^5.8.3",
370
+ "strip-ansi": "^7.1.2",
371
+ "typescript": "^5.9.2",
376
372
  "vite-tsconfig-paths": "^5.1.4",
377
373
  "vitest": "^3.2.4",
378
374
  "zod": "3.25.74"
@@ -1,12 +1,11 @@
1
1
  import type { Config } from '#api/config/$'
2
2
  import { Routes } from '#api/routes/$'
3
- import { debugPolen } from '#singletons/debug'
4
3
  import { Worker } from '@effect/platform'
5
4
  import { NodeContext, NodeWorker } from '@effect/platform-node'
6
5
  import { FileSystem } from '@effect/platform/FileSystem'
7
6
  import { Path } from '@wollybeard/kit'
8
7
  import consola from 'consola'
9
- import { Array, Chunk, Effect, Layer } from 'effect'
8
+ import { Array, Chunk, Duration, Effect, Either, Layer, Logger, Ref } from 'effect'
10
9
  import getPort from 'get-port'
11
10
  import { cpus, totalmem } from 'node:os'
12
11
  import {
@@ -18,8 +17,6 @@ import {
18
17
  } from './worker-messages.js'
19
18
  import { createPageSpawner, createServerSpawner } from './worker-spawners.js'
20
19
 
21
- const debug = debugPolen.sub(`api:ssg:generate`)
22
-
23
20
  export const generate = (config: Config.Config): Effect.Effect<void, Error, FileSystem> =>
24
21
  Effect.gen(function*() {
25
22
  // Read routes from the manifest generated during build
@@ -55,14 +52,16 @@ export const generate = (config: Config.Config): Effect.Effect<void, Error, File
55
52
  consola.info(` Distribution: ${batches.length} batches × ~${batchSize} pages each`)
56
53
  consola.info(` System: ${cpuCount} CPUs, ${memoryGB.toFixed(1)}GB RAM`)
57
54
 
58
- debug(`SSG configuration`, {
59
- totalRoutes,
60
- optimalWorkers,
61
- cpuCount,
62
- memoryGB,
63
- batchSize,
64
- totalBatches: batches.length,
65
- })
55
+ yield* Effect.logDebug(`SSG configuration`).pipe(
56
+ Effect.annotateLogs({
57
+ totalRoutes,
58
+ optimalWorkers,
59
+ cpuCount,
60
+ memoryGB,
61
+ batchSize,
62
+ totalBatches: batches.length,
63
+ }),
64
+ )
66
65
 
67
66
  // Create worker spawner layers
68
67
  const serverPath = config.paths.project.absolute.build.serverEntrypoint
@@ -76,7 +75,7 @@ export const generate = (config: Config.Config): Effect.Effect<void, Error, File
76
75
  'api/builder/ssg/page-generator.worker' + config.paths.framework.sourceExtension,
77
76
  )
78
77
 
79
- debug(`Creating worker pools with ${optimalWorkers} workers each`)
78
+ yield* Effect.logDebug(`Creating worker pools with ${optimalWorkers} workers each`)
80
79
 
81
80
  // Create and use worker pools within a scoped context
82
81
  yield* Effect.scoped(
@@ -106,7 +105,7 @@ export const generate = (config: Config.Config): Effect.Effect<void, Error, File
106
105
 
107
106
  consola.info(`\nStarting SSG infrastructure:`)
108
107
  consola.info(` Launching ${optimalWorkers} Polen app instances...`)
109
- debug(`Finding available ports for servers`)
108
+ yield* Effect.logDebug(`Finding available ports for servers`)
110
109
 
111
110
  // Get available ports
112
111
  for (let i = 0; i < optimalWorkers; i++) {
@@ -116,7 +115,7 @@ export const generate = (config: Config.Config): Effect.Effect<void, Error, File
116
115
  })
117
116
  serverPorts.push(port)
118
117
  }
119
- debug(`Using ports:`, serverPorts)
118
+ yield* Effect.logDebug(`Using ports: ${serverPorts.join(', ')}`)
120
119
 
121
120
  // Start servers using Effect
122
121
  yield* Effect.all(
@@ -131,13 +130,12 @@ export const generate = (config: Config.Config): Effect.Effect<void, Error, File
131
130
  { concurrency: 'unbounded' },
132
131
  )
133
132
  consola.success(` All ${optimalWorkers} app instances ready on ports: ${serverPorts.join(', ')}`)
134
- debug(`All servers started successfully`)
133
+ yield* Effect.logDebug(`All servers started successfully`)
135
134
 
136
135
  // Prepare page generation configs
137
136
  // Each batch is assigned to a server in round-robin fashion
138
137
  const generateConfigs = batches.map((batch, index) => {
139
138
  const assignedPort = serverPorts[index % serverPorts.length]!
140
- debug(`Batch ${index + 1}: ${batch.length} routes → server on port ${assignedPort}`)
141
139
  return {
142
140
  batch,
143
141
  assignedPort,
@@ -151,14 +149,12 @@ export const generate = (config: Config.Config): Effect.Effect<void, Error, File
151
149
 
152
150
  // Process batches
153
151
  consola.info(`\nGenerating pages...`)
154
- const startTime = Date.now()
155
- let completedBatches = 0
156
- let totalPagesProcessed = 0
157
-
158
- // Process batches using Effect.forEach
159
- const results = yield* Effect.forEach(
160
- generateConfigs,
161
- ({ batch, assignedPort, index }) =>
152
+ const completedBatchesRef = yield* Ref.make(0)
153
+ const totalPagesProcessedRef = yield* Ref.make(0)
154
+
155
+ // Process batches using Effect.all with timing
156
+ const [elapsedTime, results] = yield* Effect.all(
157
+ generateConfigs.map(({ batch, assignedPort, index }) =>
162
158
  pagePool
163
159
  .executeEffect(
164
160
  new GeneratePagesMessage({
@@ -169,61 +165,105 @@ export const generate = (config: Config.Config): Effect.Effect<void, Error, File
169
165
  )
170
166
  .pipe(
171
167
  Effect.tap((result) =>
172
- Effect.sync(() => {
173
- completedBatches++
174
- totalPagesProcessed += result.processedCount
175
-
176
- const elapsed = (Date.now() - startTime) / 1000
177
- const pagesPerSec = elapsed > 0 ? (totalPagesProcessed / elapsed).toFixed(1) : '0'
168
+ Effect.gen(function*() {
169
+ const completedBatches = yield* Ref.updateAndGet(completedBatchesRef, n => n + 1)
170
+ const totalPagesProcessed = yield* Ref.updateAndGet(totalPagesProcessedRef, n =>
171
+ n + result.processedCount)
172
+ // Still use process.stdout.write for progress bar - this is UI, not logging
178
173
  const progress = Math.floor((completedBatches / batches.length) * 100)
179
-
180
- process.stdout.write(
181
- `\r Progress: ${completedBatches}/${batches.length} batches (${progress}%) • ${totalPagesProcessed}/${totalRoutes} pages • ${pagesPerSec} pages/s`,
182
- )
174
+ yield* Effect.sync(() => {
175
+ process.stdout.write(
176
+ `\r Progress: ${completedBatches}/${batches.length} batches (${progress}%) • ${totalPagesProcessed}/${totalRoutes} pages`,
177
+ )
178
+ })
183
179
  })
184
180
  ),
185
- Effect.catchAll((error) => {
186
- consola.error(`\nBatch ${index} failed:`, error)
187
- debug(`Batch ${index} error details`, { error, batch })
188
- return Effect.fail(new Error(`Batch ${index} failed: ${error}`))
189
- }),
190
- ),
191
- {
192
- concurrency: optimalWorkers,
193
- concurrentFinalizers: true,
194
- },
195
- )
181
+ Effect.tapError((error) =>
182
+ Effect.logError(`Batch ${index} failed`).pipe(
183
+ Effect.annotateLogs({ error: String(error), batch }),
184
+ )
185
+ ),
186
+ Effect.map((result) => ({ ...result, batchIndex: index })),
187
+ Effect.either, // Convert to Either to capture both success and failure
188
+ )
189
+ ),
190
+ { concurrency: optimalWorkers },
191
+ ).pipe(Effect.timed)
196
192
 
197
- const successfulResults = results.filter((r) => r.success)
193
+ // Partition results into successes and failures
194
+ const [lefts, rights] = Array.partition(results, Either.isRight)
195
+ const successfulResults = rights.map(r =>
196
+ r.right
197
+ )
198
+ const failedBatches = lefts.map(r => ({
199
+ error: r.left instanceof Error ? r.left.message : String(r.left),
200
+ }))
198
201
 
199
202
  // Final stats using successful results
200
- const totalTime = ((Date.now() - startTime) / 1000).toFixed(1)
201
- const totalMemoryMB = Array.reduce(successfulResults, 0, (sum, r) => sum + r.memoryUsed) / (1024 * 1024)
202
- const avgTimePerBatch = Array.reduce(successfulResults, 0, (sum, r) => sum + r.duration)
203
- / successfulResults.length
204
- / 1000
205
-
206
- consola.success(`\n\nSSG Complete!`)
207
- consola.info(` Generated: ${totalRoutes} pages in ${totalTime}s`)
208
- consola.info(` Performance: ${(totalRoutes / parseFloat(totalTime)).toFixed(1)} pages/sec`)
209
- consola.info(` Avg batch time: ${avgTimePerBatch.toFixed(1)}s`)
210
- consola.info(` Peak memory: ${totalMemoryMB.toFixed(0)}MB`)
211
-
212
- debug(`SSG generation complete`, {
213
- totalTime,
214
- avgTimePerBatch,
215
- totalMemoryMB,
216
- successfulBatches: successfulResults.length,
217
- })
218
- // Cleanup happens automatically when the scope ends
219
- debug(`SSG generation complete, cleaning up resources`)
203
+ const totalTime = (Duration.toMillis(elapsedTime) / 1000).toFixed(1)
204
+ const actualPagesGenerated = yield* Ref.get(totalPagesProcessedRef)
205
+ const totalFailures = totalRoutes - actualPagesGenerated
206
+
207
+ if (successfulResults.length > 0) {
208
+ const totalMemoryMB = Array.reduce(successfulResults, 0, (sum, r) => sum + r.memoryUsed) / (1024 * 1024)
209
+ const avgTimePerBatch = Array.reduce(successfulResults, 0, (sum, r) => sum + r.duration)
210
+ / successfulResults.length
211
+ / 1000
212
+
213
+ if (totalFailures === 0) {
214
+ consola.success(`\n\nSSG Complete!`)
215
+ consola.info(` Generated: ${actualPagesGenerated} pages in ${totalTime}s`)
216
+ consola.info(` Performance: ${(actualPagesGenerated / parseFloat(totalTime)).toFixed(1)} pages/sec`)
217
+ consola.info(` Avg batch time: ${avgTimePerBatch.toFixed(1)}s`)
218
+ consola.info(` Peak memory: ${totalMemoryMB.toFixed(0)}MB`)
219
+ } else {
220
+ consola.warn(`\n\nSSG Completed with Errors`)
221
+ consola.info(` Generated: ${actualPagesGenerated} out of ${totalRoutes} pages`)
222
+ consola.error(` Failed: ${totalFailures} pages`)
223
+ consola.info(` Time: ${totalTime}s`)
224
+ consola.info(` Performance: ${(actualPagesGenerated / parseFloat(totalTime)).toFixed(1)} pages/sec`)
225
+ consola.info(` Avg batch time: ${avgTimePerBatch.toFixed(1)}s`)
226
+ consola.info(` Peak memory: ${totalMemoryMB.toFixed(0)}MB`)
227
+
228
+ // Log details of failures from each batch
229
+ const allFailures = successfulResults.flatMap(r => r.failures ?? [])
230
+ if (allFailures.length > 0) {
231
+ consola.error(`\n Failed routes:`)
232
+ for (const failure of allFailures.slice(0, 10)) {
233
+ consola.error(` - ${failure.route}: ${failure.error}`)
234
+ }
235
+ if (allFailures.length > 10) {
236
+ consola.error(` ... and ${allFailures.length - 10} more`)
237
+ }
238
+ }
239
+
240
+ // Fail the effect to indicate error
241
+ yield* Effect.fail(new Error(`SSG failed: ${totalFailures} pages could not be generated`))
242
+ }
243
+ } else {
244
+ consola.error(`\n\nSSG Failed Completely`)
245
+ consola.error(` No pages were generated out of ${totalRoutes} total`)
246
+ yield* Effect.fail(new Error(`SSG failed: No pages could be generated`))
247
+ }
248
+
249
+ yield* Effect.logDebug(`SSG generation complete`).pipe(
250
+ Effect.annotateLogs({
251
+ totalTime,
252
+ successfulBatches: successfulResults.length,
253
+ }),
254
+ )
220
255
  }).pipe(
221
256
  // Provide NodeContext for Path service used in page generator
222
257
  Effect.provide(NodeContext.layer),
223
258
  ),
259
+ ).pipe(
260
+ // After scoped resources are released
261
+ Effect.tap(() =>
262
+ Effect.sync(() => {
263
+ consola.info('\nShutting down...')
264
+ consola.success('Cleanup complete.')
265
+ })
266
+ ),
267
+ Effect.tap(() => Effect.logDebug(`All resources cleaned up`)),
224
268
  )
225
-
226
- consola.info('\nShutting down...')
227
- consola.success('Cleanup complete.')
228
- debug(`All resources cleaned up`)
229
269
  })