@ressjs/vite-router 0.5.2 → 0.6.0-experimental.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (110) hide show
  1. package/README.md +42 -32
  2. package/dist/client/entry.d.mts +2 -0
  3. package/dist/client/entry.mjs +1 -0
  4. package/dist/client/index.d.ts +2 -0
  5. package/dist/client/index.js +8 -0
  6. package/dist/config/base-path.d.ts +44 -0
  7. package/dist/config/base-path.js +100 -0
  8. package/dist/config/codegen.d.ts +23 -0
  9. package/dist/config/codegen.js +118 -0
  10. package/dist/config/define.d.ts +8 -0
  11. package/dist/config/define.js +12 -0
  12. package/dist/config/env.d.ts +19 -0
  13. package/dist/config/env.js +40 -0
  14. package/dist/config/index.d.ts +18 -0
  15. package/dist/config/index.js +44 -0
  16. package/dist/config/load.d.ts +26 -0
  17. package/dist/config/load.js +73 -0
  18. package/dist/config/middleware.d.ts +18 -0
  19. package/dist/config/middleware.js +79 -0
  20. package/dist/config/rules.d.ts +48 -0
  21. package/dist/config/rules.js +149 -0
  22. package/dist/config/types.d.ts +164 -0
  23. package/dist/config/types.js +2 -0
  24. package/dist/config/validate.d.ts +19 -0
  25. package/dist/config/validate.js +105 -0
  26. package/dist/config/watch.d.ts +41 -0
  27. package/dist/config/watch.js +132 -0
  28. package/dist/fs/module-extensions.d.ts +82 -0
  29. package/dist/fs/module-extensions.js +196 -0
  30. package/dist/helpers/html-generator.d.ts +22 -5
  31. package/dist/helpers/html-generator.js +89 -120
  32. package/dist/helpers/middlewares.d.ts +7 -7
  33. package/dist/helpers/middlewares.js +51 -105
  34. package/dist/helpers/request-handler.d.ts +2 -2
  35. package/dist/helpers/request-handler.js +118 -25
  36. package/dist/index.d.ts +30 -3
  37. package/dist/index.js +70 -8
  38. package/dist/pages.d.ts +10 -9
  39. package/dist/pages.js +42 -261
  40. package/dist/platform.d.ts +11 -14
  41. package/dist/platform.js +18 -102
  42. package/dist/plugin/environments.d.ts +66 -0
  43. package/dist/plugin/environments.js +72 -0
  44. package/dist/plugin/index.d.ts +54 -0
  45. package/dist/plugin/index.js +178 -0
  46. package/dist/plugin/virtual-entries.d.ts +26 -0
  47. package/dist/plugin/virtual-entries.js +80 -0
  48. package/dist/render.d.ts +23 -2
  49. package/dist/render.js +40 -53
  50. package/dist/router.d.ts +32 -13
  51. package/dist/router.js +147 -146
  52. package/dist/routes/dispatcher.d.ts +37 -0
  53. package/dist/routes/dispatcher.js +69 -0
  54. package/dist/routes/manifest.d.ts +17 -0
  55. package/dist/routes/manifest.js +56 -0
  56. package/dist/routes/match.d.ts +20 -0
  57. package/dist/routes/match.js +75 -0
  58. package/dist/routes/parse.d.ts +31 -0
  59. package/dist/routes/parse.js +114 -0
  60. package/dist/routes/rank.d.ts +12 -0
  61. package/dist/routes/rank.js +49 -0
  62. package/dist/routes/router.d.ts +44 -0
  63. package/dist/routes/router.js +81 -0
  64. package/dist/routes/scan.d.ts +16 -0
  65. package/dist/routes/scan.js +82 -0
  66. package/dist/routes/types.d.ts +85 -0
  67. package/dist/routes/types.js +13 -0
  68. package/dist/runtime/dev-server.d.ts +62 -0
  69. package/dist/runtime/dev-server.js +94 -0
  70. package/dist/runtime/module-loader.d.ts +55 -0
  71. package/dist/runtime/module-loader.js +122 -0
  72. package/dist/runtime/prod-server.d.ts +42 -0
  73. package/dist/runtime/prod-server.js +142 -0
  74. package/dist/runtime/template.d.ts +10 -0
  75. package/dist/runtime/template.js +33 -0
  76. package/dist/security/client-props.d.ts +25 -0
  77. package/dist/security/client-props.js +50 -0
  78. package/dist/security/config.d.ts +130 -0
  79. package/dist/security/config.js +73 -0
  80. package/dist/security/csp.d.ts +53 -0
  81. package/dist/security/csp.js +118 -0
  82. package/dist/security/dev-hardening.d.ts +46 -0
  83. package/dist/security/dev-hardening.js +65 -0
  84. package/dist/security/errors.d.ts +37 -0
  85. package/dist/security/errors.js +84 -0
  86. package/dist/security/escape.d.ts +40 -0
  87. package/dist/security/escape.js +90 -0
  88. package/dist/security/head-tags.d.ts +32 -0
  89. package/dist/security/head-tags.js +111 -0
  90. package/dist/security/headers.d.ts +62 -0
  91. package/dist/security/headers.js +187 -0
  92. package/dist/security/index.d.ts +24 -0
  93. package/dist/security/index.js +47 -0
  94. package/dist/security/serialize.d.ts +48 -0
  95. package/dist/security/serialize.js +146 -0
  96. package/dist/variants/assets.d.ts +23 -0
  97. package/dist/variants/assets.js +78 -0
  98. package/dist/variants/catalog.d.ts +33 -0
  99. package/dist/variants/catalog.js +79 -0
  100. package/dist/variants/platform-tokens.d.ts +9 -0
  101. package/dist/variants/platform-tokens.js +15 -0
  102. package/dist/variants/resolve.d.ts +40 -0
  103. package/dist/variants/resolve.js +90 -0
  104. package/dist/variants/suffix.d.ts +8 -0
  105. package/dist/variants/suffix.js +12 -0
  106. package/dist/variants/types.d.ts +69 -0
  107. package/dist/variants/types.js +2 -0
  108. package/package.json +22 -10
  109. package/dist/helpers/vite-config.d.ts +0 -10
  110. package/dist/helpers/vite-config.js +0 -90
@@ -1,52 +1,75 @@
1
1
  "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
2
  Object.defineProperty(exports, "__esModule", { value: true });
6
3
  exports.processRequest = processRequest;
7
- const promises_1 = __importDefault(require("node:fs/promises"));
8
- const pages_1 = require("../pages");
9
4
  const render_1 = require("../render");
10
5
  const platform_1 = require("../platform");
11
6
  const html_generator_1 = require("./html-generator");
12
- async function preparePlatform(req, enablePlatformDetection = true, isProduction = false) {
7
+ const assets_1 = require("@ressjs/assets");
8
+ const resolve_1 = require("../variants/resolve");
9
+ const platform_tokens_1 = require("../variants/platform-tokens");
10
+ const security_1 = require("../security");
11
+ const template_1 = require("../runtime/template");
12
+ function preparePlatform(req, enablePlatformDetection = true, useUserAgent = true) {
13
13
  if (!enablePlatformDetection) {
14
14
  return {
15
15
  platform: 'desktop',
16
16
  platformInfo: null
17
17
  };
18
18
  }
19
- const userAgent = req.headers['user-agent'] || '';
20
- const platformInfo = (0, platform_1.detectPlatform)(userAgent, req.headers);
19
+ // Si la respuesta no va a declarar `Vary: User-Agent`, el User-Agent tampoco
20
+ // participa de la decisión. Resolver por algo que no se declara es servir la
21
+ // variante equivocada apenas haya una caché intermedia.
22
+ const platformInfo = (0, platform_1.detect)({
23
+ userAgent: req.headers['user-agent'] || '',
24
+ headers: req.headers,
25
+ useUserAgent,
26
+ });
21
27
  const platform = (platformInfo.device === 'phone' || platformInfo.device === 'tablet') ? 'mobile' : 'desktop';
22
- if (!isProduction && platformInfo) {
23
- await (0, pages_1.generateTempEntries)('dist', platformInfo);
24
- }
25
28
  return { platform, platformInfo };
26
29
  }
27
30
  async function processRequest(context, config, renderServer) {
28
31
  const { req, res, page, next } = context;
29
- // config.viteConfig can be a ViteConfig or a thunk returning it (auto mode)
32
+ // En modo automático el runtime llega como thunk, porque se resuelve después de crear el router.
30
33
  const resolvedViteConfig = typeof config.viteConfig === 'function'
31
34
  ? config.viteConfig()
32
35
  : config.viteConfig;
33
36
  const { enablePlatformDetection, renderFunction } = config;
34
37
  const viteConfig = resolvedViteConfig;
38
+ const options = config.security ?? (0, security_1.resolveSecurityOptions)(config.securityOptions);
39
+ // El nonce se genera una vez por petición, antes del render, y viaja hasta el
40
+ // documento y hasta la cabecera: así el valor del atributo y el de la política
41
+ // son el mismo por construcción y no por coincidencia.
42
+ // Por qué ejes varía esta página. Decide dos cosas que tienen que coincidir:
43
+ // qué se declara en `Vary` y qué del cliente puede escribirse en el documento.
44
+ const pageVariants = page?.pageId
45
+ ? (viteConfig.catalog?.variantsByPage.get(page.pageId) ?? [])
46
+ : [];
47
+ const varyBy = (0, resolve_1.varyingAxes)(pageVariants);
48
+ const security = {
49
+ isProduction: viteConfig.isProduction,
50
+ options,
51
+ route: page?.route ?? req.url ?? '',
52
+ varyBy,
53
+ ...(options.csp.enabled ? { nonce: (0, security_1.createNonce)() } : {}),
54
+ };
35
55
  try {
36
- const platformContext = await preparePlatform(req, enablePlatformDetection, viteConfig.isProduction);
56
+ const platformContext = preparePlatform(req, enablePlatformDetection, options.varyOnUserAgent);
37
57
  if (renderFunction) {
38
58
  const html = await renderFunction({
39
59
  url: req.url,
40
60
  platform: platformContext.platform,
41
61
  req
42
62
  });
43
- res.setHeader('Content-Type', 'text/html');
63
+ res.setHeader('Content-Type', 'text/html; charset=utf-8');
44
64
  res.send(html);
45
65
  return;
46
66
  }
47
67
  if (!renderServer) {
48
- const renderOptions = viteConfig.vite ? { vite: viteConfig.vite } : {};
49
- renderServer = (0, render_1.createRenderServer)(renderOptions);
68
+ renderServer = (0, render_1.createRenderServer)({
69
+ ...(viteConfig.moduleLoader ? { moduleLoader: viteConfig.moduleLoader } : {}),
70
+ clientProps: options.clientProps,
71
+ isProduction: viteConfig.isProduction,
72
+ });
50
73
  }
51
74
  const protocol = req.headers['x-forwarded-proto'] || (req.connection?.encrypted ? 'https' : 'http');
52
75
  const host = req.headers.host || 'localhost';
@@ -56,38 +79,108 @@ async function processRequest(context, config, renderServer) {
56
79
  if (!res.locals) {
57
80
  res.locals = {};
58
81
  }
82
+ // El catálogo se resolvió al arrancar. Dejamos los enlaces en el scope de
83
+ // esta petición para que middlewares puedan inspeccionarlos o ajustarlos,
84
+ // sin volver a consultar el filesystem durante el render.
85
+ if (!res.locals.styles && page?.pageId && viteConfig.catalog && viteConfig.assets) {
86
+ res.locals.styles = (0, assets_1.resolvePageAssets)(page.pageId, platformContext.platformInfo ?? platform_1.DEFAULT_PLATFORM, viteConfig.catalog, viteConfig.assets);
87
+ }
88
+ const pageLocals = { ...res.locals };
89
+ delete pageLocals.styles;
59
90
  const rendered = await renderServer({
60
91
  url: pathname,
61
92
  req,
62
93
  res,
63
- props: res.locals.serverSideProps
94
+ props: res.locals.serverSideProps,
95
+ // `styles` pertenece al pipeline interno de assets; no se mezcla con los
96
+ // locals que la página recibe ni se considera estado serializable.
97
+ locals: pageLocals,
98
+ // La página ya la resolvió el despachador: buscarla de nuevo por URL sería
99
+ // una segunda resolución con otro criterio.
100
+ ...(page ? { page } : {}),
64
101
  });
65
102
  const template = await getTemplate(req, viteConfig);
66
103
  const html = await (0, html_generator_1.generateCompleteHTML)({
67
104
  template,
68
105
  rendered,
69
106
  page,
70
- manifest: viteConfig.manifest,
71
107
  platform: platformContext.platform,
72
108
  isProduction: viteConfig.isProduction,
73
109
  platformInfo: platformContext.platformInfo,
110
+ catalog: viteConfig.catalog,
111
+ assets: viteConfig.assets,
112
+ styles: res.locals.styles,
74
113
  // pasar solo la config segura
75
114
  ...(res.locals?.htmlConfig ? { serverSideResult: res.locals.htmlConfig } : {})
115
+ }, security);
116
+ warnIfStateTooLarge(rendered.props, security);
117
+ // Las cabeceras van antes del cuerpo: después de la primera escritura ya no
118
+ // se pueden cambiar, y el intento lanza una excepción que tapa el error real.
119
+ (0, security_1.applySecurityHeaders)(res, options, {
120
+ isProduction: viteConfig.isProduction,
121
+ varyBy: platformContext.platformInfo ? varyBy : null,
122
+ edge: platform_tokens_1.defaultPlatformRegistry.edge,
123
+ nonce: security.nonce,
124
+ kind: 'html',
76
125
  });
77
- res.setHeader('Content-Type', 'text/html');
126
+ if (options.csp.enabled && security.nonce) {
127
+ const header = (0, security_1.cspHeaderName)(options.csp);
128
+ const existing = res.getHeader(header);
129
+ // Una política que escribió la aplicación se respeta: sus dominios y sus
130
+ // proveedores son decisión suya. Lo único que se le agrega es el nonce,
131
+ // sin el cual el bloque de estado no se ejecuta y la página no hidrata.
132
+ res.setHeader(header, existing
133
+ ? (0, security_1.injectNonce)(String(existing), security.nonce)
134
+ : (0, security_1.buildCsp)(options.csp, security.nonce, viteConfig.isProduction));
135
+ // `report-to` nombra un grupo: sin la cabecera que lo define, los informes
136
+ // de violación no llegan a ningún lado.
137
+ if (options.csp.reportUri && res.getHeader('Reporting-Endpoints') === undefined) {
138
+ res.setHeader('Reporting-Endpoints', (0, security_1.reportingEndpointsHeader)(options.csp.reportUri));
139
+ }
140
+ }
78
141
  res.send(html);
79
142
  }
80
143
  catch (error) {
81
- console.error(`Error handling ${req.url}:`, error);
82
- if (viteConfig.vite?.ssrFixStacktrace) {
83
- viteConfig.vite.ssrFixStacktrace(error);
84
- }
85
- next(error);
144
+ const publicError = (0, security_1.sanitizeError)(error, viteConfig.isProduction);
145
+ (0, security_1.logServerError)(error, { method: req.method, url: req.url, statusCode: publicError.statusCode });
146
+ (0, security_1.applySecurityHeaders)(res, options, {
147
+ isProduction: viteConfig.isProduction,
148
+ kind: 'error',
149
+ });
150
+ next(Object.assign(new Error(publicError.message), publicError));
151
+ }
152
+ }
153
+ /**
154
+ * Avisa cuando el estado que viaja es grande.
155
+ *
156
+ * En desarrollo, en cada petición y con las claves más pesadas —eso es lo que
157
+ * hace accionable el aviso—. En producción, una sola vez por ruta: un aviso por
158
+ * petición inunda los logs y deja de leerse.
159
+ */
160
+ const warnedOversizeRoutes = new Set();
161
+ function warnIfStateTooLarge(props, security) {
162
+ const { options, isProduction, route } = security;
163
+ const check = (0, security_1.checkStateSize)((0, security_1.serializeState)(props ?? {}), options.maxStateBytes, props);
164
+ if (!check.overLimit)
165
+ return;
166
+ const kib = (n) => `${(n / 1024).toFixed(1)} KiB`;
167
+ const detail = check.heaviest.length
168
+ ? ` Lo más pesado: ${check.heaviest.map((h) => `${h.key} (${kib(h.bytes)})`).join(', ')}.`
169
+ : '';
170
+ const message = `[ress] ${route}: el estado que viaja al cliente pesa ${kib(check.bytes)}, ` +
171
+ `sobre un límite de ${kib(options.maxStateBytes)}.${detail}`;
172
+ if (options.onStateOverLimit === 'error')
173
+ throw new Error(message);
174
+ if (isProduction) {
175
+ if (warnedOversizeRoutes.has(route))
176
+ return;
177
+ warnedOversizeRoutes.add(route);
86
178
  }
179
+ console.warn(message);
87
180
  }
88
181
  async function getTemplate(req, viteConfig) {
89
182
  if (!viteConfig.isProduction) {
90
- const template = await promises_1.default.readFile('./index.html', 'utf-8');
183
+ const template = await (0, template_1.readTemplateHtml)();
91
184
  return viteConfig.vite ? await viteConfig.vite.transformIndexHtml(req.url, template) : template;
92
185
  }
93
186
  else {
package/dist/index.d.ts CHANGED
@@ -1,7 +1,34 @@
1
- export { createViteRouter, createAutoViteServer, listDetectedPages, getPages } from './router';
2
- export { getViteInput, getViteSSRInput, getClientEntriesInput, generateTempEntries, resolvePlatformCSS } from './pages';
1
+ export { createViteRouter, waitForViteRouter, getPages } from './router';
2
+ export { getViteSSRInput } from './pages';
3
+ export { createRouteManifest, serializeRouteManifest, loadRouteManifest } from './routes/manifest';
4
+ export { scanRoutes } from './routes/scan';
5
+ export type { PageId, RouteEntry, RouteEntryKind, RouteManifest, RouteManifestData, RouteMatch, RouteSegment, SegmentKind, } from './routes/types';
6
+ export { ROUTE_MANIFEST_VERSION } from './routes/types';
7
+ export { defineEnvironments, OUT_DIR } from './plugin/environments';
8
+ export { ressPlugin, ressCorePlugin, refreshVariantCatalog, getVariantCatalog } from './plugin/index';
9
+ export type { RessPlugin, RessPluginOptions } from './plugin/index';
10
+ export { createDevModuleLoader, createProdModuleLoader, } from './runtime/module-loader';
11
+ export type { FetchableEnvironment, ModuleLoader } from './runtime/module-loader';
12
+ export { createRuntime, resolveServerModulePath } from './runtime/prod-server';
13
+ export { resolveSsrEnvironment } from './runtime/dev-server';
14
+ export type { DevRuntimeOptions, RessRuntime } from './runtime/dev-server';
15
+ export { scriptExtensionOf, SCRIPT_EXTENSIONS } from './fs/module-extensions';
16
+ export { buildVariantCatalog, pageIdFromFile } from './variants/catalog';
17
+ export { resolveVariant, explainResolution } from './variants/resolve';
18
+ export { defaultPlatformRegistry } from './variants/platform-tokens';
19
+ export type { VariantCatalog, BuildEntry, Variant, AssetIndex, PlatformRegistry } from './variants/types';
3
20
  export { createRenderServer } from './render';
4
21
  export { detectPlatform } from './platform';
5
22
  export type { PlatformInfo } from './platform';
6
- export type { ViteRouterOptions, AutoViteServerOptions } from './router';
23
+ export type { ViteRouterOptions } from './router';
7
24
  export type { PageInfo } from './pages';
25
+ export { PublicFacingError, resolveSecurityOptions, serializeState, applySecurityHeaders, } from './security';
26
+ export type { ClientPropsPolicy, PublicError, ResolvedSecurityOptions, SecurityOptions, } from './security';
27
+ /**
28
+ * @deprecated Usá el manifest de rutas: `runtime.routes.entries`. Devuelve las
29
+ * páginas tal como las enumera el catálogo de variantes, que no conoce grupos ni
30
+ * catch-all. Se elimina cuando F-016 consuma el manifest.
31
+ */
32
+ export { getPages as listDetectedPages } from './pages';
33
+ export { defineConfig, loadConfig, createConfigMiddleware, compileRules, publicEnvDefines, withBasePath, assetPrefixFor, } from './config';
34
+ export type { RessConfig, ResolvedConfig, TrailingSlashMode, RessServerConfig } from './config';
package/dist/index.js CHANGED
@@ -1,22 +1,84 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.detectPlatform = exports.createRenderServer = exports.resolvePlatformCSS = exports.generateTempEntries = exports.getClientEntriesInput = exports.getViteSSRInput = exports.getViteInput = exports.getPages = exports.listDetectedPages = exports.createAutoViteServer = exports.createViteRouter = void 0;
3
+ exports.assetPrefixFor = exports.withBasePath = exports.publicEnvDefines = exports.compileRules = exports.createConfigMiddleware = exports.loadConfig = exports.defineConfig = exports.listDetectedPages = exports.applySecurityHeaders = exports.serializeState = exports.resolveSecurityOptions = exports.PublicFacingError = exports.detectPlatform = exports.createRenderServer = exports.defaultPlatformRegistry = exports.explainResolution = exports.resolveVariant = exports.pageIdFromFile = exports.buildVariantCatalog = exports.SCRIPT_EXTENSIONS = exports.scriptExtensionOf = exports.resolveSsrEnvironment = exports.resolveServerModulePath = exports.createRuntime = exports.createProdModuleLoader = exports.createDevModuleLoader = exports.getVariantCatalog = exports.refreshVariantCatalog = exports.ressCorePlugin = exports.ressPlugin = exports.OUT_DIR = exports.defineEnvironments = exports.ROUTE_MANIFEST_VERSION = exports.scanRoutes = exports.loadRouteManifest = exports.serializeRouteManifest = exports.createRouteManifest = exports.getViteSSRInput = exports.getPages = exports.waitForViteRouter = exports.createViteRouter = void 0;
4
4
  // Main API
5
5
  var router_1 = require("./router");
6
6
  Object.defineProperty(exports, "createViteRouter", { enumerable: true, get: function () { return router_1.createViteRouter; } });
7
- Object.defineProperty(exports, "createAutoViteServer", { enumerable: true, get: function () { return router_1.createAutoViteServer; } });
8
- Object.defineProperty(exports, "listDetectedPages", { enumerable: true, get: function () { return router_1.listDetectedPages; } });
7
+ Object.defineProperty(exports, "waitForViteRouter", { enumerable: true, get: function () { return router_1.waitForViteRouter; } });
9
8
  Object.defineProperty(exports, "getPages", { enumerable: true, get: function () { return router_1.getPages; } });
10
- // Core functions for Vite config
9
+ // Entradas de build del entorno de servidor
11
10
  var pages_1 = require("./pages");
12
- Object.defineProperty(exports, "getViteInput", { enumerable: true, get: function () { return pages_1.getViteInput; } });
13
11
  Object.defineProperty(exports, "getViteSSRInput", { enumerable: true, get: function () { return pages_1.getViteSSRInput; } });
14
- Object.defineProperty(exports, "getClientEntriesInput", { enumerable: true, get: function () { return pages_1.getClientEntriesInput; } });
15
- Object.defineProperty(exports, "generateTempEntries", { enumerable: true, get: function () { return pages_1.generateTempEntries; } });
16
- Object.defineProperty(exports, "resolvePlatformCSS", { enumerable: true, get: function () { return pages_1.resolvePlatformCSS; } });
12
+ // Rutas: manifest, escaneo y tipos (F-018). Superficie que F-033 (la CLI)
13
+ // necesita para construir la aplicación y para `ress info`, sin duplicar la
14
+ // enumeración que ya hace el framework.
15
+ var manifest_1 = require("./routes/manifest");
16
+ Object.defineProperty(exports, "createRouteManifest", { enumerable: true, get: function () { return manifest_1.createRouteManifest; } });
17
+ Object.defineProperty(exports, "serializeRouteManifest", { enumerable: true, get: function () { return manifest_1.serializeRouteManifest; } });
18
+ Object.defineProperty(exports, "loadRouteManifest", { enumerable: true, get: function () { return manifest_1.loadRouteManifest; } });
19
+ var scan_1 = require("./routes/scan");
20
+ Object.defineProperty(exports, "scanRoutes", { enumerable: true, get: function () { return scan_1.scanRoutes; } });
21
+ var types_1 = require("./routes/types");
22
+ Object.defineProperty(exports, "ROUTE_MANIFEST_VERSION", { enumerable: true, get: function () { return types_1.ROUTE_MANIFEST_VERSION; } });
23
+ // Runtime: entornos de build y directorios de salida (F-015/F-016). La CLI los
24
+ // usa para `ress build` y para resolver dónde quedó el build en `ress info`.
25
+ var environments_1 = require("./plugin/environments");
26
+ Object.defineProperty(exports, "defineEnvironments", { enumerable: true, get: function () { return environments_1.defineEnvironments; } });
27
+ Object.defineProperty(exports, "OUT_DIR", { enumerable: true, get: function () { return environments_1.OUT_DIR; } });
28
+ var index_1 = require("./plugin/index");
29
+ Object.defineProperty(exports, "ressPlugin", { enumerable: true, get: function () { return index_1.ressPlugin; } });
30
+ Object.defineProperty(exports, "ressCorePlugin", { enumerable: true, get: function () { return index_1.ressCorePlugin; } });
31
+ Object.defineProperty(exports, "refreshVariantCatalog", { enumerable: true, get: function () { return index_1.refreshVariantCatalog; } });
32
+ Object.defineProperty(exports, "getVariantCatalog", { enumerable: true, get: function () { return index_1.getVariantCatalog; } });
33
+ // Cargador de módulos: la vía de escape nivel 2 de F-033 carga el archivo de
34
+ // servidor del proyecto con el mismo mecanismo que las páginas.
35
+ var module_loader_1 = require("./runtime/module-loader");
36
+ Object.defineProperty(exports, "createDevModuleLoader", { enumerable: true, get: function () { return module_loader_1.createDevModuleLoader; } });
37
+ Object.defineProperty(exports, "createProdModuleLoader", { enumerable: true, get: function () { return module_loader_1.createProdModuleLoader; } });
38
+ var prod_server_1 = require("./runtime/prod-server");
39
+ Object.defineProperty(exports, "createRuntime", { enumerable: true, get: function () { return prod_server_1.createRuntime; } });
40
+ Object.defineProperty(exports, "resolveServerModulePath", { enumerable: true, get: function () { return prod_server_1.resolveServerModulePath; } });
41
+ var dev_server_1 = require("./runtime/dev-server");
42
+ Object.defineProperty(exports, "resolveSsrEnvironment", { enumerable: true, get: function () { return dev_server_1.resolveSsrEnvironment; } });
43
+ // Extensiones reconocidas (F-017), para quien necesita autodetectar un archivo
44
+ // de servidor del proyecto con la misma política que las páginas.
45
+ var module_extensions_1 = require("./fs/module-extensions");
46
+ Object.defineProperty(exports, "scriptExtensionOf", { enumerable: true, get: function () { return module_extensions_1.scriptExtensionOf; } });
47
+ Object.defineProperty(exports, "SCRIPT_EXTENSIONS", { enumerable: true, get: function () { return module_extensions_1.SCRIPT_EXTENSIONS; } });
48
+ // Catálogo de variantes de plataforma
49
+ var catalog_1 = require("./variants/catalog");
50
+ Object.defineProperty(exports, "buildVariantCatalog", { enumerable: true, get: function () { return catalog_1.buildVariantCatalog; } });
51
+ Object.defineProperty(exports, "pageIdFromFile", { enumerable: true, get: function () { return catalog_1.pageIdFromFile; } });
52
+ var resolve_1 = require("./variants/resolve");
53
+ Object.defineProperty(exports, "resolveVariant", { enumerable: true, get: function () { return resolve_1.resolveVariant; } });
54
+ Object.defineProperty(exports, "explainResolution", { enumerable: true, get: function () { return resolve_1.explainResolution; } });
55
+ var platform_tokens_1 = require("./variants/platform-tokens");
56
+ Object.defineProperty(exports, "defaultPlatformRegistry", { enumerable: true, get: function () { return platform_tokens_1.defaultPlatformRegistry; } });
17
57
  // Render functions
18
58
  var render_1 = require("./render");
19
59
  Object.defineProperty(exports, "createRenderServer", { enumerable: true, get: function () { return render_1.createRenderServer; } });
20
60
  // Platform detection
21
61
  var platform_1 = require("./platform");
22
62
  Object.defineProperty(exports, "detectPlatform", { enumerable: true, get: function () { return platform_1.detectPlatform; } });
63
+ // Endurecimiento del renderizado en el servidor (F-019)
64
+ var security_1 = require("./security");
65
+ Object.defineProperty(exports, "PublicFacingError", { enumerable: true, get: function () { return security_1.PublicFacingError; } });
66
+ Object.defineProperty(exports, "resolveSecurityOptions", { enumerable: true, get: function () { return security_1.resolveSecurityOptions; } });
67
+ Object.defineProperty(exports, "serializeState", { enumerable: true, get: function () { return security_1.serializeState; } });
68
+ Object.defineProperty(exports, "applySecurityHeaders", { enumerable: true, get: function () { return security_1.applySecurityHeaders; } });
69
+ /**
70
+ * @deprecated Usá el manifest de rutas: `runtime.routes.entries`. Devuelve las
71
+ * páginas tal como las enumera el catálogo de variantes, que no conoce grupos ni
72
+ * catch-all. Se elimina cuando F-016 consuma el manifest.
73
+ */
74
+ var pages_2 = require("./pages");
75
+ Object.defineProperty(exports, "listDetectedPages", { enumerable: true, get: function () { return pages_2.getPages; } });
76
+ // Configuración del proyecto (F-008)
77
+ var config_1 = require("./config");
78
+ Object.defineProperty(exports, "defineConfig", { enumerable: true, get: function () { return config_1.defineConfig; } });
79
+ Object.defineProperty(exports, "loadConfig", { enumerable: true, get: function () { return config_1.loadConfig; } });
80
+ Object.defineProperty(exports, "createConfigMiddleware", { enumerable: true, get: function () { return config_1.createConfigMiddleware; } });
81
+ Object.defineProperty(exports, "compileRules", { enumerable: true, get: function () { return config_1.compileRules; } });
82
+ Object.defineProperty(exports, "publicEnvDefines", { enumerable: true, get: function () { return config_1.publicEnvDefines; } });
83
+ Object.defineProperty(exports, "withBasePath", { enumerable: true, get: function () { return config_1.withBasePath; } });
84
+ Object.defineProperty(exports, "assetPrefixFor", { enumerable: true, get: function () { return config_1.assetPrefixFor; } });
package/dist/pages.d.ts CHANGED
@@ -1,9 +1,11 @@
1
- import type { PlatformInfo } from './platform';
1
+ import { type ExtensionPolicy } from './fs/module-extensions';
2
2
  export interface PageInfo {
3
3
  route: string;
4
4
  expressRoute: string;
5
5
  file: string;
6
6
  abs: string;
7
+ /** Identificador estable, compartido con el catálogo de variantes. */
8
+ pageId: string;
7
9
  }
8
10
  /**
9
11
  * Convierte rutas estilo Next.js con parámetros dinámicos a formato Express
@@ -13,18 +15,17 @@ export interface PageInfo {
13
15
  * '/home' → '/home' (sin cambios)
14
16
  */
15
17
  export declare function convertRouteToExpress(route: string): string;
16
- export declare function getPages(): PageInfo[];
17
- export declare function getViteInput(): Record<string, string>;
18
+ export declare function getPages(policy?: ExtensionPolicy): PageInfo[];
19
+ /**
20
+ * Entradas del entorno de servidor: las páginas más sus middlewares.
21
+ *
22
+ * El entorno de cliente no aparece acá: sus entradas salen del catálogo de
23
+ * variantes, porque una página produce una por cada plataforma que atiende.
24
+ */
18
25
  export declare function getViteSSRInput(): Record<string, string>;
19
- export declare function loadManifest(distPath?: string): Promise<any>;
20
26
  /**
21
27
  * Convierte una ruta de página TypeScript a su equivalente compilado en producción
22
28
  *
23
29
  * @param pageFile - Ruta del archivo de página (relativa: "app/pages/pokedex/index.tsx" o absoluta: "/path/to/app/pages/pokedex/index.tsx")
24
30
  * @returns Ruta absoluta del archivo compilado (ej: "/path/to/project/dist/server/pokedex/index.js")
25
31
  */
26
- export declare function getCompiledProdPage(pageFile: string): string;
27
- export declare function resolvePlatformCSS(basePath: string, platform: PlatformInfo): Promise<string>;
28
- export declare function generateTempEntries(distPath?: string, platformInfo?: PlatformInfo): Promise<string[]>;
29
- export declare function generateSingleEntry(page: PageInfo, entryPath: string, preferredScssFile: string): Promise<void>;
30
- export declare function getClientEntriesInput(distPath?: string): Promise<Record<string, string>>;