UNPKG

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