/*! sass.js - v0.11.1 (f286436) - built 2019-10-20
providing libsass 3.6.2 (4da7c4bd)
via emscripten 1.38.31 (040e49a)
*/
(function (root, factory) {
"use strict";
if (typeof define === "function" && define.amd) {
define([], factory);
} else if (typeof exports === "object") {
module.exports = factory();
} else {
root.Sass = factory();
}
}(this, function () {/*global document*/
// identify the path sass.js is located at in case we're loaded by a simple
//
// this path can be used to identify the location of
// * sass.worker.js from sass.js
// * libsass.js.mem from sass.sync.js
// see https://github.com/medialize/sass.js/pull/32#issuecomment-103142214
// see https://github.com/medialize/sass.js/issues/33
var SASSJS_RELATIVE_PATH = (function () {
"use strict";
// in Node things are rather simple
var hasDir = typeof __dirname !== "undefined";
if (hasDir) {
return __dirname;
}
// we can only run this test in the browser,
// so make sure we actually have a DOM to work with.
if (typeof document === "undefined" || !document.getElementsByTagName) {
return null;
}
// http://www.2ality.com/2014/05/current-script.html
var currentScript = document.currentScript || (function () {
var scripts = document.getElementsByTagName("script");
return scripts[scripts.length - 1];
})();
var path = currentScript && currentScript.src;
if (!path) {
return null;
}
// [worker] make sure we're not running in some concatenated thing
if (path.slice(-8) === "/sass.js") {
return path.slice(0, -8);
}
// [sync] make sure we're not running in some concatenated thing
if (path.slice(-13) === "/sass.sync.js") {
return path.slice(0, -13);
}
return null;
})() || ".";
/*global Worker, SASSJS_RELATIVE_PATH*/
"use strict";
var noop = function () {
};
var slice = [].slice;
// defined upon first Sass.initialize() call
var globalWorkerUrl;
function Sass(workerUrl) {
if (!workerUrl && !globalWorkerUrl) {
/*jshint laxbreak:true */
throw new Error(
"Sass needs to be initialized with the URL of sass.worker.js - "
+ "either via Sass.setWorkerUrl(url) or by new Sass(url)"
);
/*jshint laxbreak:false */
}
if (!globalWorkerUrl) {
globalWorkerUrl = workerUrl;
}
// bind all functions
// we're doing this because we used to have a single hard-wired instance that allowed
// [].map(Sass.removeFile) and we need to maintain that for now (at least until 1.0.0)
for (var key in this) {
if (typeof this[key] === "function") {
this[key] = this[key].bind(this);
}
}
this._callbacks = {};
this._worker = new Worker(workerUrl || globalWorkerUrl);
this._worker.addEventListener("message", this._handleWorkerMessage, false);
}
// allow setting the workerUrl before the first Sass instance is initialized,
// where registering the global workerUrl would've happened automatically
Sass.setWorkerUrl = function (workerUrl) {
globalWorkerUrl = workerUrl;
};
Sass.style = {
nested: 0,
expanded: 1,
compact: 2,
compressed: 3
};
Sass.comments = {
"none": 0,
"default": 1
};
Sass.prototype = {
style: Sass.style,
comments: Sass.comments,
destroy: function () {
this._worker && this._worker.terminate();
this._worker = null;
this._callbacks = {};
this._importer = null;
},
_handleWorkerMessage: function (event) {
if (event.data.command) {
this[event.data.command](event.data.args);
}
this._callbacks[event.data.id] && this._callbacks[event.data.id](event.data.result);
delete this._callbacks[event.data.id];
},
_dispatch: function (options, callback) {
if (!this._worker) {
throw new Error("Sass worker has been terminated");
}
options.id = "cb" + Date.now() + Math.random();
this._callbacks[options.id] = callback;
this._worker.postMessage(options);
},
_importerInit: function (args) {
// importer API done callback pushing results
// back to the worker
var done = function done(result) {
this._worker.postMessage({
command: "_importerFinish",
args: [result]
});
}.bind(this);
try {
this._importer(args[0], done);
} catch (e) {
done({error: e.message});
throw e;
}
},
importer: function (importerCallback, callback) {
if (typeof importerCallback !== "function" && importerCallback !== null) {
throw new Error("importer callback must either be a function or null");
}
// callback is executed in the main EventLoop
this._importer = importerCallback;
// tell worker to activate importer callback
this._worker.postMessage({
command: "importer",
args: [Boolean(importerCallback)]
});
callback && callback();
}
};
var commands = "writeFile readFile listFiles removeFile clearFiles lazyFiles preloadFiles options compile compileFile";
commands.split(" ").forEach(function (command) {
Sass.prototype[command] = function () {
var callback = slice.call(arguments, -1)[0];
var args = slice.call(arguments, 0, -1);
if (typeof callback !== "function") {
args.push(callback);
callback = noop;
}
this._dispatch({
command: command,
args: args
}, callback);
};
});
// automatically set the workerUrl in case we're loaded by a simple
//
// see https://github.com/medialize/sass.js/pull/32#issuecomment-103142214
Sass.setWorkerUrl(SASSJS_RELATIVE_PATH + "/sass.worker.js");
return Sass;
}));