lovable-ssr 0.1.21 → 0.1.23

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.
package/dist/index.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import './globals.js';
2
- export type { RouteConfig, ComponentWithGetData, RouteDataParams, SitemapEntry, SitemapRouteConfig, SitemapChangefreq, } from './types.js';
3
- export { registerRoutes, getRoutes } from './registry.js';
2
+ export type { RouteConfig, ComponentWithGetData, RouteDataParams, SitemapEntry, SitemapRouteConfig, SitemapChangefreq, MiddlewareContext, MiddlewareFn, MiddlewareResponse, } from './types.js';
3
+ export { registerRoutes, getRoutes, registerMiddleware } from './registry.js';
4
4
  export { BrowserRouteDataProvider } from './components/BrowserRouteDataProvider.js';
5
5
  export { SEO, type SEOProps } from './components/SEO.js';
6
6
  export { default as RouterService } from './router/RouterService.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,cAAc,CAAC;AACtB,YAAY,EACV,WAAW,EACX,oBAAoB,EACpB,eAAe,EACf,YAAY,EACZ,kBAAkB,EAClB,iBAAiB,GAClB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1D,OAAO,EAAE,wBAAwB,EAAE,MAAM,0CAA0C,CAAC;AACpF,OAAO,EAAE,GAAG,EAAE,KAAK,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,2BAA2B,CAAC;AACrE,OAAO,EACL,iBAAiB,EACjB,YAAY,EACZ,aAAa,EACb,KAAK,cAAc,EACnB,KAAK,iBAAiB,GACvB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AACtD,OAAO,EACL,MAAM,EACN,KAAK,YAAY,EACjB,KAAK,aAAa,GACnB,MAAM,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,cAAc,CAAC;AACtB,YAAY,EACV,WAAW,EACX,oBAAoB,EACpB,eAAe,EACf,YAAY,EACZ,kBAAkB,EAClB,iBAAiB,EACjB,iBAAiB,EACjB,YAAY,EACZ,kBAAkB,GACnB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAC9E,OAAO,EAAE,wBAAwB,EAAE,MAAM,0CAA0C,CAAC;AACpF,OAAO,EAAE,GAAG,EAAE,KAAK,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,2BAA2B,CAAC;AACrE,OAAO,EACL,iBAAiB,EACjB,YAAY,EACZ,aAAa,EACb,KAAK,cAAc,EACnB,KAAK,iBAAiB,GACvB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AACtD,OAAO,EACL,MAAM,EACN,KAAK,YAAY,EACjB,KAAK,aAAa,GACnB,MAAM,iBAAiB,CAAC"}
package/dist/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import './globals.js';
2
- export { registerRoutes, getRoutes } from './registry.js';
2
+ export { registerRoutes, getRoutes, registerMiddleware } from './registry.js';
3
3
  export { BrowserRouteDataProvider } from './components/BrowserRouteDataProvider.js';
4
4
  export { SEO } from './components/SEO.js';
5
5
  export { default as RouterService } from './router/RouterService.js';
@@ -1,4 +1,6 @@
1
- import type { RouteConfig } from './types.js';
1
+ import type { MiddlewareFn, RouteConfig } from './types.js';
2
2
  export declare function registerRoutes(r: RouteConfig[]): void;
3
3
  export declare function getRoutes(): RouteConfig[];
4
+ export declare function registerMiddleware(m: MiddlewareFn): void;
5
+ export declare function getMiddleware(): MiddlewareFn | null;
4
6
  //# sourceMappingURL=registry.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAI9C,wBAAgB,cAAc,CAAC,CAAC,EAAE,WAAW,EAAE,GAAG,IAAI,CAErD;AAED,wBAAgB,SAAS,IAAI,WAAW,EAAE,CAEzC"}
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAK5D,wBAAgB,cAAc,CAAC,CAAC,EAAE,WAAW,EAAE,GAAG,IAAI,CAErD;AAED,wBAAgB,SAAS,IAAI,WAAW,EAAE,CAEzC;AAED,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,YAAY,GAAG,IAAI,CAExD;AAED,wBAAgB,aAAa,IAAI,YAAY,GAAG,IAAI,CAEnD"}
package/dist/registry.js CHANGED
@@ -1,7 +1,14 @@
1
1
  let routes = [];
2
+ let middleware = null;
2
3
  export function registerRoutes(r) {
3
4
  routes = r;
4
5
  }
5
6
  export function getRoutes() {
6
7
  return routes;
7
8
  }
9
+ export function registerMiddleware(m) {
10
+ middleware = m;
11
+ }
12
+ export function getMiddleware() {
13
+ return middleware;
14
+ }
@@ -1,6 +1,6 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
2
  import { renderToString } from 'react-dom/server';
3
- import { StaticRouter } from 'react-router-dom/server';
3
+ import { StaticRouter } from 'react-router-dom/server.js';
4
4
  import { SEOProvider } from '../components/SEOContext.js';
5
5
  import { buildHeadHtmlFromSEO } from './buildHeadHtml.js';
6
6
  import { AppRoutes } from '../components/AppRoutes.js';
@@ -1,4 +1,5 @@
1
1
  import { type Express } from 'express';
2
+ import type { MiddlewareFn } from '../types.js';
2
3
  export interface RenderResult {
3
4
  html: string;
4
5
  preloadedData: Record<string, unknown>;
@@ -22,6 +23,8 @@ export interface CreateServerConfig {
22
23
  sitemap?: {
23
24
  siteUrl: string;
24
25
  };
26
+ /** Middleware executed before rendering each route. If it returns a response, the route is not rendered. */
27
+ middleware?: MiddlewareFn;
25
28
  }
26
29
  export declare function createServer(config: CreateServerConfig): Promise<{
27
30
  getApp: () => Express;
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/ssr/server.ts"],"names":[],"mappings":"AAGA,OAAgB,EAAE,KAAK,OAAO,EAAkD,MAAM,SAAS,CAAC;AAOhG,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACvC,MAAM,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;CACxE;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,yFAAyF;IACzF,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,wGAAwG;IACxG,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,8EAA8E;IAC9E,WAAW,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,IAAI,CAAC;IACrC,uGAAuG;IACvG,OAAO,CAAC,EAAE;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;CAC/B;AAmVD,wBAAsB,YAAY,CAAC,MAAM,EAAE,kBAAkB,GAAG,OAAO,CAAC;IACtE,MAAM,EAAE,MAAM,OAAO,CAAC;IACtB,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,IAAI,KAAK,IAAI,CAAC;CACxD,CAAC,CAOD;AAED;qDACqD;AACrD,wBAAgB,SAAS,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,kBAAkB,CAAC,QAO7D"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/ssr/server.ts"],"names":[],"mappings":"AAGA,OAAgB,EAAE,KAAK,OAAO,EAAkD,MAAM,SAAS,CAAC;AAIhG,OAAO,KAAK,EAAqB,YAAY,EAAsC,MAAM,aAAa,CAAC;AAGvG,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACvC,MAAM,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;CACxE;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,yFAAyF;IACzF,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,wGAAwG;IACxG,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,8EAA8E;IAC9E,WAAW,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,IAAI,CAAC;IACrC,uGAAuG;IACvG,OAAO,CAAC,EAAE;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAC9B,4GAA4G;IAC5G,UAAU,CAAC,EAAE,YAAY,CAAC;CAC3B;AAwXD,wBAAsB,YAAY,CAAC,MAAM,EAAE,kBAAkB,GAAG,OAAO,CAAC;IACtE,MAAM,EAAE,MAAM,OAAO,CAAC;IACtB,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,IAAI,KAAK,IAAI,CAAC;CACxD,CAAC,CAOD;AAED;qDACqD;AACrD,wBAAgB,SAAS,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,kBAAkB,CAAC,QAO7D"}
@@ -3,7 +3,7 @@ import path from 'node:path';
3
3
  import { pathToFileURL } from 'node:url';
4
4
  import express from 'express';
5
5
  import { createServer as createViteServer } from 'vite';
6
- import { getRoutes } from '../registry.js';
6
+ import { getMiddleware, getRoutes } from '../registry.js';
7
7
  import RouterService from '../router/RouterService.js';
8
8
  function defaultDistEntryPath(entryPath) {
9
9
  return entryPath
@@ -32,6 +32,7 @@ class SsrServer {
32
32
  port: config.port ?? 5173,
33
33
  cssLinkInDev: config.cssLinkInDev ?? '<link rel="stylesheet" href="/src/index.css"></head>',
34
34
  extraRoutes: config.extraRoutes ?? (() => { }),
35
+ middleware: config.middleware ?? null,
35
36
  sitemap: config.sitemap ?? undefined,
36
37
  };
37
38
  this.isProd = process.env.NODE_ENV === 'production';
@@ -136,14 +137,66 @@ ${lines.join('\n')}
136
137
  .replace(/"/g, '&quot;')
137
138
  .replace(/'/g, '&apos;');
138
139
  }
140
+ async runMiddleware(ctx) {
141
+ const mw = this.config.middleware ?? getMiddleware();
142
+ if (!mw)
143
+ return;
144
+ return await mw(ctx);
145
+ }
146
+ sendMiddlewareResponse(res, mwRes) {
147
+ if (mwRes.headers) {
148
+ for (const [key, value] of Object.entries(mwRes.headers)) {
149
+ res.setHeader(key, value);
150
+ }
151
+ }
152
+ if (mwRes.redirect) {
153
+ res.redirect(mwRes.status ?? 302, mwRes.redirect);
154
+ return;
155
+ }
156
+ res.status(mwRes.status ?? 200).send(mwRes.body ?? '');
157
+ }
139
158
  async handleRequest(req, res, next) {
140
159
  const url = req.originalUrl;
141
160
  const pathname = url.replace(/\?.*$/, '').replace(/#.*$/, '') || '/';
142
161
  try {
162
+ const matchedRoute = RouterService.matchRoute(pathname);
163
+ const params = matchedRoute
164
+ ? RouterService.routeParams(matchedRoute.path, pathname)
165
+ : { routeParams: {}, searchParams: {} };
166
+ const cookiesRaw = req.headers.cookie ?? '';
167
+ const cookies = {};
168
+ if (cookiesRaw) {
169
+ cookiesRaw.split(';').forEach((part) => {
170
+ const [k, ...rest] = part.split('=');
171
+ if (!k)
172
+ return;
173
+ const key = k.trim();
174
+ if (!key)
175
+ return;
176
+ const value = rest.join('=').trim();
177
+ cookies[key] = decodeURIComponent(value);
178
+ });
179
+ }
180
+ const requestContext = {
181
+ cookiesRaw,
182
+ cookies,
183
+ headers: req.headers,
184
+ method: req.method,
185
+ url: req.originalUrl,
186
+ };
187
+ const mwResult = await this.runMiddleware({
188
+ request: requestContext,
189
+ route: matchedRoute,
190
+ pathname,
191
+ params,
192
+ });
193
+ if (mwResult) {
194
+ return this.sendMiddlewareResponse(res, mwResult);
195
+ }
143
196
  if (!RouterService.isSsrRoute(pathname)) {
144
197
  return await this.renderSpa(url, res);
145
198
  }
146
- return await this.renderSsr(url, res, req);
199
+ return await this.renderSsr(url, res, requestContext);
147
200
  }
148
201
  catch (e) {
149
202
  if (this.vite) {
@@ -162,7 +215,7 @@ ${lines.join('\n')}
162
215
  const template = this.readTemplate(path.join(this.config.root, 'dist', 'index.html'));
163
216
  return res.status(200).set({ 'Content-Type': 'text/html' }).send(template);
164
217
  }
165
- async renderSsr(url, res, req) {
218
+ async renderSsr(url, res, requestContext) {
166
219
  const { template, render } = await this.getSsrRenderer();
167
220
  if (process.env.NODE_ENV !== 'production' && process.env.LOVABLE_SSR_DEBUG) {
168
221
  console.log('[lovable-ssr] render(url)', url);
@@ -170,28 +223,7 @@ ${lines.join('\n')}
170
223
  let appHtml;
171
224
  let preloadedData;
172
225
  let helmet;
173
- // Constrói um contexto simples de request (cookies raw + headers) para o getData.
174
- const cookiesRaw = req.headers.cookie ?? '';
175
- const cookies = {};
176
- if (cookiesRaw) {
177
- cookiesRaw.split(';').forEach((part) => {
178
- const [k, ...rest] = part.split('=');
179
- if (!k)
180
- return;
181
- const key = k.trim();
182
- if (!key)
183
- return;
184
- const value = rest.join('=').trim();
185
- cookies[key] = decodeURIComponent(value);
186
- });
187
- }
188
- const requestContext = {
189
- cookiesRaw,
190
- cookies,
191
- headers: req.headers,
192
- method: req.method,
193
- url: req.originalUrl,
194
- };
226
+ const cookiesRaw = requestContext.cookiesRaw;
195
227
  if (this.isProd) {
196
228
  const cacheKey = this.normalizeCacheKey(url);
197
229
  const hasCookies = !!cookiesRaw;
package/dist/types.d.ts CHANGED
@@ -37,4 +37,17 @@ export type RouteDataParams = {
37
37
  searchParams: Record<string, string>;
38
38
  request?: RequestContext;
39
39
  };
40
+ export type MiddlewareContext = {
41
+ request: RequestContext;
42
+ route: RouteConfig | undefined;
43
+ pathname: string;
44
+ params: Omit<RouteDataParams, 'request'>;
45
+ };
46
+ export type MiddlewareResponse = {
47
+ redirect?: string;
48
+ status?: number;
49
+ headers?: Record<string, string>;
50
+ body?: string;
51
+ };
52
+ export type MiddlewareFn = (ctx: MiddlewareContext) => Promise<MiddlewareResponse | void> | MiddlewareResponse | void;
40
53
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAChD,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,MAAM,MAAM,oBAAoB,GAAG,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG;IAC5D,OAAO,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,eAAe,KAAK,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;CAC1E,CAAC;AAEF,MAAM,MAAM,iBAAiB,GACzB,QAAQ,GACR,QAAQ,GACR,OAAO,GACP,QAAQ,GACR,SAAS,GACT,QAAQ,GACR,OAAO,CAAC;AAEZ,MAAM,MAAM,YAAY,GAAG;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,iBAAiB,CAAC;IAC/B,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,CAAC,EAAE,iBAAiB,CAAC;IAC/B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,8EAA8E;IAC9E,UAAU,CAAC,EAAE,CAAC,GAAG,EAAE;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,KAAK,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;CACpE,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,oBAAoB,CAAC;IAChC,KAAK,EAAE,OAAO,CAAC;IACf,OAAO,CAAC,EAAE,kBAAkB,CAAC;CAC9B,CAAC;AACF,MAAM,MAAM,cAAc,GAAG;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,OAAO,EAAE,mBAAmB,CAAC;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;CACb,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC,OAAO,CAAC,EAAE,cAAc,CAAC;CAC1B,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAChD,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,MAAM,MAAM,oBAAoB,GAAG,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG;IAC5D,OAAO,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,eAAe,KAAK,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;CAC1E,CAAC;AAEF,MAAM,MAAM,iBAAiB,GACzB,QAAQ,GACR,QAAQ,GACR,OAAO,GACP,QAAQ,GACR,SAAS,GACT,QAAQ,GACR,OAAO,CAAC;AAEZ,MAAM,MAAM,YAAY,GAAG;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,iBAAiB,CAAC;IAC/B,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,CAAC,EAAE,iBAAiB,CAAC;IAC/B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,8EAA8E;IAC9E,UAAU,CAAC,EAAE,CAAC,GAAG,EAAE;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,KAAK,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;CACpE,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,oBAAoB,CAAC;IAChC,KAAK,EAAE,OAAO,CAAC;IACf,OAAO,CAAC,EAAE,kBAAkB,CAAC;CAC9B,CAAC;AACF,MAAM,MAAM,cAAc,GAAG;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,OAAO,EAAE,mBAAmB,CAAC;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;CACb,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC,OAAO,CAAC,EAAE,cAAc,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,OAAO,EAAE,cAAc,CAAC;IACxB,KAAK,EAAE,WAAW,GAAG,SAAS,CAAC;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,IAAI,CAAC,eAAe,EAAE,SAAS,CAAC,CAAC;CAC1C,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG,CACzB,GAAG,EAAE,iBAAiB,KACnB,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC,GAAG,kBAAkB,GAAG,IAAI,CAAC"}
package/package.json CHANGED
@@ -1,66 +1,66 @@
1
- {
2
- "name": "lovable-ssr",
3
- "version": "0.1.21",
4
- "description": "SSR and route data engine for Lovable projects",
5
- "license": "MIT",
6
- "keywords": [
7
- "ssr",
8
- "react",
9
- "vite",
10
- "express",
11
- "lovable",
12
- "getData",
13
- "route-registry",
14
- "server-side-rendering"
15
- ],
16
- "type": "module",
17
- "main": "./dist/index.js",
18
- "module": "./dist/index.js",
19
- "types": "./dist/index.d.ts",
20
- "exports": {
21
- ".": {
22
- "import": "./dist/index.js",
23
- "types": "./dist/index.d.ts"
24
- },
25
- "./server": {
26
- "import": "./dist/ssr/server.js",
27
- "types": "./dist/ssr/server.d.ts"
28
- }
29
- },
30
- "files": [
31
- "dist"
32
- ],
33
- "scripts": {
34
- "build": "tsc && npm run build:docs",
35
- "dev": "tsc --watch",
36
- "changelog": "standard-version --message \"[skip ci]\"",
37
- "changelog:rc": "npm run changelog -- --prerelease rc --skip.changelog --skip.tag",
38
- "changelog:patch": "npm run changelog -- --release-as patch --prerelease rc",
39
- "changelog:minor": "npm run changelog -- --release-as minor --prerelease rc",
40
- "changelog:major": "npm run changelog -- --release-as major --prerelease rc",
41
- "build:docs": "cd doc && npm run docs:build"
42
- },
43
- "peerDependencies": {
44
- "react": "^18.0.0",
45
- "react-dom": "^18.0.0",
46
- "react-router-dom": "^6.0.0"
47
- },
48
- "dependencies": {
49
- "express": "^4.21.0"
50
- },
51
- "devDependencies": {
52
- "@types/express": "^4.17.21",
53
- "@types/node": "^22.16.5",
54
- "@types/react": "^18.3.23",
55
- "@types/react-dom": "^18.3.7",
56
- "react": "^18.3.1",
57
- "react-dom": "^18.3.1",
58
- "react-router-dom": "^6.30.1",
59
- "standard-version": "^9.5.0",
60
- "typescript": "^5.8.3",
61
- "vite": "^5.4.19"
62
- },
63
- "engines": {
64
- "node": ">=18"
65
- }
66
- }
1
+ {
2
+ "name": "lovable-ssr",
3
+ "version": "0.1.23",
4
+ "description": "SSR and route data engine for Lovable projects",
5
+ "license": "MIT",
6
+ "keywords": [
7
+ "ssr",
8
+ "react",
9
+ "vite",
10
+ "express",
11
+ "lovable",
12
+ "getData",
13
+ "route-registry",
14
+ "server-side-rendering"
15
+ ],
16
+ "type": "module",
17
+ "main": "./dist/index.js",
18
+ "module": "./dist/index.js",
19
+ "types": "./dist/index.d.ts",
20
+ "exports": {
21
+ ".": {
22
+ "import": "./dist/index.js",
23
+ "types": "./dist/index.d.ts"
24
+ },
25
+ "./server": {
26
+ "import": "./dist/ssr/server.js",
27
+ "types": "./dist/ssr/server.d.ts"
28
+ }
29
+ },
30
+ "files": [
31
+ "dist"
32
+ ],
33
+ "scripts": {
34
+ "build": "tsc && npm run build:docs",
35
+ "dev": "tsc --watch",
36
+ "changelog": "standard-version --message \"[skip ci]\"",
37
+ "changelog:rc": "npm run changelog -- --prerelease rc --skip.changelog --skip.tag",
38
+ "changelog:patch": "npm run changelog -- --release-as patch --prerelease rc",
39
+ "changelog:minor": "npm run changelog -- --release-as minor --prerelease rc",
40
+ "changelog:major": "npm run changelog -- --release-as major --prerelease rc",
41
+ "build:docs": "cd doc && npm run docs:build"
42
+ },
43
+ "peerDependencies": {
44
+ "react": "^18.0.0",
45
+ "react-dom": "^18.0.0",
46
+ "react-router-dom": "^6.0.0"
47
+ },
48
+ "dependencies": {
49
+ "express": "^4.21.0"
50
+ },
51
+ "devDependencies": {
52
+ "@types/express": "^4.17.21",
53
+ "@types/node": "^22.16.5",
54
+ "@types/react": "^18.3.23",
55
+ "@types/react-dom": "^18.3.7",
56
+ "react": "^18.3.1",
57
+ "react-dom": "^18.3.1",
58
+ "react-router-dom": "^6.30.1",
59
+ "standard-version": "^9.5.0",
60
+ "typescript": "^5.8.3",
61
+ "vite": "^5.4.19"
62
+ },
63
+ "engines": {
64
+ "node": ">=18"
65
+ }
66
+ }