first commit

This commit is contained in:
2024-10-23 12:55:46 +02:00
commit 85c92aa932
8453 changed files with 1186172 additions and 0 deletions

View File

@@ -0,0 +1,52 @@
const sass = require( 'sass' );
const fs = require( 'fs' ).promises;
const path = require( 'path' );
const postcss = require( 'postcss' );
const cssnano = require( 'cssnano' );
const autoprefixer = require( 'autoprefixer' );
const name = 'splide';
const files = [
'./src/css/core/index.scss',
'./src/css/themes/default/index.scss',
'./src/css/themes/sea-green/index.scss',
'./src/css/themes/skyblue/index.scss',
];
function buildCss( file ) {
const result = sass.renderSync( { file, outputStyle: 'compressed' } );
const outFile = rename( file );
return postcss( [
cssnano( { reduceIdents: false } ),
autoprefixer(),
] )
.process( result.css, { from: undefined } )
.then( result => {
result.warnings().forEach( warn => {
console.warn( warn.toString() );
} );
return fs.writeFile( outFile, result.css ).then( () => result );
} )
.then( result => {
if ( outFile.includes( 'splide-default' ) ) {
const dir = path.dirname( outFile ).split( '/' ).slice( 0, -1 ).join( '/' );
return fs.writeFile( `${ dir }/${ name }.min.css`, result.css ).then( () => result );
}
} );
}
function rename( file ) {
file = file.replace( './src/', '' );
const fragments = path.dirname( file ).split( '/' );
const dirname = fragments.slice( 0, -1 ).join( '/' );
return `./dist/${ dirname }/${ name }-${ fragments[ fragments.length - 1 ] }.min.css`;
}
Promise.all( files.map( buildCss ) ).catch( e => console.error( e ) );
exports.buildCss = () => {
files.forEach( buildCss );
};

View File

@@ -0,0 +1,35 @@
const rollup = require( 'rollup' ).rollup;
const resolve = require( '@rollup/plugin-node-resolve' ).nodeResolve;
const esbuild = require( 'rollup-plugin-esbuild' ).default;
const banner = require( './constants/banner' );
const babel = require( '@rollup/plugin-babel' );
const path = require( 'path' );
const name = 'splide';
function buildModule( type ) {
return rollup( {
input: './src/js/index.ts',
plugins: [
resolve(),
esbuild(),
babel.getBabelOutputPlugin( {
configFile: path.resolve( __dirname, '../.babelrc' ),
allowAllFormats: true,
} ),
],
} ).then( bundle => {
return bundle.write( {
banner,
file : `./dist/js/${ name }.${ type }.js`,
format : type,
sourcemap: false,
exports : 'named',
} );
} );
}
Promise.all( [ buildModule( 'cjs' ), buildModule( 'esm' ) ] ).catch( e => console.error( e ) );
exports.buildCjs = () => buildModule( 'cjs' );
exports.buildEsm = () => buildModule( 'esm' );

View File

@@ -0,0 +1,60 @@
const rollup = require( 'rollup' ).rollup;
const esbuild = require( 'rollup-plugin-esbuild' ).default;
const babel = require( '@rollup/plugin-babel' );
const resolve = require( '@rollup/plugin-node-resolve' ).nodeResolve;
const path = require( 'path' );
const minify = require( './plugins/minify' ).minify;
const banner = require( './constants/banner' );
const fs = require( 'fs' ).promises;
const zlib = require( 'zlib' );
const name = 'splide';
async function buildScript( compress, type = 'default' ) {
const file = `./dist/js/${ name }${ type !== 'default' ? `-${ type }` : '' }${ compress ? '.min' : '' }.js`;
const bundle = await rollup( {
input: `./src/js/build/${ type }.ts`,
plugins: [
resolve(),
esbuild( { minify: false } ),
babel.getBabelOutputPlugin( {
configFile: path.resolve( __dirname, '../.babelrc' ),
allowAllFormats: true,
} ),
compress ? minify( { minify: { sourceMap: true } } ) : false,
]
} );
await bundle.write( {
banner,
file,
format : 'umd',
name : type === 'default' ? 'Splide' : 'SplideRenderer',
sourcemap: compress,
} );
if ( compress && type === 'default' ) {
await fs.readFile( file ).then( content => {
return new Promise( ( resolve, reject ) => {
zlib.gzip( content, ( err, binary ) => {
if ( err ) {
return reject( err );
}
fs.writeFile( `${ file }.gz`, binary ).then( resolve, reject );
} );
} );
} );
}
}
Promise.all( [
buildScript(),
buildScript( true ),
buildScript( true, 'renderer' ),
] ).catch( e => console.error( e ) );
exports.buildJs = () => buildScript();
exports.buildMin = () => buildScript( true );
exports.buildRenderer = () => buildScript( true, 'renderer' );

View File

@@ -0,0 +1,42 @@
const { default: dts } = require( 'rollup-plugin-dts' );
const { rollup } = require( 'rollup' );
const { promises: fs } = require( 'fs' );
const path = require( 'path' );
const util = require( 'util' );
const exec = util.promisify( require( 'child_process' ).exec );
const dir = './dist/types';
async function clean() {
const files = await fs.readdir( dir );
await Promise.all( files.map( file => {
if ( file !== 'index.d.ts' ) {
return fs.rm( path.join( dir, file ), { recursive: true, force: true } );
}
} ) );
}
async function emit() {
await exec( 'tsc --emitDeclarationOnly' );
}
async function bundle() {
const file = path.join( dir, 'index.d.ts' )
const bundle = await rollup( {
input : file,
plugins: [ dts( { respectExternal: true } ) ],
} );
await bundle.write( { file } );
}
async function build() {
await clean();
await emit();
await bundle();
await clean();
}
build().catch( e => console.error( e ) );

View File

@@ -0,0 +1,22 @@
const rollup = require( 'rollup' ).rollup;
const esbuild = require( 'rollup-plugin-esbuild' ).default;
const name = 'splide-utils';
function buildModule( type ) {
return rollup( {
input: './src/js/utils/index.ts',
plugins: [
esbuild(),
],
} ).then( bundle => {
return bundle.write( {
file : `./dist/js/utils/${ name }.${ type }.js`,
format : type,
sourcemap: false,
exports : 'named',
} );
} );
}
Promise.all( [ buildModule( 'cjs' ), buildModule( 'esm' ) ] ).catch( e => console.error( e ) );

View File

@@ -0,0 +1,8 @@
const info = require( '../../package.json' );
module.exports = `/*!
* Splide.js
* Version : ${ info.version }
* License : ${ info.license }
* Copyright: ${ new Date().getFullYear() } ${ info.author }
*/`;

View File

@@ -0,0 +1,22 @@
const chokidar = require( 'chokidar' );
const { buildJs, buildRenderer } = require( './build-script' );
const { buildCss } = require( './build-css' );
chokidar.watch( [ './src/js/**/*.ts', '!*.test.ts', '!./src/js/renderer/**/*.ts' ] ).on( 'change', async () => {
console.log( 'Building Script...' );
await buildJs()
console.log( 'Finished' );
} );
chokidar.watch( [ './src/js/renderer/**/*.ts', '!*.test.ts' ] ).on( 'change', async () => {
console.log( 'Building Renderer Script...' );
await buildRenderer()
console.log( 'Finished' );
} );
chokidar.watch( [ './src/css/**/*.scss' ] ).on( 'change', async () => {
console.log( 'Building CSS...' );
await buildCss()
console.log( 'Finished' );
} );

View File

@@ -0,0 +1,36 @@
const uglify = require( 'uglify-js' );
const plugin = require( 'rollup-plugin-dts' );
const DEFAULTS = {
minify: {
sourceMap: true,
output: {
comments: /^!/,
},
toplevel: true,
mangle: {
properties: {
regex: /^_/,
},
},
},
};
function minify( pluginOptions = {} ) {
pluginOptions = { ...DEFAULTS, ...pluginOptions };
return {
name: 'minify',
renderChunk( code ) {
const result = uglify.minify( code, pluginOptions.minify );
if ( result.error ) {
throw new Error( result.error );
}
return result;
},
}
}
exports.minify = minify;

View File

@@ -0,0 +1,32 @@
const http = require( 'http' );
const path = require( 'path' );
const fs = require( 'fs' ).promises;
const server = http.createServer();
const mime = {
'.html': 'text/html',
'.css' : 'text/css',
'.jpg' : 'image/jpeg',
'.js' : 'application/javascript',
};
server.on( 'request', async ( request, response ) => {
const { url } = request;
let fullPath;
if ( url === '/' ) {
fullPath = path.resolve( './src/js/test/html/index.html' );
} else if ( url.startsWith( '/' ) ) {
fullPath = path.resolve( `.${ url }` );
} else {
fullPath = url;
}
const type = mime[ path.extname( fullPath ) ] || 'text/plain';
const buffer = await fs.readFile( fullPath ).catch( e => console.warn( e ) );
response.writeHead( 200, { 'Content-Type': type } );
response.end( buffer );
} );
server.listen( 3000 );