feat(compiler): scaffold compiler-dom
This commit is contained in:
parent
c9a1b00c1e
commit
1c8f5b612a
5
packages/compiler-core/src/assert.ts
Normal file
5
packages/compiler-core/src/assert.ts
Normal file
@ -0,0 +1,5 @@
|
||||
export function assert(condition: boolean, msg?: string) {
|
||||
if (!condition) {
|
||||
throw new Error(msg || `unexpected parser condition`)
|
||||
}
|
||||
}
|
@ -1,4 +1,4 @@
|
||||
import assert from 'assert'
|
||||
import { assert } from './assert'
|
||||
import { ParserErrorTypes } from './errorTypes'
|
||||
import {
|
||||
Node,
|
||||
@ -69,7 +69,7 @@ function startsWith(source: string, searchString: string): boolean {
|
||||
}
|
||||
|
||||
function advanceBy(context: ParserContext, numberOfCharacters: number): void {
|
||||
assert(numberOfCharacters <= context.source.length)
|
||||
__DEV__ && assert(numberOfCharacters <= context.source.length)
|
||||
|
||||
const { column, source } = context
|
||||
const str = source.slice(0, numberOfCharacters)
|
||||
@ -175,7 +175,7 @@ function parseChildren(
|
||||
const nodes: RootNode['children'] = []
|
||||
|
||||
while (!isEnd(context, mode, ancestors)) {
|
||||
assert(context.source.length > 0)
|
||||
__DEV__ && assert(context.source.length > 0)
|
||||
const s = context.source
|
||||
let node: any = null
|
||||
|
||||
@ -332,15 +332,16 @@ function parseCDATA(
|
||||
context: ParserContext,
|
||||
ancestors: ElementNode[]
|
||||
): RootNode['children'] {
|
||||
assert(last(ancestors) == null || last(ancestors)!.ns !== Namespaces.HTML)
|
||||
assert(startsWith(context.source, '<![CDATA['))
|
||||
__DEV__ &&
|
||||
assert(last(ancestors) == null || last(ancestors)!.ns !== Namespaces.HTML)
|
||||
__DEV__ && assert(startsWith(context.source, '<![CDATA['))
|
||||
|
||||
advanceBy(context, 9)
|
||||
const nodes = parseChildren(context, TextModes.CDATA, ancestors)
|
||||
if (context.source.length === 0) {
|
||||
emitError(context, ParserErrorTypes.EOF_IN_CDATA)
|
||||
} else {
|
||||
assert(startsWith(context.source, ']]>'))
|
||||
__DEV__ && assert(startsWith(context.source, ']]>'))
|
||||
advanceBy(context, 3)
|
||||
}
|
||||
|
||||
@ -348,7 +349,7 @@ function parseCDATA(
|
||||
}
|
||||
|
||||
function parseComment(context: ParserContext): CommentNode {
|
||||
assert(startsWith(context.source, '<!--'))
|
||||
__DEV__ && assert(startsWith(context.source, '<!--'))
|
||||
|
||||
const start = getCursor(context)
|
||||
let content: string
|
||||
@ -390,7 +391,7 @@ function parseComment(context: ParserContext): CommentNode {
|
||||
}
|
||||
|
||||
function parseBogusComment(context: ParserContext): CommentNode | undefined {
|
||||
assert(/^<(?:[\!\?]|\/[^a-z>])/i.test(context.source))
|
||||
__DEV__ && assert(/^<(?:[\!\?]|\/[^a-z>])/i.test(context.source))
|
||||
|
||||
const start = getCursor(context)
|
||||
const contentStart = context.source[1] === '?' ? 1 : 2
|
||||
@ -416,7 +417,7 @@ function parseElement(
|
||||
context: ParserContext,
|
||||
ancestors: ElementNode[]
|
||||
): ElementNode | undefined {
|
||||
assert(/^<[a-z]/i.test(context.source))
|
||||
__DEV__ && assert(/^<[a-z]/i.test(context.source))
|
||||
|
||||
// Start tag.
|
||||
const parent = last(ancestors)
|
||||
@ -470,10 +471,11 @@ function parseTag(
|
||||
type: TagType,
|
||||
parent: ElementNode | undefined
|
||||
): ElementNode {
|
||||
assert(/^<\/?[a-z]/i.test(context.source))
|
||||
assert(
|
||||
type === (startsWith(context.source, '</') ? TagType.End : TagType.Start)
|
||||
)
|
||||
__DEV__ && assert(/^<\/?[a-z]/i.test(context.source))
|
||||
__DEV__ &&
|
||||
assert(
|
||||
type === (startsWith(context.source, '</') ? TagType.End : TagType.Start)
|
||||
)
|
||||
|
||||
// Tag open.
|
||||
const start = getCursor(context)
|
||||
@ -547,7 +549,7 @@ function parseAttribute(
|
||||
context: ParserContext,
|
||||
nameSet: Set<string>
|
||||
): AttributeNode | DirectiveNode {
|
||||
assert(/^[^\t\r\n\f />]/.test(context.source))
|
||||
__DEV__ && assert(/^[^\t\r\n\f />]/.test(context.source))
|
||||
|
||||
// Name.
|
||||
const start = getCursor(context)
|
||||
@ -712,7 +714,7 @@ function parseInterpolation(
|
||||
mode: TextModes
|
||||
): ExpressionNode | undefined {
|
||||
const [open, close] = context.delimiters
|
||||
assert(startsWith(context.source, open))
|
||||
__DEV__ && assert(startsWith(context.source, open))
|
||||
|
||||
const closeIndex = context.source.indexOf(close, open.length)
|
||||
if (closeIndex === -1) {
|
||||
@ -734,7 +736,7 @@ function parseInterpolation(
|
||||
}
|
||||
|
||||
function parseText(context: ParserContext, mode: TextModes): TextNode {
|
||||
assert(context.source.length > 0)
|
||||
__DEV__ && assert(context.source.length > 0)
|
||||
|
||||
const [open] = context.delimiters
|
||||
const endIndex = Math.min(
|
||||
@ -745,7 +747,7 @@ function parseText(context: ParserContext, mode: TextModes): TextNode {
|
||||
context.source.length
|
||||
].filter(n => n !== -1)
|
||||
)
|
||||
assert(endIndex > 0)
|
||||
__DEV__ && assert(endIndex > 0)
|
||||
|
||||
const start = getCursor(context)
|
||||
const content = parseTextData(context, endIndex, mode)
|
||||
|
1
packages/compiler-dom/README.md
Normal file
1
packages/compiler-dom/README.md
Normal file
@ -0,0 +1 @@
|
||||
# @vue/compiler-dom
|
7
packages/compiler-dom/api-extractor.json
Normal file
7
packages/compiler-dom/api-extractor.json
Normal file
@ -0,0 +1,7 @@
|
||||
{
|
||||
"extends": "../../api-extractor.json",
|
||||
"mainEntryPointFilePath": "./dist/packages/<unscopedPackageName>/src/index.d.ts",
|
||||
"dtsRollup": {
|
||||
"untrimmedFilePath": "./dist/<unscopedPackageName>.d.ts"
|
||||
}
|
||||
}
|
7
packages/compiler-dom/index.js
Normal file
7
packages/compiler-dom/index.js
Normal file
@ -0,0 +1,7 @@
|
||||
'use strict'
|
||||
|
||||
if (process.env.NODE_ENV === 'production') {
|
||||
module.exports = require('./dist/compiler-dom.cjs.prod.js')
|
||||
} else {
|
||||
module.exports = require('./dist/compiler-dom.cjs.js')
|
||||
}
|
34
packages/compiler-dom/package.json
Normal file
34
packages/compiler-dom/package.json
Normal file
@ -0,0 +1,34 @@
|
||||
{
|
||||
"name": "@vue/compiler-dom",
|
||||
"version": "3.0.0-alpha.1",
|
||||
"description": "@vue/compiler-dom",
|
||||
"main": "index.js",
|
||||
"module": "dist/compiler-dom.esm-bundler.js",
|
||||
"files": [
|
||||
"index.js",
|
||||
"dist"
|
||||
],
|
||||
"types": "dist/compiler-dom.d.ts",
|
||||
"unpkg": "dist/compiler-dom/global.js",
|
||||
"sideEffects": false,
|
||||
"buildOptions": {
|
||||
"name": "VueDOMCompiler",
|
||||
"formats": ["esm", "cjs", "global", "esm-browser"]
|
||||
},
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git+https://github.com/vuejs/vue.git"
|
||||
},
|
||||
"keywords": [
|
||||
"vue"
|
||||
],
|
||||
"author": "Evan You",
|
||||
"license": "MIT",
|
||||
"bugs": {
|
||||
"url": "https://github.com/vuejs/vue/issues"
|
||||
},
|
||||
"homepage": "https://github.com/vuejs/vue/tree/dev/packages/compiler-dom#readme",
|
||||
"dependencies": {
|
||||
"@vue/compiler-core": "3.0.0-alpha.1"
|
||||
}
|
||||
}
|
2
packages/compiler-dom/src/index.ts
Normal file
2
packages/compiler-dom/src/index.ts
Normal file
@ -0,0 +1,2 @@
|
||||
// TODO
|
||||
export * from '@vue/compiler-core'
|
@ -1,5 +1,10 @@
|
||||
// TODO this package will be the "full-build" that includes both the runtime
|
||||
// and the compiler
|
||||
// This package is the "full-build" that includes both the runtime
|
||||
// and the compiler. For now we are just exporting everything from the runtome
|
||||
// AND the compiler.
|
||||
|
||||
// TODO hook up the runtime to compile templates on the fly
|
||||
|
||||
export * from '@vue/compiler-dom'
|
||||
export * from '@vue/runtime-dom'
|
||||
|
||||
if (__FEATURE_PRODUCTION_TIP__) {
|
||||
|
20
scripts/bootstrap.js
vendored
20
scripts/bootstrap.js
vendored
@ -47,6 +47,26 @@ files.forEach(shortName => {
|
||||
fs.writeFileSync(readmePath, `# ${name}`)
|
||||
}
|
||||
|
||||
const apiExtractorConfigPath = path.join(
|
||||
packagesDir,
|
||||
shortName,
|
||||
`api-extractor.json`
|
||||
)
|
||||
if (args.force || !fs.existsSync(apiExtractorConfigPath)) {
|
||||
fs.writeFileSync(
|
||||
apiExtractorConfigPath,
|
||||
`
|
||||
{
|
||||
"extends": "../../api-extractor.json",
|
||||
"mainEntryPointFilePath": "./dist/packages/<unscopedPackageName>/src/index.d.ts",
|
||||
"dtsRollup": {
|
||||
"untrimmedFilePath": "./dist/<unscopedPackageName>.d.ts"
|
||||
}
|
||||
}
|
||||
`.trim()
|
||||
)
|
||||
}
|
||||
|
||||
const srcDir = path.join(packagesDir, shortName, `src`)
|
||||
const indexPath = path.join(packagesDir, shortName, `src/index.ts`)
|
||||
if (args.force || !fs.existsSync(indexPath)) {
|
||||
|
@ -24,6 +24,7 @@
|
||||
"@vue/runtime-test": ["packages/runtime-test/src"],
|
||||
"@vue/reactivity": ["packages/reactivity/src"],
|
||||
"@vue/compiler-core": ["packages/compiler-core/src"],
|
||||
"@vue/compiler-dom": ["packages/compiler-dom/src"],
|
||||
"@vue/server-renderer": ["packages/server-renderer/src"]
|
||||
}
|
||||
},
|
||||
|
Loading…
Reference in New Issue
Block a user