| 123456789101112131415161718192021222324252627282930313233343536373839404142 |
- import ts from 'typescript'
- const decoratorSyntax = /^\s*@[A-Za-z_$][\w$]*/m
- /**
- * Worker arguments that keep process-wide Web Storage from shadowing jsdom storage.
- * Node lists the positive spelling in `allowedNodeEnvironmentFlags` for this negatable flag.
- */
- export const vitestExecArgv = process.allowedNodeEnvironmentFlags.has('--webstorage') ? ['--no-webstorage'] : []
- /**
- * Transform standard TypeScript decorators before Vite's default parser sees source files.
- * @returns a pre-transform Vite plugin shared by source-mode test configurations.
- */
- export function standardDecoratorPlugin() {
- return {
- name: 'dsh-standard-decorators',
- enforce: 'pre' as const,
- transform(code: string, id: string) {
- const file = id.split('?', 1)[0]!
- if (!/\.[cm]?tsx?$/.test(file) || !decoratorSyntax.test(code)) return
- const result = ts.transpileModule(code, {
- fileName: file,
- compilerOptions: {
- target: ts.ScriptTarget.ES2024,
- module: ts.ModuleKind.ESNext,
- jsx: file.endsWith('x') ? ts.JsxEmit.ReactJSX : undefined,
- sourceMap: true,
- },
- })
- return {
- code: result.outputText
- .replace(
- /^(\s*)(__esDecorate\()/gmu,
- '$1/* v8 ignore next -- compiler-synthetic decorator accessors have no source behavior */ $2',
- )
- .replace(/\n?\/\/# sourceMappingURL=.*$/u, '\n'),
- map: result.sourceMapText,
- }
- },
- }
- }
|