Press n or j to go to the next uncovered block, b, p or k for the previous block.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 | 1x 6x 6x 6x 6x 6x 6x 4x 6x 6x 4x 6x | import fs from 'fs-extra'; import less from 'less'; import { spawn } from 'child_process'; // @ts-ignore import LessPluginAutoPrefix from 'less-plugin-autoprefix'; const autoprefixPlugin = new LessPluginAutoPrefix({ browsers: [ ">0.2%", "not dead", "not ie <= 11", "not op_mini all" ] }); export interface IOutputFile extends Less.RenderOutput { path: string; less?: string; } export function execute(command: string) { return new Promise((resolve, reject) => { const subProcess = spawn('bash'); function onData(data: string | Buffer | Uint8Array) { process.stdout.write(data); } subProcess.on('error', (error: { message: any; }) => { reject(new Error(`command failed: ${command}; ${error.message ? error.message : ''}`)); }); subProcess.stdout.on('data', onData); subProcess.stderr.on('data', onData); subProcess.on('close', (code: {} | PromiseLike<{}> | undefined) => { resolve(code); }); subProcess.stdin.write(`${command} \n`); subProcess.stdin.end(); }); } export type ExecuteLessOptions = Less.Options & { rmGlobal?: boolean; } export function executeLess(lessPath: string, options?: ExecuteLessOptions): Promise<IOutputFile> { const lessStr = fs.readFileSync(lessPath); const { rmGlobal, ...other } = options || {}; return new Promise((resolve, reject) => { const options: Less.Options = { depends: false, compress: false, lint: false, plugins: [autoprefixPlugin as Less.Plugin], ...other, filename: lessPath, } let lessStrTo = lessStr.toString(); if (rmGlobal) { lessStrTo = lessStrTo.replace(/:global\((.*)\)/g, '$1'); } less.render(lessStrTo, options).then((output: Less.RenderOutput) => { if (rmGlobal) { output.css = output.css.replace(/:global\s+\{([\s\S]*?)(\s.+)?\}/g, '') .replace(/(:global\s+)|(\s.+:global\s+)/g, '') } resolve({ less: lessStr.toString(), path: lessPath, // css: '', // map: 'string', // imports: [], ...output, }); }).catch((e: any) => { reject(e); }); }); } |