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
decode(gen.base64Encode())
68
, '{"version":3,"sources":["foo.js"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA","file":"","sourceRoot":""}'
69
, 'encodes generated mappings'
70
)
71
t.equal(
72
gen.inlineMappingUrl()
73
, '//# sourceMappingURL=data:application/json;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
decode(gen.base64Encode())
138
, '{"version":3,"sources":["foo.js","bar.js"],"names":[],"mappings":"ACAA,ADAA;ACCA,ADAA;ACCA,ADAA;AACA;AACA","file":"","sourceRoot":""}'
139
, 'encodes generated mappings'
140
)
141
t.equal(
142
gen.inlineMappingUrl()
143
, '//# sourceMappingURL=data:application/json;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
t.equal(
222
decode(gen.base64Encode())
223
, '{"version":3,"sources":["foo.js","bar.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AACA;AACA;AACA,sBCHA;ADIA,sBCHA;sBACA","file":"","sourceRoot":""}'
224
, 'encodes generated mappings with offset'
225
)
226
t.end()
227
})
228
})
229
230
test('given mappings, with one having no original', function (t) {
231
t.test('no offset', function (t) {
232
var gen = generator()
233
.addMappings('foo.js', [{ original: { line: 2, column: 3 } , generated: { line: 5, column: 10 } }])
234
235
// This addresses an edgecase in which a transpiler generates mappings but doesn't include the original position.
236
// If we set source to sourceFile (as usual) in that case, the mappings are considered invalid by the source-map module's
237
// SourceMapGenerator. Keeping source undefined fixes this problem.
238
// Raised issue: https://github.com/thlorenz/inline-source-map/issues/2
239
// Validate function: https://github.com/mozilla/source-map/blob/a3372ea78e662582087dd25ebda999c06424e047/lib/source-map/source-map-generator.js#L232
240
.addMappings('bar.js', [
241
{ original: { line: 6, column: 0 } , generated: { line: 7, column: 20 } }
242
, { generated: { line: 8, column: 30 } }
243
])
244
245
t.deepEqual(
246
gen._mappings()
247
, [ { generatedLine: 5,
248
generatedColumn: 10,
249
originalLine: 2,
250
originalColumn: 3,
251
source: 'foo.js',
252
name: null },
253
{ generatedLine: 7,
254
generatedColumn: 20,
255
originalLine: 6,
256
originalColumn: 0,
257
source: 'bar.js',
258
name: null },
259
{ generatedLine: 8,
260
generatedColumn: 30,
261
originalLine: false,
262
originalColumn: false,
263
source: undefined,
264
name: null } ]
265
, 'adds correct mappings'
266
)
267
t.deepEqual(
268
decode(gen.base64Encode())
269
, '{"version":3,"sources":["foo.js","bar.js"],"names":[],"mappings":";;;;UACG;;oBCIH;8B","file":"","sourceRoot":""}'
270
, 'encodes generated mappings'
271
)
272
t.equal(
273
gen.inlineMappingUrl()
274
, '//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImZvby5qcyIsImJhci5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O1VBQ0c7O29CQ0lIOzhCIiwiZmlsZSI6IiIsInNvdXJjZVJvb3QiOiIifQ=='
275
, 'returns correct inline mapping url'
276
)
277
t.end()
278
})
279
280
t.test('with offset', function (t) {
281
var gen = generator()
282
.addMappings('foo.js', [{ original: { line: 2, column: 3 } , generated: { line: 5, column: 10 } }], { line: 5 })
283
.addMappings('bar.js', [{ original: { line: 6, column: 0 } , generated: { line: 7, column: 20 } }, { generated: { line: 8, column: 30 } }], { line: 9, column: 3 })
284
285
t.deepEqual(
286
gen._mappings()
287
, [ { generatedLine: 10,
288
generatedColumn: 10,
289
originalLine: 2,
290
originalColumn: 3,
291
source: 'foo.js',
292
name: null },
293
{ generatedLine: 16,
294
generatedColumn: 23,
295
originalLine: 6,
296
originalColumn: 0,
297
source: 'bar.js',
298
name: null },
299
{ generatedLine: 17,
300
generatedColumn: 33,
301
originalLine: false,
302
originalColumn: false,
303
source: undefined,
304
name: null } ]
305
, 'adds correct mappings'
306
)
307
t.equal(
308
decode(gen.base64Encode())
309
, '{\"version\":3,\"sources\":[\"foo.js\",\"bar.js\"],\"names\":[],\"mappings\":\";;;;;;;;;UACG;;;;;;uBCIH;iC\",\"file\":\"\",\"sourceRoot\":\"\"}'
310
, 'encodes mappings with offset'
311
)
312
t.end()
313
})
314
});
315
316