| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119 | const path = require('path');const { Buffer } = require('buffer');const through2 = require('through2');const merge2 = require('merge2');const gulp = require('gulp');const gulpTS = require('gulp-typescript');const gulpBabel = require('gulp-babel');const sass = require('gulp-sass')(require('sass'));const replace = require('gulp-replace');const del = require('del');const tsConfig = require('./tsconfig.json');const getBabelConfig = require('./getBabelConfig');gulp.task('cleanLib', function cleanLib() {    return del(['lib/**/*']);});gulp.task('compileTSXForESM', function compileTSXForESM() {    const tsStream = gulp.src(['**/*.tsx', '**/*.ts', '!**/node_modules/**/*.*', '!**/_story/**/*.*'])        .pipe(gulpTS({            ...tsConfig.compilerOptions,            rootDir: path.join(__dirname, '..')        }));    const jsStream = tsStream.js        .pipe(gulpBabel(getBabelConfig({ isESM: true })))        .pipe(replace(/(import\s+)['"]@douyinfe\/semi-foundation\/([^'"]+)['"]/g, '$1\'@douyinfe/semi-foundation/lib/es/$2\''))        .pipe(replace(/((?:import|export)\s+.+from\s+)['"]@douyinfe\/semi-foundation\/([^'"]+)['"]/g, '$1\'@douyinfe/semi-foundation/lib/es/$2\''))        .pipe(replace(/(import\s+)['"]([^'"]+)(\.scss)['"]/g, '$1\'$2.css\''))        .pipe(gulp.dest('lib/es'));    const dtsStream = tsStream.dts        .pipe(replace(/(import\s+)['"]@douyinfe\/semi-foundation\/([^'"]+)['"]/g, '$1\'@douyinfe/semi-foundation/lib/es/$2\''))        .pipe(replace(/((?:import|export)\s+.+from\s+)['"]@douyinfe\/semi-foundation\/([^'"]+)['"]/g, '$1\'@douyinfe/semi-foundation/lib/es/$2\''))        .pipe(replace(/(import\(['"])@douyinfe\/semi-foundation\/(.+)/g, '$1@douyinfe/semi-foundation/lib/es/$2'))        .pipe(replace(/(import\s+)['"]([^'"]+)(\.scss)['"]/g, '$1\'$2.css\''))        .pipe(gulp.dest('lib/es'));    return merge2([jsStream, dtsStream]);});gulp.task('compileTSXForCJS', function compileTSXForCJS() {    const tsStream = gulp.src(['**/*.tsx', '**/*.ts', '!**/node_modules/**/*.*', '!**/_story/**/*.*'])        .pipe(gulpTS({            ...tsConfig.compilerOptions,            rootDir: path.join(__dirname, '..')        }));    const jsStream = tsStream.js        .pipe(gulpBabel(getBabelConfig({ isESM: false })))        .pipe(replace(/(require\(['"])@douyinfe\/semi-foundation\/([^'"]+)(['"]\))/g, '$1@douyinfe/semi-foundation/lib/cjs/$2$3'))        .pipe(replace(/(require\(['"])([^'"]+)(\.scss)(['"]\))/g, '$1$2.css$4'))        .pipe(gulp.dest('lib/cjs'));    const dtsStream = tsStream.dts        .pipe(replace(/(import\s+)['"]@douyinfe\/semi-foundation\/([^'"]+)['"]/g, '$1\'@douyinfe/semi-foundation/lib/cjs/$2\''))        .pipe(replace(/((?:import|export)\s+.+from\s+)['"]@douyinfe\/semi-foundation\/([^'"]+)['"]/g, '$1\'@douyinfe/semi-foundation/lib/cjs/$2\''))        .pipe(replace(/(import\(['"])@douyinfe\/semi-foundation\/(.+)/g, '$1@douyinfe/semi-foundation/lib/cjs/$2'))        .pipe(replace(/(import\s+)['"]([^'"]+)(\.scss)['"]/g, '$1\'$2.css\''))        .pipe(gulp.dest('lib/cjs'));    return merge2([jsStream, dtsStream]);});gulp.task('compileScss', function compileScss() {    return gulp.src(['**/*.scss', '!**/node_modules/**/*.*', '!**/_story/**/*.scss'])        .pipe(through2.obj(            function (chunk, enc, cb) {                const rootPath = path.join(__dirname, '../../');                const scssVarStr = `@import "${rootPath}/packages/semi-theme-default/scss/index.scss";\n`;                const cssVarStr = `@import "${rootPath}/packages/semi-theme-default/scss/global.scss";\n`;                const animationStr = `@import "${rootPath}/packages/semi-theme-default/scss/animation.scss";\n`;                const animationBuffer = Buffer.from(animationStr);                const scssBuffer = Buffer.from(scssVarStr);                const buffers = [scssBuffer,animationBuffer];                if (/_base\/base\.scss/.test(chunk.path)) {                    buffers.push(Buffer.from(cssVarStr));                }                chunk.contents = Buffer.concat([...buffers, chunk.contents]);                cb(null, chunk);            }        ))        .pipe(sass({            importer: (url, prev, done) => {                const rootPath = path.join(__dirname, '../../');                let realUrl = url;                if (/~@douyinfe\/semi-foundation/.test(url)) {                    const semiUIPath = path.join(rootPath, 'packages/semi-foundation');                    realUrl = url.replace(/~@douyinfe\/semi-foundation/, semiUIPath);                }                done({ file:realUrl });            },            charset: false        }).on('error', sass.logError))        .pipe(gulp.dest('lib/es'))        .pipe(gulp.dest('lib/cjs'));});function moveScss(isESM) {    const moduleTarget = isESM ? 'es' : 'cjs';    const targetDir = isESM ? 'lib/es' : 'lib/cjs';    return gulp.src(['**/*.scss', '!**/node_modules/**/*.*', '!**/_story/**/*.scss'])        .pipe(replace(/(@import\s+['"]~)(@douyinfe\/semi-foundation\/)/g, `$1@douyinfe/semi-foundation/lib/${moduleTarget}/`))        .pipe(gulp.dest(targetDir));}gulp.task('moveScssForESM', function moveScssForESM() {    return moveScss(true);});gulp.task('moveScssForCJS', function moveScssForCJS() {    return moveScss(false);});gulp.task('compileLib',    gulp.series(        [            'cleanLib',            'compileScss',            gulp.parallel('moveScssForESM', 'moveScssForCJS'),            gulp.parallel('compileTSXForESM', 'compileTSXForCJS')        ]    ));
 |