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 { ParserErrorTypes } from './errorTypes'
 | 
				
			||||||
import {
 | 
					import {
 | 
				
			||||||
  Node,
 | 
					  Node,
 | 
				
			||||||
@ -69,7 +69,7 @@ function startsWith(source: string, searchString: string): boolean {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
function advanceBy(context: ParserContext, numberOfCharacters: number): void {
 | 
					function advanceBy(context: ParserContext, numberOfCharacters: number): void {
 | 
				
			||||||
  assert(numberOfCharacters <= context.source.length)
 | 
					  __DEV__ && assert(numberOfCharacters <= context.source.length)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  const { column, source } = context
 | 
					  const { column, source } = context
 | 
				
			||||||
  const str = source.slice(0, numberOfCharacters)
 | 
					  const str = source.slice(0, numberOfCharacters)
 | 
				
			||||||
@ -175,7 +175,7 @@ function parseChildren(
 | 
				
			|||||||
  const nodes: RootNode['children'] = []
 | 
					  const nodes: RootNode['children'] = []
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  while (!isEnd(context, mode, ancestors)) {
 | 
					  while (!isEnd(context, mode, ancestors)) {
 | 
				
			||||||
    assert(context.source.length > 0)
 | 
					    __DEV__ && assert(context.source.length > 0)
 | 
				
			||||||
    const s = context.source
 | 
					    const s = context.source
 | 
				
			||||||
    let node: any = null
 | 
					    let node: any = null
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -332,15 +332,16 @@ function parseCDATA(
 | 
				
			|||||||
  context: ParserContext,
 | 
					  context: ParserContext,
 | 
				
			||||||
  ancestors: ElementNode[]
 | 
					  ancestors: ElementNode[]
 | 
				
			||||||
): RootNode['children'] {
 | 
					): RootNode['children'] {
 | 
				
			||||||
 | 
					  __DEV__ &&
 | 
				
			||||||
    assert(last(ancestors) == null || last(ancestors)!.ns !== Namespaces.HTML)
 | 
					    assert(last(ancestors) == null || last(ancestors)!.ns !== Namespaces.HTML)
 | 
				
			||||||
  assert(startsWith(context.source, '<![CDATA['))
 | 
					  __DEV__ && assert(startsWith(context.source, '<![CDATA['))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  advanceBy(context, 9)
 | 
					  advanceBy(context, 9)
 | 
				
			||||||
  const nodes = parseChildren(context, TextModes.CDATA, ancestors)
 | 
					  const nodes = parseChildren(context, TextModes.CDATA, ancestors)
 | 
				
			||||||
  if (context.source.length === 0) {
 | 
					  if (context.source.length === 0) {
 | 
				
			||||||
    emitError(context, ParserErrorTypes.EOF_IN_CDATA)
 | 
					    emitError(context, ParserErrorTypes.EOF_IN_CDATA)
 | 
				
			||||||
  } else {
 | 
					  } else {
 | 
				
			||||||
    assert(startsWith(context.source, ']]>'))
 | 
					    __DEV__ && assert(startsWith(context.source, ']]>'))
 | 
				
			||||||
    advanceBy(context, 3)
 | 
					    advanceBy(context, 3)
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -348,7 +349,7 @@ function parseCDATA(
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
function parseComment(context: ParserContext): CommentNode {
 | 
					function parseComment(context: ParserContext): CommentNode {
 | 
				
			||||||
  assert(startsWith(context.source, '<!--'))
 | 
					  __DEV__ && assert(startsWith(context.source, '<!--'))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  const start = getCursor(context)
 | 
					  const start = getCursor(context)
 | 
				
			||||||
  let content: string
 | 
					  let content: string
 | 
				
			||||||
@ -390,7 +391,7 @@ function parseComment(context: ParserContext): CommentNode {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
function parseBogusComment(context: ParserContext): CommentNode | undefined {
 | 
					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 start = getCursor(context)
 | 
				
			||||||
  const contentStart = context.source[1] === '?' ? 1 : 2
 | 
					  const contentStart = context.source[1] === '?' ? 1 : 2
 | 
				
			||||||
@ -416,7 +417,7 @@ function parseElement(
 | 
				
			|||||||
  context: ParserContext,
 | 
					  context: ParserContext,
 | 
				
			||||||
  ancestors: ElementNode[]
 | 
					  ancestors: ElementNode[]
 | 
				
			||||||
): ElementNode | undefined {
 | 
					): ElementNode | undefined {
 | 
				
			||||||
  assert(/^<[a-z]/i.test(context.source))
 | 
					  __DEV__ && assert(/^<[a-z]/i.test(context.source))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  // Start tag.
 | 
					  // Start tag.
 | 
				
			||||||
  const parent = last(ancestors)
 | 
					  const parent = last(ancestors)
 | 
				
			||||||
@ -470,7 +471,8 @@ function parseTag(
 | 
				
			|||||||
  type: TagType,
 | 
					  type: TagType,
 | 
				
			||||||
  parent: ElementNode | undefined
 | 
					  parent: ElementNode | undefined
 | 
				
			||||||
): ElementNode {
 | 
					): ElementNode {
 | 
				
			||||||
  assert(/^<\/?[a-z]/i.test(context.source))
 | 
					  __DEV__ && assert(/^<\/?[a-z]/i.test(context.source))
 | 
				
			||||||
 | 
					  __DEV__ &&
 | 
				
			||||||
    assert(
 | 
					    assert(
 | 
				
			||||||
      type === (startsWith(context.source, '</') ? TagType.End : TagType.Start)
 | 
					      type === (startsWith(context.source, '</') ? TagType.End : TagType.Start)
 | 
				
			||||||
    )
 | 
					    )
 | 
				
			||||||
@ -547,7 +549,7 @@ function parseAttribute(
 | 
				
			|||||||
  context: ParserContext,
 | 
					  context: ParserContext,
 | 
				
			||||||
  nameSet: Set<string>
 | 
					  nameSet: Set<string>
 | 
				
			||||||
): AttributeNode | DirectiveNode {
 | 
					): AttributeNode | DirectiveNode {
 | 
				
			||||||
  assert(/^[^\t\r\n\f />]/.test(context.source))
 | 
					  __DEV__ && assert(/^[^\t\r\n\f />]/.test(context.source))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  // Name.
 | 
					  // Name.
 | 
				
			||||||
  const start = getCursor(context)
 | 
					  const start = getCursor(context)
 | 
				
			||||||
@ -712,7 +714,7 @@ function parseInterpolation(
 | 
				
			|||||||
  mode: TextModes
 | 
					  mode: TextModes
 | 
				
			||||||
): ExpressionNode | undefined {
 | 
					): ExpressionNode | undefined {
 | 
				
			||||||
  const [open, close] = context.delimiters
 | 
					  const [open, close] = context.delimiters
 | 
				
			||||||
  assert(startsWith(context.source, open))
 | 
					  __DEV__ && assert(startsWith(context.source, open))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  const closeIndex = context.source.indexOf(close, open.length)
 | 
					  const closeIndex = context.source.indexOf(close, open.length)
 | 
				
			||||||
  if (closeIndex === -1) {
 | 
					  if (closeIndex === -1) {
 | 
				
			||||||
@ -734,7 +736,7 @@ function parseInterpolation(
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
function parseText(context: ParserContext, mode: TextModes): TextNode {
 | 
					function parseText(context: ParserContext, mode: TextModes): TextNode {
 | 
				
			||||||
  assert(context.source.length > 0)
 | 
					  __DEV__ && assert(context.source.length > 0)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  const [open] = context.delimiters
 | 
					  const [open] = context.delimiters
 | 
				
			||||||
  const endIndex = Math.min(
 | 
					  const endIndex = Math.min(
 | 
				
			||||||
@ -745,7 +747,7 @@ function parseText(context: ParserContext, mode: TextModes): TextNode {
 | 
				
			|||||||
      context.source.length
 | 
					      context.source.length
 | 
				
			||||||
    ].filter(n => n !== -1)
 | 
					    ].filter(n => n !== -1)
 | 
				
			||||||
  )
 | 
					  )
 | 
				
			||||||
  assert(endIndex > 0)
 | 
					  __DEV__ && assert(endIndex > 0)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  const start = getCursor(context)
 | 
					  const start = getCursor(context)
 | 
				
			||||||
  const content = parseTextData(context, endIndex, mode)
 | 
					  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
 | 
					// This package is the "full-build" that includes both the runtime
 | 
				
			||||||
// and the compiler
 | 
					// 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'
 | 
					export * from '@vue/runtime-dom'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if (__FEATURE_PRODUCTION_TIP__) {
 | 
					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}`)
 | 
					    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 srcDir = path.join(packagesDir, shortName, `src`)
 | 
				
			||||||
  const indexPath = path.join(packagesDir, shortName, `src/index.ts`)
 | 
					  const indexPath = path.join(packagesDir, shortName, `src/index.ts`)
 | 
				
			||||||
  if (args.force || !fs.existsSync(indexPath)) {
 | 
					  if (args.force || !fs.existsSync(indexPath)) {
 | 
				
			||||||
 | 
				
			|||||||
@ -24,6 +24,7 @@
 | 
				
			|||||||
      "@vue/runtime-test": ["packages/runtime-test/src"],
 | 
					      "@vue/runtime-test": ["packages/runtime-test/src"],
 | 
				
			||||||
      "@vue/reactivity": ["packages/reactivity/src"],
 | 
					      "@vue/reactivity": ["packages/reactivity/src"],
 | 
				
			||||||
      "@vue/compiler-core": ["packages/compiler-core/src"],
 | 
					      "@vue/compiler-core": ["packages/compiler-core/src"],
 | 
				
			||||||
 | 
					      "@vue/compiler-dom": ["packages/compiler-dom/src"],
 | 
				
			||||||
      "@vue/server-renderer": ["packages/server-renderer/src"]
 | 
					      "@vue/server-renderer": ["packages/server-renderer/src"]
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user