diff --git a/.circleci/config.yml b/.circleci/config.yml
index c3539bc..18c95db 100644
--- a/.circleci/config.yml
+++ b/.circleci/config.yml
@@ -3,7 +3,7 @@ version: 2
defaults: &defaults
working_directory: ~/repo
docker:
- - image: circleci/node:8-browsers
+ - image: circleci/node:12-browsers
jobs:
install:
@@ -69,4 +69,4 @@ workflows:
- install
- test:
requires:
- - install
\ No newline at end of file
+ - install
diff --git a/.eslintignore b/.eslintignore
deleted file mode 100644
index 21d28b2..0000000
--- a/.eslintignore
+++ /dev/null
@@ -1,11 +0,0 @@
-/dist/
-/lib/
-node_modules/
-
-/test/test.build.js
-/example/build.js
-
-# TOOD: remove after fixed decorator indent issue
-# https://github.com/eslint/typescript-eslint-parser/issues/438
-/example
-/test
\ No newline at end of file
diff --git a/.eslintrc.js b/.eslintrc.js
deleted file mode 100644
index fbc13bb..0000000
--- a/.eslintrc.js
+++ /dev/null
@@ -1,11 +0,0 @@
-module.exports = {
- root: true,
- extends: ['plugin:vue-libs/recommended'],
- parserOptions: {
- parser: '@typescript-eslint/parser'
- },
- rules: {
- 'no-unused-vars': 'off',
- 'no-undef': 'off'
- }
-}
\ No newline at end of file
diff --git a/.gitignore b/.gitignore
index 2ac7579..44efd32 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,6 +1,5 @@
-node_modules
+node_modules/
example/build.js
example/build.js.map
-docs/.vuepress/dist
-test/test.build.js
-lib
+lib/
+dist/
\ No newline at end of file
diff --git a/.prettierignore b/.prettierignore
new file mode 100644
index 0000000..9ccf676
--- /dev/null
+++ b/.prettierignore
@@ -0,0 +1,4 @@
+node_modules/
+dist/
+lib/
+/example/build.js
\ No newline at end of file
diff --git a/.prettierrc b/.prettierrc
new file mode 100644
index 0000000..c489349
--- /dev/null
+++ b/.prettierrc
@@ -0,0 +1,3 @@
+semi: false
+singleQuote: true
+printWidth: 80
\ No newline at end of file
diff --git a/CHANGELOG.md b/CHANGELOG.md
new file mode 100644
index 0000000..0d7b276
--- /dev/null
+++ b/CHANGELOG.md
@@ -0,0 +1,106 @@
+# [8.0.0-beta.3](https://github.com/vuejs/vue-class-component/compare/v8.0.0-beta.2...v8.0.0-beta.3) (2020-09-17)
+
+
+### Features
+
+* make props type compatible with vue@3.0.0-rc.12 ([39774a8](https://github.com/vuejs/vue-class-component/commit/39774a8b78898b222532787ef4b2c6eab03977ac))
+
+### Breaking Changes
+
+* setup only unwrap shallow refs ([57e16c9](https://github.com/vuejs/vue-class-component/commit/57e16c96939c5eed1e627e6ef2b8e791518d6214))
+
+
+
+# [8.0.0-beta.2](https://github.com/vuejs/vue-class-component/compare/v8.0.0-beta.1...v8.0.0-beta.2) (2020-09-14)
+
+
+### Bug Fixes
+
+* correctly inherit mixin type when used with props and emits helpers ([7c87b03](https://github.com/vuejs/vue-class-component/commit/7c87b0390b629bf521debb892a9789f7e572ca99))
+* allow extra props of components in TSX ([7b3029e](https://github.com/vuejs/vue-class-component/commit/7b3029ed458f307a269da4947618fc9bf18d35c3))
+* make props with `default` optional in TSX ([ab65f42](https://github.com/vuejs/vue-class-component/commit/ab65f4236042fbc79e485f2d0b601629cbcc1060))
+
+
+
+# [8.0.0-beta.1](https://github.com/vuejs/vue-class-component/compare/v8.0.0-alpha.6...v8.0.0-beta.1) (2020-09-12)
+
+
+### Features
+
+Added `props` and `emits` mixin helpers to define corresponding component options with type safety.
+You can see the detailed proposal at [#447](https://github.com/vuejs/vue-class-component/issues/447)
+
+
+# [8.0.0-alpha.6](https://github.com/vuejs/vue-class-component/compare/v8.0.0-alpha.5...v8.0.0-alpha.6) (2020-05-20)
+
+
+### Bug Fixes
+
+* handle ssr render function injection ([830b3b2](https://github.com/vuejs/vue-class-component/commit/830b3b298f819eb1fbbc6f314b51450f2be57e35))
+* relax $emit type ([bc0a8bc](https://github.com/vuejs/vue-class-component/commit/bc0a8bcc0777cde837bbe3af2a534d146e934864))
+
+
+
+# [8.0.0-alpha.5](https://github.com/vuejs/vue-class-component/compare/v8.0.0-alpha.4...v8.0.0-alpha.5) (2020-05-10)
+
+
+### Bug Fixes
+
+* handle hot module replacement ([72347b7](https://github.com/vuejs/vue-class-component/commit/72347b7b37b6e0099eaf8c46922ab1f91f061dc5))
+
+
+
+# [8.0.0-alpha.4](https://github.com/vuejs/vue-class-component/compare/v8.0.0-alpha.3...v8.0.0-alpha.4) (2020-05-06)
+
+
+### Build System
+
+* rename dist file names to align vue core lib ([c65712e](https://github.com/vuejs/vue-class-component/commit/c65712eb85f03fab8ddfba622f6262d1c01c8670))
+
+
+### Features
+
+* add setup helper function to invoke composition functions ([6f1a404](https://github.com/vuejs/vue-class-component/commit/6f1a40449d51e7ec8225e49d0ddfcb6763477915))
+* mark as side effect free to enable efficient tree-shaking ([#423](https://github.com/vuejs/vue-class-component/issues/423)) ([70ed762](https://github.com/vuejs/vue-class-component/commit/70ed762449d18c5f9d66a8141ab8691f7bfba5ec))
+
+
+### BREAKING CHANGES
+
+* file names under `dist/` directory have been changed as following:
+ * vue-class-component.js -> vue-class-component.global.js (also changed from umd to iife)
+ * vue-class-component.min.js -> vue-class-component.global.prod.js (also changed from umd to iife)
+ * vue-class-component.common.js -> vue-class-component.cjs.js
+ * vue-class-component.esm.js -> vue-class-component.esm-bundler.js
+ * vue-class-component.esm.browser.js -> vue-class-component.esm-browser.js
+ * vue-class-component.esm.browser.min.js -> vue-class-component.esm-browser.prod.js
+
+
+
+# [8.0.0-alpha.3](https://github.com/vuejs/vue-class-component/compare/v8.0.0-alpha.2...v8.0.0-alpha.3) (2020-04-26)
+
+
+### Features
+
+* support composition functions in property initializers ([744f6ca](https://github.com/vuejs/vue-class-component/commit/744f6ca0328a02e0a2f5368cf5830ad8922b9e5f))
+
+
+### BREAKING CHANGES
+
+* remove component name inference from class name
+
+
+
+# [8.0.0-alpha.2](https://github.com/vuejs/vue-class-component/compare/v8.0.0-alpha.1...v8.0.0-alpha.2) (2020-04-12)
+
+
+### Features
+
+* make it work with vue-loader ([5bfebad](https://github.com/vuejs/vue-class-component/commit/5bfebad9af02f81a3076b49e8616c1481dc7cce5))
+
+
+
+# [8.0.0-alpha.1](https://github.com/vuejs/vue-class-component/compare/v7.2.3...v8.0.0-alpha.1) (2020-04-12)
+
+---
+
+For changes prior to v8, please see [GitHub release note](https://github.com/vuejs/vue-class-component/releases).
\ No newline at end of file
diff --git a/README.md b/README.md
index 32ffe39..858e76d 100644
--- a/README.md
+++ b/README.md
@@ -1,12 +1,14 @@
-# Vue Class Component
+# Vue Class Component v8
-ECMAScript / TypeScript decorator for class-style Vue components.
+The next Vue Class Component for Vue v3.
-[](https://www.npmjs.com/package/vue-class-component)
+## Status
-## Document
+Beta
-See [https://class-component.vuejs.org](https://class-component.vuejs.org)
+## Documentation
+
+The documentation is not ready yet. But you can see [v8 proposals in the issue list](https://github.com/vuejs/vue-class-component/issues?q=is%3Aopen+is%3Aissue+label%3Av8).
## Questions
diff --git a/api-extractor.json b/api-extractor.json
new file mode 100644
index 0000000..64b33ee
--- /dev/null
+++ b/api-extractor.json
@@ -0,0 +1,56 @@
+/**
+ * Config file for API Extractor. For more info, please visit: https://api-extractor.com
+ */
+{
+ "$schema": "https://developer.microsoft.com/json-schemas/api-extractor/v7/api-extractor.schema.json",
+ "mainEntryPointFilePath": "
helloMsg: {{ helloMsg }}
computed msg: {{ computedMsg }}
-- -
- Clicked: {{ count }} times - -
diff --git a/example/src/components/Hello.vue b/example/src/components/Hello.vue deleted file mode 100644 index fcd5d44..0000000 --- a/example/src/components/Hello.vue +++ /dev/null @@ -1,18 +0,0 @@ - -hello times: {{ helloTimes }}
- - - - diff --git a/example/src/components/World.tsx b/example/src/components/World.tsx deleted file mode 100644 index a2f7de5..0000000 --- a/example/src/components/World.tsx +++ /dev/null @@ -1,9 +0,0 @@ -import Vue, { CreateElement } from 'vue' -import Component from '../../../lib/index' - -@Component -export default class World extends Vue { - render (h: CreateElement) { - returnThis is rendered via TSX
- } -} diff --git a/example/src/main.ts b/example/src/main.ts index f9913ff..6099009 100644 --- a/example/src/main.ts +++ b/example/src/main.ts @@ -1,11 +1,4 @@ -import Vue from 'vue' +import { createApp } from 'vue' import App from './App.vue' -import store from './store' -new Vue({ - el: '#app', - store, - render: h => h(App, { - props: { propMessage: 'World' } - }) -}) +createApp(App, { propMessage: 'World' }).mount('#app') diff --git a/example/src/shims-tsx.d.ts b/example/src/shims-tsx.d.ts deleted file mode 100644 index 64fc0a8..0000000 --- a/example/src/shims-tsx.d.ts +++ /dev/null @@ -1,11 +0,0 @@ -import Vue, { VNode } from 'vue' - -declare global { - namespace JSX { - interface Element extends VNode {} - interface ElementClass extends Vue {} - interface IntrinsicElements { - [elem: string]: any - } - } -} diff --git a/example/src/shims-vue.d.ts b/example/src/shims-vue.d.ts index d9f24fa..de1defd 100644 --- a/example/src/shims-vue.d.ts +++ b/example/src/shims-vue.d.ts @@ -1,4 +1,5 @@ declare module '*.vue' { - import Vue from 'vue' - export default Vue + import { Component } from 'vue' + const _default: Component + export default _default } diff --git a/example/src/store.ts b/example/src/store.ts deleted file mode 100644 index e37ffe4..0000000 --- a/example/src/store.ts +++ /dev/null @@ -1,23 +0,0 @@ -import Vue from 'vue' -import Vuex from 'vuex' - -interface CounterState { - count: number -} - -Vue.use(Vuex) - -const state = { - count: 0 -} - -const mutations = { - increment (state: CounterState) { - state.count++ - } -} - -export default new Vuex.Store({ - state, - mutations -}) diff --git a/example/tsconfig.json b/example/tsconfig.json index bd9647c..7f20272 100644 --- a/example/tsconfig.json +++ b/example/tsconfig.json @@ -1,21 +1,15 @@ { "compilerOptions": { "target": "esnext", - "lib": [ - "dom", - "esnext" - ], + "lib": ["dom", "esnext"], "module": "es2015", "moduleResolution": "node", "experimentalDecorators": true, + "useDefineForClassFields": true, "strict": true, "noUnusedLocals": true, "noUnusedParameters": true, - "jsx": "preserve", - "jsxFactory": "h" + "sourceMap": true }, - "include": [ - "./**/*.ts" - ], - "compileOnSave": false + "include": ["./**/*.ts"] } diff --git a/example/webpack.config.js b/example/webpack.config.js index be70819..52bc2a5 100644 --- a/example/webpack.config.js +++ b/example/webpack.config.js @@ -1,4 +1,5 @@ -const VueLoaderPlugin = require('vue-loader/lib/plugin') +const { VueLoaderPlugin } = require('vue-loader') +const babelConfig = require('./babel.config') module.exports = { mode: 'development', @@ -6,13 +7,13 @@ module.exports = { entry: './src/main.ts', output: { path: __dirname, - filename: 'build.js' + filename: 'build.js', }, resolve: { alias: { - vue$: 'vue/dist/vue.esm.js' + vue$: 'vue/dist/vue.esm-bundler.js', }, - extensions: ['.ts', '.tsx', '.js'] + extensions: ['.ts', '.tsx', '.js'], }, module: { rules: [ @@ -20,24 +21,25 @@ module.exports = { test: /\.tsx?$/, exclude: /node_modules/, use: [ - 'babel-loader', + { + loader: 'babel-loader', + options: babelConfig, + }, { loader: 'ts-loader', options: { appendTsSuffixTo: [/\.vue$/], - appendTsxSuffixTo: [/\.vue$/] - } - } - ] + appendTsxSuffixTo: [/\.vue$/], + }, + }, + ], }, { test: /\.vue$/, - use: ['vue-loader'] - } - ] + use: ['vue-loader'], + }, + ], }, devtool: 'source-map', - plugins: [ - new VueLoaderPlugin() - ] + plugins: [new VueLoaderPlugin()], } diff --git a/hooks.d.ts b/hooks.d.ts deleted file mode 100644 index afc0986..0000000 --- a/hooks.d.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { VNode } from 'vue' - -declare module 'vue/types/vue' { - interface Vue { - data?(): object - beforeCreate?(): void - created?(): void - beforeMount?(): void - mounted?(): void - beforeDestroy?(): void - destroyed?(): void - beforeUpdate?(): void - updated?(): void - activated?(): void - deactivated?(): void - render?(createElement: CreateElement): VNode - errorCaptured?(err: Error, vm: Vue, info: string): boolean | undefined - serverPrefetch?(): Promise = Vue > &
+ ExtractProps
+
+export type ExtractProps = {
+ [K in keyof P]: P[K] extends WithDefault = {
+ [K in keyof P]: P[K] extends WithDefault = {
+ [K in DefaultKeys ]: P[K] extends WithDefault (
+ Props: P
+ ): VueConstructor