Skip to content

Commit

Permalink
Merge branch 'v2' into master
Browse files Browse the repository at this point in the history
  • Loading branch information
Amphiluke committed Apr 17, 2021
2 parents 16e1373 + f1d7855 commit f714cde
Show file tree
Hide file tree
Showing 25 changed files with 200 additions and 83 deletions.
3 changes: 2 additions & 1 deletion .eslintignore
Original file line number Diff line number Diff line change
@@ -1 +1,2 @@
dist/*
dist/*
test/*
4 changes: 2 additions & 2 deletions .eslintrc.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
},
"parserOptions": {
"sourceType": "module",
"ecmaVersion": 2018
"ecmaVersion": 2020
},
"extends": "eslint:recommended",
"rules": {
Expand Down Expand Up @@ -158,4 +158,4 @@
"error"
]
}
}
}
20 changes: 8 additions & 12 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,23 +17,18 @@ npm install less-compile-roots
Here is a basic programmatic usage example:

```javascript
let lessCompileRoots = require("less-compile-roots");
import {compileRoots} from "less-compile-roots";

lessCompileRoots.compileRoots({
let rootEntries = await compileRoots({
// Glob pattern matching existing less files
pattern: "src/**/*.less",
// Pass any Less.js options you need
lessOptions: {
sourceMap: {sourceMapFileInline: true}
}
})
.then(rootEntries => {
console.log("Compiled root files:");
console.log(rootEntries.join("\n"));
})
.catch(reason => {
console.error(reason);
});
console.log("Compiled root files:");
console.log(rootEntries.join("\n"));
```

If you prefer using the tool through the command line, please refer the [Command line usage](#command-line-usage) section.
Expand All @@ -50,7 +45,7 @@ The supported options are:

* `pattern` _(required)_: a glob pattern (or a list of patterns) matching your source Less files. Please refer the [fast-glob docs](https://github.com/mrmlnc/fast-glob#patterns) for details;
* `lessOptions` _(optional)_: the options object to pass to the [`less.render` method](http://lesscss.org/usage/#programmatic-usage). The [available options](http://lesscss.org/usage/#less-options) are listed in the official Less documentation;
* `globOptions` _(optional)_: the options object to pass to the fast-glob function. See their [docs](https://github.com/mrmlnc/fast-glob#options-1) for details.
* `globOptions` _(optional)_: the options object to pass to the fast-glob function. See their [docs](https://github.com/mrmlnc/fast-glob#options-3) for details.

### `getRoots(options)`

Expand All @@ -65,7 +60,7 @@ You may also use `less-compile-roots` through the command line interface:
less-compile-roots --pattern=src/**/*.less

# or use custom config from a specified file
less-compile-roots --config=less-compile-config.js
less-compile-roots --config=less-compile-config.cjs
```

Available options:
Expand All @@ -78,6 +73,7 @@ Available options:
Note that you cannot use the options `--pattern` and `--config` together. Specifying the `--pattern` option makes the module compile Less files using all default parameters. If you need to customize the parameters, create a config file and specify the path to it through the `--config` option (or just use the module [programmatically](#api) rather than in command line). Here is an example of such config file:

```javascript
// less-compile-config.cjs
let LessPlugin = require('less-plugin-myplugin');
module.exports = {
pattern: ["project-1/css/**/*.less", "project-2/css/**/*.less"],
Expand All @@ -93,7 +89,7 @@ In fact, the config module just exports an object which is then used as the `opt

## Requirements

* NodeJS engine v9.11.2+
* NodeJS engine v10.0.0+
* Less pre-processor v2.0.0+

## Caveats
Expand Down
File renamed without changes.
25 changes: 13 additions & 12 deletions dist/index.js → dist/index.cjs
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,14 @@

Object.defineProperty(exports, '__esModule', { value: true });

let fs = require("fs");
let util = require("util");
let path = require("path");
let fastGlob = require("fast-glob");
var fs = require('fs');
var path = require('path');
var fastGlob = require('fast-glob');

function _interopNamespaceDefaultOnly(e) {
return Object.freeze({__proto__: null, 'default': e});
}

let readFile = util.promisify(fs.readFile);
let writeFile = util.promisify(fs.writeFile);
let setExt = (path, ext, oldExtRE = /\.less$/) => path.replace(oldExtRE, "") + ext;

let flat = Array.prototype.flat ? list => list.flat() : list => [].concat(...list);
Expand All @@ -17,7 +18,7 @@ async function getImports(entries) {
let commentRE = /\/\*[\s\S]*?\*\/|\/\/\s*@import[^;]+;/g;
let importRE = /(?<=@import\s[^"']*["']).+?(?=['"]\s*;)/g;
let promises = entries.map(async entry => {
let data = await readFile(entry, "utf8");
let data = await fs.promises.readFile(entry, "utf8");
data = data.replace(commentRE, "");
let dir = path.dirname(entry);
return (data.match(importRE) || []).map(importPath => {
Expand All @@ -32,20 +33,20 @@ async function getImports(entries) {
return new Set(flat(importLists));
}

function compile(entries, lessOptions) {
let less = require("less");
async function compile(entries, lessOptions) {
let less = (await Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespaceDefaultOnly(require('less')); })).default;
let inlineMap = lessOptions.sourceMap && lessOptions.sourceMap.sourceMapFileInline;
let promises = entries.map(async entry => {
let data = await readFile(entry, "utf8");
let data = await fs.promises.readFile(entry, "utf8");
let {css, map} = await less.render(data, {
...lessOptions,
filename: entry
});
let writeCSS = writeFile(setExt(entry, ".css"), css);
let writeCSS = fs.promises.writeFile(setExt(entry, ".css"), css);
if (!map || inlineMap) {
return writeCSS;
}
let writeMap = writeFile(setExt(entry, ".css.map"), map);
let writeMap = fs.promises.writeFile(setExt(entry, ".css.map"), map);
return Promise.all([writeCSS, writeMap]);
});
return Promise.all(promises);
Expand Down
8 changes: 4 additions & 4 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

17 changes: 11 additions & 6 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,11 +1,16 @@
{
"name": "less-compile-roots",
"version": "1.0.0",
"version": "2.0.0",
"description": "Tool for extracting and compiling root Less files",
"main": "dist/index.js",
"module": "src/index.mjs",
"type": "module",
"main": "./dist/index.cjs",
"module": "./src/index.mjs",
"exports": {
"import": "./src/index.mjs",
"require": "./dist/index.cjs"
},
"bin": {
"less-compile-roots": "./bin/less-compile-roots.js"
"less-compile-roots": "./bin/less-compile-roots.cjs"
},
"files": [
"bin",
Expand Down Expand Up @@ -35,12 +40,12 @@
},
"devDependencies": {
"eslint": "^7.24.0",
"rollup": "^2.45.1"
"rollup": "^2.45.2"
},
"peerDependencies": {
"less": ">=2.0.0"
},
"engines": {
"node": ">=9.11.2"
"node": ">=10.0.0"
}
}
8 changes: 5 additions & 3 deletions rollup.config.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
export default {
input: "src/index.mjs",
output: {
file: "dist/index.js",
format: "cjs"
}
file: "dist/index.cjs",
format: "cjs",
interop: id => id === "less" ? "defaultOnly" : "default"
},
external: () => true
};
21 changes: 9 additions & 12 deletions src/index.mjs
Original file line number Diff line number Diff line change
@@ -1,10 +1,7 @@
let fs = require("fs");
let util = require("util");
let path = require("path");
let fastGlob = require("fast-glob");
import {promises as fsPromises} from "fs";
import path from "path";
import fastGlob from "fast-glob";

let readFile = util.promisify(fs.readFile);
let writeFile = util.promisify(fs.writeFile);
let setExt = (path, ext, oldExtRE = /\.less$/) => path.replace(oldExtRE, "") + ext;

let flat = Array.prototype.flat ? list => list.flat() : list => [].concat(...list);
Expand All @@ -13,7 +10,7 @@ async function getImports(entries) {
let commentRE = /\/\*[\s\S]*?\*\/|\/\/\s*@import[^;]+;/g;
let importRE = /(?<=@import\s[^"']*["']).+?(?=['"]\s*;)/g;
let promises = entries.map(async entry => {
let data = await readFile(entry, "utf8");
let data = await fsPromises.readFile(entry, "utf8");
data = data.replace(commentRE, "");
let dir = path.dirname(entry);
return (data.match(importRE) || []).map(importPath => {
Expand All @@ -28,20 +25,20 @@ async function getImports(entries) {
return new Set(flat(importLists));
}

function compile(entries, lessOptions) {
let less = require("less");
async function compile(entries, lessOptions) {
let less = (await import("less")).default;
let inlineMap = lessOptions.sourceMap && lessOptions.sourceMap.sourceMapFileInline;
let promises = entries.map(async entry => {
let data = await readFile(entry, "utf8");
let data = await fsPromises.readFile(entry, "utf8");
let {css, map} = await less.render(data, {
...lessOptions,
filename: entry
});
let writeCSS = writeFile(setExt(entry, ".css"), css);
let writeCSS = fsPromises.writeFile(setExt(entry, ".css"), css);
if (!map || inlineMap) {
return writeCSS;
}
let writeMap = writeFile(setExt(entry, ".css.map"), map);
let writeMap = fsPromises.writeFile(setExt(entry, ".css.map"), map);
return Promise.all([writeCSS, writeMap]);
});
return Promise.all(promises);
Expand Down
1 change: 0 additions & 1 deletion test/.gitignore

This file was deleted.

6 changes: 6 additions & 0 deletions test/less-compile-config.cjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
module.exports = {
pattern: "less/*.less",
lessOptions: {
sourceMap: {}
}
};
12 changes: 12 additions & 0 deletions test/less/root-01.css
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
body {
background: #000;
}
/*
a {
color:#0a0;
}
@import "root-04";
some text
*/
/*@import "root-05";*/
/* child-01 */
1 change: 1 addition & 0 deletions test/less/root-01.css.map

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 6 additions & 0 deletions test/less/root-02.css
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
/* child-02 */
/* child-02-1 */
/* child-02-2 */
body {
background: #000;
}
1 change: 1 addition & 0 deletions test/less/root-02.css.map

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 4 additions & 0 deletions test/less/root-03.css
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
body {
background: #000;
}
/* child-03 */
1 change: 1 addition & 0 deletions test/less/root-03.css.map

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

5 changes: 5 additions & 0 deletions test/less/root-04.css
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
/* child-04 */
/* child-04-1 */
body {
background: #000;
}
1 change: 1 addition & 0 deletions test/less/root-04.css.map

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 4 additions & 0 deletions test/less/root-05.css
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
/* child-05-1 */
body {
background: #000;
}
1 change: 1 addition & 0 deletions test/less/root-05.css.map

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading

0 comments on commit f714cde

Please sign in to comment.