UNPKG

4.73 kBJavaScriptView Raw
1import prop from './package.json' assert { type: 'json' };
2import minify from 'gulp-clean-css';
3import dartSass from 'sass';
4import gulpSass from 'gulp-sass';
5const sass = gulpSass(dartSass);
6import gulp from 'gulp';
7import concat from 'gulp-concat';
8import header from 'gulp-header';
9import sizereport from 'gulp-sizereport';
10import gzip from 'gulp-gzip';
11import size from 'gulp-size';
12const head =
13 '/*\r\n* Cirrus ' +
14 prop.version +
15 `\r\n* Stanley Lim, Copyright ${new Date().getFullYear()}\r\n* https://cirrus-ui.com\r\n*/\r\n`;
16
17const environment = {
18 isCi: process.env.CI ?? false, // Github actions default variable is always set to true
19};
20
21generateGulpBuild(`ext`, `src/cirrus-ext.scss`, `cirrus`, `./dist/`);
22generateGulpBuild(`core`, `src/cirrus-core.scss`, `cirrus-core`, `./dist/`);
23
24// source file name
25// file name
26function generateGulpBuild(taskName, sassFilePath, outputName, distDir) {
27 gulp.task(taskName, () => {
28 return gulp
29 .src([sassFilePath])
30 .pipe(
31 sass({
32 includePaths: ['./node_modules'],
33 })
34 )
35 .on('error', sass.logError)
36 .pipe(
37 sass.sync().on('error', function (err) {
38 sass.logError.call(this, err);
39
40 // Fail job if in CI
41 if (environment.isCi) {
42 throw err;
43 }
44 })
45 )
46 .pipe(concat(`${outputName}.css`))
47 .pipe(header(head))
48 .pipe(size())
49 .pipe(gulp.dest(distDir))
50 .on('error', (err) => {
51 console.error(err);
52 process.exit(1);
53 });
54 });
55
56 gulp.task(
57 `minify-${taskName}`,
58 gulp.series(taskName, () => {
59 return gulp
60 .src([`${distDir}${outputName}.css`])
61 .pipe(
62 minify(
63 {
64 level: {
65 1: {
66 all: true,
67 normalizeUrls: false,
68 },
69 2: {
70 all: false,
71 removeDuplicateRules: true,
72 reduceNonAdjacentRules: true,
73 removeDuplicateFontRules: true,
74 removeDuplicateMediaBlocks: true,
75 mergeAdjacentRules: true,
76 mergeIntoShorthands: true,
77 mergeMedia: true,
78 mergeNonAdjacentRules: true,
79 mergeSemantically: false,
80 removeEmpty: true,
81 },
82 },
83 },
84 (details) => {
85 console.log('FULL');
86 console.log(details.name + ': ' + details.stats.originalSize);
87 console.log(`${outputName}.min.css ${details.stats.minifiedSize}`);
88 }
89 )
90 )
91 .pipe(header(head))
92 .pipe(size())
93 .pipe(concat(`${outputName}.min.css`))
94 .pipe(gulp.dest(distDir))
95 .on('error', (err) => {
96 console.error(`Error encountered for task ${taskName}. Failing.`);
97 process.exit(1);
98 });
99 })
100 );
101
102 // Create Gzipped build
103 gulp.task(
104 `gzip-${taskName}`,
105 gulp.series(taskName, `minify-${taskName}`, () => {
106 return gulp
107 .src([`${distDir}${outputName}.min.css`])
108 .pipe(gzip())
109 .pipe(
110 sizereport({
111 gzip: true,
112 total: false,
113 })
114 )
115 .pipe(gulp.dest(distDir))
116 .on('error', (err) => {
117 console.error(`Error encountered for task ${taskName}. Failing.`);
118 process.exit(1);
119 });
120 })
121 );
122}
123
124gulp.task('watch', () => gulp.watch('./src/**/*.scss', gulp.parallel('minify-ext', 'minify-core')));
125
126gulp.task('default', gulp.parallel('minify-ext', 'minify-core'));
127
128gulp.task('gzip', gulp.parallel('gzip-ext', 'gzip-core'));