next 15.4.0-canary.80 → 15.4.0-canary.81
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/bin/next +1 -1
- package/dist/build/index.js +2 -2
- package/dist/build/swc/index.js +1 -1
- package/dist/build/webpack-config.js +2 -2
- package/dist/client/app-bootstrap.js +1 -1
- package/dist/client/index.js +1 -1
- package/dist/compiled/next-devtools/index.js +1 -1
- package/dist/compiled/next-devtools/index.js.map +1 -1
- package/dist/compiled/next-server/app-page-experimental.runtime.dev.js +2 -2
- package/dist/compiled/next-server/app-page-experimental.runtime.dev.js.map +1 -1
- package/dist/compiled/next-server/app-page-turbo.runtime.dev.js +2 -2
- package/dist/compiled/next-server/app-page-turbo.runtime.dev.js.map +1 -1
- package/dist/compiled/next-server/pages-api-turbo.runtime.prod.js +1 -1
- package/dist/compiled/next-server/pages-api-turbo.runtime.prod.js.map +1 -1
- package/dist/compiled/next-server/pages-api.runtime.dev.js +1 -1
- package/dist/compiled/next-server/pages-api.runtime.dev.js.map +1 -1
- package/dist/compiled/next-server/pages-api.runtime.prod.js +1 -1
- package/dist/compiled/next-server/pages-api.runtime.prod.js.map +1 -1
- package/dist/compiled/next-server/pages-turbo.runtime.prod.js +1 -1
- package/dist/compiled/next-server/pages-turbo.runtime.prod.js.map +1 -1
- package/dist/compiled/next-server/pages.runtime.dev.js +1 -1
- package/dist/compiled/next-server/pages.runtime.dev.js.map +1 -1
- package/dist/compiled/next-server/pages.runtime.prod.js +1 -1
- package/dist/compiled/next-server/pages.runtime.prod.js.map +1 -1
- package/dist/esm/build/index.js +2 -2
- package/dist/esm/build/swc/index.js +1 -1
- package/dist/esm/build/webpack-config.js +2 -2
- package/dist/esm/client/app-bootstrap.js +1 -1
- package/dist/esm/client/index.js +1 -1
- package/dist/esm/lib/find-root.js +1 -1
- package/dist/esm/lib/find-root.js.map +1 -1
- package/dist/esm/next-devtools/userspace/app/segment-explorer.js +18 -0
- package/dist/esm/next-devtools/userspace/app/segment-explorer.js.map +1 -0
- package/dist/esm/server/app-render/entry-base.js +1 -2
- package/dist/esm/server/app-render/entry-base.js.map +1 -1
- package/dist/esm/server/dev/hot-reloader-turbopack.js +1 -1
- package/dist/esm/server/dev/hot-reloader-webpack.js +1 -1
- package/dist/esm/server/lib/app-info-log.js +1 -1
- package/dist/esm/server/lib/start-server.js +1 -1
- package/dist/esm/shared/lib/canary-only.js +1 -1
- package/dist/lib/find-root.js +1 -1
- package/dist/lib/find-root.js.map +1 -1
- package/dist/next-devtools/dev-overlay/components/overview/segment-explorer.d.ts +1 -1
- package/dist/{shared/lib/devtool/trie.d.ts → next-devtools/dev-overlay/segment-explorer.d.ts} +14 -6
- package/dist/next-devtools/dev-overlay.browser.d.ts +3 -0
- package/dist/next-devtools/userspace/app/segment-explorer.d.ts +6 -0
- package/dist/next-devtools/userspace/app/segment-explorer.js +34 -0
- package/dist/next-devtools/userspace/app/segment-explorer.js.map +1 -0
- package/dist/server/app-render/entry-base.d.ts +1 -1
- package/dist/server/app-render/entry-base.js +1 -2
- package/dist/server/app-render/entry-base.js.map +1 -1
- package/dist/server/dev/hot-reloader-turbopack.js +1 -1
- package/dist/server/dev/hot-reloader-webpack.js +1 -1
- package/dist/server/lib/app-info-log.js +1 -1
- package/dist/server/lib/start-server.js +1 -1
- package/dist/shared/lib/canary-only.js +1 -1
- package/dist/telemetry/anonymous-meta.js +1 -1
- package/dist/telemetry/events/session-stopped.js +2 -2
- package/dist/telemetry/events/version.js +2 -2
- package/package.json +15 -15
- package/dist/esm/shared/lib/devtool/app-segment-tree.js +0 -67
- package/dist/esm/shared/lib/devtool/app-segment-tree.js.map +0 -1
- package/dist/esm/shared/lib/devtool/trie.js +0 -46
- package/dist/esm/shared/lib/devtool/trie.js.map +0 -1
- package/dist/shared/lib/devtool/app-segment-tree.d.ts +0 -21
- package/dist/shared/lib/devtool/app-segment-tree.js +0 -89
- package/dist/shared/lib/devtool/app-segment-tree.js.map +0 -1
- package/dist/shared/lib/devtool/trie.js +0 -56
- package/dist/shared/lib/devtool/trie.js.map +0 -1
@@ -1,67 +0,0 @@
|
|
1
|
-
'use client';
|
2
|
-
import { useEffect, useSyncExternalStore } from 'react';
|
3
|
-
import { createTrie } from './trie';
|
4
|
-
const DEFAULT_CLIENT_STATE = typeof window === 'undefined' ? undefined : createTrie({
|
5
|
-
getKey: (item)=>item.pagePath
|
6
|
-
});
|
7
|
-
function getSegmentTreeClientState() {
|
8
|
-
if (typeof window === 'undefined') {
|
9
|
-
return {};
|
10
|
-
}
|
11
|
-
if (!window.__NEXT_DEVTOOLS_CLIENT_STATE) {
|
12
|
-
window.__NEXT_DEVTOOLS_CLIENT_STATE = {
|
13
|
-
// Initial state
|
14
|
-
tree: DEFAULT_CLIENT_STATE
|
15
|
-
};
|
16
|
-
}
|
17
|
-
return window.__NEXT_DEVTOOLS_CLIENT_STATE;
|
18
|
-
}
|
19
|
-
const listeners = typeof window === 'undefined' ? null : new Set();
|
20
|
-
const createSegmentTreeStore = ()=>{
|
21
|
-
if (typeof window === 'undefined') {
|
22
|
-
return {
|
23
|
-
subscribe: ()=>()=>void 0,
|
24
|
-
getSnapshot: ()=>({}),
|
25
|
-
getServerSnapshot: ()=>undefined
|
26
|
-
};
|
27
|
-
}
|
28
|
-
// return a store that can be used by useSyncExternalStore
|
29
|
-
return {
|
30
|
-
subscribe: (callback)=>{
|
31
|
-
listeners == null ? void 0 : listeners.add(callback);
|
32
|
-
return ()=>listeners == null ? void 0 : listeners.delete(callback);
|
33
|
-
},
|
34
|
-
getSnapshot: ()=>{
|
35
|
-
return getSegmentTreeClientState();
|
36
|
-
},
|
37
|
-
getServerSnapshot: ()=>{
|
38
|
-
return undefined;
|
39
|
-
}
|
40
|
-
};
|
41
|
-
};
|
42
|
-
const { subscribe, getSnapshot, getServerSnapshot } = createSegmentTreeStore();
|
43
|
-
export function SegmentViewNode(param) {
|
44
|
-
let { type, pagePath, children } = param;
|
45
|
-
const clientState = getSegmentTreeClientState();
|
46
|
-
const tree = clientState.tree;
|
47
|
-
useEffect(()=>{
|
48
|
-
if (!tree) {
|
49
|
-
return;
|
50
|
-
}
|
51
|
-
tree.insert({
|
52
|
-
type,
|
53
|
-
pagePath
|
54
|
-
});
|
55
|
-
}, [
|
56
|
-
type,
|
57
|
-
pagePath,
|
58
|
-
tree
|
59
|
-
]);
|
60
|
-
return children;
|
61
|
-
}
|
62
|
-
export function useSegmentTreeClientState() {
|
63
|
-
const state = useSyncExternalStore(subscribe, getSnapshot, getServerSnapshot);
|
64
|
-
return state;
|
65
|
-
}
|
66
|
-
|
67
|
-
//# sourceMappingURL=app-segment-tree.js.map
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"sources":["../../../../src/shared/lib/devtool/app-segment-tree.tsx"],"sourcesContent":["'use client'\n\nimport { type ReactNode, useEffect, useSyncExternalStore } from 'react'\nimport { createTrie, type Trie } from './trie'\n\nexport type SegmentNode = {\n type: string\n pagePath: string\n}\n\ntype DevtoolClientState = {\n tree?: Trie<SegmentNode>\n}\n\nconst DEFAULT_CLIENT_STATE =\n typeof window === 'undefined'\n ? undefined\n : createTrie<SegmentNode>({\n getKey: (item) => item.pagePath,\n })\n\ndeclare global {\n interface Window {\n __NEXT_DEVTOOLS_CLIENT_STATE?: DevtoolClientState\n }\n}\n\nfunction getSegmentTreeClientState(): DevtoolClientState {\n if (typeof window === 'undefined') {\n return {}\n }\n if (!window.__NEXT_DEVTOOLS_CLIENT_STATE) {\n window.__NEXT_DEVTOOLS_CLIENT_STATE = {\n // Initial state\n tree: DEFAULT_CLIENT_STATE,\n }\n }\n return window.__NEXT_DEVTOOLS_CLIENT_STATE\n}\n\nconst listeners = typeof window === 'undefined' ? null : new Set<() => void>()\n\nconst createSegmentTreeStore = (): {\n subscribe: (callback: () => void) => () => void\n getSnapshot: () => DevtoolClientState\n getServerSnapshot: () => undefined\n} => {\n if (typeof window === 'undefined') {\n return {\n subscribe: () => () => void 0,\n getSnapshot: () => ({}),\n getServerSnapshot: () => undefined,\n }\n }\n\n // return a store that can be used by useSyncExternalStore\n return {\n subscribe: (callback) => {\n listeners?.add(callback)\n return () => listeners?.delete(callback)\n },\n getSnapshot: () => {\n return getSegmentTreeClientState()\n },\n getServerSnapshot: () => {\n return undefined\n },\n }\n}\n\nconst { subscribe, getSnapshot, getServerSnapshot } = createSegmentTreeStore()\n\nexport function SegmentViewNode({\n type,\n pagePath,\n children,\n}: {\n type: string\n pagePath: string\n children: ReactNode\n}) {\n const clientState = getSegmentTreeClientState()\n const tree = clientState.tree\n\n useEffect(() => {\n if (!tree) {\n return\n }\n tree.insert({\n type,\n pagePath,\n })\n }, [type, pagePath, tree])\n\n return children\n}\n\nexport function useSegmentTreeClientState() {\n const state = useSyncExternalStore(subscribe, getSnapshot, getServerSnapshot)\n return state\n}\n"],"names":["useEffect","useSyncExternalStore","createTrie","DEFAULT_CLIENT_STATE","window","undefined","getKey","item","pagePath","getSegmentTreeClientState","__NEXT_DEVTOOLS_CLIENT_STATE","tree","listeners","Set","createSegmentTreeStore","subscribe","getSnapshot","getServerSnapshot","callback","add","delete","SegmentViewNode","type","children","clientState","insert","useSegmentTreeClientState","state"],"mappings":"AAAA;AAEA,SAAyBA,SAAS,EAAEC,oBAAoB,QAAQ,QAAO;AACvE,SAASC,UAAU,QAAmB,SAAQ;AAW9C,MAAMC,uBACJ,OAAOC,WAAW,cACdC,YACAH,WAAwB;IACtBI,QAAQ,CAACC,OAASA,KAAKC,QAAQ;AACjC;AAQN,SAASC;IACP,IAAI,OAAOL,WAAW,aAAa;QACjC,OAAO,CAAC;IACV;IACA,IAAI,CAACA,OAAOM,4BAA4B,EAAE;QACxCN,OAAOM,4BAA4B,GAAG;YACpC,gBAAgB;YAChBC,MAAMR;QACR;IACF;IACA,OAAOC,OAAOM,4BAA4B;AAC5C;AAEA,MAAME,YAAY,OAAOR,WAAW,cAAc,OAAO,IAAIS;AAE7D,MAAMC,yBAAyB;IAK7B,IAAI,OAAOV,WAAW,aAAa;QACjC,OAAO;YACLW,WAAW,IAAM,IAAM,KAAK;YAC5BC,aAAa,IAAO,CAAA,CAAC,CAAA;YACrBC,mBAAmB,IAAMZ;QAC3B;IACF;IAEA,0DAA0D;IAC1D,OAAO;QACLU,WAAW,CAACG;YACVN,6BAAAA,UAAWO,GAAG,CAACD;YACf,OAAO,IAAMN,6BAAAA,UAAWQ,MAAM,CAACF;QACjC;QACAF,aAAa;YACX,OAAOP;QACT;QACAQ,mBAAmB;YACjB,OAAOZ;QACT;IACF;AACF;AAEA,MAAM,EAAEU,SAAS,EAAEC,WAAW,EAAEC,iBAAiB,EAAE,GAAGH;AAEtD,OAAO,SAASO,gBAAgB,KAQ/B;IAR+B,IAAA,EAC9BC,IAAI,EACJd,QAAQ,EACRe,QAAQ,EAKT,GAR+B;IAS9B,MAAMC,cAAcf;IACpB,MAAME,OAAOa,YAAYb,IAAI;IAE7BX,UAAU;QACR,IAAI,CAACW,MAAM;YACT;QACF;QACAA,KAAKc,MAAM,CAAC;YACVH;YACAd;QACF;IACF,GAAG;QAACc;QAAMd;QAAUG;KAAK;IAEzB,OAAOY;AACT;AAEA,OAAO,SAASG;IACd,MAAMC,QAAQ1B,qBAAqBc,WAAWC,aAAaC;IAC3D,OAAOU;AACT","ignoreList":[0]}
|
@@ -1,46 +0,0 @@
|
|
1
|
-
/**
|
2
|
-
* Trie data structure for storing and searching paths
|
3
|
-
*
|
4
|
-
* This can be used to store app router paths and search for them efficiently.
|
5
|
-
* e.g.
|
6
|
-
*
|
7
|
-
* [trie root]
|
8
|
-
* ├── layout.js
|
9
|
-
* ├── page.js
|
10
|
-
* ├── blog
|
11
|
-
* ├── layout.js
|
12
|
-
* ├── page.js
|
13
|
-
* ├── [slug]
|
14
|
-
* ├── layout.js
|
15
|
-
* ├── page.js
|
16
|
-
**/ export function createTrie(param) {
|
17
|
-
let { getKey = (k)=>k } = param;
|
18
|
-
const root = {
|
19
|
-
value: undefined,
|
20
|
-
children: {}
|
21
|
-
};
|
22
|
-
function insert(value) {
|
23
|
-
let currentNode = root;
|
24
|
-
const key = getKey(value);
|
25
|
-
const segments = key.split('/');
|
26
|
-
for (const segment of segments){
|
27
|
-
if (!currentNode.children[segment]) {
|
28
|
-
currentNode.children[segment] = {
|
29
|
-
// Skip value for intermediate nodes
|
30
|
-
children: {}
|
31
|
-
};
|
32
|
-
}
|
33
|
-
currentNode = currentNode.children[segment];
|
34
|
-
}
|
35
|
-
currentNode.value = value;
|
36
|
-
}
|
37
|
-
function getRoot() {
|
38
|
-
return root;
|
39
|
-
}
|
40
|
-
return {
|
41
|
-
insert,
|
42
|
-
getRoot
|
43
|
-
};
|
44
|
-
}
|
45
|
-
|
46
|
-
//# sourceMappingURL=trie.js.map
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"sources":["../../../../src/shared/lib/devtool/trie.ts"],"sourcesContent":["/**\n * Trie data structure for storing and searching paths\n *\n * This can be used to store app router paths and search for them efficiently.\n * e.g.\n *\n * [trie root]\n * ├── layout.js\n * ├── page.js\n * ├── blog\n * ├── layout.js\n * ├── page.js\n * ├── [slug]\n * ├── layout.js\n * ├── page.js\n **/\n\nexport type TrieNode<Value = string> = {\n value?: Value\n children: {\n [key: string]: TrieNode<Value> | undefined\n }\n}\n\nexport type Trie<Value = string> = {\n insert: (value: Value) => void\n getRoot: () => TrieNode<Value>\n}\n\nexport function createTrie<Value = string>({\n getKey = (k) => k as unknown as string,\n}: {\n getKey: (k: Value) => string\n}): Trie<Value> {\n const root: TrieNode<Value> = {\n value: undefined,\n children: {},\n }\n\n function insert(value: Value) {\n let currentNode = root\n const key = getKey(value)\n const segments = key.split('/')\n\n for (const segment of segments) {\n if (!currentNode.children[segment]) {\n currentNode.children[segment] = {\n // Skip value for intermediate nodes\n children: {},\n }\n }\n currentNode = currentNode.children[segment]\n }\n\n currentNode.value = value\n }\n\n function getRoot(): TrieNode<Value> {\n return root\n }\n\n return { insert, getRoot }\n}\n"],"names":["createTrie","getKey","k","root","value","undefined","children","insert","currentNode","key","segments","split","segment","getRoot"],"mappings":"AAAA;;;;;;;;;;;;;;;EAeE,GAcF,OAAO,SAASA,WAA2B,KAI1C;IAJ0C,IAAA,EACzCC,SAAS,CAACC,IAAMA,CAAsB,EAGvC,GAJ0C;IAKzC,MAAMC,OAAwB;QAC5BC,OAAOC;QACPC,UAAU,CAAC;IACb;IAEA,SAASC,OAAOH,KAAY;QAC1B,IAAII,cAAcL;QAClB,MAAMM,MAAMR,OAAOG;QACnB,MAAMM,WAAWD,IAAIE,KAAK,CAAC;QAE3B,KAAK,MAAMC,WAAWF,SAAU;YAC9B,IAAI,CAACF,YAAYF,QAAQ,CAACM,QAAQ,EAAE;gBAClCJ,YAAYF,QAAQ,CAACM,QAAQ,GAAG;oBAC9B,oCAAoC;oBACpCN,UAAU,CAAC;gBACb;YACF;YACAE,cAAcA,YAAYF,QAAQ,CAACM,QAAQ;QAC7C;QAEAJ,YAAYJ,KAAK,GAAGA;IACtB;IAEA,SAASS;QACP,OAAOV;IACT;IAEA,OAAO;QAAEI;QAAQM;IAAQ;AAC3B","ignoreList":[0]}
|
@@ -1,21 +0,0 @@
|
|
1
|
-
import { type ReactNode } from 'react';
|
2
|
-
import { type Trie } from './trie';
|
3
|
-
export type SegmentNode = {
|
4
|
-
type: string;
|
5
|
-
pagePath: string;
|
6
|
-
};
|
7
|
-
type DevtoolClientState = {
|
8
|
-
tree?: Trie<SegmentNode>;
|
9
|
-
};
|
10
|
-
declare global {
|
11
|
-
interface Window {
|
12
|
-
__NEXT_DEVTOOLS_CLIENT_STATE?: DevtoolClientState;
|
13
|
-
}
|
14
|
-
}
|
15
|
-
export declare function SegmentViewNode({ type, pagePath, children, }: {
|
16
|
-
type: string;
|
17
|
-
pagePath: string;
|
18
|
-
children: ReactNode;
|
19
|
-
}): ReactNode;
|
20
|
-
export declare function useSegmentTreeClientState(): DevtoolClientState | undefined;
|
21
|
-
export {};
|
@@ -1,89 +0,0 @@
|
|
1
|
-
'use client';
|
2
|
-
"use strict";
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
4
|
-
value: true
|
5
|
-
});
|
6
|
-
0 && (module.exports = {
|
7
|
-
SegmentViewNode: null,
|
8
|
-
useSegmentTreeClientState: null
|
9
|
-
});
|
10
|
-
function _export(target, all) {
|
11
|
-
for(var name in all)Object.defineProperty(target, name, {
|
12
|
-
enumerable: true,
|
13
|
-
get: all[name]
|
14
|
-
});
|
15
|
-
}
|
16
|
-
_export(exports, {
|
17
|
-
SegmentViewNode: function() {
|
18
|
-
return SegmentViewNode;
|
19
|
-
},
|
20
|
-
useSegmentTreeClientState: function() {
|
21
|
-
return useSegmentTreeClientState;
|
22
|
-
}
|
23
|
-
});
|
24
|
-
const _react = require("react");
|
25
|
-
const _trie = require("./trie");
|
26
|
-
const DEFAULT_CLIENT_STATE = typeof window === 'undefined' ? undefined : (0, _trie.createTrie)({
|
27
|
-
getKey: (item)=>item.pagePath
|
28
|
-
});
|
29
|
-
function getSegmentTreeClientState() {
|
30
|
-
if (typeof window === 'undefined') {
|
31
|
-
return {};
|
32
|
-
}
|
33
|
-
if (!window.__NEXT_DEVTOOLS_CLIENT_STATE) {
|
34
|
-
window.__NEXT_DEVTOOLS_CLIENT_STATE = {
|
35
|
-
// Initial state
|
36
|
-
tree: DEFAULT_CLIENT_STATE
|
37
|
-
};
|
38
|
-
}
|
39
|
-
return window.__NEXT_DEVTOOLS_CLIENT_STATE;
|
40
|
-
}
|
41
|
-
const listeners = typeof window === 'undefined' ? null : new Set();
|
42
|
-
const createSegmentTreeStore = ()=>{
|
43
|
-
if (typeof window === 'undefined') {
|
44
|
-
return {
|
45
|
-
subscribe: ()=>()=>void 0,
|
46
|
-
getSnapshot: ()=>({}),
|
47
|
-
getServerSnapshot: ()=>undefined
|
48
|
-
};
|
49
|
-
}
|
50
|
-
// return a store that can be used by useSyncExternalStore
|
51
|
-
return {
|
52
|
-
subscribe: (callback)=>{
|
53
|
-
listeners == null ? void 0 : listeners.add(callback);
|
54
|
-
return ()=>listeners == null ? void 0 : listeners.delete(callback);
|
55
|
-
},
|
56
|
-
getSnapshot: ()=>{
|
57
|
-
return getSegmentTreeClientState();
|
58
|
-
},
|
59
|
-
getServerSnapshot: ()=>{
|
60
|
-
return undefined;
|
61
|
-
}
|
62
|
-
};
|
63
|
-
};
|
64
|
-
const { subscribe, getSnapshot, getServerSnapshot } = createSegmentTreeStore();
|
65
|
-
function SegmentViewNode(param) {
|
66
|
-
let { type, pagePath, children } = param;
|
67
|
-
const clientState = getSegmentTreeClientState();
|
68
|
-
const tree = clientState.tree;
|
69
|
-
(0, _react.useEffect)(()=>{
|
70
|
-
if (!tree) {
|
71
|
-
return;
|
72
|
-
}
|
73
|
-
tree.insert({
|
74
|
-
type,
|
75
|
-
pagePath
|
76
|
-
});
|
77
|
-
}, [
|
78
|
-
type,
|
79
|
-
pagePath,
|
80
|
-
tree
|
81
|
-
]);
|
82
|
-
return children;
|
83
|
-
}
|
84
|
-
function useSegmentTreeClientState() {
|
85
|
-
const state = (0, _react.useSyncExternalStore)(subscribe, getSnapshot, getServerSnapshot);
|
86
|
-
return state;
|
87
|
-
}
|
88
|
-
|
89
|
-
//# sourceMappingURL=app-segment-tree.js.map
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"sources":["../../../../src/shared/lib/devtool/app-segment-tree.tsx"],"sourcesContent":["'use client'\n\nimport { type ReactNode, useEffect, useSyncExternalStore } from 'react'\nimport { createTrie, type Trie } from './trie'\n\nexport type SegmentNode = {\n type: string\n pagePath: string\n}\n\ntype DevtoolClientState = {\n tree?: Trie<SegmentNode>\n}\n\nconst DEFAULT_CLIENT_STATE =\n typeof window === 'undefined'\n ? undefined\n : createTrie<SegmentNode>({\n getKey: (item) => item.pagePath,\n })\n\ndeclare global {\n interface Window {\n __NEXT_DEVTOOLS_CLIENT_STATE?: DevtoolClientState\n }\n}\n\nfunction getSegmentTreeClientState(): DevtoolClientState {\n if (typeof window === 'undefined') {\n return {}\n }\n if (!window.__NEXT_DEVTOOLS_CLIENT_STATE) {\n window.__NEXT_DEVTOOLS_CLIENT_STATE = {\n // Initial state\n tree: DEFAULT_CLIENT_STATE,\n }\n }\n return window.__NEXT_DEVTOOLS_CLIENT_STATE\n}\n\nconst listeners = typeof window === 'undefined' ? null : new Set<() => void>()\n\nconst createSegmentTreeStore = (): {\n subscribe: (callback: () => void) => () => void\n getSnapshot: () => DevtoolClientState\n getServerSnapshot: () => undefined\n} => {\n if (typeof window === 'undefined') {\n return {\n subscribe: () => () => void 0,\n getSnapshot: () => ({}),\n getServerSnapshot: () => undefined,\n }\n }\n\n // return a store that can be used by useSyncExternalStore\n return {\n subscribe: (callback) => {\n listeners?.add(callback)\n return () => listeners?.delete(callback)\n },\n getSnapshot: () => {\n return getSegmentTreeClientState()\n },\n getServerSnapshot: () => {\n return undefined\n },\n }\n}\n\nconst { subscribe, getSnapshot, getServerSnapshot } = createSegmentTreeStore()\n\nexport function SegmentViewNode({\n type,\n pagePath,\n children,\n}: {\n type: string\n pagePath: string\n children: ReactNode\n}) {\n const clientState = getSegmentTreeClientState()\n const tree = clientState.tree\n\n useEffect(() => {\n if (!tree) {\n return\n }\n tree.insert({\n type,\n pagePath,\n })\n }, [type, pagePath, tree])\n\n return children\n}\n\nexport function useSegmentTreeClientState() {\n const state = useSyncExternalStore(subscribe, getSnapshot, getServerSnapshot)\n return state\n}\n"],"names":["SegmentViewNode","useSegmentTreeClientState","DEFAULT_CLIENT_STATE","window","undefined","createTrie","getKey","item","pagePath","getSegmentTreeClientState","__NEXT_DEVTOOLS_CLIENT_STATE","tree","listeners","Set","createSegmentTreeStore","subscribe","getSnapshot","getServerSnapshot","callback","add","delete","type","children","clientState","useEffect","insert","state","useSyncExternalStore"],"mappings":"AAAA;;;;;;;;;;;;;;;;IAwEgBA,eAAe;eAAfA;;IAyBAC,yBAAyB;eAAzBA;;;uBA/FgD;sBAC1B;AAWtC,MAAMC,uBACJ,OAAOC,WAAW,cACdC,YACAC,IAAAA,gBAAU,EAAc;IACtBC,QAAQ,CAACC,OAASA,KAAKC,QAAQ;AACjC;AAQN,SAASC;IACP,IAAI,OAAON,WAAW,aAAa;QACjC,OAAO,CAAC;IACV;IACA,IAAI,CAACA,OAAOO,4BAA4B,EAAE;QACxCP,OAAOO,4BAA4B,GAAG;YACpC,gBAAgB;YAChBC,MAAMT;QACR;IACF;IACA,OAAOC,OAAOO,4BAA4B;AAC5C;AAEA,MAAME,YAAY,OAAOT,WAAW,cAAc,OAAO,IAAIU;AAE7D,MAAMC,yBAAyB;IAK7B,IAAI,OAAOX,WAAW,aAAa;QACjC,OAAO;YACLY,WAAW,IAAM,IAAM,KAAK;YAC5BC,aAAa,IAAO,CAAA,CAAC,CAAA;YACrBC,mBAAmB,IAAMb;QAC3B;IACF;IAEA,0DAA0D;IAC1D,OAAO;QACLW,WAAW,CAACG;YACVN,6BAAAA,UAAWO,GAAG,CAACD;YACf,OAAO,IAAMN,6BAAAA,UAAWQ,MAAM,CAACF;QACjC;QACAF,aAAa;YACX,OAAOP;QACT;QACAQ,mBAAmB;YACjB,OAAOb;QACT;IACF;AACF;AAEA,MAAM,EAAEW,SAAS,EAAEC,WAAW,EAAEC,iBAAiB,EAAE,GAAGH;AAE/C,SAASd,gBAAgB,KAQ/B;IAR+B,IAAA,EAC9BqB,IAAI,EACJb,QAAQ,EACRc,QAAQ,EAKT,GAR+B;IAS9B,MAAMC,cAAcd;IACpB,MAAME,OAAOY,YAAYZ,IAAI;IAE7Ba,IAAAA,gBAAS,EAAC;QACR,IAAI,CAACb,MAAM;YACT;QACF;QACAA,KAAKc,MAAM,CAAC;YACVJ;YACAb;QACF;IACF,GAAG;QAACa;QAAMb;QAAUG;KAAK;IAEzB,OAAOW;AACT;AAEO,SAASrB;IACd,MAAMyB,QAAQC,IAAAA,2BAAoB,EAACZ,WAAWC,aAAaC;IAC3D,OAAOS;AACT","ignoreList":[0]}
|
@@ -1,56 +0,0 @@
|
|
1
|
-
/**
|
2
|
-
* Trie data structure for storing and searching paths
|
3
|
-
*
|
4
|
-
* This can be used to store app router paths and search for them efficiently.
|
5
|
-
* e.g.
|
6
|
-
*
|
7
|
-
* [trie root]
|
8
|
-
* ├── layout.js
|
9
|
-
* ├── page.js
|
10
|
-
* ├── blog
|
11
|
-
* ├── layout.js
|
12
|
-
* ├── page.js
|
13
|
-
* ├── [slug]
|
14
|
-
* ├── layout.js
|
15
|
-
* ├── page.js
|
16
|
-
**/ "use strict";
|
17
|
-
Object.defineProperty(exports, "__esModule", {
|
18
|
-
value: true
|
19
|
-
});
|
20
|
-
Object.defineProperty(exports, "createTrie", {
|
21
|
-
enumerable: true,
|
22
|
-
get: function() {
|
23
|
-
return createTrie;
|
24
|
-
}
|
25
|
-
});
|
26
|
-
function createTrie(param) {
|
27
|
-
let { getKey = (k)=>k } = param;
|
28
|
-
const root = {
|
29
|
-
value: undefined,
|
30
|
-
children: {}
|
31
|
-
};
|
32
|
-
function insert(value) {
|
33
|
-
let currentNode = root;
|
34
|
-
const key = getKey(value);
|
35
|
-
const segments = key.split('/');
|
36
|
-
for (const segment of segments){
|
37
|
-
if (!currentNode.children[segment]) {
|
38
|
-
currentNode.children[segment] = {
|
39
|
-
// Skip value for intermediate nodes
|
40
|
-
children: {}
|
41
|
-
};
|
42
|
-
}
|
43
|
-
currentNode = currentNode.children[segment];
|
44
|
-
}
|
45
|
-
currentNode.value = value;
|
46
|
-
}
|
47
|
-
function getRoot() {
|
48
|
-
return root;
|
49
|
-
}
|
50
|
-
return {
|
51
|
-
insert,
|
52
|
-
getRoot
|
53
|
-
};
|
54
|
-
}
|
55
|
-
|
56
|
-
//# sourceMappingURL=trie.js.map
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"sources":["../../../../src/shared/lib/devtool/trie.ts"],"sourcesContent":["/**\n * Trie data structure for storing and searching paths\n *\n * This can be used to store app router paths and search for them efficiently.\n * e.g.\n *\n * [trie root]\n * ├── layout.js\n * ├── page.js\n * ├── blog\n * ├── layout.js\n * ├── page.js\n * ├── [slug]\n * ├── layout.js\n * ├── page.js\n **/\n\nexport type TrieNode<Value = string> = {\n value?: Value\n children: {\n [key: string]: TrieNode<Value> | undefined\n }\n}\n\nexport type Trie<Value = string> = {\n insert: (value: Value) => void\n getRoot: () => TrieNode<Value>\n}\n\nexport function createTrie<Value = string>({\n getKey = (k) => k as unknown as string,\n}: {\n getKey: (k: Value) => string\n}): Trie<Value> {\n const root: TrieNode<Value> = {\n value: undefined,\n children: {},\n }\n\n function insert(value: Value) {\n let currentNode = root\n const key = getKey(value)\n const segments = key.split('/')\n\n for (const segment of segments) {\n if (!currentNode.children[segment]) {\n currentNode.children[segment] = {\n // Skip value for intermediate nodes\n children: {},\n }\n }\n currentNode = currentNode.children[segment]\n }\n\n currentNode.value = value\n }\n\n function getRoot(): TrieNode<Value> {\n return root\n }\n\n return { insert, getRoot }\n}\n"],"names":["createTrie","getKey","k","root","value","undefined","children","insert","currentNode","key","segments","split","segment","getRoot"],"mappings":"AAAA;;;;;;;;;;;;;;;EAeE;;;;+BAccA;;;eAAAA;;;AAAT,SAASA,WAA2B,KAI1C;IAJ0C,IAAA,EACzCC,SAAS,CAACC,IAAMA,CAAsB,EAGvC,GAJ0C;IAKzC,MAAMC,OAAwB;QAC5BC,OAAOC;QACPC,UAAU,CAAC;IACb;IAEA,SAASC,OAAOH,KAAY;QAC1B,IAAII,cAAcL;QAClB,MAAMM,MAAMR,OAAOG;QACnB,MAAMM,WAAWD,IAAIE,KAAK,CAAC;QAE3B,KAAK,MAAMC,WAAWF,SAAU;YAC9B,IAAI,CAACF,YAAYF,QAAQ,CAACM,QAAQ,EAAE;gBAClCJ,YAAYF,QAAQ,CAACM,QAAQ,GAAG;oBAC9B,oCAAoC;oBACpCN,UAAU,CAAC;gBACb;YACF;YACAE,cAAcA,YAAYF,QAAQ,CAACM,QAAQ;QAC7C;QAEAJ,YAAYJ,KAAK,GAAGA;IACtB;IAEA,SAASS;QACP,OAAOV;IACT;IAEA,OAAO;QAAEI;QAAQM;IAAQ;AAC3B","ignoreList":[0]}
|