Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
Download
80556 views
1
'use strict';
2
/*jshint asi: true*/
3
4
var test = require('tap').test
5
var generator = require('..');
6
7
var foo = '' + function foo () {
8
var hello = 'hello';
9
var world = 'world';
10
console.log('%s %s', hello, world);
11
}
12
13
var bar = '' + function bar () {
14
console.log('yes?');
15
}
16
17
function decode(base64) {
18
return new Buffer(base64, 'base64').toString();
19
}
20
21
function inspect(obj, depth) {
22
console.error(require('util').inspect(obj, false, depth || 5, true));
23
}
24
25
test('generated mappings', function (t) {
26
27
t.test('one file no offset', function (t) {
28
var gen = generator()
29
.addGeneratedMappings('foo.js', foo)
30
31
t.deepEqual(
32
gen._mappings()
33
, [ { generatedLine: 1,
34
generatedColumn: 0,
35
originalLine: 1,
36
originalColumn: 0,
37
source: 'foo.js',
38
name: null },
39
{ generatedLine: 2,
40
generatedColumn: 0,
41
originalLine: 2,
42
originalColumn: 0,
43
source: 'foo.js',
44
name: null },
45
{ generatedLine: 3,
46
generatedColumn: 0,
47
originalLine: 3,
48
originalColumn: 0,
49
source: 'foo.js',
50
name: null },
51
{ generatedLine: 4,
52
generatedColumn: 0,
53
originalLine: 4,
54
originalColumn: 0,
55
source: 'foo.js',
56
name: null },
57
{ generatedLine: 5,
58
generatedColumn: 0,
59
originalLine: 5,
60
originalColumn: 0,
61
source: 'foo.js',
62
name: null } ]
63
, 'generates correct mappings'
64
)
65
66
t.deepEqual(
67
JSON.parse(decode(gen.base64Encode()))
68
, {"version":3,"file":"","sources":["foo.js"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA","sourceRoot":""}
69
, 'encodes generated mappings'
70
)
71
t.equal(
72
gen.inlineMappingUrl()
73
, '//# sourceMappingURL=data:application/json;charset:utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImZvby5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6IiIsInNvdXJjZVJvb3QiOiIifQ=='
74
, 'returns correct inline mapping url'
75
)
76
t.end()
77
})
78
79
t.test('two files no offset', function (t) {
80
var gen = generator()
81
.addGeneratedMappings('foo.js', foo)
82
.addGeneratedMappings('bar.js', bar)
83
84
t.deepEqual(
85
gen._mappings()
86
, [ { generatedLine: 1,
87
generatedColumn: 0,
88
originalLine: 1,
89
originalColumn: 0,
90
source: 'foo.js',
91
name: null },
92
{ generatedLine: 2,
93
generatedColumn: 0,
94
originalLine: 2,
95
originalColumn: 0,
96
source: 'foo.js',
97
name: null },
98
{ generatedLine: 3,
99
generatedColumn: 0,
100
originalLine: 3,
101
originalColumn: 0,
102
source: 'foo.js',
103
name: null },
104
{ generatedLine: 4,
105
generatedColumn: 0,
106
originalLine: 4,
107
originalColumn: 0,
108
source: 'foo.js',
109
name: null },
110
{ generatedLine: 5,
111
generatedColumn: 0,
112
originalLine: 5,
113
originalColumn: 0,
114
source: 'foo.js',
115
name: null },
116
{ generatedLine: 1,
117
generatedColumn: 0,
118
originalLine: 1,
119
originalColumn: 0,
120
source: 'bar.js',
121
name: null },
122
{ generatedLine: 2,
123
generatedColumn: 0,
124
originalLine: 2,
125
originalColumn: 0,
126
source: 'bar.js',
127
name: null },
128
{ generatedLine: 3,
129
generatedColumn: 0,
130
originalLine: 3,
131
originalColumn: 0,
132
source: 'bar.js',
133
name: null } ]
134
, 'generates correct mappings'
135
)
136
t.deepEqual(
137
JSON.parse(decode(gen.base64Encode()))
138
, {"version":3,"file":"","sources":["foo.js","bar.js"],"names":[],"mappings":"ACAA,ADAA;ACCA,ADAA;ACCA,ADAA;AACA;AACA","sourceRoot": ""}
139
, 'encodes generated mappings'
140
)
141
t.equal(
142
gen.inlineMappingUrl()
143
, '//# sourceMappingURL=data:application/json;charset:utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImZvby5qcyIsImJhci5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUNBQSxBREFBO0FDQ0EsQURBQTtBQ0NBLEFEQUE7QUFDQTtBQUNBIiwiZmlsZSI6IiIsInNvdXJjZVJvb3QiOiIifQ=='
144
, 'returns correct inline mapping url'
145
)
146
t.end()
147
})
148
149
t.test('one line source', function (t) {
150
var gen = generator().addGeneratedMappings('one-liner.js', 'console.log("line one");')
151
t.deepEqual(
152
gen._mappings()
153
, [ { generatedLine: 1,
154
generatedColumn: 0,
155
originalLine: 1,
156
originalColumn: 0,
157
source: 'one-liner.js',
158
name: null } ]
159
, 'generates correct mappings'
160
)
161
t.end()
162
})
163
164
t.test('with offset', function (t) {
165
var gen = generator()
166
.addGeneratedMappings('foo.js', foo, { line: 20 })
167
.addGeneratedMappings('bar.js', bar, { line: 23, column: 22 })
168
169
t.deepEqual(
170
gen._mappings()
171
, [ { generatedLine: 21,
172
generatedColumn: 0,
173
originalLine: 1,
174
originalColumn: 0,
175
source: 'foo.js',
176
name: null },
177
{ generatedLine: 22,
178
generatedColumn: 0,
179
originalLine: 2,
180
originalColumn: 0,
181
source: 'foo.js',
182
name: null },
183
{ generatedLine: 23,
184
generatedColumn: 0,
185
originalLine: 3,
186
originalColumn: 0,
187
source: 'foo.js',
188
name: null },
189
{ generatedLine: 24,
190
generatedColumn: 0,
191
originalLine: 4,
192
originalColumn: 0,
193
source: 'foo.js',
194
name: null },
195
{ generatedLine: 25,
196
generatedColumn: 0,
197
originalLine: 5,
198
originalColumn: 0,
199
source: 'foo.js',
200
name: null },
201
{ generatedLine: 24,
202
generatedColumn: 22,
203
originalLine: 1,
204
originalColumn: 0,
205
source: 'bar.js',
206
name: null },
207
{ generatedLine: 25,
208
generatedColumn: 22,
209
originalLine: 2,
210
originalColumn: 0,
211
source: 'bar.js',
212
name: null },
213
{ generatedLine: 26,
214
generatedColumn: 22,
215
originalLine: 3,
216
originalColumn: 0,
217
source: 'bar.js',
218
name: null } ]
219
, 'generates correct mappings'
220
)
221
222
t.deepEqual(
223
JSON.parse(decode(gen.base64Encode()))
224
, {"version":3,"file":"","sources":["foo.js","bar.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AACA;AACA;AACA,sBCHA;ADIA,sBCHA;sBACA", "sourceRoot": ""}
225
, 'encodes generated mappings with offset'
226
)
227
t.end()
228
})
229
})
230
231
test('given mappings, with one having no original', function (t) {
232
t.test('no offset', function (t) {
233
var gen = generator()
234
.addMappings('foo.js', [{ original: { line: 2, column: 3 } , generated: { line: 5, column: 10 } }])
235
236
// This addresses an edgecase in which a transpiler generates mappings but doesn't include the original position.
237
// If we set source to sourceFile (as usual) in that case, the mappings are considered invalid by the source-map module's
238
// SourceMapGenerator. Keeping source undefined fixes this problem.
239
// Raised issue: https://github.com/thlorenz/inline-source-map/issues/2
240
// Validate function: https://github.com/mozilla/source-map/blob/a3372ea78e662582087dd25ebda999c06424e047/lib/source-map/source-map-generator.js#L232
241
.addMappings('bar.js', [
242
{ original: { line: 6, column: 0 } , generated: { line: 7, column: 20 } }
243
, { generated: { line: 8, column: 30 } }
244
])
245
246
t.deepEqual(
247
gen._mappings()
248
, [ { generatedLine: 5,
249
generatedColumn: 10,
250
originalLine: 2,
251
originalColumn: 3,
252
source: 'foo.js',
253
name: null },
254
{ generatedLine: 7,
255
generatedColumn: 20,
256
originalLine: 6,
257
originalColumn: 0,
258
source: 'bar.js',
259
name: null },
260
{ generatedLine: 8,
261
generatedColumn: 30,
262
originalLine: false,
263
originalColumn: false,
264
source: undefined,
265
name: null } ]
266
, 'adds correct mappings'
267
)
268
t.deepEqual(
269
JSON.parse(decode(gen.base64Encode()))
270
, {"version":3,"file":"","sources":["foo.js","bar.js"],"names":[],"mappings":";;;;UACG;;oBCIH;8B", sourceRoot: ""}
271
, 'encodes generated mappings'
272
)
273
t.equal(
274
gen.inlineMappingUrl()
275
, '//# sourceMappingURL=data:application/json;charset:utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImZvby5qcyIsImJhci5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O1VBQ0c7O29CQ0lIOzhCIiwiZmlsZSI6IiIsInNvdXJjZVJvb3QiOiIifQ=='
276
, 'returns correct inline mapping url'
277
)
278
t.end()
279
})
280
281
t.test('with offset', function (t) {
282
var gen = generator()
283
.addMappings('foo.js', [{ original: { line: 2, column: 3 } , generated: { line: 5, column: 10 } }], { line: 5 })
284
.addMappings('bar.js', [{ original: { line: 6, column: 0 } , generated: { line: 7, column: 20 } }, { generated: { line: 8, column: 30 } }], { line: 9, column: 3 })
285
286
t.deepEqual(
287
gen._mappings()
288
, [ { generatedLine: 10,
289
generatedColumn: 10,
290
originalLine: 2,
291
originalColumn: 3,
292
source: 'foo.js',
293
name: null },
294
{ generatedLine: 16,
295
generatedColumn: 23,
296
originalLine: 6,
297
originalColumn: 0,
298
source: 'bar.js',
299
name: null },
300
{ generatedLine: 17,
301
generatedColumn: 33,
302
originalLine: false,
303
originalColumn: false,
304
source: undefined,
305
name: null } ]
306
, 'adds correct mappings'
307
)
308
t.deepEqual(
309
JSON.parse(decode(gen.base64Encode()))
310
, {"version":3,"file":"","sources":["foo.js","bar.js"],"names":[],"mappings":";;;;;;;;;UACG;;;;;;uBCIH;iC", sourceRoot: ""}
311
, 'encodes mappings with offset'
312
)
313
t.end()
314
})
315
});
316
317
test('inline mapping url with charset opt', function(t){
318
t.test('set inline mapping url charset to gbk', function(t){
319
var gen = generator({charset: 'gbk'})
320
.addGeneratedMappings('foo.js', foo);
321
t.equal(
322
gen.inlineMappingUrl(),
323
'//# sourceMappingURL=data:application/json;charset:gbk;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImZvby5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6IiIsInNvdXJjZVJvb3QiOiIifQ==',
324
'charset set to gbk'
325
);
326
327
t.end();
328
});
329
330
t.test('default charset should be utf-8', function(t){
331
var gen = generator()
332
.addGeneratedMappings('foo.js', foo);
333
334
t.equal(
335
gen.inlineMappingUrl(),
336
'//# sourceMappingURL=data:application/json;charset:utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImZvby5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6IiIsInNvdXJjZVJvb3QiOiIifQ==',
337
'charset default to utf-8'
338
);
339
340
t.end();
341
});
342
});
343
344