| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 |
- import {
- type SFCParseOptions,
- type SFCScriptBlock,
- type SFCScriptCompileOptions,
- compileScript,
- parse,
- } from '../src'
- import { parse as babelParse } from '@babel/parser'
- export const mockId = 'xxxxxxxx'
- export function compileSFCScript(
- src: string,
- options?: Partial<SFCScriptCompileOptions>,
- parseOptions?: SFCParseOptions,
- ): SFCScriptBlock {
- const { descriptor, errors } = parse(src, parseOptions)
- if (errors.length) {
- console.warn(errors[0])
- }
- return compileScript(descriptor, {
- ...options,
- id: mockId,
- })
- }
- export function assertCode(code: string): void {
- // parse the generated code to make sure it is valid
- try {
- babelParse(code, {
- sourceType: 'module',
- plugins: [
- 'typescript',
- ['importAttributes', { deprecatedAssertSyntax: true }],
- ],
- })
- } catch (e: any) {
- console.log(code)
- throw e
- }
- expect(code).toMatchSnapshot()
- }
- interface Pos {
- line: number
- column: number
- name?: string
- }
- export function getPositionInCode(
- code: string,
- token: string,
- expectName: string | boolean = false,
- ): Pos {
- const generatedOffset = code.indexOf(token)
- let line = 1
- let lastNewLinePos = -1
- for (let i = 0; i < generatedOffset; i++) {
- if (code.charCodeAt(i) === 10 /* newline char code */) {
- line++
- lastNewLinePos = i
- }
- }
- const res: Pos = {
- line,
- column:
- lastNewLinePos === -1
- ? generatedOffset
- : generatedOffset - lastNewLinePos - 1,
- }
- if (expectName) {
- res.name = typeof expectName === 'string' ? expectName : token
- }
- return res
- }
|