From 1359cc3a28a0cfabd7ad13a12a3afdcaec886cc8 Mon Sep 17 00:00:00 2001 From: Evan You Date: Mon, 6 Jul 2020 15:56:24 -0400 Subject: [PATCH] wip: compileScriptSetup --- packages/compiler-core/package.json | 4 +- .../src/transforms/transformExpression.ts | 14 +- packages/compiler-sfc/package.json | 2 + packages/compiler-sfc/src/compileScript.ts | 214 ++++++++++++++++++ packages/compiler-sfc/src/index.ts | 1 + packages/compiler-sfc/src/parse.ts | 8 +- packages/shared/src/index.ts | 12 + yarn.lock | 11 +- 8 files changed, 252 insertions(+), 14 deletions(-) create mode 100644 packages/compiler-sfc/src/compileScript.ts diff --git a/packages/compiler-core/package.json b/packages/compiler-core/package.json index ee12f9228..91a86806b 100644 --- a/packages/compiler-core/package.json +++ b/packages/compiler-core/package.json @@ -31,8 +31,8 @@ "homepage": "https://github.com/vuejs/vue-next/tree/master/packages/compiler-core#readme", "dependencies": { "@vue/shared": "3.0.0-beta.20", - "@babel/parser": "^7.8.6", - "@babel/types": "^7.8.6", + "@babel/parser": "^7.10.4", + "@babel/types": "^7.10.4", "estree-walker": "^0.8.1", "source-map": "^0.6.1" } diff --git a/packages/compiler-core/src/transforms/transformExpression.ts b/packages/compiler-core/src/transforms/transformExpression.ts index b1da05b45..97e8fece2 100644 --- a/packages/compiler-core/src/transforms/transformExpression.ts +++ b/packages/compiler-core/src/transforms/transformExpression.ts @@ -22,10 +22,15 @@ import { parseJS, walkJS } from '../utils' -import { isGloballyWhitelisted, makeMap } from '@vue/shared' +import { + isGloballyWhitelisted, + makeMap, + babelParserDefautPlugins +} from '@vue/shared' import { createCompilerError, ErrorCodes } from '../errors' import { Node, Function, Identifier, ObjectProperty } from '@babel/types' import { validateBrowserExpression } from '../validateExpression' +import { ParserPlugin } from '@babel/parser' const isLiteralWhitelisted = /*#__PURE__*/ makeMap('true,false,null,this') @@ -127,12 +132,7 @@ export function processExpression( ast = parseJS(source, { plugins: [ ...context.expressionPlugins, - // by default we enable proposals slated for ES2020. - // full list at https://babeljs.io/docs/en/next/babel-parser#plugins - // this will need to be updated as the spec moves forward. - 'bigInt', - 'optionalChaining', - 'nullishCoalescingOperator' + ...(babelParserDefautPlugins as ParserPlugin[]) ] }).program } catch (e) { diff --git a/packages/compiler-sfc/package.json b/packages/compiler-sfc/package.json index e57651e97..fa9d8e27c 100644 --- a/packages/compiler-sfc/package.json +++ b/packages/compiler-sfc/package.json @@ -34,6 +34,7 @@ "vue": "3.0.0-beta.20" }, "dependencies": { + "@babel/parser": "^7.10.4", "@vue/compiler-core": "3.0.0-beta.20", "@vue/compiler-dom": "3.0.0-beta.20", "@vue/compiler-ssr": "3.0.0-beta.20", @@ -41,6 +42,7 @@ "consolidate": "^0.15.1", "hash-sum": "^2.0.0", "lru-cache": "^5.1.1", + "magic-string": "^0.25.7", "merge-source-map": "^1.1.0", "postcss": "^7.0.27", "postcss-modules": "^3.1.0", diff --git a/packages/compiler-sfc/src/compileScript.ts b/packages/compiler-sfc/src/compileScript.ts new file mode 100644 index 000000000..4cfe5361a --- /dev/null +++ b/packages/compiler-sfc/src/compileScript.ts @@ -0,0 +1,214 @@ +import MagicString, { SourceMap } from 'magic-string' +import { SFCDescriptor, SFCScriptBlock } from './parse' +import { parse, ParserPlugin } from '@babel/parser' +import { babelParserDefautPlugins } from '@vue/shared' +import { ObjectPattern, ArrayPattern } from '@babel/types' + +export interface BindingMetadata { + [key: string]: 'data' | 'props' | 'setup' | 'ctx' +} + +export interface SFCScriptCompileOptions { + parserPlugins?: ParserPlugin[] +} + +/** + * Compile `