www

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | Submodules | README | LICENSE

sass.js (1951B)


      1 'use strict';
      2 
      3 const universalify = require('universalify');
      4 const sass = require('node-sass');
      5 const globby = require('globby');
      6 const path = require('path');
      7 const fs = require('fs-extra');
      8 const { getSignatures, writeSignatures, cleanUp, compareSignatures, getFileSignature, onSuccess, onError, onProgress, getPathRelativeTo } = require('./utils');
      9 const { ignoreMask } = require('./config');
     10 const sassRender = universalify.fromCallback(sass.render);
     11 
     12 const ROOT = path.resolve(__dirname, '..');
     13 
     14 async function getSass(source, options, signatures) {
     15 	const t1 = Date.now();
     16 	const files = await globby(source, Object.assign({ cwd: ROOT }, options ));
     17 	const totalCount = files.length;
     18 	var count = 0;
     19 	var f;
     20 
     21 	while ((f = files.pop()) != null) {
     22 		let newFileSignature = await getFileSignature(f);
     23 		const dest = path.join.apply(this, ['build', 'chrome', 'skin', 'default', 'zotero', 'components', getPathRelativeTo(f, 'scss')]);
     24 
     25 		if (f in signatures) {
     26 			if (compareSignatures(newFileSignature, signatures[f])) {
     27 				try {
     28 					await fs.access(dest, fs.constants.F_OK);
     29 					continue;
     30 				} catch (_) {
     31 					// file does not exists in build, fallback to browserifing
     32 				}
     33 			}
     34 		}
     35 		try {
     36 			const sass = await sassRender({
     37 				file: f
     38 			});
     39 
     40 			await fs.outputFile(dest, sass);
     41 			onProgress(f, dest, 'sass');
     42 			signatures[f] = newFileSignature;
     43 			count++;
     44 		} catch (err) {
     45 			throw new Error(`Failed on ${f}: ${err}`);
     46 		}
     47 	}
     48 	
     49 	const t2 = Date.now();
     50 	return {
     51 		action: 'sass',
     52 		count,
     53 		totalCount,
     54 		processingTime: t2 - t1
     55 	};
     56 }
     57 
     58 module.exports = getSass;
     59 
     60 if (require.main === module) {
     61 	(async () => {
     62 		try {
     63 			const signatures = await getSignatures();
     64 			onSuccess(await getSass('scss/*.scss', { root: 'scss', ignore: ignoreMask }, signatures));
     65 			onSuccess(await cleanUp(signatures));
     66 			await writeSignatures(signatures);
     67 		} catch (err) {
     68 			process.exitCode = 1;
     69 			global.isError = true;
     70 			onError(err);
     71 		}
     72 	})();
     73 }