本文整理汇总了TypeScript中babel-types.exportDefaultDeclaration函数的典型用法代码示例。如果您正苦于以下问题:TypeScript exportDefaultDeclaration函数的具体用法?TypeScript exportDefaultDeclaration怎么用?TypeScript exportDefaultDeclaration使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了exportDefaultDeclaration函数的4个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的TypeScript代码示例。
示例1: parseWXML
export function parseWXML (dirPath: string, wxml?: string, parseImport?: boolean): {
wxses: WXS[]
wxml?: t.Node
imports: Imports[]
} {
if (!parseImport) {
errors.length = 0
}
usedComponents.clear()
let wxses: WXS[] = []
let imports: Imports[] = []
if (!wxml) {
return {
wxses,
imports,
wxml: t.nullLiteral()
}
}
const nodes = removEmptyTextAndComment(parse(wxml.trim()))
const ast = t.file(
t.program(
[
t.expressionStatement(parseNode(
buildElement('block', nodes as Node[])
) as t.Expression)
],
[]
)
)
traverse(ast, {
JSXAttribute (path) {
const name = path.node.name as t.JSXIdentifier
const jsx = path.findParent(p => p.isJSXElement()) as NodePath<
t.JSXElement
>
const valueCopy = cloneDeep(path.get('value').node)
transformIf(name.name, path, jsx, valueCopy)
transformLoop(name.name, path, jsx, valueCopy)
},
JSXElement: {
enter (path: NodePath<t.JSXElement>) {
const openingElement = path.get('openingElement')
const jsxName = openingElement.get('name')
const attrs = openingElement.get('attributes')
if (!jsxName.isJSXIdentifier()) {
return
}
const tagName = jsxName.node.name
if (tagName === 'Wxs') {
wxses.push(getWXS(attrs.map(a => a.node), path, dirPath))
}
if (tagName === 'Template') {
const template = parseTemplate(path, dirPath)
if (template) {
const { ast: classDecl, name } = template
const taroComponentsImport = buildImportStatement('@tarojs/components', [
...usedComponents
])
const taroImport = buildImportStatement('@tarojs/taro', [], 'Taro')
// const withWeappImport = buildImportStatement(
// '@tarojs/with-weapp',
// [],
// 'withWeapp'
// )
const ast = t.file(t.program([]))
ast.program.body.unshift(
taroComponentsImport,
taroImport,
// withWeappImport,
t.exportDefaultDeclaration(classDecl)
)
imports.push({
ast,
name
})
}
}
if (tagName === 'Import') {
const mods = parseModule(path, dirPath, 'import')
if (mods) {
imports = imports.concat(mods)
}
}
if (tagName === 'Include') {
parseModule(path, dirPath, 'include')
}
},
exit (path: NodePath<t.JSXElement>) {
const openingElement = path.get('openingElement')
const jsxName = openingElement.get('name')
if (!jsxName.isJSXIdentifier({ name: 'Block' })) {
return
}
const children = path.node.children
if (children.length === 1) {
const caller = children[0]
if (t.isJSXExpressionContainer(caller) && t.isCallExpression(caller.expression) && !path.parentPath.isExpressionStatement()) {
path.replaceWith(caller)
}
//.........这里部分代码省略.........
示例2: parseScript
export function parseScript (
script?: string,
returned?: t.Expression,
json?: t.ObjectExpression,
wxses: WXS[] = [],
refId?: Set<string>
) {
script = script || 'Page({})'
if (t.isJSXText(returned as any)) {
const block = buildBlockElement()
block.children = [returned as any]
returned = block
}
let ast = parseCode(script)
let classDecl!: t.ClassDeclaration
let foundWXInstance = false
const vistor: Visitor = {
BlockStatement (path) {
path.scope.rename('wx', 'Taro')
},
CallExpression (path) {
const callee = path.get('callee')
if (callee.isIdentifier()) {
const name = callee.node.name
if (name === 'getApp' || name === 'getCurrentPages') {
callee.replaceWith(
t.memberExpression(t.identifier('Taro'), callee.node)
)
}
}
if (callee.isMemberExpression()) {
const object = callee.get('object')
if (object.isIdentifier({ name: 'wx' })) {
object.replaceWith(t.identifier('Taro'))
}
}
if (
callee.isIdentifier({ name: 'Page' }) ||
callee.isIdentifier({ name: 'Component' }) ||
callee.isIdentifier({ name: 'App' })
) {
foundWXInstance = true
const componentType = callee.node.name
classDecl = parsePage(
path,
returned || t.nullLiteral(),
json,
componentType,
refId,
wxses
)
if (componentType !== 'App' && classDecl.decorators!.length === 0) {
classDecl.decorators = [buildDecorator(componentType)]
}
ast.program.body.push(
classDecl,
t.exportDefaultDeclaration(t.identifier(componentType !== 'App' ? defaultClassName : 'App'))
)
// path.insertAfter(t.exportDefaultDeclaration(t.identifier(defaultClassName)))
path.remove()
}
}
}
traverse(ast, vistor)
if (!foundWXInstance) {
ast = parseCode(script + ';Component({})')
traverse(ast, vistor)
}
const taroComponentsImport = buildImportStatement('@tarojs/components', [
...usedComponents
])
const taroImport = buildImportStatement('@tarojs/taro', [], 'Taro')
const withWeappImport = buildImportStatement(
'@tarojs/with-weapp',
[],
'withWeapp'
)
ast.program.body.unshift(
taroComponentsImport,
taroImport,
withWeappImport,
...wxses.filter(wxs => !wxs.src.startsWith('./wxs__')).map(wxs => buildImportStatement(wxs.src, [], wxs.module))
)
return ast
}
示例3: cloneDeep
//.........这里部分代码省略.........
if (tagName === 'Slot') {
const nameAttr = attrs.find(a => a.node.name.name === 'name')
let slotName = ''
if (nameAttr) {
if (nameAttr.node.value && t.isStringLiteral(nameAttr.node.value)) {
slotName = nameAttr.node.value.value
} else {
throw codeFrameError(jsxName.node, 'slot 的值必须是一个字符串')
}
}
const children = t.memberExpression(
t.memberExpression(t.thisExpression(), t.identifier('props')),
t.identifier(slotName ? buildSlotName(slotName) : 'children')
)
try {
path.replaceWith(path.parentPath.isJSXElement() ? t.jSXExpressionContainer(children) : children)
} catch (error) {
//
}
}
if (tagName === 'Wxs') {
wxses.push(getWXS(attrs.map(a => a.node), path, imports))
}
if (tagName === 'Template') {
// path.traverse({
// JSXAttribute: jsxAttrVisitor
// })
const template = parseTemplate(path, dirPath)
if (template) {
const { ast: classDecl, name } = template
const taroComponentsImport = buildImportStatement('@tarojs/components', [
...usedComponents
])
const taroImport = buildImportStatement('@tarojs/taro', [], 'Taro')
// const withWeappImport = buildImportStatement(
// '@tarojs/with-weapp',
// [],
// 'withWeapp'
// )
const ast = t.file(t.program([]))
ast.program.body.unshift(
taroComponentsImport,
taroImport,
// withWeappImport,
t.exportDefaultDeclaration(classDecl)
)
let usedTemplate = new Set<string>()
traverse(ast, {
JSXIdentifier (p) {
const node = p.node
if (node.name.endsWith('Tmpl') && node.name.length > 4 && p.parentPath.isJSXOpeningElement()) {
usedTemplate.add(node.name)
}
}
})
usedTemplate.forEach(componentName => {
if (componentName !== classDecl.id.name) {
ast.program.body.unshift(
buildImportStatement(`./${componentName}`, [], componentName)
)
}
})
imports.push({
ast,
name
})
}
}
if (tagName === 'Import') {
const mods = parseModule(path, dirPath, 'import')
if (mods) {
imports.push(...mods)
}
}
if (tagName === 'Include') {
parseModule(path, dirPath, 'include')
}
},
exit (path: NodePath<t.JSXElement>) {
const openingElement = path.get('openingElement')
const jsxName = openingElement.get('name')
if (!jsxName.isJSXIdentifier({ name: 'Block' })) {
return
}
const children = path.node.children
if (children.length === 1) {
const caller = children[0]
if (t.isJSXExpressionContainer(caller) && t.isCallExpression(caller.expression) && !path.parentPath.isExpressionStatement()) {
try {
path.replaceWith(caller)
} catch (error) {
//
}
}
}
}
}
} as Visitor
}
示例4: parseScript
export function parseScript (
script?: string,
returned?: t.Expression,
json?: t.ObjectExpression,
wxses: WXS[] = []
) {
script = script || 'Page({})'
if (t.isJSXText(returned as any)) {
const block = buildBlockElement()
block.children = [returned as any]
returned = block
}
const { ast } = transform(script, {
parserOpts: {
sourceType: 'module',
plugins: [
'classProperties',
'jsx',
'flow',
'flowComment',
'trailingFunctionCommas',
'asyncFunctions',
'exponentiationOperator',
'asyncGenerators',
'objectRestSpread',
'decorators',
'dynamicImport'
]
}
}) as { ast: t.File }
let classDecl!: t.ClassDeclaration
traverse(ast, {
BlockStatement (path) {
path.scope.rename('wx', 'Taro')
},
CallExpression (path) {
const callee = path.get('callee')
if (callee.isIdentifier()) {
const name = callee.node.name
if (name === 'getApp' || name === 'getCurrentPages') {
callee.replaceWith(
t.memberExpression(t.identifier('Taro'), callee.node)
)
}
}
if (callee.isMemberExpression()) {
const object = callee.get('object')
if (object.isIdentifier({ name: 'wx' })) {
object.replaceWith(t.identifier('Taro'))
}
}
if (
callee.isIdentifier({ name: 'Page' }) ||
callee.isIdentifier({ name: 'Component' }) ||
callee.isIdentifier({ name: 'App' })
) {
const componentType = callee.node.name
classDecl = parsePage(
path,
returned || t.nullLiteral(),
json,
componentType
)!
if (componentType !== 'App') {
classDecl.decorators = [buildDecorator(componentType)]
}
path.insertAfter(t.exportDefaultDeclaration(classDecl))
path.remove()
}
}
})
const taroComponentsImport = buildImportStatement('@tarojs/components', [
...usedComponents
])
const taroImport = buildImportStatement('@tarojs/taro', [], 'Taro')
const withWeappImport = buildImportStatement(
'@tarojs/with-weapp',
[],
'withWeapp'
)
ast.program.body.unshift(
taroComponentsImport,
taroImport,
withWeappImport,
...wxses.map(wxs => buildImportStatement(wxs.src, [], wxs.module))
)
return ast
}