UNPKG

1.46 kBJavaScriptView Raw
1const Asset = require('../Asset');
2const localRequire = require('../utils/localRequire');
3const path = require('path');
4const fs = require('@parcel/fs');
5const os = require('os');
6
7class KotlinAsset extends Asset {
8 constructor(name, options) {
9 super(name, options);
10 this.type = 'js';
11 }
12
13 async generate() {
14 // require kotlin
15 const kotlinCompiler = await localRequire(
16 '@jetbrains/kotlinc-js-api',
17 this.name
18 );
19
20 let id = Math.random()
21 .toString(36)
22 .slice(3);
23 let dir = path.join(os.tmpdir(), id);
24 let filename = path.join(dir, id + '.js');
25
26 await fs.mkdirp(dir);
27
28 await kotlinCompiler.compile({
29 output: filename,
30 sources: [this.name],
31 moduleKind: 'commonjs',
32 noStdlib: false,
33 metaInfo: true,
34 sourceMaps: this.options.sourceMaps
35 });
36
37 let source = await fs.readFile(filename, 'utf8');
38 let sourceMap;
39 if (this.options.sourceMaps) {
40 sourceMap = await fs.readFile(filename + '.map', 'utf8');
41
42 sourceMap = JSON.parse(sourceMap);
43 sourceMap.sources = [this.relativeName];
44 sourceMap.sourcesContent = [this.contents];
45
46 // remove source map url
47 source = source.substring(0, source.lastIndexOf('//# sourceMappingURL'));
48 }
49
50 // delete temp directory
51 await fs.rimraf(dir);
52
53 return [
54 {
55 type: 'js',
56 value: source,
57 sourceMap
58 }
59 ];
60 }
61}
62
63module.exports = KotlinAsset;