almostnode 0.2.3 → 0.2.4
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/frameworks/next-dev-server.d.ts +5 -0
- package/dist/frameworks/next-dev-server.d.ts.map +1 -1
- package/dist/index.cjs +127 -11
- package/dist/index.cjs.map +1 -1
- package/dist/index.mjs +128 -11
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
- package/src/frameworks/next-dev-server.ts +135 -8
|
@@ -96,6 +96,11 @@ export declare class NextDevServer extends DevServer {
|
|
|
96
96
|
* Maps /_next/pages/index.js → /pages/index.jsx (transformed)
|
|
97
97
|
*/
|
|
98
98
|
private servePageComponent;
|
|
99
|
+
/**
|
|
100
|
+
* Serve app components for client-side navigation (App Router)
|
|
101
|
+
* Maps /_next/app/app/about/page.js → /app/about/page.tsx (transformed)
|
|
102
|
+
*/
|
|
103
|
+
private serveAppComponent;
|
|
99
104
|
/**
|
|
100
105
|
* Handle API route requests
|
|
101
106
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"next-dev-server.d.ts","sourceRoot":"","sources":["../../src/frameworks/next-dev-server.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,YAAY,EAAa,MAAM,eAAe,CAAC;AACrF,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AA4DzC,MAAM,WAAW,oBAAqB,SAAQ,gBAAgB;IAC5D,0CAA0C;IAC1C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,qDAAqD;IACrD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,8DAA8D;IAC9D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,iEAAiE;IACjE,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,0FAA0F;IAC1F,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC9B;AAilBD;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,qBAAa,aAAc,SAAQ,SAAS;IAC1C,iDAAiD;IACjD,OAAO,CAAC,QAAQ,CAAS;IAEzB,6CAA6C;IAC7C,OAAO,CAAC,MAAM,CAAS;IAEvB,mDAAmD;IACnD,OAAO,CAAC,SAAS,CAAS;IAE1B,+DAA+D;IAC/D,OAAO,CAAC,YAAY,CAAU;IAE9B,yCAAyC;IACzC,OAAO,CAAC,cAAc,CAA6B;IAEnD,2DAA2D;IAC3D,OAAO,CAAC,eAAe,CAAuB;IAE9C,sDAAsD;IACtD,OAAO,CAAC,OAAO,CAAuB;gBAE1B,GAAG,EAAE,SAAS,EAAE,OAAO,EAAE,oBAAoB;IAiBzD;;;OAGG;IACH,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAKxC;;OAEG;IACH,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAIhC;;;OAGG;IACH,YAAY,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI;IAIxC;;;OAGG;IACH,OAAO,CAAC,iBAAiB;IAqBzB;;OAEG;IACH,OAAO,CAAC,YAAY;IAgBpB;;OAEG;IACG,aAAa,CACjB,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC/B,IAAI,CAAC,EAAE,MAAM,GACZ,OAAO,CAAC,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"next-dev-server.d.ts","sourceRoot":"","sources":["../../src/frameworks/next-dev-server.ts"],"names":[],"mappings":"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"}
|
package/dist/index.cjs
CHANGED
|
@@ -12666,6 +12666,9 @@ class NextDevServer extends DevServer {
|
|
|
12666
12666
|
if (pathname.startsWith("/_next/pages/")) {
|
|
12667
12667
|
return this.servePageComponent(pathname);
|
|
12668
12668
|
}
|
|
12669
|
+
if (pathname.startsWith("/_next/app/")) {
|
|
12670
|
+
return this.serveAppComponent(pathname);
|
|
12671
|
+
}
|
|
12669
12672
|
if (pathname.startsWith("/_next/static/")) {
|
|
12670
12673
|
return this.serveStaticAsset(pathname);
|
|
12671
12674
|
}
|
|
@@ -12740,6 +12743,21 @@ class NextDevServer extends DevServer {
|
|
|
12740
12743
|
}
|
|
12741
12744
|
return this.transformAndServe(pageFile, pageFile);
|
|
12742
12745
|
}
|
|
12746
|
+
/**
|
|
12747
|
+
* Serve app components for client-side navigation (App Router)
|
|
12748
|
+
* Maps /_next/app/app/about/page.js → /app/about/page.tsx (transformed)
|
|
12749
|
+
*/
|
|
12750
|
+
async serveAppComponent(pathname) {
|
|
12751
|
+
const filePath = pathname.replace("/_next/app", "").replace(/\.js$/, "");
|
|
12752
|
+
const extensions = [".tsx", ".jsx", ".ts", ".js"];
|
|
12753
|
+
for (const ext of extensions) {
|
|
12754
|
+
const fullPath = filePath + ext;
|
|
12755
|
+
if (this.exists(fullPath)) {
|
|
12756
|
+
return this.transformAndServe(fullPath, fullPath);
|
|
12757
|
+
}
|
|
12758
|
+
}
|
|
12759
|
+
return this.notFound(pathname);
|
|
12760
|
+
}
|
|
12743
12761
|
/**
|
|
12744
12762
|
* Handle API route requests
|
|
12745
12763
|
*/
|
|
@@ -13278,11 +13296,9 @@ class NextDevServer extends DevServer {
|
|
|
13278
13296
|
globalCssLinks.push(`<link rel="stylesheet" href="${virtualPrefix}${cssPath}">`);
|
|
13279
13297
|
}
|
|
13280
13298
|
}
|
|
13281
|
-
|
|
13282
|
-
|
|
13283
|
-
let nestedJsx = "React.createElement(Page)";
|
|
13299
|
+
virtualPrefix + route.page;
|
|
13300
|
+
route.layouts.map((layout, i) => `import Layout${i} from '${virtualPrefix}${layout}';`).join("\n ");
|
|
13284
13301
|
for (let i = route.layouts.length - 1; i >= 0; i--) {
|
|
13285
|
-
nestedJsx = `React.createElement(Layout${i}, null, ${nestedJsx})`;
|
|
13286
13302
|
}
|
|
13287
13303
|
const envScript = this.generateEnvScript();
|
|
13288
13304
|
return `<!DOCTYPE html>
|
|
@@ -13326,17 +13342,117 @@ class NextDevServer extends DevServer {
|
|
|
13326
13342
|
<script type="module">
|
|
13327
13343
|
import React from 'react';
|
|
13328
13344
|
import ReactDOM from 'react-dom/client';
|
|
13329
|
-
import Page from '${pageModulePath}';
|
|
13330
|
-
${layoutImports}
|
|
13331
13345
|
|
|
13332
|
-
|
|
13333
|
-
|
|
13346
|
+
const virtualBase = '${virtualPrefix}';
|
|
13347
|
+
|
|
13348
|
+
// Convert URL path to app router page module path
|
|
13349
|
+
function getAppPageModulePath(pathname) {
|
|
13350
|
+
let route = pathname;
|
|
13351
|
+
if (route.startsWith(virtualBase)) {
|
|
13352
|
+
route = route.slice(virtualBase.length);
|
|
13353
|
+
}
|
|
13354
|
+
route = route.replace(/^\\/+/, '/') || '/';
|
|
13355
|
+
// App Router: / -> /app/page, /about -> /app/about/page
|
|
13356
|
+
const pagePath = route === '/' ? '/app/page' : '/app' + route + '/page';
|
|
13357
|
+
return virtualBase + '/_next/app' + pagePath + '.js';
|
|
13358
|
+
}
|
|
13359
|
+
|
|
13360
|
+
// Get layout paths for a route
|
|
13361
|
+
function getLayoutPaths(pathname) {
|
|
13362
|
+
let route = pathname;
|
|
13363
|
+
if (route.startsWith(virtualBase)) {
|
|
13364
|
+
route = route.slice(virtualBase.length);
|
|
13365
|
+
}
|
|
13366
|
+
route = route.replace(/^\\/+/, '/') || '/';
|
|
13367
|
+
|
|
13368
|
+
// Build layout paths from root to current route
|
|
13369
|
+
const layouts = [virtualBase + '/_next/app/app/layout.js'];
|
|
13370
|
+
if (route !== '/') {
|
|
13371
|
+
const segments = route.split('/').filter(Boolean);
|
|
13372
|
+
let currentPath = '/app';
|
|
13373
|
+
for (const segment of segments) {
|
|
13374
|
+
currentPath += '/' + segment;
|
|
13375
|
+
layouts.push(virtualBase + '/_next/app' + currentPath + '/layout.js');
|
|
13376
|
+
}
|
|
13377
|
+
}
|
|
13378
|
+
return layouts;
|
|
13379
|
+
}
|
|
13380
|
+
|
|
13381
|
+
// Dynamic page loader
|
|
13382
|
+
async function loadPage(pathname) {
|
|
13383
|
+
const modulePath = getAppPageModulePath(pathname);
|
|
13384
|
+
try {
|
|
13385
|
+
const module = await import(/* @vite-ignore */ modulePath);
|
|
13386
|
+
return module.default;
|
|
13387
|
+
} catch (e) {
|
|
13388
|
+
console.error('[Navigation] Failed to load page:', modulePath, e);
|
|
13389
|
+
return null;
|
|
13390
|
+
}
|
|
13334
13391
|
}
|
|
13335
13392
|
|
|
13393
|
+
// Load layouts (with caching)
|
|
13394
|
+
const layoutCache = new Map();
|
|
13395
|
+
async function loadLayouts(pathname) {
|
|
13396
|
+
const layoutPaths = getLayoutPaths(pathname);
|
|
13397
|
+
const layouts = [];
|
|
13398
|
+
for (const path of layoutPaths) {
|
|
13399
|
+
if (layoutCache.has(path)) {
|
|
13400
|
+
layouts.push(layoutCache.get(path));
|
|
13401
|
+
} else {
|
|
13402
|
+
try {
|
|
13403
|
+
const module = await import(/* @vite-ignore */ path);
|
|
13404
|
+
layoutCache.set(path, module.default);
|
|
13405
|
+
layouts.push(module.default);
|
|
13406
|
+
} catch (e) {
|
|
13407
|
+
// Layout might not exist for this segment, skip
|
|
13408
|
+
}
|
|
13409
|
+
}
|
|
13410
|
+
}
|
|
13411
|
+
return layouts;
|
|
13412
|
+
}
|
|
13413
|
+
|
|
13414
|
+
// Router component
|
|
13415
|
+
function Router() {
|
|
13416
|
+
const [Page, setPage] = React.useState(null);
|
|
13417
|
+
const [layouts, setLayouts] = React.useState([]);
|
|
13418
|
+
const [path, setPath] = React.useState(window.location.pathname);
|
|
13419
|
+
|
|
13420
|
+
React.useEffect(() => {
|
|
13421
|
+
Promise.all([loadPage(path), loadLayouts(path)]).then(([P, L]) => {
|
|
13422
|
+
if (P) setPage(() => P);
|
|
13423
|
+
setLayouts(L);
|
|
13424
|
+
});
|
|
13425
|
+
}, []);
|
|
13426
|
+
|
|
13427
|
+
React.useEffect(() => {
|
|
13428
|
+
const handleNavigation = async () => {
|
|
13429
|
+
const newPath = window.location.pathname;
|
|
13430
|
+
if (newPath !== path) {
|
|
13431
|
+
setPath(newPath);
|
|
13432
|
+
const [P, L] = await Promise.all([loadPage(newPath), loadLayouts(newPath)]);
|
|
13433
|
+
if (P) setPage(() => P);
|
|
13434
|
+
setLayouts(L);
|
|
13435
|
+
}
|
|
13436
|
+
};
|
|
13437
|
+
window.addEventListener('popstate', handleNavigation);
|
|
13438
|
+
return () => window.removeEventListener('popstate', handleNavigation);
|
|
13439
|
+
}, [path]);
|
|
13440
|
+
|
|
13441
|
+
if (!Page) return null;
|
|
13442
|
+
|
|
13443
|
+
// Build nested layout structure
|
|
13444
|
+
let content = React.createElement(Page);
|
|
13445
|
+
for (let i = layouts.length - 1; i >= 0; i--) {
|
|
13446
|
+
content = React.createElement(layouts[i], null, content);
|
|
13447
|
+
}
|
|
13448
|
+
return content;
|
|
13449
|
+
}
|
|
13450
|
+
|
|
13451
|
+
// Mark that we've initialized (for testing no-reload)
|
|
13452
|
+
window.__NEXT_INITIALIZED__ = Date.now();
|
|
13453
|
+
|
|
13336
13454
|
ReactDOM.createRoot(document.getElementById('__next')).render(
|
|
13337
|
-
React.createElement(React.StrictMode, null,
|
|
13338
|
-
React.createElement(App)
|
|
13339
|
-
)
|
|
13455
|
+
React.createElement(React.StrictMode, null, React.createElement(Router))
|
|
13340
13456
|
);
|
|
13341
13457
|
</script>
|
|
13342
13458
|
</body>
|