@storybook/tanstack-react 11.0.0-alpha.7 → 11.0.0-alpha.8
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/node/index.js +6 -6
- package/dist/preset.js +217 -207
- package/package.json +5 -5
package/dist/node/index.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
3
|
-
import
|
|
1
|
+
import CJS_COMPAT_NODE_URL_reum8t9ydbr from 'node:url';
|
|
2
|
+
import CJS_COMPAT_NODE_PATH_reum8t9ydbr from 'node:path';
|
|
3
|
+
import CJS_COMPAT_NODE_MODULE_reum8t9ydbr from "node:module";
|
|
4
4
|
|
|
5
|
-
var __filename =
|
|
6
|
-
var __dirname =
|
|
7
|
-
var require =
|
|
5
|
+
var __filename = CJS_COMPAT_NODE_URL_reum8t9ydbr.fileURLToPath(import.meta.url);
|
|
6
|
+
var __dirname = CJS_COMPAT_NODE_PATH_reum8t9ydbr.dirname(__filename);
|
|
7
|
+
var require = CJS_COMPAT_NODE_MODULE_reum8t9ydbr.createRequire(import.meta.url);
|
|
8
8
|
|
|
9
9
|
// ------------------------------------------------------------
|
|
10
10
|
// end of CJS compatibility banner, injected by Storybook's esbuild configuration
|
package/dist/preset.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
3
|
-
import
|
|
1
|
+
import CJS_COMPAT_NODE_URL_reum8t9ydbr from 'node:url';
|
|
2
|
+
import CJS_COMPAT_NODE_PATH_reum8t9ydbr from 'node:path';
|
|
3
|
+
import CJS_COMPAT_NODE_MODULE_reum8t9ydbr from "node:module";
|
|
4
4
|
|
|
5
|
-
var __filename =
|
|
6
|
-
var __dirname =
|
|
7
|
-
var require =
|
|
5
|
+
var __filename = CJS_COMPAT_NODE_URL_reum8t9ydbr.fileURLToPath(import.meta.url);
|
|
6
|
+
var __dirname = CJS_COMPAT_NODE_PATH_reum8t9ydbr.dirname(__filename);
|
|
7
|
+
var require = CJS_COMPAT_NODE_MODULE_reum8t9ydbr.createRequire(import.meta.url);
|
|
8
8
|
|
|
9
9
|
// ------------------------------------------------------------
|
|
10
10
|
// end of CJS compatibility banner, injected by Storybook's esbuild configuration
|
|
@@ -20,7 +20,7 @@ var _lazyMatch = () => {
|
|
|
20
20
|
var m = Object.defineProperty, V = Object.getOwnPropertyDescriptor, G = Object.getOwnPropertyNames, T = Object.prototype.hasOwnProperty, q = (r, e) => {
|
|
21
21
|
for (var n in e) m(r, n, { get: e[n], enumerable: !0 });
|
|
22
22
|
}, H = (r, e, n, a) => {
|
|
23
|
-
if (e && typeof e == "object" || typeof e == "function") for (let
|
|
23
|
+
if (e && typeof e == "object" || typeof e == "function") for (let t of G(e)) !T.call(r, t) && t !== n && m(r, t, { get: () => e[t], enumerable: !(a = V(e, t)) || a.enumerable });
|
|
24
24
|
return r;
|
|
25
25
|
}, J = (r) => H(m({}, "__esModule", { value: !0 }), r), w = {};
|
|
26
26
|
q(w, { default: () => re });
|
|
@@ -29,8 +29,8 @@ var _lazyMatch = () => {
|
|
|
29
29
|
return (n) => {
|
|
30
30
|
let a = e.get(n);
|
|
31
31
|
if (a) return a;
|
|
32
|
-
let
|
|
33
|
-
return e.set(n,
|
|
32
|
+
let t = r(n);
|
|
33
|
+
return e.set(n, t), t;
|
|
34
34
|
};
|
|
35
35
|
}, rr = (r, e, n = {}) => {
|
|
36
36
|
let a = { cache: {}, input: r, index: 0, indexMax: 0, options: n, output: [] };
|
|
@@ -40,16 +40,16 @@ var _lazyMatch = () => {
|
|
|
40
40
|
let n = {};
|
|
41
41
|
for (let a of r) {
|
|
42
42
|
if (a.length !== 1) throw new Error(`Invalid character: "${a}"`);
|
|
43
|
-
let
|
|
44
|
-
n[
|
|
43
|
+
let t = a.charCodeAt(0);
|
|
44
|
+
n[t] = !0;
|
|
45
45
|
}
|
|
46
46
|
return (a) => {
|
|
47
|
-
let
|
|
47
|
+
let t = a.index, o = a.input;
|
|
48
48
|
for (; a.index < o.length && o.charCodeAt(a.index) in n; ) a.index += 1;
|
|
49
49
|
let u = a.index;
|
|
50
|
-
if (u >
|
|
50
|
+
if (u > t) {
|
|
51
51
|
if (!h(e) && !a.options.silent) {
|
|
52
|
-
let s = a.input.slice(
|
|
52
|
+
let s = a.input.slice(t, u), c = d(e) ? e(s, o, String(t)) : e;
|
|
53
53
|
h(c) || a.output.push(c);
|
|
54
54
|
}
|
|
55
55
|
a.indexMax = Math.max(a.indexMax, a.index);
|
|
@@ -57,10 +57,10 @@ var _lazyMatch = () => {
|
|
|
57
57
|
return !0;
|
|
58
58
|
};
|
|
59
59
|
}, nr = (r, e) => {
|
|
60
|
-
let n = r.source, a = r.flags.replace(/y|$/, "y"),
|
|
60
|
+
let n = r.source, a = r.flags.replace(/y|$/, "y"), t = new RegExp(n, a);
|
|
61
61
|
return g((o) => {
|
|
62
|
-
|
|
63
|
-
let u =
|
|
62
|
+
t.lastIndex = o.index;
|
|
63
|
+
let u = t.exec(o.input);
|
|
64
64
|
if (u) {
|
|
65
65
|
if (!h(e) && !o.options.silent) {
|
|
66
66
|
let s = d(e) ? e(...u, o.input, String(o.index)) : e;
|
|
@@ -72,56 +72,56 @@ var _lazyMatch = () => {
|
|
|
72
72
|
}, ar = (r, e) => (n) => {
|
|
73
73
|
if (n.input.startsWith(r, n.index)) {
|
|
74
74
|
if (!h(e) && !n.options.silent) {
|
|
75
|
-
let
|
|
76
|
-
h(
|
|
75
|
+
let t = d(e) ? e(r, n.input, String(n.index)) : e;
|
|
76
|
+
h(t) || n.output.push(t);
|
|
77
77
|
}
|
|
78
78
|
return n.index += r.length, n.indexMax = Math.max(n.indexMax, n.index), !0;
|
|
79
79
|
} else return !1;
|
|
80
80
|
}, C = (r, e, n, a) => {
|
|
81
|
-
let
|
|
81
|
+
let t = v(r);
|
|
82
82
|
return g(_(M((o) => {
|
|
83
83
|
let u = 0;
|
|
84
84
|
for (; u < n; ) {
|
|
85
85
|
let s = o.index;
|
|
86
|
-
if (!
|
|
86
|
+
if (!t(o) || (u += 1, o.index === s)) break;
|
|
87
87
|
}
|
|
88
88
|
return u >= e;
|
|
89
89
|
})));
|
|
90
90
|
}, tr = (r, e) => C(r, 0, 1), f = (r, e) => C(r, 0, 1 / 0), x = (r, e) => {
|
|
91
91
|
let n = r.map(v);
|
|
92
92
|
return g(_(M((a) => {
|
|
93
|
-
for (let
|
|
93
|
+
for (let t = 0, o = n.length; t < o; t++) if (!n[t](a)) return !1;
|
|
94
94
|
return !0;
|
|
95
95
|
})));
|
|
96
96
|
}, l = (r, e) => {
|
|
97
97
|
let n = r.map(v);
|
|
98
98
|
return g(_((a) => {
|
|
99
|
-
for (let
|
|
99
|
+
for (let t = 0, o = n.length; t < o; t++) if (n[t](a)) return !0;
|
|
100
100
|
return !1;
|
|
101
101
|
}));
|
|
102
102
|
}, M = (r, e = !1) => {
|
|
103
103
|
let n = v(r);
|
|
104
104
|
return (a) => {
|
|
105
|
-
let
|
|
106
|
-
return (!u || e) && (a.index =
|
|
105
|
+
let t = a.index, o = a.output.length, u = n(a);
|
|
106
|
+
return (!u || e) && (a.index = t, a.output.length !== o && (a.output.length = o)), u;
|
|
107
107
|
};
|
|
108
108
|
}, _ = (r, e) => v(r), g = /* @__PURE__ */ (() => {
|
|
109
109
|
let r = 0;
|
|
110
110
|
return (e) => {
|
|
111
111
|
let n = v(e), a = r += 1;
|
|
112
|
-
return (
|
|
112
|
+
return (t) => {
|
|
113
113
|
var o;
|
|
114
|
-
if (
|
|
115
|
-
let u =
|
|
114
|
+
if (t.options.memoization === !1) return n(t);
|
|
115
|
+
let u = t.index, s = (o = t.cache)[a] || (o[a] = /* @__PURE__ */ new Map()), c = s.get(u);
|
|
116
116
|
if (c === !1) return !1;
|
|
117
|
-
if (W(c)) return
|
|
118
|
-
if (c) return
|
|
117
|
+
if (W(c)) return t.index = c, !0;
|
|
118
|
+
if (c) return t.index = c.index, c.output?.length && t.output.push(...c.output), !0;
|
|
119
119
|
{
|
|
120
|
-
let Z =
|
|
121
|
-
if (n(
|
|
122
|
-
let D =
|
|
120
|
+
let Z = t.output.length;
|
|
121
|
+
if (n(t)) {
|
|
122
|
+
let D = t.index, U = t.output.length;
|
|
123
123
|
if (U > Z) {
|
|
124
|
-
let ee =
|
|
124
|
+
let ee = t.output.slice(Z, U);
|
|
125
125
|
s.set(u, { index: D, output: ee });
|
|
126
126
|
} else s.set(u, D);
|
|
127
127
|
return !0;
|
|
@@ -160,7 +160,7 @@ var _lazyMatch = () => {
|
|
|
160
160
|
}, sr = i(/^\*\*\/\*$/, ".*"), cr = i(/^\*\*\/(\*)?([ a-zA-Z0-9._-]+)$/, (r, e, n) => `.*${e ? "" : "(?:^|/)"}${n.replaceAll(".", "\\.")}`), lr = i(/^\*\*\/(\*)?([ a-zA-Z0-9._-]*)\{([ a-zA-Z0-9._-]+(?:,[ a-zA-Z0-9._-]+)*)\}$/, (r, e, n, a) => `.*${e ? "" : "(?:^|/)"}${n.replaceAll(".", "\\.")}(?:${a.replaceAll(",", "|").replaceAll(".", "\\.")})`), y = i(/\\./, p), pr = i(/[$.*+?^(){}[\]\|]/, (r) => `\\${r}`), vr = i(/./, p), hr = i(/^(?:!!)*!(.*)$/, (r, e) => `(?!^${L(e)}$).*?`), dr = i(/^(!!)+/, ""), fr = l([hr, dr]), xr = i(/\/(\*\*\/)+/, "(?:/.+/|/)"), gr = i(/^(\*\*\/)+/, "(?:^|.*/)"), mr = i(/\/(\*\*)$/, "(?:/.*|$)"), _r = i(/\*\*/, ".*"), j = l([xr, gr, mr, _r]), Sr = i(/\*\/(?!\*\*\/)/, "[^/]*/"), yr = i(/\*/, "[^/]*"), N = l([Sr, yr]), k = i("?", "[^/]"), $r = i("[", p), wr = i("]", p), Ar = i(/[!^]/, "^/"), br = i(/[a-z]-[a-z]|[0-9]-[0-9]/i, p), Cr = i(/[$.*+?^(){}[\|]/, (r) => `\\${r}`), Mr = i(/[^\]]/, p), Er = l([y, Cr, br, Mr]), B = x([$r, tr(Ar), f(Er), wr]), Pr = i("{", "(?:"), Or = i("}", ")"), Rr = i(/(\d+)\.\.(\d+)/, (r, e, n) => or(+e, +n, Math.min(e.length, n.length)).join("|")), zr = i(/([a-z]+)\.\.([a-z]+)/, (r, e, n) => R(e, n).join("|")), jr = i(/([A-Z]+)\.\.([A-Z]+)/, (r, e, n) => R(e.toLowerCase(), n.toLowerCase()).join("|").toUpperCase()), Nr = l([Rr, zr, jr]), I = x([Pr, Nr, Or]), kr = i("{", "(?:"), Br = i("}", ")"), Ir = i(",", "|"), Fr = i(/[$.*+?^(){[\]\|]/, (r) => `\\${r}`), Lr = i(/[^}]/, p), Zr = E(() => F), Dr = l([j, N, k, B, I, Zr, y, Fr, Ir, Lr]), F = x([kr, f(Dr), Br]), Ur = f(l([sr, cr, lr, fr, j, N, k, B, I, F, y, pr, vr])), Vr = Ur, Gr = z(Vr), L = Gr, Tr = i(/\\./, p), qr = i(/./, p), Hr = i(/\*\*\*+/, "*"), Jr = i(/([^/{[(!])\*\*/, (r, e) => `${e}*`), Qr = i(/(^|.)\*\*(?=[^*/)\]}])/, (r, e) => `${e}*`), Wr = f(l([Tr, Hr, Jr, Qr, qr])), Kr = Wr, Xr = z(Kr), Yr = Xr, $ = (r, e) => {
|
|
161
161
|
let n = Array.isArray(r) ? r : [r];
|
|
162
162
|
if (!n.length) return !1;
|
|
163
|
-
let a = n.map($.compile),
|
|
163
|
+
let a = n.map($.compile), t = n.every((s) => /(\/(?:\*\*)?|\[\/\])$/.test(s)), o = e.replace(/[\\\/]+/g, "/").replace(/\/$/, t ? "/" : "");
|
|
164
164
|
return a.some((s) => s.test(o));
|
|
165
165
|
};
|
|
166
166
|
$.compile = (r) => new RegExp(`^${L(Yr(r))}$`, "s");
|
|
@@ -367,7 +367,10 @@ function moduleInterceptionPlugin({
|
|
|
367
367
|
}
|
|
368
368
|
|
|
369
369
|
// src/plugins/server-code-elimination.ts
|
|
370
|
-
import {
|
|
370
|
+
import {
|
|
371
|
+
SourceEditor,
|
|
372
|
+
walk
|
|
373
|
+
} from "storybook/internal/csf-tools";
|
|
371
374
|
var SERVER_FN_RE = /\bcreateServerFn\b/, MIDDLEWARE_RE = /\bcreateMiddleware\b/, ISOMORPHIC_FN_RE = /\bcreateIsomorphicFn\b/, SERVER_ONLY_FN_RE = /\bcreateServerOnlyFn\b/, CLIENT_ONLY_FN_RE = /\bcreateClientOnlyFn\b/, ROUTE_FACTORY_RE = /\b(createFileRoute|createRootRoute|createRootRouteWithContext|createRoute)\b/, ROUTE_FACTORIES = /* @__PURE__ */ new Set([
|
|
372
375
|
"createFileRoute",
|
|
373
376
|
"createRootRoute",
|
|
@@ -392,114 +395,114 @@ function serverCodeEliminationPlugin(options = {}) {
|
|
|
392
395
|
async handler(code, id) {
|
|
393
396
|
if (!/\.[mc]?[jt]sx?$/.test(id) || excludeFiles.some((excluded) => id.includes(excluded)) || !ANY_PATTERN_RE.test(code))
|
|
394
397
|
return null;
|
|
395
|
-
let
|
|
396
|
-
|
|
397
|
-
sourceType: "module",
|
|
398
|
-
parserOpts: {
|
|
399
|
-
plugins: ["typescript", "jsx"]
|
|
400
|
-
},
|
|
401
|
-
plugins: [() => serverCodeElimination(state)],
|
|
402
|
-
sourceMaps: !0,
|
|
403
|
-
configFile: !1,
|
|
404
|
-
babelrc: !1
|
|
405
|
-
});
|
|
406
|
-
return !state.modified || !result?.code ? null : {
|
|
407
|
-
code: result.code,
|
|
408
|
-
map: result.map
|
|
409
|
-
};
|
|
398
|
+
let editor = new SourceEditor(code, id);
|
|
399
|
+
return eliminateServerCode(editor) ? { code: editor.toString(), map: editor.generateMap({ source: id }).toString() } : null;
|
|
410
400
|
}
|
|
411
401
|
}
|
|
412
402
|
};
|
|
413
403
|
}
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
}
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
let innerFn = node.arguments[0];
|
|
438
|
-
innerFn && t.isExpression(innerFn) && (path.replaceWith(sbFnCallWithImpl(innerFn)), state.modified = !0);
|
|
439
|
-
return;
|
|
440
|
-
}
|
|
441
|
-
let methodName = getMethodName(node);
|
|
442
|
-
if (!methodName)
|
|
443
|
-
return;
|
|
444
|
-
let root = findChainRoot(node);
|
|
445
|
-
if (root) {
|
|
446
|
-
if (methodName === "handler" && resolves(root.rootName, "createServerFn") && SERVER_FN_RE.test(state.code)) {
|
|
447
|
-
let handlerArg = node.arguments[0];
|
|
448
|
-
if (handlerArg) {
|
|
449
|
-
if (t.isIdentifier(handlerArg)) {
|
|
450
|
-
let binding = path.scope.getBinding(handlerArg.name);
|
|
451
|
-
binding && binding.referencePaths.length === 1 && binding.path.remove();
|
|
452
|
-
}
|
|
453
|
-
node.arguments[0] = sbFnCall();
|
|
454
|
-
}
|
|
455
|
-
state.modified = !0;
|
|
456
|
-
return;
|
|
457
|
-
}
|
|
458
|
-
if (resolves(root.rootName, "createMiddleware") && MIDDLEWARE_RE.test(state.code)) {
|
|
459
|
-
(methodName === "server" || methodName === "inputValidator") && t.isMemberExpression(path.node.callee) && (path.replaceWith(path.node.callee.object), state.modified = !0);
|
|
460
|
-
return;
|
|
461
|
-
}
|
|
462
|
-
if (resolves(root.rootName, "createIsomorphicFn") && ISOMORPHIC_FN_RE.test(state.code)) {
|
|
463
|
-
if (methodName === "client") {
|
|
464
|
-
let innerFn = node.arguments[0];
|
|
465
|
-
innerFn && t.isExpression(innerFn) && (path.replaceWith(sbFnCallWithImpl(innerFn)), state.modified = !0);
|
|
466
|
-
return;
|
|
467
|
-
}
|
|
468
|
-
if (methodName === "server") {
|
|
469
|
-
let parent = path.parent;
|
|
470
|
-
(!t.isMemberExpression(parent) || !t.isCallExpression(path.parentPath?.parent)) && (path.replaceWith(sbFnCall()), state.modified = !0);
|
|
471
|
-
}
|
|
472
|
-
return;
|
|
473
|
-
}
|
|
474
|
-
}
|
|
475
|
-
}
|
|
476
|
-
}), state.modified && (state.needsFnImport && programPath.node.body.unshift(buildFnImport()), eliminateDeadImports(programPath));
|
|
404
|
+
var FN_IMPORT = 'import { fn as __sb_fn } from "storybook/test";';
|
|
405
|
+
function eliminateServerCode(editor) {
|
|
406
|
+
let { code, program, edits } = editor, tanstackImports = collectTanstackImports(program), resolves = (name, factory) => resolvesToFactory(tanstackImports, name, factory), removed = [], isGone = (node) => removed.some((span) => span.start <= node.start && node.end <= span.end), replace = (span, text) => {
|
|
407
|
+
edits.overwrite(span.start, span.end, text), removed.push(span);
|
|
408
|
+
}, remove = (span) => {
|
|
409
|
+
span.end > span.start && (edits.remove(span.start, span.end), removed.push(span));
|
|
410
|
+
}, modified = !1, needsFnImport = !1, fnCall = (span) => {
|
|
411
|
+
needsFnImport = !0, replace(span, "__sb_fn()");
|
|
412
|
+
}, fnCallWithImpl = (call, impl) => {
|
|
413
|
+
needsFnImport = !0, replace({ start: call.start, end: impl.start }, "__sb_fn("), replace({ start: impl.end, end: call.end }, ")");
|
|
414
|
+
};
|
|
415
|
+
if (walk(program, (node, parent) => {
|
|
416
|
+
if (isGone(node))
|
|
417
|
+
return !1;
|
|
418
|
+
if (node.type !== "CallExpression")
|
|
419
|
+
return;
|
|
420
|
+
if (ROUTE_FACTORY_RE.test(code)) {
|
|
421
|
+
let routeOptionsArg = getRouteFactoryOptionsArg(node, tanstackImports);
|
|
422
|
+
if (routeOptionsArg) {
|
|
423
|
+
let serverOptions = routeOptionsArg.properties.filter(isServerOption);
|
|
424
|
+
serverOptions.forEach(
|
|
425
|
+
(option) => remove(listItemRange(routeOptionsArg.properties, option))
|
|
426
|
+
), modified ||= serverOptions.length > 0;
|
|
477
427
|
}
|
|
478
428
|
}
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
429
|
+
if (node.callee.type === "Identifier" && resolves(node.callee.name, "createServerOnlyFn") && SERVER_ONLY_FN_RE.test(code))
|
|
430
|
+
return fnCall(node), modified = !0, !1;
|
|
431
|
+
if (node.callee.type === "Identifier" && resolves(node.callee.name, "createClientOnlyFn") && CLIENT_ONLY_FN_RE.test(code)) {
|
|
432
|
+
let innerFn = node.arguments[0];
|
|
433
|
+
innerFn && innerFn.type !== "SpreadElement" && (fnCallWithImpl(node, innerFn), modified = !0);
|
|
434
|
+
return;
|
|
435
|
+
}
|
|
436
|
+
let methodName = getMethodName(node);
|
|
437
|
+
if (!methodName)
|
|
438
|
+
return;
|
|
439
|
+
let root = findChainRoot(node);
|
|
440
|
+
if (root) {
|
|
441
|
+
if (methodName === "handler" && resolves(root.rootName, "createServerFn") && SERVER_FN_RE.test(code)) {
|
|
442
|
+
let handlerArg = node.arguments[0];
|
|
443
|
+
handlerArg && (handlerArg.type === "Identifier" && removeSingleUseDeclaration(editor, editor.scopes.bindingOf(handlerArg), remove), fnCall(handlerArg)), modified = !0;
|
|
444
|
+
return;
|
|
445
|
+
}
|
|
446
|
+
if (resolves(root.rootName, "createMiddleware") && MIDDLEWARE_RE.test(code)) {
|
|
447
|
+
(methodName === "server" || methodName === "inputValidator") && node.callee.type === "MemberExpression" && (remove({ start: node.callee.object.end, end: node.end }), modified = !0);
|
|
448
|
+
return;
|
|
449
|
+
}
|
|
450
|
+
if (resolves(root.rootName, "createIsomorphicFn") && ISOMORPHIC_FN_RE.test(code)) {
|
|
451
|
+
if (methodName === "client") {
|
|
452
|
+
let innerFn = node.arguments[0];
|
|
453
|
+
innerFn && innerFn.type !== "SpreadElement" && (fnCallWithImpl(node, innerFn), modified = !0);
|
|
454
|
+
return;
|
|
455
|
+
}
|
|
456
|
+
if (methodName === "server") {
|
|
457
|
+
let grandparent = parent && editor.parentOf(parent);
|
|
458
|
+
if (parent?.type !== "MemberExpression" || grandparent?.type !== "CallExpression")
|
|
459
|
+
return fnCall(node), modified = !0, !1;
|
|
460
|
+
}
|
|
461
|
+
}
|
|
462
|
+
}
|
|
463
|
+
}), !modified)
|
|
464
|
+
return !1;
|
|
465
|
+
if (needsFnImport) {
|
|
466
|
+
let at = program.body.filter(
|
|
467
|
+
(statement) => statement.type === "ExpressionStatement" && statement.directive
|
|
468
|
+
).at(-1)?.end ?? (code.startsWith("#!") ? code.indexOf(`
|
|
469
|
+
`) + 1 : 0);
|
|
470
|
+
edits.appendLeft(at, `${at > 0 ? `
|
|
471
|
+
` : ""}${FN_IMPORT}
|
|
472
|
+
`);
|
|
473
|
+
}
|
|
474
|
+
return eliminateDeadCode(editor, isGone, remove), !0;
|
|
486
475
|
}
|
|
487
|
-
function
|
|
488
|
-
|
|
476
|
+
function listItemRange(items, item) {
|
|
477
|
+
let index = items.indexOf(item), next = items[index + 1], previous = items[index - 1];
|
|
478
|
+
return next ? { start: item.start, end: next.start } : previous ? { start: previous.end, end: item.end } : item;
|
|
489
479
|
}
|
|
490
|
-
function
|
|
491
|
-
|
|
480
|
+
function removeSingleUseDeclaration(editor, binding, remove) {
|
|
481
|
+
if (!binding || binding.references.length !== 1)
|
|
482
|
+
return;
|
|
483
|
+
if (binding.kind === "function" || binding.kind === "class") {
|
|
484
|
+
remove(binding.node);
|
|
485
|
+
return;
|
|
486
|
+
}
|
|
487
|
+
let declaration = binding.declaration;
|
|
488
|
+
if (!(!["var", "let", "const"].includes(binding.kind) || binding.node.type !== "VariableDeclarator" || !declaration)) {
|
|
489
|
+
if (declaration.declarations.length === 1) {
|
|
490
|
+
editor.parentOf(declaration)?.type !== "ExportNamedDeclaration" && remove(declaration);
|
|
491
|
+
return;
|
|
492
|
+
}
|
|
493
|
+
remove(listItemRange(declaration.declarations, binding.node));
|
|
494
|
+
}
|
|
492
495
|
}
|
|
493
|
-
function collectTanstackImports(
|
|
496
|
+
function collectTanstackImports(program) {
|
|
494
497
|
let imports = /* @__PURE__ */ new Map();
|
|
495
|
-
for (let node of body) {
|
|
496
|
-
if (
|
|
498
|
+
for (let node of program.body) {
|
|
499
|
+
if (node.type !== "ImportDeclaration")
|
|
497
500
|
continue;
|
|
498
501
|
let src = node.source.value;
|
|
499
502
|
if (!(!src.includes("@tanstack/") && !src.includes("export-mocks") && !src.includes("@storybook/tanstack-react"))) {
|
|
500
503
|
for (let spec of node.specifiers)
|
|
501
|
-
if (
|
|
502
|
-
let importedName =
|
|
504
|
+
if (spec.type === "ImportSpecifier") {
|
|
505
|
+
let importedName = spec.imported.type === "Identifier" ? spec.imported.name : String(spec.imported.value);
|
|
503
506
|
imports.set(spec.local.name, importedName);
|
|
504
507
|
}
|
|
505
508
|
}
|
|
@@ -513,9 +516,9 @@ function findChainRoot(node) {
|
|
|
513
516
|
let current = node;
|
|
514
517
|
for (; ; ) {
|
|
515
518
|
let callee = current.callee;
|
|
516
|
-
if (
|
|
519
|
+
if (callee.type === "Identifier")
|
|
517
520
|
return { rootCall: current, rootName: callee.name };
|
|
518
|
-
if (
|
|
521
|
+
if (callee.type === "MemberExpression" && callee.object.type === "CallExpression") {
|
|
519
522
|
current = callee.object;
|
|
520
523
|
continue;
|
|
521
524
|
}
|
|
@@ -523,90 +526,99 @@ function findChainRoot(node) {
|
|
|
523
526
|
}
|
|
524
527
|
}
|
|
525
528
|
function getMethodName(node) {
|
|
526
|
-
return
|
|
529
|
+
return node.callee.type === "MemberExpression" && node.callee.property.type === "Identifier" ? node.callee.property.name : null;
|
|
527
530
|
}
|
|
528
531
|
function getRouteFactoryOptionsArg(node, imports) {
|
|
529
532
|
if (!getRouteFactoryName(node, imports))
|
|
530
533
|
return null;
|
|
531
534
|
let optionsArg = node.arguments[0];
|
|
532
|
-
return
|
|
535
|
+
return optionsArg?.type === "ObjectExpression" ? optionsArg : null;
|
|
533
536
|
}
|
|
534
537
|
function getRouteFactoryName(node, imports) {
|
|
535
|
-
if (
|
|
538
|
+
if (node.callee.type === "Identifier") {
|
|
536
539
|
let resolved = imports.get(node.callee.name) ?? node.callee.name;
|
|
537
540
|
return ROUTE_FACTORIES.has(resolved) ? resolved : null;
|
|
538
541
|
}
|
|
539
|
-
if (
|
|
542
|
+
if (node.callee.type === "CallExpression" && node.callee.callee.type === "Identifier") {
|
|
540
543
|
let calleeName = node.callee.callee.name, resolved = imports.get(calleeName) ?? calleeName;
|
|
541
544
|
return ROUTE_FACTORIES.has(resolved) ? resolved : null;
|
|
542
545
|
}
|
|
543
546
|
return null;
|
|
544
547
|
}
|
|
545
|
-
function
|
|
546
|
-
|
|
547
|
-
return options.properties = options.properties.filter((prop) => {
|
|
548
|
-
if (!t.isObjectProperty(prop) || prop.computed)
|
|
549
|
-
return !0;
|
|
550
|
-
let key = prop.key;
|
|
551
|
-
return (t.isIdentifier(key) ? key.name : void 0) !== "server";
|
|
552
|
-
}), options.properties.length !== initialLength;
|
|
548
|
+
function isServerOption(prop) {
|
|
549
|
+
return prop.type === "Property" && !prop.method && prop.kind === "init" && !prop.computed && prop.key.type === "Identifier" && prop.key.name === "server";
|
|
553
550
|
}
|
|
554
|
-
function
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
551
|
+
function isPure(node, scopes) {
|
|
552
|
+
if (!node)
|
|
553
|
+
return !0;
|
|
554
|
+
switch (node.type) {
|
|
555
|
+
case "Identifier":
|
|
556
|
+
return scopes.program.bindings.has(node.name);
|
|
557
|
+
case "Literal":
|
|
558
|
+
case "ThisExpression":
|
|
559
|
+
case "MetaProperty":
|
|
560
|
+
case "FunctionExpression":
|
|
561
|
+
case "ArrowFunctionExpression":
|
|
562
|
+
return !0;
|
|
563
|
+
case "ClassExpression":
|
|
564
|
+
return (node.decorators?.length ?? 0) === 0 && isPure(node.superClass, scopes) && node.body.body.every((member) => isPure(member, scopes));
|
|
565
|
+
case "MethodDefinition":
|
|
566
|
+
return (!node.computed || isPure(node.key, scopes)) && (node.decorators?.length ?? 0) === 0;
|
|
567
|
+
case "PropertyDefinition":
|
|
568
|
+
return (!node.computed || isPure(node.key, scopes)) && (node.decorators?.length ?? 0) === 0 && (!node.static || isPure(node.value, scopes));
|
|
569
|
+
case "Property":
|
|
570
|
+
return (!node.computed || isPure(node.key, scopes)) && (node.method || isPure(node.value, scopes));
|
|
571
|
+
case "BinaryExpression":
|
|
572
|
+
case "LogicalExpression":
|
|
573
|
+
return isPure(node.left, scopes) && isPure(node.right, scopes);
|
|
574
|
+
case "ArrayExpression":
|
|
575
|
+
return node.elements.every((element) => isPure(element, scopes));
|
|
576
|
+
case "ObjectExpression":
|
|
577
|
+
return node.properties.every((property) => isPure(property, scopes));
|
|
578
|
+
case "UnaryExpression":
|
|
579
|
+
return isPure(node.argument, scopes);
|
|
580
|
+
case "TemplateLiteral":
|
|
581
|
+
return node.expressions.every((expression) => isPure(expression, scopes));
|
|
582
|
+
default:
|
|
583
|
+
return !1;
|
|
584
|
+
}
|
|
558
585
|
}
|
|
559
|
-
function
|
|
560
|
-
let
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
586
|
+
function eliminateDeadCode(editor, isGone, remove) {
|
|
587
|
+
let { program, scopes, edits } = editor, isLive = (identifier) => !!scopes.bindingOf(identifier)?.references.some((reference) => !isGone(reference)), deadSpecifiers = /* @__PURE__ */ new Set(), changed = !0;
|
|
588
|
+
for (; changed; ) {
|
|
589
|
+
changed = !1;
|
|
590
|
+
for (let statement of program.body) {
|
|
591
|
+
if (isGone(statement))
|
|
592
|
+
continue;
|
|
593
|
+
(statement.type === "FunctionDeclaration" ? statement.id && !isLive(statement.id) : statement.type === "VariableDeclaration" && statement.declarations.every(
|
|
594
|
+
(declarator) => declarator.id.type === "Identifier" && !isLive(declarator.id) && isPure(declarator.init, scopes)
|
|
595
|
+
)) && (remove(statement), changed = !0);
|
|
569
596
|
}
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
if (
|
|
577
|
-
|
|
578
|
-
id && !referenced.has(id.name) && (stmtPath.remove(), removed = !0);
|
|
597
|
+
for (let statement of program.body) {
|
|
598
|
+
if (statement.type !== "ImportDeclaration" || isGone(statement))
|
|
599
|
+
continue;
|
|
600
|
+
let specifiers = statement.specifiers.filter((spec) => !deadSpecifiers.has(spec)), live = specifiers.filter((spec) => isLive(spec.local));
|
|
601
|
+
if (specifiers.length === 0 || live.length === specifiers.length)
|
|
602
|
+
continue;
|
|
603
|
+
if (specifiers.filter((spec) => !live.includes(spec)).forEach((spec) => deadSpecifiers.add(spec)), changed = !0, live.length === 0) {
|
|
604
|
+
remove(statement);
|
|
579
605
|
continue;
|
|
580
606
|
}
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
607
|
+
let named = live.filter((spec) => spec.type === "ImportSpecifier"), clause = [
|
|
608
|
+
...live.filter((spec) => spec.type !== "ImportSpecifier").map((spec) => editor.source(spec)),
|
|
609
|
+
...named.length > 0 ? [`{ ${named.map((spec) => editor.source(spec)).join(", ")} }`] : []
|
|
610
|
+
].join(", ");
|
|
611
|
+
edits.overwrite(
|
|
612
|
+
statement.start,
|
|
613
|
+
statement.source.start,
|
|
614
|
+
`import ${statement.importKind === "type" ? "type " : ""}${clause} from `
|
|
615
|
+
);
|
|
586
616
|
}
|
|
587
|
-
return removed;
|
|
588
|
-
}
|
|
589
|
-
function removeDeadImportSpecifiers(programPath) {
|
|
590
|
-
let referenced = collectReferencedIdentifiers(programPath), removed = !1;
|
|
591
|
-
return programPath.traverse({
|
|
592
|
-
ImportDeclaration(path) {
|
|
593
|
-
if (path.node.specifiers.length === 0)
|
|
594
|
-
return;
|
|
595
|
-
let specifiers = path.node.specifiers.filter((spec) => referenced.has(spec.local.name));
|
|
596
|
-
specifiers.length === 0 ? (path.remove(), removed = !0) : specifiers.length !== path.node.specifiers.length && (path.node.specifiers = specifiers, removed = !0);
|
|
597
|
-
}
|
|
598
|
-
}), removed;
|
|
599
|
-
}
|
|
600
|
-
function eliminateDeadImports(programPath) {
|
|
601
|
-
let changed = !0;
|
|
602
|
-
for (; changed; ) {
|
|
603
|
-
let d = removeDeadTopLevelDeclarations(programPath), i = removeDeadImportSpecifiers(programPath);
|
|
604
|
-
changed = d || i;
|
|
605
617
|
}
|
|
606
618
|
}
|
|
607
619
|
|
|
608
620
|
// src/plugins/server-only-stub.ts
|
|
609
|
-
import {
|
|
621
|
+
import { parseModule } from "storybook/internal/csf-tools";
|
|
610
622
|
var SERVER_FILE_RE = /\.server\.(?:[mc]?[jt]sx?)$/;
|
|
611
623
|
function serverOnlyStubPlugin(options = {}) {
|
|
612
624
|
let patterns = [SERVER_FILE_RE, ...options.extraPatterns ?? []];
|
|
@@ -637,29 +649,27 @@ function serverOnlyStubPlugin(options = {}) {
|
|
|
637
649
|
};
|
|
638
650
|
}
|
|
639
651
|
function collectExports(code, id) {
|
|
640
|
-
let named = /* @__PURE__ */ new Set(), hasDefault = !1,
|
|
652
|
+
let named = /* @__PURE__ */ new Set(), hasDefault = !1, program;
|
|
641
653
|
try {
|
|
642
|
-
|
|
654
|
+
({ program } = parseModule(code, id));
|
|
643
655
|
} catch {
|
|
644
656
|
return { named, hasDefault };
|
|
645
657
|
}
|
|
646
|
-
for (let node of
|
|
647
|
-
if (
|
|
658
|
+
for (let node of program.body) {
|
|
659
|
+
if (node.type === "ExportDefaultDeclaration") {
|
|
648
660
|
hasDefault = !0;
|
|
649
661
|
continue;
|
|
650
662
|
}
|
|
651
|
-
if (
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
exportedName !== "default" ? named.add(exportedName) : hasDefault = !0;
|
|
662
|
-
}
|
|
663
|
+
if (node.type !== "ExportNamedDeclaration")
|
|
664
|
+
continue;
|
|
665
|
+
let decl = node.declaration;
|
|
666
|
+
if (decl?.type === "VariableDeclaration")
|
|
667
|
+
for (let declarator of decl.declarations)
|
|
668
|
+
declarator.id.type === "Identifier" && named.add(declarator.id.name);
|
|
669
|
+
else (decl?.type === "FunctionDeclaration" || decl?.type === "ClassDeclaration") && decl.id?.name && named.add(decl.id.name);
|
|
670
|
+
for (let spec of node.specifiers) {
|
|
671
|
+
let exportedName = spec.exported.type === "Identifier" ? spec.exported.name : String(spec.exported.value);
|
|
672
|
+
exportedName !== "default" ? named.add(exportedName) : hasDefault = !0;
|
|
663
673
|
}
|
|
664
674
|
}
|
|
665
675
|
return { named, hasDefault };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@storybook/tanstack-react",
|
|
3
|
-
"version": "11.0.0-alpha.
|
|
3
|
+
"version": "11.0.0-alpha.8",
|
|
4
4
|
"description": "Storybook for TanStack (React, Vite): Router and Start ready Storybook framework",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"storybook",
|
|
@@ -75,9 +75,9 @@
|
|
|
75
75
|
"!src/**/*"
|
|
76
76
|
],
|
|
77
77
|
"dependencies": {
|
|
78
|
-
"@storybook/builder-vite": "11.0.0-alpha.
|
|
79
|
-
"@storybook/react": "11.0.0-alpha.
|
|
80
|
-
"@storybook/react-vite": "11.0.0-alpha.
|
|
78
|
+
"@storybook/builder-vite": "11.0.0-alpha.8",
|
|
79
|
+
"@storybook/react": "11.0.0-alpha.8",
|
|
80
|
+
"@storybook/react-vite": "11.0.0-alpha.8"
|
|
81
81
|
},
|
|
82
82
|
"devDependencies": {
|
|
83
83
|
"@tanstack/react-router": "^1.168.10",
|
|
@@ -95,7 +95,7 @@
|
|
|
95
95
|
"@tanstack/start-client-core": "^1.167.9",
|
|
96
96
|
"react": "^18.0.0 || ^19.0.0",
|
|
97
97
|
"react-dom": "^18.0.0 || ^19.0.0",
|
|
98
|
-
"storybook": "^11.0.0-alpha.
|
|
98
|
+
"storybook": "^11.0.0-alpha.8",
|
|
99
99
|
"vite": "^6.3.0 || ^7.0.0 || ^8.0.0"
|
|
100
100
|
},
|
|
101
101
|
"peerDependenciesMeta": {
|