UNPKG

parcel-bundler

Version:

<p align="center"> <a href="https://parceljs.org/" target="_blank"> <img alt="Parcel" src="https://user-images.githubusercontent.com/19409/31321658-f6aed0f2-ac3d-11e7-8100-1587e676e0ec.png" width="749"> </a> </p>

51 lines (43 loc) 1.33 kB
const CSSAsset = require('./CSSAsset'); const config = require('../utils/config'); const localRequire = require('../utils/localRequire'); const promisify = require('../utils/promisify'); class LESSAsset extends CSSAsset { async parse(code) { // less should be installed locally in the module that's being required let less = await localRequire('less', this.name); let render = promisify(less.render.bind(less)); let opts = this.package.less || (await config.load(this.name, ['.lessrc', '.lessrc.js'])) || {}; opts.filename = this.name; opts.plugins = (opts.plugins || []).concat(urlPlugin(this)); let res = await render(code, opts); res.render = () => res.css; return res; } collectDependencies() { for (let dep of this.ast.imports) { this.addDependency(dep, {includedInParent: true}); } } } function urlPlugin(asset) { return { install: (less, pluginManager) => { let visitor = new less.visitors.Visitor({ visitUrl: (node) => { node.value.value = asset.addURLDependency( node.value.value, node.currentFileInfo.filename ); return node; } }); visitor.run = visitor.visit; pluginManager.addVisitor(visitor); } }; } module.exports = LESSAsset;