1- const PluginError = require ( 'plugin-error' ) ;
2- const through2 = require ( 'through2' ) ;
3- const replaceExtension = require ( 'replace-ext' ) ;
4- const path = require ( 'path' ) ;
5- const { pathToFileURL } = require ( 'url' ) ;
6- const applySourceMap = require ( 'vinyl-sourcemaps-apply' ) ;
1+ import path from 'node:path' ;
2+ import { pathToFileURL } from 'node:url' ;
3+ import PluginError from 'plugin-error' ;
4+ import { Transform } from 'stream' ;
5+ import replaceExtension from 'replace-ext' ;
6+ import applySourceMap from 'vinyl-sourcemaps-apply' ;
77
88const PLUGIN_NAME = 'gulp-dartsass' ;
99
@@ -21,11 +21,11 @@ const PLUGIN_NAME = 'gulp-dartsass';
2121 */
2222
2323/**
24- * @param {boolean } async
24+ * @param {boolean } isAsync
2525 * @param {SassCompiler } sass
2626 * @param {Record<string, any> } options
2727 */
28- const gulpDartSass = ( async , sass , options ) => {
28+ const gulpDartSass = ( isAsync , sass , options ) => {
2929 const handleResult = ( file , result , callback ) => {
3030 file . contents = Buffer . from ( result . css , 'utf-8' ) ;
3131 file . path = replaceExtension ( file . path , '.css' ) ;
@@ -50,82 +50,80 @@ const gulpDartSass = (async, sass, options) => {
5050 return callback ( null , file ) ;
5151 } ;
5252
53- const transformer = through2 . obj ( ( file , _encoding , callback ) => {
54- // Ignore null files
55- if ( file . isNull ( ) ) {
56- return callback ( null , file ) ;
57- }
53+ return new Transform ( {
54+ objectMode : true ,
55+ transform ( file , _encoding , callback ) {
56+ // Ignore null files
57+ if ( file . isNull ( ) ) {
58+ return callback ( null , file ) ;
59+ }
5860
59- // Streams are not supported
60- if ( file . isStream ( ) ) {
61- return callback ( new PluginError ( PLUGIN_NAME , 'Streams not supported!' ) ) ;
62- }
61+ // Streams are not supported
62+ if ( file . isStream ( ) ) {
63+ return callback ( new PluginError ( PLUGIN_NAME , 'Streams not supported!' ) ) ;
64+ }
6365
64- // Ignore files beginning with an underscore
65- if ( path . basename ( file . path ) . startsWith ( '_' ) ) {
66- return callback ( ) ;
67- }
66+ // Ignore files beginning with an underscore
67+ if ( path . basename ( file . path ) . startsWith ( '_' ) ) {
68+ return callback ( ) ;
69+ }
6870
69- // Ignore empty files
70- if ( file . contents . length === 0 ) {
71- file . path = replaceExtension ( file . path , '.css' ) ;
72- return callback ( null , file ) ;
73- }
71+ // Ignore empty files
72+ if ( file . contents . length === 0 ) {
73+ file . path = replaceExtension ( file . path , '.css' ) ;
74+ return callback ( null , file ) ;
75+ }
7476
75- const sassOptions = {
76- syntax : 'scss' ,
77- url : pathToFileURL ( file . path ) . toString ( ) ,
78- } ;
77+ const defaultOptions = {
78+ syntax : 'scss' ,
79+ url : pathToFileURL ( file . path ) . toString ( ) ,
80+ } ;
7981
80- // Generate Source Maps
81- sassOptions . sourceMap = Boolean ( file . sourceMap ) ;
82+ // Generate Source Maps
83+ defaultOptions . sourceMap = Boolean ( file . sourceMap ) ;
8284
83- // Update syntax to reflect the file-extension
84- if ( path . extname ( file . path ) === '.sass' ) {
85- sassOptions . syntax = 'indented' ;
86- }
85+ // Update syntax to reflect the file-extension
86+ if ( path . extname ( file . path ) === '.sass' ) {
87+ defaultOptions . syntax = 'indented' ;
88+ }
8789
88- if ( async ) {
89- return sass . compileStringAsync ( file . contents . toString ( 'utf-8' ) , {
90- ...sassOptions ,
91- ...options || { } ,
92- } ) . then ( result => {
93- return handleResult ( file , result , callback ) ;
94- } ) . catch ( error => {
95- return callback ( new PluginError ( PLUGIN_NAME , error ) ) ;
96- } ) ;
97- } else {
98- try {
99- const result = sass . compileString ( file . contents . toString ( 'utf-8' ) , {
100- ...sassOptions ,
90+ if ( isAsync ) {
91+ return sass . compileStringAsync ( file . contents . toString ( 'utf-8' ) , {
92+ ...defaultOptions ,
10193 ...options || { } ,
94+ } ) . then ( result => {
95+ return handleResult ( file , result , callback ) ;
96+ } ) . catch ( error => {
97+ return callback ( new PluginError ( PLUGIN_NAME , error ) ) ;
10298 } ) ;
103-
104- return handleResult ( file , result , callback ) ;
105- } catch ( error ) {
106- return callback ( new PluginError ( PLUGIN_NAME , error ) ) ;
99+ } else {
100+ try {
101+ const result = sass . compileString ( file . contents . toString ( 'utf-8' ) , {
102+ ...defaultOptions ,
103+ ...options || { } ,
104+ } ) ;
105+
106+ return handleResult ( file , result , callback ) ;
107+ } catch ( error ) {
108+ return callback ( new PluginError ( PLUGIN_NAME , error ) ) ;
109+ }
107110 }
108- }
111+ } ,
109112 } ) ;
113+ } ;
110114
111- return transformer ;
115+ /**
116+ * @param {SassCompiler } sass
117+ * @param {Record<string, any> } [options]
118+ */
119+ export const sync = ( sass , options ) => {
120+ return gulpDartSass ( false , sass , options ) ;
112121} ;
113122
114- module . exports = {
115- /**
116- * @param {SassCompiler } sass
117- * @param {Record<string, any> } [options]
118- * @returns
119- */
120- sync ( sass , options ) {
121- return gulpDartSass ( false , sass , options ) ;
122- } ,
123- /**
124- * @param {SassCompiler } sass
125- * @param {Record<string, any> } [options]
126- * @returns
127- */
128- async ( sass , options ) {
129- return gulpDartSass ( true , sass , options ) ;
130- } ,
123+ /**
124+ * @param {SassCompiler } sass
125+ * @param {Record<string, any> } [options]
126+ */
127+ export const async = ( sass , options ) => {
128+ return gulpDartSass ( true , sass , options ) ;
131129} ;
0 commit comments