Skip to content

fix: support constructor function #143

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Jan 6, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 12 additions & 18 deletions e2e/__projects__/babel-config/__snapshots__/test.js.snap
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP

exports[`generates source maps for .vue files 1`] = `
"var exports = {}
\\"use strict\\";
"\\"use strict\\";

Object.defineProperty(exports, \\"__esModule\\", {
value: true
Expand Down Expand Up @@ -54,12 +53,10 @@ var _default = {
}
};
exports.default = _default;

if(!exports.default) {
exports.default = {}
}
var __options__ = module.exports = exports.default
Object.keys(exports).forEach(k => module.exports[k] = exports[k])
;
var __options__ = typeof exports.default === 'function'
? exports.default.options
: exports.default
var render = function() {
var _vm = this
var _h = _vm.$createElement
Expand Down Expand Up @@ -89,12 +86,11 @@ this['$style'], {\\"testB\\":\\"testB\\"});
__options__.beforeCreate = beforeCreate ? [].concat(beforeCreate, styleFn) : [styleFn]
})()

//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkJhc2ljLnZ1ZSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUtBO0FBUEE7QUFTQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBakJBIiwic291cmNlc0NvbnRlbnQiOlsiPHRlbXBsYXRlPlxuICA8ZGl2IGNsYXNzPVwiaGVsbG9cIj5cbiAgICA8aDEgOmNsYXNzPVwiaGVhZGluZ0NsYXNzZXNcIj57eyBtc2cgfX08L2gxPlxuICA8L2Rpdj5cbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBtb2R1bGU9XCJjc3NcIj5cbi50ZXN0QSB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJlZDtcbn1cbjwvc3R5bGU+XG48c3R5bGUgbW9kdWxlPlxuLnRlc3RCIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogYmx1ZTtcbn1cbjwvc3R5bGU+XG48c3R5bGU+XG4udGVzdEMge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiBibHVlO1xufVxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgbmFtZTogJ2Jhc2ljJyxcbiAgY29tcHV0ZWQ6IHtcbiAgICBoZWFkaW5nQ2xhc3NlczogZnVuY3Rpb24gaGVhZGluZ0NsYXNzZXMoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICByZWQ6IHRoaXMuaXNDcmF6eSxcbiAgICAgICAgYmx1ZTogIXRoaXMuaXNDcmF6eSxcbiAgICAgICAgc2hhZG93OiB0aGlzLmlzQ3JhenlcbiAgICAgIH1cbiAgICB9XG4gIH0sXG4gIGRhdGE6IGZ1bmN0aW9uIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1zZzogJ1dlbGNvbWUgdG8gWW91ciBWdWUuanMgQXBwJyxcbiAgICAgIGlzQ3Jhenk6IGZhbHNlXG4gICAgfVxuICB9LFxuICBtZXRob2RzOiB7XG4gICAgdG9nZ2xlQ2xhc3M6IGZ1bmN0aW9uIHRvZ2dsZUNsYXNzKCkge1xuICAgICAgdGhpcy5pc0NyYXp5ID0gIXRoaXMuaXNDcmF6eVxuICAgIH1cbiAgfVxufVxuPC9zY3JpcHQ+XG4iXX0="
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkJhc2ljLnZ1ZSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBS0E7QUFQQTtBQVNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFqQkEiLCJzb3VyY2VzQ29udGVudCI6WyI8dGVtcGxhdGU+XG4gIDxkaXYgY2xhc3M9XCJoZWxsb1wiPlxuICAgIDxoMSA6Y2xhc3M9XCJoZWFkaW5nQ2xhc3Nlc1wiPnt7IG1zZyB9fTwvaDE+XG4gIDwvZGl2PlxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIG1vZHVsZT1cImNzc1wiPlxuLnRlc3RBIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmVkO1xufVxuPC9zdHlsZT5cbjxzdHlsZSBtb2R1bGU+XG4udGVzdEIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiBibHVlO1xufVxuPC9zdHlsZT5cbjxzdHlsZT5cbi50ZXN0QyB7XG4gIGJhY2tncm91bmQtY29sb3I6IGJsdWU7XG59XG48L3N0eWxlPlxuXG48c2NyaXB0PlxuZXhwb3J0IGRlZmF1bHQge1xuICBuYW1lOiAnYmFzaWMnLFxuICBjb21wdXRlZDoge1xuICAgIGhlYWRpbmdDbGFzc2VzOiBmdW5jdGlvbiBoZWFkaW5nQ2xhc3NlcygpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHJlZDogdGhpcy5pc0NyYXp5LFxuICAgICAgICBibHVlOiAhdGhpcy5pc0NyYXp5LFxuICAgICAgICBzaGFkb3c6IHRoaXMuaXNDcmF6eVxuICAgICAgfVxuICAgIH1cbiAgfSxcbiAgZGF0YTogZnVuY3Rpb24gZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbXNnOiAnV2VsY29tZSB0byBZb3VyIFZ1ZS5qcyBBcHAnLFxuICAgICAgaXNDcmF6eTogZmFsc2VcbiAgICB9XG4gIH0sXG4gIG1ldGhvZHM6IHtcbiAgICB0b2dnbGVDbGFzczogZnVuY3Rpb24gdG9nZ2xlQ2xhc3MoKSB7XG4gICAgICB0aGlzLmlzQ3JhenkgPSAhdGhpcy5pc0NyYXp5XG4gICAgfVxuICB9XG59XG48L3NjcmlwdD5cbiJdfQ=="
`;

exports[`generates source maps using src attributes 1`] = `
"var exports = {}
\\"use strict\\";
"\\"use strict\\";

Object.defineProperty(exports, \\"__esModule\\", {
value: true
Expand Down Expand Up @@ -124,12 +120,10 @@ var _default = {
}
};
exports.default = _default;

if(!exports.default) {
exports.default = {}
}
var __options__ = module.exports = exports.default
Object.keys(exports).forEach(k => module.exports[k] = exports[k])
;
var __options__ = typeof exports.default === 'function'
? exports.default.options
: exports.default
var render = function() {
var _vm = this
var _h = _vm.$createElement
Expand All @@ -144,5 +138,5 @@ render._withStripped = true
__options__.render = render
__options__.staticRenderFns = staticRenderFns

//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkJhc2ljU3JjLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUtBO0FBUEE7QUFTQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBakJBIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQge1xuICBuYW1lOiAnYmFzaWMnLFxuICBjb21wdXRlZDoge1xuICAgIGhlYWRpbmdDbGFzc2VzOiBmdW5jdGlvbiBoZWFkaW5nQ2xhc3NlcygpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHJlZDogdGhpcy5pc0NyYXp5LFxuICAgICAgICBibHVlOiAhdGhpcy5pc0NyYXp5LFxuICAgICAgICBzaGFkb3c6IHRoaXMuaXNDcmF6eVxuICAgICAgfVxuICAgIH1cbiAgfSxcbiAgZGF0YTogZnVuY3Rpb24gZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbXNnOiAnV2VsY29tZSB0byBZb3VyIFZ1ZS5qcyBBcHAnLFxuICAgICAgaXNDcmF6eTogZmFsc2VcbiAgICB9XG4gIH0sXG4gIG1ldGhvZHM6IHtcbiAgICB0b2dnbGVDbGFzczogZnVuY3Rpb24gdG9nZ2xlQ2xhc3MoKSB7XG4gICAgICB0aGlzLmlzQ3JhenkgPSAhdGhpcy5pc0NyYXp5XG4gICAgfVxuICB9XG59XG4iXX0="
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkJhc2ljU3JjLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBS0E7QUFQQTtBQVNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFqQkEiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCB7XG4gIG5hbWU6ICdiYXNpYycsXG4gIGNvbXB1dGVkOiB7XG4gICAgaGVhZGluZ0NsYXNzZXM6IGZ1bmN0aW9uIGhlYWRpbmdDbGFzc2VzKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcmVkOiB0aGlzLmlzQ3JhenksXG4gICAgICAgIGJsdWU6ICF0aGlzLmlzQ3JhenksXG4gICAgICAgIHNoYWRvdzogdGhpcy5pc0NyYXp5XG4gICAgICB9XG4gICAgfVxuICB9LFxuICBkYXRhOiBmdW5jdGlvbiBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBtc2c6ICdXZWxjb21lIHRvIFlvdXIgVnVlLmpzIEFwcCcsXG4gICAgICBpc0NyYXp5OiBmYWxzZVxuICAgIH1cbiAgfSxcbiAgbWV0aG9kczoge1xuICAgIHRvZ2dsZUNsYXNzOiBmdW5jdGlvbiB0b2dnbGVDbGFzcygpIHtcbiAgICAgIHRoaXMuaXNDcmF6eSA9ICF0aGlzLmlzQ3JhenlcbiAgICB9XG4gIH1cbn1cbiJdfQ=="
`;
2 changes: 1 addition & 1 deletion e2e/__projects__/babel-config/components/CoffeeScript.vue
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,6 @@
</template>

<script lang="coffeescript">
module.exports =
export default
data: -> {}
</script>
9 changes: 9 additions & 0 deletions e2e/__projects__/babel-config/components/Constructor.vue
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
<template>
<div />
</template>

<script>
import Vue from 'vue'

export default Vue.extend()
</script>
24 changes: 15 additions & 9 deletions e2e/__projects__/babel-config/test.js
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ import PostCss from './components/PostCss.vue'
import Pug from './components/Pug.vue'
import PugRelative from './components/PugRelativeExtends.vue'
import Jsx from './components/Jsx.vue'
import Constructor from './components/Constructor.vue'

test('processes .vue files', () => {
const wrapper = mount(Basic)
Expand Down Expand Up @@ -60,22 +61,27 @@ test('generates source maps using src attributes', () => {

test('processes .vue file using jsx', () => {
const wrapper = mount(Jsx)
expect(wrapper.vm).toBeTruthy()
expect(wrapper.is('div')).toBeTruthy()
})

test('processes extended functions', () => {
const wrapper = mount(Constructor)
expect(wrapper.is('div')).toBeTruthy()
})

test('processes .vue file with lang set to coffee', () => {
const wrapper = mount(Coffee)
expect(wrapper.vm).toBeTruthy()
expect(wrapper.is('div')).toBeTruthy()
})

test('processes .vue file with lang set to coffeescript', () => {
const wrapper = mount(CoffeeScript)
expect(wrapper.vm).toBeTruthy()
expect(wrapper.is('div')).toBeTruthy()
})

test('processes .vue files with lang set to typescript', () => {
const wrapper = mount(TypeScript)
expect(wrapper.vm).toBeTruthy()
expect(wrapper.is('div')).toBeTruthy()
})

test('processes functional components', () => {
Expand All @@ -102,30 +108,30 @@ test('handles missing script block', () => {

test('processes .vue file with jade template', () => {
const wrapper = mount(Jade)
expect(wrapper.is('div')).toBe(true)
expect(wrapper.is('div')).toBeTruthy()
expect(wrapper.classes()).toContain('jade')
})

it('processes Less', () => {
const wrapper = mount(Less)
expect(wrapper.vm).toBeTruthy()
expect(wrapper.is('div')).toBeTruthy()
})

it('processes PostCSS', () => {
const wrapper = mount(PostCss)
expect(wrapper.vm).toBeTruthy()
expect(wrapper.is('div')).toBeTruthy()
})

test('processes pug templates', () => {
const wrapper = mount(Pug)
expect(wrapper.is('div')).toBe(true)
expect(wrapper.is('div')).toBeTruthy()
expect(wrapper.classes()).toContain('pug-base')
expect(wrapper.find('.pug-extended').exists()).toBeTruthy()
})

test('supports relative paths when extending templates from .pug files', () => {
const wrapper = mount(PugRelative)
expect(wrapper.is('div')).toBe(true)
expect(wrapper.is('div')).toBeTruthy()
expect(wrapper.find('.pug-relative-base').exists()).toBeTruthy()
})

Expand Down
4 changes: 1 addition & 3 deletions lib/generate-source-map.js
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,7 @@ module.exports = function generateSourceMap(

map.setSourceContent(filename, content)
// check input source map from babel/coffee etc

let inputMapConsumer = inputMap && new sourceMap.SourceMapConsumer(inputMap)
const generatedOffset = 1
script.split(splitRE).forEach(function(line, index) {
let ln = index + 1
let originalLine = inputMapConsumer
Expand All @@ -26,7 +24,7 @@ module.exports = function generateSourceMap(
map.addMapping({
source: filename,
generated: {
line: ln + generatedOffset,
line: ln,
column: 0
},
original: {
Expand Down
24 changes: 16 additions & 8 deletions lib/process.js
Original file line number Diff line number Diff line change
Expand Up @@ -65,14 +65,22 @@ module.exports = function(src, filePath, config) {
inputMap
)

let output =
`var exports = {}\n` +
`${compiledScriptContent}\n` +
`if(!exports.default) {\n` +
` exports.default = {}\n` +
`}\n` +
`var __options__ = module.exports = exports.default\n` +
`Object.keys(exports).forEach(k => module.exports[k] = exports[k])\n`
let output = ''

if (compiledScriptContent) {
output += `${compiledScriptContent};\n`
} else {
output +=
`Object.defineProperty(exports, "__esModule", {\n` +
` value: true\n` +
`});\n` +
'module.exports.default = {};\n'
}

output +=
`var __options__ = typeof exports.default === 'function'\n` +
`? exports.default.options\n` +
`: exports.default\n`

if (parts.template) {
parts.template.filename = filePath
Expand Down