Skip to content

Commit 25e86bc

Browse files
committed
refactor + simplify
1 parent c122987 commit 25e86bc

File tree

1 file changed

+42
-37
lines changed

1 file changed

+42
-37
lines changed

packages/tanstackstart-react/src/vite/autoInstrumentMiddleware.ts

Lines changed: 42 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,12 @@ type WrapResult = {
1111
skipped: string[];
1212
};
1313

14+
type FileTransformState = {
15+
code: string;
16+
needsImport: boolean;
17+
skippedMiddlewares: string[];
18+
};
19+
1420
/**
1521
* Core function that wraps middleware arrays matching the given regex.
1622
*/
@@ -64,6 +70,23 @@ export function wrapServerFnMiddleware(code: string, id: string, debug: boolean)
6470
return wrapMiddlewareArrays(code, id, debug, /(\.middleware\s*\()\s*\[([^\]]*)\]\s*\)/g);
6571
}
6672

73+
/**
74+
* Applies a wrap function to the current state and returns the updated state.
75+
*/
76+
function applyWrap(
77+
state: FileTransformState,
78+
wrapFn: (code: string, id: string, debug: boolean) => WrapResult,
79+
id: string,
80+
debug: boolean,
81+
): FileTransformState {
82+
const result = wrapFn(state.code, id, debug);
83+
return {
84+
code: result.code,
85+
needsImport: state.needsImport || result.didWrap,
86+
skippedMiddlewares: [...state.skippedMiddlewares, ...result.skipped],
87+
};
88+
}
89+
6790
/**
6891
* A Vite plugin that automatically instruments TanStack Start middlewares:
6992
* - `requestMiddleware` and `functionMiddleware` arrays in `createStart()`
@@ -100,56 +123,38 @@ export function makeAutoInstrumentMiddlewarePlugin(options: AutoInstrumentMiddle
100123
return null;
101124
}
102125

103-
let transformed = code;
104-
let needsImport = false;
105-
const skippedMiddlewares: string[] = [];
106-
107-
switch (true) {
108-
// global middleware
109-
case isStartFile: {
110-
const result = wrapGlobalMiddleware(transformed, id, debug);
111-
transformed = result.code;
112-
needsImport = needsImport || result.didWrap;
113-
skippedMiddlewares.push(...result.skipped);
114-
break;
115-
}
116-
// non-global middleware
117-
case isRouteFile || isServerFnFile: {
118-
if (isRouteFile) {
119-
const result = wrapRouteMiddleware(transformed, id, debug);
120-
transformed = result.code;
121-
needsImport = needsImport || result.didWrap;
122-
skippedMiddlewares.push(...result.skipped);
123-
}
124-
if (isServerFnFile) {
125-
const result = wrapServerFnMiddleware(transformed, id, debug);
126-
transformed = result.code;
127-
needsImport = needsImport || result.didWrap;
128-
skippedMiddlewares.push(...result.skipped);
129-
}
130-
break;
131-
}
132-
default:
133-
break;
126+
let fileTransformState: FileTransformState = {
127+
code,
128+
needsImport: false,
129+
skippedMiddlewares: [],
130+
};
131+
132+
// Wrap middlewares
133+
if (isStartFile) {
134+
fileTransformState = applyWrap(fileTransformState, wrapGlobalMiddleware, id, debug);
135+
}
136+
if (isRouteFile) {
137+
fileTransformState = applyWrap(fileTransformState, wrapRouteMiddleware, id, debug);
138+
}
139+
if (isServerFnFile) {
140+
fileTransformState = applyWrap(fileTransformState, wrapServerFnMiddleware, id, debug);
134141
}
135142

136143
// Warn about middlewares that couldn't be auto-wrapped
137-
if (skippedMiddlewares.length > 0) {
144+
if (fileTransformState.skippedMiddlewares.length > 0) {
138145
// eslint-disable-next-line no-console
139146
console.warn(
140-
`[Sentry] Could not auto-instrument ${skippedMiddlewares.join(' and ')} in ${id}. ` +
147+
`[Sentry] Could not auto-instrument ${fileTransformState.skippedMiddlewares.join(' and ')} in ${id}. ` +
141148
'To instrument these middlewares, use wrapMiddlewaresWithSentry() manually. ',
142149
);
143150
}
144151

145152
// We didn't wrap any middlewares, so we don't need to import the wrapMiddlewaresWithSentry function
146-
if (!needsImport) {
153+
if (!fileTransformState.needsImport) {
147154
return null;
148155
}
149156

150-
transformed = addSentryImport(transformed);
151-
152-
return { code: transformed, map: null };
157+
return { code: addSentryImport(fileTransformState.code), map: null };
153158
},
154159
};
155160
}

0 commit comments

Comments
 (0)