Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 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 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 | 36x 36x 36x 36x 36x 28x 28x 28x 16x 16x 16x 16x 16x 12x 10x 10x 10x 10x 10x 2x 2x 2x 2x 2x 2x 28x 16x 15x 15x 1x 12x 2x 10x 8x 12x 10x 10x 2x 25x 25x 25x 25x 25x 25x 36x | const parse = require('./parse');
const jsCore = require('../js-core/core');
const htmlCore = require('../html-core/core')
const NodePath = require('../NodePath');
const core = {
getAstsBySelector(ast, selector, { parseOptions } = {}) {
parseOptions = Object.assign({}, parseOptions);
let newAst = ast;
if (selector == '<template></template>') {
parseOptions.language = 'html';
parseOptions.rootLanguage = 'vue';
Iif (ast.templateAst) {
newAst = ast.templateAst;
} else {
ast.templateAst = core.getTemplate(ast);
newAst = ast.templateAst;
}
} else if (selector == '<script></script>') {
parseOptions.language = 'js'
parseOptions.rootLanguage = 'vue';
Iif (ast.scriptAst) {
newAst = ast.scriptAst;
} else {
ast.scriptAst = core.getScript(ast, { parseOptions });
newAst = ast.scriptAst;
}
} else Eif (selector == '<script setup></script>') {
parseOptions.language = 'js'
parseOptions.rootLanguage = 'vue';
Iif (ast.scriptSetupAst) {
newAst = ast.scriptSetupAst;
} else {
ast.scriptSetupAst = core.getScript(ast, { isSetup: true, parseOptions });
newAst = ast.scriptSetupAst;
}
}
return { nodePathList: newAst ? [newAst] : [], matchWildCardList: [], extra: { parseOptions } }
},
getTemplate(ast) {
// 仅针对vue,取template,后续通过htmlcore处理
if (ast.template) {
const template = htmlCore.buildAstByAstStr(
ast.template.content,
{},
{
isProgram: true,
parseOptions: { language: 'html' }
}
);
return new NodePath(template);
} else {
return undefined;
}
},
getScript(ast, { isSetup = false, parseOptions } = {} ) {
// 仅针对vue,取script,后续通过jscore处理
let content;
if (isSetup && ast.scriptSetup) {
content = ast.scriptSetup.content;
} else if (!isSetup && ast.script) {
content = ast.script.content
// const content = ast.script.content.replace(/\n/g, '')
}
if (content) {
const script = jsCore.buildAstByAstStr(
content, {},
{
isProgram: true,
parseOptions
}
);
return new NodePath(script);
} else {
return undefined;
}
},
buildAstByAstStr(str, astPatialMap = {}, { isProgram = false, parseOptions } = {}) {
try {
const program = parse(str, parseOptions);
core.parseOptions = parseOptions;
if (program) {
if (isProgram) {
return program;
} else E{
if (program.template && program.template.ast) {
return program.template
} else return null
}
} else E{
return null;
}
} catch(e) {
console.log('buildAstByAstStr failed:' + e)
}
}
}
module.exports = core; |