13 changed files with 1286 additions and 1947 deletions
@ -1 +0,0 @@ |
|||
This directory contains a package bundler for PEG.js that is actually a thin layer around [Rollup](https://rollupjs.org/). |
@ -1,42 +0,0 @@ |
|||
"use strict"; |
|||
|
|||
const bundle = require( "./index" ); |
|||
const dedent = require( "dedent" ); |
|||
const peg = require( "pegjs" ); |
|||
|
|||
const HEADER = dedent` |
|||
|
|||
/** |
|||
* PEG.js v${ peg.VERSION } |
|||
* https://pegjs.org/
|
|||
* |
|||
* Copyright (c) 2010-2016 David Majda |
|||
* Copyright (c) 2017+ Futago-za Ryuu |
|||
* |
|||
* Released under the MIT License. |
|||
*/ |
|||
|
|||
/* eslint-disable */ |
|||
|
|||
`;
|
|||
|
|||
function generate( target ) { |
|||
|
|||
bundle( { |
|||
|
|||
banner: HEADER, |
|||
format: "umd", |
|||
name: "peg", |
|||
source: "packages/pegjs/lib/peg.js", |
|||
target: `packages/pegjs/dist/${ target }`, |
|||
silent: process.argv.includes( "-s" ), |
|||
|
|||
} ); |
|||
|
|||
} |
|||
|
|||
// es5 release
|
|||
generate( "peg.js" ); |
|||
|
|||
// es5 release (minified)
|
|||
generate( "peg.min.js" ); |
@ -1,137 +0,0 @@ |
|||
"use strict"; |
|||
|
|||
const babelOptions = require( "./babelOptions" ); |
|||
const ms = require( "pretty-ms" ); |
|||
const rollup = require( "rollup" ); |
|||
const babel = require( "rollup-plugin-babel" ); |
|||
const commonjs = require( "rollup-plugin-commonjs" ); |
|||
const json = require( "rollup-plugin-json" ); |
|||
const multiEntry = require( "rollup-plugin-multi-entry" ); |
|||
const resolve = require( "rollup-plugin-node-resolve" ); |
|||
const { terser } = require( "rollup-plugin-terser" ); |
|||
|
|||
// pretty-path
|
|||
function pp( p ) { |
|||
|
|||
return ( Array.isArray( p ) ? p.join( ", " ) : p ) |
|||
.replace( process.cwd(), "" ) |
|||
.replace( /\\/g, "/" ) |
|||
.replace( /^\//, "" ); |
|||
|
|||
} |
|||
|
|||
// based on https://github.com/rollup/rollup/blob/master/bin/src/logging.ts
|
|||
function handleError( err ) { |
|||
|
|||
let description = err.message || err; |
|||
|
|||
if ( err.name ) description = `${ err.name }: ${ description }`; |
|||
|
|||
const message = err.plugin ? `(${ err.plugin } plugin) ${ description }` : description; |
|||
|
|||
console.error( message.toString() ); |
|||
|
|||
if ( err.url ) console.error( err.url ); |
|||
|
|||
if ( err.loc ) |
|||
console.error( `${ err.loc.file || err.id } (${ err.loc.line }:${ err.loc.column })` ); |
|||
else if ( err.id ) |
|||
console.error( err.id ); |
|||
|
|||
if ( err.frame ) console.error( err.frame ); |
|||
|
|||
if ( err.stack ) console.error( err.stack ); |
|||
|
|||
} |
|||
|
|||
module.exports = bundle => { |
|||
|
|||
const log = bundle.silent === true ? () => void 0 : console.info; |
|||
|
|||
const plugins = [ |
|||
resolve(), |
|||
commonjs(), |
|||
json( { namedExports: false } ), |
|||
babel( babelOptions ), |
|||
]; |
|||
|
|||
if ( bundle.source.includes( "*" ) ) plugins.unshift( multiEntry() ); |
|||
|
|||
if ( bundle.target.endsWith( ".min.js" ) ) |
|||
|
|||
plugins.push( terser( { output: { comments: /MIT License/ } } ) ); |
|||
|
|||
const config = { |
|||
|
|||
input: bundle.source, |
|||
output: { |
|||
banner: bundle.banner, |
|||
file: bundle.target, |
|||
format: bundle.format || "iife", |
|||
interop: false, |
|||
name: bundle.name, |
|||
}, |
|||
plugins, |
|||
onwarn( warning, warn ) { |
|||
|
|||
if ( warning.code === "CIRCULAR_DEPENDENCY" ) return void 0; |
|||
if ( warning.code === "NAMESPACE_CONFLICT" ) return void 0; |
|||
if ( warning.code === "EVAL" ) return void 0; |
|||
|
|||
if ( bundle.silent !== true ) warn( warning ); |
|||
|
|||
}, |
|||
treeshake: { |
|||
propertyReadSideEffects: true, |
|||
}, |
|||
watch: { |
|||
exclude: "node_modules/**", |
|||
}, |
|||
|
|||
}; |
|||
|
|||
if ( bundle.watch !== true ) { |
|||
|
|||
return rollup.rollup( config ) |
|||
.then( bundle => bundle.write( config.output ) ) |
|||
.then( () => { |
|||
|
|||
log( `@pegjs/bundle-generator > created ${ pp( bundle.target ) }` ); |
|||
|
|||
} ) |
|||
.catch( handleError ); |
|||
|
|||
} |
|||
|
|||
const watcher = rollup.watch( config ); |
|||
|
|||
// https://rollupjs.org/guide/en#rollup-watch
|
|||
watcher.on( "event", event => { |
|||
|
|||
switch ( event.code ) { |
|||
|
|||
case "BUNDLE_START": |
|||
log( `@pegjs/bundle-generator > watching ${ pp( event.input ) }` ); |
|||
break; |
|||
|
|||
case "BUNDLE_END": |
|||
log( `@pegjs/bundle-generator > created ${ pp( event.output ) } in ${ ms( event.duration ) }` ); |
|||
break; |
|||
|
|||
case "ERROR": |
|||
handleError( event.error ); |
|||
break; |
|||
|
|||
case "FATAL": |
|||
console.error( "@pegjs/bundle-generator > Fatel Error!" ); |
|||
handleError( event.error ); |
|||
break; |
|||
|
|||
} |
|||
|
|||
} ); |
|||
|
|||
process.on( "exit", () => watcher.close() ); |
|||
return watcher; |
|||
|
|||
}; |
@ -1,19 +0,0 @@ |
|||
{ |
|||
"name": "@pegjs/bundle-generator", |
|||
"version": "2.1.0", |
|||
"private": true, |
|||
"main": "index.js", |
|||
"dependencies": { |
|||
"@babel/core": "7.2.2", |
|||
"@babel/preset-env": "7.3.1", |
|||
"dedent": "0.7.0", |
|||
"pretty-ms": "4.0.0", |
|||
"rollup": "1.1.2", |
|||
"rollup-plugin-babel": "4.3.2", |
|||
"rollup-plugin-commonjs": "9.2.0", |
|||
"rollup-plugin-json": "3.1.0", |
|||
"rollup-plugin-multi-entry": "2.1.0", |
|||
"rollup-plugin-node-resolve": "4.0.0", |
|||
"rollup-plugin-terser": "4.0.4" |
|||
} |
|||
} |
@ -0,0 +1,5 @@ |
|||
#!/usr/bin/env node
|
|||
|
|||
"use strict"; |
|||
|
|||
require( "webpack-cli" ); |
@ -0,0 +1,21 @@ |
|||
{ |
|||
"name": "@pegjs/bundler", |
|||
"version": "3.0.0", |
|||
"private": true, |
|||
"bin": { |
|||
"bundle": "bundler.js" |
|||
}, |
|||
"devDependencies": { |
|||
"@babel/core": "7.2.2", |
|||
"@babel/preset-env": "7.3.1", |
|||
"@futagoza/child-process": "1.0.0", |
|||
"babel-loader": "8.0.5", |
|||
"dedent": "0.7.0", |
|||
"glob": "7.1.3", |
|||
"webpack": "4.29.3", |
|||
"webpack-cli": "3.2.3" |
|||
}, |
|||
"engines": { |
|||
"node": ">= 6" |
|||
} |
|||
} |
@ -0,0 +1,91 @@ |
|||
"use strict"; |
|||
|
|||
const dedent = require( "dedent" ); |
|||
const glob = require( "glob" ); |
|||
const path = require( "path" ); |
|||
const peg = require( "pegjs" ); |
|||
const webpack = require( "webpack" ); |
|||
|
|||
const HEADER = dedent` |
|||
|
|||
/** |
|||
* PEG.js v${ peg.VERSION }, [hash] |
|||
* https://pegjs.org/
|
|||
* |
|||
* Copyright (c) 2010-2016 David Majda |
|||
* Copyright (c) 2017+ Futago-za Ryuu |
|||
* |
|||
* Released under the MIT License. |
|||
*/ |
|||
|
|||
/* eslint-disable */ |
|||
|
|||
`;
|
|||
|
|||
/** |
|||
* |
|||
* @param {{ entry: string|{}, output: string }} param0 |
|||
*/ |
|||
|
|||
function target( { entry, output } ) { |
|||
|
|||
if ( typeof entry !== "object" ) entry = [ entry ]; |
|||
|
|||
const cwd = process.cwd(); |
|||
|
|||
Object |
|||
.keys( entry ) |
|||
.forEach( name => { |
|||
|
|||
const value = entry[ name ]; |
|||
|
|||
entry[ name ] = value.includes( "*" ) |
|||
? glob |
|||
.sync( value ) |
|||
.map( p => path.join( cwd, p ) ) |
|||
: value; |
|||
|
|||
} ); |
|||
|
|||
return { |
|||
|
|||
mode: process.argv.includes( "--mode=development" ) ? "development" : "production", |
|||
entry: entry, |
|||
output: { |
|||
path: path.dirname( path.resolve( cwd, output ) ), |
|||
filename: path.basename( output ), |
|||
libraryTarget: "umd", |
|||
umdNamedDefine: true, |
|||
sourcePrefix: " ", |
|||
globalObject: "typeof self !== 'undefined' ? self : window", |
|||
}, |
|||
optimization: { |
|||
minimize: output.endsWith( ".min.js" ), |
|||
}, |
|||
performance: { |
|||
hints: false, |
|||
}, |
|||
module: { |
|||
rules: [ |
|||
{ |
|||
test: /\.m?js$/, |
|||
exclude: /node_modules/, |
|||
use: { |
|||
loader: require.resolve( "babel-loader" ), |
|||
options: require( "./babel.config.js" ), |
|||
}, |
|||
}, |
|||
], |
|||
}, |
|||
plugins: [ |
|||
new webpack.BannerPlugin( { |
|||
banner: HEADER, |
|||
raw: true, |
|||
} ) |
|||
], |
|||
|
|||
}; |
|||
|
|||
} |
|||
|
|||
module.exports = target; |
@ -0,0 +1,34 @@ |
|||
"use strict"; |
|||
|
|||
const target = require( "@pegjs/bundler/target" ); |
|||
|
|||
module.exports = [ |
|||
|
|||
/* packages/pegjs/dist/peg.js */ |
|||
target( { |
|||
|
|||
entry: require.resolve( "pegjs" ), |
|||
output: "packages/pegjs/dist/peg.js", |
|||
|
|||
} ), |
|||
|
|||
/* packages/pegjs/dist/peg.min.js */ |
|||
target( { |
|||
|
|||
entry: require.resolve( "pegjs" ), |
|||
output: "packages/pegjs/dist/peg.min.js", |
|||
|
|||
} ), |
|||
|
|||
/* https://pegjs.org/*-bundle.min.js */ |
|||
target( { |
|||
|
|||
entry: { |
|||
"benchmark": require.resolve( "@pegjs/benchmark-suite/browser.js" ), |
|||
"test": "test/**/*.+(spec|test).js", |
|||
}, |
|||
output: "docs/.vuepress/public/[name]-bundle.min.js", |
|||
|
|||
} ), |
|||
|
|||
]; |
File diff suppressed because it is too large
Loading…
Reference in new issue