-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtransformers.ts
64 lines (56 loc) · 2.13 KB
/
transformers.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
import _ts from 'typescript'
import * as fs from 'fs'
import { RawVueFileName, SourcemapEntry } from '../types'
import { transformScript, parseExternalComponentsFromScrtipContent, parseEventNamesFromScrtipContent } from './script'
import { transformTemplate } from './template'
import { toVueScriptFileName, toTSVueFIleName, toVueTemplateFileName, toCompiledVueTemplateFileName } from '../helpers'
import { createTypeHelpers } from './createTypeHelpers'
import { parseBlocks } from './parseBlocks'
export function transformVueFile(
fileName: RawVueFileName,
content: string,
sourcemapEntry: SourcemapEntry,
ts: typeof _ts
) {
const tsVueFileName = toTSVueFIleName(fileName)
const vueScriptFileName = toVueScriptFileName(fileName)
const vueTemplateFileName = toVueTemplateFileName(fileName)
const compiledVueTemplateFileName = toCompiledVueTemplateFileName(vueTemplateFileName)
const { scriptContent, templateContent } = parseBlocks(fileName, content, sourcemapEntry)
/**
* Create outputs
*/
const scriptBlock = transformScript(vueScriptFileName, scriptContent)
const templateBlock = transformTemplate(compiledVueTemplateFileName, templateContent)
const externalComponents = parseExternalComponentsFromScrtipContent(scriptContent, ts)
const eventNames = parseEventNamesFromScrtipContent(scriptContent, ts)
const typeHelpersBlock = createTypeHelpers(externalComponents, eventNames)
const scriptBlockLinesNum = scriptBlock.transformed.split('\n').length
const typeHelpersBlockLinesNum = typeHelpersBlock.split('\n').length
const map = {
version: '3',
file: tsVueFileName,
sections: [
{
offset: {
line: 0,
column: 0
},
map: scriptBlock.map
},
{
offset: {
line: scriptBlockLinesNum + typeHelpersBlockLinesNum,
column: 0
},
map: templateBlock.map
}
]
} as any
sourcemapEntry.set(tsVueFileName, { map })
const output = [scriptBlock.transformed, typeHelpersBlock, templateBlock.transformed].join('\n')
// fs.writeFileSync(toTSVueFIleName(fileName), output)
return {
transformedContent: output
}
}