remove ts, fixed cjs syntax
parent
2ef4d630d2
commit
d0a6dd21f1
406
Gruntfile.js
406
Gruntfile.js
|
@ -1,406 +0,0 @@
|
||||||
'use strict'
|
|
||||||
|
|
||||||
var resolve = require('resolve')
|
|
||||||
var path = require('path')
|
|
||||||
|
|
||||||
var testFolder = path.relative(
|
|
||||||
process.cwd(),
|
|
||||||
path.dirname(resolve.sync('@less/test-data'))
|
|
||||||
)
|
|
||||||
var lessFolder = path.join(testFolder, 'less')
|
|
||||||
|
|
||||||
module.exports = function (grunt) {
|
|
||||||
grunt.option('stack', true)
|
|
||||||
|
|
||||||
// Report the elapsed execution time of tasks.
|
|
||||||
require('time-grunt')(grunt)
|
|
||||||
|
|
||||||
var git = require('git-rev')
|
|
||||||
|
|
||||||
// Sauce Labs browser
|
|
||||||
var browsers = [
|
|
||||||
// Desktop browsers
|
|
||||||
{
|
|
||||||
browserName: 'chrome',
|
|
||||||
version: 'latest',
|
|
||||||
platform: 'Windows 7'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
browserName: 'firefox',
|
|
||||||
version: 'latest',
|
|
||||||
platform: 'Linux'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
browserName: 'safari',
|
|
||||||
version: '9',
|
|
||||||
platform: 'OS X 10.11'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
browserName: 'internet explorer',
|
|
||||||
version: '8',
|
|
||||||
platform: 'Windows XP'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
browserName: 'internet explorer',
|
|
||||||
version: '11',
|
|
||||||
platform: 'Windows 8.1'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
browserName: 'edge',
|
|
||||||
version: '13',
|
|
||||||
platform: 'Windows 10'
|
|
||||||
},
|
|
||||||
// Mobile browsers
|
|
||||||
{
|
|
||||||
browserName: 'ipad',
|
|
||||||
deviceName: 'iPad Air Simulator',
|
|
||||||
deviceOrientation: 'portrait',
|
|
||||||
version: '8.4',
|
|
||||||
platform: 'OS X 10.9'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
browserName: 'iphone',
|
|
||||||
deviceName: 'iPhone 5 Simulator',
|
|
||||||
deviceOrientation: 'portrait',
|
|
||||||
version: '9.3',
|
|
||||||
platform: 'OS X 10.11'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
browserName: 'android',
|
|
||||||
deviceName: 'Google Nexus 7 HD Emulator',
|
|
||||||
deviceOrientation: 'portrait',
|
|
||||||
version: '4.4',
|
|
||||||
platform: 'Linux'
|
|
||||||
}
|
|
||||||
]
|
|
||||||
|
|
||||||
var sauceJobs = {}
|
|
||||||
|
|
||||||
var browserTests = [
|
|
||||||
'filemanager-plugin',
|
|
||||||
'visitor-plugin',
|
|
||||||
'global-vars',
|
|
||||||
'modify-vars',
|
|
||||||
'production',
|
|
||||||
'rootpath-relative',
|
|
||||||
'rootpath-rewrite-urls',
|
|
||||||
'rootpath',
|
|
||||||
'relative-urls',
|
|
||||||
'rewrite-urls',
|
|
||||||
'browser',
|
|
||||||
'no-js-errors',
|
|
||||||
'legacy'
|
|
||||||
]
|
|
||||||
|
|
||||||
function makeJob(testName) {
|
|
||||||
sauceJobs[testName] = {
|
|
||||||
options: {
|
|
||||||
urls:
|
|
||||||
testName === 'all'
|
|
||||||
? browserTests.map(function (name) {
|
|
||||||
return (
|
|
||||||
'http://localhost:8081/tmp/browser/test-runner-' +
|
|
||||||
name +
|
|
||||||
'.html'
|
|
||||||
)
|
|
||||||
})
|
|
||||||
: [
|
|
||||||
'http://localhost:8081/tmp/browser/test-runner-' +
|
|
||||||
testName +
|
|
||||||
'.html'
|
|
||||||
],
|
|
||||||
testname: testName === 'all' ? 'Unit Tests for Less.js' : testName,
|
|
||||||
browsers: browsers,
|
|
||||||
public: 'public',
|
|
||||||
recordVideo: false,
|
|
||||||
videoUploadOnPass: false,
|
|
||||||
recordScreenshots: process.env.TRAVIS_BRANCH !== 'master',
|
|
||||||
build:
|
|
||||||
process.env.TRAVIS_BRANCH === 'master'
|
|
||||||
? process.env.TRAVIS_JOB_ID
|
|
||||||
: undefined,
|
|
||||||
tags: [
|
|
||||||
process.env.TRAVIS_BUILD_NUMBER,
|
|
||||||
process.env.TRAVIS_PULL_REQUEST,
|
|
||||||
process.env.TRAVIS_BRANCH
|
|
||||||
],
|
|
||||||
statusCheckAttempts: -1,
|
|
||||||
sauceConfig: {
|
|
||||||
'idle-timeout': 100
|
|
||||||
},
|
|
||||||
throttled: 5,
|
|
||||||
onTestComplete: function (result, callback) {
|
|
||||||
// Called after a unit test is done, per page, per browser
|
|
||||||
// 'result' param is the object returned by the test framework's reporter
|
|
||||||
// 'callback' is a Node.js style callback function. You must invoke it after you
|
|
||||||
// finish your work.
|
|
||||||
// Pass a non-null value as the callback's first parameter if you want to throw an
|
|
||||||
// exception. If your function is synchronous you can also throw exceptions
|
|
||||||
// directly.
|
|
||||||
// Passing true or false as the callback's second parameter passes or fails the
|
|
||||||
// test. Passing undefined does not alter the test result. Please note that this
|
|
||||||
// only affects the grunt task's result. You have to explicitly update the Sauce
|
|
||||||
// Labs job's status via its REST API, if you want so.
|
|
||||||
|
|
||||||
// This should be the encrypted value in Travis
|
|
||||||
var user = process.env.SAUCE_USERNAME
|
|
||||||
var pass = process.env.SAUCE_ACCESS_KEY
|
|
||||||
|
|
||||||
git.short(function (hash) {
|
|
||||||
require('phin')(
|
|
||||||
{
|
|
||||||
method: 'PUT',
|
|
||||||
url: [
|
|
||||||
'https://saucelabs.com/rest/v1',
|
|
||||||
user,
|
|
||||||
'jobs',
|
|
||||||
result.job_id
|
|
||||||
].join('/'),
|
|
||||||
auth: { user: user, pass: pass },
|
|
||||||
data: {
|
|
||||||
passed: result.passed,
|
|
||||||
build: 'build-' + hash
|
|
||||||
}
|
|
||||||
},
|
|
||||||
function (error, response) {
|
|
||||||
if (error) {
|
|
||||||
console.log(error)
|
|
||||||
callback(error)
|
|
||||||
} else if (response.statusCode !== 200) {
|
|
||||||
console.log(response)
|
|
||||||
callback(new Error('Unexpected response status'))
|
|
||||||
} else {
|
|
||||||
callback(null, result.passed)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Make the SauceLabs jobs
|
|
||||||
;['all'].concat(browserTests).map(makeJob)
|
|
||||||
|
|
||||||
var path = require('path')
|
|
||||||
|
|
||||||
// Handle async / await in Rollup build for tests
|
|
||||||
const tsNodeRuntime = path.resolve(
|
|
||||||
path.join('node_modules', '.bin', 'ts-node')
|
|
||||||
)
|
|
||||||
const crossEnv = path.resolve(path.join('node_modules', '.bin', 'cross-env'))
|
|
||||||
|
|
||||||
// Project configuration.
|
|
||||||
grunt.initConfig({
|
|
||||||
shell: {
|
|
||||||
options: {
|
|
||||||
stdout: true,
|
|
||||||
failOnError: true,
|
|
||||||
execOptions: {
|
|
||||||
maxBuffer: Infinity
|
|
||||||
}
|
|
||||||
},
|
|
||||||
build: {
|
|
||||||
command: [
|
|
||||||
/** Browser runtime */
|
|
||||||
'node build/rollup.js --dist',
|
|
||||||
/** Copy to repo root */
|
|
||||||
'npm run copy:root',
|
|
||||||
/** Node.js runtime */
|
|
||||||
'npm run build'
|
|
||||||
].join(' && ')
|
|
||||||
},
|
|
||||||
testbuild: {
|
|
||||||
command: [
|
|
||||||
'npm run build',
|
|
||||||
'node build/rollup.js --browser --out=./tmp/browser/less.min.js'
|
|
||||||
].join(' && ')
|
|
||||||
},
|
|
||||||
testcjs: {
|
|
||||||
command: 'npm run build'
|
|
||||||
},
|
|
||||||
testbrowser: {
|
|
||||||
command:
|
|
||||||
'node build/rollup.js --browser --out=./tmp/browser/less.min.js'
|
|
||||||
},
|
|
||||||
test: {
|
|
||||||
command: [
|
|
||||||
// https://github.com/TypeStrong/ts-node/issues/693#issuecomment-848907036
|
|
||||||
crossEnv + ' TS_NODE_SCOPE=true',
|
|
||||||
tsNodeRuntime + ' test/test-es6.ts',
|
|
||||||
'node test/index.js'
|
|
||||||
].join(' && ')
|
|
||||||
},
|
|
||||||
generatebrowser: {
|
|
||||||
command: 'node test/browser/generator/generate.js'
|
|
||||||
},
|
|
||||||
runbrowser: {
|
|
||||||
command: 'node test/browser/generator/runner.js'
|
|
||||||
},
|
|
||||||
benchmark: {
|
|
||||||
command: 'node benchmark/index.js'
|
|
||||||
},
|
|
||||||
opts: {
|
|
||||||
// test running with all current options (using `opts` since `options` means something already)
|
|
||||||
command: [
|
|
||||||
// @TODO: make this more thorough
|
|
||||||
// CURRENT OPTIONS
|
|
||||||
`node bin/lessc --ie-compat ${lessFolder}/_main/lazy-eval.less tmp/lazy-eval.css`,
|
|
||||||
// --math
|
|
||||||
`node bin/lessc --math=always ${lessFolder}/_main/lazy-eval.less tmp/lazy-eval.css`,
|
|
||||||
`node bin/lessc --math=parens-division ${lessFolder}/_main/lazy-eval.less tmp/lazy-eval.css`,
|
|
||||||
`node bin/lessc --math=parens ${lessFolder}/_main/lazy-eval.less tmp/lazy-eval.css`,
|
|
||||||
`node bin/lessc --math=strict ${lessFolder}/_main/lazy-eval.less tmp/lazy-eval.css`,
|
|
||||||
`node bin/lessc --math=strict-legacy ${lessFolder}/_main/lazy-eval.less tmp/lazy-eval.css`,
|
|
||||||
|
|
||||||
// DEPRECATED OPTIONS
|
|
||||||
// --strict-math
|
|
||||||
`node bin/lessc --strict-math=on ${lessFolder}/_main/lazy-eval.less tmp/lazy-eval.css`
|
|
||||||
].join(' && ')
|
|
||||||
},
|
|
||||||
plugin: {
|
|
||||||
command: [
|
|
||||||
`node bin/lessc --clean-css="--s1 --advanced" ${lessFolder}/_main/lazy-eval.less tmp/lazy-eval.css`,
|
|
||||||
'cd lib',
|
|
||||||
`node ../bin/lessc --clean-css="--s1 --advanced" ../${lessFolder}/_main/lazy-eval.less ../tmp/lazy-eval.css`,
|
|
||||||
`node ../bin/lessc --source-map=lazy-eval.css.map --autoprefix ../${lessFolder}/_main/lazy-eval.less ../tmp/lazy-eval.css`,
|
|
||||||
'cd ..',
|
|
||||||
// Test multiple plugins
|
|
||||||
`node bin/lessc --plugin=clean-css="--s1 --advanced" --plugin=autoprefix="ie 11,Edge >= 13,Chrome >= 47,Firefox >= 45,iOS >= 9.2,Safari >= 9" ${lessFolder}/_main/lazy-eval.less tmp/lazy-eval.css`
|
|
||||||
].join(' && ')
|
|
||||||
},
|
|
||||||
'sourcemap-test': {
|
|
||||||
// quoted value doesn't seem to get picked up by time-grunt, or isn't output, at least; maybe just "sourcemap" is fine?
|
|
||||||
command: [
|
|
||||||
`node bin/lessc --source-map=test/sourcemaps/maps/import-map.map ${lessFolder}/_main/import.less test/sourcemaps/import.css`,
|
|
||||||
`node bin/lessc --source-map ${lessFolder}/sourcemaps/basic.less test/sourcemaps/basic.css`
|
|
||||||
].join(' && ')
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
eslint: {
|
|
||||||
target: [
|
|
||||||
'test/**/*.js',
|
|
||||||
'src/less*/**/*.js',
|
|
||||||
'!test/less/errors/plugin/plugin-error.js'
|
|
||||||
],
|
|
||||||
options: {
|
|
||||||
configFile: '.eslintrc.js',
|
|
||||||
fix: true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
connect: {
|
|
||||||
server: {
|
|
||||||
options: {
|
|
||||||
port: 8081
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
'saucelabs-mocha': sauceJobs,
|
|
||||||
|
|
||||||
// Clean the version of less built for the tests
|
|
||||||
clean: {
|
|
||||||
test: ['test/browser/less.js', 'tmp', 'test/less-bom'],
|
|
||||||
'sourcemap-test': ['test/sourcemaps/*.css', 'test/sourcemaps/*.map'],
|
|
||||||
sauce_log: ['sc_*.log']
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
// Load these plugins to provide the necessary tasks
|
|
||||||
grunt.loadNpmTasks('grunt-saucelabs')
|
|
||||||
|
|
||||||
require('jit-grunt')(grunt)
|
|
||||||
|
|
||||||
// by default, run tests
|
|
||||||
grunt.registerTask('default', ['test'])
|
|
||||||
|
|
||||||
// Release
|
|
||||||
grunt.registerTask('dist', ['shell:build'])
|
|
||||||
|
|
||||||
// Create the browser version of less.js
|
|
||||||
grunt.registerTask('browsertest-lessjs', ['shell:testbrowser'])
|
|
||||||
|
|
||||||
// Run all browser tests
|
|
||||||
grunt.registerTask('browsertest', [
|
|
||||||
'browsertest-lessjs',
|
|
||||||
'connect',
|
|
||||||
'shell:runbrowser'
|
|
||||||
])
|
|
||||||
|
|
||||||
// setup a web server to run the browser tests in a browser rather than phantom
|
|
||||||
grunt.registerTask('browsertest-server', [
|
|
||||||
'browsertest-lessjs',
|
|
||||||
'shell:generatebrowser',
|
|
||||||
'connect::keepalive'
|
|
||||||
])
|
|
||||||
|
|
||||||
var previous_force_state = grunt.option('force')
|
|
||||||
|
|
||||||
grunt.registerTask('force', function (set) {
|
|
||||||
if (set === 'on') {
|
|
||||||
grunt.option('force', true)
|
|
||||||
} else if (set === 'off') {
|
|
||||||
grunt.option('force', false)
|
|
||||||
} else if (set === 'restore') {
|
|
||||||
grunt.option('force', previous_force_state)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
grunt.registerTask('sauce', [
|
|
||||||
'browsertest-lessjs',
|
|
||||||
'shell:generatebrowser',
|
|
||||||
'connect',
|
|
||||||
'sauce-after-setup'
|
|
||||||
])
|
|
||||||
|
|
||||||
grunt.registerTask('sauce-after-setup', [
|
|
||||||
'saucelabs-mocha:all',
|
|
||||||
'clean:sauce_log'
|
|
||||||
])
|
|
||||||
|
|
||||||
var testTasks = [
|
|
||||||
'clean',
|
|
||||||
'eslint',
|
|
||||||
'shell:testbuild',
|
|
||||||
'shell:test',
|
|
||||||
'shell:opts',
|
|
||||||
'shell:plugin',
|
|
||||||
'connect',
|
|
||||||
'shell:runbrowser'
|
|
||||||
]
|
|
||||||
|
|
||||||
if (
|
|
||||||
isNaN(Number(process.env.TRAVIS_PULL_REQUEST, 10)) &&
|
|
||||||
process.env.TRAVIS_BRANCH === 'master'
|
|
||||||
) {
|
|
||||||
testTasks.push('force:on')
|
|
||||||
testTasks.push('sauce-after-setup')
|
|
||||||
testTasks.push('force:off')
|
|
||||||
}
|
|
||||||
|
|
||||||
// Run all tests
|
|
||||||
grunt.registerTask('test', testTasks)
|
|
||||||
|
|
||||||
// Run shell option tests (includes deprecated options)
|
|
||||||
grunt.registerTask('shell-options', ['shell:opts'])
|
|
||||||
|
|
||||||
// Run shell plugin test
|
|
||||||
grunt.registerTask('shell-plugin', ['shell:plugin'])
|
|
||||||
|
|
||||||
// Quickly build and run Node tests
|
|
||||||
grunt.registerTask('quicktest', ['shell:testcjs', 'shell:test'])
|
|
||||||
|
|
||||||
// generate a good test environment for testing sourcemaps
|
|
||||||
grunt.registerTask('sourcemap-test', [
|
|
||||||
'clean:sourcemap-test',
|
|
||||||
'shell:build:lessc',
|
|
||||||
'shell:sourcemap-test',
|
|
||||||
'connect::keepalive'
|
|
||||||
])
|
|
||||||
|
|
||||||
// Run benchmark
|
|
||||||
grunt.registerTask('benchmark', ['shell:testcjs', 'shell:benchmark'])
|
|
||||||
}
|
|
|
@ -1,6 +1,6 @@
|
||||||
const pkg = require('./../package.json')
|
import pkg from './../package.json' assert { type: 'json' }
|
||||||
|
|
||||||
module.exports = `/**
|
export default `/**
|
||||||
* Less - ${pkg.description} v${pkg.version}
|
* Less - ${pkg.description} v${pkg.version}
|
||||||
* http://lesscss.org
|
* http://lesscss.org
|
||||||
*
|
*
|
||||||
|
|
|
@ -1,15 +1,17 @@
|
||||||
const rollup = require('rollup')
|
import rollup from 'rollup'
|
||||||
const typescript = require('rollup-plugin-typescript2')
|
import typescript from 'rollup-plugin-typescript2'
|
||||||
const commonjs = require('@rollup/plugin-commonjs')
|
import commonjs from '@rollup/plugin-commonjs'
|
||||||
const json = require('@rollup/plugin-json')
|
import json from '@rollup/plugin-json'
|
||||||
const resolve = require('@rollup/plugin-node-resolve').nodeResolve
|
import resolve from '@rollup/plugin-node-resolve'
|
||||||
const terser = require('rollup-plugin-terser').terser
|
import terser from 'rollup-plugin-terser'
|
||||||
const banner = require('./banner')
|
import banner from './banner'
|
||||||
const path = require('path')
|
import path from 'path')
|
||||||
|
|
||||||
const rootPath = path.join(__dirname, '..')
|
const rootPath = path.join(__dirname, '..')
|
||||||
|
|
||||||
const args = require('minimist')(process.argv.slice(2))
|
import minimist from 'minimist'
|
||||||
|
|
||||||
|
const args = minimist(process.argv.slice(2))
|
||||||
|
|
||||||
let outDir = args.dist ? './dist' : './tmp'
|
let outDir = args.dist ? './dist' : './tmp'
|
||||||
|
|
||||||
|
|
2
index.js
2
index.js
|
@ -1 +1 @@
|
||||||
module.exports = require('./lib/less-node').default;
|
export default './lib/less-node'
|
||||||
|
|
|
@ -124,7 +124,6 @@
|
||||||
],
|
],
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"copy-anything": "^2.0.1",
|
"copy-anything": "^2.0.1",
|
||||||
"parse-node-version": "^1.0.1",
|
"parse-node-version": "^1.0.1"
|
||||||
"tslib": "^2.3.0"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,3 +1,6 @@
|
||||||
|
import mime from 'mime'
|
||||||
|
import SourceMap from 'source-map'
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
encodeBase64: function encodeBase64(str) {
|
encodeBase64: function encodeBase64(str) {
|
||||||
// Avoid Buffer constructor on newer versions of Node.js.
|
// Avoid Buffer constructor on newer versions of Node.js.
|
||||||
|
@ -5,12 +8,12 @@ export default {
|
||||||
return buffer.toString('base64')
|
return buffer.toString('base64')
|
||||||
},
|
},
|
||||||
mimeLookup: function (filename) {
|
mimeLookup: function (filename) {
|
||||||
return require('mime').lookup(filename)
|
return mime.lookup(filename)
|
||||||
},
|
},
|
||||||
charsetLookup: function (mime) {
|
charsetLookup: function (mime) {
|
||||||
return require('mime').charsets.lookup(mime)
|
return mime.charsets.lookup(mime)
|
||||||
},
|
},
|
||||||
getSourceMapGenerator: function getSourceMapGenerator() {
|
getSourceMapGenerator: function getSourceMapGenerator() {
|
||||||
return require('source-map').SourceMapGenerator
|
return SourceMap.SourceMapGenerator
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
let fs
|
|
||||||
try {
|
export default fs from 'graceful-fs'
|
||||||
fs = require('graceful-fs')
|
|
||||||
} catch (e) {
|
// export default fs from 'fs'
|
||||||
fs = require('fs')
|
|
||||||
}
|
|
||||||
export default fs
|
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
import Dimension from '../less/tree/dimension'
|
import Dimension from '../less/tree/dimension'
|
||||||
import Expression from '../less/tree/expression'
|
import Expression from '../less/tree/expression'
|
||||||
import functionRegistry from './../less/functions/function-registry'
|
import functionRegistry from './../less/functions/function-registry'
|
||||||
|
import sizeOf from 'image-size'
|
||||||
|
|
||||||
export default environment => {
|
export default environment => {
|
||||||
function imageSize(functionContext, filePathNode) {
|
function imageSize(functionContext, filePathNode) {
|
||||||
|
@ -41,7 +42,6 @@ export default environment => {
|
||||||
throw fileSync.error
|
throw fileSync.error
|
||||||
}
|
}
|
||||||
|
|
||||||
const sizeOf = require('image-size')
|
|
||||||
return sizeOf(fileSync.filename)
|
return sizeOf(fileSync.filename)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -7,19 +7,23 @@ const less = createFromEnvironment(environment, [
|
||||||
new UrlFileManager()
|
new UrlFileManager()
|
||||||
])
|
])
|
||||||
import lesscHelper from './lessc-helper'
|
import lesscHelper from './lessc-helper'
|
||||||
|
import PluginLoader from './plugin-loader'
|
||||||
|
import fs from './fs.js'
|
||||||
|
import options from '../less/default-options'
|
||||||
|
import imageSize from './image-size'
|
||||||
|
|
||||||
// allow people to create less with their own environment
|
// allow people to create less with their own environment
|
||||||
less.createFromEnvironment = createFromEnvironment
|
less.createFromEnvironment = createFromEnvironment
|
||||||
less.lesscHelper = lesscHelper
|
less.lesscHelper = lesscHelper
|
||||||
less.PluginLoader = require('./plugin-loader').default
|
less.PluginLoader = PluginLoader
|
||||||
less.fs = require('./fs').default
|
less.fs = fs
|
||||||
less.FileManager = FileManager
|
less.FileManager = FileManager
|
||||||
less.UrlFileManager = UrlFileManager
|
less.UrlFileManager = UrlFileManager
|
||||||
|
|
||||||
// Set up options
|
// Set up options
|
||||||
less.options = require('../less/default-options').default()
|
less.options = options
|
||||||
|
|
||||||
// provide image-size functionality
|
// provide image-size functionality
|
||||||
require('./image-size').default(less.environment)
|
imageSize(less.environment)
|
||||||
|
|
||||||
export default less
|
export default less
|
||||||
|
|
|
@ -8,6 +8,7 @@ import url from 'url'
|
||||||
let request
|
let request
|
||||||
import AbstractFileManager from '../less/environment/abstract-file-manager.js'
|
import AbstractFileManager from '../less/environment/abstract-file-manager.js'
|
||||||
import logger from '../less/logger'
|
import logger from '../less/logger'
|
||||||
|
import needle from 'needle'
|
||||||
|
|
||||||
const UrlFileManager = function () {}
|
const UrlFileManager = function () {}
|
||||||
UrlFileManager.prototype = Object.assign(new AbstractFileManager(), {
|
UrlFileManager.prototype = Object.assign(new AbstractFileManager(), {
|
||||||
|
@ -19,7 +20,7 @@ UrlFileManager.prototype = Object.assign(new AbstractFileManager(), {
|
||||||
return new Promise((fulfill, reject) => {
|
return new Promise((fulfill, reject) => {
|
||||||
if (request === undefined) {
|
if (request === undefined) {
|
||||||
try {
|
try {
|
||||||
request = require('needle')
|
request = needle
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
request = null
|
request = null
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,70 +1,68 @@
|
||||||
// Export a new default each time
|
// Export a new default each time
|
||||||
export default function () {
|
export default {
|
||||||
return {
|
/* Inline Javascript - @plugin still allowed */
|
||||||
/* Inline Javascript - @plugin still allowed */
|
javascriptEnabled: false,
|
||||||
javascriptEnabled: false,
|
|
||||||
|
|
||||||
/* Outputs a makefile import dependency list to stdout. */
|
/* Outputs a makefile import dependency list to stdout. */
|
||||||
depends: false,
|
depends: false,
|
||||||
|
|
||||||
/* (DEPRECATED) Compress using less built-in compression.
|
/* (DEPRECATED) Compress using less built-in compression.
|
||||||
* This does an okay job but does not utilise all the tricks of
|
* This does an okay job but does not utilise all the tricks of
|
||||||
* dedicated css compression. */
|
* dedicated css compression. */
|
||||||
compress: false,
|
compress: false,
|
||||||
|
|
||||||
/* Runs the less parser and just reports errors without any output. */
|
/* Runs the less parser and just reports errors without any output. */
|
||||||
lint: false,
|
lint: false,
|
||||||
|
|
||||||
/* Sets available include paths.
|
/* Sets available include paths.
|
||||||
* If the file in an @import rule does not exist at that exact location,
|
* If the file in an @import rule does not exist at that exact location,
|
||||||
* less will look for it at the location(s) passed to this option.
|
* less will look for it at the location(s) passed to this option.
|
||||||
* You might use this for instance to specify a path to a library which
|
* You might use this for instance to specify a path to a library which
|
||||||
* you want to be referenced simply and relatively in the less files. */
|
* you want to be referenced simply and relatively in the less files. */
|
||||||
paths: [],
|
paths: [],
|
||||||
|
|
||||||
/* color output in the terminal */
|
/* color output in the terminal */
|
||||||
color: true,
|
color: true,
|
||||||
|
|
||||||
/* The strictImports controls whether the compiler will allow an @import inside of either
|
/* The strictImports controls whether the compiler will allow an @import inside of either
|
||||||
* @media blocks or (a later addition) other selector blocks.
|
* @media blocks or (a later addition) other selector blocks.
|
||||||
* See: https://github.com/less/less.js/issues/656 */
|
* See: https://github.com/less/less.js/issues/656 */
|
||||||
strictImports: false,
|
strictImports: false,
|
||||||
|
|
||||||
/* Allow Imports from Insecure HTTPS Hosts */
|
/* Allow Imports from Insecure HTTPS Hosts */
|
||||||
insecure: false,
|
insecure: false,
|
||||||
|
|
||||||
/* Allows you to add a path to every generated import and url in your css.
|
/* Allows you to add a path to every generated import and url in your css.
|
||||||
* This does not affect less import statements that are processed, just ones
|
* This does not affect less import statements that are processed, just ones
|
||||||
* that are left in the output css. */
|
* that are left in the output css. */
|
||||||
rootpath: '',
|
rootpath: '',
|
||||||
|
|
||||||
/* By default URLs are kept as-is, so if you import a file in a sub-directory
|
/* By default URLs are kept as-is, so if you import a file in a sub-directory
|
||||||
* that references an image, exactly the same URL will be output in the css.
|
* that references an image, exactly the same URL will be output in the css.
|
||||||
* This option allows you to re-write URL's in imported files so that the
|
* This option allows you to re-write URL's in imported files so that the
|
||||||
* URL is always relative to the base imported file */
|
* URL is always relative to the base imported file */
|
||||||
rewriteUrls: false,
|
rewriteUrls: false,
|
||||||
|
|
||||||
/* How to process math
|
/* How to process math
|
||||||
* 0 always - eagerly try to solve all operations
|
* 0 always - eagerly try to solve all operations
|
||||||
* 1 parens-division - require parens for division "/"
|
* 1 parens-division - require parens for division "/"
|
||||||
* 2 parens | strict - require parens for all operations
|
* 2 parens | strict - require parens for all operations
|
||||||
* 3 strict-legacy - legacy strict behavior (super-strict)
|
* 3 strict-legacy - legacy strict behavior (super-strict)
|
||||||
*/
|
*/
|
||||||
math: 1,
|
math: 1,
|
||||||
|
|
||||||
/* Without this option, less attempts to guess at the output unit when it does maths. */
|
/* Without this option, less attempts to guess at the output unit when it does maths. */
|
||||||
strictUnits: false,
|
strictUnits: false,
|
||||||
|
|
||||||
/* Effectively the declaration is put at the top of your base Less file,
|
/* Effectively the declaration is put at the top of your base Less file,
|
||||||
* meaning it can be used but it also can be overridden if this variable
|
* meaning it can be used but it also can be overridden if this variable
|
||||||
* is defined in the file. */
|
* is defined in the file. */
|
||||||
globalVars: null,
|
globalVars: null,
|
||||||
|
|
||||||
/* As opposed to the global variable option, this puts the declaration at the
|
/* As opposed to the global variable option, this puts the declaration at the
|
||||||
* end of your base file, meaning it will override anything defined in your Less file. */
|
* end of your base file, meaning it will override anything defined in your Less file. */
|
||||||
modifyVars: null,
|
modifyVars: null,
|
||||||
|
|
||||||
/* This option allows you to specify a argument to go on to every URL. */
|
/* This option allows you to specify a argument to go on to every URL. */
|
||||||
urlArgs: ''
|
urlArgs: ''
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,21 +0,0 @@
|
||||||
export interface Environment {
|
|
||||||
/**
|
|
||||||
* Converts a string to a base 64 string
|
|
||||||
*/
|
|
||||||
encodeBase64(str: string): string
|
|
||||||
/**
|
|
||||||
* Lookup the mime-type of a filename
|
|
||||||
*/
|
|
||||||
mimeLookup(filename: string): string
|
|
||||||
/**
|
|
||||||
* Look up the charset of a mime type
|
|
||||||
* @param mime
|
|
||||||
*/
|
|
||||||
charsetLookup(mime: string): string
|
|
||||||
/**
|
|
||||||
* Gets a source map generator
|
|
||||||
*
|
|
||||||
* @todo - Figure out precise type
|
|
||||||
*/
|
|
||||||
getSourceMapGenerator(): any
|
|
||||||
}
|
|
|
@ -1,77 +0,0 @@
|
||||||
import type { Environment } from './environment-api'
|
|
||||||
|
|
||||||
export interface FileManager {
|
|
||||||
/**
|
|
||||||
* Given the full path to a file, return the path component
|
|
||||||
* Provided by AbstractFileManager
|
|
||||||
*/
|
|
||||||
getPath(filename: string): string
|
|
||||||
/**
|
|
||||||
* Append a .less extension if appropriate. Only called if less thinks one could be added.
|
|
||||||
* Provided by AbstractFileManager
|
|
||||||
*/
|
|
||||||
tryAppendLessExtension(filename: string): string
|
|
||||||
/**
|
|
||||||
* Whether the rootpath should be converted to be absolute.
|
|
||||||
* The browser ovverides this to return true because urls must be absolute.
|
|
||||||
* Provided by AbstractFileManager (returns false)
|
|
||||||
*/
|
|
||||||
alwaysMakePathsAbsolute(): boolean
|
|
||||||
/**
|
|
||||||
* Returns whether a path is absolute
|
|
||||||
* Provided by AbstractFileManager
|
|
||||||
*/
|
|
||||||
isPathAbsolute(path: string): boolean
|
|
||||||
/**
|
|
||||||
* joins together 2 paths
|
|
||||||
* Provided by AbstractFileManager
|
|
||||||
*/
|
|
||||||
join(basePath: string, laterPath: string): string
|
|
||||||
/**
|
|
||||||
* Returns the difference between 2 paths
|
|
||||||
* E.g. url = a/ baseUrl = a/b/ returns ../
|
|
||||||
* url = a/b/ baseUrl = a/ returns b/
|
|
||||||
* Provided by AbstractFileManager
|
|
||||||
*/
|
|
||||||
pathDiff(url: string, baseUrl: string): string
|
|
||||||
/**
|
|
||||||
* Returns whether this file manager supports this file for syncronous file retrieval
|
|
||||||
* If true is returned, loadFileSync will then be called with the file.
|
|
||||||
* Provided by AbstractFileManager (returns false)
|
|
||||||
*
|
|
||||||
* @todo - Narrow Options type
|
|
||||||
*/
|
|
||||||
supportsSync(
|
|
||||||
filename: string,
|
|
||||||
currentDirectory: string,
|
|
||||||
options: Record<string, any>,
|
|
||||||
environment: Environment
|
|
||||||
): boolean
|
|
||||||
/**
|
|
||||||
* If file manager supports async file retrieval for this file type
|
|
||||||
*/
|
|
||||||
supports(
|
|
||||||
filename: string,
|
|
||||||
currentDirectory: string,
|
|
||||||
options: Record<string, any>,
|
|
||||||
environment: Environment
|
|
||||||
): boolean
|
|
||||||
/**
|
|
||||||
* Loads a file asynchronously.
|
|
||||||
*/
|
|
||||||
loadFile(
|
|
||||||
filename: string,
|
|
||||||
currentDirectory: string,
|
|
||||||
options: Record<string, any>,
|
|
||||||
environment: Environment
|
|
||||||
): Promise<{ filename: string, contents: string }>
|
|
||||||
/**
|
|
||||||
* Loads a file synchronously. Expects an immediate return with an object
|
|
||||||
*/
|
|
||||||
loadFileSync(
|
|
||||||
filename: string,
|
|
||||||
currentDirectory: string,
|
|
||||||
options: Record<string, any>,
|
|
||||||
environment: Environment
|
|
||||||
): { error?: unknown, filename: string, contents: string }
|
|
||||||
}
|
|
Reference in New Issue