@ -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", | |||
} ), | |||
]; |