|
1 | 1 | import MagicString from 'magic-string';
|
| 2 | +import * as svelteCompiler from 'svelte/compiler'; |
2 | 3 | import { PreprocessorGroup } from 'svelte/types/compiler/preprocess';
|
3 | 4 |
|
4 | 5 | import { ComponentTrackingInitOptions, SentryPreprocessorGroup, TrackComponentOptions } from './types';
|
@@ -123,16 +124,8 @@ function getBaseName(filename: string): string {
|
123 | 124 | }
|
124 | 125 |
|
125 | 126 | function hasScriptTag(content: string): boolean {
|
126 |
| - // This regex is taken from the Svelte compiler code. |
127 |
| - // They use this regex to find matching script tags that are passed to the `script` preprocessor hook: |
128 |
| - // https://github.com/sveltejs/svelte/blob/bb83eddfc623437528f24e9fe210885b446e72fa/src/compiler/preprocess/index.ts#L144 |
129 |
| - // However, we remove the first part of the regex to not match HTML comments |
130 |
| - const scriptTagRegex = /<script(\s[^]*?)?(?:>([^]*?)<\/script>|\/>)/gi; |
131 |
| - |
132 |
| - // Regex testing is not a super safe way of checking for the presence of a <script> tag in the Svelte |
133 |
| - // component file but I think we can use it as a start. |
134 |
| - // A case that is not covered by regex-testing HTML is e.g. nested <script> tags but I cannot |
135 |
| - // think of why one would do this in Svelte components. For instance, the Svelte compiler errors |
136 |
| - // when there's more than one top-level script tag. |
137 |
| - return scriptTagRegex.test(content); |
| 127 | + const ast = svelteCompiler.parse(content); |
| 128 | + // ast.instance holds whatever is defined in <script> |
| 129 | + // if there is no script tag, it's undefined. |
| 130 | + return ast.instance !== undefined; |
138 | 131 | }
|
0 commit comments