Skip to content

Commit a63d5f0

Browse files
authored
fix: support constructor function (#143)
1 parent 128a241 commit a63d5f0

File tree

6 files changed

+54
-39
lines changed

6 files changed

+54
-39
lines changed

e2e/__projects__/babel-config/__snapshots__/test.js.snap

Lines changed: 12 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
11
// Jest Snapshot v1, https://goo.gl/fbAQLP
22

33
exports[`generates source maps for .vue files 1`] = `
4-
"var exports = {}
5-
\\"use strict\\";
4+
"\\"use strict\\";
65
76
Object.defineProperty(exports, \\"__esModule\\", {
87
value: true
@@ -54,12 +53,10 @@ var _default = {
5453
}
5554
};
5655
exports.default = _default;
57-
58-
if(!exports.default) {
59-
exports.default = {}
60-
}
61-
var __options__ = module.exports = exports.default
62-
Object.keys(exports).forEach(k => module.exports[k] = exports[k])
56+
;
57+
var __options__ = typeof exports.default === 'function'
58+
? exports.default.options
59+
: exports.default
6360
var render = function() {
6461
var _vm = this
6562
var _h = _vm.$createElement
@@ -89,12 +86,11 @@ this['$style'], {\\"testB\\":\\"testB\\"});
8986
__options__.beforeCreate = beforeCreate ? [].concat(beforeCreate, styleFn) : [styleFn]
9087
})()
9188
92-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkJhc2ljLnZ1ZSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUtBO0FBUEE7QUFTQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBakJBIiwic291cmNlc0NvbnRlbnQiOlsiPHRlbXBsYXRlPlxuICA8ZGl2IGNsYXNzPVwiaGVsbG9cIj5cbiAgICA8aDEgOmNsYXNzPVwiaGVhZGluZ0NsYXNzZXNcIj57eyBtc2cgfX08L2gxPlxuICA8L2Rpdj5cbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBtb2R1bGU9XCJjc3NcIj5cbi50ZXN0QSB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJlZDtcbn1cbjwvc3R5bGU+XG48c3R5bGUgbW9kdWxlPlxuLnRlc3RCIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogYmx1ZTtcbn1cbjwvc3R5bGU+XG48c3R5bGU+XG4udGVzdEMge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiBibHVlO1xufVxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgbmFtZTogJ2Jhc2ljJyxcbiAgY29tcHV0ZWQ6IHtcbiAgICBoZWFkaW5nQ2xhc3NlczogZnVuY3Rpb24gaGVhZGluZ0NsYXNzZXMoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICByZWQ6IHRoaXMuaXNDcmF6eSxcbiAgICAgICAgYmx1ZTogIXRoaXMuaXNDcmF6eSxcbiAgICAgICAgc2hhZG93OiB0aGlzLmlzQ3JhenlcbiAgICAgIH1cbiAgICB9XG4gIH0sXG4gIGRhdGE6IGZ1bmN0aW9uIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1zZzogJ1dlbGNvbWUgdG8gWW91ciBWdWUuanMgQXBwJyxcbiAgICAgIGlzQ3Jhenk6IGZhbHNlXG4gICAgfVxuICB9LFxuICBtZXRob2RzOiB7XG4gICAgdG9nZ2xlQ2xhc3M6IGZ1bmN0aW9uIHRvZ2dsZUNsYXNzKCkge1xuICAgICAgdGhpcy5pc0NyYXp5ID0gIXRoaXMuaXNDcmF6eVxuICAgIH1cbiAgfVxufVxuPC9zY3JpcHQ+XG4iXX0="
89+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkJhc2ljLnZ1ZSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBS0E7QUFQQTtBQVNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFqQkEiLCJzb3VyY2VzQ29udGVudCI6WyI8dGVtcGxhdGU+XG4gIDxkaXYgY2xhc3M9XCJoZWxsb1wiPlxuICAgIDxoMSA6Y2xhc3M9XCJoZWFkaW5nQ2xhc3Nlc1wiPnt7IG1zZyB9fTwvaDE+XG4gIDwvZGl2PlxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIG1vZHVsZT1cImNzc1wiPlxuLnRlc3RBIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmVkO1xufVxuPC9zdHlsZT5cbjxzdHlsZSBtb2R1bGU+XG4udGVzdEIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiBibHVlO1xufVxuPC9zdHlsZT5cbjxzdHlsZT5cbi50ZXN0QyB7XG4gIGJhY2tncm91bmQtY29sb3I6IGJsdWU7XG59XG48L3N0eWxlPlxuXG48c2NyaXB0PlxuZXhwb3J0IGRlZmF1bHQge1xuICBuYW1lOiAnYmFzaWMnLFxuICBjb21wdXRlZDoge1xuICAgIGhlYWRpbmdDbGFzc2VzOiBmdW5jdGlvbiBoZWFkaW5nQ2xhc3NlcygpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHJlZDogdGhpcy5pc0NyYXp5LFxuICAgICAgICBibHVlOiAhdGhpcy5pc0NyYXp5LFxuICAgICAgICBzaGFkb3c6IHRoaXMuaXNDcmF6eVxuICAgICAgfVxuICAgIH1cbiAgfSxcbiAgZGF0YTogZnVuY3Rpb24gZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbXNnOiAnV2VsY29tZSB0byBZb3VyIFZ1ZS5qcyBBcHAnLFxuICAgICAgaXNDcmF6eTogZmFsc2VcbiAgICB9XG4gIH0sXG4gIG1ldGhvZHM6IHtcbiAgICB0b2dnbGVDbGFzczogZnVuY3Rpb24gdG9nZ2xlQ2xhc3MoKSB7XG4gICAgICB0aGlzLmlzQ3JhenkgPSAhdGhpcy5pc0NyYXp5XG4gICAgfVxuICB9XG59XG48L3NjcmlwdD5cbiJdfQ=="
9390
`;
9491

9592
exports[`generates source maps using src attributes 1`] = `
96-
"var exports = {}
97-
\\"use strict\\";
93+
"\\"use strict\\";
9894
9995
Object.defineProperty(exports, \\"__esModule\\", {
10096
value: true
@@ -124,12 +120,10 @@ var _default = {
124120
}
125121
};
126122
exports.default = _default;
127-
128-
if(!exports.default) {
129-
exports.default = {}
130-
}
131-
var __options__ = module.exports = exports.default
132-
Object.keys(exports).forEach(k => module.exports[k] = exports[k])
123+
;
124+
var __options__ = typeof exports.default === 'function'
125+
? exports.default.options
126+
: exports.default
133127
var render = function() {
134128
var _vm = this
135129
var _h = _vm.$createElement
@@ -144,5 +138,5 @@ render._withStripped = true
144138
__options__.render = render
145139
__options__.staticRenderFns = staticRenderFns
146140
147-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkJhc2ljU3JjLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUtBO0FBUEE7QUFTQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBakJBIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQge1xuICBuYW1lOiAnYmFzaWMnLFxuICBjb21wdXRlZDoge1xuICAgIGhlYWRpbmdDbGFzc2VzOiBmdW5jdGlvbiBoZWFkaW5nQ2xhc3NlcygpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHJlZDogdGhpcy5pc0NyYXp5LFxuICAgICAgICBibHVlOiAhdGhpcy5pc0NyYXp5LFxuICAgICAgICBzaGFkb3c6IHRoaXMuaXNDcmF6eVxuICAgICAgfVxuICAgIH1cbiAgfSxcbiAgZGF0YTogZnVuY3Rpb24gZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbXNnOiAnV2VsY29tZSB0byBZb3VyIFZ1ZS5qcyBBcHAnLFxuICAgICAgaXNDcmF6eTogZmFsc2VcbiAgICB9XG4gIH0sXG4gIG1ldGhvZHM6IHtcbiAgICB0b2dnbGVDbGFzczogZnVuY3Rpb24gdG9nZ2xlQ2xhc3MoKSB7XG4gICAgICB0aGlzLmlzQ3JhenkgPSAhdGhpcy5pc0NyYXp5XG4gICAgfVxuICB9XG59XG4iXX0="
141+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkJhc2ljU3JjLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBS0E7QUFQQTtBQVNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFqQkEiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCB7XG4gIG5hbWU6ICdiYXNpYycsXG4gIGNvbXB1dGVkOiB7XG4gICAgaGVhZGluZ0NsYXNzZXM6IGZ1bmN0aW9uIGhlYWRpbmdDbGFzc2VzKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcmVkOiB0aGlzLmlzQ3JhenksXG4gICAgICAgIGJsdWU6ICF0aGlzLmlzQ3JhenksXG4gICAgICAgIHNoYWRvdzogdGhpcy5pc0NyYXp5XG4gICAgICB9XG4gICAgfVxuICB9LFxuICBkYXRhOiBmdW5jdGlvbiBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBtc2c6ICdXZWxjb21lIHRvIFlvdXIgVnVlLmpzIEFwcCcsXG4gICAgICBpc0NyYXp5OiBmYWxzZVxuICAgIH1cbiAgfSxcbiAgbWV0aG9kczoge1xuICAgIHRvZ2dsZUNsYXNzOiBmdW5jdGlvbiB0b2dnbGVDbGFzcygpIHtcbiAgICAgIHRoaXMuaXNDcmF6eSA9ICF0aGlzLmlzQ3JhenlcbiAgICB9XG4gIH1cbn1cbiJdfQ=="
148142
`;

e2e/__projects__/babel-config/components/CoffeeScript.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,6 @@
33
</template>
44

55
<script lang="coffeescript">
6-
module.exports =
6+
export default
77
data: -> {}
88
</script>
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
<template>
2+
<div />
3+
</template>
4+
5+
<script>
6+
import Vue from 'vue'
7+
8+
export default Vue.extend()
9+
</script>

e2e/__projects__/babel-config/test.js

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import PostCss from './components/PostCss.vue'
2121
import Pug from './components/Pug.vue'
2222
import PugRelative from './components/PugRelativeExtends.vue'
2323
import Jsx from './components/Jsx.vue'
24+
import Constructor from './components/Constructor.vue'
2425

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

6162
test('processes .vue file using jsx', () => {
6263
const wrapper = mount(Jsx)
63-
expect(wrapper.vm).toBeTruthy()
64+
expect(wrapper.is('div')).toBeTruthy()
65+
})
66+
67+
test('processes extended functions', () => {
68+
const wrapper = mount(Constructor)
69+
expect(wrapper.is('div')).toBeTruthy()
6470
})
6571

6672
test('processes .vue file with lang set to coffee', () => {
6773
const wrapper = mount(Coffee)
68-
expect(wrapper.vm).toBeTruthy()
74+
expect(wrapper.is('div')).toBeTruthy()
6975
})
7076

7177
test('processes .vue file with lang set to coffeescript', () => {
7278
const wrapper = mount(CoffeeScript)
73-
expect(wrapper.vm).toBeTruthy()
79+
expect(wrapper.is('div')).toBeTruthy()
7480
})
7581

7682
test('processes .vue files with lang set to typescript', () => {
7783
const wrapper = mount(TypeScript)
78-
expect(wrapper.vm).toBeTruthy()
84+
expect(wrapper.is('div')).toBeTruthy()
7985
})
8086

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

103109
test('processes .vue file with jade template', () => {
104110
const wrapper = mount(Jade)
105-
expect(wrapper.is('div')).toBe(true)
111+
expect(wrapper.is('div')).toBeTruthy()
106112
expect(wrapper.classes()).toContain('jade')
107113
})
108114

109115
it('processes Less', () => {
110116
const wrapper = mount(Less)
111-
expect(wrapper.vm).toBeTruthy()
117+
expect(wrapper.is('div')).toBeTruthy()
112118
})
113119

114120
it('processes PostCSS', () => {
115121
const wrapper = mount(PostCss)
116-
expect(wrapper.vm).toBeTruthy()
122+
expect(wrapper.is('div')).toBeTruthy()
117123
})
118124

119125
test('processes pug templates', () => {
120126
const wrapper = mount(Pug)
121-
expect(wrapper.is('div')).toBe(true)
127+
expect(wrapper.is('div')).toBeTruthy()
122128
expect(wrapper.classes()).toContain('pug-base')
123129
expect(wrapper.find('.pug-extended').exists()).toBeTruthy()
124130
})
125131

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

lib/generate-source-map.js

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,7 @@ module.exports = function generateSourceMap(
1414

1515
map.setSourceContent(filename, content)
1616
// check input source map from babel/coffee etc
17-
1817
let inputMapConsumer = inputMap && new sourceMap.SourceMapConsumer(inputMap)
19-
const generatedOffset = 1
2018
script.split(splitRE).forEach(function(line, index) {
2119
let ln = index + 1
2220
let originalLine = inputMapConsumer
@@ -26,7 +24,7 @@ module.exports = function generateSourceMap(
2624
map.addMapping({
2725
source: filename,
2826
generated: {
29-
line: ln + generatedOffset,
27+
line: ln,
3028
column: 0
3129
},
3230
original: {

lib/process.js

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -65,14 +65,22 @@ module.exports = function(src, filePath, config) {
6565
inputMap
6666
)
6767

68-
let output =
69-
`var exports = {}\n` +
70-
`${compiledScriptContent}\n` +
71-
`if(!exports.default) {\n` +
72-
` exports.default = {}\n` +
73-
`}\n` +
74-
`var __options__ = module.exports = exports.default\n` +
75-
`Object.keys(exports).forEach(k => module.exports[k] = exports[k])\n`
68+
let output = ''
69+
70+
if (compiledScriptContent) {
71+
output += `${compiledScriptContent};\n`
72+
} else {
73+
output +=
74+
`Object.defineProperty(exports, "__esModule", {\n` +
75+
` value: true\n` +
76+
`});\n` +
77+
'module.exports.default = {};\n'
78+
}
79+
80+
output +=
81+
`var __options__ = typeof exports.default === 'function'\n` +
82+
`? exports.default.options\n` +
83+
`: exports.default\n`
7684

7785
if (parts.template) {
7886
parts.template.filename = filePath

0 commit comments

Comments
 (0)