From 92208693519655fa5436b87e9c76b3266dc36f83 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexandre=20Lach=C3=A8ze?= Date: Fri, 16 Jun 2017 23:00:01 +0200 Subject: [PATCH 1/8] paths is not a valid option to pass to says.js --- src/css/sass.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/css/sass.js b/src/css/sass.js index c31e7b1..bf3e3d0 100644 --- a/src/css/sass.js +++ b/src/css/sass.js @@ -58,6 +58,9 @@ export default class SassCompiler extends CompilerBase { sourceMapRoot: filePath, }); + // not a valid option + delete opts.paths; + let result = await new Promise((res,rej) => { sass.compile(sourceCode, opts, (r) => { if (r.status !== 0) { From 46a1625e0d9e259bd0df8b4a23b4dad6c6e5a367 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexandre=20Lach=C3=A8ze?= Date: Fri, 16 Jun 2017 23:02:42 +0200 Subject: [PATCH 2/8] Remove leading "/" when we are importing from entry file --- src/css/sass.js | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/css/sass.js b/src/css/sass.js index bf3e3d0..77e12f1 100644 --- a/src/css/sass.js +++ b/src/css/sass.js @@ -165,7 +165,14 @@ export default class SassCompiler extends CompilerBase { return; } else { // sass.js works in the '/sass/' directory - const cleanedRequestPath = request.resolved.replace(/^\/sass\//, ''); + let cleanedRequestPath = request.resolved.replace(/^\/sass\//, ''); + + // if we are importing from the entry file (stdin) the path is + // resolved with a leading '/'' -> remove it + if (request.previous === 'stdin' && cleanedRequestPath.charAt(0) === '/') { + cleanedRequestPath = cleanedRequestPath.substring(1); + } + for (let includePath of includePaths) { const filePath = path.resolve(includePath, cleanedRequestPath); let variations = sass.getPathVariations(filePath); From 0b40872c8a6d7148ff3c13ad0cbaaee0bfc72dac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexandre=20Lach=C3=A8ze?= Date: Fri, 16 Jun 2017 23:28:28 +0200 Subject: [PATCH 3/8] Publish to npm as @getstation/electron-compilers and version 5.10.0 --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 4483a1f..27789f5 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { - "name": "electron-compilers", - "version": "5.9.0", + "name": "@getstation/electron-compilers", + "version": "5.10.0", "description": "Compiler implementations for electron-compile", "main": "lib/main.js", "scripts": { From d7c48cdf17786d27ad185ef9ed0f51022d710ad0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexandre=20Lach=C3=A8ze?= Date: Sat, 17 Jun 2017 00:08:04 +0200 Subject: [PATCH 4/8] tired of this BS --- lib/compiler-base.js | 168 ++++++++++++++++++++ lib/css/less.js | 174 ++++++++++++++++++++ lib/css/sass.js | 277 ++++++++++++++++++++++++++++++++ lib/css/stylus.js | 175 ++++++++++++++++++++ lib/html/inline-html.js | 344 ++++++++++++++++++++++++++++++++++++++++ lib/html/jade.js | 38 +++++ lib/html/vue.js | 206 ++++++++++++++++++++++++ lib/js/babel.js | 127 +++++++++++++++ lib/js/coffeescript.js | 65 ++++++++ lib/js/graphql.js | 42 +++++ lib/js/typescript.js | 186 ++++++++++++++++++++++ lib/json/cson.js | 40 +++++ lib/main.js | 6 + lib/passthrough.js | 48 ++++++ 14 files changed, 1896 insertions(+) create mode 100644 lib/compiler-base.js create mode 100644 lib/css/less.js create mode 100644 lib/css/sass.js create mode 100644 lib/css/stylus.js create mode 100644 lib/html/inline-html.js create mode 100644 lib/html/jade.js create mode 100644 lib/html/vue.js create mode 100644 lib/js/babel.js create mode 100644 lib/js/coffeescript.js create mode 100644 lib/js/graphql.js create mode 100644 lib/js/typescript.js create mode 100644 lib/json/cson.js create mode 100644 lib/main.js create mode 100644 lib/passthrough.js diff --git a/lib/compiler-base.js b/lib/compiler-base.js new file mode 100644 index 0000000..ac80b88 --- /dev/null +++ b/lib/compiler-base.js @@ -0,0 +1,168 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +function _asyncToGenerator(fn) { return function () { var gen = fn.apply(this, arguments); return new Promise(function (resolve, reject) { function step(key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { return Promise.resolve(value).then(function (value) { step("next", value); }, function (err) { step("throw", err); }); } } return step("next"); }); }; } + +/** + * This class is the base interface for compilers that are used by + * electron-compile. If your compiler library only supports a + * synchronous API, use SimpleCompilerBase instead. + * + * @interface + */ +class CompilerBase { + constructor() { + this.compilerOptions = {}; + } + + /** + * This method describes the MIME types that your compiler supports as input. + * Many precompiled file types don't have a specific MIME type, so if it's not + * recognized by the mime-types package, you need to patch rig-mime-types in + * electron-compile. + * + * @return {string[]} An array of MIME types that this compiler can compile. + * + * @abstract + */ + static getInputMimeTypes() { + throw new Error("Implement me!"); + } + + /** + * Determines whether a file should be compiled + * + * @param {string} fileName The full path of a file to compile. + * @param {object} compilerContext An object that compilers can add extra + information to as part of a job - the caller + won't do anything with this. + * @return {Promise} True if you are able to compile this file. + * + * @abstract + */ + shouldCompileFile(fileName, compilerContext) { + return _asyncToGenerator(function* () { + throw new Error("Implement me!"); + })(); + } + + /** + * Returns the dependent files of this file. This is used for languages such + * as LESS which allow you to import / reference other related files. In future + * versions of electron-compile, we will use this information to invalidate + * all of the parent files if a child file changes. + * + * @param {string} sourceCode The contents of filePath + * @param {string} fileName The full path of a file to compile. + * @param {object} compilerContext An object that compilers can add extra + information to as part of a job - the caller + won't do anything with this. + * @return {Promise} An array of dependent file paths, or an empty + * array if there are no dependent files. + * + * @abstract + */ + determineDependentFiles(sourceCode, fileName, compilerContext) { + return _asyncToGenerator(function* () { + throw new Error("Implement me!"); + })(); + } + + /** + * Compiles the file + * + * @param {string} sourceCode The contents of filePath + * @param {string} fileName The full path of a file to compile. + * @param {object} compilerContext An object that compilers can add extra + information to as part of a job - the caller + won't do anything with this. + * @return {Promise} An object representing the compiled result + * @property {string} code The compiled code + * @property {string} mimeType The MIME type of the compiled result, which + * should exist in the mime-types database. + * + * @abstract + */ + compile(sourceCode, fileName, compilerContext) { + return _asyncToGenerator(function* () { + throw new Error("Implement me!"); + })(); + } + + shouldCompileFileSync(fileName, compilerContext) { + throw new Error("Implement me!"); + } + + determineDependentFilesSync(sourceCode, fileName, compilerContext) { + throw new Error("Implement me!"); + } + + compileSync(sourceCode, fileName, compilerContext) { + throw new Error("Implement me!"); + } + + /** + * Returns a version number representing the version of the underlying + * compiler library. When this number changes, electron-compile knows + * to throw all away its generated code. + * + * @return {string} A version number. Note that this string isn't + * parsed in any way, just compared to the previous + * one for equality. + * + * @abstract + */ + getCompilerVersion() { + throw new Error("Implement me!"); + } +} + +exports.CompilerBase = CompilerBase; /** + * This class implements all of the async methods of CompilerBase by just + * calling the sync version. Use it to save some time when implementing + * simple compilers. + * + * To use it, implement the compile method, the getCompilerVersion method, + * and the getInputMimeTypes static method. + * + * @abstract + */ + +class SimpleCompilerBase extends CompilerBase { + constructor() { + super(); + } + + shouldCompileFile(fileName, compilerContext) { + return _asyncToGenerator(function* () { + return true; + })(); + } + + determineDependentFiles(sourceCode, filePath, compilerContext) { + return _asyncToGenerator(function* () { + return []; + })(); + } + + compile(sourceCode, filePath, compilerContext) { + var _this = this; + + return _asyncToGenerator(function* () { + return _this.compileSync(sourceCode, filePath, compilerContext); + })(); + } + + shouldCompileFileSync(fileName, compilerContext) { + return true; + } + + determineDependentFilesSync(sourceCode, filePath, compilerContext) { + return []; + } +} +exports.SimpleCompilerBase = SimpleCompilerBase; +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9jb21waWxlci1iYXNlLmpzIl0sIm5hbWVzIjpbIkNvbXBpbGVyQmFzZSIsImNvbnN0cnVjdG9yIiwiY29tcGlsZXJPcHRpb25zIiwiZ2V0SW5wdXRNaW1lVHlwZXMiLCJFcnJvciIsInNob3VsZENvbXBpbGVGaWxlIiwiZmlsZU5hbWUiLCJjb21waWxlckNvbnRleHQiLCJkZXRlcm1pbmVEZXBlbmRlbnRGaWxlcyIsInNvdXJjZUNvZGUiLCJjb21waWxlIiwic2hvdWxkQ29tcGlsZUZpbGVTeW5jIiwiZGV0ZXJtaW5lRGVwZW5kZW50RmlsZXNTeW5jIiwiY29tcGlsZVN5bmMiLCJnZXRDb21waWxlclZlcnNpb24iLCJTaW1wbGVDb21waWxlckJhc2UiLCJmaWxlUGF0aCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBQTs7Ozs7OztBQU9PLE1BQU1BLFlBQU4sQ0FBbUI7QUFDeEJDLGdCQUFjO0FBQ1osU0FBS0MsZUFBTCxHQUF1QixFQUF2QjtBQUNEOztBQUVEOzs7Ozs7Ozs7O0FBVUEsU0FBT0MsaUJBQVAsR0FBMkI7QUFDekIsVUFBTSxJQUFJQyxLQUFKLENBQVUsZUFBVixDQUFOO0FBQ0Q7O0FBR0Q7Ozs7Ozs7Ozs7O0FBV01DLG1CQUFOLENBQXdCQyxRQUF4QixFQUFrQ0MsZUFBbEMsRUFBbUQ7QUFBQTtBQUNqRCxZQUFNLElBQUlILEtBQUosQ0FBVSxlQUFWLENBQU47QUFEaUQ7QUFFbEQ7O0FBR0Q7Ozs7Ozs7Ozs7Ozs7Ozs7QUFnQk1JLHlCQUFOLENBQThCQyxVQUE5QixFQUEwQ0gsUUFBMUMsRUFBb0RDLGVBQXBELEVBQXFFO0FBQUE7QUFDbkUsWUFBTSxJQUFJSCxLQUFKLENBQVUsZUFBVixDQUFOO0FBRG1FO0FBRXBFOztBQUdEOzs7Ozs7Ozs7Ozs7Ozs7QUFlTU0sU0FBTixDQUFjRCxVQUFkLEVBQTBCSCxRQUExQixFQUFvQ0MsZUFBcEMsRUFBcUQ7QUFBQTtBQUNuRCxZQUFNLElBQUlILEtBQUosQ0FBVSxlQUFWLENBQU47QUFEbUQ7QUFFcEQ7O0FBRURPLHdCQUFzQkwsUUFBdEIsRUFBZ0NDLGVBQWhDLEVBQWlEO0FBQy9DLFVBQU0sSUFBSUgsS0FBSixDQUFVLGVBQVYsQ0FBTjtBQUNEOztBQUVEUSw4QkFBNEJILFVBQTVCLEVBQXdDSCxRQUF4QyxFQUFrREMsZUFBbEQsRUFBbUU7QUFDakUsVUFBTSxJQUFJSCxLQUFKLENBQVUsZUFBVixDQUFOO0FBQ0Q7O0FBRURTLGNBQVlKLFVBQVosRUFBd0JILFFBQXhCLEVBQWtDQyxlQUFsQyxFQUFtRDtBQUNqRCxVQUFNLElBQUlILEtBQUosQ0FBVSxlQUFWLENBQU47QUFDRDs7QUFFRDs7Ozs7Ozs7Ozs7QUFXQVUsdUJBQXFCO0FBQ25CLFVBQU0sSUFBSVYsS0FBSixDQUFVLGVBQVYsQ0FBTjtBQUNEO0FBckd1Qjs7UUFBYkosWSxHQUFBQSxZLEVBeUdiOzs7Ozs7Ozs7OztBQVVPLE1BQU1lLGtCQUFOLFNBQWlDZixZQUFqQyxDQUE4QztBQUNuREMsZ0JBQWM7QUFDWjtBQUNEOztBQUVLSSxtQkFBTixDQUF3QkMsUUFBeEIsRUFBa0NDLGVBQWxDLEVBQW1EO0FBQUE7QUFDakQsYUFBTyxJQUFQO0FBRGlEO0FBRWxEOztBQUVLQyx5QkFBTixDQUE4QkMsVUFBOUIsRUFBMENPLFFBQTFDLEVBQW9EVCxlQUFwRCxFQUFxRTtBQUFBO0FBQ25FLGFBQU8sRUFBUDtBQURtRTtBQUVwRTs7QUFFS0csU0FBTixDQUFjRCxVQUFkLEVBQTBCTyxRQUExQixFQUFvQ1QsZUFBcEMsRUFBcUQ7QUFBQTs7QUFBQTtBQUNuRCxhQUFPLE1BQUtNLFdBQUwsQ0FBaUJKLFVBQWpCLEVBQTZCTyxRQUE3QixFQUF1Q1QsZUFBdkMsQ0FBUDtBQURtRDtBQUVwRDs7QUFFREksd0JBQXNCTCxRQUF0QixFQUFnQ0MsZUFBaEMsRUFBaUQ7QUFDL0MsV0FBTyxJQUFQO0FBQ0Q7O0FBRURLLDhCQUE0QkgsVUFBNUIsRUFBd0NPLFFBQXhDLEVBQWtEVCxlQUFsRCxFQUFtRTtBQUNqRSxXQUFPLEVBQVA7QUFDRDtBQXZCa0Q7UUFBeENRLGtCLEdBQUFBLGtCIiwiZmlsZSI6ImNvbXBpbGVyLWJhc2UuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFRoaXMgY2xhc3MgaXMgdGhlIGJhc2UgaW50ZXJmYWNlIGZvciBjb21waWxlcnMgdGhhdCBhcmUgdXNlZCBieSBcbiAqIGVsZWN0cm9uLWNvbXBpbGUuIElmIHlvdXIgY29tcGlsZXIgbGlicmFyeSBvbmx5IHN1cHBvcnRzIGEgXG4gKiBzeW5jaHJvbm91cyBBUEksIHVzZSBTaW1wbGVDb21waWxlckJhc2UgaW5zdGVhZC5cbiAqXG4gKiBAaW50ZXJmYWNlXG4gKi8gXG5leHBvcnQgY2xhc3MgQ29tcGlsZXJCYXNlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5jb21waWxlck9wdGlvbnMgPSB7fTtcbiAgfVxuICBcbiAgLyoqICBcbiAgICogVGhpcyBtZXRob2QgZGVzY3JpYmVzIHRoZSBNSU1FIHR5cGVzIHRoYXQgeW91ciBjb21waWxlciBzdXBwb3J0cyBhcyBpbnB1dC4gXG4gICAqIE1hbnkgcHJlY29tcGlsZWQgZmlsZSB0eXBlcyBkb24ndCBoYXZlIGEgc3BlY2lmaWMgTUlNRSB0eXBlLCBzbyBpZiBpdCdzIG5vdFxuICAgKiByZWNvZ25pemVkIGJ5IHRoZSBtaW1lLXR5cGVzIHBhY2thZ2UsIHlvdSBuZWVkIHRvIHBhdGNoIHJpZy1taW1lLXR5cGVzIGluXG4gICAqIGVsZWN0cm9uLWNvbXBpbGUuXG4gICAqXG4gICAqIEByZXR1cm4ge3N0cmluZ1tdfSAgQW4gYXJyYXkgb2YgTUlNRSB0eXBlcyB0aGF0IHRoaXMgY29tcGlsZXIgY2FuIGNvbXBpbGUuXG4gICAqXG4gICAqIEBhYnN0cmFjdFxuICAgKi8gICBcbiAgc3RhdGljIGdldElucHV0TWltZVR5cGVzKCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkltcGxlbWVudCBtZSFcIik7XG4gIH1cblxuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgYSBmaWxlIHNob3VsZCBiZSBjb21waWxlZFxuICAgKiAgICBcbiAgICogQHBhcmFtICB7c3RyaW5nfSBmaWxlTmFtZSAgICAgICAgVGhlIGZ1bGwgcGF0aCBvZiBhIGZpbGUgdG8gY29tcGlsZS5cbiAgICogQHBhcmFtICB7b2JqZWN0fSBjb21waWxlckNvbnRleHQgQW4gb2JqZWN0IHRoYXQgY29tcGlsZXJzIGNhbiBhZGQgZXh0cmFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZm9ybWF0aW9uIHRvIGFzIHBhcnQgb2YgYSBqb2IgLSB0aGUgY2FsbGVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b24ndCBkbyBhbnl0aGluZyB3aXRoIHRoaXMuXG4gICAqIEByZXR1cm4ge1Byb21pc2U8Ym9vbD59ICAgICAgICBUcnVlIGlmIHlvdSBhcmUgYWJsZSB0byBjb21waWxlIHRoaXMgZmlsZS5cbiAgICpcbiAgICogQGFic3RyYWN0XG4gICAqLyAgIFxuICBhc3luYyBzaG91bGRDb21waWxlRmlsZShmaWxlTmFtZSwgY29tcGlsZXJDb250ZXh0KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiSW1wbGVtZW50IG1lIVwiKTtcbiAgfVxuXG4gIFxuICAvKiogIFxuICAgKiBSZXR1cm5zIHRoZSBkZXBlbmRlbnQgZmlsZXMgb2YgdGhpcyBmaWxlLiBUaGlzIGlzIHVzZWQgZm9yIGxhbmd1YWdlcyBzdWNoXG4gICAqIGFzIExFU1Mgd2hpY2ggYWxsb3cgeW91IHRvIGltcG9ydCAvIHJlZmVyZW5jZSBvdGhlciByZWxhdGVkIGZpbGVzLiBJbiBmdXR1cmVcbiAgICogdmVyc2lvbnMgb2YgZWxlY3Ryb24tY29tcGlsZSwgd2Ugd2lsbCB1c2UgdGhpcyBpbmZvcm1hdGlvbiB0byBpbnZhbGlkYXRlXG4gICAqIGFsbCBvZiB0aGUgcGFyZW50IGZpbGVzIGlmIGEgY2hpbGQgZmlsZSBjaGFuZ2VzLlxuICAgKiAgICBcbiAgICogQHBhcmFtICB7c3RyaW5nfSBzb3VyY2VDb2RlICAgIFRoZSBjb250ZW50cyBvZiBmaWxlUGF0aFxuICAgKiBAcGFyYW0gIHtzdHJpbmd9IGZpbGVOYW1lICAgICAgICBUaGUgZnVsbCBwYXRoIG9mIGEgZmlsZSB0byBjb21waWxlLlxuICAgKiBAcGFyYW0gIHtvYmplY3R9IGNvbXBpbGVyQ29udGV4dCBBbiBvYmplY3QgdGhhdCBjb21waWxlcnMgY2FuIGFkZCBleHRyYVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5mb3JtYXRpb24gdG8gYXMgcGFydCBvZiBhIGpvYiAtIHRoZSBjYWxsZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvbid0IGRvIGFueXRoaW5nIHdpdGggdGhpcy5cbiAgICogQHJldHVybiB7UHJvbWlzZTxzdHJpbmdbXT59ICAgIEFuIGFycmF5IG9mIGRlcGVuZGVudCBmaWxlIHBhdGhzLCBvciBhbiBlbXB0eVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXkgaWYgdGhlcmUgYXJlIG5vIGRlcGVuZGVudCBmaWxlcy4gXG4gICAqXG4gICAqIEBhYnN0cmFjdFxuICAgKi8gICBcbiAgYXN5bmMgZGV0ZXJtaW5lRGVwZW5kZW50RmlsZXMoc291cmNlQ29kZSwgZmlsZU5hbWUsIGNvbXBpbGVyQ29udGV4dCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkltcGxlbWVudCBtZSFcIik7XG4gIH1cblxuICBcbiAgLyoqICBcbiAgICogQ29tcGlsZXMgdGhlIGZpbGVcbiAgICogICAgXG4gICAqIEBwYXJhbSAge3N0cmluZ30gc291cmNlQ29kZSAgICBUaGUgY29udGVudHMgb2YgZmlsZVBhdGhcbiAgICogQHBhcmFtICB7c3RyaW5nfSBmaWxlTmFtZSAgICAgIFRoZSBmdWxsIHBhdGggb2YgYSBmaWxlIHRvIGNvbXBpbGUuXG4gICAqIEBwYXJhbSAge29iamVjdH0gY29tcGlsZXJDb250ZXh0IEFuIG9iamVjdCB0aGF0IGNvbXBpbGVycyBjYW4gYWRkIGV4dHJhXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmZvcm1hdGlvbiB0byBhcyBwYXJ0IG9mIGEgam9iIC0gdGhlIGNhbGxlclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd29uJ3QgZG8gYW55dGhpbmcgd2l0aCB0aGlzLlxuICAgKiBAcmV0dXJuIHtQcm9taXNlPG9iamVjdD59ICAgICAgQW4gb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgY29tcGlsZWQgcmVzdWx0XG4gICAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBjb2RlICAgICAgICBUaGUgY29tcGlsZWQgY29kZVxuICAgKiBAcHJvcGVydHkge3N0cmluZ30gbWltZVR5cGUgICAgVGhlIE1JTUUgdHlwZSBvZiB0aGUgY29tcGlsZWQgcmVzdWx0LCB3aGljaCBcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3VsZCBleGlzdCBpbiB0aGUgbWltZS10eXBlcyBkYXRhYmFzZS5cbiAgICpcbiAgICogQGFic3RyYWN0XG4gICAqLyAgIFxuICBhc3luYyBjb21waWxlKHNvdXJjZUNvZGUsIGZpbGVOYW1lLCBjb21waWxlckNvbnRleHQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbXBsZW1lbnQgbWUhXCIpO1xuICB9XG5cbiAgc2hvdWxkQ29tcGlsZUZpbGVTeW5jKGZpbGVOYW1lLCBjb21waWxlckNvbnRleHQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbXBsZW1lbnQgbWUhXCIpO1xuICB9XG5cbiAgZGV0ZXJtaW5lRGVwZW5kZW50RmlsZXNTeW5jKHNvdXJjZUNvZGUsIGZpbGVOYW1lLCBjb21waWxlckNvbnRleHQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbXBsZW1lbnQgbWUhXCIpO1xuICB9XG5cbiAgY29tcGlsZVN5bmMoc291cmNlQ29kZSwgZmlsZU5hbWUsIGNvbXBpbGVyQ29udGV4dCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkltcGxlbWVudCBtZSFcIik7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIHZlcnNpb24gbnVtYmVyIHJlcHJlc2VudGluZyB0aGUgdmVyc2lvbiBvZiB0aGUgdW5kZXJseWluZyBcbiAgICogY29tcGlsZXIgbGlicmFyeS4gV2hlbiB0aGlzIG51bWJlciBjaGFuZ2VzLCBlbGVjdHJvbi1jb21waWxlIGtub3dzXG4gICAqIHRvIHRocm93IGFsbCBhd2F5IGl0cyBnZW5lcmF0ZWQgY29kZS5cbiAgICogICAgXG4gICAqIEByZXR1cm4ge3N0cmluZ30gIEEgdmVyc2lvbiBudW1iZXIuIE5vdGUgdGhhdCB0aGlzIHN0cmluZyBpc24ndCBcbiAgICogICAgICAgICAgICAgICAgICAgcGFyc2VkIGluIGFueSB3YXksIGp1c3QgY29tcGFyZWQgdG8gdGhlIHByZXZpb3VzXG4gICAqICAgICAgICAgICAgICAgICAgIG9uZSBmb3IgZXF1YWxpdHkuXG4gICAqXG4gICAqIEBhYnN0cmFjdFxuICAgKi8gICBcbiAgZ2V0Q29tcGlsZXJWZXJzaW9uKCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkltcGxlbWVudCBtZSFcIik7XG4gIH1cbn1cblxuXG4vKipcbiAqIFRoaXMgY2xhc3MgaW1wbGVtZW50cyBhbGwgb2YgdGhlIGFzeW5jIG1ldGhvZHMgb2YgQ29tcGlsZXJCYXNlIGJ5IGp1c3QgXG4gKiBjYWxsaW5nIHRoZSBzeW5jIHZlcnNpb24uIFVzZSBpdCB0byBzYXZlIHNvbWUgdGltZSB3aGVuIGltcGxlbWVudGluZyBcbiAqIHNpbXBsZSBjb21waWxlcnMuXG4gKlxuICogVG8gdXNlIGl0LCBpbXBsZW1lbnQgdGhlIGNvbXBpbGUgbWV0aG9kLCB0aGUgZ2V0Q29tcGlsZXJWZXJzaW9uIG1ldGhvZCwgXG4gKiBhbmQgdGhlIGdldElucHV0TWltZVR5cGVzIHN0YXRpYyBtZXRob2QuIFxuICogXG4gKiBAYWJzdHJhY3RcbiAqLyBcbmV4cG9ydCBjbGFzcyBTaW1wbGVDb21waWxlckJhc2UgZXh0ZW5kcyBDb21waWxlckJhc2Uge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgYXN5bmMgc2hvdWxkQ29tcGlsZUZpbGUoZmlsZU5hbWUsIGNvbXBpbGVyQ29udGV4dCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgYXN5bmMgZGV0ZXJtaW5lRGVwZW5kZW50RmlsZXMoc291cmNlQ29kZSwgZmlsZVBhdGgsIGNvbXBpbGVyQ29udGV4dCkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIGFzeW5jIGNvbXBpbGUoc291cmNlQ29kZSwgZmlsZVBhdGgsIGNvbXBpbGVyQ29udGV4dCkge1xuICAgIHJldHVybiB0aGlzLmNvbXBpbGVTeW5jKHNvdXJjZUNvZGUsIGZpbGVQYXRoLCBjb21waWxlckNvbnRleHQpO1xuICB9XG5cbiAgc2hvdWxkQ29tcGlsZUZpbGVTeW5jKGZpbGVOYW1lLCBjb21waWxlckNvbnRleHQpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGRldGVybWluZURlcGVuZGVudEZpbGVzU3luYyhzb3VyY2VDb2RlLCBmaWxlUGF0aCwgY29tcGlsZXJDb250ZXh0KSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG59XG4iXX0= \ No newline at end of file diff --git a/lib/css/less.js b/lib/css/less.js new file mode 100644 index 0000000..cf1cf67 --- /dev/null +++ b/lib/css/less.js @@ -0,0 +1,174 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _path = require('path'); + +var _path2 = _interopRequireDefault(_path); + +var _detectiveLess = require('detective-less'); + +var _detectiveLess2 = _interopRequireDefault(_detectiveLess); + +var _compilerBase = require('../compiler-base'); + +var _toutsuite = require('toutsuite'); + +var _toutsuite2 = _interopRequireDefault(_toutsuite); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function _asyncToGenerator(fn) { return function () { var gen = fn.apply(this, arguments); return new Promise(function (resolve, reject) { function step(key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { return Promise.resolve(value).then(function (value) { step("next", value); }, function (err) { step("throw", err); }); } } return step("next"); }); }; } + +const mimeTypes = ['text/less']; +let lessjs = null; + +/** + * @access private + */ +class LessCompiler extends _compilerBase.CompilerBase { + constructor() { + super(); + + this.compilerOptions = { + sourceMap: { sourceMapFileInline: true } + }; + + this.seenFilePaths = {}; + } + + static getInputMimeTypes() { + return mimeTypes; + } + + shouldCompileFile(fileName, compilerContext) { + return _asyncToGenerator(function* () { + return true; + })(); + } + + determineDependentFiles(sourceCode, filePath, compilerContext) { + var _this = this; + + return _asyncToGenerator(function* () { + return _this.determineDependentFilesSync(sourceCode, filePath, compilerContext); + })(); + } + + compile(sourceCode, filePath, compilerContext) { + var _this2 = this; + + return _asyncToGenerator(function* () { + lessjs = lessjs || _this2.getLess(); + + let thisPath = _path2.default.dirname(filePath); + _this2.seenFilePaths[thisPath] = true; + + let paths = Object.keys(_this2.seenFilePaths); + + if (_this2.compilerOptions.paths) { + paths.push(..._this2.compilerOptions.paths); + } + + let opts = Object.assign({}, _this2.compilerOptions, { + paths: paths, + filename: _path2.default.basename(filePath) + }); + + let result = yield lessjs.render(sourceCode, opts); + let source = result.css; + + // NB: If you compile a file that is solely imports, its + // actual content is '' yet it is a valid file. '' is not + // truthy, so we're going to replace it with a string that + // is truthy. + if (!source && typeof source === 'string') { + source = ' '; + } + + return { + code: source, + mimeType: 'text/css' + }; + })(); + } + + shouldCompileFileSync(fileName, compilerContext) { + return true; + } + + determineDependentFilesSync(sourceCode, filePath, compilerContext) { + let dependencyFilenames = (0, _detectiveLess2.default)(sourceCode); + let dependencies = []; + + for (let dependencyName of dependencyFilenames) { + dependencies.push(_path2.default.join(_path2.default.dirname(filePath), dependencyName)); + } + + return dependencies; + } + + compileSync(sourceCode, filePath, compilerContext) { + lessjs = lessjs || this.getLess(); + + let source; + let error = null; + + let thisPath = _path2.default.dirname(filePath); + this.seenFilePaths[thisPath] = true; + + let paths = Object.keys(this.seenFilePaths); + + if (this.compilerOptions.paths) { + paths.push(...this.compilerOptions.paths); + } + + let opts = Object.assign({}, this.compilerOptions, { + paths: paths, + filename: _path2.default.basename(filePath), + fileAsync: false, async: false, syncImport: true + }); + + (0, _toutsuite2.default)(() => { + lessjs.render(sourceCode, opts, (err, out) => { + if (err) { + error = err; + } else { + // NB: Because we've forced less to work in sync mode, we can do this + source = out.css; + } + }); + }); + + if (error) { + throw error; + } + + // NB: If you compile a file that is solely imports, its + // actual content is '' yet it is a valid file. '' is not + // truthy, so we're going to replace it with a string that + // is truthy. + if (!source && typeof source === 'string') { + source = ' '; + } + + return { + code: source, + mimeType: 'text/css' + }; + } + + getLess() { + let ret; + (0, _toutsuite2.default)(() => ret = require('less')); + return ret; + } + + getCompilerVersion() { + return require('less/package.json').version; + } +} +exports.default = LessCompiler; +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jc3MvbGVzcy5qcyJdLCJuYW1lcyI6WyJtaW1lVHlwZXMiLCJsZXNzanMiLCJMZXNzQ29tcGlsZXIiLCJjb25zdHJ1Y3RvciIsImNvbXBpbGVyT3B0aW9ucyIsInNvdXJjZU1hcCIsInNvdXJjZU1hcEZpbGVJbmxpbmUiLCJzZWVuRmlsZVBhdGhzIiwiZ2V0SW5wdXRNaW1lVHlwZXMiLCJzaG91bGRDb21waWxlRmlsZSIsImZpbGVOYW1lIiwiY29tcGlsZXJDb250ZXh0IiwiZGV0ZXJtaW5lRGVwZW5kZW50RmlsZXMiLCJzb3VyY2VDb2RlIiwiZmlsZVBhdGgiLCJkZXRlcm1pbmVEZXBlbmRlbnRGaWxlc1N5bmMiLCJjb21waWxlIiwiZ2V0TGVzcyIsInRoaXNQYXRoIiwiZGlybmFtZSIsInBhdGhzIiwiT2JqZWN0Iiwia2V5cyIsInB1c2giLCJvcHRzIiwiYXNzaWduIiwiZmlsZW5hbWUiLCJiYXNlbmFtZSIsInJlc3VsdCIsInJlbmRlciIsInNvdXJjZSIsImNzcyIsImNvZGUiLCJtaW1lVHlwZSIsInNob3VsZENvbXBpbGVGaWxlU3luYyIsImRlcGVuZGVuY3lGaWxlbmFtZXMiLCJkZXBlbmRlbmNpZXMiLCJkZXBlbmRlbmN5TmFtZSIsImpvaW4iLCJjb21waWxlU3luYyIsImVycm9yIiwiZmlsZUFzeW5jIiwiYXN5bmMiLCJzeW5jSW1wb3J0IiwiZXJyIiwib3V0IiwicmV0IiwicmVxdWlyZSIsImdldENvbXBpbGVyVmVyc2lvbiIsInZlcnNpb24iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBOzs7O0FBQ0E7Ozs7QUFDQTs7QUFDQTs7Ozs7Ozs7QUFFQSxNQUFNQSxZQUFZLENBQUMsV0FBRCxDQUFsQjtBQUNBLElBQUlDLFNBQVMsSUFBYjs7QUFFQTs7O0FBR2UsTUFBTUMsWUFBTixvQ0FBd0M7QUFDckRDLGdCQUFjO0FBQ1o7O0FBRUEsU0FBS0MsZUFBTCxHQUF1QjtBQUNyQkMsaUJBQVcsRUFBRUMscUJBQXFCLElBQXZCO0FBRFUs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QixFQUF3QztBQUNqRGdCLGFBQU9BLEtBRDBDO0FBRWpETSxnQkFBVSxlQUFLQyxRQUFMLENBQWNiLFFBQWQsQ0FGdUM7QUFHakQyQixpQkFBVyxLQUhzQyxFQUcvQkMsT0FBTyxLQUh3QixFQUdqQkMsWUFBWTtBQUhLLEtBQXhDLENBQVg7O0FBTUEsNkJBQVUsTUFBTTtBQUNkMUMsYUFBTzRCLE1BQVAsQ0FBY2hCLFVBQWQsRUFBMEJXLElBQTFCLEVBQWdDLENBQUNvQixHQUFELEVBQU1DLEdBQU4sS0FBYztBQUM1QyxZQUFJRCxHQUFKLEVBQVM7QUFDUEosa0JBQVFJLEdBQVI7QUFDRCxTQUZELE1BRU87QUFDTDtBQUNBZCxtQkFBU2UsSUFBSWQsR0FBYjtBQUNEO0FBQ0YsT0FQRDtBQVFELEtBVEQ7O0FBV0EsUUFBSVMsS0FBSixFQUFXO0FBQ1QsWUFBTUEsS0FBTjtBQUNEOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBSSxDQUFDVixNQUFELElBQVcsT0FBT0EsTUFBUCxLQUFrQixRQUFqQyxFQUEyQztBQUN6Q0EsZUFBUyxHQUFUO0FBQ0Q7O0FBRUQsV0FBTztBQUNMRSxZQUFNRixNQUREO0FBRUxHLGdCQUFVO0FBRkwsS0FBUDtBQUlEOztBQUVEaEIsWUFBVTtBQUNSLFFBQUk2QixHQUFKO0FBQ0EsNkJBQVUsTUFBTUEsTUFBTUMsUUFBUSxNQUFSLENBQXRCO0FBQ0EsV0FBT0QsR0FBUDtBQUNEOztBQUVERSx1QkFBcUI7QUFDbkIsV0FBT0QsUUFBUSxtQkFBUixFQUE2QkUsT0FBcEM7QUFDRDtBQWxJb0Q7a0JBQWxDL0MsWSIsImZpbGUiOiJsZXNzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgZGV0ZWN0aXZlIGZyb20gJ2RldGVjdGl2ZS1sZXNzJztcbmltcG9ydCB7Q29tcGlsZXJCYXNlfSBmcm9tICcuLi9jb21waWxlci1iYXNlJztcbmltcG9ydCB0b3V0U3VpdGUgZnJvbSAndG91dHN1aXRlJztcblxuY29uc3QgbWltZVR5cGVzID0gWyd0ZXh0L2xlc3MnXTtcbmxldCBsZXNzanMgPSBudWxsO1xuXG4vKipcbiAqIEBhY2Nlc3MgcHJpdmF0ZVxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBMZXNzQ29tcGlsZXIgZXh0ZW5kcyBDb21waWxlckJhc2Uge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuXG4gICAgdGhpcy5jb21waWxlck9wdGlvbnMgPSB7XG4gICAgICBzb3VyY2VNYXA6IHsgc291cmNlTWFwRmlsZUlubGluZTogdHJ1ZSB9XG4gICAgfTtcblxuICAgIHRoaXMuc2VlbkZpbGVQYXRocyA9IHt9O1xuICB9XG5cbiAgc3RhdGljIGdldElucHV0TWltZVR5cGVzKCkge1xuICAgIHJldHVybiBtaW1lVHlwZXM7XG4gIH1cblxuICBhc3luYyBzaG91bGRDb21waWxlRmlsZShmaWxlTmFtZSwgY29tcGlsZXJDb250ZXh0KSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBhc3luYyBkZXRlcm1pbmVEZXBlbmRlbnRGaWxlcyhzb3VyY2VDb2RlLCBmaWxlUGF0aCwgY29tcGlsZXJDb250ZXh0KSB7XG4gICAgcmV0dXJuIHRoaXMuZGV0ZXJtaW5lRGVwZW5kZW50RmlsZXNTeW5jKHNvdXJjZUNvZGUsIGZpbGVQYXRoLCBjb21waWxlckNvbnRleHQpO1xuICB9XG5cbiAgYXN5bmMgY29tcGlsZShzb3VyY2VDb2RlLCBmaWxlUGF0aCwgY29tcGlsZXJDb250ZXh0KSB7XG4gICAgbGVzc2pzID0gbGVzc2pzIHx8IHRoaXMuZ2V0TGVzcygpO1xuXG4gICAgbGV0IHRoaXNQYXRoID0gcGF0aC5kaXJuYW1lKGZpbGVQYXRoKTtcbiAgICB0aGlzLnNlZW5GaWxlUGF0aHNbdGhpc1BhdGhdID0gdHJ1ZTtcblxuICAgIGxldCBwYXRocyA9IE9iamVjdC5rZXlzKHRoaXMuc2VlbkZpbGVQYXRocyk7XG5cbiAgICBpZiAodGhpcy5jb21waWxlck9wdGlvbnMucGF0aHMpIHtcbiAgICAgIHBhdGhzLnB1c2goLi4udGhpcy5jb21waWxlck9wdGlvbnMucGF0aHMpO1xuICAgIH1cblxuICAgIGxldCBvcHRzID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5jb21waWxlck9wdGlvbnMsIHtcbiAgICAgIHBhdGhzOiBwYXRocyxcbiAgICAgIGZpbGVuYW1lOiBwYXRoLmJhc2VuYW1lKGZpbGVQYXRoKVxuICAgIH0pO1xuXG4gICAgbGV0IHJlc3VsdCA9IGF3YWl0IGxlc3Nqcy5yZW5kZXIoc291cmNlQ29kZSwgb3B0cyk7XG4gICAgbGV0IHNvdXJjZSA9IHJlc3VsdC5jc3M7XG5cbiAgICAvLyBOQjogSWYgeW91IGNvbXBpbGUgYSBmaWxlIHRoYXQgaXMgc29sZWx5IGltcG9ydHMsIGl0c1xuICAgIC8vIGFjdHVhbCBjb250ZW50IGlzICcnIHlldCBpdCBpcyBhIHZhbGlkIGZpbGUuICcnIGlzIG5vdFxuICAgIC8vIHRydXRoeSwgc28gd2UncmUgZ29pbmcgdG8gcmVwbGFjZSBpdCB3aXRoIGEgc3RyaW5nIHRoYXRcbiAgICAvLyBpcyB0cnV0aHkuXG4gICAgaWYgKCFzb3VyY2UgJiYgdHlwZW9mIHNvdXJjZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHNvdXJjZSA9ICcgJztcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgY29kZTogc291cmNlLFxuICAgICAgbWltZVR5cGU6ICd0ZXh0L2NzcydcbiAgICB9O1xuICB9XG5cbiAgc2hvdWxkQ29tcGlsZUZpbGVTeW5jKGZpbGVOYW1lLCBjb21waWxlckNvbnRleHQpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGRldGVybWluZURlcGVuZGVudEZpbGVzU3luYyhzb3VyY2VDb2RlLCBmaWxlUGF0aCwgY29tcGlsZXJDb250ZXh0KSB7XG4gICAgbGV0IGRlcGVuZGVuY3lGaWxlbmFtZXMgPSBkZXRlY3RpdmUoc291cmNlQ29kZSk7XG4gICAgbGV0IGRlcGVuZGVuY2llcyA9IFtdO1xuXG4gICAgZm9yIChsZXQgZGVwZW5kZW5jeU5hbWUgb2YgZGVwZW5kZW5jeUZpbGVuYW1lcykge1xuICAgICAgZGVwZW5kZW5jaWVzLnB1c2gocGF0aC5qb2luKHBhdGguZGlybmFtZShmaWxlUGF0aCksIGRlcGVuZGVuY3lOYW1lKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRlcGVuZGVuY2llcztcbiAgfVxuXG4gIGNvbXBpbGVTeW5jKHNvdXJjZUNvZGUsIGZpbGVQYXRoLCBjb21waWxlckNvbnRleHQpIHtcbiAgICBsZXNzanMgPSBsZXNzanMgfHwgdGhpcy5nZXRMZXNzKCk7XG5cbiAgICBsZXQgc291cmNlO1xuICAgIGxldCBlcnJvciA9IG51bGw7XG5cbiAgICBsZXQgdGhpc1BhdGggPSBwYXRoLmRpcm5hbWUoZmlsZVBhdGgpO1xuICAgIHRoaXMuc2VlbkZpbGVQYXRoc1t0aGlzUGF0aF0gPSB0cnVlO1xuXG4gICAgbGV0IHBhdGhzID0gT2JqZWN0LmtleXModGhpcy5zZWVuRmlsZVBhdGhzKTtcblxuICAgIGlmICh0aGlzLmNvbXBpbGVyT3B0aW9ucy5wYXRocykge1xuICAgICAgcGF0aHMucHVzaCguLi50aGlzLmNvbXBpbGVyT3B0aW9ucy5wYXRocyk7XG4gICAgfVxuXG4gICAgbGV0IG9wdHMgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLmNvbXBpbGVyT3B0aW9ucywge1xuICAgICAgcGF0aHM6IHBhdGhzLFxuICAgICAgZmlsZW5hbWU6IHBhdGguYmFzZW5hbWUoZmlsZVBhdGgpLFxuICAgICAgZmlsZUFzeW5jOiBmYWxzZSwgYXN5bmM6IGZhbHNlLCBzeW5jSW1wb3J0OiB0cnVlXG4gICAgfSk7XG5cbiAgICB0b3V0U3VpdGUoKCkgPT4ge1xuICAgICAgbGVzc2pzLnJlbmRlcihzb3VyY2VDb2RlLCBvcHRzLCAoZXJyLCBvdXQpID0+IHtcbiAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgIGVycm9yID0gZXJyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIE5COiBCZWNhdXNlIHdlJ3ZlIGZvcmNlZCBsZXNzIHRvIHdvcmsgaW4gc3luYyBtb2RlLCB3ZSBjYW4gZG8gdGhpc1xuICAgICAgICAgIHNvdXJjZSA9IG91dC5jc3M7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgaWYgKGVycm9yKSB7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG5cbiAgICAvLyBOQjogSWYgeW91IGNvbXBpbGUgYSBmaWxlIHRoYXQgaXMgc29sZWx5IGltcG9ydHMsIGl0c1xuICAgIC8vIGFjdHVhbCBjb250ZW50IGlzICcnIHlldCBpdCBpcyBhIHZhbGlkIGZpbGUuICcnIGlzIG5vdFxuICAgIC8vIHRydXRoeSwgc28gd2UncmUgZ29pbmcgdG8gcmVwbGFjZSBpdCB3aXRoIGEgc3RyaW5nIHRoYXRcbiAgICAvLyBpcyB0cnV0aHkuXG4gICAgaWYgKCFzb3VyY2UgJiYgdHlwZW9mIHNvdXJjZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHNvdXJjZSA9ICcgJztcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgY29kZTogc291cmNlLFxuICAgICAgbWltZVR5cGU6ICd0ZXh0L2NzcydcbiAgICB9O1xuICB9XG5cbiAgZ2V0TGVzcygpIHtcbiAgICBsZXQgcmV0O1xuICAgIHRvdXRTdWl0ZSgoKSA9PiByZXQgPSByZXF1aXJlKCdsZXNzJykpO1xuICAgIHJldHVybiByZXQ7XG4gIH1cblxuICBnZXRDb21waWxlclZlcnNpb24oKSB7XG4gICAgcmV0dXJuIHJlcXVpcmUoJ2xlc3MvcGFja2FnZS5qc29uJykudmVyc2lvbjtcbiAgfVxufVxuIl19 \ No newline at end of file diff --git a/lib/css/sass.js b/lib/css/sass.js new file mode 100644 index 0000000..2b4316a --- /dev/null +++ b/lib/css/sass.js @@ -0,0 +1,277 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _path = require('path'); + +var _path2 = _interopRequireDefault(_path); + +var _fs = require('fs'); + +var _fs2 = _interopRequireDefault(_fs); + +var _toutsuite = require('toutsuite'); + +var _toutsuite2 = _interopRequireDefault(_toutsuite); + +var _detectiveSass = require('detective-sass'); + +var _detectiveSass2 = _interopRequireDefault(_detectiveSass); + +var _detectiveScss = require('detective-scss'); + +var _detectiveScss2 = _interopRequireDefault(_detectiveScss); + +var _sassLookup = require('sass-lookup'); + +var _sassLookup2 = _interopRequireDefault(_sassLookup); + +var _compilerBase = require('../compiler-base'); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function _asyncToGenerator(fn) { return function () { var gen = fn.apply(this, arguments); return new Promise(function (resolve, reject) { function step(key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { return Promise.resolve(value).then(function (value) { step("next", value); }, function (err) { step("throw", err); }); } } return step("next"); }); }; } + +const mimeTypes = ['text/sass', 'text/scss']; +let sass = null; + +/** + * @access private + */ +class SassCompiler extends _compilerBase.CompilerBase { + constructor() { + super(); + + this.compilerOptions = { + comments: true, + sourceMapEmbed: true, + sourceMapContents: true + }; + + this.seenFilePaths = {}; + } + + static getInputMimeTypes() { + return mimeTypes; + } + + shouldCompileFile(fileName, compilerContext) { + return _asyncToGenerator(function* () { + return true; + })(); + } + + determineDependentFiles(sourceCode, filePath, compilerContext) { + var _this = this; + + return _asyncToGenerator(function* () { + return _this.determineDependentFilesSync(sourceCode, filePath, compilerContext); + })(); + } + + compile(sourceCode, filePath, compilerContext) { + var _this2 = this; + + return _asyncToGenerator(function* () { + sass = sass || _this2.getSass(); + + let thisPath = _path2.default.dirname(filePath); + _this2.seenFilePaths[thisPath] = true; + + let paths = Object.keys(_this2.seenFilePaths); + + if (_this2.compilerOptions.paths) { + paths.push(..._this2.compilerOptions.paths); + } + + paths.unshift('.'); + + sass.importer(_this2.buildImporterCallback(paths)); + + let opts = Object.assign({}, _this2.compilerOptions, { + indentedSyntax: filePath.match(/\.sass$/i), + sourceMapRoot: filePath + }); + + // not a valid option + delete opts.paths; + + let result = yield new Promise(function (res, rej) { + sass.compile(sourceCode, opts, function (r) { + if (r.status !== 0) { + rej(new Error(r.formatted || r.message)); + return; + } + + res(r); + return; + }); + }); + + let source = result.text; + + // NB: If you compile a file that is solely imports, its + // actual content is '' yet it is a valid file. '' is not + // truthy, so we're going to replace it with a string that + // is truthy. + if (!source) { + source = ' '; + } + + return { + code: source, + mimeType: 'text/css' + }; + })(); + } + + shouldCompileFileSync(fileName, compilerContext) { + return true; + } + + determineDependentFilesSync(sourceCode, filePath, compilerContext) { + let dependencyFilenames = _path2.default.extname(filePath) === '.sass' ? (0, _detectiveSass2.default)(sourceCode) : (0, _detectiveScss2.default)(sourceCode); + let dependencies = []; + + for (let dependencyName of dependencyFilenames) { + dependencies.push((0, _sassLookup2.default)(dependencyName, _path2.default.basename(filePath), _path2.default.dirname(filePath))); + } + + return dependencies; + } + + compileSync(sourceCode, filePath, compilerContext) { + sass = sass || this.getSass(); + + let thisPath = _path2.default.dirname(filePath); + this.seenFilePaths[thisPath] = true; + + let paths = Object.keys(this.seenFilePaths); + + if (this.compilerOptions.paths) { + paths.push(...this.compilerOptions.paths); + } + + paths.unshift('.'); + sass.importer(this.buildImporterCallback(paths)); + + let opts = Object.assign({}, this.compilerOptions, { + indentedSyntax: filePath.match(/\.sass$/i), + sourceMapRoot: filePath + }); + + let result; + (0, _toutsuite2.default)(() => { + sass.compile(sourceCode, opts, r => { + if (r.status !== 0) { + throw new Error(r.formatted); + } + result = r; + }); + }); + + let source = result.text; + + // NB: If you compile a file that is solely imports, its + // actual content is '' yet it is a valid file. '' is not + // truthy, so we're going to replace it with a string that + // is truthy. + if (!source) { + source = ' '; + } + + return { + code: source, + mimeType: 'text/css' + }; + } + + getSass() { + let ret; + (0, _toutsuite2.default)(() => ret = require('sass.js/dist/sass.node').Sass); + return ret; + } + + buildImporterCallback(includePaths) { + const self = this; + return function (request, done) { + let file; + if (request.file) { + done(); + return; + } else { + // sass.js works in the '/sass/' directory + let cleanedRequestPath = request.resolved.replace(/^\/sass\//, ''); + + // if we are importing from the entry file (stdin) the path is + // resolved with a leading '/'' -> remove it + if (request.previous === 'stdin' && cleanedRequestPath.charAt(0) === '/') { + cleanedRequestPath = cleanedRequestPath.substring(1); + } + + for (let includePath of includePaths) { + const filePath = _path2.default.resolve(includePath, cleanedRequestPath); + let variations = sass.getPathVariations(filePath); + + file = variations.map(self.fixWindowsPath.bind(self)).reduce(self.importedFileReducer.bind(self), null); + + if (file) { + const content = _fs2.default.readFileSync(file, { encoding: 'utf8' }); + return sass.writeFile(file, content, () => { + done({ path: file }); + return; + }); + } + } + + if (!file) { + done(); + return; + } + } + }; + } + + importedFileReducer(found, path) { + // Find the first variation that actually exists + if (found) return found; + + try { + const stat = _fs2.default.statSync(path); + if (!stat.isFile()) return null; + return path; + } catch (e) { + return null; + } + } + + fixWindowsPath(file) { + // Unfortunately, there's a bug in sass.js that seems to ignore the different + // path separators across platforms + + // For some reason, some files have a leading slash that we need to get rid of + if (process.platform === 'win32' && file[0] === '/') { + file = file.slice(1); + } + + // Sass.js generates paths such as `_C:\myPath\file.sass` instead of `C:\myPath\_file.sass` + if (file[0] === '_') { + const parts = file.slice(1).split(_path2.default.sep); + const dir = parts.slice(0, -1).join(_path2.default.sep); + const fileName = parts.reverse()[0]; + file = _path2.default.resolve(dir, '_' + fileName); + } + return file; + } + + getCompilerVersion() { + // NB: There is a bizarre bug in the node module system where this doesn't + // work but only in saveConfiguration tests + //return require('@paulcbetts/node-sass/package.json').version; + return "4.1.1"; + } +} +exports.default = SassCompiler; +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jc3Mvc2Fzcy5qcyJdLCJuYW1lcyI6WyJtaW1lVHlwZXMiLCJzYXNzIiwiU2Fzc0NvbXBpbGVyIiwiY29uc3RydWN0b3IiLCJjb21waWxlck9wdGlvbnMiLCJjb21tZW50cyIsInNvdXJjZU1hcEVtYmVkIiwic291cmNlTWFwQ29udGVudHMiLCJzZWVuRmlsZVBhdGhzIiwiZ2V0SW5wdXRNaW1lVHlwZXMiLCJzaG91bGRDb21waWxlRmlsZSIsImZpbGVOYW1lIiwiY29tcGlsZXJDb250ZXh0IiwiZGV0ZXJtaW5lRGVwZW5kZW50RmlsZXMiLCJzb3VyY2VDb2RlIiwiZmlsZVBhdGgiLCJkZXRlcm1pbmVEZXBlbmRlbnRGaWxlc1N5bmMiLCJjb21waWxlIiwiZ2V0U2FzcyIsInRoaXNQYXRoIiwiZGlybmFtZSIsInBhdGhzIiwiT2JqZWN0Iiwia2V5cyIsInB1c2giLCJ1bnNoaWZ0IiwiaW1wb3J0ZXIiLCJidWlsZEltcG9ydGVyQ2FsbGJhY2siLCJvcHRzIiwiYXNzaWduIiwiaW5kZW50ZWRTeW50YXgiLCJtYXRjaCIsInNvdXJjZU1hcFJvb3QiLCJyZXN1bHQiLCJQcm9taXNlIiwicmVzIiwicmVqIiwiciIsInN0YXR1cyIsIkVycm9yIiwiZm9ybWF0dGVkIiwibWVzc2FnZSIsInNvdXJjZSIsInRleHQiLCJjb2RlIiwibWltZVR5cGUiLCJzaG91bGRDb21waWxlRmlsZVN5bmMiLCJkZXBlbmRlbmN5RmlsZW5hbWVzIiwiZXh0bmFtZSIsImRlcGVuZGVuY2llcyIsImRlcGVuZGVuY3lOYW1lIiwiYmFzZW5hbWUiLCJjb21waWxlU3luYyIsInJldCIsInJlcXVpcmUiLCJTYXNzIiwiaW5jbHVkZVBhdGhzIiwic2VsZiIsInJlcXVlc3QiLCJkb25lIiwiZmlsZSIsImNsZWFuZWRSZXF1ZXN0UGF0aCIsInJlc29sdmVkIiwicmVwbGFjZSIsInByZXZpb3VzIiwiY2hhckF0Iiwic3Vic3RyaW5nIiwiaW5jbHVkZVBhdGgiLCJyZXNvbHZlIiwidmFyaWF0aW9ucyIsImdldFBhdGhWYXJpYXRpb25zIiwibWFwIiwiZml4V2luZG93c1BhdGgiLCJiaW5kIiwicmVkdWNlIiwiaW1wb3J0ZWRGaWxlUmVkdWNlciIsImNvbnRlbnQiLCJyZWFkRmlsZVN5bmMiLCJlbmNvZGluZyIsIndyaXRlRmlsZSIsInBhdGgiLCJmb3VuZCIsInN0YXQiLCJzdGF0U3luYyIsImlzRmlsZSIsImUiLCJwcm9jZXNzIiwicGxhdGZvcm0iLCJzbGljZSIsInBhcnRzIiwic3BsaXQiLCJzZXAiLCJkaXIiLCJqb2luIiwicmV2ZXJzZSIsImdldENvbXBpbGVyVmVyc2lvbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUE7Ozs7QUFDQTs7OztBQUNBOzs7O0FBQ0E7Ozs7QUFDQTs7OztBQUNBOzs7O0FBQ0E7Ozs7OztBQUVBLE1BQU1BLFlBQVksQ0FBQyxXQUFELEVBQWMsV0FBZCxDQUFsQjtBQUNBLElBQUlDLE9BQU8sSUFBWDs7QUFFQTs7O0FBR2UsTUFBTUMsWUFBTixvQ0FBd0M7QUFDckRDLGdCQUFjO0FBQ1o7O0FBRUEsU0FBS0MsZUFBTCxHQUF1QjtBQUNyQkMsZ0JBQVUsSUFEVztBQUVyQkMsc0JBQWdCLElBRks7QUFHckJDLHlCQUFtQjtBQUhFLEtBQXZCOztBQU1BLFNBQUtDLGFBQUwsR0FBcUIsRUFBckI7QUFDRDs7QUFFRCxTQUFPQyxpQkFBUCxHQUEyQjtBQUN6QixXQUFPVCxTQUFQO0FBQ0Q7O0FBRUtVLG1CQUFOLENBQXdCQyxRQUF4QixFQUFrQ0MsZUFBbEMsRUFBbUQ7QUFBQTtBQUNqRCxhQUFPLElBQVA7QUFEaUQ7QUFFbEQ7O0FBRUtDLHlCQUFOLENBQThCQyxVQUE5QixFQUEwQ0MsUUFBMUMsRUFBb0RILGVBQXBELEVBQXFFO0FBQUE7O0FBQUE7QUFDbkUsYUFBTyxNQUFLSSwyQkFBTCxDQUFpQ0YsVUFBakMsRUFBNkNDLFFBQTdDLEVBQXVESCxlQUF2RCxDQUFQO0FBRG1FO0FBRXBFOztBQUVLSyxTQUFOLENBQWNILFVBQWQsRUFBMEJDLFFBQTFCLEVB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LE1BQUwsRUFBTCxFQUFvQixPQUFPLElBQVA7QUFDcEIsYUFBT0osSUFBUDtBQUNELEtBSkQsQ0FJRSxPQUFNSyxDQUFOLEVBQVM7QUFDVCxhQUFPLElBQVA7QUFDRDtBQUNGOztBQUVEYixpQkFBZVosSUFBZixFQUFxQjtBQUNuQjtBQUNBOztBQUVBO0FBQ0EsUUFBSTBCLFFBQVFDLFFBQVIsS0FBcUIsT0FBckIsSUFBZ0MzQixLQUFLLENBQUwsTUFBWSxHQUFoRCxFQUFxRDtBQUNuREEsYUFBT0EsS0FBSzRCLEtBQUwsQ0FBVyxDQUFYLENBQVA7QUFDRDs7QUFFRDtBQUNBLFFBQUk1QixLQUFLLENBQUwsTUFBWSxHQUFoQixFQUFxQjtBQUNuQixZQUFNNkIsUUFBUTdCLEtBQUs0QixLQUFMLENBQVcsQ0FBWCxFQUFjRSxLQUFkLENBQW9CLGVBQUtDLEdBQXpCLENBQWQ7QUFDQSxZQUFNQyxNQUFNSCxNQUFNRCxLQUFOLENBQVksQ0FBWixFQUFlLENBQUMsQ0FBaEIsRUFBbUJLLElBQW5CLENBQXdCLGVBQUtGLEdBQTdCLENBQVo7QUFDQSxZQUFNaEYsV0FBVzhFLE1BQU1LLE9BQU4sR0FBZ0IsQ0FBaEIsQ0FBakI7QUFDQWxDLGFBQU8sZUFBS1EsT0FBTCxDQUFhd0IsR0FBYixFQUFrQixNQUFNakYsUUFBeEIsQ0FBUDtBQUNEO0FBQ0QsV0FBT2lELElBQVA7QUFDRDs7QUFFRG1DLHVCQUFxQjtBQUNuQjtBQUNBO0FBQ0E7QUFDQSxXQUFPLE9BQVA7QUFDRDtBQS9Ob0Q7a0JBQWxDN0YsWSIsImZpbGUiOiJzYXNzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgZnMgZnJvbSAnZnMnO1xuaW1wb3J0IHRvdXRTdWl0ZSBmcm9tICd0b3V0c3VpdGUnO1xuaW1wb3J0IGRldGVjdGl2ZVNBU1MgZnJvbSAnZGV0ZWN0aXZlLXNhc3MnO1xuaW1wb3J0IGRldGVjdGl2ZVNDU1MgZnJvbSAnZGV0ZWN0aXZlLXNjc3MnO1xuaW1wb3J0IHNhc3NMb29rdXAgZnJvbSAnc2Fzcy1sb29rdXAnO1xuaW1wb3J0IHtDb21waWxlckJhc2V9IGZyb20gJy4uL2NvbXBpbGVyLWJhc2UnO1xuXG5jb25zdCBtaW1lVHlwZXMgPSBbJ3RleHQvc2FzcycsICd0ZXh0L3Njc3MnXTtcbmxldCBzYXNzID0gbnVsbDtcblxuLyoqXG4gKiBAYWNjZXNzIHByaXZhdGVcbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2Fzc0NvbXBpbGVyIGV4dGVuZHMgQ29tcGlsZXJCYXNlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcblxuICAgIHRoaXMuY29tcGlsZXJPcHRpb25zID0ge1xuICAgICAgY29tbWVudHM6IHRydWUsXG4gICAgICBzb3VyY2VNYXBFbWJlZDogdHJ1ZSxcbiAgICAgIHNvdXJjZU1hcENvbnRlbnRzOiB0cnVlXG4gICAgfTtcblxuICAgIHRoaXMuc2VlbkZpbGVQYXRocyA9IHt9O1xuICB9XG5cbiAgc3RhdGljIGdldElucHV0TWltZVR5cGVzKCkge1xuICAgIHJldHVybiBtaW1lVHlwZXM7XG4gIH1cblxuICBhc3luYyBzaG91bGRDb21waWxlRmlsZShmaWxlTmFtZSwgY29tcGlsZXJDb250ZXh0KSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBhc3luYyBkZXRlcm1pbmVEZXBlbmRlbnRGaWxlcyhzb3VyY2VDb2RlLCBmaWxlUGF0aCwgY29tcGlsZXJDb250ZXh0KSB7XG4gICAgcmV0dXJuIHRoaXMuZGV0ZXJtaW5lRGVwZW5kZW50RmlsZXNTeW5jKHNvdXJjZUNvZGUsIGZpbGVQYXRoLCBjb21waWxlckNvbnRleHQpO1xuICB9XG5cbiAgYXN5bmMgY29tcGlsZShzb3VyY2VDb2RlLCBmaWxlUGF0aCwgY29tcGlsZXJDb250ZXh0KSB7XG4gICAgc2FzcyA9IHNhc3MgfHwgdGhpcy5nZXRTYXNzKCk7XG5cbiAgICBsZXQgdGhpc1BhdGggPSBwYXRoLmRpcm5hbWUoZmlsZVBhdGgpO1xuICAgIHRoaXMuc2VlbkZpbGVQYXRoc1t0aGlzUGF0aF0gPSB0cnVlO1xuXG4gICAgbGV0IHBhdGhzID0gT2JqZWN0LmtleXModGhpcy5zZWVuRmlsZVBhdGhzKTtcblxuICAgIGlmICh0aGlzLmNvbXBpbGVyT3B0aW9ucy5wYXRocykge1xuICAgICAgcGF0aHMucHVzaCguLi50aGlzLmNvbXBpbGVyT3B0aW9ucy5wYXRocyk7XG4gICAgfVxuXG4gICAgcGF0aHMudW5zaGlmdCgnLicpO1xuXG4gICAgc2Fzcy5pbXBvcnRlcih0aGlzLmJ1aWxkSW1wb3J0ZXJDYWxsYmFjayhwYXRocykpO1xuXG4gICAgbGV0IG9wdHMgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLmNvbXBpbGVyT3B0aW9ucywge1xuICAgICAgaW5kZW50ZWRTeW50YXg6IGZpbGVQYXRoLm1hdGNoKC9cXC5zYXNzJC9pKSxcbiAgICAgIHNvdXJjZU1hcFJvb3Q6IGZpbGVQYXRoLFxuICAgIH0pO1xuXG4gICAgLy8gbm90IGEgdmFsaWQgb3B0aW9uXG4gICAgZGVsZXRlIG9wdHMucGF0aHM7XG5cbiAgICBsZXQgcmVzdWx0ID0gYXdhaXQgbmV3IFByb21pc2UoKHJlcyxyZWopID0+IHtcbiAgICAgIHNhc3MuY29tcGlsZShzb3VyY2VDb2RlLCBvcHRzLCAocikgPT4ge1xuICAgICAgICBpZiAoci5zdGF0dXMgIT09IDApIHtcbiAgICAgICAgICByZWoobmV3IEVycm9yKHIuZm9ybWF0dGVkIHx8IHIubWVzc2FnZSkpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlcyhyKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBsZXQgc291cmNlID0gcmVzdWx0LnRleHQ7XG5cbiAgICAvLyBOQjogSWYgeW91IGNvbXBpbGUgYSBmaWxlIHRoYXQgaXMgc29sZWx5IGltcG9ydHMsIGl0c1xuICAgIC8vIGFjdHVhbCBjb250ZW50IGlzICcnIHlldCBpdCBpcyBhIHZhbGlkIGZpbGUuICcnIGlzIG5vdFxuICAgIC8vIHRydXRoeSwgc28gd2UncmUgZ29pbmcgdG8gcmVwbGFjZSBpdCB3aXRoIGEgc3RyaW5nIHRoYXRcbiAgICAvLyBpcyB0cnV0aHkuXG4gICAgaWYgKCFzb3VyY2UpIHtcbiAgICAgIHNvdXJjZSA9ICcgJztcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgY29kZTogc291cmNlLFxuICAgICAgbWltZVR5cGU6ICd0ZXh0L2NzcydcbiAgICB9O1xuICB9XG5cbiAgc2hvdWxkQ29tcGlsZUZpbGVTeW5jKGZpbGVOYW1lLCBjb21waWxlckNvbnRleHQpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGRldGVybWluZURlcGVuZGVudEZpbGVzU3luYyhzb3VyY2VDb2RlLCBmaWxlUGF0aCwgY29tcGlsZXJDb250ZXh0KSB7XG4gICAgbGV0IGRlcGVuZGVuY3lGaWxlbmFtZXMgPSBwYXRoLmV4dG5hbWUoZmlsZVBhdGgpID09PSAnLnNhc3MnID8gZGV0ZWN0aXZlU0FTUyhzb3VyY2VDb2RlKSA6IGRldGVjdGl2ZVNDU1Moc291cmNlQ29kZSk7XG4gICAgbGV0IGRlcGVuZGVuY2llcyA9IFtdO1xuXG4gICAgZm9yIChsZXQgZGVwZW5kZW5jeU5hbWUgb2YgZGVwZW5kZW5jeUZpbGVuYW1lcykge1xuICAgICAgZGVwZW5kZW5jaWVzLnB1c2goc2Fzc0xvb2t1cChkZXBlbmRlbmN5TmFtZSwgcGF0aC5iYXNlbmFtZShmaWxlUGF0aCksIHBhdGguZGlybmFtZShmaWxlUGF0aCkpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZGVwZW5kZW5jaWVzO1xuICB9XG5cbiAgY29tcGlsZVN5bmMoc291cmNlQ29kZSwgZmlsZVBhdGgsIGNvbXBpbGVyQ29udGV4dCkge1xuICAgIHNhc3MgPSBzYXNzIHx8IHRoaXMuZ2V0U2FzcygpO1xuXG4gICAgbGV0IHRoaXNQYXRoID0gcGF0aC5kaXJuYW1lKGZpbGVQYXRoKTtcbiAgICB0aGlzLnNlZW5GaWxlUGF0aHNbdGhpc1BhdGhdID0gdHJ1ZTtcblxuICAgIGxldCBwYXRocyA9IE9iamVjdC5rZXlzKHRoaXMuc2VlbkZpbGVQYXRocyk7XG5cbiAgICBpZiAodGhpcy5jb21waWxlck9wdGlvbnMucGF0aHMpIHtcbiAgICAgIHBhdGhzLnB1c2goLi4udGhpcy5jb21waWxlck9wdGlvbnMucGF0aHMpO1xuICAgIH1cblxuICAgIHBhdGhzLnVuc2hpZnQoJy4nKTtcbiAgICBzYXNzLmltcG9ydGVyKHRoaXMuYnVpbGRJbXBvcnRlckNhbGxiYWNrKHBhdGhzKSk7XG5cbiAgICBsZXQgb3B0cyA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuY29tcGlsZXJPcHRpb25zLCB7XG4gICAgICBpbmRlbnRlZFN5bnRheDogZmlsZVBhdGgubWF0Y2goL1xcLnNhc3MkL2kpLFxuICAgICAgc291cmNlTWFwUm9vdDogZmlsZVBhdGgsXG4gICAgfSk7XG5cbiAgICBsZXQgcmVzdWx0O1xuICAgIHRvdXRTdWl0ZSgoKSA9PiB7XG4gICAgICBzYXNzLmNvbXBpbGUoc291cmNlQ29kZSwgb3B0cywgKHIpID0+IHtcbiAgICAgICAgaWYgKHIuc3RhdHVzICE9PSAwKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKHIuZm9ybWF0dGVkKTtcbiAgICAgICAgfVxuICAgICAgICByZXN1bHQgPSByO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBsZXQgc291cmNlID0gcmVzdWx0LnRleHQ7XG5cbiAgICAvLyBOQjogSWYgeW91IGNvbXBpbGUgYSBmaWxlIHRoYXQgaXMgc29sZWx5IGltcG9ydHMsIGl0c1xuICAgIC8vIGFjdHVhbCBjb250ZW50IGlzICcnIHlldCBpdCBpcyBhIHZhbGlkIGZpbGUuICcnIGlzIG5vdFxuICAgIC8vIHRydXRoeSwgc28gd2UncmUgZ29pbmcgdG8gcmVwbGFjZSBpdCB3aXRoIGEgc3RyaW5nIHRoYXRcbiAgICAvLyBpcyB0cnV0aHkuXG4gICAgaWYgKCFzb3VyY2UpIHtcbiAgICAgIHNvdXJjZSA9ICcgJztcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgY29kZTogc291cmNlLFxuICAgICAgbWltZVR5cGU6ICd0ZXh0L2NzcydcbiAgICB9O1xuICB9XG5cbiAgZ2V0U2FzcygpIHtcbiAgICBsZXQgcmV0O1xuICAgIHRvdXRTdWl0ZSgoKSA9PiByZXQgPSByZXF1aXJlKCdzYXNzLmpzL2Rpc3Qvc2Fzcy5ub2RlJykuU2Fzcyk7XG4gICAgcmV0dXJuIHJldDtcbiAgfVxuXG4gIGJ1aWxkSW1wb3J0ZXJDYWxsYmFjayAoaW5jbHVkZVBhdGhzKSB7XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgcmV0dXJuIChmdW5jdGlvbiAocmVxdWVzdCwgZG9uZSkge1xuICAgICAgbGV0IGZpbGU7XG4gICAgICBpZiAocmVxdWVzdC5maWxlKSB7XG4gICAgICAgIGRvbmUoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gc2Fzcy5qcyB3b3JrcyBpbiB0aGUgJy9zYXNzLycgZGlyZWN0b3J5XG4gICAgICAgIGxldCBjbGVhbmVkUmVxdWVzdFBhdGggPSByZXF1ZXN0LnJlc29sdmVkLnJlcGxhY2UoL15cXC9zYXNzXFwvLywgJycpO1xuXG4gICAgICAgIC8vIGlmIHdlIGFyZSBpbXBvcnRpbmcgZnJvbSB0aGUgZW50cnkgZmlsZSAoc3RkaW4pIHRoZSBwYXRoIGlzXG4gICAgICAgIC8vIHJlc29sdmVkIHdpdGggYSBsZWFkaW5nICcvJycgLT4gcmVtb3ZlIGl0XG4gICAgICAgIGlmIChyZXF1ZXN0LnByZXZpb3VzID09PSAnc3RkaW4nICYmIGNsZWFuZWRSZXF1ZXN0UGF0aC5jaGFyQXQoMCkgPT09ICcvJykge1xuICAgICAgICAgIGNsZWFuZWRSZXF1ZXN0UGF0aCA9IGNsZWFuZWRSZXF1ZXN0UGF0aC5zdWJzdHJpbmcoMSk7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGxldCBpbmNsdWRlUGF0aCBvZiBpbmNsdWRlUGF0aHMpIHtcbiAgICAgICAgICBjb25zdCBmaWxlUGF0aCA9IHBhdGgucmVzb2x2ZShpbmNsdWRlUGF0aCwgY2xlYW5lZFJlcXVlc3RQYXRoKTtcbiAgICAgICAgICBsZXQgdmFyaWF0aW9ucyA9IHNhc3MuZ2V0UGF0aFZhcmlhdGlvbnMoZmlsZVBhdGgpO1xuXG4gICAgICAgICAgZmlsZSA9IHZhcmlhdGlvbnNcbiAgICAgICAgICAgIC5tYXAoc2VsZi5maXhXaW5kb3dzUGF0aC5iaW5kKHNlbGYpKVxuICAgICAgICAgICAgLnJlZHVjZShzZWxmLmltcG9ydGVkRmlsZVJlZHVjZXIuYmluZChzZWxmKSwgbnVsbCk7XG5cbiAgICAgICAgICBpZiAoZmlsZSkge1xuICAgICAgICAgICAgY29uc3QgY29udGVudCA9IGZzLnJlYWRGaWxlU3luYyhmaWxlLCB7IGVuY29kaW5nOiAndXRmOCcgfSk7XG4gICAgICAgICAgICByZXR1cm4gc2Fzcy53cml0ZUZpbGUoZmlsZSwgY29udGVudCwgKCkgPT4ge1xuICAgICAgICAgICAgICBkb25lKHsgcGF0aDogZmlsZSB9KTtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFmaWxlKSB7XG4gICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgaW1wb3J0ZWRGaWxlUmVkdWNlcihmb3VuZCwgcGF0aCkge1xuICAgIC8vIEZpbmQgdGhlIGZpcnN0IHZhcmlhdGlvbiB0aGF0IGFjdHVhbGx5IGV4aXN0c1xuICAgIGlmIChmb3VuZCkgcmV0dXJuIGZvdW5kO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHN0YXQgPSBmcy5zdGF0U3luYyhwYXRoKTtcbiAgICAgIGlmICghc3RhdC5pc0ZpbGUoKSkgcmV0dXJuIG51bGw7XG4gICAgICByZXR1cm4gcGF0aDtcbiAgICB9IGNhdGNoKGUpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIGZpeFdpbmRvd3NQYXRoKGZpbGUpIHtcbiAgICAvLyBVbmZvcnR1bmF0ZWx5LCB0aGVyZSdzIGEgYnVnIGluIHNhc3MuanMgdGhhdCBzZWVtcyB0byBpZ25vcmUgdGhlIGRpZmZlcmVudFxuICAgIC8vIHBhdGggc2VwYXJhdG9ycyBhY3Jvc3MgcGxhdGZvcm1zXG5cbiAgICAvLyBGb3Igc29tZSByZWFzb24sIHNvbWUgZmlsZXMgaGF2ZSBhIGxlYWRpbmcgc2xhc2ggdGhhdCB3ZSBuZWVkIHRvIGdldCByaWQgb2ZcbiAgICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJyAmJiBmaWxlWzBdID09PSAnLycpIHtcbiAgICAgIGZpbGUgPSBmaWxlLnNsaWNlKDEpO1xuICAgIH1cblxuICAgIC8vIFNhc3MuanMgZ2VuZXJhdGVzIHBhdGhzIHN1Y2ggYXMgYF9DOlxcbXlQYXRoXFxmaWxlLnNhc3NgIGluc3RlYWQgb2YgYEM6XFxteVBhdGhcXF9maWxlLnNhc3NgXG4gICAgaWYgKGZpbGVbMF0gPT09ICdfJykge1xuICAgICAgY29uc3QgcGFydHMgPSBmaWxlLnNsaWNlKDEpLnNwbGl0KHBhdGguc2VwKTtcbiAgICAgIGNvbnN0IGRpciA9IHBhcnRzLnNsaWNlKDAsIC0xKS5qb2luKHBhdGguc2VwKTtcbiAgICAgIGNvbnN0IGZpbGVOYW1lID0gcGFydHMucmV2ZXJzZSgpWzBdO1xuICAgICAgZmlsZSA9IHBhdGgucmVzb2x2ZShkaXIsICdfJyArIGZpbGVOYW1lKTtcbiAgICB9XG4gICAgcmV0dXJuIGZpbGU7XG4gIH1cblxuICBnZXRDb21waWxlclZlcnNpb24oKSB7XG4gICAgLy8gTkI6IFRoZXJlIGlzIGEgYml6YXJyZSBidWcgaW4gdGhlIG5vZGUgbW9kdWxlIHN5c3RlbSB3aGVyZSB0aGlzIGRvZXNuJ3RcbiAgICAvLyB3b3JrIGJ1dCBvbmx5IGluIHNhdmVDb25maWd1cmF0aW9uIHRlc3RzXG4gICAgLy9yZXR1cm4gcmVxdWlyZSgnQHBhdWxjYmV0dHMvbm9kZS1zYXNzL3BhY2thZ2UuanNvbicpLnZlcnNpb247XG4gICAgcmV0dXJuIFwiNC4xLjFcIjtcbiAgfVxufVxuIl19 \ No newline at end of file diff --git a/lib/css/stylus.js b/lib/css/stylus.js new file mode 100644 index 0000000..7a7ee96 --- /dev/null +++ b/lib/css/stylus.js @@ -0,0 +1,175 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _path = require('path'); + +var _path2 = _interopRequireDefault(_path); + +var _detectiveStylus = require('detective-stylus'); + +var _detectiveStylus2 = _interopRequireDefault(_detectiveStylus); + +var _stylusLookup = require('stylus-lookup'); + +var _stylusLookup2 = _interopRequireDefault(_stylusLookup); + +var _compilerBase = require('../compiler-base'); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function _asyncToGenerator(fn) { return function () { var gen = fn.apply(this, arguments); return new Promise(function (resolve, reject) { function step(key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { return Promise.resolve(value).then(function (value) { step("next", value); }, function (err) { step("throw", err); }); } } return step("next"); }); }; } + +const mimeTypes = ['text/stylus']; + +let stylusjs = null; +let nib = null; + +function each(obj, sel) { + for (let k in obj) { + sel(obj[k], k); + } +} + +/** + * @access private + */ +class StylusCompiler extends _compilerBase.CompilerBase { + constructor() { + super(); + + this.compilerOptions = { + sourcemap: 'inline', + import: ['nib'] + }; + + this.seenFilePaths = {}; + } + + static getInputMimeTypes() { + return mimeTypes; + } + + shouldCompileFile(fileName, compilerContext) { + return _asyncToGenerator(function* () { + return true; + })(); + } + + determineDependentFiles(sourceCode, filePath, compilerContext) { + var _this = this; + + return _asyncToGenerator(function* () { + return _this.determineDependentFilesSync(sourceCode, filePath, compilerContext); + })(); + } + + compile(sourceCode, filePath, compilerContext) { + var _this2 = this; + + return _asyncToGenerator(function* () { + nib = nib || require('nib'); + stylusjs = stylusjs || require('stylus'); + _this2.seenFilePaths[_path2.default.dirname(filePath)] = true; + + let opts = _this2.makeOpts(filePath); + + let code = yield new Promise(function (res, rej) { + let styl = stylusjs(sourceCode, opts); + + _this2.applyOpts(opts, styl); + + styl.render(function (err, css) { + if (err) { + rej(err); + } else { + res(css); + } + }); + }); + + return { + code, mimeType: 'text/css' + }; + })(); + } + + makeOpts(filePath) { + let opts = Object.assign({}, this.compilerOptions, { + filename: (0, _path.basename)(filePath) + }); + + if (opts.import && !Array.isArray(opts.import)) { + opts.import = [opts.import]; + } + + if (opts.import && opts.import.indexOf('nib') >= 0) { + opts.use = opts.use || []; + + if (!Array.isArray(opts.use)) { + opts.use = [opts.use]; + } + + opts.use.push(nib()); + } + + return opts; + } + + applyOpts(opts, stylus) { + each(opts, (val, key) => { + switch (key) { + case 'set': + case 'define': + each(val, (v, k) => stylus[key](k, v)); + break; + case 'include': + case 'import': + case 'use': + each(val, v => stylus[key](v)); + break; + } + }); + + stylus.set('paths', Object.keys(this.seenFilePaths).concat(['.'])); + } + + shouldCompileFileSync(fileName, compilerContext) { + return true; + } + + determineDependentFilesSync(sourceCode, filePath, compilerContext) { + let dependencyFilenames = (0, _detectiveStylus2.default)(sourceCode); + let dependencies = []; + + for (let dependencyName of dependencyFilenames) { + dependencies.push((0, _stylusLookup2.default)(dependencyName, _path2.default.basename(filePath), _path2.default.dirname(filePath))); + } + + return dependencies; + } + + compileSync(sourceCode, filePath, compilerContext) { + nib = nib || require('nib'); + stylusjs = stylusjs || require('stylus'); + this.seenFilePaths[_path2.default.dirname(filePath)] = true; + + let opts = this.makeOpts(filePath), + styl = stylusjs(sourceCode, opts); + + this.applyOpts(opts, styl); + + return { + code: styl.render(), + mimeType: 'text/css' + }; + } + + getCompilerVersion() { + return require('stylus/package.json').version; + } +} +exports.default = StylusCompiler; +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jc3Mvc3R5bHVzLmpzIl0sIm5hbWVzIjpbIm1pbWVUeXBlcyIsInN0eWx1c2pzIiwibmliIiwiZWFjaCIsIm9iaiIsInNlbCIsImsiLCJTdHlsdXNDb21waWxlciIsImNvbnN0cnVjdG9yIiwiY29tcGlsZXJPcHRpb25zIiwic291cmNlbWFwIiwiaW1wb3J0Iiwic2VlbkZpbGVQYXRocyIsImdldElucHV0TWltZVR5cGVzIiwic2hvdWxkQ29tcGlsZUZpbGUiLCJmaWxlTmFtZSIsImNvbXBpbGVyQ29udGV4dCIsImRldGVybWluZURlcGVuZGVudEZpbGVzIiwic291cmNlQ29kZSIsImZpbGVQYXRoIiwiZGV0ZXJtaW5lRGVwZW5kZW50RmlsZXNTeW5jIiwiY29tcGlsZSIsInJlcXVpcmUiLCJkaXJuYW1lIiwib3B0cyIsIm1ha2VPcHRzIiwiY29kZSIsIlByb21pc2UiLCJyZXMiLCJyZWoiLCJzdHlsIiwiYXBwbHlPcHRzIiwicmVuZGVyIiwiZXJyIiwiY3NzIiwibWltZVR5cGUiLCJPYmplY3QiLCJhc3NpZ24iLCJmaWxlbmFtZSIsIkFycmF5IiwiaXNBcnJheSIsImluZGV4T2YiLCJ1c2UiLCJwdXNoIiwic3R5bHVzIiwidmFsIiwia2V5IiwidiIsInNldCIsImtleXMiLCJjb25jYXQiLCJzaG91bGRDb21waWxlRmlsZVN5bmMiLCJkZXBlbmRlbmN5RmlsZW5hbWVzIiwiZGVwZW5kZW5jaWVzIiwiZGVwZW5kZW5jeU5hbWUiLCJiYXNlbmFtZSIsImNvbXBpbGVTeW5jIiwiZ2V0Q29tcGlsZXJWZXJzaW9uIiwidmVyc2lvbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUE7Ozs7QUFDQTs7OztBQUNBOzs7O0FBQ0E7Ozs7OztBQUdBLE1BQU1BLFlBQVksQ0FBQyxhQUFELENBQWxCOztBQUVBLElBQUlDLFdBQVcsSUFBZjtBQUNBLElBQUlDLE1BQU0sSUFBVjs7QUFFQSxTQUFTQyxJQUFULENBQWNDLEdBQWQsRUFBbUJDLEdBQW5CLEVBQXdCO0FBQ3RCLE9BQUssSUFBSUMsQ0FBVCxJQUFjRixHQUFkLEVBQW1CO0FBQ2pCQyxRQUFJRCxJQUFJRSxDQUFKLENBQUosRUFBWUEsQ0FBWjtBQUNEO0FBQ0Y7O0FBRUQ7OztBQUdlLE1BQU1DLGNBQU4sb0NBQTBDO0FBQ3ZEQyxnQkFBYztBQUNaOztBQUVBLFNBQUtDLGVBQUwsR0FBdUI7QUFDckJDLGlCQUFXLFFBRFU7QUFFckJDLGNBQVEsQ0FBQyxLQUFEO0FBRmEsS0FBdkI7O0FBS0EsU0FBS0MsYUFBTCxHQUFxQixFQUFyQjtBQUNEOztBQUVELFNBQU9DLGlCQUFQLEdBQTJCO0FBQ3pCLFdBQU9iLFNBQVA7QUFDRDs7QUFFS2MsbUJBQU4sQ0FBd0JDLFFBQXhCLEVBQWtDQyxlQUFsQyxFQUFtRDtBQUFBO0FBQ2pELGFBQU8sSUFBUDtBQURpRDtBQUVsRDs7QUFFS0MseUJBQU4sQ0FBOEJDLFVBQTlCLEVBQTBDQyxRQUExQyxFQUFvREgsZUFBcEQsRUFBcUU7QUFBQTs7QUFBQTtBQUNuRSxhQUFPLE1BQUtJLDJCQUFMLENBQWlDRixVQUFqQyxFQUE2Q0MsUUFBN0MsRUFBdURILGVBQXZELENBQVA7QUFEbUU7QUFFcEU7O0FBRUtLLFNBQU4sQ0FBY0gsVUFBZCxFQUEwQkMsUUFBMUIsRUFBb0NILGVBQXBDLEVBQXFEO0FBQUE7O0FBQUE7QUFDbkRkLFlBQU1BLE9BQU9vQixRQUFRLEtBQVIsQ0FBYjtBQUNBckIsaUJBQVdBLFlBQVlxQixRQUFRLFFBQVIsQ0FBdkI7QUFDQSxhQUFLVixhQUFMLENBQW1CLGVBQUtXLE9BQUwsQ0FBYUosUUFBYixDQUFuQixJQUE2QyxJQUE3Qzs7QUFFQSxVQUFJSyxPQUFPLE9BQUtDLFFBQUwsQ0FBY04sUUFBZCxDQUFYOztBQUVBLFVBQUlPLE9BQU8sTUFBTSxJQUFJQyxPQUFKLENBQVksVUFBQ0MsR0FBRCxFQUFLQyxHQUFMLEVBQWE7QUFDeEMsWUFBSUMsT0FBTzdCLFNBQVNpQixVQUFULEVBQXFCTSxJQUFyQixDQUFYOztBQUVBLGVBQUtPLFNBQUwsQ0FBZVAsSUFBZixFQUFxQk0sSUFBckI7O0FBRUFBLGFBQUtFLE1BQUwsQ0FBWSxVQUFDQyxHQUFELEVBQU1DLEdBQU4sRUFBYztBQUN4QixjQUFJRCxHQUFKLEVBQVM7QUFDUEosZ0JBQUlJLEdBQUo7QUFDRCxXQUZELE1BRU87QUFDTEwsZ0JBQUlNLEdBQUo7QUFDRDtBQUNGLFNBTkQ7QUFPRCxPQVpnQixDQUFqQjs7QUFjQSxhQUFPO0FBQ0xSLFlBREssRUFDQ1MsVUFBVTtBQURYLE9BQVA7QUFyQm1EO0FBd0JwRDs7QUFFRFYsV0FBU04sUUFBVCxFQUFtQjtBQUNqQixRQUFJSyxPQUFPWSxPQUFPQyxNQUFQLENBQWMsRUFBZCxFQUFrQixLQUFLNUIsZUFBdkIsRUFBd0M7QUFDakQ2QixnQkFBVSxvQkFBU25CLFFBQVQ7QUFEdUMsS0FBeEMsQ0FBWDs7QUFJQSxRQUFJSyxLQUFLYixNQUFMLElBQWUsQ0FBQzRCLE1BQU1DLE9BQU4sQ0FBY2hCLEtBQUtiLE1BQW5CLENBQXBCLEVBQWdEO0FBQzlDYSxXQUFLYixNQUFMLEdBQWMsQ0FBQ2EsS0FBS2IsTUFBTixDQUFkO0FBQ0Q7O0FBRUQsUUFBSWEsS0FBS2IsTUFBTCxJQUFlYSxLQUFLYixNQUFMLENBQVk4QixPQUFaLENBQW9CLEtBQXBCLEtBQThCLENBQWpELEVBQW9EO0FBQ2xEakIsV0FBS2tCLEdBQUwsR0FBV2xCLEtBQUtrQixHQUFMLElBQVksRUFBdkI7O0FBRUEsVUFBSSxDQUFDSCxNQUFNQyxPQUFOLENBQWNoQixLQUFLa0IsR0FBbkIsQ0FBTCxFQUE4QjtBQUM1QmxCLGFBQUtrQixHQUFMLEdBQVcsQ0FBQ2xCLEtBQUtrQixHQUFOLENBQVg7QUFDRDs7QUFFRGxCLFdBQUtrQixHQUFMLENBQVNDLElBQVQsQ0FBY3pDLEtBQWQ7QUFDRDs7QUFFRCxXQUFPc0IsSUFBUDtBQUNEOztBQUdETyxZQUFVUCxJQUFWLEVBQWdCb0IsTUFBaEIsRUFBd0I7QUFDdEJ6QyxTQUFLcUIsSUFBTCxFQUFXLENBQUNxQixHQUFELEVBQU1DLEdBQU4sS0FBYztBQUN2QixjQUFPQSxHQUFQO0FBQ0EsYUFBSyxLQUFMO0FBQ0EsYUFBSyxRQUFMO0FBQ0UzQyxlQUFLMEMsR0FBTCxFQUFVLENBQUNFLENBQUQsRUFBSXpDLENBQUosS0FBVXNDLE9BQU9FLEdBQVAsRUFBWXhDLENBQVosRUFBZXlDLENBQWYsQ0FBcEI7QUFDQTtBQUNGLGFBQUssU0FBTDtBQUNBLGFBQUssUUFBTDtBQUNBLGFBQUssS0FBTDtBQUNFNUMsZUFBSzBDLEdBQUwsRUFBV0UsQ0FBRCxJQUFPSCxPQUFPRSxHQUFQLEVBQVlDLENBQVosQ0FBakI7QUFDQTtBQVRGO0FBV0QsS0FaRDs7QUFjQUgsV0FBT0ksR0FBUCxDQUFXLE9BQVgsRUFBb0JaLE9BQU9hLElBQVAsQ0FBWSxLQUFLckMsYUFBakIsRUFBZ0NzQyxNQUFoQyxDQUF1QyxDQUFDLEdBQUQsQ0FBdkMsQ0FBcEI7QUFDRDs7QUFFREMsd0JBQXNCcEMsUUFBdEIsRUFBZ0NDLGVBQWhDLEVBQWlEO0FBQy9DLFdBQU8sSUFBUDtBQUNEOztBQUVESSw4QkFBNEJGLFVBQTVCLEVBQXdDQyxRQUF4QyxFQUFrREgsZUFBbEQsRUFBbUU7QUFDakUsUUFBSW9DLHNCQUFzQiwrQkFBVWxDLFVBQVYsQ0FBMUI7QUFDQSxRQUFJbUMsZUFBZSxFQUFuQjs7QUFFQSxTQUFLLElBQUlDLGNBQVQsSUFBMkJGLG1CQUEzQixFQUFnRDtBQUM5Q0MsbUJBQWFWLElBQWIsQ0FBa0IsNEJBQU9XLGNBQVAsRUFBdUIsZUFBS0MsUUFBTCxDQUFjcEMsUUFBZCxDQUF2QixFQUFnRCxlQUFLSSxPQUFMLENBQWFKLFFBQWIsQ0FBaEQsQ0FBbEI7QUFDRDs7QUFFRCxXQUFPa0MsWUFBUDtBQUNEOztBQUVERyxjQUFZdEMsVUFBWixFQUF3QkMsUUFBeEIsRUFBa0NILGVBQWxDLEVBQW1EO0FBQ2pEZCxVQUFNQSxPQUFPb0IsUUFBUSxLQUFSLENBQWI7QUFDQXJCLGVBQVdBLFlBQVlxQixRQUFRLFFBQVIsQ0FBdkI7QUFDQSxTQUFLVixhQUFMLENBQW1CLGVBQUtXLE9BQUwsQ0FBYUosUUFBYixDQUFuQixJQUE2QyxJQUE3Qzs7QUFFQSxRQUFJSyxPQUFPLEtBQUtDLFFBQUwsQ0FBY04sUUFBZCxDQUFYO0FBQUEsUUFBb0NXLE9BQU83QixTQUFTaUIsVUFBVCxFQUFxQk0sSUFBckIsQ0FBM0M7O0FBRUEsU0FBS08sU0FBTCxDQUFlUCxJQUFmLEVBQXFCTSxJQUFyQjs7QUFFQSxXQUFPO0FBQ0xKLFlBQU1JLEtBQUtFLE1BQUwsRUFERDtBQUVMRyxnQkFBVTtBQUZMLEtBQVA7QUFJRDs7QUFFRHNCLHVCQUFxQjtBQUNuQixXQUFPbkMsUUFBUSxxQkFBUixFQUErQm9DLE9BQXRDO0FBQ0Q7QUEzSHNEO2tCQUFwQ25ELGMiLCJmaWxlIjoic3R5bHVzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgZGV0ZWN0aXZlIGZyb20gJ2RldGVjdGl2ZS1zdHlsdXMnO1xuaW1wb3J0IGxvb2t1cCBmcm9tICdzdHlsdXMtbG9va3VwJztcbmltcG9ydCB7Q29tcGlsZXJCYXNlfSBmcm9tICcuLi9jb21waWxlci1iYXNlJztcbmltcG9ydCB7YmFzZW5hbWV9IGZyb20gJ3BhdGgnO1xuXG5jb25zdCBtaW1lVHlwZXMgPSBbJ3RleHQvc3R5bHVzJ107XG5cbmxldCBzdHlsdXNqcyA9IG51bGw7XG5sZXQgbmliID0gbnVsbDtcblxuZnVuY3Rpb24gZWFjaChvYmosIHNlbCkge1xuICBmb3IgKGxldCBrIGluIG9iaikge1xuICAgIHNlbChvYmpba10sIGspO1xuICB9XG59XG5cbi8qKlxuICogQGFjY2VzcyBwcml2YXRlXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFN0eWx1c0NvbXBpbGVyIGV4dGVuZHMgQ29tcGlsZXJCYXNlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcblxuICAgIHRoaXMuY29tcGlsZXJPcHRpb25zID0ge1xuICAgICAgc291cmNlbWFwOiAnaW5saW5lJyxcbiAgICAgIGltcG9ydDogWyduaWInXVxuICAgIH07XG5cbiAgICB0aGlzLnNlZW5GaWxlUGF0aHMgPSB7fTtcbiAgfVxuXG4gIHN0YXRpYyBnZXRJbnB1dE1pbWVUeXBlcygpIHtcbiAgICByZXR1cm4gbWltZVR5cGVzO1xuICB9XG5cbiAgYXN5bmMgc2hvdWxkQ29tcGlsZUZpbGUoZmlsZU5hbWUsIGNvbXBpbGVyQ29udGV4dCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgYXN5bmMgZGV0ZXJtaW5lRGVwZW5kZW50RmlsZXMoc291cmNlQ29kZSwgZmlsZVBhdGgsIGNvbXBpbGVyQ29udGV4dCkge1xuICAgIHJldHVybiB0aGlzLmRldGVybWluZURlcGVuZGVudEZpbGVzU3luYyhzb3VyY2VDb2RlLCBmaWxlUGF0aCwgY29tcGlsZXJDb250ZXh0KTtcbiAgfVxuXG4gIGFzeW5jIGNvbXBpbGUoc291cmNlQ29kZSwgZmlsZVBhdGgsIGNvbXBpbGVyQ29udGV4dCkge1xuICAgIG5pYiA9IG5pYiB8fCByZXF1aXJlKCduaWInKTtcbiAgICBzdHlsdXNqcyA9IHN0eWx1c2pzIHx8IHJlcXVpcmUoJ3N0eWx1cycpO1xuICAgIHRoaXMuc2VlbkZpbGVQYXRoc1twYXRoLmRpcm5hbWUoZmlsZVBhdGgpXSA9IHRydWU7XG5cbiAgICBsZXQgb3B0cyA9IHRoaXMubWFrZU9wdHMoZmlsZVBhdGgpO1xuXG4gICAgbGV0IGNvZGUgPSBhd2FpdCBuZXcgUHJvbWlzZSgocmVzLHJlaikgPT4ge1xuICAgICAgbGV0IHN0eWwgPSBzdHlsdXNqcyhzb3VyY2VDb2RlLCBvcHRzKTtcblxuICAgICAgdGhpcy5hcHBseU9wdHMob3B0cywgc3R5bCk7XG5cbiAgICAgIHN0eWwucmVuZGVyKChlcnIsIGNzcykgPT4ge1xuICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgcmVqKGVycik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVzKGNzcyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGNvZGUsIG1pbWVUeXBlOiAndGV4dC9jc3MnXG4gICAgfTtcbiAgfVxuXG4gIG1ha2VPcHRzKGZpbGVQYXRoKSB7XG4gICAgbGV0IG9wdHMgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLmNvbXBpbGVyT3B0aW9ucywge1xuICAgICAgZmlsZW5hbWU6IGJhc2VuYW1lKGZpbGVQYXRoKVxuICAgIH0pO1xuXG4gICAgaWYgKG9wdHMuaW1wb3J0ICYmICFBcnJheS5pc0FycmF5KG9wdHMuaW1wb3J0KSkge1xuICAgICAgb3B0cy5pbXBvcnQgPSBbb3B0cy5pbXBvcnRdO1xuICAgIH1cblxuICAgIGlmIChvcHRzLmltcG9ydCAmJiBvcHRzLmltcG9ydC5pbmRleE9mKCduaWInKSA+PSAwKSB7XG4gICAgICBvcHRzLnVzZSA9IG9wdHMudXNlIHx8IFtdO1xuXG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkob3B0cy51c2UpKSB7XG4gICAgICAgIG9wdHMudXNlID0gW29wdHMudXNlXTtcbiAgICAgIH1cblxuICAgICAgb3B0cy51c2UucHVzaChuaWIoKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG9wdHM7XG4gIH1cbiAgXG4gIFxuICBhcHBseU9wdHMob3B0cywgc3R5bHVzKSB7XG4gICAgZWFjaChvcHRzLCAodmFsLCBrZXkpID0+IHtcbiAgICAgIHN3aXRjaChrZXkpIHtcbiAgICAgIGNhc2UgJ3NldCc6XG4gICAgICBjYXNlICdkZWZpbmUnOlxuICAgICAgICBlYWNoKHZhbCwgKHYsIGspID0+IHN0eWx1c1trZXldKGssIHYpKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdpbmNsdWRlJzpcbiAgICAgIGNhc2UgJ2ltcG9ydCc6XG4gICAgICBjYXNlICd1c2UnOlxuICAgICAgICBlYWNoKHZhbCwgKHYpID0+IHN0eWx1c1trZXldKHYpKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBzdHlsdXMuc2V0KCdwYXRocycsIE9iamVjdC5rZXlzKHRoaXMuc2VlbkZpbGVQYXRocykuY29uY2F0KFsnLiddKSk7XG4gIH1cblxuICBzaG91bGRDb21waWxlRmlsZVN5bmMoZmlsZU5hbWUsIGNvbXBpbGVyQ29udGV4dCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgZGV0ZXJtaW5lRGVwZW5kZW50RmlsZXNTeW5jKHNvdXJjZUNvZGUsIGZpbGVQYXRoLCBjb21waWxlckNvbnRleHQpIHtcbiAgICBsZXQgZGVwZW5kZW5jeUZpbGVuYW1lcyA9IGRldGVjdGl2ZShzb3VyY2VDb2RlKTtcbiAgICBsZXQgZGVwZW5kZW5jaWVzID0gW107XG5cbiAgICBmb3IgKGxldCBkZXBlbmRlbmN5TmFtZSBvZiBkZXBlbmRlbmN5RmlsZW5hbWVzKSB7XG4gICAgICBkZXBlbmRlbmNpZXMucHVzaChsb29rdXAoZGVwZW5kZW5jeU5hbWUsIHBhdGguYmFzZW5hbWUoZmlsZVBhdGgpLCBwYXRoLmRpcm5hbWUoZmlsZVBhdGgpKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRlcGVuZGVuY2llcztcbiAgfVxuXG4gIGNvbXBpbGVTeW5jKHNvdXJjZUNvZGUsIGZpbGVQYXRoLCBjb21waWxlckNvbnRleHQpIHtcbiAgICBuaWIgPSBuaWIgfHwgcmVxdWlyZSgnbmliJyk7XG4gICAgc3R5bHVzanMgPSBzdHlsdXNqcyB8fCByZXF1aXJlKCdzdHlsdXMnKTtcbiAgICB0aGlzLnNlZW5GaWxlUGF0aHNbcGF0aC5kaXJuYW1lKGZpbGVQYXRoKV0gPSB0cnVlO1xuXG4gICAgbGV0IG9wdHMgPSB0aGlzLm1ha2VPcHRzKGZpbGVQYXRoKSwgc3R5bCA9IHN0eWx1c2pzKHNvdXJjZUNvZGUsIG9wdHMpO1xuXG4gICAgdGhpcy5hcHBseU9wdHMob3B0cywgc3R5bCk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgY29kZTogc3R5bC5yZW5kZXIoKSxcbiAgICAgIG1pbWVUeXBlOiAndGV4dC9jc3MnXG4gICAgfTtcbiAgfVxuXG4gIGdldENvbXBpbGVyVmVyc2lvbigpIHtcbiAgICByZXR1cm4gcmVxdWlyZSgnc3R5bHVzL3BhY2thZ2UuanNvbicpLnZlcnNpb247XG4gIH1cbn1cbiJdfQ== \ No newline at end of file diff --git a/lib/html/inline-html.js b/lib/html/inline-html.js new file mode 100644 index 0000000..e05d8d7 --- /dev/null +++ b/lib/html/inline-html.js @@ -0,0 +1,344 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _path = require('path'); + +var _path2 = _interopRequireDefault(_path); + +var _mimeTypes = require('@paulcbetts/mime-types'); + +var _mimeTypes2 = _interopRequireDefault(_mimeTypes); + +var _compilerBase = require('../compiler-base'); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function _asyncToGenerator(fn) { return function () { var gen = fn.apply(this, arguments); return new Promise(function (resolve, reject) { function step(key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { return Promise.resolve(value).then(function (value) { step("next", value); }, function (err) { step("throw", err); }); } } return step("next"); }); }; } + +const inputMimeTypes = ['text/html']; +let cheerio = null; + +const d = require('debug')('electron-compile:inline-html'); + +const compiledCSS = { + 'text/less': true, + 'text/scss': true, + 'text/sass': true, + 'text/stylus': true +}; + +/** + * @access private + */ +class InlineHtmlCompiler extends _compilerBase.CompilerBase { + constructor(compileBlock, compileBlockSync) { + super(); + + this.compileBlock = compileBlock; + this.compileBlockSync = compileBlockSync; + } + + static createFromCompilers(compilersByMimeType) { + d(`Setting up inline HTML compilers: ${JSON.stringify(Object.keys(compilersByMimeType))}`); + + let compileBlock = (() => { + var _ref = _asyncToGenerator(function* (sourceCode, filePath, mimeType, ctx) { + let realType = mimeType; + if (!mimeType && ctx.tag === 'script') realType = 'application/javascript'; + + if (!realType) return sourceCode; + + let compiler = compilersByMimeType[realType] || compilersByMimeType['text/plain']; + let ext = _mimeTypes2.default.extension(realType); + let fakeFile = `${filePath}:inline_${ctx.count}.${ext}`; + + d(`Compiling inline block for ${filePath} with mimeType ${mimeType}`); + if (!(yield compiler.shouldCompileFile(fakeFile, ctx))) return sourceCode; + return (yield compiler.compileSync(sourceCode, fakeFile, ctx)).code; + }); + + return function compileBlock(_x, _x2, _x3, _x4) { + return _ref.apply(this, arguments); + }; + })(); + + let compileBlockSync = (sourceCode, filePath, mimeType, ctx) => { + let realType = mimeType; + if (!mimeType && ctx.tag === 'script') realType = 'application/javascript'; + + if (!realType) return sourceCode; + + let compiler = compilersByMimeType[realType] || compilersByMimeType['text/plain']; + let ext = _mimeTypes2.default.extension(realType); + let fakeFile = `${filePath}:inline_${ctx.count}.${ext}`; + + d(`Compiling inline block for ${filePath} with mimeType ${mimeType}`); + if (!compiler.shouldCompileFileSync(fakeFile, ctx)) return sourceCode; + return compiler.compileSync(sourceCode, fakeFile, ctx).code; + }; + + return new InlineHtmlCompiler(compileBlock, compileBlockSync); + } + + static getInputMimeTypes() { + return inputMimeTypes; + } + + shouldCompileFile(fileName, compilerContext) { + return _asyncToGenerator(function* () { + return true; + })(); + } + + determineDependentFiles(sourceCode, filePath, compilerContext) { + return _asyncToGenerator(function* () { + return []; + })(); + } + + each(nodes, selector) { + return _asyncToGenerator(function* () { + let acc = []; + nodes.each(function (i, el) { + let promise = selector(i, el); + if (!promise) return false; + + acc.push(promise); + return true; + }); + + yield Promise.all(acc); + })(); + } + + eachSync(nodes, selector) { + // NB: This method is here just so it's easier to mechanically + // translate the async compile to compileSync + return nodes.each((i, el) => { + selector(i, el); + return true; + }); + } + + compile(sourceCode, filePath, compilerContext) { + var _this = this; + + return _asyncToGenerator(function* () { + cheerio = cheerio || require('cheerio'); + + //Leave the attributes casing as it is, because of Angular 2 and maybe other case-sensitive frameworks + let $ = cheerio.load(sourceCode, { lowerCaseAttributeNames: false }); + let toWait = []; + + let that = _this; + let styleCount = 0; + toWait.push(_this.each($('style'), (() => { + var _ref2 = _asyncToGenerator(function* (i, el) { + let mimeType = $(el).attr('type') || 'text/plain'; + + let thisCtx = Object.assign({ + count: styleCount++, + tag: 'style' + }, compilerContext); + + let origText = $(el).text(); + let newText = yield that.compileBlock(origText, filePath, mimeType, thisCtx); + + if (origText !== newText) { + $(el).text(newText); + $(el).attr('type', 'text/css'); + } + }); + + return function (_x5, _x6) { + return _ref2.apply(this, arguments); + }; + })())); + + let scriptCount = 0; + toWait.push(_this.each($('script'), (() => { + var _ref3 = _asyncToGenerator(function* (i, el) { + let src = $(el).attr('src'); + if (src && src.length > 2) { + $(el).attr('src', InlineHtmlCompiler.fixupRelativeUrl(src)); + return; + } + + let thisCtx = Object.assign({ + count: scriptCount++, + tag: 'script' + }, compilerContext); + + let mimeType = $(el).attr('type') || 'application/javascript'; + let origText = $(el).text(); + let newText = yield that.compileBlock(origText, filePath, mimeType, thisCtx); + + if (origText !== newText) { + $(el).text(newText); + $(el).attr('type', 'application/javascript'); + } + }); + + return function (_x7, _x8) { + return _ref3.apply(this, arguments); + }; + })())); + + $('link').map(function (i, el) { + let href = $(el).attr('href'); + if (href && href.length > 2) { + $(el).attr('href', InlineHtmlCompiler.fixupRelativeUrl(href)); + } + + // NB: In recent versions of Chromium, the link type MUST be text/css or + // it will be flat-out ignored. Also I hate myself for hardcoding these. + let type = $(el).attr('type'); + if (compiledCSS[type]) $(el).attr('type', 'text/css'); + }); + + $('x-require').map(function (i, el) { + let src = $(el).attr('src'); + + // File URL? Bail + if (src.match(/^file:/i)) return; + + // Absolute path? Bail. + if (src.match(/^([\/]|[A-Za-z]:)/i)) return; + + try { + $(el).attr('src', _path2.default.resolve(_path2.default.dirname(filePath), src)); + } catch (e) { + $(el).text(`${e.message}\n${e.stack}`); + } + }); + + yield Promise.all(toWait); + + return { + code: $.html(), + mimeType: 'text/html' + }; + })(); + } + + shouldCompileFileSync(fileName, compilerContext) { + return true; + } + + determineDependentFilesSync(sourceCode, filePath, compilerContext) { + return []; + } + + compileSync(sourceCode, filePath, compilerContext) { + cheerio = cheerio || require('cheerio'); + + //Leave the attributes casing as it is, because of Angular 2 and maybe other case-sensitive frameworks + let $ = cheerio.load(sourceCode, { lowerCaseAttributeNames: false }); + + let that = this; + let styleCount = 0; + this.eachSync($('style'), (() => { + var _ref4 = _asyncToGenerator(function* (i, el) { + let mimeType = $(el).attr('type'); + + let thisCtx = Object.assign({ + count: styleCount++, + tag: 'style' + }, compilerContext); + + let origText = $(el).text(); + let newText = that.compileBlockSync(origText, filePath, mimeType, thisCtx); + + if (origText !== newText) { + $(el).text(newText); + $(el).attr('type', 'text/css'); + } + }); + + return function (_x9, _x10) { + return _ref4.apply(this, arguments); + }; + })()); + + let scriptCount = 0; + this.eachSync($('script'), (() => { + var _ref5 = _asyncToGenerator(function* (i, el) { + let src = $(el).attr('src'); + if (src && src.length > 2) { + $(el).attr('src', InlineHtmlCompiler.fixupRelativeUrl(src)); + return; + } + + let thisCtx = Object.assign({ + count: scriptCount++, + tag: 'script' + }, compilerContext); + + let mimeType = $(el).attr('type'); + + let oldText = $(el).text(); + let newText = that.compileBlockSync(oldText, filePath, mimeType, thisCtx); + + if (oldText !== newText) { + $(el).text(newText); + $(el).attr('type', 'application/javascript'); + } + }); + + return function (_x11, _x12) { + return _ref5.apply(this, arguments); + }; + })()); + + $('link').map((i, el) => { + let href = $(el).attr('href'); + if (href && href.length > 2) { + $(el).attr('href', InlineHtmlCompiler.fixupRelativeUrl(href)); + } + + // NB: In recent versions of Chromium, the link type MUST be text/css or + // it will be flat-out ignored. Also I hate myself for hardcoding these. + let type = $(el).attr('type'); + if (compiledCSS[type]) $(el).attr('type', 'text/css'); + }); + + $('x-require').map((i, el) => { + let src = $(el).attr('src'); + + // File URL? Bail + if (src.match(/^file:/i)) return; + + // Absolute path? Bail. + if (src.match(/^([\/]|[A-Za-z]:)/i)) return; + + try { + $(el).attr('src', _path2.default.resolve(_path2.default.dirname(filePath), src)); + } catch (e) { + $(el).text(`${e.message}\n${e.stack}`); + } + }); + + return { + code: $.html(), + mimeType: 'text/html' + }; + } + + getCompilerVersion() { + let thisVersion = require('../../package.json').version; + let compilers = this.allCompilers || []; + let otherVersions = compilers.map(x => x.getCompilerVersion).join(); + + return `${thisVersion},${otherVersions}`; + } + + static fixupRelativeUrl(url) { + if (!url.match(/^\/\//)) return url; + return `https:${url}`; + } +} +exports.default = InlineHtmlCompiler; +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9odG1sL2lubGluZS1odG1sLmpzIl0sIm5hbWVzIjpbImlucHV0TWltZVR5cGVzIiwiY2hlZXJpbyIsImQiLCJyZXF1aXJlIiwiY29tcGlsZWRDU1MiLCJJbmxpbmVIdG1sQ29tcGlsZXIiLCJjb25zdHJ1Y3RvciIsImNvbXBpbGVCbG9jayIsImNvbXBpbGVCbG9ja1N5bmMiLCJjcmVhdGVGcm9tQ29tcGlsZXJzIiwiY29tcGlsZXJzQnlNaW1lVHlwZSIsIkpTT04iLCJzdHJpbmdpZnkiLCJPYmplY3QiLCJrZXlzIiwic291cmNlQ29kZSIsImZpbGVQYXRoIiwibWltZVR5cGUiLCJjdHgiLCJyZWFsVHlwZSIsInRhZyIsImNvbXBpbGVyIiwiZXh0IiwiZXh0ZW5zaW9uIiwiZmFrZUZpbGUiLCJjb3VudCIsInNob3VsZENvbXBpbGVGaWxlIiwiY29tcGlsZVN5bmMiLCJjb2RlIiwic2hvdWxkQ29tcGlsZUZpbGVTeW5jIiwiZ2V0SW5wdXRNaW1lVHlwZXMiLCJmaWxlTmFtZSIsImNvbXBpbGVyQ29udGV4dCIsImRldGVybWluZURlcGVuZGVudEZpbGVzIiwiZWFjaCIsIm5vZGVzIiwic2VsZWN0b3IiLCJhY2MiLCJpIiwiZWwiLCJwcm9taXNlIiwicHVzaCIsIlByb21pc2UiLCJhbGwiLCJlYWNoU3luYyIsImNvbXBpbGUiLCIkIiwibG9hZCIsImxvd2VyQ2FzZUF0dHJpYnV0ZU5hbWVzIiwidG9XYWl0IiwidGhhdCIsInN0eWxlQ291bnQiLCJhdHRyIiwidGhpc0N0eCIsImFzc2lnbiIsIm9yaWdUZXh0IiwidGV4dCIsIm5ld1RleHQiLCJzY3JpcHRDb3VudCIsInNyYyIsImxlbmd0aCIsImZpeHVwUmVsYXRpdmVVcmwiLCJtYXAiLCJocmVmIiwidHlwZSIsIm1hdGNoIiwicmVzb2x2ZSIsImRpcm5hbWUiLCJlIiwibWVzc2FnZSIsInN0YWNrIiwiaHRtbCIsImRldGVybWluZURlcGVuZGVudEZpbGVzU3luYyIsIm9sZFRleHQiLCJnZXRDb21waWxlclZlcnNpb24iLCJ0aGlzVmVyc2lvbiIsInZlcnNpb24iLCJjb21waWxlcnMiLCJhbGxDb21waWxlcnMiLCJvdGhlclZlcnNpb25zIiwieCIsImpvaW4iLCJ1cmwiXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBOzs7O0FBQ0E7Ozs7QUFDQTs7Ozs7O0FBRUEsTUFBTUEsaUJBQWlCLENBQUMsV0FBRCxDQUF2QjtBQUNBLElBQUlDLFVBQVUsSUFBZDs7QUFFQSxNQUFNQyxJQUFJQyxRQUFRLE9BQVIsRUFBaUIsOEJBQWpCLENBQVY7O0FBRUEsTUFBTUMsY0FBYztBQUNsQixlQUFhLElBREs7QUFFbEIsZUFBYSxJQUZLO0FBR2xCLGVBQWEsSUFISztBQUlsQixpQkFBZTtBQUpHLENBQXBCOztBQU9BOzs7QUFHZSxNQUFNQyxrQkFBTixvQ0FBOEM7QUFDM0RDLGNBQVlDLFlBQVosRUFBMEJDLGdCQUExQixFQUE0QztBQUMxQzs7QUFFQSxTQUFLRCxZQUFMLEdBQW9CQSxZQUFwQjtBQUNBLFNBQUtDLGdCQUFMLEdBQXdCQSxnQkFBeEI7QUFDRDs7QUFFRCxTQUFPQyxtQkFBUCxDQUEyQkMsbUJBQTNCLEVBQWdEO0FBQzlDUixNQUFHLHFDQUFvQ1MsS0FBS0MsU0FBTCxDQUFlQyxPQUFPQyxJQUFQLENBQVlKLG1CQUFaLENBQWYsQ0FBaUQsRUFBeEY7O0FBRUEsUUFBSUg7QUFBQSxtQ0FBZSxXQUFPUSxVQUFQLEVBQW1CQyxRQUFuQixFQUE2QkMsUUFBN0IsRUFBdUNDLEdBQXZDLEVBQStDO0FBQ2hFLFlBQUlDLFdBQVdGLFFBQWY7QUFDQSxZQUFJLENBQUNBLFFBQUQsSUFBYUMsSUFBSUUsR0FBSixLQUFZLFFBQTdCLEVBQXVDRCxXQUFXLHdCQUFYOztBQUV2QyxZQUFJLENBQUNBLFFBQUwsRUFBZSxPQUFPSixVQUFQOztBQUVmLFlBQUlNLFdBQVdYLG9CQUFvQlMsUUFBcEIsS0FBaUNULG9CQUFvQixZQUFwQixDQUFoRDtBQUNBLFlBQUlZLE1BQU0sb0JBQVVDLFNBQVYsQ0FBb0JKLFFBQXBCLENB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c291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgbWltZVR5cGVzIGZyb20gJ0BwYXVsY2JldHRzL21pbWUtdHlwZXMnO1xuaW1wb3J0IHtDb21waWxlckJhc2V9IGZyb20gJy4uL2NvbXBpbGVyLWJhc2UnO1xuXG5jb25zdCBpbnB1dE1pbWVUeXBlcyA9IFsndGV4dC9odG1sJ107XG5sZXQgY2hlZXJpbyA9IG51bGw7XG5cbmNvbnN0IGQgPSByZXF1aXJlKCdkZWJ1ZycpKCdlbGVjdHJvbi1jb21waWxlOmlubGluZS1odG1sJyk7XG5cbmNvbnN0IGNvbXBpbGVkQ1NTID0ge1xuICAndGV4dC9sZXNzJzogdHJ1ZSxcbiAgJ3RleHQvc2Nzcyc6IHRydWUsXG4gICd0ZXh0L3Nhc3MnOiB0cnVlLFxuICAndGV4dC9zdHlsdXMnOiB0cnVlLFxufTtcblxuLyoqXG4gKiBAYWNjZXNzIHByaXZhdGVcbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSW5saW5lSHRtbENvbXBpbGVyIGV4dGVuZHMgQ29tcGlsZXJCYXNlIHtcbiAgY29uc3RydWN0b3IoY29tcGlsZUJsb2NrLCBjb21waWxlQmxvY2tTeW5jKSB7XG4gICAgc3VwZXIoKTtcblxuICAgIHRoaXMuY29tcGlsZUJsb2NrID0gY29tcGlsZUJsb2NrO1xuICAgIHRoaXMuY29tcGlsZUJsb2NrU3luYyA9IGNvbXBpbGVCbG9ja1N5bmM7XG4gIH1cblxuICBzdGF0aWMgY3JlYXRlRnJvbUNvbXBpbGVycyhjb21waWxlcnNCeU1pbWVUeXBlKSB7XG4gICAgZChgU2V0dGluZyB1cCBpbmxpbmUgSFRNTCBjb21waWxlcnM6ICR7SlNPTi5zdHJpbmdpZnkoT2JqZWN0LmtleXMoY29tcGlsZXJzQnlNaW1lVHlwZSkpfWApO1xuXG4gICAgbGV0IGNvbXBpbGVCbG9jayA9IGFzeW5jIChzb3VyY2VDb2RlLCBmaWxlUGF0aCwgbWltZVR5cGUsIGN0eCkgPT4ge1xuICAgICAgbGV0IHJlYWxUeXBlID0gbWltZVR5cGU7XG4gICAgICBpZiAoIW1pbWVUeXBlICYmIGN0eC50YWcgPT09ICdzY3JpcHQnKSByZWFsVHlwZSA9ICdhcHBsaWNhdGlvbi9qYXZhc2NyaXB0JztcblxuICAgICAgaWYgKCFyZWFsVHlwZSkgcmV0dXJuIHNvdXJjZUNvZGU7XG5cbiAgICAgIGxldCBjb21waWxlciA9IGNvbXBpbGVyc0J5TWltZVR5cGVbcmVhbFR5cGVdIHx8IGNvbXBpbGVyc0J5TWltZVR5cGVbJ3RleHQvcGxhaW4nXTtcbiAgICAgIGxldCBleHQgPSBtaW1lVHlwZXMuZXh0ZW5zaW9uKHJlYWxUeXBlKTtcbiAgICAgIGxldCBmYWtlRmlsZSA9IGAke2ZpbGVQYXRofTppbmxpbmVfJHtjdHguY291bnR9LiR7ZXh0fWA7XG5cbiAgICAgIGQoYENvbXBpbGluZyBpbmxpbmUgYmxvY2sgZm9yICR7ZmlsZVBhdGh9IHdpdGggbWltZVR5cGUgJHttaW1lVHlwZX1gKTtcbiAgICAgIGlmICghKGF3YWl0IGNvbXBpbGVyLnNob3VsZENvbXBpbGVGaWxlKGZha2VGaWxlLCBjdHgpKSkgcmV0dXJuIHNvdXJjZUNvZGU7XG4gICAgICByZXR1cm4gKGF3YWl0IGNvbXBpbGVyLmNvbXBpbGVTeW5jKHNvdXJjZUNvZGUsIGZha2VGaWxlLCBjdHgpKS5jb2RlO1xuICAgIH07XG5cbiAgICBsZXQgY29tcGlsZUJsb2NrU3luYyA9IChzb3VyY2VDb2RlLCBmaWxlUGF0aCwgbWltZVR5cGUsIGN0eCkgPT4ge1xuICAgICAgbGV0IHJlYWxUeXBlID0gbWltZVR5cGU7XG4gICAgICBpZiAoIW1pbWVUeXBlICYmIGN0eC50YWcgPT09ICdzY3JpcHQnKSByZWFsVHlwZSA9ICdhcHBsaWNhdGlvbi9qYXZhc2NyaXB0JztcblxuICAgICAgaWYgKCFyZWFsVHlwZSkgcmV0dXJuIHNvdXJjZUNvZGU7XG5cbiAgICAgIGxldCBjb21waWxlciA9IGNvbXBpbGVyc0J5TWltZVR5cGVbcmVhbFR5cGVdIHx8IGNvbXBpbGVyc0J5TWltZVR5cGVbJ3RleHQvcGxhaW4nXTtcbiAgICAgIGxldCBleHQgPSBtaW1lVHlwZXMuZXh0ZW5zaW9uKHJlYWxUeXBlKTtcbiAgICAgIGxldCBmYWtlRmlsZSA9IGAke2ZpbGVQYXRofTppbmxpbmVfJHtjdHguY291bnR9LiR7ZXh0fWA7XG5cbiAgICAgIGQoYENvbXBpbGluZyBpbmxpbmUgYmxvY2sgZm9yICR7ZmlsZVBhdGh9IHdpdGggbWltZVR5cGUgJHttaW1lVHlwZX1gKTtcbiAgICAgIGlmICghY29tcGlsZXIuc2hvdWxkQ29tcGlsZUZpbGVTeW5jKGZha2VGaWxlLCBjdHgpKSByZXR1cm4gc291cmNlQ29kZTtcbiAgICAgIHJldHVybiBjb21waWxlci5jb21waWxlU3luYyhzb3VyY2VDb2RlLCBmYWtlRmlsZSwgY3R4KS5jb2RlO1xuICAgIH07XG5cbiAgICByZXR1cm4gbmV3IElubGluZUh0bWxDb21waWxlcihjb21waWxlQmxvY2ssIGNvbXBpbGVCbG9ja1N5bmMpO1xuICB9XG5cbiAgc3RhdGljIGdldElucHV0TWltZVR5cGVzKCkge1xuICAgIHJldHVybiBpbnB1dE1pbWVUeXBlcztcbiAgfVxuXG4gIGFzeW5jIHNob3VsZENvbXBpbGVGaWxlKGZpbGVOYW1lLCBjb21waWxlckNvbnRleHQpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGFzeW5jIGRldGVybWluZURlcGVuZGVudEZpbGVzKHNvdXJjZUNvZGUsIGZpbGVQYXRoLCBjb21waWxlckNvbnRleHQpIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICBhc3luYyBlYWNoKG5vZGVzLCBzZWxlY3Rvcikge1xuICAgIGxldCBhY2MgPSBbXTtcbiAgICBub2Rlcy5lYWNoKChpLCBlbCkgPT4ge1xuICAgICAgbGV0IHByb21pc2UgPSBzZWxlY3RvcihpLGVsKTtcbiAgICAgIGlmICghcHJvbWlzZSkgcmV0dXJuIGZhbHNlO1xuXG4gICAgICBhY2MucHVzaChwcm9taXNlKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0pO1xuXG4gICAgYXdhaXQgUHJvbWlzZS5hbGwoYWNjKTtcbiAgfVxuXG4gIGVhY2hTeW5jKG5vZGVzLCBzZWxlY3Rvcikge1xuICAgIC8vIE5COiBUaGlzIG1ldGhvZCBpcyBoZXJlIGp1c3Qgc28gaXQncyBlYXNpZXIgdG8gbWVjaGFuaWNhbGx5XG4gICAgLy8gdHJhbnNsYXRlIHRoZSBhc3luYyBjb21waWxlIHRvIGNvbXBpbGVTeW5jXG4gICAgcmV0dXJuIG5vZGVzLmVhY2goKGksZWwpID0+IHtcbiAgICAgIHNlbGVjdG9yKGksZWwpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBjb21waWxlKHNvdXJjZUNvZGUsIGZpbGVQYXRoLCBjb21waWxlckNvbnRleHQpIHtcbiAgICBjaGVlcmlvID0gY2hlZXJpbyB8fCByZXF1aXJlKCdjaGVlcmlvJyk7XG4gICAgXG4gICAgLy9MZWF2ZSB0aGUgYXR0cmlidXRlcyBjYXNpbmcgYXMgaXQgaXMsIGJlY2F1c2Ugb2YgQW5ndWxhciAyIGFuZCBtYXliZSBvdGhlciBjYXNlLXNlbnNpdGl2ZSBmcmFtZXdvcmtzXG4gICAgbGV0ICQgPSBjaGVlcmlvLmxvYWQoc291cmNlQ29kZSwge2xvd2VyQ2FzZUF0dHJpYnV0ZU5hbWVzOiBmYWxzZX0pO1xuICAgIGxldCB0b1dhaXQgPSBbXTtcblxuICAgIGxldCB0aGF0ID0gdGhpcztcbiAgICBsZXQgc3R5bGVDb3VudCA9IDA7XG4gICAgdG9XYWl0LnB1c2godGhpcy5lYWNoKCQoJ3N0eWxlJyksIGFzeW5jIChpLCBlbCkgPT4ge1xuICAgICAgbGV0IG1pbWVUeXBlID0gJChlbCkuYXR0cigndHlwZScpIHx8ICd0ZXh0L3BsYWluJztcblxuICAgICAgbGV0IHRoaXNDdHggPSBPYmplY3QuYXNzaWduKHtcbiAgICAgICAgY291bnQ6IHN0eWxlQ291bnQrKyxcbiAgICAgICAgdGFnOiAnc3R5bGUnXG4gICAgICB9LCBjb21waWxlckNvbnRleHQpO1xuXG4gICAgICBsZXQgb3JpZ1RleHQgPSAkKGVsKS50ZXh0KCk7XG4gICAgICBsZXQgbmV3VGV4dCA9IGF3YWl0IHRoYXQuY29tcGlsZUJsb2NrKG9yaWdUZXh0LCBmaWxlUGF0aCwgbWltZVR5cGUsIHRoaXNDdHgpO1xuXG4gICAgICBpZiAob3JpZ1RleHQgIT09IG5ld1RleHQpIHtcbiAgICAgICAgJChlbCkudGV4dChuZXdUZXh0KTtcbiAgICAgICAgJChlbCkuYXR0cigndHlwZScsICd0ZXh0L2NzcycpO1xuICAgICAgfVxuICAgIH0pKTtcblxuICAgIGxldCBzY3JpcHRDb3VudCA9IDA7XG4gICAgdG9XYWl0LnB1c2godGhpcy5lYWNoKCQoJ3NjcmlwdCcpLCBhc3luYyAoaSwgZWwpID0+IHtcbiAgICAgIGxldCBzcmMgPSAkKGVsKS5hdHRyKCdzcmMnKTtcbiAgICAgIGlmIChzcmMgJiYgc3JjLmxlbmd0aCA+IDIpIHtcbiAgICAgICAgJChlbCkuYXR0cignc3JjJywgSW5saW5lSHRtbENvbXBpbGVyLmZpeHVwUmVsYXRpdmVVcmwoc3JjKSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgbGV0IHRoaXNDdHggPSBPYmplY3QuYXNzaWduKHtcbiAgICAgICAgY291bnQ6IHNjcmlwdENvdW50KyssXG4gICAgICAgIHRhZzogJ3NjcmlwdCdcbiAgICAgIH0sIGNvbXBpbGVyQ29udGV4dCk7XG5cbiAgICAgIGxldCBtaW1lVHlwZSA9ICQoZWwpLmF0dHIoJ3R5cGUnKSB8fCAnYXBwbGljYXRpb24vamF2YXNjcmlwdCc7XG4gICAgICBsZXQgb3JpZ1RleHQgPSAkKGVsKS50ZXh0KCk7XG4gICAgICBsZXQgbmV3VGV4dCA9IGF3YWl0IHRoYXQuY29tcGlsZUJsb2NrKG9yaWdUZXh0LCBmaWxlUGF0aCwgbWltZVR5cGUsIHRoaXNDdHgpO1xuXG4gICAgICBpZiAob3JpZ1RleHQgIT09IG5ld1RleHQpIHtcbiAgICAgICAgJChlbCkudGV4dChuZXdUZXh0KTtcbiAgICAgICAgJChlbCkuYXR0cigndHlwZScsICdhcHBsaWNhdGlvbi9qYXZhc2NyaXB0Jyk7XG4gICAgICB9XG4gICAgfSkpO1xuXG4gICAgJCgnbGluaycpLm1hcCgoaSwgZWwpID0+IHtcbiAgICAgIGxldCBocmVmID0gJChlbCkuYXR0cignaHJlZicpO1xuICAgICAgaWYgKGhyZWYgJiYgaHJlZi5sZW5ndGggPiAyKSB7ICQoZWwpLmF0dHIoJ2hyZWYnLCBJbmxpbmVIdG1sQ29tcGlsZXIuZml4dXBSZWxhdGl2ZVVybChocmVmKSk7IH1cblxuICAgICAgLy8gTkI6IEluIHJlY2VudCB2ZXJzaW9ucyBvZiBDaHJvbWl1bSwgdGhlIGxpbmsgdHlwZSBNVVNUIGJlIHRleHQvY3NzIG9yXG4gICAgICAvLyBpdCB3aWxsIGJlIGZsYXQtb3V0IGlnbm9yZWQuIEFsc28gSSBoYXRlIG15c2VsZiBmb3IgaGFyZGNvZGluZyB0aGVzZS5cbiAgICAgIGxldCB0eXBlID0gJChlbCkuYXR0cigndHlwZScpO1xuICAgICAgaWYgKGNvbXBpbGVkQ1NTW3R5cGVdKSAkKGVsKS5hdHRyKCd0eXBlJywgJ3RleHQvY3NzJyk7XG4gICAgfSk7XG5cbiAgICAkKCd4LXJlcXVpcmUnKS5tYXAoKGksIGVsKSA9PiB7XG4gICAgICBsZXQgc3JjID0gJChlbCkuYXR0cignc3JjJyk7XG5cbiAgICAgIC8vIEZpbGUgVVJMPyBCYWlsXG4gICAgICBpZiAoc3JjLm1hdGNoKC9eZmlsZTovaSkpIHJldHVybjtcblxuICAgICAgLy8gQWJzb2x1dGUgcGF0aD8gQmFpbC5cbiAgICAgIGlmIChzcmMubWF0Y2goL14oW1xcL118W0EtWmEtel06KS9pKSkgcmV0dXJuO1xuXG4gICAgICB0cnkge1xuICAgICAgICAkKGVsKS5hdHRyKCdzcmMnLCBwYXRoLnJlc29sdmUocGF0aC5kaXJuYW1lKGZpbGVQYXRoKSwgc3JjKSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICQoZWwpLnRleHQoYCR7ZS5tZXNzYWdlfVxcbiR7ZS5zdGFja31gKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGF3YWl0IFByb21pc2UuYWxsKHRvV2FpdCk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgY29kZTogJC5odG1sKCksXG4gICAgICBtaW1lVHlwZTogJ3RleHQvaHRtbCdcbiAgICB9O1xuICB9XG5cbiAgc2hvdWxkQ29tcGlsZUZpbGVTeW5jKGZpbGVOYW1lLCBjb21waWxlckNvbnRleHQpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGRldGVybWluZURlcGVuZGVudEZpbGVzU3luYyhzb3VyY2VDb2RlLCBmaWxlUGF0aCwgY29tcGlsZXJDb250ZXh0KSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgY29tcGlsZVN5bmMoc291cmNlQ29kZSwgZmlsZVBhdGgsIGNvbXBpbGVyQ29udGV4dCkge1xuICAgIGNoZWVyaW8gPSBjaGVlcmlvIHx8IHJlcXVpcmUoJ2NoZWVyaW8nKTtcbiAgICBcbiAgICAvL0xlYXZlIHRoZSBhdHRyaWJ1dGVzIGNhc2luZyBhcyBpdCBpcywgYmVjYXVzZSBvZiBBbmd1bGFyIDIgYW5kIG1heWJlIG90aGVyIGNhc2Utc2Vuc2l0aXZlIGZyYW1ld29ya3NcbiAgICBsZXQgJCA9IGNoZWVyaW8ubG9hZChzb3VyY2VDb2RlLCB7bG93ZXJDYXNlQXR0cmlidXRlTmFtZXM6IGZhbHNlfSk7XG5cbiAgICBsZXQgdGhhdCA9IHRoaXM7XG4gICAgbGV0IHN0eWxlQ291bnQgPSAwO1xuICAgIHRoaXMuZWFjaFN5bmMoJCgnc3R5bGUnKSwgYXN5bmMgKGksIGVsKSA9PiB7XG4gICAgICBsZXQgbWltZVR5cGUgPSAkKGVsKS5hdHRyKCd0eXBlJyk7XG5cbiAgICAgIGxldCB0aGlzQ3R4ID0gT2JqZWN0LmFzc2lnbih7XG4gICAgICAgIGNvdW50OiBzdHlsZUNvdW50KyssXG4gICAgICAgIHRhZzogJ3N0eWxlJ1xuICAgICAgfSwgY29tcGlsZXJDb250ZXh0KTtcblxuICAgICAgbGV0IG9yaWdUZXh0ID0gJChlbCkudGV4dCgpO1xuICAgICAgbGV0IG5ld1RleHQgPSB0aGF0LmNvbXBpbGVCbG9ja1N5bmMob3JpZ1RleHQsIGZpbGVQYXRoLCBtaW1lVHlwZSwgdGhpc0N0eCk7XG5cbiAgICAgIGlmIChvcmlnVGV4dCAhPT0gbmV3VGV4dCkge1xuICAgICAgICAkKGVsKS50ZXh0KG5ld1RleHQpO1xuICAgICAgICAkKGVsKS5hdHRyKCd0eXBlJywgJ3RleHQvY3NzJyk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBsZXQgc2NyaXB0Q291bnQgPSAwO1xuICAgIHRoaXMuZWFjaFN5bmMoJCgnc2NyaXB0JyksIGFzeW5jIChpLCBlbCkgPT4ge1xuICAgICAgbGV0IHNyYyA9ICQoZWwpLmF0dHIoJ3NyYycpO1xuICAgICAgaWYgKHNyYyAmJiBzcmMubGVuZ3RoID4gMikge1xuICAgICAgICAkKGVsKS5hdHRyKCdzcmMnLCBJbmxpbmVIdG1sQ29tcGlsZXIuZml4dXBSZWxhdGl2ZVVybChzcmMpKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBsZXQgdGhpc0N0eCA9IE9iamVjdC5hc3NpZ24oe1xuICAgICAgICBjb3VudDogc2NyaXB0Q291bnQrKyxcbiAgICAgICAgdGFnOiAnc2NyaXB0J1xuICAgICAgfSwgY29tcGlsZXJDb250ZXh0KTtcblxuICAgICAgbGV0IG1pbWVUeXBlID0gJChlbCkuYXR0cigndHlwZScpO1xuXG4gICAgICBsZXQgb2xkVGV4dCA9ICQoZWwpLnRleHQoKTtcbiAgICAgIGxldCBuZXdUZXh0ID0gdGhhdC5jb21waWxlQmxvY2tTeW5jKG9sZFRleHQsIGZpbGVQYXRoLCBtaW1lVHlwZSwgdGhpc0N0eCk7XG5cbiAgICAgIGlmIChvbGRUZXh0ICE9PSBuZXdUZXh0KSB7XG4gICAgICAgICQoZWwpLnRleHQobmV3VGV4dCk7XG4gICAgICAgICQoZWwpLmF0dHIoJ3R5cGUnLCAnYXBwbGljYXRpb24vamF2YXNjcmlwdCcpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgJCgnbGluaycpLm1hcCgoaSwgZWwpID0+IHtcbiAgICAgIGxldCBocmVmID0gJChlbCkuYXR0cignaHJlZicpO1xuICAgICAgaWYgKGhyZWYgJiYgaHJlZi5sZW5ndGggPiAyKSB7ICQoZWwpLmF0dHIoJ2hyZWYnLCBJbmxpbmVIdG1sQ29tcGlsZXIuZml4dXBSZWxhdGl2ZVVybChocmVmKSk7IH1cblxuICAgICAgLy8gTkI6IEluIHJlY2VudCB2ZXJzaW9ucyBvZiBDaHJvbWl1bSwgdGhlIGxpbmsgdHlwZSBNVVNUIGJlIHRleHQvY3NzIG9yXG4gICAgICAvLyBpdCB3aWxsIGJlIGZsYXQtb3V0IGlnbm9yZWQuIEFsc28gSSBoYXRlIG15c2VsZiBmb3IgaGFyZGNvZGluZyB0aGVzZS5cbiAgICAgIGxldCB0eXBlID0gJChlbCkuYXR0cigndHlwZScpO1xuICAgICAgaWYgKGNvbXBpbGVkQ1NTW3R5cGVdKSAkKGVsKS5hdHRyKCd0eXBlJywgJ3RleHQvY3NzJyk7XG4gICAgfSk7XG5cbiAgICAkKCd4LXJlcXVpcmUnKS5tYXAoKGksIGVsKSA9PiB7XG4gICAgICBsZXQgc3JjID0gJChlbCkuYXR0cignc3JjJyk7XG5cbiAgICAgIC8vIEZpbGUgVVJMPyBCYWlsXG4gICAgICBpZiAoc3JjLm1hdGNoKC9eZmlsZTovaSkpIHJldHVybjtcblxuICAgICAgLy8gQWJzb2x1dGUgcGF0aD8gQmFpbC5cbiAgICAgIGlmIChzcmMubWF0Y2goL14oW1xcL118W0EtWmEtel06KS9pKSkgcmV0dXJuO1xuXG4gICAgICB0cnkge1xuICAgICAgICAkKGVsKS5hdHRyKCdzcmMnLCBwYXRoLnJlc29sdmUocGF0aC5kaXJuYW1lKGZpbGVQYXRoKSwgc3JjKSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICQoZWwpLnRleHQoYCR7ZS5tZXNzYWdlfVxcbiR7ZS5zdGFja31gKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiB7XG4gICAgICBjb2RlOiAkLmh0bWwoKSxcbiAgICAgIG1pbWVUeXBlOiAndGV4dC9odG1sJ1xuICAgIH07XG4gIH1cblxuICBnZXRDb21waWxlclZlcnNpb24oKSB7XG4gICAgbGV0IHRoaXNWZXJzaW9uID0gcmVxdWlyZSgnLi4vLi4vcGFja2FnZS5qc29uJykudmVyc2lvbjtcbiAgICBsZXQgY29tcGlsZXJzID0gdGhpcy5hbGxDb21waWxlcnMgfHwgW107XG4gICAgbGV0IG90aGVyVmVyc2lvbnMgPSBjb21waWxlcnMubWFwKCh4KSA9PiB4LmdldENvbXBpbGVyVmVyc2lvbikuam9pbigpO1xuXG4gICAgcmV0dXJuIGAke3RoaXNWZXJzaW9ufSwke290aGVyVmVyc2lvbnN9YDtcbiAgfVxuXG4gIHN0YXRpYyBmaXh1cFJlbGF0aXZlVXJsKHVybCkge1xuICAgIGlmICghdXJsLm1hdGNoKC9eXFwvXFwvLykpIHJldHVybiB1cmw7XG4gICAgcmV0dXJuIGBodHRwczoke3VybH1gO1xuICB9XG59XG4iXX0= \ No newline at end of file diff --git a/lib/html/jade.js b/lib/html/jade.js new file mode 100644 index 0000000..feb9fe5 --- /dev/null +++ b/lib/html/jade.js @@ -0,0 +1,38 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _compilerBase = require('../compiler-base'); + +const inputMimeTypes = ['text/jade']; +let jade = null; + +/** + * @access private + */ +class JadeCompiler extends _compilerBase.SimpleCompilerBase { + constructor() { + super(); + this.compilerOptions.sourceMap = true; + } + + static getInputMimeTypes() { + return inputMimeTypes; + } + + compileSync(sourceCode, filePath) { + jade = jade || require('jade'); + + let code = jade.render(sourceCode, Object.assign({ filename: filePath, cache: false }, this.compilerOptions)); + + return { code, mimeType: 'text/html' }; + } + + getCompilerVersion() { + return require('jade/package.json').version; + } +} +exports.default = JadeCompiler; +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9odG1sL2phZGUuanMiXSwibmFtZXMiOlsiaW5wdXRNaW1lVHlwZXMiLCJqYWRlIiwiSmFkZUNvbXBpbGVyIiwiY29uc3RydWN0b3IiLCJjb21waWxlck9wdGlvbnMiLCJzb3VyY2VNYXAiLCJnZXRJbnB1dE1pbWVUeXBlcyIsImNvbXBpbGVTeW5jIiwic291cmNlQ29kZSIsImZpbGVQYXRoIiwicmVxdWlyZSIsImNvZGUiLCJyZW5kZXIiLCJPYmplY3QiLCJhc3NpZ24iLCJmaWxlbmFtZSIsImNhY2hlIiwibWltZVR5cGUiLCJnZXRDb21waWxlclZlcnNpb24iLCJ2ZXJzaW9uIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQTs7QUFFQSxNQUFNQSxpQkFBaUIsQ0FBQyxXQUFELENBQXZCO0FBQ0EsSUFBSUMsT0FBTyxJQUFYOztBQUVBOzs7QUFHZSxNQUFNQyxZQUFOLDBDQUE4QztBQUMzREMsZ0JBQWM7QUFDWjtBQUNBLFNBQUtDLGVBQUwsQ0FBcUJDLFNBQXJCLEdBQWlDLElBQWpDO0FBQ0Q7O0FBRUQsU0FBT0MsaUJBQVAsR0FBMkI7QUFDekIsV0FBT04sY0FBUDtBQUNEOztBQUVETyxjQUFZQyxVQUFaLEVBQXdCQyxRQUF4QixFQUFrQztBQUNoQ1IsV0FBT0EsUUFBUVMsUUFBUSxNQUFSLENBQWY7O0FBRUEsUUFBSUMsT0FBT1YsS0FBS1csTUFBTCxDQUNUSixVQURTLEVBRVRLLE9BQU9DLE1BQVAsQ0FBYyxFQUFFQyxVQUFVTixRQUFaLEVBQXNCTyxPQUFPLEtBQTdCLEVBQWQsRUFBb0QsS0FBS1osZUFBekQsQ0FGUyxDQUFYOztBQUlBLFdBQU8sRUFBRU8sSUFBRixFQUFRTSxVQUFVLFdBQWxCLEVBQVA7QUFDRDs7QUFFREMsdUJBQXFCO0FBQ25CLFdBQU9SLFFBQVEsbUJBQVIsRUFBNkJTLE9BQXBDO0FBQ0Q7QUF0QjBEO2tCQUF4Q2pCLFkiLCJmaWxlIjoiamFkZS5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7U2ltcGxlQ29tcGlsZXJCYXNlfSBmcm9tICcuLi9jb21waWxlci1iYXNlJztcblxuY29uc3QgaW5wdXRNaW1lVHlwZXMgPSBbJ3RleHQvamFkZSddO1xubGV0IGphZGUgPSBudWxsO1xuXG4vKipcbiAqIEBhY2Nlc3MgcHJpdmF0ZVxuICovIFxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSmFkZUNvbXBpbGVyIGV4dGVuZHMgU2ltcGxlQ29tcGlsZXJCYXNlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmNvbXBpbGVyT3B0aW9ucy5zb3VyY2VNYXAgPSB0cnVlO1xuICB9XG5cbiAgc3RhdGljIGdldElucHV0TWltZVR5cGVzKCkge1xuICAgIHJldHVybiBpbnB1dE1pbWVUeXBlcztcbiAgfVxuXG4gIGNvbXBpbGVTeW5jKHNvdXJjZUNvZGUsIGZpbGVQYXRoKSB7XG4gICAgamFkZSA9IGphZGUgfHwgcmVxdWlyZSgnamFkZScpO1xuXG4gICAgbGV0IGNvZGUgPSBqYWRlLnJlbmRlcihcbiAgICAgIHNvdXJjZUNvZGUsXG4gICAgICBPYmplY3QuYXNzaWduKHsgZmlsZW5hbWU6IGZpbGVQYXRoLCBjYWNoZTogZmFsc2UgfSwgdGhpcy5jb21waWxlck9wdGlvbnMpKTtcblxuICAgIHJldHVybiB7IGNvZGUsIG1pbWVUeXBlOiAndGV4dC9odG1sJyB9O1xuICB9XG4gIFxuICBnZXRDb21waWxlclZlcnNpb24oKSB7XG4gICAgcmV0dXJuIHJlcXVpcmUoJ2phZGUvcGFja2FnZS5qc29uJykudmVyc2lvbjtcbiAgfVxufVxuIl19 \ No newline at end of file diff --git a/lib/html/vue.js b/lib/html/vue.js new file mode 100644 index 0000000..338d11a --- /dev/null +++ b/lib/html/vue.js @@ -0,0 +1,206 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _compilerBase = require('../compiler-base'); + +var _toutsuite = require('toutsuite'); + +var _toutsuite2 = _interopRequireDefault(_toutsuite); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function _asyncToGenerator(fn) { return function () { var gen = fn.apply(this, arguments); return new Promise(function (resolve, reject) { function step(key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { return Promise.resolve(value).then(function (value) { step("next", value); }, function (err) { step("throw", err); }); } } return step("next"); }); }; } + +const inputMimeTypes = ['text/vue']; +let vueify = null; + +const d = require('debug')('electron-compile:vue'); + +const mimeTypeToSimpleType = { + 'text/coffeescript': 'coffee', + 'text/typescript': 'ts', + 'application/javascript': 'js', + 'text/jade': 'jade', + 'text/less': 'less', + 'text/sass': 'sass', + 'text/scss': 'scss', + 'text/stylus': 'stylus' +}; + +/** + * @access private + */ +class VueCompiler extends _compilerBase.CompilerBase { + constructor(asyncCompilers, syncCompilers) { + super(); + Object.assign(this, { asyncCompilers, syncCompilers }); + + this.compilerOptions = {}; + } + + static createFromCompilers(compilersByMimeType) { + let makeAsyncCompilers = () => Object.keys(compilersByMimeType).reduce((acc, mimeType) => { + let compiler = compilersByMimeType[mimeType]; + + acc[mimeType] = (() => { + var _ref = _asyncToGenerator(function* (content, cb, vueCompiler, filePath) { + let ctx = {}; + try { + if (!(yield compiler.shouldCompileFile(filePath, ctx))) { + cb(null, content); + return; + } + + let result = yield compiler.compile(content, filePath, ctx); + cb(null, result.code); + return; + } catch (e) { + cb(e); + } + }); + + return function (_x, _x2, _x3, _x4) { + return _ref.apply(this, arguments); + }; + })(); + + let st = mimeTypeToSimpleType[mimeType]; + if (st) acc[st] = acc[mimeType]; + + return acc; + }, {}); + + let makeSyncCompilers = () => Object.keys(compilersByMimeType).reduce((acc, mimeType) => { + let compiler = compilersByMimeType[mimeType]; + + acc[mimeType] = (content, cb, vueCompiler, filePath) => { + let ctx = {}; + try { + if (!compiler.shouldCompileFileSync(filePath, ctx)) { + cb(null, content); + return; + } + + let result = compiler.compileSync(content, filePath, ctx); + cb(null, result.code); + return; + } catch (e) { + cb(e); + } + }; + + let st = mimeTypeToSimpleType[mimeType]; + if (st) acc[st] = acc[mimeType]; + + return acc; + }, {}); + + // NB: This is super hacky but we have to defer building asyncCompilers + // and syncCompilers until compilersByMimeType is filled out + let ret = new VueCompiler(null, null); + + let asyncCompilers, syncCompilers; + Object.defineProperty(ret, 'asyncCompilers', { + get: () => { + asyncCompilers = asyncCompilers || makeAsyncCompilers(); + return asyncCompilers; + } + }); + + Object.defineProperty(ret, 'syncCompilers', { + get: () => { + syncCompilers = syncCompilers || makeSyncCompilers(); + return syncCompilers; + } + }); + + return ret; + } + + static getInputMimeTypes() { + return inputMimeTypes; + } + + shouldCompileFile(fileName, compilerContext) { + return _asyncToGenerator(function* () { + return true; + })(); + } + + determineDependentFiles(sourceCode, filePath, compilerContext) { + return _asyncToGenerator(function* () { + return []; + })(); + } + + compile(sourceCode, filePath, compilerContext) { + var _this = this; + + return _asyncToGenerator(function* () { + vueify = vueify || require('@paulcbetts/vueify'); + + let opts = Object.assign({}, _this.compilerOptions); + + let code = yield new Promise(function (res, rej) { + vueify.compiler.compileNoGlobals(sourceCode, filePath, _this.asyncCompilers, opts, function (e, r) { + if (e) { + rej(e); + } else { + res(r); + } + }); + }); + + return { + code, + mimeType: 'application/javascript' + }; + })(); + } + + shouldCompileFileSync(fileName, compilerContext) { + return true; + } + + determineDependentFilesSync(sourceCode, filePath, compilerContext) { + return []; + } + + compileSync(sourceCode, filePath, compilerContext) { + vueify = vueify || require('@paulcbetts/vueify'); + + let opts = Object.assign({}, this.compilerOptions); + + let err, code; + (0, _toutsuite2.default)(() => { + vueify.compiler.compileNoGlobals(sourceCode, filePath, this.syncCompilers, opts, (e, r) => { + if (e) { + err = e; + } else { + code = r; + } + }); + }); + + if (err) throw err; + + return { + code, + mimeType: 'application/javascript' + }; + } + + getCompilerVersion() { + // NB: See same issue with SASS and user-scoped modules as to why we hard-code this + let thisVersion = '9.4.0'; + let compilers = this.allCompilers || []; + let otherVersions = compilers.map(x => x.getCompilerVersion).join(); + + return `${thisVersion},${otherVersions}`; + } +} +exports.default = VueCompiler; +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9odG1sL3Z1ZS5qcyJdLCJuYW1lcyI6WyJpbnB1dE1pbWVUeXBlcyIsInZ1ZWlmeSIsImQiLCJyZXF1aXJlIiwibWltZVR5cGVUb1NpbXBsZVR5cGUiLCJWdWVDb21waWxlciIsImNvbnN0cnVjdG9yIiwiYXN5bmNDb21waWxlcnMiLCJzeW5jQ29tcGlsZXJzIiwiT2JqZWN0IiwiYXNzaWduIiwiY29tcGlsZXJPcHRpb25zIiwiY3JlYXRlRnJvbUNvbXBpbGVycyIsImNvbXBpbGVyc0J5TWltZVR5cGUiLCJtYWtlQXN5bmNDb21waWxlcnMiLCJrZXlzIiwicmVkdWNlIiwiYWNjIiwibWltZVR5cGUiLCJjb21waWxlciIsImNvbnRlbnQiLCJjYiIsInZ1ZUNvbXBpbGVyIiwiZmlsZVBhdGgiLCJjdHgiLCJzaG91bGRDb21waWxlRmlsZSIsInJlc3VsdCIsImNvbXBpbGUiLCJjb2RlIiwiZSIsInN0IiwibWFrZVN5bmNDb21waWxlcnMiLCJzaG91bGRDb21waWxlRmlsZVN5bmMiLCJjb21waWxlU3luYyIsInJldCIsImRlZmluZVByb3BlcnR5IiwiZ2V0IiwiZ2V0SW5wdXRNaW1lVHlwZXMiLCJmaWxlTmFtZSIsImNvbXBpbGVyQ29udGV4dCIsImRldGVybWluZURlcGVuZGVudEZpbGVzIiwic291cmNlQ29kZSIsIm9wdHMiLCJQcm9taXNlIiwicmVzIiwicmVqIiwiY29tcGlsZU5vR2xvYmFscyIsInIiLCJkZXRlcm1pbmVEZXBlbmRlbnRGaWxlc1N5bmMiLCJlcnIiLCJnZXRDb21waWxlclZlcnNpb24iLCJ0aGlzVmVyc2lvbiIsImNvbXBpbGVycyIsImFsbENvbXBpbGVycyIsIm90aGVyVmVyc2lvbnMiLCJtYXAiLCJ4Iiwiam9pbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUE7O0FBQ0E7Ozs7Ozs7O0FBRUEsTUFBTUEsaUJBQWlCLENBQUMsVUFBRCxDQUF2QjtBQUNBLElBQUlDLFNBQVMsSUFBYjs7QUFFQSxNQUFNQyxJQUFJQyxRQUFR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QSxRQUFJQyxZQUFZLEtBQUtDLFlBQUwsSUFBcUIsRUFBckM7QUFDQSxRQUFJQyxnQkFBZ0JGLFVBQVVHLEdBQVYsQ0FBZUMsQ0FBRCxJQUFPQSxFQUFFTixrQkFBdkIsRUFBMkNPLElBQTNDLEVBQXBCOztBQUVBLFdBQVEsR0FBRU4sV0FBWSxJQUFHRyxhQUFjLEVBQXZDO0FBQ0Q7QUFqSm1EO2tCQUFqQ2pELFciLCJmaWxlIjoidnVlLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb21waWxlckJhc2V9IGZyb20gJy4uL2NvbXBpbGVyLWJhc2UnO1xuaW1wb3J0IHRvdXRTdWl0ZSBmcm9tICd0b3V0c3VpdGUnO1xuXG5jb25zdCBpbnB1dE1pbWVUeXBlcyA9IFsndGV4dC92dWUnXTtcbmxldCB2dWVpZnkgPSBudWxsO1xuXG5jb25zdCBkID0gcmVxdWlyZSgnZGVidWcnKSgnZWxlY3Ryb24tY29tcGlsZTp2dWUnKTtcblxuY29uc3QgbWltZVR5cGVUb1NpbXBsZVR5cGUgPSB7XG4gICd0ZXh0L2NvZmZlZXNjcmlwdCc6ICdjb2ZmZWUnLFxuICAndGV4dC90eXBlc2NyaXB0JzogJ3RzJyxcbiAgJ2FwcGxpY2F0aW9uL2phdmFzY3JpcHQnOiAnanMnLFxuICAndGV4dC9qYWRlJzogJ2phZGUnLFxuICAndGV4dC9sZXNzJzogJ2xlc3MnLFxuICAndGV4dC9zYXNzJzogJ3Nhc3MnLFxuICAndGV4dC9zY3NzJzogJ3Njc3MnLFxuICAndGV4dC9zdHlsdXMnOiAnc3R5bHVzJyxcbn07XG5cbi8qKlxuICogQGFjY2VzcyBwcml2YXRlXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFZ1ZUNvbXBpbGVyIGV4dGVuZHMgQ29tcGlsZXJCYXNlIHtcbiAgY29uc3RydWN0b3IoYXN5bmNDb21waWxlcnMsIHN5bmNDb21waWxlcnMpIHtcbiAgICBzdXBlcigpO1xuICAgIE9iamVjdC5hc3NpZ24odGhpcywgeyBhc3luY0NvbXBpbGVycywgc3luY0NvbXBpbGVycyB9KTtcblxuICAgIHRoaXMuY29tcGlsZXJPcHRpb25zID0ge307XG4gIH1cblxuICBzdGF0aWMgY3JlYXRlRnJvbUNvbXBpbGVycyhjb21waWxlcnNCeU1pbWVUeXBlKSB7XG4gICAgbGV0IG1ha2VBc3luY0NvbXBpbGVycyA9ICgpID0+IE9iamVjdC5rZXlzKGNvbXBpbGVyc0J5TWltZVR5cGUpLnJlZHVjZSgoYWNjLCBtaW1lVHlwZSkgPT4ge1xuICAgICAgbGV0IGNvbXBpbGVyID0gY29tcGlsZXJzQnlNaW1lVHlwZVttaW1lVHlwZV07XG5cbiAgICAgIGFjY1ttaW1lVHlwZV0gPSBhc3luYyAoY29udGVudCwgY2IsIHZ1ZUNvbXBpbGVyLCBmaWxlUGF0aCkgPT4ge1xuICAgICAgICBsZXQgY3R4ID0ge307XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgaWYgKCFhd2FpdCBjb21waWxlci5zaG91bGRDb21waWxlRmlsZShmaWxlUGF0aCwgY3R4KSkge1xuICAgICAgICAgICAgY2IobnVsbCwgY29udGVudCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbGV0IHJlc3VsdCA9IGF3YWl0IGNvbXBpbGVyLmNvbXBpbGUoY29udGVudCwgZmlsZVBhdGgsIGN0eCk7XG4gICAgICAgICAgY2IobnVsbCwgcmVzdWx0LmNvZGUpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIGNiKGUpO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBsZXQgc3QgPSBtaW1lVHlwZVRvU2ltcGxlVHlwZVttaW1lVHlwZV07XG4gICAgICBpZiAoc3QpIGFjY1tzdF0gPSBhY2NbbWltZVR5cGVdO1xuXG4gICAgICByZXR1cm4gYWNjO1xuICAgIH0sIHt9KTtcblxuICAgIGxldCBtYWtlU3luY0NvbXBpbGVycyA9ICgpID0+IE9iamVjdC5rZXlzKGNvbXBpbGVyc0J5TWltZVR5cGUpLnJlZHVjZSgoYWNjLCBtaW1lVHlwZSkgPT4ge1xuICAgICAgbGV0IGNvbXBpbGVyID0gY29tcGlsZXJzQnlNaW1lVHlwZVttaW1lVHlwZV07XG5cbiAgICAgIGFjY1ttaW1lVHlwZV0gPSAoY29udGVudCwgY2IsIHZ1ZUNvbXBpbGVyLCBmaWxlUGF0aCkgPT4ge1xuICAgICAgICBsZXQgY3R4ID0ge307XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgaWYgKCFjb21waWxlci5zaG91bGRDb21waWxlRmlsZVN5bmMoZmlsZVBhdGgsIGN0eCkpIHtcbiAgICAgICAgICAgIGNiKG51bGwsIGNvbnRlbnQpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGxldCByZXN1bHQgPSBjb21waWxlci5jb21waWxlU3luYyhjb250ZW50LCBmaWxlUGF0aCwgY3R4KTtcbiAgICAgICAgICBjYihudWxsLCByZXN1bHQuY29kZSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgY2IoZSk7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIGxldCBzdCA9IG1pbWVUeXBlVG9TaW1wbGVUeXBlW21pbWVUeXBlXTtcbiAgICAgIGlmIChzdCkgYWNjW3N0XSA9IGFjY1ttaW1lVHlwZV07XG5cbiAgICAgIHJldHVybiBhY2M7XG4gICAgfSwge30pO1xuXG4gICAgLy8gTkI6IFRoaXMgaXMgc3VwZXIgaGFja3kgYnV0IHdlIGhhdmUgdG8gZGVmZXIgYnVpbGRpbmcgYXN5bmNDb21waWxlcnNcbiAgICAvLyBhbmQgc3luY0NvbXBpbGVycyB1bnRpbCBjb21waWxlcnNCeU1pbWVUeXBlIGlzIGZpbGxlZCBvdXRcbiAgICBsZXQgcmV0ID0gbmV3IFZ1ZUNvbXBpbGVyKG51bGwsIG51bGwpO1xuXG4gICAgbGV0IGFzeW5jQ29tcGlsZXJzLCBzeW5jQ29tcGlsZXJzO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyZXQsICdhc3luY0NvbXBpbGVycycsIHtcbiAgICAgIGdldDogKCkgPT4ge1xuICAgICAgICBhc3luY0NvbXBpbGVycyA9IGFzeW5jQ29tcGlsZXJzIHx8IG1ha2VBc3luY0NvbXBpbGVycygpO1xuICAgICAgICByZXR1cm4gYXN5bmNDb21waWxlcnM7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocmV0LCAnc3luY0NvbXBpbGVycycsIHtcbiAgICAgIGdldDogKCkgPT4ge1xuICAgICAgICBzeW5jQ29tcGlsZXJzID0gc3luY0NvbXBpbGVycyB8fCBtYWtlU3luY0NvbXBpbGVycygpO1xuICAgICAgICByZXR1cm4gc3luY0NvbXBpbGVycztcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiByZXQ7XG4gIH1cblxuICBzdGF0aWMgZ2V0SW5wdXRNaW1lVHlwZXMoKSB7XG4gICAgcmV0dXJuIGlucHV0TWltZVR5cGVzO1xuICB9XG5cbiAgYXN5bmMgc2hvdWxkQ29tcGlsZUZpbGUoZmlsZU5hbWUsIGNvbXBpbGVyQ29udGV4dCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgYXN5bmMgZGV0ZXJtaW5lRGVwZW5kZW50RmlsZXMoc291cmNlQ29kZSwgZmlsZVBhdGgsIGNvbXBpbGVyQ29udGV4dCkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIGFzeW5jIGNvbXBpbGUoc291cmNlQ29kZSwgZmlsZVBhdGgsIGNvbXBpbGVyQ29udGV4dCkge1xuICAgIHZ1ZWlmeSA9IHZ1ZWlmeSB8fCByZXF1aXJlKCdAcGF1bGNiZXR0cy92dWVpZnknKTtcblxuICAgIGxldCBvcHRzID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5jb21waWxlck9wdGlvbnMpO1xuXG4gICAgbGV0IGNvZGUgPSBhd2FpdCBuZXcgUHJvbWlzZSgocmVzLCByZWopID0+IHtcbiAgICAgIHZ1ZWlmeS5jb21waWxlci5jb21waWxlTm9HbG9iYWxzKHNvdXJjZUNvZGUsIGZpbGVQYXRoLCB0aGlzLmFzeW5jQ29tcGlsZXJzLCBvcHRzLCAoZSxyKSA9PiB7XG4gICAgICAgIGlmIChlKSB7IHJlaihlKTsgfSBlbHNlIHsgcmVzKHIpOyB9XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHJldHVybiB7XG4gICAgICBjb2RlLFxuICAgICAgbWltZVR5cGU6ICdhcHBsaWNhdGlvbi9qYXZhc2NyaXB0J1xuICAgIH07XG4gIH1cblxuICBzaG91bGRDb21waWxlRmlsZVN5bmMoZmlsZU5hbWUsIGNvbXBpbGVyQ29udGV4dCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgZGV0ZXJtaW5lRGVwZW5kZW50RmlsZXNTeW5jKHNvdXJjZUNvZGUsIGZpbGVQYXRoLCBjb21waWxlckNvbnRleHQpIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICBjb21waWxlU3luYyhzb3VyY2VDb2RlLCBmaWxlUGF0aCwgY29tcGlsZXJDb250ZXh0KSB7XG4gICAgdnVlaWZ5ID0gdnVlaWZ5IHx8IHJlcXVpcmUoJ0BwYXVsY2JldHRzL3Z1ZWlmeScpO1xuXG4gICAgbGV0IG9wdHMgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLmNvbXBpbGVyT3B0aW9ucyk7XG5cbiAgICBsZXQgZXJyLGNvZGU7XG4gICAgdG91dFN1aXRlKCgpID0+IHtcbiAgICAgIHZ1ZWlmeS5jb21waWxlci5jb21waWxlTm9HbG9iYWxzKHNvdXJjZUNvZGUsIGZpbGVQYXRoLCB0aGlzLnN5bmNDb21waWxlcnMsIG9wdHMsIChlLHIpID0+IHtcbiAgICAgICAgaWYgKGUpIHsgZXJyID0gZTsgfSBlbHNlIHsgY29kZSA9IHI7IH1cbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgaWYgKGVycikgdGhyb3cgZXJyO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGNvZGUsXG4gICAgICBtaW1lVHlwZTogJ2FwcGxpY2F0aW9uL2phdmFzY3JpcHQnXG4gICAgfTtcbiAgfVxuXG4gIGdldENvbXBpbGVyVmVyc2lvbigpIHtcbiAgICAvLyBOQjogU2VlIHNhbWUgaXNzdWUgd2l0aCBTQVNTIGFuZCB1c2VyLXNjb3BlZCBtb2R1bGVzIGFzIHRvIHdoeSB3ZSBoYXJkLWNvZGUgdGhpc1xuICAgIGxldCB0aGlzVmVyc2lvbiA9ICc5LjQuMCc7XG4gICAgbGV0IGNvbXBpbGVycyA9IHRoaXMuYWxsQ29tcGlsZXJzIHx8IFtdO1xuICAgIGxldCBvdGhlclZlcnNpb25zID0gY29tcGlsZXJzLm1hcCgoeCkgPT4geC5nZXRDb21waWxlclZlcnNpb24pLmpvaW4oKTtcblxuICAgIHJldHVybiBgJHt0aGlzVmVyc2lvbn0sJHtvdGhlclZlcnNpb25zfWA7XG4gIH1cbn1cbiJdfQ== \ No newline at end of file diff --git a/lib/js/babel.js b/lib/js/babel.js new file mode 100644 index 0000000..da17d95 --- /dev/null +++ b/lib/js/babel.js @@ -0,0 +1,127 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _path = require('path'); + +var _path2 = _interopRequireDefault(_path); + +var _compilerBase = require('../compiler-base'); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +const mimeTypes = ['text/jsx', 'application/javascript']; +let babel = null; +let istanbul = null; + +class BabelCompiler extends _compilerBase.SimpleCompilerBase { + constructor() { + super(); + } + + static getInputMimeTypes() { + return mimeTypes; + } + + // NB: This method exists to stop Babel from trying to load plugins from the + // app's node_modules directory, which in a production app doesn't have Babel + // installed in it. Instead, we try to load from our entry point's node_modules + // directory (i.e. Grunt perhaps), and if it doesn't work, just keep going. + attemptToPreload(names, prefix) { + if (!names.length) return null; + + const fixupModule = exp => { + // NB: Some plugins like transform-decorators-legacy, use import/export + // semantics, and others don't + if ('default' in exp) return exp['default']; + return exp; + }; + + const nodeModulesAboveUs = _path2.default.resolve(__dirname, '..', '..', '..'); + + const preloadStrategies = [x => fixupModule(require.main.require(x)), x => fixupModule(require(_path2.default.join(nodeModulesAboveUs, x))), x => fixupModule(require(x))]; + + const possibleNames = name => { + let names = [`babel-${prefix}-${name}`]; + + if (prefix === 'plugin') { + // Look for module names that do not start with "babel-plugin-" + names.push(name); + } + + return names; + }; + + // Apply one preloading strategy to the possible names of a module, and return the preloaded + // module if found, null otherwise + const preloadPossibleNames = (name, strategy) => { + if (typeof strategy !== 'function') return null; + + return possibleNames(name).reduce((mod, possibleName) => { + if (mod !== null) return mod; + + try { + return strategy(possibleName); + } catch (e) {} + + return null; + }, null); + }; + + // Pick a loading strategy that finds the first plugin, the same strategy will be + // used to preload all plugins + const selectedStrategy = preloadStrategies.reduce((winner, strategy) => { + if (winner !== null) return winner; + return preloadPossibleNames(names[0], strategy) === null ? null : strategy; + }, null); + + return names.map(name => preloadPossibleNames(name, selectedStrategy)).filter(mod => mod !== null); + } + + compileSync(sourceCode, filePath, compilerContext) { + babel = babel || require('babel-core'); + + let opts = Object.assign({}, this.compilerOptions, { + filename: filePath, + ast: false, + babelrc: false + }); + + let useCoverage = false; + if ('coverage' in opts) { + useCoverage = !!opts.coverage; + delete opts.coverage; + } + + if ('plugins' in opts) { + let plugins = this.attemptToPreload(opts.plugins, 'plugin'); + if (plugins && plugins.length === opts.plugins.length) opts.plugins = plugins; + } + + if ('presets' in opts) { + let presets = this.attemptToPreload(opts.presets, 'preset'); + if (presets && presets.length === opts.presets.length) opts.presets = presets; + } + + const output = babel.transform(sourceCode, opts); + let sourceMaps = output.map ? JSON.stringify(output.map) : null; + + let code = output.code; + if (useCoverage) { + istanbul = istanbul || require('istanbul'); + + sourceMaps = null; + code = new istanbul.Instrumenter().instrumentSync(output.code, filePath); + } + + return { code, sourceMaps, mimeType: 'application/javascript' }; + } + + getCompilerVersion() { + return require('babel-core/package.json').version; + } +} +exports.default = BabelCompiler; +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9qcy9iYWJlbC5qcyJdLCJuYW1lcyI6WyJtaW1lVHlwZXMiLCJiYWJlbCIsImlzdGFuYnVsIiwiQmFiZWxDb21waWxlciIsImNvbnN0cnVjdG9yIiwiZ2V0SW5wdXRNaW1lVHlwZXMiLCJhdHRlbXB0VG9QcmVsb2FkIiwibmFtZXMiLCJwcmVmaXgiLCJsZW5ndGgiLCJmaXh1cE1vZHVsZSIsImV4cCIsIm5vZGVNb2R1bGVzQWJvdmVVcyIsInJlc29sdmUiLCJfX2Rpcm5hbWUiLCJwcmVsb2FkU3RyYXRlZ2llcyIsIngiLCJyZXF1aXJlIiwibWFpbiIsImpvaW4iLCJwb3NzaWJsZU5hbWVzIiwibmFtZSIsInB1c2giLCJwcmVsb2FkUG9zc2libGVOYW1lcyIsInN0cmF0ZWd5IiwicmVkdWNlIiwibW9kIiwicG9zc2libGVOYW1lIiwiZSIsInNlbGVjdGVkU3RyYXRlZ3kiLCJ3aW5uZXIiLCJtYXAiLCJmaWx0ZXIiLCJjb21waWxlU3luYyIsInNvdXJjZUNvZGUiLCJmaWxlUGF0aCIsImNvbXBpbGVyQ29udGV4dCIsIm9wdHMiLCJPYmplY3QiLCJhc3NpZ24iLCJjb21waWxlck9wdGlvbnMiLCJmaWxlbmFtZSIsImFzdCIsImJhYmVscmMiLCJ1c2VDb3ZlcmFnZSIsImNvdmVyYWdlIiwicGx1Z2lucyIsInByZXNldHMiLCJvdXRwdXQiLCJ0cmFuc2Zvcm0iLCJzb3VyY2VNYXBzIiwiSlNPTiIsInN0cmluZ2lmeSIsImNvZGUiLCJJbnN0cnVtZW50ZXIiLCJpbnN0cnVtZW50U3luYyIsIm1pbWVUeXBlIiwiZ2V0Q29tcGlsZXJWZXJzaW9uIiwidmVyc2lvbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUE7Ozs7QUFDQTs7OztBQUVBLE1BQU1BLFlBQVksQ0FBQyxVQUFELEVBQWEsd0JBQWIsQ0FBbEI7QUFDQSxJQUFJQyxRQUFRLElBQVo7QUFDQSxJQUFJQyxXQUFXLElBQWY7O0FBRWUsTUFBTUMsYUFBTiwwQ0FBK0M7QUFDNURDLGdCQUFjO0FB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J3BhdGgnO1xuaW1wb3J0IHtTaW1wbGVDb21waWxlckJhc2V9IGZyb20gJy4uL2NvbXBpbGVyLWJhc2UnO1xuXG5jb25zdCBtaW1lVHlwZXMgPSBbJ3RleHQvanN4JywgJ2FwcGxpY2F0aW9uL2phdmFzY3JpcHQnXTtcbmxldCBiYWJlbCA9IG51bGw7XG5sZXQgaXN0YW5idWwgPSBudWxsO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCYWJlbENvbXBpbGVyIGV4dGVuZHMgU2ltcGxlQ29tcGlsZXJCYXNlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIHN0YXRpYyBnZXRJbnB1dE1pbWVUeXBlcygpIHtcbiAgICByZXR1cm4gbWltZVR5cGVzO1xuICB9XG5cbiAgLy8gTkI6IFRoaXMgbWV0aG9kIGV4aXN0cyB0byBzdG9wIEJhYmVsIGZyb20gdHJ5aW5nIHRvIGxvYWQgcGx1Z2lucyBmcm9tIHRoZVxuICAvLyBhcHAncyBub2RlX21vZHVsZXMgZGlyZWN0b3J5LCB3aGljaCBpbiBhIHByb2R1Y3Rpb24gYXBwIGRvZXNuJ3QgaGF2ZSBCYWJlbFxuICAvLyBpbnN0YWxsZWQgaW4gaXQuIEluc3RlYWQsIHdlIHRyeSB0byBsb2FkIGZyb20gb3VyIGVudHJ5IHBvaW50J3Mgbm9kZV9tb2R1bGVzXG4gIC8vIGRpcmVjdG9yeSAoaS5lLiBHcnVudCBwZXJoYXBzKSwgYW5kIGlmIGl0IGRvZXNuJ3Qgd29yaywganVzdCBrZWVwIGdvaW5nLlxuICBhdHRlbXB0VG9QcmVsb2FkKG5hbWVzLCBwcmVmaXgpIHtcbiAgICBpZiAoIW5hbWVzLmxlbmd0aCkgcmV0dXJuIG51bGxcblxuICAgIGNvbnN0IGZpeHVwTW9kdWxlID0gKGV4cCkgPT4ge1xuICAgICAgLy8gTkI6IFNvbWUgcGx1Z2lucyBsaWtlIHRyYW5zZm9ybS1kZWNvcmF0b3JzLWxlZ2FjeSwgdXNlIGltcG9ydC9leHBvcnRcbiAgICAgIC8vIHNlbWFudGljcywgYW5kIG90aGVycyBkb24ndFxuICAgICAgaWYgKCdkZWZhdWx0JyBpbiBleHApIHJldHVybiBleHBbJ2RlZmF1bHQnXTtcbiAgICAgIHJldHVybiBleHA7XG4gICAgfTtcblxuICAgIGNvbnN0IG5vZGVNb2R1bGVzQWJvdmVVcyA9IHBhdGgucmVzb2x2ZShfX2Rpcm5hbWUsICcuLicsICcuLicsICcuLicpO1xuXG4gICAgY29uc3QgcHJlbG9hZFN0cmF0ZWdpZXMgPSBbXG4gICAgICB4ID0+IGZpeHVwTW9kdWxlKHJlcXVpcmUubWFpbi5yZXF1aXJlKHgpKSxcbiAgICAgIHggPT4gZml4dXBNb2R1bGUocmVxdWlyZShwYXRoLmpvaW4obm9kZU1vZHVsZXNBYm92ZVVzLCB4KSkpLFxuICAgICAgeCA9PiBmaXh1cE1vZHVsZShyZXF1aXJlKHgpKVxuICAgIF1cblxuICAgIGNvbnN0IHBvc3NpYmxlTmFtZXMgPSAobmFtZSkgPT4ge1xuICAgICAgbGV0IG5hbWVzID0gW2BiYWJlbC0ke3ByZWZpeH0tJHtuYW1lfWBdO1xuXG4gICAgICBpZiAocHJlZml4ID09PSAncGx1Z2luJykge1xuICAgICAgICAvLyBMb29rIGZvciBtb2R1bGUgbmFtZXMgdGhhdCBkbyBub3Qgc3RhcnQgd2l0aCBcImJhYmVsLXBsdWdpbi1cIlxuICAgICAgICBuYW1lcy5wdXNoKG5hbWUpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbmFtZXM7XG4gICAgfTtcblxuICAgIC8vIEFwcGx5IG9uZSBwcmVsb2FkaW5nIHN0cmF0ZWd5IHRvIHRoZSBwb3NzaWJsZSBuYW1lcyBvZiBhIG1vZHVsZSwgYW5kIHJldHVybiB0aGUgcHJlbG9hZGVkXG4gICAgLy8gbW9kdWxlIGlmIGZvdW5kLCBudWxsIG90aGVyd2lzZVxuICAgIGNvbnN0IHByZWxvYWRQb3NzaWJsZU5hbWVzID0gKG5hbWUsIHN0cmF0ZWd5KSA9PiB7XG4gICAgICBpZiAodHlwZW9mIHN0cmF0ZWd5ICE9PSAnZnVuY3Rpb24nKSByZXR1cm4gbnVsbDtcblxuICAgICAgcmV0dXJuIHBvc3NpYmxlTmFtZXMobmFtZSkucmVkdWNlKChtb2QsIHBvc3NpYmxlTmFtZSk9PntcbiAgICAgICAgaWYgKG1vZCAhPT0gbnVsbCkgcmV0dXJuIG1vZDtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgIHJldHVybiBzdHJhdGVneShwb3NzaWJsZU5hbWUpO1xuICAgICAgICB9IGNhdGNoKGUpIHt9XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9LCBudWxsKVxuICAgIH1cblxuICAgIC8vIFBpY2sgYSBsb2FkaW5nIHN0cmF0ZWd5IHRoYXQgZmluZHMgdGhlIGZpcnN0IHBsdWdpbiwgdGhlIHNhbWUgc3RyYXRlZ3kgd2lsbCBiZVxuICAgIC8vIHVzZWQgdG8gcHJlbG9hZCBhbGwgcGx1Z2luc1xuICAgIGNvbnN0IHNlbGVjdGVkU3RyYXRlZ3kgPSBwcmVsb2FkU3RyYXRlZ2llcy5yZWR1Y2UoKHdpbm5lciwgc3RyYXRlZ3kpPT57XG4gICAgICBpZiAod2lubmVyICE9PSBudWxsKSByZXR1cm4gd2lubmVyO1xuICAgICAgcmV0dXJuIHByZWxvYWRQb3NzaWJsZU5hbWVzKG5hbWVzWzBdLCBzdHJhdGVneSkgPT09IG51bGwgPyBudWxsIDogc3RyYXRlZ3k7XG4gICAgfSwgbnVsbClcblxuICAgIHJldHVybiBuYW1lcy5tYXAobmFtZSA9PiBwcmVsb2FkUG9zc2libGVOYW1lcyhuYW1lLCBzZWxlY3RlZFN0cmF0ZWd5KSkuZmlsdGVyKChtb2QpID0+IG1vZCAhPT0gbnVsbClcbiAgfVxuXG4gIGNvbXBpbGVTeW5jKHNvdXJjZUNvZGUsIGZpbGVQYXRoLCBjb21waWxlckNvbnRleHQpIHtcbiAgICBiYWJlbCA9IGJhYmVsIHx8IHJlcXVpcmUoJ2JhYmVsLWNvcmUnKTtcblxuICAgIGxldCBvcHRzID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5jb21waWxlck9wdGlvbnMsIHtcbiAgICAgIGZpbGVuYW1lOiBmaWxlUGF0aCxcbiAgICAgIGFzdDogZmFsc2UsXG4gICAgICBiYWJlbHJjOiBmYWxzZVxuICAgIH0pO1xuXG4gICAgbGV0IHVzZUNvdmVyYWdlID0gZmFsc2U7XG4gICAgaWYgKCdjb3ZlcmFnZScgaW4gb3B0cykge1xuICAgICAgdXNlQ292ZXJhZ2UgPSAhIW9wdHMuY292ZXJhZ2U7XG4gICAgICBkZWxldGUgb3B0cy5jb3ZlcmFnZTtcbiAgICB9XG5cbiAgICBpZiAoJ3BsdWdpbnMnIGluIG9wdHMpIHtcbiAgICAgIGxldCBwbHVnaW5zID0gdGhpcy5hdHRlbXB0VG9QcmVsb2FkKG9wdHMucGx1Z2lucywgJ3BsdWdpbicpO1xuICAgICAgaWYgKHBsdWdpbnMgJiYgcGx1Z2lucy5sZW5ndGggPT09IG9wdHMucGx1Z2lucy5sZW5ndGgpIG9wdHMucGx1Z2lucyA9IHBsdWdpbnM7XG4gICAgfVxuXG4gICAgaWYgKCdwcmVzZXRzJyBpbiBvcHRzKSB7XG4gICAgICBsZXQgcHJlc2V0cyA9IHRoaXMuYXR0ZW1wdFRvUHJlbG9hZChvcHRzLnByZXNldHMsICdwcmVzZXQnKTtcbiAgICAgIGlmIChwcmVzZXRzICYmIHByZXNldHMubGVuZ3RoID09PSBvcHRzLnByZXNldHMubGVuZ3RoKSBvcHRzLnByZXNldHMgPSBwcmVzZXRzO1xuICAgIH1cblxuICAgIGNvbnN0IG91dHB1dCA9IGJhYmVsLnRyYW5zZm9ybShzb3VyY2VDb2RlLCBvcHRzKTtcbiAgICBsZXQgc291cmNlTWFwcyA9IG91dHB1dC5tYXAgPyBKU09OLnN0cmluZ2lmeShvdXRwdXQubWFwKSA6IG51bGw7XG5cbiAgICBsZXQgY29kZSA9IG91dHB1dC5jb2RlO1xuICAgIGlmICh1c2VDb3ZlcmFnZSkge1xuICAgICAgaXN0YW5idWwgPSBpc3RhbmJ1bCB8fCByZXF1aXJlKCdpc3RhbmJ1bCcpO1xuXG4gICAgICBzb3VyY2VNYXBzID0gbnVsbDtcbiAgICAgIGNvZGUgPSAobmV3IGlzdGFuYnVsLkluc3RydW1lbnRlcigpKS5pbnN0cnVtZW50U3luYyhvdXRwdXQuY29kZSwgZmlsZVBhdGgpO1xuICAgIH1cblxuICAgIHJldHVybiB7IGNvZGUsIHNvdXJjZU1hcHMsIG1pbWVUeXBlOiAnYXBwbGljYXRpb24vamF2YXNjcmlwdCcsIH07XG4gIH1cblxuICBnZXRDb21waWxlclZlcnNpb24oKSB7XG4gICAgcmV0dXJuIHJlcXVpcmUoJ2JhYmVsLWNvcmUvcGFja2FnZS5qc29uJykudmVyc2lvbjtcbiAgfVxufVxuIl19 \ No newline at end of file diff --git a/lib/js/coffeescript.js b/lib/js/coffeescript.js new file mode 100644 index 0000000..12983ec --- /dev/null +++ b/lib/js/coffeescript.js @@ -0,0 +1,65 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _path = require('path'); + +var _path2 = _interopRequireDefault(_path); + +var _btoa = require('btoa'); + +var _btoa2 = _interopRequireDefault(_btoa); + +var _compilerBase = require('../compiler-base'); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +const inputMimeTypes = ['text/coffeescript']; +let coffee = null; + +/** + * @access private + */ +class CoffeeScriptCompiler extends _compilerBase.SimpleCompilerBase { + constructor() { + super(); + this.compilerOptions.sourceMap = true; + } + + static getInputMimeTypes() { + return inputMimeTypes; + } + + compileSync(sourceCode, filePath) { + coffee = coffee || require('coffee-script'); + + var _coffee$compile = coffee.compile(sourceCode, Object.assign({ filename: filePath }, this.compilerOptions)); + + let js = _coffee$compile.js, + v3SourceMap = _coffee$compile.v3SourceMap; + + + js = `${js}\n` + `//# sourceMappingURL=data:application/json;base64,${(0, _btoa2.default)(unescape(encodeURIComponent(v3SourceMap)))}\n` + `//# sourceURL=${this.convertFilePath(filePath)}`; + + return { + code: js, + mimeType: 'application/javascript' + }; + } + + convertFilePath(filePath) { + if (process.platform === 'win32') { + filePath = `/${_path2.default.resolve(filePath).replace(/\\/g, '/')}`; + } + + return encodeURI(filePath); + } + + getCompilerVersion() { + return require('coffee-script/package.json').version; + } +} +exports.default = CoffeeScriptCompiler; +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9qcy9jb2ZmZWVzY3JpcHQuanMiXSwibmFtZXMiOlsiaW5wdXRNaW1lVHlwZXMiLCJjb2ZmZWUiLCJDb2ZmZWVTY3JpcHRDb21waWxlciIsImNvbnN0cnVjdG9yIiwiY29tcGlsZXJPcHRpb25zIiwic291cmNlTWFwIiwiZ2V0SW5wdXRNaW1lVHlwZXMiLCJjb21waWxlU3luYyIsInNvdXJjZUNvZGUiLCJmaWxlUGF0aCIsInJlcXVpcmUiLCJjb21waWxlIiwiT2JqZWN0IiwiYXNzaWduIiwiZmlsZW5hbWUiLCJqcyIsInYzU291cmNlTWFwIiwidW5lc2NhcGUiLCJlbmNvZGVVUklDb21wb25lbnQiLCJjb252ZXJ0RmlsZVBhdGgiLCJjb2RlIiwibWltZVR5cGUiLCJwcm9jZXNzIiwicGxhdGZvcm0iLCJyZXNvbHZlIiwicmVwbGFjZSIsImVuY29kZVVSSSIsImdldENvbXBpbGVyVmVyc2lvbiIsInZlcnNpb24iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBOzs7O0FBQ0E7Ozs7QUFDQTs7OztBQUVBLE1BQU1BLGlCQUFpQixDQUFDLG1CQUFELENBQXZCO0FBQ0EsSUFBSUMsU0FBUyxJQUFiOztBQUVBOzs7QUFHZSxNQUFNQyxvQkFBTiwwQ0FBc0Q7QUFDbkVDLGdCQUFjO0FBQ1o7QUFDQSxTQUFLQyxlQUFMLENBQXFCQyxTQUFyQixHQUFpQyxJQUFqQztBQUNEOztBQUVELFNBQU9DLGlCQUFQLEdBQTJCO0FBQ3pCLFdBQU9OLGNBQVA7QUFDRDs7QUFFRE8sY0FBWUMsVUFBWixFQUF3QkMsUUFBeEIsRUFBa0M7QUFDaENSLGFBQVNBLFVBQVVTLFFBQVEsZUFBUixDQUFuQjs7QUFEZ0MsMEJBR1JULE9BQU9VLE9BQVAsQ0FDdEJILFVBRHNCLEVBRXRCSSxPQUFPQyxNQUFQLENBQWMsRUFBRUMsVUFBVUwsUUFBWixFQUFkLEVBQXNDLEtBQUtMLGVBQTNDLENBRnNCLENBSFE7O0FBQUEsUUFHM0JXLEVBSDJCLG1CQUczQkEsRUFIMkI7QUFBQSxRQUd2QkMsV0FIdUIsbUJBR3ZCQSxXQUh1Qjs7O0FBT2hDRCxTQUFNLEdBQUVBLEVBQUcsSUFBTixHQUNGLHFEQUFvRCxvQkFBS0UsU0FBU0MsbUJBQW1CRixXQUFuQixDQUFULENBQUwsQ0FBZ0QsSUFEbEcsR0FFRixpQkFBZ0IsS0FBS0csZUFBTCxDQUFxQlYsUUFBckIsQ0FBK0IsRUFGbEQ7O0FBSUEsV0FBTztBQUNMVyxZQUFNTCxFQUREO0FBRUxNLGdCQUFVO0FBRkwsS0FBUDtBQUlEOztBQUVERixrQkFBZ0JWLFFBQWhCLEVBQTBCO0FBQ3hCLFFBQUlhLFFBQVFDLFFBQVIsS0FBcUIsT0FBekIsRUFBa0M7QUFDaENkLGlCQUFZLElBQUcsZUFBS2UsT0FBTCxDQUFhZixRQUFiLEVBQXVCZ0IsT0FBdkIsQ0FBK0IsS0FBL0IsRUFBc0MsR0FBdEMsQ0FBMkMsRUFBMUQ7QUFDRDs7QUFFRCxXQUFPQyxVQUFVakIsUUFBVixDQUFQO0FBQ0Q7O0FBRURrQix1QkFBcUI7QUFDbkIsV0FBT2pCLFFBQVEsNEJBQVIsRUFBc0NrQixPQUE3QztBQUNEO0FBckNrRTtrQkFBaEQxQixvQiIsImZpbGUiOiJjb2ZmZWVzY3JpcHQuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCBidG9hIGZyb20gJ2J0b2EnO1xuaW1wb3J0IHtTaW1wbGVDb21waWxlckJhc2V9IGZyb20gJy4uL2NvbXBpbGVyLWJhc2UnO1xuXG5jb25zdCBpbnB1dE1pbWVUeXBlcyA9IFsndGV4dC9jb2ZmZWVzY3JpcHQnXTtcbmxldCBjb2ZmZWUgPSBudWxsO1xuXG4vKipcbiAqIEBhY2Nlc3MgcHJpdmF0ZVxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDb2ZmZWVTY3JpcHRDb21waWxlciBleHRlbmRzIFNpbXBsZUNvbXBpbGVyQmFzZSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5jb21waWxlck9wdGlvbnMuc291cmNlTWFwID0gdHJ1ZTtcbiAgfVxuXG4gIHN0YXRpYyBnZXRJbnB1dE1pbWVUeXBlcygpIHtcbiAgICByZXR1cm4gaW5wdXRNaW1lVHlwZXM7XG4gIH1cblxuICBjb21waWxlU3luYyhzb3VyY2VDb2RlLCBmaWxlUGF0aCkge1xuICAgIGNvZmZlZSA9IGNvZmZlZSB8fCByZXF1aXJlKCdjb2ZmZWUtc2NyaXB0Jyk7XG5cbiAgICBsZXQge2pzLCB2M1NvdXJjZU1hcH0gPSBjb2ZmZWUuY29tcGlsZShcbiAgICAgIHNvdXJjZUNvZGUsXG4gICAgICBPYmplY3QuYXNzaWduKHsgZmlsZW5hbWU6IGZpbGVQYXRoIH0sIHRoaXMuY29tcGlsZXJPcHRpb25zKSk7XG5cbiAgICBqcyA9IGAke2pzfVxcbmAgK1xuICAgICAgYC8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsJHtidG9hKHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudCh2M1NvdXJjZU1hcCkpKX1cXG5gICtcbiAgICAgIGAvLyMgc291cmNlVVJMPSR7dGhpcy5jb252ZXJ0RmlsZVBhdGgoZmlsZVBhdGgpfWA7XG5cbiAgICByZXR1cm4ge1xuICAgICAgY29kZToganMsXG4gICAgICBtaW1lVHlwZTogJ2FwcGxpY2F0aW9uL2phdmFzY3JpcHQnXG4gICAgfTtcbiAgfVxuXG4gIGNvbnZlcnRGaWxlUGF0aChmaWxlUGF0aCkge1xuICAgIGlmIChwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInKSB7XG4gICAgICBmaWxlUGF0aCA9IGAvJHtwYXRoLnJlc29sdmUoZmlsZVBhdGgpLnJlcGxhY2UoL1xcXFwvZywgJy8nKX1gO1xuICAgIH1cblxuICAgIHJldHVybiBlbmNvZGVVUkkoZmlsZVBhdGgpO1xuICB9XG5cbiAgZ2V0Q29tcGlsZXJWZXJzaW9uKCkge1xuICAgIHJldHVybiByZXF1aXJlKCdjb2ZmZWUtc2NyaXB0L3BhY2thZ2UuanNvbicpLnZlcnNpb247XG4gIH1cbn1cbiJdfQ== \ No newline at end of file diff --git a/lib/js/graphql.js b/lib/js/graphql.js new file mode 100644 index 0000000..a8975a1 --- /dev/null +++ b/lib/js/graphql.js @@ -0,0 +1,42 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _compilerBase = require('../compiler-base'); + +const inputMimeTypes = ['text/graphql']; +let gql = null; + +class GraphQLCompiler extends _compilerBase.SimpleCompilerBase { + constructor() { + super(); + } + + static getInputMimeTypes() { + return inputMimeTypes; + } + + compileSync(sourceCode) { + gql = gql || require('graphql-tag/loader'); + // This is a stub, original loader calls webpack-specific this.cacheable() + const webpackLoaderStub = { + cacheable: () => {} + }; + const loader = gql.bind(webpackLoaderStub); + + const js = loader(sourceCode); + + return { + code: js, + mimeType: 'application/javascript' + }; + } + + getCompilerVersion() { + return require('graphql-tag/package.json').version; + } +} +exports.default = GraphQLCompiler; +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9qcy9ncmFwaHFsLmpzIl0sIm5hbWVzIjpbImlucHV0TWltZVR5cGVzIiwiZ3FsIiwiR3JhcGhRTENvbXBpbGVyIiwiY29uc3RydWN0b3IiLCJnZXRJbnB1dE1pbWVUeXBlcyIsImNvbXBpbGVTeW5jIiwic291cmNlQ29kZSIsInJlcXVpcmUiLCJ3ZWJwYWNrTG9hZGVyU3R1YiIsImNhY2hlYWJsZSIsImxvYWRlciIsImJpbmQiLCJqcyIsImNvZGUiLCJtaW1lVHlwZSIsImdldENvbXBpbGVyVmVyc2lvbiIsInZlcnNpb24iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBOztBQUVBLE1BQU1BLGlCQUFpQixDQUFDLGNBQUQsQ0FBdkI7QUFDQSxJQUFJQyxNQUFNLElBQVY7O0FBRWUsTUFBTUMsZUFBTiwwQ0FBaUQ7QUFDOURDLGdCQUFjO0FBQ1o7QUFDRDs7QUFFRCxTQUFPQyxpQkFBUCxHQUEyQjtBQUN6QixXQUFPSixjQUFQO0FBQ0Q7O0FBRURLLGNBQVlDLFVBQVosRUFBd0I7QUFDdEJMLFVBQU1BLE9BQU9NLFFBQVEsb0JBQVIsQ0FBYjtBQUNBO0FBQ0EsVUFBTUMsb0JBQW9CO0FBQ3hCQyxpQkFBVyxNQUFNLENBQUU7QUFESyxLQUExQjtBQUdBLFVBQU1DLFNBQVNULElBQUlVLElBQUosQ0FBU0gsaUJBQVQsQ0FBZjs7QUFFQSxVQUFNSSxLQUFLRixPQUFPSixVQUFQLENBQVg7O0FBRUEsV0FBTztBQUNMTyxZQUFNRCxFQUREO0FBRUxFLGdCQUFVO0FBRkwsS0FBUDtBQUlEOztBQUVEQyx1QkFBcUI7QUFDbkIsV0FBT1IsUUFBUSwwQkFBUixFQUFvQ1MsT0FBM0M7QUFDRDtBQTNCNkQ7a0JBQTNDZCxlIiwiZmlsZSI6ImdyYXBocWwuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1NpbXBsZUNvbXBpbGVyQmFzZX0gZnJvbSAnLi4vY29tcGlsZXItYmFzZSc7XG5cbmNvbnN0IGlucHV0TWltZVR5cGVzID0gWyd0ZXh0L2dyYXBocWwnXTtcbmxldCBncWwgPSBudWxsO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBHcmFwaFFMQ29tcGlsZXIgZXh0ZW5kcyBTaW1wbGVDb21waWxlckJhc2Uge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgc3RhdGljIGdldElucHV0TWltZVR5cGVzKCkge1xuICAgIHJldHVybiBpbnB1dE1pbWVUeXBlcztcbiAgfVxuXG4gIGNvbXBpbGVTeW5jKHNvdXJjZUNvZGUpIHtcbiAgICBncWwgPSBncWwgfHwgcmVxdWlyZSgnZ3JhcGhxbC10YWcvbG9hZGVyJyk7XG4gICAgLy8gVGhpcyBpcyBhIHN0dWIsIG9yaWdpbmFsIGxvYWRlciBjYWxscyB3ZWJwYWNrLXNwZWNpZmljIHRoaXMuY2FjaGVhYmxlKClcbiAgICBjb25zdCB3ZWJwYWNrTG9hZGVyU3R1YiA9IHtcbiAgICAgIGNhY2hlYWJsZTogKCkgPT4ge31cbiAgICB9O1xuICAgIGNvbnN0IGxvYWRlciA9IGdxbC5iaW5kKHdlYnBhY2tMb2FkZXJTdHViKTtcblxuICAgIGNvbnN0IGpzID0gbG9hZGVyKHNvdXJjZUNvZGUpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGNvZGU6IGpzLFxuICAgICAgbWltZVR5cGU6ICdhcHBsaWNhdGlvbi9qYXZhc2NyaXB0J1xuICAgIH07XG4gIH1cblxuICBnZXRDb21waWxlclZlcnNpb24oKSB7XG4gICAgcmV0dXJuIHJlcXVpcmUoJ2dyYXBocWwtdGFnL3BhY2thZ2UuanNvbicpLnZlcnNpb247XG4gIH1cbn1cbiJdfQ== \ No newline at end of file diff --git a/lib/js/typescript.js b/lib/js/typescript.js new file mode 100644 index 0000000..afc47cf --- /dev/null +++ b/lib/js/typescript.js @@ -0,0 +1,186 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _compilerBase = require('../compiler-base'); + +var _path = require('path'); + +var _path2 = _interopRequireDefault(_path); + +var _jsStringEscape = require('js-string-escape'); + +var _jsStringEscape2 = _interopRequireDefault(_jsStringEscape); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +const inputMimeTypes = ['text/typescript', 'text/tsx']; +const d = require('debug')('electron-compile:typescript-compiler'); + +let ts = null; +let istanbul = null; +let sorcery = null; + +const builtinKeys = ['hotModuleReload', 'coverage', 'babel']; + +class TypeScriptCompiler extends _compilerBase.SimpleCompilerBase { + constructor() { + super(); + + this.outMimeType = 'application/javascript'; + this.compilerOptions = { + inlineSourceMap: true, + inlineSources: true + }; + } + + static getInputMimeTypes() { + return inputMimeTypes; + } + + _getParsedConfigOptions(tsCompiler) { + let parsedConfig = this.parsedConfig; + + if (!parsedConfig) { + let opts = Object.assign({}, this.compilerOptions); + let builtinOpts = {}; + builtinKeys.forEach(k => { + if (k in this.compilerOptions) { + delete opts[k]; + builtinOpts[k] = this.compilerOptions[k]; + } + }); + + const results = tsCompiler.convertCompilerOptionsFromJson(opts); + + if (results.errors && results.errors.length) { + throw new Error(JSON.stringify(results.errors)); + } + + parsedConfig = this.parsedConfig = { typescriptOpts: results.options, builtinOpts }; + } + + return parsedConfig; + } + + compileSync(sourceCode, filePath) { + ts = ts || require('typescript'); + const options = this._getParsedConfigOptions(ts); + + const isTsx = filePath.match(/\.tsx$/i); + const transpileOptions = { + compilerOptions: options.typescriptOpts, + fileName: filePath.match(/\.(ts|tsx)$/i) ? _path2.default.basename(filePath) : null + }; + + if (isTsx && options.builtinOpts.hotModuleReload !== false) { + sourceCode = this.addHotModuleLoadingRegistration(sourceCode, filePath, this.getExportsForFile(sourceCode, filePath, options.typescriptOpts)); + } + + let output = ts.transpileModule(sourceCode, transpileOptions); + let sourceMaps = output.sourceMapText ? output.sourceMapText : null; + if (options.builtinOpts.coverage) { + sourceMaps = null; + istanbul = istanbul || require('istanbul'); + + sourceMaps = null; + output.outputText = new istanbul.Instrumenter().instrumentSync(output.outputText, filePath); + } + + d(JSON.stringify(output.diagnostics)); + + const babelOpts = this.parsedConfig.builtinOpts.babel; + if (babelOpts) { + if (!this.babel) { + const BabelCompiler = require("./babel").default; + this.babel = new BabelCompiler(); + this.babel.compilerOptions = babelOpts; + } + + sorcery = sorcery || require('sorcery'); + + let tsOutputPath = filePath.replace(/.tsx?$/i, ".js"); + let babelOutputPath = filePath.replace(/.tsx?$/i, ".babel.js"); + + output.outputText = output.outputText.replace(/\/\/# sourceMap.*/g, ""); + + let babelOutput = this.babel.compileSync(output.outputText, tsOutputPath); + let chain = sorcery.loadSync(babelOutputPath, { + content: { + [filePath]: sourceCode, + [tsOutputPath]: output.outputText, + [babelOutputPath]: babelOutput.code + }, + sourcemaps: { + [tsOutputPath]: JSON.parse(sourceMaps), + [babelOutputPath]: JSON.parse(babelOutput.sourceMaps) + } + }); + let finalSourceMaps = chain.apply(); + let outputCode = babelOutput.code + "\n//# sourceMappingURL=" + finalSourceMaps.toUrl(); + + // the only way to make sourceMaps usable seems to be to have + // them inlined right now, see https://github.com/electron/electron-compile/issues/172#issuecomment-277146112 + return { + code: outputCode, + mimeType: babelOutput.mimeType + }; + } + + return { + code: output.outputText, + mimeType: this.outMimeType, + sourceMaps + }; + } + + addHotModuleLoadingRegistration(sourceCode, fileName, exports) { + if (exports.length < 1) return sourceCode; + + let registrations = exports.map(x => { + let id = `${x}` == 'default' ? '(typeof _default !== \'undefined\' ? _default : exports.default)' : `${x}`; + let name = `"${x}"`; + return `__REACT_HOT_LOADER__.register(${id}, ${name}, __FILENAME__);\n`; + }); + + let tmpl = ` +${sourceCode} + +if (typeof __REACT_HOT_LOADER__ !== 'undefined') { + const __FILENAME__ = "${(0, _jsStringEscape2.default)(fileName)}"; + ${registrations} +}`; + + return tmpl; + } + + getExportsForFile(sourceCode, fileName, tsOptions) { + let sourceFile = ts.createSourceFile(fileName, sourceCode, ts.ScriptTarget.ES6); + let ret = []; + + // Walk the tree to search for classes + let visit = node => { + if (!this.isNodeExported(node)) return; + + if (node.kind === ts.SyntaxKind.ClassDeclaration || node.kind === ts.SyntaxKind.FunctionDeclaration) { + ret.push(node.name.text); + } + }; + + ts.forEachChild(sourceFile, visit); + + return ret; + } + + isNodeExported(node) { + return (node.flags & ts.NodeFlags.Export) !== 0 || node.parent && node.parent.kind === ts.SyntaxKind.SourceFile; + } + + getCompilerVersion() { + return require('typescript/package.json').version; + } +} +exports.default = TypeScriptCompiler; +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9qcy90eXBlc2NyaXB0LmpzIl0sIm5hbWVzIjpbImlucHV0TWltZVR5cGVzIiwiZCIsInJlcXVpcmUiLCJ0cyIsImlzdGFuYnVsIiwic29yY2VyeSIsImJ1aWx0aW5LZXlzIiwiVHlwZVNjcmlwdENvbXBpbGVyIiwiY29uc3RydWN0b3IiLCJvdXRNaW1lVHlwZSIsImNvbXBpbGVyT3B0aW9ucyIsImlubGluZVNvdXJjZU1hcCIsImlubGluZVNvdXJjZXMiLCJnZXRJbnB1dE1pbWVUeXBlcyIsIl9nZXRQYXJzZWRDb25maWdPcHRpb25zIiwidHNDb21waWxlciIsInBhcnNlZENvbmZpZyIsIm9wdHMiLCJPYmplY3QiLCJhc3NpZ24iLCJidWlsdGluT3B0cyIsImZvckVhY2giLCJrIiwicmVzdWx0cyIsImNvbnZlcnRDb21waWxlck9wdGlvbnNGcm9tSnNvbiIsImVycm9ycyIsImxlbmd0aCIsIkVycm9yIiwiSlNPTiIsInN0cmluZ2lmeSIsInR5cGVzY3JpcHRPcHRzIiwib3B0aW9ucyIsImNvbXBpbGVTeW5jIiwic291cmNlQ29kZSIsImZpbGVQYXRoIiwiaXNUc3giLCJtYXRjaCIsInRyYW5zcGlsZU9wdGlvbnMiLCJmaWxlTmFtZSIsImJhc2VuYW1lIiwiaG90TW9kdWxlUmVsb2FkIiwiYWRkSG90TW9kdWxlTG9hZGluZ1JlZ2lzdHJhdGlvbiIsImdldEV4cG9ydHNGb3JGaWxlIiwib3V0cHV0IiwidHJhbnNwaWxlTW9kdWxlIiwic291cmNlTWFwcyIsInNvdXJjZU1hcFRleHQiLCJjb3ZlcmFnZSIsIm91dHB1dFRleHQiLCJJbnN0cnVtZW50ZXIiLCJpbnN0cnVtZW50U3luYyIsImRpYWdub3N0aWNzIiwiYmFiZWxPcHRzIiwiYmFiZWwiLCJCYWJlbENvbXBpbGVyIiwiZGVmYXVsdCIsInRzT3V0cHV0UGF0aCIsInJlcGxhY2UiLCJiYWJlbE91dHB1dFBhdGgiLCJiYWJlbE91dHB1dCIsImNoYWluIiwibG9hZFN5bmMiLCJjb250ZW50IiwiY29kZSIsInNvdXJjZW1hcHMiLCJwYXJzZSIsImZpbmFsU291cmNlTWFwcyIsImFwcGx5Iiwib3V0cHV0Q29kZSIsInRvVXJsIiwibWltZVR5cGUiLCJleHBvcnRzIiwicmVnaXN0cmF0aW9ucyIsIm1hcCIsIngiLCJpZCIsIm5hbWUiLCJ0bXBsIiwidHNPcHRpb25zIiwic291cmNlRmlsZSIsImNyZWF0ZVNvdXJjZUZpbGUiLCJTY3JpcHRUYXJnZXQiLCJFUzYiLCJyZXQiLCJ2aXNpdCIsIm5vZGUiLCJpc05vZGVFeHBvcnRlZCIsImtpbmQiLCJTeW50YXhLaW5kIiwiQ2xhc3NEZWNsYXJhdGlvbiIsIkZ1bmN0aW9uRGVjbGFyYXRpb24iLCJwdXNoIiwidGV4dCIsImZvckVhY2hDaGlsZCIsImZsYWdzIiwiTm9kZUZsYWdzIiwiRXhwb3J0IiwicGFyZW50IiwiU291cmNlRmlsZSIsImdldENvbXBpbGVyVmVyc2lvbiIsInZlcnNpb24iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBOztBQUNBOzs7O0FBQ0E7Ozs7OztBQUVBLE1BQU1BLGlCQUFpQixDQUFDLGlCQUFELEVBQW9CLFVBQXBCLENBQXZCO0FBQ0EsTUFBTUMsSUFBSUMsUUFBUSxPQUFSLEVBQWlCLHNDQUFqQixDQUFWOztBQUVBLElBQUlDLEtBQUssSUFBVDtBQUNBLElBQUlDLFdBQVcsSUFBZjtBQUNBLElBQUlDLFVBQVUsSUFBZDs7QUFFQSxNQUFNQyxjQUFjLENBQUMsaUJBQUQsRUFBb0IsVUFBcEIsRUFBZ0MsT0FBaEMsQ0FBcEI7O0FBRWUsTUFBTUMsa0JBQU4sMENBQW9EO0FBQ2pFQyxnQkFBYztBQUNaOztBQUVBLFNBQUtDLFdBQUwsR0FBbUIsd0JBQW5CO0FBQ0EsU0FBS0MsZUFBTCxHQUF1QjtBQUNyQkMsdUJBQWlCLElBREk7QUFFckJDLHFCQUFlO0FBRk0sS0FBdkI7QUFJRDs7QUFFRCxTQUFPQyxpQkFBUCxHQUEyQjtBQUN6QixXQUFPYixjQUFQO0FBQ0Q7O0FBRURjLDBCQUF3QkMsVUFBeEIsRUFBb0M7QUFDbEMsUUFB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QUE2Q1gsS0FBS1ksTUFBTCxJQUFlWixLQUFLWSxNQUFMLENBQVlWLElBQVosS0FBcUJwRixHQUFHcUYsVUFBSCxDQUFjVSxVQUF0RztBQUNEOztBQUVEQyx1QkFBcUI7QUFDbkIsV0FBT2pHLFFBQVEseUJBQVIsRUFBbUNrRyxPQUExQztBQUNEO0FBM0pnRTtrQkFBOUM3RixrQiIsImZpbGUiOiJ0eXBlc2NyaXB0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtTaW1wbGVDb21waWxlckJhc2V9IGZyb20gJy4uL2NvbXBpbGVyLWJhc2UnO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQganNFc2NhcGUgZnJvbSAnanMtc3RyaW5nLWVzY2FwZSc7XG5cbmNvbnN0IGlucHV0TWltZVR5cGVzID0gWyd0ZXh0L3R5cGVzY3JpcHQnLCAndGV4dC90c3gnXTtcbmNvbnN0IGQgPSByZXF1aXJlKCdkZWJ1ZycpKCdlbGVjdHJvbi1jb21waWxlOnR5cGVzY3JpcHQtY29tcGlsZXInKTtcblxubGV0IHRzID0gbnVsbDtcbmxldCBpc3RhbmJ1bCA9IG51bGw7XG5sZXQgc29yY2VyeSA9IG51bGw7XG5cbmNvbnN0IGJ1aWx0aW5LZXlzID0gWydob3RNb2R1bGVSZWxvYWQnLCAnY292ZXJhZ2UnLCAnYmFiZWwnXTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVHlwZVNjcmlwdENvbXBpbGVyIGV4dGVuZHMgU2ltcGxlQ29tcGlsZXJCYXNlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcblxuICAgIHRoaXMub3V0TWltZVR5cGUgPSAnYXBwbGljYXRpb24vamF2YXNjcmlwdCc7XG4gICAgdGhpcy5jb21waWxlck9wdGlvbnMgPSB7XG4gICAgICBpbmxpbmVTb3VyY2VNYXA6IHRydWUsXG4gICAgICBpbmxpbmVTb3VyY2VzOiB0cnVlXG4gICAgfTtcbiAgfVxuXG4gIHN0YXRpYyBnZXRJbnB1dE1pbWVUeXBlcygpIHtcbiAgICByZXR1cm4gaW5wdXRNaW1lVHlwZXM7XG4gIH1cblxuICBfZ2V0UGFyc2VkQ29uZmlnT3B0aW9ucyh0c0NvbXBpbGVyKSB7XG4gICAgbGV0IHBhcnNlZENvbmZpZyA9IHRoaXMucGFyc2VkQ29uZmlnO1xuXG4gICAgaWYgKCFwYXJzZWRDb25maWcpIHtcbiAgICAgIGxldCBvcHRzID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5jb21waWxlck9wdGlvbnMpO1xuICAgICAgbGV0IGJ1aWx0aW5PcHRzID0ge307XG4gICAgICBidWlsdGluS2V5cy5mb3JFYWNoKChrKSA9PiB7XG4gICAgICAgIGlmIChrIGluIHRoaXMuY29tcGlsZXJPcHRpb25zKSB7XG4gICAgICAgICAgZGVsZXRlIG9wdHNba107XG4gICAgICAgICAgYnVpbHRpbk9wdHNba10gPSB0aGlzLmNvbXBpbGVyT3B0aW9uc1trXTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHJlc3VsdHMgPSB0c0NvbXBpbGVyLmNvbnZlcnRDb21waWxlck9wdGlvbnNGcm9tSnNvbihvcHRzKTtcblxuICAgICAgaWYgKHJlc3VsdHMuZXJyb3JzICYmIHJlc3VsdHMuZXJyb3JzLmxlbmd0aCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoSlNPTi5zdHJpbmdpZnkocmVzdWx0cy5lcnJvcnMpKTtcbiAgICAgIH1cblxuICAgICAgcGFyc2VkQ29uZmlnID0gdGhpcy5wYXJzZWRDb25maWcgPSB7IHR5cGVzY3JpcHRPcHRzOiByZXN1bHRzLm9wdGlvbnMsIGJ1aWx0aW5PcHRzIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcnNlZENvbmZpZztcbiAgfVxuXG4gIGNvbXBpbGVTeW5jKHNvdXJjZUNvZGUsIGZpbGVQYXRoKSB7XG4gICAgdHMgPSB0cyB8fCByZXF1aXJlKCd0eXBlc2NyaXB0Jyk7XG4gICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMuX2dldFBhcnNlZENvbmZpZ09wdGlvbnModHMpO1xuXG4gICAgY29uc3QgaXNUc3ggPSBmaWxlUGF0aC5tYXRjaCgvXFwudHN4JC9pKTtcbiAgICBjb25zdCB0cmFuc3BpbGVPcHRpb25zID0ge1xuICAgICAgY29tcGlsZXJPcHRpb25zOiBvcHRpb25zLnR5cGVzY3JpcHRPcHRzLFxuICAgICAgZmlsZU5hbWU6IGZpbGVQYXRoLm1hdGNoKC9cXC4odHN8dHN4KSQvaSkgPyBwYXRoLmJhc2VuYW1lKGZpbGVQYXRoKSA6IG51bGxcbiAgICB9O1xuXG4gICAgaWYgKGlzVHN4ICYmIG9wdGlvbnMuYnVpbHRpbk9wdHMuaG90TW9kdWxlUmVsb2FkICE9PSBmYWxzZSkge1xuICAgICAgc291cmNlQ29kZSA9IHRoaXMuYWRkSG90TW9kdWxlTG9hZGluZ1JlZ2lzdHJhdGlvbihzb3VyY2VDb2RlLCBmaWxlUGF0aCwgdGhpcy5nZXRFeHBvcnRzRm9yRmlsZShzb3VyY2VDb2RlLCBmaWxlUGF0aCwgb3B0aW9ucy50eXBlc2NyaXB0T3B0cykpO1xuICAgIH1cblxuICAgIGxldCBvdXRwdXQgPSB0cy50cmFuc3BpbGVNb2R1bGUoc291cmNlQ29kZSwgdHJhbnNwaWxlT3B0aW9ucyk7XG4gICAgbGV0IHNvdXJjZU1hcHMgPSBvdXRwdXQuc291cmNlTWFwVGV4dCA/IG91dHB1dC5zb3VyY2VNYXBUZXh0IDogbnVsbDtcbiAgICBpZiAob3B0aW9ucy5idWlsdGluT3B0cy5jb3ZlcmFnZSkge1xuICAgICAgc291cmNlTWFwcyA9IG51bGw7XG4gICAgICBpc3RhbmJ1bCA9IGlzdGFuYnVsIHx8IHJlcXVpcmUoJ2lzdGFuYnVsJyk7XG5cbiAgICAgIHNvdXJjZU1hcHMgPSBudWxsO1xuICAgICAgb3V0cHV0Lm91dHB1dFRleHQgPSAobmV3IGlzdGFuYnVsLkluc3RydW1lbnRlcigpKS5pbnN0cnVtZW50U3luYyhvdXRwdXQub3V0cHV0VGV4dCwgZmlsZVBhdGgpO1xuICAgIH1cblxuICAgIGQoSlNPTi5zdHJpbmdpZnkob3V0cHV0LmRpYWdub3N0aWNzKSk7XG5cbiAgICBjb25zdCBiYWJlbE9wdHMgPSB0aGlzLnBhcnNlZENvbmZpZy5idWlsdGluT3B0cy5iYWJlbDtcbiAgICBpZiAoYmFiZWxPcHRzKSB7XG4gICAgICBpZiAoIXRoaXMuYmFiZWwpIHtcbiAgICAgICAgY29uc3QgQmFiZWxDb21waWxlciA9IHJlcXVpcmUoXCIuL2JhYmVsXCIpLmRlZmF1bHQ7XG4gICAgICAgIHRoaXMuYmFiZWwgPSBuZXcgQmFiZWxDb21waWxlcigpO1xuICAgICAgICB0aGlzLmJhYmVsLmNvbXBpbGVyT3B0aW9ucyA9IGJhYmVsT3B0cztcbiAgICAgIH1cblxuICAgICAgc29yY2VyeSA9IHNvcmNlcnkgfHwgcmVxdWlyZSgnc29yY2VyeScpO1xuXG4gICAgICBsZXQgdHNPdXRwdXRQYXRoID0gZmlsZVBhdGgucmVwbGFjZSgvLnRzeD8kL2ksIFwiLmpzXCIpO1xuICAgICAgbGV0IGJhYmVsT3V0cHV0UGF0aCA9IGZpbGVQYXRoLnJlcGxhY2UoLy50c3g/JC9pLCBcIi5iYWJlbC5qc1wiKTtcblxuICAgICAgb3V0cHV0Lm91dHB1dFRleHQgPSBvdXRwdXQub3V0cHV0VGV4dC5yZXBsYWNlKC9cXC9cXC8jIHNvdXJjZU1hcC4qL2csIFwiXCIpO1xuXG4gICAgICBsZXQgYmFiZWxPdXRwdXQgPSB0aGlzLmJhYmVsLmNvbXBpbGVTeW5jKG91dHB1dC5vdXRwdXRUZXh0LCB0c091dHB1dFBhdGgpO1xuICAgICAgbGV0IGNoYWluID0gc29yY2VyeS5sb2FkU3luYyhiYWJlbE91dHB1dFBhdGgsIHtcbiAgICAgICAgY29udGVudDoge1xuICAgICAgICAgIFtmaWxlUGF0aF06IHNvdXJjZUNvZGUsXG4gICAgICAgICAgW3RzT3V0cHV0UGF0aF06IG91dHB1dC5vdXRwdXRUZXh0LFxuICAgICAgICAgIFtiYWJlbE91dHB1dFBhdGhdOiBiYWJlbE91dHB1dC5jb2RlLFxuICAgICAgICB9LFxuICAgICAgICBzb3VyY2VtYXBzOiB7XG4gICAgICAgICAgW3RzT3V0cHV0UGF0aF06IEpTT04ucGFyc2Uoc291cmNlTWFwcyksXG4gICAgICAgICAgW2JhYmVsT3V0cHV0UGF0aF06IEpTT04ucGFyc2UoYmFiZWxPdXRwdXQuc291cmNlTWFwcyksXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgbGV0IGZpbmFsU291cmNlTWFwcyA9IGNoYWluLmFwcGx5KCk7XG4gICAgICBsZXQgb3V0cHV0Q29kZSA9IGJhYmVsT3V0cHV0LmNvZGUgKyBcIlxcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVwiICsgZmluYWxTb3VyY2VNYXBzLnRvVXJsKCk7XG5cbiAgICAgIC8vIHRoZSBvbmx5IHdheSB0byBtYWtlIHNvdXJjZU1hcHMgdXNhYmxlIHNlZW1zIHRvIGJlIHRvIGhhdmVcbiAgICAgIC8vIHRoZW0gaW5saW5lZCByaWdodCBub3csIHNlZSBodHRwczovL2dpdGh1Yi5jb20vZWxlY3Ryb24vZWxlY3Ryb24tY29tcGlsZS9pc3N1ZXMvMTcyI2lzc3VlY29tbWVudC0yNzcxNDYxMTJcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvZGU6IG91dHB1dENvZGUsXG4gICAgICAgIG1pbWVUeXBlOiBiYWJlbE91dHB1dC5taW1lVHlwZSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGNvZGU6IG91dHB1dC5vdXRwdXRUZXh0LFxuICAgICAgbWltZVR5cGU6IHRoaXMub3V0TWltZVR5cGUsXG4gICAgICBzb3VyY2VNYXBzXG4gICAgfTtcbiAgfVxuXG4gIGFkZEhvdE1vZHVsZUxvYWRpbmdSZWdpc3RyYXRpb24oc291cmNlQ29kZSwgZmlsZU5hbWUsIGV4cG9ydHMpIHtcbiAgICBpZiAoZXhwb3J0cy5sZW5ndGggPCAxKSByZXR1cm4gc291cmNlQ29kZTtcblxuICAgIGxldCByZWdpc3RyYXRpb25zID0gZXhwb3J0cy5tYXAoeCA9PiB7XG4gICAgICBsZXQgaWQgPSBgJHt4fWAgPT0gJ2RlZmF1bHQnID8gJyh0eXBlb2YgX2RlZmF1bHQgIT09IFxcJ3VuZGVmaW5lZFxcJyA/IF9kZWZhdWx0IDogZXhwb3J0cy5kZWZhdWx0KScgOiBgJHt4fWA7XG4gICAgICBsZXQgbmFtZSA9IGBcIiR7eH1cImA7XG4gICAgICByZXR1cm4gYF9fUkVBQ1RfSE9UX0xPQURFUl9fLnJlZ2lzdGVyKCR7aWR9LCAke25hbWV9LCBfX0ZJTEVOQU1FX18pO1xcbmA7XG4gICAgfSk7XG5cbiAgICBsZXQgdG1wbCA9IGBcbiR7c291cmNlQ29kZX1cblxuaWYgKHR5cGVvZiBfX1JFQUNUX0hPVF9MT0FERVJfXyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgY29uc3QgX19GSUxFTkFNRV9fID0gXCIke2pzRXNjYXBlKGZpbGVOYW1lKX1cIjtcbiAgJHtyZWdpc3RyYXRpb25zfVxufWA7XG5cbiAgICByZXR1cm4gdG1wbDtcbiAgfVxuXG4gIGdldEV4cG9ydHNGb3JGaWxlKHNvdXJjZUNvZGUsIGZpbGVOYW1lLCB0c09wdGlvbnMpIHtcbiAgICBsZXQgc291cmNlRmlsZSA9IHRzLmNyZWF0ZVNvdXJjZUZpbGUoZmlsZU5hbWUsIHNvdXJjZUNvZGUsIHRzLlNjcmlwdFRhcmdldC5FUzYpO1xuICAgIGxldCByZXQgPSBbXTtcblxuICAgIC8vIFdhbGsgdGhlIHRyZWUgdG8gc2VhcmNoIGZvciBjbGFzc2VzXG4gICAgbGV0IHZpc2l0ID0gKG5vZGUpID0+IHtcbiAgICAgIGlmICghdGhpcy5pc05vZGVFeHBvcnRlZChub2RlKSkgcmV0dXJuO1xuICAgICAgXG4gICAgICBpZiAobm9kZS5raW5kID09PSB0cy5TeW50YXhLaW5kLkNsYXNzRGVjbGFyYXRpb24gfHwgbm9kZS5raW5kID09PSB0cy5TeW50YXhLaW5kLkZ1bmN0aW9uRGVjbGFyYXRpb24pIHtcbiAgICAgICAgcmV0LnB1c2gobm9kZS5uYW1lLnRleHQpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICB0cy5mb3JFYWNoQ2hpbGQoc291cmNlRmlsZSwgdmlzaXQpO1xuXG4gICAgcmV0dXJuIHJldDtcbiAgfVxuXG4gIGlzTm9kZUV4cG9ydGVkKG5vZGUpIHtcbiAgICByZXR1cm4gKG5vZGUuZmxhZ3MgJiB0cy5Ob2RlRmxhZ3MuRXhwb3J0KSAhPT0gMCB8fCAobm9kZS5wYXJlbnQgJiYgbm9kZS5wYXJlbnQua2luZCA9PT0gdHMuU3ludGF4S2luZC5Tb3VyY2VGaWxlKTtcbiAgfVxuXG4gIGdldENvbXBpbGVyVmVyc2lvbigpIHtcbiAgICByZXR1cm4gcmVxdWlyZSgndHlwZXNjcmlwdC9wYWNrYWdlLmpzb24nKS52ZXJzaW9uO1xuICB9XG59XG4iXX0= \ No newline at end of file diff --git a/lib/json/cson.js b/lib/json/cson.js new file mode 100644 index 0000000..721a7ac --- /dev/null +++ b/lib/json/cson.js @@ -0,0 +1,40 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _compilerBase = require('../compiler-base'); + +const inputMimeTypes = ['text/cson']; +let CSON = null; + +/** + * @access private + */ +class CSONCompiler extends _compilerBase.SimpleCompilerBase { + constructor() { + super(); + } + + static getInputMimeTypes() { + return inputMimeTypes; + } + + compileSync(sourceCode, filePath) { + CSON = CSON || require('cson'); + + let result = CSON.parse(sourceCode); + + return { + code: JSON.stringify(result), + mimeType: 'application/json' + }; + } + + getCompilerVersion() { + return require('cson/package.json').version; + } +} +exports.default = CSONCompiler; +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9qc29uL2Nzb24uanMiXSwibmFtZXMiOlsiaW5wdXRNaW1lVHlwZXMiLCJDU09OIiwiQ1NPTkNvbXBpbGVyIiwiY29uc3RydWN0b3IiLCJnZXRJbnB1dE1pbWVUeXBlcyIsImNvbXBpbGVTeW5jIiwic291cmNlQ29kZSIsImZpbGVQYXRoIiwicmVxdWlyZSIsInJlc3VsdCIsInBhcnNlIiwiY29kZSIsIkpTT04iLCJzdHJpbmdpZnkiLCJtaW1lVHlwZSIsImdldENvbXBpbGVyVmVyc2lvbiIsInZlcnNpb24iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBOztBQUVBLE1BQU1BLGlCQUFpQixDQUFDLFdBQUQsQ0FBdkI7QUFDQSxJQUFJQyxPQUFPLElBQVg7O0FBRUE7OztBQUdlLE1BQU1DLFlBQU4sMENBQThDO0FBQzNEQyxnQkFBYztBQUNaO0FBQ0Q7O0FBRUQsU0FBT0MsaUJBQVAsR0FBMkI7QUFDekIsV0FBT0osY0FBUDtBQUNEOztBQUVESyxjQUFZQyxVQUFaLEVBQXdCQyxRQUF4QixFQUFrQztBQUNoQ04sV0FBT0EsUUFBUU8sUUFBUSxNQUFSLENBQWY7O0FBRUEsUUFBSUMsU0FBU1IsS0FBS1MsS0FBTCxDQUFXSixVQUFYLENBQWI7O0FBRUEsV0FBTztBQUNMSyxZQUFNQyxLQUFLQyxTQUFMLENBQWVKLE1BQWYsQ0FERDtBQUVMSyxnQkFBVTtBQUZMLEtBQVA7QUFJRDs7QUFFREMsdUJBQXFCO0FBQ25CLFdBQU9QLFFBQVEsbUJBQVIsRUFBNkJRLE9BQXBDO0FBQ0Q7QUF0QjBEO2tCQUF4Q2QsWSIsImZpbGUiOiJjc29uLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtTaW1wbGVDb21waWxlckJhc2V9IGZyb20gJy4uL2NvbXBpbGVyLWJhc2UnO1xuXG5jb25zdCBpbnB1dE1pbWVUeXBlcyA9IFsndGV4dC9jc29uJ107XG5sZXQgQ1NPTiA9IG51bGw7XG5cbi8qKlxuICogQGFjY2VzcyBwcml2YXRlXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENTT05Db21waWxlciBleHRlbmRzIFNpbXBsZUNvbXBpbGVyQmFzZSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICBzdGF0aWMgZ2V0SW5wdXRNaW1lVHlwZXMoKSB7XG4gICAgcmV0dXJuIGlucHV0TWltZVR5cGVzO1xuICB9XG5cbiAgY29tcGlsZVN5bmMoc291cmNlQ29kZSwgZmlsZVBhdGgpIHtcbiAgICBDU09OID0gQ1NPTiB8fCByZXF1aXJlKCdjc29uJyk7XG5cbiAgICBsZXQgcmVzdWx0ID0gQ1NPTi5wYXJzZShzb3VyY2VDb2RlKTtcblxuICAgIHJldHVybiB7XG4gICAgICBjb2RlOiBKU09OLnN0cmluZ2lmeShyZXN1bHQpLFxuICAgICAgbWltZVR5cGU6ICdhcHBsaWNhdGlvbi9qc29uJ1xuICAgIH07XG4gIH1cblxuICBnZXRDb21waWxlclZlcnNpb24oKSB7XG4gICAgcmV0dXJuIHJlcXVpcmUoJ2Nzb24vcGFja2FnZS5qc29uJykudmVyc2lvbjtcbiAgfVxufVxuIl19 \ No newline at end of file diff --git a/lib/main.js b/lib/main.js new file mode 100644 index 0000000..3560fd1 --- /dev/null +++ b/lib/main.js @@ -0,0 +1,6 @@ +'use strict'; + +const filenames = ['css/less', 'css/sass', 'css/stylus', 'js/babel', 'js/graphql', 'js/coffeescript', 'js/typescript', 'json/cson', 'html/inline-html', 'html/jade', 'html/vue', 'passthrough']; + +module.exports = filenames.map(x => require('./' + x).default); +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9tYWluLmpzIl0sIm5hbWVzIjpbImZpbGVuYW1lcyIsIm1vZHVsZSIsImV4cG9ydHMiLCJtYXAiLCJ4IiwicmVxdWlyZSIsImRlZmF1bHQiXSwibWFwcGluZ3MiOiI7O0FBQUEsTUFBTUEsWUFBWSxDQUNoQixVQURnQixFQUVoQixVQUZnQixFQUdoQixZQUhnQixFQUloQixVQUpnQixFQUtoQixZQUxnQixFQU1oQixpQkFOZ0IsRUFPaEIsZUFQZ0IsRUFRaEIsV0FSZ0IsRUFTaEIsa0JBVGdCLEVBVWhCLFdBVmdCLEVBV2hCLFVBWGdCLEVBWWhCLGFBWmdCLENBQWxCOztBQWVBQyxPQUFPQyxPQUFQLEdBQWlCRixVQUFVRyxHQUFWLENBQWVDLENBQUQsSUFBT0MsUUFBUSxPQUFPRCxDQUFmLEVBQWtCRSxPQUF2QyxDQUFqQiIsImZpbGUiOiJtYWluLmpzIiwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgZmlsZW5hbWVzID0gW1xuICAnY3NzL2xlc3MnLFxuICAnY3NzL3Nhc3MnLFxuICAnY3NzL3N0eWx1cycsXG4gICdqcy9iYWJlbCcsXG4gICdqcy9ncmFwaHFsJyxcbiAgJ2pzL2NvZmZlZXNjcmlwdCcsXG4gICdqcy90eXBlc2NyaXB0JyxcbiAgJ2pzb24vY3NvbicsXG4gICdodG1sL2lubGluZS1odG1sJyxcbiAgJ2h0bWwvamFkZScsXG4gICdodG1sL3Z1ZScsXG4gICdwYXNzdGhyb3VnaCdcbl07XG5cbm1vZHVsZS5leHBvcnRzID0gZmlsZW5hbWVzLm1hcCgoeCkgPT4gcmVxdWlyZSgnLi8nICsgeCkuZGVmYXVsdCk7XG4iXX0= \ No newline at end of file diff --git a/lib/passthrough.js b/lib/passthrough.js new file mode 100644 index 0000000..256f557 --- /dev/null +++ b/lib/passthrough.js @@ -0,0 +1,48 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _path = require('path'); + +var _path2 = _interopRequireDefault(_path); + +var _compilerBase = require('./compiler-base'); + +var _mimeTypes = require('@paulcbetts/mime-types'); + +var _mimeTypes2 = _interopRequireDefault(_mimeTypes); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +const inputMimeTypes = ['text/plain', 'image/svg+xml']; + +/** + * @access private + * + * This class is used for binary files and other files that should end up in + * your cache directory, but aren't actually compiled + */ +class PassthroughCompiler extends _compilerBase.SimpleCompilerBase { + constructor() { + super(); + } + + static getInputMimeTypes() { + return inputMimeTypes; + } + + compileSync(sourceCode, filePath) { + return { + code: sourceCode, + mimeType: _mimeTypes2.default.lookup(filePath) + }; + } + + getCompilerVersion() { + return require(_path2.default.join(__dirname, '..', 'package.json')).version; + } +} +exports.default = PassthroughCompiler; +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9wYXNzdGhyb3VnaC5qcyJdLCJuYW1lcyI6WyJpbnB1dE1pbWVUeXBlcyIsIlBhc3N0aHJvdWdoQ29tcGlsZXIiLCJjb25zdHJ1Y3RvciIsImdldElucHV0TWltZVR5cGVzIiwiY29tcGlsZVN5bmMiLCJzb3VyY2VDb2RlIiwiZmlsZVBhdGgiLCJjb2RlIiwibWltZVR5cGUiLCJsb29rdXAiLCJnZXRDb21waWxlclZlcnNpb24iLCJyZXF1aXJlIiwiam9pbiIsIl9fZGlybmFtZSIsInZlcnNpb24iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBOzs7O0FBQ0E7O0FBQ0E7Ozs7OztBQUVBLE1BQU1BLGlCQUFpQixDQUFDLFlBQUQsRUFBZSxlQUFmLENBQXZCOztBQUdBOzs7Ozs7QUFNZSxNQUFNQyxtQkFBTiwwQ0FBcUQ7QUFDbEVDLGdCQUFjO0FBQ1o7QUFDRDs7QUFFRCxTQUFPQyxpQkFBUCxHQUEyQjtBQUN6QixXQUFPSCxjQUFQO0FBQ0Q7O0FBRURJLGNBQVlDLFVBQVosRUFBd0JDLFFBQXhCLEVBQWtDO0FBQ2hDLFdBQU87QUFDTEMsWUFBTUYsVUFERDtBQUVMRyxnQkFBVSxvQkFBVUMsTUFBVixDQUFpQkgsUUFBakI7QUFGTCxLQUFQO0FBSUQ7O0FBRURJLHVCQUFxQjtBQUNuQixXQUFPQyxRQUFRLGVBQUtDLElBQUwsQ0FBVUMsU0FBVixFQUFxQixJQUFyQixFQUEyQixjQUEzQixDQUFSLEVBQW9EQyxPQUEzRDtBQUNEO0FBbEJpRTtrQkFBL0NiLG1CIiwiZmlsZSI6InBhc3N0aHJvdWdoLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQge1NpbXBsZUNvbXBpbGVyQmFzZX0gZnJvbSAnLi9jb21waWxlci1iYXNlJztcbmltcG9ydCBtaW1lVHlwZXMgZnJvbSAnQHBhdWxjYmV0dHMvbWltZS10eXBlcyc7XG5cbmNvbnN0IGlucHV0TWltZVR5cGVzID0gWyd0ZXh0L3BsYWluJywgJ2ltYWdlL3N2Zyt4bWwnXTtcblxuXG4vKipcbiAqIEBhY2Nlc3MgcHJpdmF0ZVxuICogXG4gKiBUaGlzIGNsYXNzIGlzIHVzZWQgZm9yIGJpbmFyeSBmaWxlcyBhbmQgb3RoZXIgZmlsZXMgdGhhdCBzaG91bGQgZW5kIHVwIGluIFxuICogeW91ciBjYWNoZSBkaXJlY3RvcnksIGJ1dCBhcmVuJ3QgYWN0dWFsbHkgY29tcGlsZWRcbiAqLyBcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFBhc3N0aHJvdWdoQ29tcGlsZXIgZXh0ZW5kcyBTaW1wbGVDb21waWxlckJhc2Uge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgc3RhdGljIGdldElucHV0TWltZVR5cGVzKCkge1xuICAgIHJldHVybiBpbnB1dE1pbWVUeXBlcztcbiAgfVxuXG4gIGNvbXBpbGVTeW5jKHNvdXJjZUNvZGUsIGZpbGVQYXRoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNvZGU6IHNvdXJjZUNvZGUsXG4gICAgICBtaW1lVHlwZTogbWltZVR5cGVzLmxvb2t1cChmaWxlUGF0aClcbiAgICB9O1xuICB9XG4gIFxuICBnZXRDb21waWxlclZlcnNpb24oKSB7XG4gICAgcmV0dXJuIHJlcXVpcmUocGF0aC5qb2luKF9fZGlybmFtZSwgJy4uJywgJ3BhY2thZ2UuanNvbicpKS52ZXJzaW9uO1xuICB9XG59XG4iXX0= \ No newline at end of file From 23406608160cd5f6967ddbe4069a5236c58b5ffd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexandre=20Lach=C3=A8ze?= Date: Sat, 17 Jun 2017 00:16:51 +0200 Subject: [PATCH 5/8] Fuclll --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 27789f5..b1db09e 100644 --- a/package.json +++ b/package.json @@ -1,5 +1,5 @@ { - "name": "@getstation/electron-compilers", + "name": "electron-compilers", "version": "5.10.0", "description": "Compiler implementations for electron-compile", "main": "lib/main.js", From 16c7b5f41d269783aa8bdf4a3460f68b8dc702d6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexandre=20Lach=C3=A8ze?= Date: Sat, 17 Jun 2017 00:25:13 +0200 Subject: [PATCH 6/8] Screw --- .gitignore | 1 - 1 file changed, 1 deletion(-) diff --git a/.gitignore b/.gitignore index 179f575..3dc61be 100644 --- a/.gitignore +++ b/.gitignore @@ -26,6 +26,5 @@ build/Release # https://docs.npmjs.com/misc/faq#should-i-check-my-node-modules-folder-into-git node_modules -lib test-dist docs From 22b092e65daa5547a2c0b7b2bdbec3e60396ef26 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexandre=20Lach=C3=A8ze?= Date: Thu, 22 Jun 2017 13:21:02 +0200 Subject: [PATCH 7/8] Very basic import --- lib/css/sass.js | 14 ++++---------- src/css/sass.js | 12 +++--------- 2 files changed, 7 insertions(+), 19 deletions(-) diff --git a/lib/css/sass.js b/lib/css/sass.js index 2b4316a..a3ab9d2 100644 --- a/lib/css/sass.js +++ b/lib/css/sass.js @@ -202,17 +202,11 @@ class SassCompiler extends _compilerBase.CompilerBase { done(); return; } else { - // sass.js works in the '/sass/' directory - let cleanedRequestPath = request.resolved.replace(/^\/sass\//, ''); - - // if we are importing from the entry file (stdin) the path is - // resolved with a leading '/'' -> remove it - if (request.previous === 'stdin' && cleanedRequestPath.charAt(0) === '/') { - cleanedRequestPath = cleanedRequestPath.substring(1); - } + // treat as it + const importRequest = request.current; for (let includePath of includePaths) { - const filePath = _path2.default.resolve(includePath, cleanedRequestPath); + const filePath = _path2.default.resolve(includePath, importRequest); let variations = sass.getPathVariations(filePath); file = variations.map(self.fixWindowsPath.bind(self)).reduce(self.importedFileReducer.bind(self), null); @@ -274,4 +268,4 @@ class SassCompiler extends _compilerBase.CompilerBase { } } exports.default = SassCompiler; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jc3Mvc2Fzcy5qcyJdLCJuYW1lcyI6WyJtaW1lVHlwZXMiLCJzYXNzIiwiU2Fzc0NvbXBpbGVyIiwiY29uc3RydWN0b3IiLCJjb21waWxlck9wdGlvbnMiLCJjb21tZW50cyIsInNvdXJjZU1hcEVtYmVkIiwic291cmNlTWFwQ29udGVudHMiLCJzZWVuRmlsZVBhdGhzIiwiZ2V0SW5wdXRNaW1lVHlwZXMiLCJzaG91bGRDb21waWxlRmlsZSIsImZpbGVOYW1lIiwiY29tcGlsZXJDb250ZXh0IiwiZGV0ZXJtaW5lRGVwZW5kZW50RmlsZXMiLCJzb3VyY2VDb2RlIiwiZmlsZVBhdGgiLCJkZXRlcm1pbmVEZXBlbmRlbnRGaWxlc1N5bmMiLCJjb21waWxlIiwiZ2V0U2FzcyIsInRoaXNQYXRoIiwiZGlybmFtZSIsInBhdGhzIiwiT2JqZWN0Iiwia2V5cyIsInB1c2giLCJ1bnNoaWZ0IiwiaW1wb3J0ZXIiLCJidWlsZEltcG9ydGVyQ2FsbGJhY2siLCJvcHRzIiwiYXNzaWduIiwiaW5kZW50ZWRTeW50YXgiLCJtYXRjaCIsInNvdXJjZU1hcFJvb3QiLCJyZXN1bHQiLCJQcm9taXNlIiwicmVzIiwicmVqIiwiciIsInN0YXR1cyIsIkVycm9yIiwiZm9ybWF0dGVkIiwibWVzc2FnZSIsInNvdXJjZSIsInRleHQiLCJjb2RlIiwibWltZVR5cGUiLCJzaG91bGRDb21waWxlRmlsZVN5bmMiLCJkZXBlbmRlbmN5RmlsZW5hbWVzIiwiZXh0bmFtZSIsImRlcGVuZGVuY2llcyIsImRlcGVuZGVuY3lOYW1lIiwiYmFzZW5hbWUiLCJjb21waWxlU3luYyIsInJldCIsInJlcXVpcmUiLCJTYXNzIiwiaW5jbHVkZVBhdGhzIiwic2VsZiIsInJlcXVlc3QiLCJkb25lIiwiZmlsZSIsImNsZWFuZWRSZXF1ZXN0UGF0aCIsInJlc29sdmVkIiwicmVwbGFjZSIsInByZXZpb3VzIiwiY2hhckF0Iiwic3Vic3RyaW5nIiwiaW5jbHVkZVBhdGgiLCJyZXNvbHZlIiwidmFyaWF0aW9ucyIsImdldFBhdGhWYXJpYXRpb25zIiwibWFwIiwiZml4V2luZG93c1BhdGgiLCJiaW5kIiwicmVkdWNlIiwiaW1wb3J0ZWRGaWxlUmVkdWNlciIsImNvbnRlbnQiLCJyZWFkRmlsZVN5bmMiLCJlbmNvZGluZyIsIndyaXRlRmlsZSIsInBhdGgiLCJmb3VuZCIsInN0YXQiLCJzdGF0U3luYyIsImlzRmlsZSIsImUiLCJwcm9jZXNzIiwicGxhdGZvcm0iLCJzbGljZSIsInBhcnRzIiwic3BsaXQiLCJzZXAiLCJkaXIiLCJqb2luIiwicmV2ZXJzZSIsImdldENvbXBpbGVyVmVyc2lvbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUE7Ozs7QUFDQTs7OztBQUNBOzs7O0FBQ0E7Ozs7QUFDQTs7OztBQUNBOzs7O0FBQ0E7Ozs7OztBQUVBLE1BQU1BLFlBQVksQ0FBQyxXQUFELEVBQWMsV0FBZCxDQUFsQjtBQUNBLElBQUlDLE9BQU8sSUFBWDs7QUFFQTs7O0FBR2UsTUFBTUMsWUFBTixvQ0FBd0M7QUFDckRDLGdCQUFjO0FBQ1o7O0FBRUEsU0FBS0MsZUFBTCxHQUF1QjtBQUNyQkMsZ0JBQVUsSUFEVztBQUVyQkMsc0JBQWdCLElBRks7QUFHckJDLHlCQUFtQjtBQUhFLEtBQXZCOztBQU1BLFNBQUtDLGFBQUwsR0FBcUIsRUFBckI7QUFDRDs7QUFFRCxTQUFPQyxpQkFBUCxHQUEyQjtBQUN6QixXQUFPVCxTQUFQO0FBQ0Q7O0FBRUtVLG1CQUFOLENBQXdCQyxRQUF4QixFQUFrQ0MsZUFBbEMsRUFBbUQ7QUFBQTtBQUNqRCxhQUFPLElBQVA7QUFEaUQ7QUFFbEQ7O0FBRUtDLHlCQUFOLENBQThCQyxVQUE5QixFQUEwQ0MsUUFBMUMsRUFBb0RILGVBQXBELEVBQXFFO0FBQUE7O0FBQUE7QUFDbkUsYUFBTyxNQUFLSSwyQkFBTCxDQUFpQ0YsVUFBakMsRUFBNkNDLFFBQTdDLEVBQXVESCxlQUF2RCxDQUFQO0FBRG1FO0FBRXBFOztBQUVLSyxTQUFOLENBQWNILFVBQWQsRUFBMEJDLFFBQTFCLEVB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LE1BQUwsRUFBTCxFQUFvQixPQUFPLElBQVA7QUFDcEIsYUFBT0osSUFBUDtBQUNELEtBSkQsQ0FJRSxPQUFNSyxDQUFOLEVBQVM7QUFDVCxhQUFPLElBQVA7QUFDRDtBQUNGOztBQUVEYixpQkFBZVosSUFBZixFQUFxQjtBQUNuQjtBQUNBOztBQUVBO0FBQ0EsUUFBSTBCLFFBQVFDLFFBQVIsS0FBcUIsT0FBckIsSUFBZ0MzQixLQUFLLENBQUwsTUFBWSxHQUFoRCxFQUFxRDtBQUNuREEsYUFBT0EsS0FBSzRCLEtBQUwsQ0FBVyxDQUFYLENBQVA7QUFDRDs7QUFFRDtBQUNBLFFBQUk1QixLQUFLLENBQUwsTUFBWSxHQUFoQixFQUFxQjtBQUNuQixZQUFNNkIsUUFBUTdCLEtBQUs0QixLQUFMLENBQVcsQ0FBWCxFQUFjRSxLQUFkLENBQW9CLGVBQUtDLEdBQXpCLENBQWQ7QUFDQSxZQUFNQyxNQUFNSCxNQUFNRCxLQUFOLENBQVksQ0FBWixFQUFlLENBQUMsQ0FBaEIsRUFBbUJLLElBQW5CLENBQXdCLGVBQUtGLEdBQTdCLENBQVo7QUFDQSxZQUFNaEYsV0FBVzhFLE1BQU1LLE9BQU4sR0FBZ0IsQ0FBaEIsQ0FBakI7QUFDQWxDLGFBQU8sZUFBS1EsT0FBTCxDQUFhd0IsR0FBYixFQUFrQixNQUFNakYsUUFBeEIsQ0FBUDtBQUNEO0FBQ0QsV0FBT2lELElBQVA7QUFDRDs7QUFFRG1DLHVCQUFxQjtBQUNuQjtBQUNBO0FBQ0E7QUFDQSxXQUFPLE9BQVA7QUFDRDtBQS9Ob0Q7a0JBQWxDN0YsWSIsImZpbGUiOiJzYXNzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgZnMgZnJvbSAnZnMnO1xuaW1wb3J0IHRvdXRTdWl0ZSBmcm9tICd0b3V0c3VpdGUnO1xuaW1wb3J0IGRldGVjdGl2ZVNBU1MgZnJvbSAnZGV0ZWN0aXZlLXNhc3MnO1xuaW1wb3J0IGRldGVjdGl2ZVNDU1MgZnJvbSAnZGV0ZWN0aXZlLXNjc3MnO1xuaW1wb3J0IHNhc3NMb29rdXAgZnJvbSAnc2Fzcy1sb29rdXAnO1xuaW1wb3J0IHtDb21waWxlckJhc2V9IGZyb20gJy4uL2NvbXBpbGVyLWJhc2UnO1xuXG5jb25zdCBtaW1lVHlwZXMgPSBbJ3RleHQvc2FzcycsICd0ZXh0L3Njc3MnXTtcbmxldCBzYXNzID0gbnVsbDtcblxuLyoqXG4gKiBAYWNjZXNzIHByaXZhdGVcbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2Fzc0NvbXBpbGVyIGV4dGVuZHMgQ29tcGlsZXJCYXNlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcblxuICAgIHRoaXMuY29tcGlsZXJPcHRpb25zID0ge1xuICAgICAgY29tbWVudHM6IHRydWUsXG4gICAgICBzb3VyY2VNYXBFbWJlZDogdHJ1ZSxcbiAgICAgIHNvdXJjZU1hcENvbnRlbnRzOiB0cnVlXG4gICAgfTtcblxuICAgIHRoaXMuc2VlbkZpbGVQYXRocyA9IHt9O1xuICB9XG5cbiAgc3RhdGljIGdldElucHV0TWltZVR5cGVzKCkge1xuICAgIHJldHVybiBtaW1lVHlwZXM7XG4gIH1cblxuICBhc3luYyBzaG91bGRDb21waWxlRmlsZShmaWxlTmFtZSwgY29tcGlsZXJDb250ZXh0KSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBhc3luYyBkZXRlcm1pbmVEZXBlbmRlbnRGaWxlcyhzb3VyY2VDb2RlLCBmaWxlUGF0aCwgY29tcGlsZXJDb250ZXh0KSB7XG4gICAgcmV0dXJuIHRoaXMuZGV0ZXJtaW5lRGVwZW5kZW50RmlsZXNTeW5jKHNvdXJjZUNvZGUsIGZpbGVQYXRoLCBjb21waWxlckNvbnRleHQpO1xuICB9XG5cbiAgYXN5bmMgY29tcGlsZShzb3VyY2VDb2RlLCBmaWxlUGF0aCwgY29tcGlsZXJDb250ZXh0KSB7XG4gICAgc2FzcyA9IHNhc3MgfHwgdGhpcy5nZXRTYXNzKCk7XG5cbiAgICBsZXQgdGhpc1BhdGggPSBwYXRoLmRpcm5hbWUoZmlsZVBhdGgpO1xuICAgIHRoaXMuc2VlbkZpbGVQYXRoc1t0aGlzUGF0aF0gPSB0cnVlO1xuXG4gICAgbGV0IHBhdGhzID0gT2JqZWN0LmtleXModGhpcy5zZWVuRmlsZVBhdGhzKTtcblxuICAgIGlmICh0aGlzLmNvbXBpbGVyT3B0aW9ucy5wYXRocykge1xuICAgICAgcGF0aHMucHVzaCguLi50aGlzLmNvbXBpbGVyT3B0aW9ucy5wYXRocyk7XG4gICAgfVxuXG4gICAgcGF0aHMudW5zaGlmdCgnLicpO1xuXG4gICAgc2Fzcy5pbXBvcnRlcih0aGlzLmJ1aWxkSW1wb3J0ZXJDYWxsYmFjayhwYXRocykpO1xuXG4gICAgbGV0IG9wdHMgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLmNvbXBpbGVyT3B0aW9ucywge1xuICAgICAgaW5kZW50ZWRTeW50YXg6IGZpbGVQYXRoLm1hdGNoKC9cXC5zYXNzJC9pKSxcbiAgICAgIHNvdXJjZU1hcFJvb3Q6IGZpbGVQYXRoLFxuICAgIH0pO1xuXG4gICAgLy8gbm90IGEgdmFsaWQgb3B0aW9uXG4gICAgZGVsZXRlIG9wdHMucGF0aHM7XG5cbiAgICBsZXQgcmVzdWx0ID0gYXdhaXQgbmV3IFByb21pc2UoKHJlcyxyZWopID0+IHtcbiAgICAgIHNhc3MuY29tcGlsZShzb3VyY2VDb2RlLCBvcHRzLCAocikgPT4ge1xuICAgICAgICBpZiAoci5zdGF0dXMgIT09IDApIHtcbiAgICAgICAgICByZWoobmV3IEVycm9yKHIuZm9ybWF0dGVkIHx8IHIubWVzc2FnZSkpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlcyhyKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBsZXQgc291cmNlID0gcmVzdWx0LnRleHQ7XG5cbiAgICAvLyBOQjogSWYgeW91IGNvbXBpbGUgYSBmaWxlIHRoYXQgaXMgc29sZWx5IGltcG9ydHMsIGl0c1xuICAgIC8vIGFjdHVhbCBjb250ZW50IGlzICcnIHlldCBpdCBpcyBhIHZhbGlkIGZpbGUuICcnIGlzIG5vdFxuICAgIC8vIHRydXRoeSwgc28gd2UncmUgZ29pbmcgdG8gcmVwbGFjZSBpdCB3aXRoIGEgc3RyaW5nIHRoYXRcbiAgICAvLyBpcyB0cnV0aHkuXG4gICAgaWYgKCFzb3VyY2UpIHtcbiAgICAgIHNvdXJjZSA9ICcgJztcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgY29kZTogc291cmNlLFxuICAgICAgbWltZVR5cGU6ICd0ZXh0L2NzcydcbiAgICB9O1xuICB9XG5cbiAgc2hvdWxkQ29tcGlsZUZpbGVTeW5jKGZpbGVOYW1lLCBjb21waWxlckNvbnRleHQpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGRldGVybWluZURlcGVuZGVudEZpbGVzU3luYyhzb3VyY2VDb2RlLCBmaWxlUGF0aCwgY29tcGlsZXJDb250ZXh0KSB7XG4gICAgbGV0IGRlcGVuZGVuY3lGaWxlbmFtZXMgPSBwYXRoLmV4dG5hbWUoZmlsZVBhdGgpID09PSAnLnNhc3MnID8gZGV0ZWN0aXZlU0FTUyhzb3VyY2VDb2RlKSA6IGRldGVjdGl2ZVNDU1Moc291cmNlQ29kZSk7XG4gICAgbGV0IGRlcGVuZGVuY2llcyA9IFtdO1xuXG4gICAgZm9yIChsZXQgZGVwZW5kZW5jeU5hbWUgb2YgZGVwZW5kZW5jeUZpbGVuYW1lcykge1xuICAgICAgZGVwZW5kZW5jaWVzLnB1c2goc2Fzc0xvb2t1cChkZXBlbmRlbmN5TmFtZSwgcGF0aC5iYXNlbmFtZShmaWxlUGF0aCksIHBhdGguZGlybmFtZShmaWxlUGF0aCkpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZGVwZW5kZW5jaWVzO1xuICB9XG5cbiAgY29tcGlsZVN5bmMoc291cmNlQ29kZSwgZmlsZVBhdGgsIGNvbXBpbGVyQ29udGV4dCkge1xuICAgIHNhc3MgPSBzYXNzIHx8IHRoaXMuZ2V0U2FzcygpO1xuXG4gICAgbGV0IHRoaXNQYXRoID0gcGF0aC5kaXJuYW1lKGZpbGVQYXRoKTtcbiAgICB0aGlzLnNlZW5GaWxlUGF0aHNbdGhpc1BhdGhdID0gdHJ1ZTtcblxuICAgIGxldCBwYXRocyA9IE9iamVjdC5rZXlzKHRoaXMuc2VlbkZpbGVQYXRocyk7XG5cbiAgICBpZiAodGhpcy5jb21waWxlck9wdGlvbnMucGF0aHMpIHtcbiAgICAgIHBhdGhzLnB1c2goLi4udGhpcy5jb21waWxlck9wdGlvbnMucGF0aHMpO1xuICAgIH1cblxuICAgIHBhdGhzLnVuc2hpZnQoJy4nKTtcbiAgICBzYXNzLmltcG9ydGVyKHRoaXMuYnVpbGRJbXBvcnRlckNhbGxiYWNrKHBhdGhzKSk7XG5cbiAgICBsZXQgb3B0cyA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuY29tcGlsZXJPcHRpb25zLCB7XG4gICAgICBpbmRlbnRlZFN5bnRheDogZmlsZVBhdGgubWF0Y2goL1xcLnNhc3MkL2kpLFxuICAgICAgc291cmNlTWFwUm9vdDogZmlsZVBhdGgsXG4gICAgfSk7XG5cbiAgICBsZXQgcmVzdWx0O1xuICAgIHRvdXRTdWl0ZSgoKSA9PiB7XG4gICAgICBzYXNzLmNvbXBpbGUoc291cmNlQ29kZSwgb3B0cywgKHIpID0+IHtcbiAgICAgICAgaWYgKHIuc3RhdHVzICE9PSAwKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKHIuZm9ybWF0dGVkKTtcbiAgICAgICAgfVxuICAgICAgICByZXN1bHQgPSByO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBsZXQgc291cmNlID0gcmVzdWx0LnRleHQ7XG5cbiAgICAvLyBOQjogSWYgeW91IGNvbXBpbGUgYSBmaWxlIHRoYXQgaXMgc29sZWx5IGltcG9ydHMsIGl0c1xuICAgIC8vIGFjdHVhbCBjb250ZW50IGlzICcnIHlldCBpdCBpcyBhIHZhbGlkIGZpbGUuICcnIGlzIG5vdFxuICAgIC8vIHRydXRoeSwgc28gd2UncmUgZ29pbmcgdG8gcmVwbGFjZSBpdCB3aXRoIGEgc3RyaW5nIHRoYXRcbiAgICAvLyBpcyB0cnV0aHkuXG4gICAgaWYgKCFzb3VyY2UpIHtcbiAgICAgIHNvdXJjZSA9ICcgJztcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgY29kZTogc291cmNlLFxuICAgICAgbWltZVR5cGU6ICd0ZXh0L2NzcydcbiAgICB9O1xuICB9XG5cbiAgZ2V0U2FzcygpIHtcbiAgICBsZXQgcmV0O1xuICAgIHRvdXRTdWl0ZSgoKSA9PiByZXQgPSByZXF1aXJlKCdzYXNzLmpzL2Rpc3Qvc2Fzcy5ub2RlJykuU2Fzcyk7XG4gICAgcmV0dXJuIHJldDtcbiAgfVxuXG4gIGJ1aWxkSW1wb3J0ZXJDYWxsYmFjayAoaW5jbHVkZVBhdGhzKSB7XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgcmV0dXJuIChmdW5jdGlvbiAocmVxdWVzdCwgZG9uZSkge1xuICAgICAgbGV0IGZpbGU7XG4gICAgICBpZiAocmVxdWVzdC5maWxlKSB7XG4gICAgICAgIGRvbmUoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gc2Fzcy5qcyB3b3JrcyBpbiB0aGUgJy9zYXNzLycgZGlyZWN0b3J5XG4gICAgICAgIGxldCBjbGVhbmVkUmVxdWVzdFBhdGggPSByZXF1ZXN0LnJlc29sdmVkLnJlcGxhY2UoL15cXC9zYXNzXFwvLywgJycpO1xuXG4gICAgICAgIC8vIGlmIHdlIGFyZSBpbXBvcnRpbmcgZnJvbSB0aGUgZW50cnkgZmlsZSAoc3RkaW4pIHRoZSBwYXRoIGlzXG4gICAgICAgIC8vIHJlc29sdmVkIHdpdGggYSBsZWFkaW5nICcvJycgLT4gcmVtb3ZlIGl0XG4gICAgICAgIGlmIChyZXF1ZXN0LnByZXZpb3VzID09PSAnc3RkaW4nICYmIGNsZWFuZWRSZXF1ZXN0UGF0aC5jaGFyQXQoMCkgPT09ICcvJykge1xuICAgICAgICAgIGNsZWFuZWRSZXF1ZXN0UGF0aCA9IGNsZWFuZWRSZXF1ZXN0UGF0aC5zdWJzdHJpbmcoMSk7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGxldCBpbmNsdWRlUGF0aCBvZiBpbmNsdWRlUGF0aHMpIHtcbiAgICAgICAgICBjb25zdCBmaWxlUGF0aCA9IHBhdGgucmVzb2x2ZShpbmNsdWRlUGF0aCwgY2xlYW5lZFJlcXVlc3RQYXRoKTtcbiAgICAgICAgICBsZXQgdmFyaWF0aW9ucyA9IHNhc3MuZ2V0UGF0aFZhcmlhdGlvbnMoZmlsZVBhdGgpO1xuXG4gICAgICAgICAgZmlsZSA9IHZhcmlhdGlvbnNcbiAgICAgICAgICAgIC5tYXAoc2VsZi5maXhXaW5kb3dzUGF0aC5iaW5kKHNlbGYpKVxuICAgICAgICAgICAgLnJlZHVjZShzZWxmLmltcG9ydGVkRmlsZVJlZHVjZXIuYmluZChzZWxmKSwgbnVsbCk7XG5cbiAgICAgICAgICBpZiAoZmlsZSkge1xuICAgICAgICAgICAgY29uc3QgY29udGVudCA9IGZzLnJlYWRGaWxlU3luYyhmaWxlLCB7IGVuY29kaW5nOiAndXRmOCcgfSk7XG4gICAgICAgICAgICByZXR1cm4gc2Fzcy53cml0ZUZpbGUoZmlsZSwgY29udGVudCwgKCkgPT4ge1xuICAgICAgICAgICAgICBkb25lKHsgcGF0aDogZmlsZSB9KTtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFmaWxlKSB7XG4gICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgaW1wb3J0ZWRGaWxlUmVkdWNlcihmb3VuZCwgcGF0aCkge1xuICAgIC8vIEZpbmQgdGhlIGZpcnN0IHZhcmlhdGlvbiB0aGF0IGFjdHVhbGx5IGV4aXN0c1xuICAgIGlmIChmb3VuZCkgcmV0dXJuIGZvdW5kO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHN0YXQgPSBmcy5zdGF0U3luYyhwYXRoKTtcbiAgICAgIGlmICghc3RhdC5pc0ZpbGUoKSkgcmV0dXJuIG51bGw7XG4gICAgICByZXR1cm4gcGF0aDtcbiAgICB9IGNhdGNoKGUpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIGZpeFdpbmRvd3NQYXRoKGZpbGUpIHtcbiAgICAvLyBVbmZvcnR1bmF0ZWx5LCB0aGVyZSdzIGEgYnVnIGluIHNhc3MuanMgdGhhdCBzZWVtcyB0byBpZ25vcmUgdGhlIGRpZmZlcmVudFxuICAgIC8vIHBhdGggc2VwYXJhdG9ycyBhY3Jvc3MgcGxhdGZvcm1zXG5cbiAgICAvLyBGb3Igc29tZSByZWFzb24sIHNvbWUgZmlsZXMgaGF2ZSBhIGxlYWRpbmcgc2xhc2ggdGhhdCB3ZSBuZWVkIHRvIGdldCByaWQgb2ZcbiAgICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJyAmJiBmaWxlWzBdID09PSAnLycpIHtcbiAgICAgIGZpbGUgPSBmaWxlLnNsaWNlKDEpO1xuICAgIH1cblxuICAgIC8vIFNhc3MuanMgZ2VuZXJhdGVzIHBhdGhzIHN1Y2ggYXMgYF9DOlxcbXlQYXRoXFxmaWxlLnNhc3NgIGluc3RlYWQgb2YgYEM6XFxteVBhdGhcXF9maWxlLnNhc3NgXG4gICAgaWYgKGZpbGVbMF0gPT09ICdfJykge1xuICAgICAgY29uc3QgcGFydHMgPSBmaWxlLnNsaWNlKDEpLnNwbGl0KHBhdGguc2VwKTtcbiAgICAgIGNvbnN0IGRpciA9IHBhcnRzLnNsaWNlKDAsIC0xKS5qb2luKHBhdGguc2VwKTtcbiAgICAgIGNvbnN0IGZpbGVOYW1lID0gcGFydHMucmV2ZXJzZSgpWzBdO1xuICAgICAgZmlsZSA9IHBhdGgucmVzb2x2ZShkaXIsICdfJyArIGZpbGVOYW1lKTtcbiAgICB9XG4gICAgcmV0dXJuIGZpbGU7XG4gIH1cblxuICBnZXRDb21waWxlclZlcnNpb24oKSB7XG4gICAgLy8gTkI6IFRoZXJlIGlzIGEgYml6YXJyZSBidWcgaW4gdGhlIG5vZGUgbW9kdWxlIHN5c3RlbSB3aGVyZSB0aGlzIGRvZXNuJ3RcbiAgICAvLyB3b3JrIGJ1dCBvbmx5IGluIHNhdmVDb25maWd1cmF0aW9uIHRlc3RzXG4gICAgLy9yZXR1cm4gcmVxdWlyZSgnQHBhdWxjYmV0dHMvbm9kZS1zYXNzL3BhY2thZ2UuanNvbicpLnZlcnNpb247XG4gICAgcmV0dXJuIFwiNC4xLjFcIjtcbiAgfVxufVxuIl19 \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jc3Mvc2Fzcy5qcyJdLCJuYW1lcyI6WyJtaW1lVHlwZXMiLCJzYXNzIiwiU2Fzc0NvbXBpbGVyIiwiY29uc3RydWN0b3IiLCJjb21waWxlck9wdGlvbnMiLCJjb21tZW50cyIsInNvdXJjZU1hcEVtYmVkIiwic291cmNlTWFwQ29udGVudHMiLCJzZWVuRmlsZVBhdGhzIiwiZ2V0SW5wdXRNaW1lVHlwZXMiLCJzaG91bGRDb21waWxlRmlsZSIsImZpbGVOYW1lIiwiY29tcGlsZXJDb250ZXh0IiwiZGV0ZXJtaW5lRGVwZW5kZW50RmlsZXMiLCJzb3VyY2VDb2RlIiwiZmlsZVBhdGgiLCJkZXRlcm1pbmVEZXBlbmRlbnRGaWxlc1N5bmMiLCJjb21waWxlIiwiZ2V0U2FzcyIsInRoaXNQYXRoIiwiZGlybmFtZSIsInBhdGhzIiwiT2JqZWN0Iiwia2V5cyIsInB1c2giLCJ1bnNoaWZ0IiwiaW1wb3J0ZXIiLCJidWlsZEltcG9ydGVyQ2FsbGJhY2siLCJvcHRzIiwiYXNzaWduIiwiaW5kZW50ZWRTeW50YXgiLCJtYXRjaCIsInNvdXJjZU1hcFJvb3QiLCJyZXN1bHQiLCJQcm9taXNlIiwicmVzIiwicmVqIiwiciIsInN0YXR1cyIsIkVycm9yIiwiZm9ybWF0dGVkIiwibWVzc2FnZSIsInNvdXJjZSIsInRleHQiLCJjb2RlIiwibWltZVR5cGUiLCJzaG91bGRDb21waWxlRmlsZVN5bmMiLCJkZXBlbmRlbmN5RmlsZW5hbWVzIiwiZXh0bmFtZSIsImRlcGVuZGVuY2llcyIsImRlcGVuZGVuY3lOYW1lIiwiYmFzZW5hbWUiLCJjb21waWxlU3luYyIsInJldCIsInJlcXVpcmUiLCJTYXNzIiwiaW5jbHVkZVBhdGhzIiwic2VsZiIsInJlcXVlc3QiLCJkb25lIiwiZmlsZSIsImltcG9ydFJlcXVlc3QiLCJjdXJyZW50IiwiaW5jbHVkZVBhdGgiLCJyZXNvbHZlIiwidmFyaWF0aW9ucyIsImdldFBhdGhWYXJpYXRpb25zIiwibWFwIiwiZml4V2luZG93c1BhdGgiLCJiaW5kIiwicmVkdWNlIiwiaW1wb3J0ZWRGaWxlUmVkdWNlciIsImNvbnRlbnQiLCJyZWFkRmlsZVN5bmMiLCJlbmNvZGluZyIsIndyaXRlRmlsZSIsInBhdGgiLCJmb3VuZCIsInN0YXQiLCJzdGF0U3luYyIsImlzRmlsZSIsImUiLCJwcm9jZXNzIiwicGxhdGZvcm0iLCJzbGljZSIsInBhcnRzIiwic3BsaXQiLCJzZXAiLCJkaXIiLCJqb2luIiwicmV2ZXJzZSIsImdldENvbXBpbGVyVmVyc2lvbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUE7Ozs7QUFDQTs7OztBQUNBOzs7O0FBQ0E7Ozs7QUFDQTs7OztBQUNBOzs7O0FBQ0E7Ozs7OztBQUVBLE1BQU1BLFlBQVksQ0FBQyxXQUFELEVBQWMsV0FBZCxDQUFsQjtBQUNBLElBQUlDLE9BQU8sSUFBWDs7QUFFQTs7O0FBR2UsTUFBTUMsWUFBTixvQ0FBd0M7QUFDckRDLGdCQUFjO0FBQ1o7O0FBRUEsU0FBS0MsZUFBTCxHQUF1QjtBQUNyQkMsZ0JBQVUsSUFEVztBQUVyQkMsc0JBQWdCLElBRks7QUFHckJDLHlCQUFtQjtBQUhFLEtBQXZCOztBQU1BLFNBQUtDLGFBQUwsR0FBcUIsRUFBckI7QUFDRDs7QUFFRCxTQUFPQyxpQkFBUCxHQUEyQjtBQUN6QixXQUFPVCxTQUFQO0FBQ0Q7O0FBRUtVLG1CQUFOLENBQXdCQyxRQUF4QixFQUFrQ0MsZUFBbEMsRUFBbUQ7QUFBQTtBQUNqRCxhQUFPLElBQVA7QUFEaUQ7QUFFbEQ7O0FBRUtDLHlCQUFOLENBQThCQyxVQUE5QixFQUEwQ0MsUUFBMUMsRUFBb0RILGVBQXBELEVBQXFFO0FBQUE7O0FBQUE7QUFDbkUsYUFBTyxNQUFLSSwyQkFBTCxDQUFpQ0YsVUFBakMsRUFBNkNDLFFBQTdDLEVBQXVESCxlQUF2RCxDQUFQO0FBRG1FO0FBRXBFOztBQUVLSyxTQUFOLENBQWNILFVBQWQsRUFBMEJDLFFBQTFCLEVBQW9DSCxlQUFwQyxFQUFxRDtBQUFBOztBQUFBO0FBQ25EWCxhQUFPQSxRQUFRLE9B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O0FBQ0Q7O0FBRUQ7QUFDQSxRQUFJeEIsS0FBSyxDQUFMLE1BQVksR0FBaEIsRUFBcUI7QUFDbkIsWUFBTXlCLFFBQVF6QixLQUFLd0IsS0FBTCxDQUFXLENBQVgsRUFBY0UsS0FBZCxDQUFvQixlQUFLQyxHQUF6QixDQUFkO0FBQ0EsWUFBTUMsTUFBTUgsTUFBTUQsS0FBTixDQUFZLENBQVosRUFBZSxDQUFDLENBQWhCLEVBQW1CSyxJQUFuQixDQUF3QixlQUFLRixHQUE3QixDQUFaO0FBQ0EsWUFBTTVFLFdBQVcwRSxNQUFNSyxPQUFOLEdBQWdCLENBQWhCLENBQWpCO0FBQ0E5QixhQUFPLGVBQUtJLE9BQUwsQ0FBYXdCLEdBQWIsRUFBa0IsTUFBTTdFLFFBQXhCLENBQVA7QUFDRDtBQUNELFdBQU9pRCxJQUFQO0FBQ0Q7O0FBRUQrQix1QkFBcUI7QUFDbkI7QUFDQTtBQUNBO0FBQ0EsV0FBTyxPQUFQO0FBQ0Q7QUF6Tm9EO2tCQUFsQ3pGLFkiLCJmaWxlIjoic2Fzcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IGZzIGZyb20gJ2ZzJztcbmltcG9ydCB0b3V0U3VpdGUgZnJvbSAndG91dHN1aXRlJztcbmltcG9ydCBkZXRlY3RpdmVTQVNTIGZyb20gJ2RldGVjdGl2ZS1zYXNzJztcbmltcG9ydCBkZXRlY3RpdmVTQ1NTIGZyb20gJ2RldGVjdGl2ZS1zY3NzJztcbmltcG9ydCBzYXNzTG9va3VwIGZyb20gJ3Nhc3MtbG9va3VwJztcbmltcG9ydCB7Q29tcGlsZXJCYXNlfSBmcm9tICcuLi9jb21waWxlci1iYXNlJztcblxuY29uc3QgbWltZVR5cGVzID0gWyd0ZXh0L3Nhc3MnLCAndGV4dC9zY3NzJ107XG5sZXQgc2FzcyA9IG51bGw7XG5cbi8qKlxuICogQGFjY2VzcyBwcml2YXRlXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNhc3NDb21waWxlciBleHRlbmRzIENvbXBpbGVyQmFzZSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG5cbiAgICB0aGlzLmNvbXBpbGVyT3B0aW9ucyA9IHtcbiAgICAgIGNvbW1lbnRzOiB0cnVlLFxuICAgICAgc291cmNlTWFwRW1iZWQ6IHRydWUsXG4gICAgICBzb3VyY2VNYXBDb250ZW50czogdHJ1ZVxuICAgIH07XG5cbiAgICB0aGlzLnNlZW5GaWxlUGF0aHMgPSB7fTtcbiAgfVxuXG4gIHN0YXRpYyBnZXRJbnB1dE1pbWVUeXBlcygpIHtcbiAgICByZXR1cm4gbWltZVR5cGVzO1xuICB9XG5cbiAgYXN5bmMgc2hvdWxkQ29tcGlsZUZpbGUoZmlsZU5hbWUsIGNvbXBpbGVyQ29udGV4dCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgYXN5bmMgZGV0ZXJtaW5lRGVwZW5kZW50RmlsZXMoc291cmNlQ29kZSwgZmlsZVBhdGgsIGNvbXBpbGVyQ29udGV4dCkge1xuICAgIHJldHVybiB0aGlzLmRldGVybWluZURlcGVuZGVudEZpbGVzU3luYyhzb3VyY2VDb2RlLCBmaWxlUGF0aCwgY29tcGlsZXJDb250ZXh0KTtcbiAgfVxuXG4gIGFzeW5jIGNvbXBpbGUoc291cmNlQ29kZSwgZmlsZVBhdGgsIGNvbXBpbGVyQ29udGV4dCkge1xuICAgIHNhc3MgPSBzYXNzIHx8IHRoaXMuZ2V0U2FzcygpO1xuXG4gICAgbGV0IHRoaXNQYXRoID0gcGF0aC5kaXJuYW1lKGZpbGVQYXRoKTtcbiAgICB0aGlzLnNlZW5GaWxlUGF0aHNbdGhpc1BhdGhdID0gdHJ1ZTtcblxuICAgIGxldCBwYXRocyA9IE9iamVjdC5rZXlzKHRoaXMuc2VlbkZpbGVQYXRocyk7XG5cbiAgICBpZiAodGhpcy5jb21waWxlck9wdGlvbnMucGF0aHMpIHtcbiAgICAgIHBhdGhzLnB1c2goLi4udGhpcy5jb21waWxlck9wdGlvbnMucGF0aHMpO1xuICAgIH1cblxuICAgIHBhdGhzLnVuc2hpZnQoJy4nKTtcblxuICAgIHNhc3MuaW1wb3J0ZXIodGhpcy5idWlsZEltcG9ydGVyQ2FsbGJhY2socGF0aHMpKTtcblxuICAgIGxldCBvcHRzID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5jb21waWxlck9wdGlvbnMsIHtcbiAgICAgIGluZGVudGVkU3ludGF4OiBmaWxlUGF0aC5tYXRjaCgvXFwuc2FzcyQvaSksXG4gICAgICBzb3VyY2VNYXBSb290OiBmaWxlUGF0aCxcbiAgICB9KTtcblxuICAgIC8vIG5vdCBhIHZhbGlkIG9wdGlvblxuICAgIGRlbGV0ZSBvcHRzLnBhdGhzO1xuXG4gICAgbGV0IHJlc3VsdCA9IGF3YWl0IG5ldyBQcm9taXNlKChyZXMscmVqKSA9PiB7XG4gICAgICBzYXNzLmNvbXBpbGUoc291cmNlQ29kZSwgb3B0cywgKHIpID0+IHtcbiAgICAgICAgaWYgKHIuc3RhdHVzICE9PSAwKSB7XG4gICAgICAgICAgcmVqKG5ldyBFcnJvcihyLmZvcm1hdHRlZCB8fCByLm1lc3NhZ2UpKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICByZXMocik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgbGV0IHNvdXJjZSA9IHJlc3VsdC50ZXh0O1xuXG4gICAgLy8gTkI6IElmIHlvdSBjb21waWxlIGEgZmlsZSB0aGF0IGlzIHNvbGVseSBpbXBvcnRzLCBpdHNcbiAgICAvLyBhY3R1YWwgY29udGVudCBpcyAnJyB5ZXQgaXQgaXMgYSB2YWxpZCBmaWxlLiAnJyBpcyBub3RcbiAgICAvLyB0cnV0aHksIHNvIHdlJ3JlIGdvaW5nIHRvIHJlcGxhY2UgaXQgd2l0aCBhIHN0cmluZyB0aGF0XG4gICAgLy8gaXMgdHJ1dGh5LlxuICAgIGlmICghc291cmNlKSB7XG4gICAgICBzb3VyY2UgPSAnICc7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGNvZGU6IHNvdXJjZSxcbiAgICAgIG1pbWVUeXBlOiAndGV4dC9jc3MnXG4gICAgfTtcbiAgfVxuXG4gIHNob3VsZENvbXBpbGVGaWxlU3luYyhmaWxlTmFtZSwgY29tcGlsZXJDb250ZXh0KSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBkZXRlcm1pbmVEZXBlbmRlbnRGaWxlc1N5bmMoc291cmNlQ29kZSwgZmlsZVBhdGgsIGNvbXBpbGVyQ29udGV4dCkge1xuICAgIGxldCBkZXBlbmRlbmN5RmlsZW5hbWVzID0gcGF0aC5leHRuYW1lKGZpbGVQYXRoKSA9PT0gJy5zYXNzJyA/IGRldGVjdGl2ZVNBU1Moc291cmNlQ29kZSkgOiBkZXRlY3RpdmVTQ1NTKHNvdXJjZUNvZGUpO1xuICAgIGxldCBkZXBlbmRlbmNpZXMgPSBbXTtcblxuICAgIGZvciAobGV0IGRlcGVuZGVuY3lOYW1lIG9mIGRlcGVuZGVuY3lGaWxlbmFtZXMpIHtcbiAgICAgIGRlcGVuZGVuY2llcy5wdXNoKHNhc3NMb29rdXAoZGVwZW5kZW5jeU5hbWUsIHBhdGguYmFzZW5hbWUoZmlsZVBhdGgpLCBwYXRoLmRpcm5hbWUoZmlsZVBhdGgpKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRlcGVuZGVuY2llcztcbiAgfVxuXG4gIGNvbXBpbGVTeW5jKHNvdXJjZUNvZGUsIGZpbGVQYXRoLCBjb21waWxlckNvbnRleHQpIHtcbiAgICBzYXNzID0gc2FzcyB8fCB0aGlzLmdldFNhc3MoKTtcblxuICAgIGxldCB0aGlzUGF0aCA9IHBhdGguZGlybmFtZShmaWxlUGF0aCk7XG4gICAgdGhpcy5zZWVuRmlsZVBhdGhzW3RoaXNQYXRoXSA9IHRydWU7XG5cbiAgICBsZXQgcGF0aHMgPSBPYmplY3Qua2V5cyh0aGlzLnNlZW5GaWxlUGF0aHMpO1xuXG4gICAgaWYgKHRoaXMuY29tcGlsZXJPcHRpb25zLnBhdGhzKSB7XG4gICAgICBwYXRocy5wdXNoKC4uLnRoaXMuY29tcGlsZXJPcHRpb25zLnBhdGhzKTtcbiAgICB9XG5cbiAgICBwYXRocy51bnNoaWZ0KCcuJyk7XG4gICAgc2Fzcy5pbXBvcnRlcih0aGlzLmJ1aWxkSW1wb3J0ZXJDYWxsYmFjayhwYXRocykpO1xuXG4gICAgbGV0IG9wdHMgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLmNvbXBpbGVyT3B0aW9ucywge1xuICAgICAgaW5kZW50ZWRTeW50YXg6IGZpbGVQYXRoLm1hdGNoKC9cXC5zYXNzJC9pKSxcbiAgICAgIHNvdXJjZU1hcFJvb3Q6IGZpbGVQYXRoLFxuICAgIH0pO1xuXG4gICAgbGV0IHJlc3VsdDtcbiAgICB0b3V0U3VpdGUoKCkgPT4ge1xuICAgICAgc2Fzcy5jb21waWxlKHNvdXJjZUNvZGUsIG9wdHMsIChyKSA9PiB7XG4gICAgICAgIGlmIChyLnN0YXR1cyAhPT0gMCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihyLmZvcm1hdHRlZCk7XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0ID0gcjtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgbGV0IHNvdXJjZSA9IHJlc3VsdC50ZXh0O1xuXG4gICAgLy8gTkI6IElmIHlvdSBjb21waWxlIGEgZmlsZSB0aGF0IGlzIHNvbGVseSBpbXBvcnRzLCBpdHNcbiAgICAvLyBhY3R1YWwgY29udGVudCBpcyAnJyB5ZXQgaXQgaXMgYSB2YWxpZCBmaWxlLiAnJyBpcyBub3RcbiAgICAvLyB0cnV0aHksIHNvIHdlJ3JlIGdvaW5nIHRvIHJlcGxhY2UgaXQgd2l0aCBhIHN0cmluZyB0aGF0XG4gICAgLy8gaXMgdHJ1dGh5LlxuICAgIGlmICghc291cmNlKSB7XG4gICAgICBzb3VyY2UgPSAnICc7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGNvZGU6IHNvdXJjZSxcbiAgICAgIG1pbWVUeXBlOiAndGV4dC9jc3MnXG4gICAgfTtcbiAgfVxuXG4gIGdldFNhc3MoKSB7XG4gICAgbGV0IHJldDtcbiAgICB0b3V0U3VpdGUoKCkgPT4gcmV0ID0gcmVxdWlyZSgnc2Fzcy5qcy9kaXN0L3Nhc3Mubm9kZScpLlNhc3MpO1xuICAgIHJldHVybiByZXQ7XG4gIH1cblxuICBidWlsZEltcG9ydGVyQ2FsbGJhY2sgKGluY2x1ZGVQYXRocykge1xuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgIHJldHVybiAoZnVuY3Rpb24gKHJlcXVlc3QsIGRvbmUpIHtcbiAgICAgIGxldCBmaWxlO1xuICAgICAgaWYgKHJlcXVlc3QuZmlsZSkge1xuICAgICAgICBkb25lKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIHRyZWF0IGFzIGl0XG4gICAgICAgIGNvbnN0IGltcG9ydFJlcXVlc3QgPSByZXF1ZXN0LmN1cnJlbnQ7XG5cbiAgICAgICAgZm9yIChsZXQgaW5jbHVkZVBhdGggb2YgaW5jbHVkZVBhdGhzKSB7XG4gICAgICAgICAgY29uc3QgZmlsZVBhdGggPSBwYXRoLnJlc29sdmUoaW5jbHVkZVBhdGgsIGltcG9ydFJlcXVlc3QpO1xuICAgICAgICAgIGxldCB2YXJpYXRpb25zID0gc2Fzcy5nZXRQYXRoVmFyaWF0aW9ucyhmaWxlUGF0aCk7XG5cbiAgICAgICAgICBmaWxlID0gdmFyaWF0aW9uc1xuICAgICAgICAgICAgLm1hcChzZWxmLmZpeFdpbmRvd3NQYXRoLmJpbmQoc2VsZikpXG4gICAgICAgICAgICAucmVkdWNlKHNlbGYuaW1wb3J0ZWRGaWxlUmVkdWNlci5iaW5kKHNlbGYpLCBudWxsKTtcblxuICAgICAgICAgIGlmIChmaWxlKSB7XG4gICAgICAgICAgICBjb25zdCBjb250ZW50ID0gZnMucmVhZEZpbGVTeW5jKGZpbGUsIHsgZW5jb2Rpbmc6ICd1dGY4JyB9KTtcbiAgICAgICAgICAgIHJldHVybiBzYXNzLndyaXRlRmlsZShmaWxlLCBjb250ZW50LCAoKSA9PiB7XG4gICAgICAgICAgICAgIGRvbmUoeyBwYXRoOiBmaWxlIH0pO1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWZpbGUpIHtcbiAgICAgICAgICBkb25lKCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBpbXBvcnRlZEZpbGVSZWR1Y2VyKGZvdW5kLCBwYXRoKSB7XG4gICAgLy8gRmluZCB0aGUgZmlyc3QgdmFyaWF0aW9uIHRoYXQgYWN0dWFsbHkgZXhpc3RzXG4gICAgaWYgKGZvdW5kKSByZXR1cm4gZm91bmQ7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3Qgc3RhdCA9IGZzLnN0YXRTeW5jKHBhdGgpO1xuICAgICAgaWYgKCFzdGF0LmlzRmlsZSgpKSByZXR1cm4gbnVsbDtcbiAgICAgIHJldHVybiBwYXRoO1xuICAgIH0gY2F0Y2goZSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgZml4V2luZG93c1BhdGgoZmlsZSkge1xuICAgIC8vIFVuZm9ydHVuYXRlbHksIHRoZXJlJ3MgYSBidWcgaW4gc2Fzcy5qcyB0aGF0IHNlZW1zIHRvIGlnbm9yZSB0aGUgZGlmZmVyZW50XG4gICAgLy8gcGF0aCBzZXBhcmF0b3JzIGFjcm9zcyBwbGF0Zm9ybXNcblxuICAgIC8vIEZvciBzb21lIHJlYXNvbiwgc29tZSBmaWxlcyBoYXZlIGEgbGVhZGluZyBzbGFzaCB0aGF0IHdlIG5lZWQgdG8gZ2V0IHJpZCBvZlxuICAgIGlmIChwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInICYmIGZpbGVbMF0gPT09ICcvJykge1xuICAgICAgZmlsZSA9IGZpbGUuc2xpY2UoMSk7XG4gICAgfVxuXG4gICAgLy8gU2Fzcy5qcyBnZW5lcmF0ZXMgcGF0aHMgc3VjaCBhcyBgX0M6XFxteVBhdGhcXGZpbGUuc2Fzc2AgaW5zdGVhZCBvZiBgQzpcXG15UGF0aFxcX2ZpbGUuc2Fzc2BcbiAgICBpZiAoZmlsZVswXSA9PT0gJ18nKSB7XG4gICAgICBjb25zdCBwYXJ0cyA9IGZpbGUuc2xpY2UoMSkuc3BsaXQocGF0aC5zZXApO1xuICAgICAgY29uc3QgZGlyID0gcGFydHMuc2xpY2UoMCwgLTEpLmpvaW4ocGF0aC5zZXApO1xuICAgICAgY29uc3QgZmlsZU5hbWUgPSBwYXJ0cy5yZXZlcnNlKClbMF07XG4gICAgICBmaWxlID0gcGF0aC5yZXNvbHZlKGRpciwgJ18nICsgZmlsZU5hbWUpO1xuICAgIH1cbiAgICByZXR1cm4gZmlsZTtcbiAgfVxuXG4gIGdldENvbXBpbGVyVmVyc2lvbigpIHtcbiAgICAvLyBOQjogVGhlcmUgaXMgYSBiaXphcnJlIGJ1ZyBpbiB0aGUgbm9kZSBtb2R1bGUgc3lzdGVtIHdoZXJlIHRoaXMgZG9lc24ndFxuICAgIC8vIHdvcmsgYnV0IG9ubHkgaW4gc2F2ZUNvbmZpZ3VyYXRpb24gdGVzdHNcbiAgICAvL3JldHVybiByZXF1aXJlKCdAcGF1bGNiZXR0cy9ub2RlLXNhc3MvcGFja2FnZS5qc29uJykudmVyc2lvbjtcbiAgICByZXR1cm4gXCI0LjEuMVwiO1xuICB9XG59XG4iXX0= \ No newline at end of file diff --git a/src/css/sass.js b/src/css/sass.js index 77e12f1..e565884 100644 --- a/src/css/sass.js +++ b/src/css/sass.js @@ -164,17 +164,11 @@ export default class SassCompiler extends CompilerBase { done(); return; } else { - // sass.js works in the '/sass/' directory - let cleanedRequestPath = request.resolved.replace(/^\/sass\//, ''); - - // if we are importing from the entry file (stdin) the path is - // resolved with a leading '/'' -> remove it - if (request.previous === 'stdin' && cleanedRequestPath.charAt(0) === '/') { - cleanedRequestPath = cleanedRequestPath.substring(1); - } + // treat as it + const importRequest = request.current; for (let includePath of includePaths) { - const filePath = path.resolve(includePath, cleanedRequestPath); + const filePath = path.resolve(includePath, importRequest); let variations = sass.getPathVariations(filePath); file = variations From dc0022cfb989bc057d6bdb26beb307033ef7c44a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=ABl=20Charles?= Date: Fri, 30 Jun 2017 16:08:28 +0200 Subject: [PATCH 8/8] Fix electron-compilers sass for both electron runtime and compile --- lib/css/sass.js | 18 ++++++++++++------ package.json | 2 +- src/css/sass.js | 16 +++++++++++----- 3 files changed, 24 insertions(+), 12 deletions(-) diff --git a/lib/css/sass.js b/lib/css/sass.js index a3ab9d2..7f20bc5 100644 --- a/lib/css/sass.js +++ b/lib/css/sass.js @@ -202,11 +202,8 @@ class SassCompiler extends _compilerBase.CompilerBase { done(); return; } else { - // treat as it - const importRequest = request.current; - - for (let includePath of includePaths) { - const filePath = _path2.default.resolve(includePath, importRequest); + const filePathGenerator = getFilepathsForVariation(includePaths, request); + for (let filePath of filePathGenerator) { let variations = sass.getPathVariations(filePath); file = variations.map(self.fixWindowsPath.bind(self)).reduce(self.importedFileReducer.bind(self), null); @@ -267,5 +264,14 @@ class SassCompiler extends _compilerBase.CompilerBase { return "4.1.1"; } } + exports.default = SassCompiler; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jc3Mvc2Fzcy5qcyJdLCJuYW1lcyI6WyJtaW1lVHlwZXMiLCJzYXNzIiwiU2Fzc0NvbXBpbGVyIiwiY29uc3RydWN0b3IiLCJjb21waWxlck9wdGlvbnMiLCJjb21tZW50cyIsInNvdXJjZU1hcEVtYmVkIiwic291cmNlTWFwQ29udGVudHMiLCJzZWVuRmlsZVBhdGhzIiwiZ2V0SW5wdXRNaW1lVHlwZXMiLCJzaG91bGRDb21waWxlRmlsZSIsImZpbGVOYW1lIiwiY29tcGlsZXJDb250ZXh0IiwiZGV0ZXJtaW5lRGVwZW5kZW50RmlsZXMiLCJzb3VyY2VDb2RlIiwiZmlsZVBhdGgiLCJkZXRlcm1pbmVEZXBlbmRlbnRGaWxlc1N5bmMiLCJjb21waWxlIiwiZ2V0U2FzcyIsInRoaXNQYXRoIiwiZGlybmFtZSIsInBhdGhzIiwiT2JqZWN0Iiwia2V5cyIsInB1c2giLCJ1bnNoaWZ0IiwiaW1wb3J0ZXIiLCJidWlsZEltcG9ydGVyQ2FsbGJhY2siLCJvcHRzIiwiYXNzaWduIiwiaW5kZW50ZWRTeW50YXgiLCJtYXRjaCIsInNvdXJjZU1hcFJvb3QiLCJyZXN1bHQiLCJQcm9taXNlIiwicmVzIiwicmVqIiwiciIsInN0YXR1cyIsIkVycm9yIiwiZm9ybWF0dGVkIiwibWVzc2FnZSIsInNvdXJjZSIsInRleHQiLCJjb2RlIiwibWltZVR5cGUiLCJzaG91bGRDb21waWxlRmlsZVN5bmMiLCJkZXBlbmRlbmN5RmlsZW5hbWVzIiwiZXh0bmFtZSIsImRlcGVuZGVuY2llcyIsImRlcGVuZGVuY3lOYW1lIiwiYmFzZW5hbWUiLCJjb21waWxlU3luYyIsInJldCIsInJlcXVpcmUiLCJTYXNzIiwiaW5jbHVkZVBhdGhzIiwic2VsZiIsInJlcXVlc3QiLCJkb25lIiwiZmlsZSIsImltcG9ydFJlcXVlc3QiLCJjdXJyZW50IiwiaW5jbHVkZVBhdGgiLCJyZXNvbHZlIiwidmFyaWF0aW9ucyIsImdldFBhdGhWYXJpYXRpb25zIiwibWFwIiwiZml4V2luZG93c1BhdGgiLCJiaW5kIiwicmVkdWNlIiwiaW1wb3J0ZWRGaWxlUmVkdWNlciIsImNvbnRlbnQiLCJyZWFkRmlsZVN5bmMiLCJlbmNvZGluZyIsIndyaXRlRmlsZSIsInBhdGgiLCJmb3VuZCIsInN0YXQiLCJzdGF0U3luYyIsImlzRmlsZSIsImUiLCJwcm9jZXNzIiwicGxhdGZvcm0iLCJzbGljZSIsInBhcnRzIiwic3BsaXQiLCJzZXAiLCJkaXIiLCJqb2luIiwicmV2ZXJzZSIsImdldENvbXBpbGVyVmVyc2lvbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUE7Ozs7QUFDQTs7OztBQUNBOzs7O0FBQ0E7Ozs7QUFDQTs7OztBQUNBOzs7O0FBQ0E7Ozs7OztBQUVBLE1BQU1BLFlBQVksQ0FBQyxXQUFELEVBQWMsV0FBZCxDQUFsQjtBQUNBLElBQUlDLE9BQU8sSUFBWDs7QUFFQTs7O0FBR2UsTUFBTUMsWUFBTixvQ0FBd0M7QUFDckRDLGdCQUFjO0FBQ1o7O0FBRUEsU0FBS0MsZUFBTCxHQUF1QjtBQUNyQkMsZ0JBQVUsSUFEVztBQUVyQkMsc0JBQWdCLElBRks7QUFHckJDLHlCQUFtQjtBQUhFLEtBQXZCOztBQU1BLFNBQUtDLGFBQUwsR0FBcUIsRUFBckI7QUFDRDs7QUFFRCxTQUFPQyxpQkFBUCxHQUEyQjtBQUN6QixXQUFPVCxTQUFQO0FBQ0Q7O0FBRUtVLG1CQUFOLENBQXdCQyxRQUF4QixFQUFrQ0MsZUFBbEMsRUFBbUQ7QUFBQTtBQUNqRCxhQUFPLElBQVA7QUFEaUQ7QUFFbEQ7O0FBRUtDLHlCQUFOLENBQThCQyxVQUE5QixFQUEwQ0MsUUFBMUMsRUFBb0RILGVBQXBELEVBQXFFO0FBQUE7O0FBQUE7QUFDbkUsYUFBTyxNQUFLSSwyQkFBTCxDQUFpQ0YsVUFBakMsRUFBNkNDLFFBQTdDLEVBQXVESCxlQUF2RCxDQUFQO0FBRG1FO0FBRXBFOztBQUVLSyxTQUFOLENBQWNILFVBQWQsRUFBMEJDLFFBQTFCLEVBQW9DSCxlQUFwQyxFQUFxRDtBQUFBOztBQUFBO0FBQ25EWCxhQUFPQSxRQUFRLE9B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O0FBQ0Q7O0FBRUQ7QUFDQSxRQUFJeEIsS0FBSyxDQUFMLE1BQVksR0FBaEIsRUFBcUI7QUFDbkIsWUFBTXlCLFFBQVF6QixLQUFLd0IsS0FBTCxDQUFXLENBQVgsRUFBY0UsS0FBZCxDQUFvQixlQUFLQyxHQUF6QixDQUFkO0FBQ0EsWUFBTUMsTUFBTUgsTUFBTUQsS0FBTixDQUFZLENBQVosRUFBZSxDQUFDLENBQWhCLEVBQW1CSyxJQUFuQixDQUF3QixlQUFLRixHQUE3QixDQUFaO0FBQ0EsWUFBTTVFLFdBQVcwRSxNQUFNSyxPQUFOLEdBQWdCLENBQWhCLENBQWpCO0FBQ0E5QixhQUFPLGVBQUtJLE9BQUwsQ0FBYXdCLEdBQWIsRUFBa0IsTUFBTTdFLFFBQXhCLENBQVA7QUFDRDtBQUNELFdBQU9pRCxJQUFQO0FBQ0Q7O0FBRUQrQix1QkFBcUI7QUFDbkI7QUFDQTtBQUNBO0FBQ0EsV0FBTyxPQUFQO0FBQ0Q7QUF6Tm9EO2tCQUFsQ3pGLFkiLCJmaWxlIjoic2Fzcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IGZzIGZyb20gJ2ZzJztcbmltcG9ydCB0b3V0U3VpdGUgZnJvbSAndG91dHN1aXRlJztcbmltcG9ydCBkZXRlY3RpdmVTQVNTIGZyb20gJ2RldGVjdGl2ZS1zYXNzJztcbmltcG9ydCBkZXRlY3RpdmVTQ1NTIGZyb20gJ2RldGVjdGl2ZS1zY3NzJztcbmltcG9ydCBzYXNzTG9va3VwIGZyb20gJ3Nhc3MtbG9va3VwJztcbmltcG9ydCB7Q29tcGlsZXJCYXNlfSBmcm9tICcuLi9jb21waWxlci1iYXNlJztcblxuY29uc3QgbWltZVR5cGVzID0gWyd0ZXh0L3Nhc3MnLCAndGV4dC9zY3NzJ107XG5sZXQgc2FzcyA9IG51bGw7XG5cbi8qKlxuICogQGFjY2VzcyBwcml2YXRlXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNhc3NDb21waWxlciBleHRlbmRzIENvbXBpbGVyQmFzZSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG5cbiAgICB0aGlzLmNvbXBpbGVyT3B0aW9ucyA9IHtcbiAgICAgIGNvbW1lbnRzOiB0cnVlLFxuICAgICAgc291cmNlTWFwRW1iZWQ6IHRydWUsXG4gICAgICBzb3VyY2VNYXBDb250ZW50czogdHJ1ZVxuICAgIH07XG5cbiAgICB0aGlzLnNlZW5GaWxlUGF0aHMgPSB7fTtcbiAgfVxuXG4gIHN0YXRpYyBnZXRJbnB1dE1pbWVUeXBlcygpIHtcbiAgICByZXR1cm4gbWltZVR5cGVzO1xuICB9XG5cbiAgYXN5bmMgc2hvdWxkQ29tcGlsZUZpbGUoZmlsZU5hbWUsIGNvbXBpbGVyQ29udGV4dCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgYXN5bmMgZGV0ZXJtaW5lRGVwZW5kZW50RmlsZXMoc291cmNlQ29kZSwgZmlsZVBhdGgsIGNvbXBpbGVyQ29udGV4dCkge1xuICAgIHJldHVybiB0aGlzLmRldGVybWluZURlcGVuZGVudEZpbGVzU3luYyhzb3VyY2VDb2RlLCBmaWxlUGF0aCwgY29tcGlsZXJDb250ZXh0KTtcbiAgfVxuXG4gIGFzeW5jIGNvbXBpbGUoc291cmNlQ29kZSwgZmlsZVBhdGgsIGNvbXBpbGVyQ29udGV4dCkge1xuICAgIHNhc3MgPSBzYXNzIHx8IHRoaXMuZ2V0U2FzcygpO1xuXG4gICAgbGV0IHRoaXNQYXRoID0gcGF0aC5kaXJuYW1lKGZpbGVQYXRoKTtcbiAgICB0aGlzLnNlZW5GaWxlUGF0aHNbdGhpc1BhdGhdID0gdHJ1ZTtcblxuICAgIGxldCBwYXRocyA9IE9iamVjdC5rZXlzKHRoaXMuc2VlbkZpbGVQYXRocyk7XG5cbiAgICBpZiAodGhpcy5jb21waWxlck9wdGlvbnMucGF0aHMpIHtcbiAgICAgIHBhdGhzLnB1c2goLi4udGhpcy5jb21waWxlck9wdGlvbnMucGF0aHMpO1xuICAgIH1cblxuICAgIHBhdGhzLnVuc2hpZnQoJy4nKTtcblxuICAgIHNhc3MuaW1wb3J0ZXIodGhpcy5idWlsZEltcG9ydGVyQ2FsbGJhY2socGF0aHMpKTtcblxuICAgIGxldCBvcHRzID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5jb21waWxlck9wdGlvbnMsIHtcbiAgICAgIGluZGVudGVkU3ludGF4OiBmaWxlUGF0aC5tYXRjaCgvXFwuc2FzcyQvaSksXG4gICAgICBzb3VyY2VNYXBSb290OiBmaWxlUGF0aCxcbiAgICB9KTtcblxuICAgIC8vIG5vdCBhIHZhbGlkIG9wdGlvblxuICAgIGRlbGV0ZSBvcHRzLnBhdGhzO1xuXG4gICAgbGV0IHJlc3VsdCA9IGF3YWl0IG5ldyBQcm9taXNlKChyZXMscmVqKSA9PiB7XG4gICAgICBzYXNzLmNvbXBpbGUoc291cmNlQ29kZSwgb3B0cywgKHIpID0+IHtcbiAgICAgICAgaWYgKHIuc3RhdHVzICE9PSAwKSB7XG4gICAgICAgICAgcmVqKG5ldyBFcnJvcihyLmZvcm1hdHRlZCB8fCByLm1lc3NhZ2UpKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICByZXMocik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgbGV0IHNvdXJjZSA9IHJlc3VsdC50ZXh0O1xuXG4gICAgLy8gTkI6IElmIHlvdSBjb21waWxlIGEgZmlsZSB0aGF0IGlzIHNvbGVseSBpbXBvcnRzLCBpdHNcbiAgICAvLyBhY3R1YWwgY29udGVudCBpcyAnJyB5ZXQgaXQgaXMgYSB2YWxpZCBmaWxlLiAnJyBpcyBub3RcbiAgICAvLyB0cnV0aHksIHNvIHdlJ3JlIGdvaW5nIHRvIHJlcGxhY2UgaXQgd2l0aCBhIHN0cmluZyB0aGF0XG4gICAgLy8gaXMgdHJ1dGh5LlxuICAgIGlmICghc291cmNlKSB7XG4gICAgICBzb3VyY2UgPSAnICc7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGNvZGU6IHNvdXJjZSxcbiAgICAgIG1pbWVUeXBlOiAndGV4dC9jc3MnXG4gICAgfTtcbiAgfVxuXG4gIHNob3VsZENvbXBpbGVGaWxlU3luYyhmaWxlTmFtZSwgY29tcGlsZXJDb250ZXh0KSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBkZXRlcm1pbmVEZXBlbmRlbnRGaWxlc1N5bmMoc291cmNlQ29kZSwgZmlsZVBhdGgsIGNvbXBpbGVyQ29udGV4dCkge1xuICAgIGxldCBkZXBlbmRlbmN5RmlsZW5hbWVzID0gcGF0aC5leHRuYW1lKGZpbGVQYXRoKSA9PT0gJy5zYXNzJyA/IGRldGVjdGl2ZVNBU1Moc291cmNlQ29kZSkgOiBkZXRlY3RpdmVTQ1NTKHNvdXJjZUNvZGUpO1xuICAgIGxldCBkZXBlbmRlbmNpZXMgPSBbXTtcblxuICAgIGZvciAobGV0IGRlcGVuZGVuY3lOYW1lIG9mIGRlcGVuZGVuY3lGaWxlbmFtZXMpIHtcbiAgICAgIGRlcGVuZGVuY2llcy5wdXNoKHNhc3NMb29rdXAoZGVwZW5kZW5jeU5hbWUsIHBhdGguYmFzZW5hbWUoZmlsZVBhdGgpLCBwYXRoLmRpcm5hbWUoZmlsZVBhdGgpKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRlcGVuZGVuY2llcztcbiAgfVxuXG4gIGNvbXBpbGVTeW5jKHNvdXJjZUNvZGUsIGZpbGVQYXRoLCBjb21waWxlckNvbnRleHQpIHtcbiAgICBzYXNzID0gc2FzcyB8fCB0aGlzLmdldFNhc3MoKTtcblxuICAgIGxldCB0aGlzUGF0aCA9IHBhdGguZGlybmFtZShmaWxlUGF0aCk7XG4gICAgdGhpcy5zZWVuRmlsZVBhdGhzW3RoaXNQYXRoXSA9IHRydWU7XG5cbiAgICBsZXQgcGF0aHMgPSBPYmplY3Qua2V5cyh0aGlzLnNlZW5GaWxlUGF0aHMpO1xuXG4gICAgaWYgKHRoaXMuY29tcGlsZXJPcHRpb25zLnBhdGhzKSB7XG4gICAgICBwYXRocy5wdXNoKC4uLnRoaXMuY29tcGlsZXJPcHRpb25zLnBhdGhzKTtcbiAgICB9XG5cbiAgICBwYXRocy51bnNoaWZ0KCcuJyk7XG4gICAgc2Fzcy5pbXBvcnRlcih0aGlzLmJ1aWxkSW1wb3J0ZXJDYWxsYmFjayhwYXRocykpO1xuXG4gICAgbGV0IG9wdHMgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLmNvbXBpbGVyT3B0aW9ucywge1xuICAgICAgaW5kZW50ZWRTeW50YXg6IGZpbGVQYXRoLm1hdGNoKC9cXC5zYXNzJC9pKSxcbiAgICAgIHNvdXJjZU1hcFJvb3Q6IGZpbGVQYXRoLFxuICAgIH0pO1xuXG4gICAgbGV0IHJlc3VsdDtcbiAgICB0b3V0U3VpdGUoKCkgPT4ge1xuICAgICAgc2Fzcy5jb21waWxlKHNvdXJjZUNvZGUsIG9wdHMsIChyKSA9PiB7XG4gICAgICAgIGlmIChyLnN0YXR1cyAhPT0gMCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihyLmZvcm1hdHRlZCk7XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0ID0gcjtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgbGV0IHNvdXJjZSA9IHJlc3VsdC50ZXh0O1xuXG4gICAgLy8gTkI6IElmIHlvdSBjb21waWxlIGEgZmlsZSB0aGF0IGlzIHNvbGVseSBpbXBvcnRzLCBpdHNcbiAgICAvLyBhY3R1YWwgY29udGVudCBpcyAnJyB5ZXQgaXQgaXMgYSB2YWxpZCBmaWxlLiAnJyBpcyBub3RcbiAgICAvLyB0cnV0aHksIHNvIHdlJ3JlIGdvaW5nIHRvIHJlcGxhY2UgaXQgd2l0aCBhIHN0cmluZyB0aGF0XG4gICAgLy8gaXMgdHJ1dGh5LlxuICAgIGlmICghc291cmNlKSB7XG4gICAgICBzb3VyY2UgPSAnICc7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGNvZGU6IHNvdXJjZSxcbiAgICAgIG1pbWVUeXBlOiAndGV4dC9jc3MnXG4gICAgfTtcbiAgfVxuXG4gIGdldFNhc3MoKSB7XG4gICAgbGV0IHJldDtcbiAgICB0b3V0U3VpdGUoKCkgPT4gcmV0ID0gcmVxdWlyZSgnc2Fzcy5qcy9kaXN0L3Nhc3Mubm9kZScpLlNhc3MpO1xuICAgIHJldHVybiByZXQ7XG4gIH1cblxuICBidWlsZEltcG9ydGVyQ2FsbGJhY2sgKGluY2x1ZGVQYXRocykge1xuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgIHJldHVybiAoZnVuY3Rpb24gKHJlcXVlc3QsIGRvbmUpIHtcbiAgICAgIGxldCBmaWxlO1xuICAgICAgaWYgKHJlcXVlc3QuZmlsZSkge1xuICAgICAgICBkb25lKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIHRyZWF0IGFzIGl0XG4gICAgICAgIGNvbnN0IGltcG9ydFJlcXVlc3QgPSByZXF1ZXN0LmN1cnJlbnQ7XG5cbiAgICAgICAgZm9yIChsZXQgaW5jbHVkZVBhdGggb2YgaW5jbHVkZVBhdGhzKSB7XG4gICAgICAgICAgY29uc3QgZmlsZVBhdGggPSBwYXRoLnJlc29sdmUoaW5jbHVkZVBhdGgsIGltcG9ydFJlcXVlc3QpO1xuICAgICAgICAgIGxldCB2YXJpYXRpb25zID0gc2Fzcy5nZXRQYXRoVmFyaWF0aW9ucyhmaWxlUGF0aCk7XG5cbiAgICAgICAgICBmaWxlID0gdmFyaWF0aW9uc1xuICAgICAgICAgICAgLm1hcChzZWxmLmZpeFdpbmRvd3NQYXRoLmJpbmQoc2VsZikpXG4gICAgICAgICAgICAucmVkdWNlKHNlbGYuaW1wb3J0ZWRGaWxlUmVkdWNlci5iaW5kKHNlbGYpLCBudWxsKTtcblxuICAgICAgICAgIGlmIChmaWxlKSB7XG4gICAgICAgICAgICBjb25zdCBjb250ZW50ID0gZnMucmVhZEZpbGVTeW5jKGZpbGUsIHsgZW5jb2Rpbmc6ICd1dGY4JyB9KTtcbiAgICAgICAgICAgIHJldHVybiBzYXNzLndyaXRlRmlsZShmaWxlLCBjb250ZW50LCAoKSA9PiB7XG4gICAgICAgICAgICAgIGRvbmUoeyBwYXRoOiBmaWxlIH0pO1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWZpbGUpIHtcbiAgICAgICAgICBkb25lKCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBpbXBvcnRlZEZpbGVSZWR1Y2VyKGZvdW5kLCBwYXRoKSB7XG4gICAgLy8gRmluZCB0aGUgZmlyc3QgdmFyaWF0aW9uIHRoYXQgYWN0dWFsbHkgZXhpc3RzXG4gICAgaWYgKGZvdW5kKSByZXR1cm4gZm91bmQ7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3Qgc3RhdCA9IGZzLnN0YXRTeW5jKHBhdGgpO1xuICAgICAgaWYgKCFzdGF0LmlzRmlsZSgpKSByZXR1cm4gbnVsbDtcbiAgICAgIHJldHVybiBwYXRoO1xuICAgIH0gY2F0Y2goZSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgZml4V2luZG93c1BhdGgoZmlsZSkge1xuICAgIC8vIFVuZm9ydHVuYXRlbHksIHRoZXJlJ3MgYSBidWcgaW4gc2Fzcy5qcyB0aGF0IHNlZW1zIHRvIGlnbm9yZSB0aGUgZGlmZmVyZW50XG4gICAgLy8gcGF0aCBzZXBhcmF0b3JzIGFjcm9zcyBwbGF0Zm9ybXNcblxuICAgIC8vIEZvciBzb21lIHJlYXNvbiwgc29tZSBmaWxlcyBoYXZlIGEgbGVhZGluZyBzbGFzaCB0aGF0IHdlIG5lZWQgdG8gZ2V0IHJpZCBvZlxuICAgIGlmIChwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInICYmIGZpbGVbMF0gPT09ICcvJykge1xuICAgICAgZmlsZSA9IGZpbGUuc2xpY2UoMSk7XG4gICAgfVxuXG4gICAgLy8gU2Fzcy5qcyBnZW5lcmF0ZXMgcGF0aHMgc3VjaCBhcyBgX0M6XFxteVBhdGhcXGZpbGUuc2Fzc2AgaW5zdGVhZCBvZiBgQzpcXG15UGF0aFxcX2ZpbGUuc2Fzc2BcbiAgICBpZiAoZmlsZVswXSA9PT0gJ18nKSB7XG4gICAgICBjb25zdCBwYXJ0cyA9IGZpbGUuc2xpY2UoMSkuc3BsaXQocGF0aC5zZXApO1xuICAgICAgY29uc3QgZGlyID0gcGFydHMuc2xpY2UoMCwgLTEpLmpvaW4ocGF0aC5zZXApO1xuICAgICAgY29uc3QgZmlsZU5hbWUgPSBwYXJ0cy5yZXZlcnNlKClbMF07XG4gICAgICBmaWxlID0gcGF0aC5yZXNvbHZlKGRpciwgJ18nICsgZmlsZU5hbWUpO1xuICAgIH1cbiAgICByZXR1cm4gZmlsZTtcbiAgfVxuXG4gIGdldENvbXBpbGVyVmVyc2lvbigpIHtcbiAgICAvLyBOQjogVGhlcmUgaXMgYSBiaXphcnJlIGJ1ZyBpbiB0aGUgbm9kZSBtb2R1bGUgc3lzdGVtIHdoZXJlIHRoaXMgZG9lc24ndFxuICAgIC8vIHdvcmsgYnV0IG9ubHkgaW4gc2F2ZUNvbmZpZ3VyYXRpb24gdGVzdHNcbiAgICAvL3JldHVybiByZXF1aXJlKCdAcGF1bGNiZXR0cy9ub2RlLXNhc3MvcGFja2FnZS5qc29uJykudmVyc2lvbjtcbiAgICByZXR1cm4gXCI0LjEuMVwiO1xuICB9XG59XG4iXX0= \ No newline at end of file +function* getFilepathsForVariation(includePaths, request) { + const resolved = request.resolved.replace(/^\/sass\//, ''); + yield resolved; + const current = request.current; + for (let includePath of includePaths) { + yield _path2.default.resolve(includePath, current); + } +} +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jc3Mvc2Fzcy5qcyJdLCJuYW1lcyI6WyJtaW1lVHlwZXMiLCJzYXNzIiwiU2Fzc0NvbXBpbGVyIiwiY29uc3RydWN0b3IiLCJjb21waWxlck9wdGlvbnMiLCJjb21tZW50cyIsInNvdXJjZU1hcEVtYmVkIiwic291cmNlTWFwQ29udGVudHMiLCJzZWVuRmlsZVBhdGhzIiwiZ2V0SW5wdXRNaW1lVHlwZXMiLCJzaG91bGRDb21waWxlRmlsZSIsImZpbGVOYW1lIiwiY29tcGlsZXJDb250ZXh0IiwiZGV0ZXJtaW5lRGVwZW5kZW50RmlsZXMiLCJzb3VyY2VDb2RlIiwiZmlsZVBhdGgiLCJkZXRlcm1pbmVEZXBlbmRlbnRGaWxlc1N5bmMiLCJjb21waWxlIiwiZ2V0U2FzcyIsInRoaXNQYXRoIiwiZGlybmFtZSIsInBhdGhzIiwiT2JqZWN0Iiwia2V5cyIsInB1c2giLCJ1bnNoaWZ0IiwiaW1wb3J0ZXIiLCJidWlsZEltcG9ydGVyQ2FsbGJhY2siLCJvcHRzIiwiYXNzaWduIiwiaW5kZW50ZWRTeW50YXgiLCJtYXRjaCIsInNvdXJjZU1hcFJvb3QiLCJyZXN1bHQiLCJQcm9taXNlIiwicmVzIiwicmVqIiwiciIsInN0YXR1cyIsIkVycm9yIiwiZm9ybWF0dGVkIiwibWVzc2FnZSIsInNvdXJjZSIsInRleHQiLCJjb2RlIiwibWltZVR5cGUiLCJzaG91bGRDb21waWxlRmlsZVN5bmMiLCJkZXBlbmRlbmN5RmlsZW5hbWVzIiwiZXh0bmFtZSIsImRlcGVuZGVuY2llcyIsImRlcGVuZGVuY3lOYW1lIiwiYmFzZW5hbWUiLCJjb21waWxlU3luYyIsInJldCIsInJlcXVpcmUiLCJTYXNzIiwiaW5jbHVkZVBhdGhzIiwic2VsZiIsInJlcXVlc3QiLCJkb25lIiwiZmlsZSIsImZpbGVQYXRoR2VuZXJhdG9yIiwiZ2V0RmlsZXBhdGhzRm9yVmFyaWF0aW9uIiwidmFyaWF0aW9ucyIsImdldFBhdGhWYXJpYXRpb25zIiwibWFwIiwiZml4V2luZG93c1BhdGgiLCJiaW5kIiwicmVkdWNlIiwiaW1wb3J0ZWRGaWxlUmVkdWNlciIsImNvbnRlbnQiLCJyZWFkRmlsZVN5bmMiLCJlbmNvZGluZyIsIndyaXRlRmlsZSIsInBhdGgiLCJmb3VuZCIsInN0YXQiLCJzdGF0U3luYyIsImlzRmlsZSIsImUiLCJwcm9jZXNzIiwicGxhdGZvcm0iLCJzbGljZSIsInBhcnRzIiwic3BsaXQiLCJzZXAiLCJkaXIiLCJqb2luIiwicmV2ZXJzZSIsInJlc29sdmUiLCJnZXRDb21waWxlclZlcnNpb24iLCJyZXNvbHZlZCIsInJlcGxhY2UiLCJjdXJyZW50IiwiaW5jbHVkZVBhdGgiXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBOzs7O0FBQ0E7Ozs7QUFDQTs7OztBQUNBOzs7O0FBQ0E7Ozs7QUFDQTs7OztBQUNBOzs7Ozs7QUFFQSxNQUFNQSxZQUFZLENBQUMsV0FBRCxFQUFjLFdBQWQsQ0FBbEI7QUFDQSxJQUFJQyxPQUFPLElBQVg7O0FBRUE7OztBQUdlLE1BQU1DLFlBQU4sb0NBQXdDO0FBQ3JEQyxnQkFBYztBQUNaOztBQUVBLFNBQUtDLGVBQUwsR0FBdUI7QUFDckJDLGdCQUFVLElBRFc7QUFFckJDLHNCQUFnQixJQUZLO0FBR3JCQyx5QkFBbUI7QUFIRSxLQUF2Qjs7QUFNQSxTQUFLQyxhQUFMLEdBQXFCLEVBQXJCO0FBQ0Q7O0FBRUQsU0FBT0MsaUJBQVAsR0FBMkI7QUFDekIsV0FBT1QsU0FBUDtBQUNEOztBQUVLVSxtQkFBTixDQUF3QkMsUUFBeEIsRUFBa0NDLGVBQWxDLEVBQW1EO0FBQUE7QUFDakQsYUFBTyxJQUFQO0FBRGlEO0FBRWxEOztBQUVLQyx5QkFBTixDQUE4QkMsVUFBOUIsRUFBMENDLFFBQTFDLEVBQW9ESCxlQUFwRCxFQUFxRTtBQUFBOztBQUFBO0FBQ25FLGFBQU8sTUFBS0ksMkJBQUwsQ0FBaUNGLFVBQWpDLEVBQTZDQyxRQUE3QyxFQUF1REgsZUFBdkQsQ0FBUDtBQURtRTtBQUVwRTs7QUFFS0ssU0FBTixDQUFjSCxVQUFkLEVBQTBCQyxRQUEx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QUFYLENBQVA7QUFDRDs7QUFFRDtBQUNBLFFBQUl0QixLQUFLLENBQUwsTUFBWSxHQUFoQixFQUFxQjtBQUNuQixZQUFNdUIsUUFBUXZCLEtBQUtzQixLQUFMLENBQVcsQ0FBWCxFQUFjRSxLQUFkLENBQW9CLGVBQUtDLEdBQXpCLENBQWQ7QUFDQSxZQUFNQyxNQUFNSCxNQUFNRCxLQUFOLENBQVksQ0FBWixFQUFlLENBQUMsQ0FBaEIsRUFBbUJLLElBQW5CLENBQXdCLGVBQUtGLEdBQTdCLENBQVo7QUFDQSxZQUFNMUUsV0FBV3dFLE1BQU1LLE9BQU4sR0FBZ0IsQ0FBaEIsQ0FBakI7QUFDQTVCLGFBQU8sZUFBSzZCLE9BQUwsQ0FBYUgsR0FBYixFQUFrQixNQUFNM0UsUUFBeEIsQ0FBUDtBQUNEO0FBQ0QsV0FBT2lELElBQVA7QUFDRDs7QUFFRDhCLHVCQUFxQjtBQUNuQjtBQUNBO0FBQ0E7QUFDQSxXQUFPLE9BQVA7QUFDRDtBQXROb0Q7O2tCQUFsQ3hGLFk7QUF5TnJCLFVBQVU0RCx3QkFBVixDQUFtQ04sWUFBbkMsRUFBaURFLE9BQWpELEVBQTBEO0FBQ3hELFFBQU1pQyxXQUFXakMsUUFBUWlDLFFBQVIsQ0FBaUJDLE9BQWpCLENBQXlCLFdBQXpCLEVBQXNDLEVBQXRDLENBQWpCO0FBQ0EsUUFBTUQsUUFBTjtBQUNBLFFBQU1FLFVBQVVuQyxRQUFRbUMsT0FBeEI7QUFDQSxPQUFLLElBQUlDLFdBQVQsSUFBd0J0QyxZQUF4QixFQUFzQztBQUNwQyxVQUFNLGVBQUtpQyxPQUFMLENBQWFLLFdBQWIsRUFBMEJELE9BQTFCLENBQU47QUFDRDtBQUNGIiwiZmlsZSI6InNhc3MuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCBmcyBmcm9tICdmcyc7XG5pbXBvcnQgdG91dFN1aXRlIGZyb20gJ3RvdXRzdWl0ZSc7XG5pbXBvcnQgZGV0ZWN0aXZlU0FTUyBmcm9tICdkZXRlY3RpdmUtc2Fzcyc7XG5pbXBvcnQgZGV0ZWN0aXZlU0NTUyBmcm9tICdkZXRlY3RpdmUtc2Nzcyc7XG5pbXBvcnQgc2Fzc0xvb2t1cCBmcm9tICdzYXNzLWxvb2t1cCc7XG5pbXBvcnQge0NvbXBpbGVyQmFzZX0gZnJvbSAnLi4vY29tcGlsZXItYmFzZSc7XG5cbmNvbnN0IG1pbWVUeXBlcyA9IFsndGV4dC9zYXNzJywgJ3RleHQvc2NzcyddO1xubGV0IHNhc3MgPSBudWxsO1xuXG4vKipcbiAqIEBhY2Nlc3MgcHJpdmF0ZVxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTYXNzQ29tcGlsZXIgZXh0ZW5kcyBDb21waWxlckJhc2Uge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuXG4gICAgdGhpcy5jb21waWxlck9wdGlvbnMgPSB7XG4gICAgICBjb21tZW50czogdHJ1ZSxcbiAgICAgIHNvdXJjZU1hcEVtYmVkOiB0cnVlLFxuICAgICAgc291cmNlTWFwQ29udGVudHM6IHRydWVcbiAgICB9O1xuXG4gICAgdGhpcy5zZWVuRmlsZVBhdGhzID0ge307XG4gIH1cblxuICBzdGF0aWMgZ2V0SW5wdXRNaW1lVHlwZXMoKSB7XG4gICAgcmV0dXJuIG1pbWVUeXBlcztcbiAgfVxuXG4gIGFzeW5jIHNob3VsZENvbXBpbGVGaWxlKGZpbGVOYW1lLCBjb21waWxlckNvbnRleHQpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGFzeW5jIGRldGVybWluZURlcGVuZGVudEZpbGVzKHNvdXJjZUNvZGUsIGZpbGVQYXRoLCBjb21waWxlckNvbnRleHQpIHtcbiAgICByZXR1cm4gdGhpcy5kZXRlcm1pbmVEZXBlbmRlbnRGaWxlc1N5bmMoc291cmNlQ29kZSwgZmlsZVBhdGgsIGNvbXBpbGVyQ29udGV4dCk7XG4gIH1cblxuICBhc3luYyBjb21waWxlKHNvdXJjZUNvZGUsIGZpbGVQYXRoLCBjb21waWxlckNvbnRleHQpIHtcbiAgICBzYXNzID0gc2FzcyB8fCB0aGlzLmdldFNhc3MoKTtcblxuICAgIGxldCB0aGlzUGF0aCA9IHBhdGguZGlybmFtZShmaWxlUGF0aCk7XG4gICAgdGhpcy5zZWVuRmlsZVBhdGhzW3RoaXNQYXRoXSA9IHRydWU7XG5cbiAgICBsZXQgcGF0aHMgPSBPYmplY3Qua2V5cyh0aGlzLnNlZW5GaWxlUGF0aHMpO1xuXG4gICAgaWYgKHRoaXMuY29tcGlsZXJPcHRpb25zLnBhdGhzKSB7XG4gICAgICBwYXRocy5wdXNoKC4uLnRoaXMuY29tcGlsZXJPcHRpb25zLnBhdGhzKTtcbiAgICB9XG5cbiAgICBwYXRocy51bnNoaWZ0KCcuJyk7XG5cbiAgICBzYXNzLmltcG9ydGVyKHRoaXMuYnVpbGRJbXBvcnRlckNhbGxiYWNrKHBhdGhzKSk7XG5cbiAgICBsZXQgb3B0cyA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuY29tcGlsZXJPcHRpb25zLCB7XG4gICAgICBpbmRlbnRlZFN5bnRheDogZmlsZVBhdGgubWF0Y2goL1xcLnNhc3MkL2kpLFxuICAgICAgc291cmNlTWFwUm9vdDogZmlsZVBhdGgsXG4gICAgfSk7XG5cbiAgICAvLyBub3QgYSB2YWxpZCBvcHRpb25cbiAgICBkZWxldGUgb3B0cy5wYXRocztcblxuICAgIGxldCByZXN1bHQgPSBhd2FpdCBuZXcgUHJvbWlzZSgocmVzLHJlaikgPT4ge1xuICAgICAgc2Fzcy5jb21waWxlKHNvdXJjZUNvZGUsIG9wdHMsIChyKSA9PiB7XG4gICAgICAgIGlmIChyLnN0YXR1cyAhPT0gMCkge1xuICAgICAgICAgIHJlaihuZXcgRXJyb3Ioci5mb3JtYXR0ZWQgfHwgci5tZXNzYWdlKSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVzKHIpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGxldCBzb3VyY2UgPSByZXN1bHQudGV4dDtcblxuICAgIC8vIE5COiBJZiB5b3UgY29tcGlsZSBhIGZpbGUgdGhhdCBpcyBzb2xlbHkgaW1wb3J0cywgaXRzXG4gICAgLy8gYWN0dWFsIGNvbnRlbnQgaXMgJycgeWV0IGl0IGlzIGEgdmFsaWQgZmlsZS4gJycgaXMgbm90XG4gICAgLy8gdHJ1dGh5LCBzbyB3ZSdyZSBnb2luZyB0byByZXBsYWNlIGl0IHdpdGggYSBzdHJpbmcgdGhhdFxuICAgIC8vIGlzIHRydXRoeS5cbiAgICBpZiAoIXNvdXJjZSkge1xuICAgICAgc291cmNlID0gJyAnO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBjb2RlOiBzb3VyY2UsXG4gICAgICBtaW1lVHlwZTogJ3RleHQvY3NzJ1xuICAgIH07XG4gIH1cblxuICBzaG91bGRDb21waWxlRmlsZVN5bmMoZmlsZU5hbWUsIGNvbXBpbGVyQ29udGV4dCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgZGV0ZXJtaW5lRGVwZW5kZW50RmlsZXNTeW5jKHNvdXJjZUNvZGUsIGZpbGVQYXRoLCBjb21waWxlckNvbnRleHQpIHtcbiAgICBsZXQgZGVwZW5kZW5jeUZpbGVuYW1lcyA9IHBhdGguZXh0bmFtZShmaWxlUGF0aCkgPT09ICcuc2FzcycgPyBkZXRlY3RpdmVTQVNTKHNvdXJjZUNvZGUpIDogZGV0ZWN0aXZlU0NTUyhzb3VyY2VDb2RlKTtcbiAgICBsZXQgZGVwZW5kZW5jaWVzID0gW107XG5cbiAgICBmb3IgKGxldCBkZXBlbmRlbmN5TmFtZSBvZiBkZXBlbmRlbmN5RmlsZW5hbWVzKSB7XG4gICAgICBkZXBlbmRlbmNpZXMucHVzaChzYXNzTG9va3VwKGRlcGVuZGVuY3lOYW1lLCBwYXRoLmJhc2VuYW1lKGZpbGVQYXRoKSwgcGF0aC5kaXJuYW1lKGZpbGVQYXRoKSkpO1xuICAgIH1cblxuICAgIHJldHVybiBkZXBlbmRlbmNpZXM7XG4gIH1cblxuICBjb21waWxlU3luYyhzb3VyY2VDb2RlLCBmaWxlUGF0aCwgY29tcGlsZXJDb250ZXh0KSB7XG4gICAgc2FzcyA9IHNhc3MgfHwgdGhpcy5nZXRTYXNzKCk7XG5cbiAgICBsZXQgdGhpc1BhdGggPSBwYXRoLmRpcm5hbWUoZmlsZVBhdGgpO1xuICAgIHRoaXMuc2VlbkZpbGVQYXRoc1t0aGlzUGF0aF0gPSB0cnVlO1xuXG4gICAgbGV0IHBhdGhzID0gT2JqZWN0LmtleXModGhpcy5zZWVuRmlsZVBhdGhzKTtcblxuICAgIGlmICh0aGlzLmNvbXBpbGVyT3B0aW9ucy5wYXRocykge1xuICAgICAgcGF0aHMucHVzaCguLi50aGlzLmNvbXBpbGVyT3B0aW9ucy5wYXRocyk7XG4gICAgfVxuXG4gICAgcGF0aHMudW5zaGlmdCgnLicpO1xuICAgIHNhc3MuaW1wb3J0ZXIodGhpcy5idWlsZEltcG9ydGVyQ2FsbGJhY2socGF0aHMpKTtcblxuICAgIGxldCBvcHRzID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5jb21waWxlck9wdGlvbnMsIHtcbiAgICAgIGluZGVudGVkU3ludGF4OiBmaWxlUGF0aC5tYXRjaCgvXFwuc2FzcyQvaSksXG4gICAgICBzb3VyY2VNYXBSb290OiBmaWxlUGF0aCxcbiAgICB9KTtcblxuICAgIGxldCByZXN1bHQ7XG4gICAgdG91dFN1aXRlKCgpID0+IHtcbiAgICAgIHNhc3MuY29tcGlsZShzb3VyY2VDb2RlLCBvcHRzLCAocikgPT4ge1xuICAgICAgICBpZiAoci5zdGF0dXMgIT09IDApIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3Ioci5mb3JtYXR0ZWQpO1xuICAgICAgICB9XG4gICAgICAgIHJlc3VsdCA9IHI7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGxldCBzb3VyY2UgPSByZXN1bHQudGV4dDtcblxuICAgIC8vIE5COiBJZiB5b3UgY29tcGlsZSBhIGZpbGUgdGhhdCBpcyBzb2xlbHkgaW1wb3J0cywgaXRzXG4gICAgLy8gYWN0dWFsIGNvbnRlbnQgaXMgJycgeWV0IGl0IGlzIGEgdmFsaWQgZmlsZS4gJycgaXMgbm90XG4gICAgLy8gdHJ1dGh5LCBzbyB3ZSdyZSBnb2luZyB0byByZXBsYWNlIGl0IHdpdGggYSBzdHJpbmcgdGhhdFxuICAgIC8vIGlzIHRydXRoeS5cbiAgICBpZiAoIXNvdXJjZSkge1xuICAgICAgc291cmNlID0gJyAnO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBjb2RlOiBzb3VyY2UsXG4gICAgICBtaW1lVHlwZTogJ3RleHQvY3NzJ1xuICAgIH07XG4gIH1cblxuICBnZXRTYXNzKCkge1xuICAgIGxldCByZXQ7XG4gICAgdG91dFN1aXRlKCgpID0+IHJldCA9IHJlcXVpcmUoJ3Nhc3MuanMvZGlzdC9zYXNzLm5vZGUnKS5TYXNzKTtcbiAgICByZXR1cm4gcmV0O1xuICB9XG5cbiAgYnVpbGRJbXBvcnRlckNhbGxiYWNrIChpbmNsdWRlUGF0aHMpIHtcbiAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICByZXR1cm4gKGZ1bmN0aW9uIChyZXF1ZXN0LCBkb25lKSB7XG4gICAgICBsZXQgZmlsZTtcbiAgICAgIGlmIChyZXF1ZXN0LmZpbGUpIHtcbiAgICAgICAgZG9uZSgpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBmaWxlUGF0aEdlbmVyYXRvciA9IGdldEZpbGVwYXRoc0ZvclZhcmlhdGlvbihpbmNsdWRlUGF0aHMsIHJlcXVlc3QpO1xuICAgICAgICBmb3IgKGxldCBmaWxlUGF0aCBvZiBmaWxlUGF0aEdlbmVyYXRvcikge1xuICAgICAgICAgIGxldCB2YXJpYXRpb25zID0gc2Fzcy5nZXRQYXRoVmFyaWF0aW9ucyhmaWxlUGF0aCk7XG5cbiAgICAgICAgICBmaWxlID0gdmFyaWF0aW9uc1xuICAgICAgICAgICAgLm1hcChzZWxmLmZpeFdpbmRvd3NQYXRoLmJpbmQoc2VsZikpXG4gICAgICAgICAgICAucmVkdWNlKHNlbGYuaW1wb3J0ZWRGaWxlUmVkdWNlci5iaW5kKHNlbGYpLCBudWxsKTtcblxuICAgICAgICAgIGlmIChmaWxlKSB7XG4gICAgICAgICAgICBjb25zdCBjb250ZW50ID0gZnMucmVhZEZpbGVTeW5jKGZpbGUsIHsgZW5jb2Rpbmc6ICd1dGY4JyB9KTtcbiAgICAgICAgICAgIHJldHVybiBzYXNzLndyaXRlRmlsZShmaWxlLCBjb250ZW50LCAoKSA9PiB7XG4gICAgICAgICAgICAgIGRvbmUoeyBwYXRoOiBmaWxlIH0pO1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWZpbGUpIHtcbiAgICAgICAgICBkb25lKCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBpbXBvcnRlZEZpbGVSZWR1Y2VyKGZvdW5kLCBwYXRoKSB7XG4gICAgLy8gRmluZCB0aGUgZmlyc3QgdmFyaWF0aW9uIHRoYXQgYWN0dWFsbHkgZXhpc3RzXG4gICAgaWYgKGZvdW5kKSByZXR1cm4gZm91bmQ7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3Qgc3RhdCA9IGZzLnN0YXRTeW5jKHBhdGgpO1xuICAgICAgaWYgKCFzdGF0LmlzRmlsZSgpKSByZXR1cm4gbnVsbDtcbiAgICAgIHJldHVybiBwYXRoO1xuICAgIH0gY2F0Y2goZSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgZml4V2luZG93c1BhdGgoZmlsZSkge1xuICAgIC8vIFVuZm9ydHVuYXRlbHksIHRoZXJlJ3MgYSBidWcgaW4gc2Fzcy5qcyB0aGF0IHNlZW1zIHRvIGlnbm9yZSB0aGUgZGlmZmVyZW50XG4gICAgLy8gcGF0aCBzZXBhcmF0b3JzIGFjcm9zcyBwbGF0Zm9ybXNcblxuICAgIC8vIEZvciBzb21lIHJlYXNvbiwgc29tZSBmaWxlcyBoYXZlIGEgbGVhZGluZyBzbGFzaCB0aGF0IHdlIG5lZWQgdG8gZ2V0IHJpZCBvZlxuICAgIGlmIChwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInICYmIGZpbGVbMF0gPT09ICcvJykge1xuICAgICAgZmlsZSA9IGZpbGUuc2xpY2UoMSk7XG4gICAgfVxuXG4gICAgLy8gU2Fzcy5qcyBnZW5lcmF0ZXMgcGF0aHMgc3VjaCBhcyBgX0M6XFxteVBhdGhcXGZpbGUuc2Fzc2AgaW5zdGVhZCBvZiBgQzpcXG15UGF0aFxcX2ZpbGUuc2Fzc2BcbiAgICBpZiAoZmlsZVswXSA9PT0gJ18nKSB7XG4gICAgICBjb25zdCBwYXJ0cyA9IGZpbGUuc2xpY2UoMSkuc3BsaXQocGF0aC5zZXApO1xuICAgICAgY29uc3QgZGlyID0gcGFydHMuc2xpY2UoMCwgLTEpLmpvaW4ocGF0aC5zZXApO1xuICAgICAgY29uc3QgZmlsZU5hbWUgPSBwYXJ0cy5yZXZlcnNlKClbMF07XG4gICAgICBmaWxlID0gcGF0aC5yZXNvbHZlKGRpciwgJ18nICsgZmlsZU5hbWUpO1xuICAgIH1cbiAgICByZXR1cm4gZmlsZTtcbiAgfVxuXG4gIGdldENvbXBpbGVyVmVyc2lvbigpIHtcbiAgICAvLyBOQjogVGhlcmUgaXMgYSBiaXphcnJlIGJ1ZyBpbiB0aGUgbm9kZSBtb2R1bGUgc3lzdGVtIHdoZXJlIHRoaXMgZG9lc24ndFxuICAgIC8vIHdvcmsgYnV0IG9ubHkgaW4gc2F2ZUNvbmZpZ3VyYXRpb24gdGVzdHNcbiAgICAvL3JldHVybiByZXF1aXJlKCdAcGF1bGNiZXR0cy9ub2RlLXNhc3MvcGFja2FnZS5qc29uJykudmVyc2lvbjtcbiAgICByZXR1cm4gXCI0LjEuMVwiO1xuICB9XG59XG5cbmZ1bmN0aW9uICpnZXRGaWxlcGF0aHNGb3JWYXJpYXRpb24oaW5jbHVkZVBhdGhzLCByZXF1ZXN0KSB7XG4gIGNvbnN0IHJlc29sdmVkID0gcmVxdWVzdC5yZXNvbHZlZC5yZXBsYWNlKC9eXFwvc2Fzc1xcLy8sICcnKTtcbiAgeWllbGQgcmVzb2x2ZWQ7XG4gIGNvbnN0IGN1cnJlbnQgPSByZXF1ZXN0LmN1cnJlbnQ7XG4gIGZvciAobGV0IGluY2x1ZGVQYXRoIG9mIGluY2x1ZGVQYXRocykge1xuICAgIHlpZWxkIHBhdGgucmVzb2x2ZShpbmNsdWRlUGF0aCwgY3VycmVudCk7XG4gIH1cbn1cbiJdfQ== \ No newline at end of file diff --git a/package.json b/package.json index b1db09e..82b3b20 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "electron-compilers", - "version": "5.10.0", + "version": "5.10.1", "description": "Compiler implementations for electron-compile", "main": "lib/main.js", "scripts": { diff --git a/src/css/sass.js b/src/css/sass.js index e565884..31fc2ce 100644 --- a/src/css/sass.js +++ b/src/css/sass.js @@ -164,11 +164,8 @@ export default class SassCompiler extends CompilerBase { done(); return; } else { - // treat as it - const importRequest = request.current; - - for (let includePath of includePaths) { - const filePath = path.resolve(includePath, importRequest); + const filePathGenerator = getFilepathsForVariation(includePaths, request); + for (let filePath of filePathGenerator) { let variations = sass.getPathVariations(filePath); file = variations @@ -231,3 +228,12 @@ export default class SassCompiler extends CompilerBase { return "4.1.1"; } } + +function *getFilepathsForVariation(includePaths, request) { + const resolved = request.resolved.replace(/^\/sass\//, ''); + yield resolved; + const current = request.current; + for (let includePath of includePaths) { + yield path.resolve(includePath, current); + } +}