diff --git a/lib/nuxt-property-decorator.umd.js b/lib/nuxt-property-decorator.umd.js index d8ff0bd..f741b3f 100644 --- a/lib/nuxt-property-decorator.umd.js +++ b/lib/nuxt-property-decorator.umd.js @@ -1,146 +1,144 @@ (function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('vue'), require('vue-property-decorator'), require('vue-class-component'), require('reflect-metadata'), require('vuex-class')) : - typeof define === 'function' && define.amd ? define(['exports', 'vue', 'vue-property-decorator', 'vue-class-component', 'reflect-metadata', 'vuex-class'], factory) : - (factory((global.NuxtPropertyDecorator = {}),global.Vue,global.vuePropertyDecorator,global.VueClassComponent,null,global.vuexClass)); -}(this, (function (exports,vue,vuePropertyDecorator,Component,reflectMetadata,vuexClass) { 'use strict'; + typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('vue'), require('vue-property-decorator'), require('vue-class-component'), require('reflect-metadata'), require('vuex-class')) : + typeof define === 'function' && define.amd ? define(['exports', 'vue', 'vue-property-decorator', 'vue-class-component', 'reflect-metadata', 'vuex-class'], factory) : + (global = global || self, factory(global.NuxtPropertyDecorator = {}, global.Vue, global.VuePropertyDecorator, global.VueClassComponent, null, global.VuexClass)); +}(this, function (exports, vue, vuePropertyDecorator, Component, reflectMetadata, vuexClass) { 'use strict'; -vue = vue && vue.hasOwnProperty('default') ? vue['default'] : vue; -var Component__default = 'default' in Component ? Component['default'] : Component; + vue = vue && vue.hasOwnProperty('default') ? vue['default'] : vue; + var Component__default = 'default' in Component ? Component['default'] : Component; -Component__default.registerHooks([ - 'beforeRouteEnter', - 'beforeRouteUpdate', - 'beforeRouteLeave', - 'asyncData', - 'fetch', - 'head', - 'middleware', - 'layout', - 'transition', - 'scrollToTop', - 'validate' -]); -// const Component = require('nuxt-class-component'); -// const { createDecorator } = require('nuxt-class-component'); -// Code copied from Vue/src/shared/util.js -var hyphenateRE = /\B([A-Z])/g; -var hyphenate = function (str) { return str.replace(hyphenateRE, '-$1').toLowerCase(); }; -/** - * decorator of $off - * @param event The name of the event - * @param method The name of the method - */ -function Off(event, method) { - return function (target, key, descriptor) { - key = hyphenate(key); - var original = descriptor.value; - descriptor.value = function offer() { - var args = []; - for (var _i = 0; _i < arguments.length; _i++) { - args[_i] = arguments[_i]; - } - if (original.apply(this, args) !== false) { - if (method) { - if (typeof this[method] === 'function') { - this.$off(event || key, this[method]); - } - else { - throw new TypeError('must be a method name'); - } - } - else if (event) { - this.$off(event || key); - } - else { - this.$off(); - } - } - }; - }; -} -/** - * decorator of $on - * @param event The name of the event - */ -function On(event) { - return Component.createDecorator(function (componentOptions, k) { - var key = hyphenate(k); - if (typeof componentOptions.created !== 'function') { - componentOptions.created = function () { }; - } - var original = componentOptions.created; - componentOptions.created = function () { - original(); - if (typeof componentOptions.methods !== 'undefined') { - this.$on(event || key, componentOptions.methods[k]); - } - }; - }); -} -/** - * decorator of $once - * @param event The name of the event - */ -function Once(event) { - return Component.createDecorator(function (componentOptions, k) { - var key = hyphenate(k); - if (typeof componentOptions.created !== 'function') { - componentOptions.created = function () { }; - } - var original = componentOptions.created; - componentOptions.created = function () { - original(); - if (typeof componentOptions.methods !== 'undefined') { - this.$once(event || key, componentOptions.methods[k]); - } - }; - }); -} -/** - * decorator of $nextTick - * - * @export - * @param {string} method - * @returns {MethodDecorator} - */ -function NextTick(method) { - return function (target, key, descriptor) { - var original = descriptor.value; - descriptor.value = function emitter() { - var args = []; - for (var _i = 0; _i < arguments.length; _i++) { - args[_i] = arguments[_i]; - } - if (original.apply(this, args) !== false) - if (typeof this[method] === 'function') { - this.$nextTick(this[method]); - } - else { - throw new TypeError('must be a method name'); - } - }; - }; -} + Component__default.registerHooks([ + 'beforeRouteEnter', + 'beforeRouteUpdate', + 'beforeRouteLeave', + 'asyncData', + 'fetch', + 'head', + 'middleware', + 'layout', + 'transition', + 'scrollToTop', + 'validate' + ]); + // Code copied from Vue/src/shared/util.js + var hyphenateRE = /\B([A-Z])/g; + var hyphenate = function (str) { return str.replace(hyphenateRE, '-$1').toLowerCase(); }; + /** + * decorator of $off + * @param event The name of the event + * @param method The name of the method + */ + function Off(event, method) { + return function (target, key, descriptor) { + key = hyphenate(key); + var original = descriptor.value; + descriptor.value = function offer() { + var args = []; + for (var _i = 0; _i < arguments.length; _i++) { + args[_i] = arguments[_i]; + } + if (original.apply(this, args) !== false) { + if (method) { + if (typeof this[method] === 'function') { + this.$off(event || key, this[method]); + } + else { + throw new TypeError('must be a method name'); + } + } + else if (event) { + this.$off(event || key); + } + else { + this.$off(); + } + } + }; + }; + } + /** + * decorator of $on + * @param event The name of the event + */ + function On(event) { + return Component.createDecorator(function (componentOptions, k) { + var key = hyphenate(k); + if (typeof componentOptions.created !== 'function') { + componentOptions.created = function () { }; + } + var original = componentOptions.created; + componentOptions.created = function () { + original(); + if (typeof componentOptions.methods !== 'undefined') { + this.$on(event || key, componentOptions.methods[k]); + } + }; + }); + } + /** + * decorator of $once + * @param event The name of the event + */ + function Once(event) { + return Component.createDecorator(function (componentOptions, k) { + var key = hyphenate(k); + if (typeof componentOptions.created !== 'function') { + componentOptions.created = function () { }; + } + var original = componentOptions.created; + componentOptions.created = function () { + original(); + if (typeof componentOptions.methods !== 'undefined') { + this.$once(event || key, componentOptions.methods[k]); + } + }; + }); + } + /** + * decorator of $nextTick + * + * @export + * @param {string} method + * @returns {MethodDecorator} + */ + function NextTick(method) { + return function (target, key, descriptor) { + var original = descriptor.value; + descriptor.value = function emitter() { + var args = []; + for (var _i = 0; _i < arguments.length; _i++) { + args[_i] = arguments[_i]; + } + if (original.apply(this, args) !== false) + if (typeof this[method] === 'function') { + this.$nextTick(this[method]); + } + else { + throw new TypeError('must be a method name'); + } + }; + }; + } -exports.Off = Off; -exports.On = On; -exports.Once = Once; -exports.NextTick = NextTick; -exports.Vue = vue; -exports.Component = Component__default; -exports.Emit = vuePropertyDecorator.Emit; -exports.Inject = vuePropertyDecorator.Inject; -exports.Model = vuePropertyDecorator.Model; -exports.Prop = vuePropertyDecorator.Prop; -exports.Provide = vuePropertyDecorator.Provide; -exports.Watch = vuePropertyDecorator.Watch; -exports.mixins = Component.mixins; -exports.State = vuexClass.State; -exports.Getter = vuexClass.Getter; -exports.Action = vuexClass.Action; -exports.Mutation = vuexClass.Mutation; -exports.namespace = vuexClass.namespace; + exports.Vue = vue; + exports.Emit = vuePropertyDecorator.Emit; + exports.Inject = vuePropertyDecorator.Inject; + exports.Model = vuePropertyDecorator.Model; + exports.Prop = vuePropertyDecorator.Prop; + exports.Provide = vuePropertyDecorator.Provide; + exports.Watch = vuePropertyDecorator.Watch; + exports.Component = Component__default; + exports.mixins = Component.mixins; + exports.State = vuexClass.State; + exports.Getter = vuexClass.Getter; + exports.Action = vuexClass.Action; + exports.Mutation = vuexClass.Mutation; + exports.namespace = vuexClass.namespace; + exports.Off = Off; + exports.On = On; + exports.Once = Once; + exports.NextTick = NextTick; -Object.defineProperty(exports, '__esModule', { value: true }); + Object.defineProperty(exports, '__esModule', { value: true }); -}))); +})); diff --git a/package.json b/package.json index 40a1059..a28fdfb 100644 --- a/package.json +++ b/package.json @@ -36,23 +36,24 @@ "reflect-metadata": "^0.1.12", "vue-class-component": "6.3.2", "vue-property-decorator": "^7.3.0", + "vuex": "^3.1.0", "vuex-class": "^0.3.1" }, "devDependencies": { "@std/esm": "^0.26.0", - "@types/jest": "^22.2.3", - "@types/node": "^9.6.4", + "@types/jest": "^23.3.13", + "@types/node": "^10.12.18", "@vue/test-utils": "^1.0.0-beta.13", - "babel-jest": "^22.4.3", - "jest": "^22.4.3", - "rollup": "^0.45.2", - "rollup-plugin-typescript2": "^0.12.0", + "babel-jest": "^23.6.0", + "jest": "^23.6.0", + "rollup": "^1.1.2", + "rollup-plugin-typescript2": "^0.19.2", "standard-version": "^4.3.0", - "ts-jest": "^22.4.2", - "ts-node": "^5.0.1", - "typescript": "^2.8.1", + "ts-jest": "^23.10.5", + "ts-node": "^8.0.1", + "typescript": "^3.2.4", "vue": "^2.5.15", - "vue-jest": "^2.4.1", + "vue-jest": "^3.0.2", "vue-template-compiler": "^2.5.16", "yorkie": "^2.0.0" }, diff --git a/rollup.config.js b/rollup.config.js index 6ad23e5..218e737 100644 --- a/rollup.config.js +++ b/rollup.config.js @@ -1,20 +1,24 @@ import typescript from 'rollup-plugin-typescript2'; export default { - entry: './src/nuxt-property-decorator.ts', + input: './src/nuxt-property-decorator.ts', plugins: [ typescript({ tsconfig: './tsconfig.json' }) ], - format: 'umd', - moduleName: 'NuxtPropertyDecorator', - dest: 'lib/nuxt-property-decorator.umd.js', - external: [ - 'vue', 'vue-class-component', 'reflect-metadata' - ], - globals: { - 'vue': 'Vue', - 'vue-class-component': 'VueClassComponent' - } + output:{ + format: 'umd', + name: 'NuxtPropertyDecorator', + file: 'lib/nuxt-property-decorator.umd.js', + globals: { + 'vue': 'Vue', + 'vuex-class': 'VuexClass', + 'vue-class-component': 'VueClassComponent', + 'vue-property-decorator': 'VuePropertyDecorator' + } + }, + external: [ + 'vue', 'vuex-class', 'vue-property-decorator', 'vue-class-component', 'reflect-metadata' + ] } diff --git a/tests/decorator.spec.ts b/tests/decorator.spec.ts index 23830c4..e5e12b5 100644 --- a/tests/decorator.spec.ts +++ b/tests/decorator.spec.ts @@ -1,11 +1,12 @@ -import { mount, shallow } from '@vue/test-utils'; +import { mount, shallowMount } from '@vue/test-utils'; import { Component, Emit, Inject, Model, Prop, Provide, Watch } from '../src/nuxt-property-decorator'; import EmitFixture from '../fixtures/emit' import { Parent, Child, GrandChild } from '../fixtures/inject'; import ModelFixture from '../fixtures/model'; describe('@Emit decorator tests', () => { - const wrapper = shallow(new EmitFixture()); + const wrapper = shallowMount(new EmitFixture()); + test('emitted increment correctly', () => { wrapper.vm.$emit('increment', 123); expect(wrapper.emitted().increment).toBeTruthy(); @@ -22,6 +23,7 @@ describe('@Emit decorator tests', () => { wrapper.vm.$emit('canceled'); expect(wrapper.emitted().canceled).toBeTruthy(); }) + }); describe('@Inject decorator test', () => { diff --git a/tsconfig.json b/tsconfig.json index 876c37d..5a8401a 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,13 +1,13 @@ { "compilerOptions": { "outDir": "./lib", + "esModuleInterop": true, "target": "es5", "module": "es2015", "moduleResolution": "node", "isolatedModules": false, "experimentalDecorators": true, - "emitDecoratorMetadata": true, - "declaration": true, + "emitDecoratorMetadata": false, "noImplicitAny": true, "removeComments": false, "strictNullChecks": true,