From 9de02d011292834dbf3fab9528d9bf02eeb17848 Mon Sep 17 00:00:00 2001 From: aminya Date: Wed, 22 Jul 2020 05:55:17 -0500 Subject: [PATCH 01/13] using node scripts instead of grunt --- Gruntfile.coffee | 38 -------------------------------------- package.json | 19 ++++++++++--------- 2 files changed, 10 insertions(+), 47 deletions(-) delete mode 100644 Gruntfile.coffee diff --git a/Gruntfile.coffee b/Gruntfile.coffee deleted file mode 100644 index e01d66d..0000000 --- a/Gruntfile.coffee +++ /dev/null @@ -1,38 +0,0 @@ -module.exports = (grunt) -> - grunt.initConfig - pkg: grunt.file.readJSON('package.json') - - coffee: - glob_to_multiple: - expand: true - cwd: 'src' - src: ['*.coffee'] - dest: 'lib' - ext: '.js' - - coffeelint: - options: - no_empty_param_list: - level: 'error' - max_line_length: - level: 'ignore' - - src: ['src/*.coffee'] - test: ['spec/*.coffee'] - - shell: - test: - command: 'node node_modules/jasmine-focused/bin/jasmine-focused --captureExceptions --coffee spec' - options: - stdout: true - stderr: true - failOnError: true - - grunt.loadNpmTasks('grunt-contrib-coffee') - grunt.loadNpmTasks('grunt-shell') - grunt.loadNpmTasks('grunt-coffeelint') - - grunt.registerTask 'clean', -> require('fs-plus').removeSync('lib') - grunt.registerTask('lint', ['coffeelint:src', 'coffeelint:test']) - grunt.registerTask('default', ['coffeelint', 'coffee']) - grunt.registerTask('test', ['default', 'coffeelint:test', 'shell:test']) diff --git a/package.json b/package.json index 24cb667..8d3068f 100644 --- a/package.json +++ b/package.json @@ -4,8 +4,11 @@ "description": "Less compile cache", "main": "./lib/less-cache", "scripts": { - "prepublish": "grunt clean lint coffee", - "test": "grunt test" + "clean": "shx rm -rf lib", + "test": "jasmine-focused --captureExceptions --coffee spec", + "coffee": "npm run clean && shx cp -r src lib && coffee -c -M -o lib lib && shx rm -rf lib/*.coffee", + "build": "npm run coffee", + "prepare": "npm run build" }, "repository": { "type": "git", @@ -33,14 +36,12 @@ "walkdir": "0.0.11" }, "devDependencies": { + "coffeescript": "^1.12.7", "fstream": "^1.0.10", - "grunt": "^1.0.1", - "grunt-cli": "^1.2.0", - "grunt-coffeelint": "0.0.16", - "grunt-contrib-coffee": "^1.0.0", - "grunt-shell": "^1.3.0", - "jasmine-focused": "1.x", + "jasmine-focused": "^1", "temp": "^0.8.3", - "tmp": "0.0.28" + "tmp": "0.0.28", + "shx": "^0.3.2", + "cross-env": "^7.0.2" } } From 99ed49890eb1db33940f918aba0818fb8a0df356 Mon Sep 17 00:00:00 2001 From: aminya Date: Wed, 22 Jul 2020 05:55:38 -0500 Subject: [PATCH 02/13] updating the dependencies --- package.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/package.json b/package.json index 8d3068f..d598958 100644 --- a/package.json +++ b/package.json @@ -30,10 +30,10 @@ } ], "dependencies": { - "fs-plus": "^3.0.0", - "less": "^2.7.1", - "underscore-plus": "1.x", - "walkdir": "0.0.11" + "fs-plus": "^3.1.1", + "less": "^3.12.2", + "underscore-plus": "^1.7.0", + "walkdir": "^0.4.1" }, "devDependencies": { "coffeescript": "^1.12.7", From b80d80b466dcda7416528851e2f93c5880249874 Mon Sep 17 00:00:00 2001 From: aminya Date: Wed, 22 Jul 2020 06:08:47 -0500 Subject: [PATCH 03/13] dynamic require from the cjs dist of less --- src/less-cache.coffee | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/src/less-cache.coffee b/src/less-cache.coffee index b6c8555..751eeff 100644 --- a/src/less-cache.coffee +++ b/src/less-cache.coffee @@ -107,7 +107,12 @@ class LessCache observeImportedFilePaths: (callback) -> importedPaths = [] - lessFs ?= require 'less/lib/less-node/fs.js' + # load or assign less and lessFs + if (less == null) + less = require 'less' + lessFs = less.fs + else if (lessFs == null) + lessFs = less.fs originalFsReadFileSync = lessFs.readFileSync lessFs.readFileSync = (filePath, args...) => relativeFilePath = @relativize(@resourcePath, filePath) if @resourcePath @@ -196,7 +201,12 @@ class LessCache parseLess: (filePath, contents) -> css = null options = filename: filePath, syncImport: true, paths: @importPaths - less ?= require('less') + # load or assign less and lessFs + if (less == null) + less = require 'less' + lessFs = less.fs + else if (lessFs == null) + lessFs = less.fs imports = @observeImportedFilePaths -> less.render contents, options, (error, result) -> if error? From e3f63763bc55bad8f476afcf5a34bc92beed43c3 Mon Sep 17 00:00:00 2001 From: aminya Date: Wed, 22 Jul 2020 06:43:23 -0500 Subject: [PATCH 04/13] update fstream --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index d598958..6792e2d 100644 --- a/package.json +++ b/package.json @@ -37,7 +37,7 @@ }, "devDependencies": { "coffeescript": "^1.12.7", - "fstream": "^1.0.10", + "fstream": "^1.0.12", "jasmine-focused": "^1", "temp": "^0.8.3", "tmp": "0.0.28", From d9820e204e21a05b1fded4dfe0e990c6ba3139ff Mon Sep 17 00:00:00 2001 From: aminya Date: Wed, 22 Jul 2020 06:43:33 -0500 Subject: [PATCH 05/13] update temp/tmp --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 6792e2d..347210e 100644 --- a/package.json +++ b/package.json @@ -39,8 +39,8 @@ "coffeescript": "^1.12.7", "fstream": "^1.0.12", "jasmine-focused": "^1", - "temp": "^0.8.3", - "tmp": "0.0.28", + "temp": "^0.9.1", + "tmp": "0.2.1", "shx": "^0.3.2", "cross-env": "^7.0.2" } From 610d7b553737e70cf004f90d61421bb4a7cb135e Mon Sep 17 00:00:00 2001 From: aminya Date: Wed, 22 Jul 2020 06:44:54 -0500 Subject: [PATCH 06/13] load upfront --- src/less-cache.coffee | 16 ++-------------- 1 file changed, 2 insertions(+), 14 deletions(-) diff --git a/src/less-cache.coffee b/src/less-cache.coffee index 751eeff..b49aabd 100644 --- a/src/less-cache.coffee +++ b/src/less-cache.coffee @@ -3,8 +3,8 @@ crypto = require 'crypto' _ = require 'underscore-plus' fs = require 'fs-plus' -less = null # Defer until it is actually used -lessFs = null # Defer until it is actually used +less = require('less') # Defer until it is actually used +lessFs = less.fs # Defer until it is actually used walkdir = require('walkdir').sync cacheVersion = 1 @@ -107,12 +107,6 @@ class LessCache observeImportedFilePaths: (callback) -> importedPaths = [] - # load or assign less and lessFs - if (less == null) - less = require 'less' - lessFs = less.fs - else if (lessFs == null) - lessFs = less.fs originalFsReadFileSync = lessFs.readFileSync lessFs.readFileSync = (filePath, args...) => relativeFilePath = @relativize(@resourcePath, filePath) if @resourcePath @@ -201,12 +195,6 @@ class LessCache parseLess: (filePath, contents) -> css = null options = filename: filePath, syncImport: true, paths: @importPaths - # load or assign less and lessFs - if (less == null) - less = require 'less' - lessFs = less.fs - else if (lessFs == null) - lessFs = less.fs imports = @observeImportedFilePaths -> less.render contents, options, (error, result) -> if error? From 511cb362b3325b494fbcc0b62e7f9f44d87cf541 Mon Sep 17 00:00:00 2001 From: aminya Date: Wed, 22 Jul 2020 06:47:51 -0500 Subject: [PATCH 07/13] remove observeImportedFilePaths --- src/less-cache.coffee | 25 ------------------------- 1 file changed, 25 deletions(-) diff --git a/src/less-cache.coffee b/src/less-cache.coffee index b49aabd..6230dbf 100644 --- a/src/less-cache.coffee +++ b/src/less-cache.coffee @@ -105,31 +105,6 @@ class LessCache @importedFiles = importedFiles @importPaths = importPaths - observeImportedFilePaths: (callback) -> - importedPaths = [] - originalFsReadFileSync = lessFs.readFileSync - lessFs.readFileSync = (filePath, args...) => - relativeFilePath = @relativize(@resourcePath, filePath) if @resourcePath - lessSource = @lessSourcesByRelativeFilePath[relativeFilePath] - content = null - digest = null - if lessSource? - content = lessSource.content - digest = lessSource.digest - else - content = originalFsReadFileSync(filePath, args...) - digest = LessCache.digestForContent(content) - - importedPaths.push({path: relativeFilePath ? filePath, digest: digest}) - content - - try - callback() - finally - lessFs.readFileSync = originalFsReadFileSync - - importedPaths - readJson: (filePath) -> JSON.parse(fs.readFileSync(filePath)) writeJson: (filePath, object) -> fs.writeFileSync(filePath, JSON.stringify(object)) From 2a80f5950a3ee9cc4a46d7bf309fbe084997adbd Mon Sep 17 00:00:00 2001 From: aminya Date: Wed, 22 Jul 2020 06:49:17 -0500 Subject: [PATCH 08/13] update parseLess --- src/less-cache.coffee | 30 ++++++++++++++++++++++-------- 1 file changed, 22 insertions(+), 8 deletions(-) diff --git a/src/less-cache.coffee b/src/less-cache.coffee index 6230dbf..c6b7a88 100644 --- a/src/less-cache.coffee +++ b/src/less-cache.coffee @@ -168,15 +168,29 @@ class LessCache @writeJson(@getCachePath(@importsFallbackDir, filePath), cacheEntry) parseLess: (filePath, contents) -> + entryPath = filePath.replace(/[^\/\\]*$/, '') + options = {filename: filePath, syncImport: true, paths: @importPaths} + rootFileInfo = { + filename: filePath, + rootpath: '', + currentDirectory: entryPath, + entryPath: entryPath, + rootFilename: filePath + } + context = new less.contexts.Parse(options) + importManager = new less.ImportManager(context, rootFileInfo) + css = null - options = filename: filePath, syncImport: true, paths: @importPaths - imports = @observeImportedFilePaths -> - less.render contents, options, (error, result) -> - if error? - throw error - else - {css} = result - {imports, css} + parser = new less.Parser(context, importManager, rootFileInfo).parse contents, (err, rootNode) -> + if err? + throw error + else + {css} = new less.ParseTree(rootNode, importManager).toCSS(options) + + imports = [] + for filename, content of importManager.contents + if filename isnt filePath + imports.push({path: filename, digest: LessCache.digestForContent(content)}) # Read the Less file at the current path and return either the cached CSS or the newly # compiled CSS. This method caches the compiled CSS after it is generated. This cached From 1f6637cc1eba10535a427f7e399a0500cd784b5e Mon Sep 17 00:00:00 2001 From: aminya Date: Wed, 22 Jul 2020 06:59:00 -0500 Subject: [PATCH 09/13] pass less to ImportManager --- src/less-cache.coffee | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/less-cache.coffee b/src/less-cache.coffee index c6b7a88..ae0e87b 100644 --- a/src/less-cache.coffee +++ b/src/less-cache.coffee @@ -178,7 +178,7 @@ class LessCache rootFilename: filePath } context = new less.contexts.Parse(options) - importManager = new less.ImportManager(context, rootFileInfo) + importManager = new less.ImportManager(less, context, rootFileInfo) css = null parser = new less.Parser(context, importManager, rootFileInfo).parse contents, (err, rootNode) -> From 0589bde23a2580cccbed02f37ec06935cf86384c Mon Sep 17 00:00:00 2001 From: aminya Date: Wed, 22 Jul 2020 07:08:51 -0500 Subject: [PATCH 10/13] remove unused fileName option from contexts --- src/less-cache.coffee | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/less-cache.coffee b/src/less-cache.coffee index ae0e87b..66925e5 100644 --- a/src/less-cache.coffee +++ b/src/less-cache.coffee @@ -169,7 +169,12 @@ class LessCache parseLess: (filePath, contents) -> entryPath = filePath.replace(/[^\/\\]*$/, '') - options = {filename: filePath, syncImport: true, paths: @importPaths} + + # https://github.com/less/less.js/blob/ef4baa5bb27b932623eb9afede99b3e2aaccea20/packages/less/src/less/contexts.js#L18 + options = {syncImport: true, paths: @importPaths} + context = new less.contexts.Parse(options) + + # https://github.com/less/less.js/blob/ef4baa5bb27b932623eb9afede99b3e2aaccea20/packages/less/src/less/import-manager.js#L9 rootFileInfo = { filename: filePath, rootpath: '', @@ -177,7 +182,6 @@ class LessCache entryPath: entryPath, rootFilename: filePath } - context = new less.contexts.Parse(options) importManager = new less.ImportManager(less, context, rootFileInfo) css = null From 861b1f9b857446c789c172fc4cd241d86e459cf4 Mon Sep 17 00:00:00 2001 From: aminya Date: Wed, 22 Jul 2020 07:16:56 -0500 Subject: [PATCH 11/13] missing {imports, css} --- src/less-cache.coffee | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/less-cache.coffee b/src/less-cache.coffee index 66925e5..f8cfab9 100644 --- a/src/less-cache.coffee +++ b/src/less-cache.coffee @@ -196,6 +196,8 @@ class LessCache if filename isnt filePath imports.push({path: filename, digest: LessCache.digestForContent(content)}) + {imports, css} + # Read the Less file at the current path and return either the cached CSS or the newly # compiled CSS. This method caches the compiled CSS after it is generated. This cached # CSS will be returned as long as the Less file and any of its imports are unchanged. From f7061034361710934775c29d4360cd855855128b Mon Sep 17 00:00:00 2001 From: aminya Date: Wed, 22 Jul 2020 07:17:08 -0500 Subject: [PATCH 12/13] fix parser --- src/less-cache.coffee | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/less-cache.coffee b/src/less-cache.coffee index f8cfab9..81a5e50 100644 --- a/src/less-cache.coffee +++ b/src/less-cache.coffee @@ -185,7 +185,9 @@ class LessCache importManager = new less.ImportManager(less, context, rootFileInfo) css = null - parser = new less.Parser(context, importManager, rootFileInfo).parse contents, (err, rootNode) -> + parser = new less.Parser(context, importManager, rootFileInfo) + + parser.parse contents, (err, rootNode) -> if err? throw error else From 99fa510b5f4420a0c2dce9cbcb1cfd4bbb425b14 Mon Sep 17 00:00:00 2001 From: aminya Date: Wed, 22 Jul 2020 07:25:08 -0500 Subject: [PATCH 13/13] fix parserTree --- src/less-cache.coffee | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/less-cache.coffee b/src/less-cache.coffee index 81a5e50..8714373 100644 --- a/src/less-cache.coffee +++ b/src/less-cache.coffee @@ -191,7 +191,8 @@ class LessCache if err? throw error else - {css} = new less.ParseTree(rootNode, importManager).toCSS(options) + parserTree = new less.ParseTree(rootNode, importManager) + {css} = parserTree.toCSS(options) imports = [] for filename, content of importManager.contents