aboutsummaryrefslogtreecommitdiff
path: root/node_modules/stylus-loader/lib/resolver.js
diff options
context:
space:
mode:
authorruki <waruqi@gmail.com>2018-11-08 00:38:48 +0800
committerruki <waruqi@gmail.com>2018-11-07 21:53:09 +0800
commit26105034da4fcce7ac883c899d781f016559310d (patch)
treec459a5dc4e3aa0972d9919033ece511ce76dd129 /node_modules/stylus-loader/lib/resolver.js
parent2c77f00f1a7ecb6c8192f9c16d3b2001b254a107 (diff)
downloadxmake-docs-26105034da4fcce7ac883c899d781f016559310d.tar.gz
xmake-docs-26105034da4fcce7ac883c899d781f016559310d.zip
switch to vuepress
Diffstat (limited to 'node_modules/stylus-loader/lib/resolver.js')
-rw-r--r--node_modules/stylus-loader/lib/resolver.js112
1 files changed, 112 insertions, 0 deletions
diff --git a/node_modules/stylus-loader/lib/resolver.js b/node_modules/stylus-loader/lib/resolver.js
new file mode 100644
index 00000000..c4cb0785
--- /dev/null
+++ b/node_modules/stylus-loader/lib/resolver.js
@@ -0,0 +1,112 @@
+// This implementation of the url resolver adds awareness for webpack loaders
+/*
+
+Modified from the stylus implementation:
+
+(The MIT License)
+
+Copyright (c) 2010–2014 LearnBoost <dev@learnboost.com>
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+'Software'), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+*/
+
+/*jshint laxcomma:true */
+var Stylus = require('stylus')
+ , Compiler = Stylus.Compiler
+ , nodes = Stylus.nodes
+ , utils = Stylus.utils
+ , parse = require('url').parse
+ , relative = require('path').relative
+ , dirname = require('path').dirname
+ , extname = require('path').extname
+ , sep = require('path').sep;
+
+/**
+ * Return a url() function with the given `options`.
+ *
+ * Options:
+ *
+ * - `paths` resolution path(s), merged with general lookup paths
+ *
+ * Examples:
+ *
+ * stylus(str)
+ * .set('filename', __dirname + '/css/test.styl')
+ * .define('url', stylus.resolver({ paths: [__dirname + '/public'] }))
+ * .render(function(err, css){ ... })
+ *
+ * @param {Object} options
+ * @return {Function}
+ * @api public
+ */
+
+module.exports = function(options) {
+ options = options || {};
+
+ var _paths = options.paths || [];
+
+ function url(url) {
+ var paths = _paths.concat(this.paths),
+ filename = this.filename;
+
+ // Compile the url
+ var compiler = new Compiler(url);
+ compiler.isURL = true;
+ url = url.nodes.map(function(node){
+ return compiler.visit(node);
+ }).join('');
+
+ function resolveComponent(url) {
+ if (!url) {
+ return url;
+ }
+
+ url = parse(url);
+ if (url.protocol) {
+ return url.href;
+ }
+
+ // Lookup
+ var found = utils.lookup(url.pathname, paths, '', true);
+ if (!found) {
+ return url.href;
+ }
+
+ var tail = '';
+ if (url.search) {
+ tail += url.search;
+ }
+ if (url.hash) {
+ tail += url.hash;
+ }
+
+ var res = relative(dirname(filename), found) + tail;
+ if ('\\' == sep) res = res.replace(/\\/g, '/');
+ return res;
+ }
+
+ var components = url.split(/!/g);
+ components = components.map(resolveComponent);
+ return new nodes.Literal('url("' + components.join('!') + '")');
+ }
+
+ url.raw = true;
+ return url;
+};