Rebuild the website as a SSR static site

master
Futago-za Ryuu 5 years ago
parent afeb2a3330
commit 56722b6d41

@ -6,6 +6,7 @@ ignore:
- "**/*/dist/*.js"
- "**/*.{spec,test}.js"
- "**/*.eslintrc.js"
- "{public,website}/**/*.js"
parsers:
javascript:

@ -1,8 +1,8 @@
!.eslintrc.js
/.idea
/.nyc_output
/public
/packages/pegjs/dist
/coverage
node_modules
/website/*/**
/dist
/website/assets

3
.gitignore vendored

@ -1,12 +1,11 @@
/.idea
/packages/pegjs/dist
/packages/pegjs/.npmrc
/dist
/public
/examples/*.js
node_modules
/coverage
/.nyc_output
/website/js/*-bundle.js
/*.log
/sh.exe.stackdump
/test/junit-results.xml

@ -1,9 +1,12 @@
.github
.idea
.nyc_output
coverage
dist
/.github
/.idea
/.nyc_output
/coverage
node_modules
.eslint*
.nycrc
azure-pipelines.yml
/public
/.codecov.yml
/.eslint*
/.nycrc
/CHANGELOG.md
/tsconfig.json
/README.md

@ -1,13 +1,21 @@
{
"version": 2,
"name": "pegjs-next-website",
"name": "pegjs",
"alias": [
"next.pegjs.org"
"pegjs.org",
"www.pegjs.org"
],
"builds": [
"routes": [
{
"src": "package.json",
"use": "@now/static-build"
"handle": "filesystem"
},
{
"src": "/",
"dest": "/index.html"
},
{
"src": "/([^\\.*]+)",
"dest": "/$1.html"
}
]
}

@ -2,10 +2,10 @@
"name": "pegjs-dev",
"private": true,
"workspaces": [
"docs",
"packages/*",
"tools/*",
"test"
"test",
"website"
],
"scripts": {
"lint": "eslint --ext .js .",
@ -13,10 +13,10 @@
"benchmark": "node tools/benchmark",
"build-parser": "pegjs -c src/pegjs.config.js",
"build-dist": "bundle",
"watch-dist": "bundle --watch",
"clean": "rimraf packages/pegjs/dist examples/*.js",
"build-website": "node website/export",
"clean": "rimraf public packages/pegjs/dist examples/*.js",
"impact": "node tools/impact master",
"now-build": "npm run build-docs",
"build": "node website/export --fresh",
"test": "nyc mocha",
"coverage": "nyc report --reporter=text-lcov > coverage.lcov && codecov"
},

@ -1 +0,0 @@
dist/*-bundle.min.js

@ -1,5 +1,5 @@
{
"name": "@pegjs/publish-dev",
"version": "2.2.0",
"version": "2.3.0",
"private": true
}

@ -10,7 +10,6 @@ function publish( id ) {
const packagejson = require.resolve( id + "/package.json" );
const directory = path.dirname( packagejson );
const npmignore = path.join( directory, ".npmignore" );
const npmrc = path.join( directory, ".npmrc" );
// variabes
@ -63,8 +62,6 @@ function publish( id ) {
fs.writeFileSync( npmrc, `//registry.npmjs.org/:_authToken=${ NPM_TOKEN }` );
if ( fs.existsSync( npmignore ) ) fs.unlinkSync( npmignore );
// publish <package>@dev
exec( "npm publish --tag=dev" );

@ -43,16 +43,4 @@ module.exports = [
} ),
/* https://unpkg.com/pegjs@dev/dist/*-bundle.min.js */
target( {
entry: {
"benchmark": require.resolve( "@pegjs/benchmark-suite/browser.stub.js" ),
"test": require.resolve( "@pegjs/spec-suite/browser.stub.js" ),
},
library: [ "peg", "[name]" ],
output: "packages/pegjs/dist/[name]-bundle.min.js",
} ),
];

@ -0,0 +1,13 @@
This directory contains content used to generate the [PEG.js website](https://pegjs.org/).
### [assets](./assets)
Static files that will be served by Zeit's CDN.
### [pages](./pages), [templates](./templates)
Contains scripts, source files & templates used to generate the actual pages served on the website.
### [export.js](./export.js)
Running this script will build a static site, deployable via `now`

Before

Width:  |  Height:  |  Size: 318 B

After

Width:  |  Height:  |  Size: 318 B

Before

Width:  |  Height:  |  Size: 17 KiB

After

Width:  |  Height:  |  Size: 17 KiB

Before

Width:  |  Height:  |  Size: 2.2 KiB

After

Width:  |  Height:  |  Size: 2.2 KiB

Before

Width:  |  Height:  |  Size: 6.2 KiB

After

Width:  |  Height:  |  Size: 6.2 KiB

@ -3,6 +3,7 @@ $(document).ready(function() {
var MS_IN_S = 1000;
var parser;
var parserSource = null;
var buildAndParseTimer = null;
var parseTimer = null;
@ -51,7 +52,7 @@ $(document).ready(function() {
try {
var timeBefore = (new Date).getTime();
var parserSource = peg.generate(getGrammar(), {
parserSource = peg.generate(getGrammar(), {
cache: $("#option-cache").is(":checked"),
optimize: $("#option-optimize").val(),
output: "source"
@ -69,7 +70,6 @@ $(document).ready(function() {
timeAfter - timeBefore
));
$("#input").removeAttr("disabled");
$("#parser-source").val($("#parser-var").val() + " = " + parserSource + ";\n");
$("#parser-var").removeAttr("disabled");
$("#option-cache").removeAttr("disabled");
$("#option-optimize").removeAttr("disabled");
@ -200,6 +200,14 @@ $(document).ready(function() {
.keyup(scheduleParse)
.keypress(scheduleParse);
$( "#parser-download" )
.click(function(){
var blob = new Blob( [ $( "#parser-var" ).val() + " = " + parserSource + ";\n" ], { type: "application/javascript" } );
window.saveAs( blob, "parser.js" );
});
doLayout();
$(window).resize(doLayout);

@ -0,0 +1,35 @@
"use strict";
const { bluebird, fs, expand, refresh } = require( "./export.utils" );
( async () => {
// Copy static content
await fs.copy( expand( "website/assets" ), expand( "public" ) );
// Generate pages
await bluebird.each( fs.glob( "pages/**/*.js", __dirname ), async input => {
const output = input
.replace( expand( "website/pages" ), expand( "public" ) )
.slice( 0, -3 ) + ".html";
await refresh( input, output, async () => {
let page = require( input );
if ( typeof page === "function" ) page = await bluebird.method( page )();
await fs.ensureDir( fs.dirname( output ) );
await fs.writeFile( output, page.trim() );
} );
} );
} )().catch( err => {
console.trace( err );
process.exit( 1 );
} );

@ -0,0 +1,190 @@
"use strict";
const bluebird = require( "bluebird" );
const BundlerTarget = require( "@pegjs/bundler/target" );
const cp = require( "@futagoza/child-process" );
const fse = require( "fs-extra-plus" );
const isSourceNewer = require( "@tache/is-source-newer" );
const path = require( "path" );
/**
* This flag can be used to:
*
* 1. Force building content even if it hasn't changed.
* 2. Delete and write content instead of overwriting.
*/
const FRESH_BUILD = process.argv.includes( "--fresh" );
/**
* A conveniant object that has the following merged:
*
* - The `fs-extra-plus` module
* - The `path` module
* - Custom overwrides of the above 2 modules
*
* @type {path & fse}
*/
const fs = Object.assign( {}, path, fse, {
copy( source, target, opts ) {
return refresh( source, target, async () => {
if ( FRESH_BUILD ) await fse.remove( target );
await fse.copy( source, target, opts );
} );
},
} );
/**
* A bundler wrapper that simplfies bundler interaction across child process's via async functions.
*/
const Bundler = {
/**
* The CLI argument used to get/set a script that actually contains the bundles config.
*/
argv: "--get-config-from",
/**
* The CLI used to run the actual bundler.
*/
cli: require.resolve( "@pegjs/bundler/bundler.js" ),
/**
* The property exported from a script that contains the bundler's config.
*/
property: Symbol( "BundlerConfig" ),
/**
* This method must be called from a bundler's `*.js` config file to get the actual config.
*/
load() {
const { argv } = process;
return require( argv[ argv.indexOf( Bundler.argv ) + 1 ] )[ Bundler.property ];
},
/**
* This will create an async function that first executes the bundler if required, then calls `next`
*
* @template T
* @param {{check?: string, config: {}, cwd?: string, next: () => T, script: string, targets?: {}[]}} param0
*/
create( { check, config, cwd = __dirname, next, script, targets } ) {
if ( targets && ! config ) config = targets[ 0 ];
/** @returns {Promise<T>} */
async function executer() {
const run = () => cp.run( "node", [ Bundler.cli, Bundler.argv, script ], { cwd } );
await check ? refresh( check, config.output, run ) : run();
return bluebird.method( next )();
}
Object.defineProperty( executer, Bundler.property, {
get: () => targets || [ BundlerTarget( config ) ],
} );
return executer;
},
/**
* A wrapper function to help create a configuration for the bundler.
*/
target: BundlerTarget,
};
/**
* Helps to cleanly get the full filesystem path of `p`.
*
* @param {string} p The path to expand
* @param {string|string[]} cwd The current working directory (prepended to `p`)
*/
function expand( p = ".", cwd = [ __dirname, ".." ] ) {
let resolved = expand.cache[ p ];
if ( ! resolved ) {
if ( typeof cwd === "string" ) cwd = [ cwd ];
const right = p
.replace( "\\", "/" )
.split( "/" );
resolved = path.join( ...cwd, ...right );
expand.cache[ p ] = resolved;
}
return resolved;
}
/**
* A cache of the expaneded paths.
*
* @type {{ [key: string]: string }}
*/
expand.cache = {};
/**
* Will execute `cb` if `source` is newer then `target`. Can be used to only build changed files.
*
* _NOTE:_ If the `--fresh` flag is defined, this will always call `cb`
*
* @template T
* @param {string} source The source file or directory
* @param {string} target The generated output
* @param {(paths:{ source:string, target:string })=>Promise<T>} cb Called if `source` is newer.
*/
async function refresh( source, target, cb ) {
const paths = { source, target };
return FRESH_BUILD || await isSourceNewer( paths )
? cb( paths )
: Promise.resolve();
}
module.exports = {
FRESH_BUILD,
bluebird,
cp,
fs,
Bundler,
expand,
refresh,
};

@ -1,12 +1,11 @@
{
"name": "@pegjs/website",
"version": "1.3.0",
"version": "2.0.0",
"private": true,
"dependencies": {
"body-parser": "1.19.0",
"ejs": "2.7.2",
"express": "4.17.1",
"express-layout": "0.1.0",
"morgan": "1.9.1"
"@futagoza/child-process": "1.0.0",
"@tache/is-source-newer": "1.0.0-beta.5",
"bluebird": "3.7.1",
"fs-extra-plus": "0.5.11"
}
}

@ -0,0 +1,61 @@
"use strict";
const { Bundler, expand } = require( "../../export.utils" );
const template = require( "../../templates/article" );
module.exports = Bundler.create( {
script: __filename,
check: expand( "tools/benchmark" ),
config: {
entry: expand( "tools/benchmark/browser.stub.js" ),
library: [ "peg", "benchmark" ],
output: expand( "public/js/benchmark-bundle.min.js" ),
},
next() {
return template( {
title: "Benchmark",
content: `
<link rel="stylesheet" href="/css/benchmark.css">
<div id="options">
<label for="run-count">Run each test</label>
<input type="text" id="run-count" value="10"> times
<input type="checkbox" id="cache">
<label for="cache">Use results cache</label>
<label for="optimize">Optimize:</label>
<select id="optimize">
<option value="speed">Speed</option>
<option value="size">Size</option>
</select>
<input type="button" id="run" value="Run">
</div>
<table id="results-table">
<tr class="columns">
<th>Test</th>
<th>Input Size</th>
<th>Average Parse Time</th>
<th>Average Parse Speed</th>
</tr>
<tr>
<td class="no-results" colspan="4">No results available yet.</td>
</tr>
</table>
<script src="https://unpkg.com/jquery@1.12.4/dist/jquery.min.js"></script>
<script src="https://unpkg.com/jquery.scrollto@2.1.2/jquery.scrollTo.min.js"></script>
<script src="/js/benchmark-bundle.min.js"></script>
`,
} );
},
} );

@ -0,0 +1,40 @@
"use strict";
const template = require( "../../templates/article" );
module.exports = template( {
title: "Development",
content: `
<h1>Development</h1>
<ul>
<li><a href="https://github.com/pegjs/pegjs/wiki">Wiki</a></li>
<li><a href="https://github.com/pegjs/pegjs">Source code</a></li>
<li><a href="/development/benchmark">Benchmark Suite</a></li>
<li><a href="/development/test">Test Suite</a></li>
<li><a href="/development/try">Try Development Version online</a></li>
<li><a href="https://github.com/pegjs/pegjs/issues">Issue tracker</a></li>
<li><a href="https://groups.google.com/group/pegjs">Google Group</a></li>
<li><a href="https://twitter.com/pegjs">Twitter</a></li>
</ul>
<p>PEG.js is currently maintained by <a href="https://github.com/futagoza">Futago-za Ryuu</a>.
Since it's <a href="https://www.google.com/search?q=inception&plus;meaning">inception</a> in 2010, PEG.js was
maintained by <a href="https://majda.cz/">David Majda</a> (<a href="https://twitter.com/dmajda">@dmajda</a>),
until <a href="https://github.com/pegjs/pegjs/issues/503">May 2017</a>.</p>
<p>The <a href="https://github.com/pegjs/bower">Bower package</a> is maintained by
<a href="https://www.michel-kraemer.com/">Michel Krämer</a>
(<a href="https://twitter.com/michelkraemer">@michelkraemer</a>).</p>
<p>You are welcome to contribute code. Unless your contribution is really
trivial you should get in touch with me first &mdash; this can prevent wasted
effort on both sides. You can send code both as a patch or a GitHub pull
request.</p>
<p>Note that PEG.js is still very much work in progress. There are no
compatibility guarantees until version 1.0.</p>
`,
} );

@ -0,0 +1,44 @@
"use strict";
const { Bundler, expand } = require( "../../export.utils" );
const template = require( "../../templates/article" );
module.exports = Bundler.create( {
script: __filename,
check: expand( "test" ),
config: {
entry: expand( "test/browser.stub.js" ),
library: [ "peg", "test" ],
output: expand( "public/js/test-bundle.min.js" ),
},
next() {
return template( {
title: "Test",
content: `
<div id="mocha"></div>
<link href="/css/test.css" rel="stylesheet" />
<script>
if ( window.MSInputMethodContext && document.documentMode )
document.getElementById( "mocha" ).innerHTML = "Sorry, IE11 is not supported by the Spec Runner's dependencies.";
else
document.write( "<script src='/js/test-bundle.min.js'><\\/script>" );
</script>
`,
} );
},
} );

@ -0,0 +1,29 @@
"use strict";
const { Bundler, fs, expand } = require( "../../export.utils" );
const template = require( "../../templates/editor" );
module.exports = Bundler.create( {
script: __filename,
check: expand( "packages" ),
config: {
entry: require.resolve( "pegjs" ),
library: "peg",
output: expand( "public/js/peg-bundle.min.js" ),
},
async next() {
return template( {
title: "Try Development Version",
lib: "/js/peg-bundle.min.js",
input: await fs.readFile( expand( "examples/arithmetics.pegjs" ), "utf8" ),
} );
},
} );

@ -0,0 +1,10 @@
"use strict";
const { fs, expand } = require( "../export.utils" );
const template = require( "../templates/article" );
module.exports = async () => template( {
title: "Documentation",
content: await fs.readFile( expand( "documentation.html", __dirname ), "utf8" ),
} );

@ -0,0 +1,61 @@
"use strict";
const template = require( "../templates/article" );
module.exports = template( {
title: "Home",
content: `
<div id="sidebar">
<a class="try" href="online">Try PEG.js online</a>
<div class="separator">&mdash; or &mdash;</div>
<pre class="install">npm install pegjs</pre>
<div class="separator">&mdash; or &mdash;</div>
<pre class="install">bower install pegjs</pre>
<div class="separator">&mdash; or &mdash;</div>
<div class="label">Download browser version</div>
<span id="download">
<a
title="Download a minified version of PEG.js for the browser"
href="https://github.com/pegjs/pegjs/releases/download/v0.10.0/peg-0.10.0.min.js"
>minified</a>
|
<a
title="Download PEG.js for the browser"
href="https://github.com/pegjs/pegjs/releases/download/v0.10.0/peg-0.10.0.js"
>development</a>
</span>
</div>
<div id="left-column">
<p>
PEG.js is a simple parser generator for JavaScript that produces fast
parsers with excellent error reporting. You can use it to process complex data
or computer languages and build transformers, interpreters, compilers and
other tools easily.
</p>
<h2>Features</h2>
<ul>
<li>Simple and expressive grammar syntax</li>
<li>Integrates both lexical and syntactical analysis</li>
<li>Parsers have excellent error reporting out of the box</li>
<li>
Based on <a href="https://en.wikipedia.org/wiki/Parsing_expression_grammar">parsing
expression grammar</a> formalism &mdash; more powerful than traditional LL(<em>k</em>)
and LR(<em>k</em>) parsers
</li>
<li>
Usable <a href="https://pegjs.org/online">from your browser</a>, from the command
line, or via JavaScript API
</li>
</ul>
</div>
`,
} );

@ -1,3 +1,9 @@
"use strict";
const template = require( "../templates/editor" );
const input = `
// Simple Arithmetics Grammar
// ==========================
//
@ -27,4 +33,12 @@ Integer "integer"
= _ [0-9]+ { return parseInt(text(), 10); }
_ "whitespace"
= [ \t\n\r]*
= [ \\t\\n\\r]*
`;
module.exports = () => template( {
title: "Online Version",
lib: "/vendor/pegjs/peg.js",
input: input.trim(),
} );

@ -0,0 +1,19 @@
"use strict";
const template = require( "./html" );
module.exports = ( { content, ga, layout, title } = {} ) => {
content = `
<div id="content">
${ content }
</div>
`;
return template( { content, ga, layout, title } );
};

@ -0,0 +1,86 @@
<table id="columns">
<tr>
<td>
<table class="column online" id="left-column">
<tr>
<td class="content-height">
<h2 class="suggestion top">
<span class="step-number">1</span>
<div class="step-title">Write your PEG.js grammar</div>
</h2>
</td>
</tr>
<tr>
<td>
<div class="textarea-wrapper">
<textarea class="code" id="grammar" autocomplete="off" autocorrect="off"
autocapitalize="off" spellcheck="false" disabled>$$DEFAULT_INPUT</textarea>
</div>
</td>
</tr>
<tr>
<td class="content-height">
<div id="build-message" class="message progress">Loading...</div>
</td>
</tr>
</table>
</td>
<td>
<table class="column" id="right-column">
<tr>
<td class="content-height">
<h2 class="suggestion top">
<span class="step-number">2</span>
<div class="step-title">Test the generated parser with some input</div>
</h2>
</td>
</tr>
<tr>
<td>
<div class="textarea-wrapper">
<textarea class="code" id="input" autocomplete="off" autocorrect="off" autocapitalize="off"
spellcheck="false" disabled>2 * (3 + 4)</textarea>
</div>
</td>
</tr>
<tr>
<td class="content-height">
<div id="parse-message" class="message disabled">Parser not available.</div>
</td>
</tr>
<tr>
<td class="content-height">
<h2 id="output-header">Output</h2>
<pre id="output" class="disabled">Output not available.</pre>
</td>
</tr>
<tr>
<td class="content-height">
<h2 class="suggestion">
<span class="step-number">3</span>
<div class="step-title">Download the parser code</div>
</h2>
</td>
</tr>
<tr>
<td class="content-height">
<input type="submit" id="parser-download" value="Download parser" disabled>
<div id="settings">
<label for="parser-var">Parser variable:</label>
<input type="text" id="parser-var" value="module.exports" disabled>
<div id="options">
<input type="checkbox" id="option-cache" disabled>
<label for="option-cache">Use results cache</label>
<label for="option-optimize">Optimize:</label>
<select id="option-optimize" disabled>
<option value="speed">Parsing speed</option>
<option value="size">Code size</option>
</select>
</div>
</div>
</td>
</tr>
</table>
</td>
</tr>
</table>

@ -0,0 +1,40 @@
"use strict";
const { fs, expand } = require( "../export.utils" );
const template = require( "./html" );
module.exports = async ( { ga, input, lib, layout, title } = {} ) => {
const EDITOR_VIEW = await fs.readFile( expand( "editor.html", __dirname ), "utf8" );
const content = `
<div id="loader"> <div id="loader-inner">Loading...</div> </div>
<div id="content">
${ EDITOR_VIEW.replace( "$$DEFAULT_INPUT", input ) }
</div>
<script src="https://unpkg.com/jquery@1.12.4/dist/jquery.min.js"></script>
<script src="https://unpkg.com/file-saver@2.0.2/dist/FileSaver.min.js"></script>
<script src="${ lib }"></script>
<script src="/vendor/jsdump/jsDump.js"></script>
<script src="/vendor/codemirror/codemirror.js"></script>
<script src="/js/online.js"></script>
`;
return template( {
bodyStart: "",
bodyEnd: "",
content,
ga,
head: `<link rel="stylesheet" href="/vendor/codemirror/codemirror.css">`,
layout: layout || "online",
title,
} );
};

@ -0,0 +1,89 @@
"use strict";
const defaultEnd = `
<footer id="footer">
Copyright &copy; 2017+ <a href="https://futagoza.github.io/">Futago-za Ryuu</a>
&bull;
<a href="https://github.com/pegjs/pegjs">Source code</a>
&bull;
<a href="https://twitter.com/pegjs" title="Follow PEG.js on Twitter">Twitter</a>
<br />
Copyright &copy; 2010&ndash;2016 <a href="https://majda.cz/">David Majda</a>
</footer>
</div>
`;
function menuItem( title, url, text ) {
const className = title === text ? " class=\"current\"" : "";
return `<a ${ className } href="/${ url }">${ text }</a>`;
}
module.exports = ( {
bodyStart = "<div id='main'>",
bodyEnd = " " + defaultEnd.trimLeft(),
content = "",
ga = "UA-100728112-1",
head = "",
layout = "default",
title = null,
} = {} ) => `
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="author" content="Futago-za Ryuu (futagoza.ryuu@gmail.com)">
<meta name="copyright" content="Copyright &copy; 2017 Futago-za Ryuu">
<meta name="keywords" content="parser generator, PEG, JavaScript">
<meta name="description" content="PEG.js is a parser generator for JavaScript based on the parsing expression grammar formalism.">
<title>${ title && title !== "Home" ? title + " &raquo; " : "" }PEG.js &ndash; Parser Generator for JavaScript</title>
<link rel="stylesheet" href="/css/common.css">
<link rel="stylesheet" href="/css/layout-${ layout }.css">
<link rel="stylesheet" href="/css/content.css">
<link rel="shortcut icon" href="/favicon.ico" type="image/x-icon">
<!--[if IE]>
<script>
var html5elements = ["aside", "footer", "header", "nav"];
for (var i = 0; i < html5elements.length; i++) {
document.createElement(html5elements[i]);
}
</script>
<![endif]-->
${ head }
</head>
<body>
${ bodyStart }
<header id="header">
<h1><a href="/">PEG.js</a></h1>
<h2>Parser Generator for JavaScript</h2>
</header>
<nav id="menu">
${ menuItem( title, "", "Home" ) }
${ menuItem( title, "online", "Online Version" ) }
${ menuItem( title, "documentation", "Documentation" ) }
${ menuItem( title, "development", "Development" ) }
</nav>
${ content.trim() }
${ bodyEnd }
<script type="text/javascript">
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
ga('create', '${ ga }', 'auto');
ga('send', 'pageview');
</script>
</body>
</html>
`.trim();

@ -1,30 +0,0 @@
<link rel="stylesheet" href="/css/benchmark.css">
<div id="options">
<label for="run-count">Run each test</label>
<input type="text" id="run-count" value="10"> times
<input type="checkbox" id="cache">
<label for="cache">Use results cache</label>
<label for="optimize">Optimize:</label>
<select id="optimize">
<option value="speed">Speed</option>
<option value="size">Size</option>
</select>
<input type="button" id="run" value="Run">
</div>
<table id="results-table">
<tr class="columns">
<th>Test</th>
<th>Input Size</th>
<th>Average Parse Time</th>
<th>Average Parse Speed</th>
</tr>
<tr>
<td class="no-results" colspan="4">No results available yet.</td>
</tr>
</table>
<script src="https://unpkg.com/jquery@1.12.4/dist/jquery.min.js"></script>
<script src="https://unpkg.com/jquery.scrollto@2.1.2/jquery.scrollTo.min.js"></script>
<script src="/js/benchmark-bundle.js"></script>

@ -1,28 +0,0 @@
<h1>Development</h1>
<ul>
<li><a href="https://github.com/pegjs/pegjs/wiki">Wiki</a></li>
<li><a href="https://github.com/pegjs/pegjs">Source code</a></li>
<li><a href="/development/benchmark">Benchmark Suite</a></li>
<li><a href="/development/test">Test Suite</a></li>
<li><a href="https://github.com/pegjs/pegjs/issues">Issue tracker</a></li>
<li><a href="https://groups.google.com/group/pegjs">Google Group</a></li>
<li><a href="https://twitter.com/pegjs">Twitter</a></li>
</ul>
<p>PEG.js is currently maintained by <a href="https://github.com/futagoza">Futago-za Ryuu</a>.
Since it's <a href="https://www.google.com/search?q=inception&plus;meaning">inception</a> in 2010, PEG.js was
maintained by <a href="https://majda.cz/">David Majda</a> (<a href="https://twitter.com/dmajda">@dmajda</a>),
until <a href="https://github.com/pegjs/pegjs/issues/503">May 2017</a>.</p>
<p>The <a href="https://github.com/pegjs/bower">Bower package</a> is maintained by
<a href="https://www.michel-kraemer.com/">Michel Krämer</a>
(<a href="https://twitter.com/michelkraemer">@michelkraemer</a>).</p>
<p>You are welcome to contribute code. Unless your contribution is really
trivial you should get in touch with me first &mdash; this can prevent wasted
effort on both sides. You can send code both as a patch or a GitHub pull
request.</p>
<p>Note that PEG.js is still very much work in progress. There are no
compatibility guarantees until version 1.0.</p>

@ -1,39 +0,0 @@
<div id="sidebar">
<a class="try" href="online">Try PEG.js online</a>
<div class="separator">&mdash; or &mdash;</div>
<pre class="install">npm install pegjs</pre>
<div class="separator">&mdash; or &mdash;</div>
<pre class="install">bower install pegjs</pre>
<div class="separator">&mdash; or &mdash;</div>
<div class="label">Download browser version</div>
<span id="download">
<a title="Download a minified version of PEG.js for the browser" href="https://github.com/pegjs/pegjs/releases/download/v0.10.0/peg-0.10.0.min.js">minified</a>
|
<a title="Download PEG.js for the browser" href="https://github.com/pegjs/pegjs/releases/download/v0.10.0/peg-0.10.0.js">development</a>
</span>
</div>
<div id="left-column">
<p>PEG.js is a simple parser generator for JavaScript that produces fast
parsers with excellent error reporting. You can use it to process complex data
or computer languages and build transformers, interpreters, compilers and
other tools easily.</p>
<h2>Features</h2>
<ul>
<li>Simple and expressive grammar syntax</li>
<li>Integrates both lexical and syntactical analysis</li>
<li>Parsers have excellent error reporting out of the box</li>
<li>Based on <a
href="https://en.wikipedia.org/wiki/Parsing_expression_grammar">parsing
expression grammar</a> formalism &mdash; more powerful than traditional
LL(<em>k</em>) and LR(<em>k</em>) parsers</li>
<li>Usable <a href="https://pegjs.org/online">from your browser</a>,
from the command line, or via JavaScript API</li>
</ul>
</div>

@ -1,53 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="author" content="Futago-za Ryuu (futagoza.ryuu@gmail.com)">
<meta name="copyright" content="Copyright &copy; 2017 Futago-za Ryuu">
<meta name="keywords" content="parser generator, PEG, JavaScript">
<meta name="description" content="PEG.js is a parser generator for JavaScript based on the parsing expression grammar formalism.">
<title><%- title ? title + " &raquo; " : "" %>PEG.js &ndash; Parser Generator for JavaScript</title>
<link rel="stylesheet" href="/css/common.css">
<link rel="stylesheet" href="/css/layout-online.css">
<link rel="stylesheet" href="/css/content.css">
<link rel="stylesheet" href="/vendor/codemirror/codemirror.css">
<link rel="shortcut icon" href="/favicon.ico" type="image/x-icon">
<!--[if IE]>
<script>
var html5elements = ["aside", "footer", "header", "nav"];
for (var i = 0; i < html5elements.length; i++) {
document.createElement(html5elements[i]);
}
</script>
<![endif]-->
</head>
<body>
<header id="header">
<h1><a href="/">PEG.js</a></h1>
<h2>Parser Generator for JavaScript</h2>
</header>
<nav id="menu">
<%- menuItem(req, "", "Home") %>
<%- menuItem(req, "online", "Online Version") %>
<%- menuItem(req, "documentation", "Documentation") %>
<%- menuItem(req, "development", "Development") %>
</nav>
<div id="loader">
<div id="loader-inner">Loading...</div>
</div>
<div id="content">
<%- body %>
</div>
<script type="text/javascript">
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
ga('create', 'UA-100728112-1', 'auto');
ga('send', 'pageview');
</script>
</body>
</html>

@ -1,61 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="author" content="Futago-za Ryuu (futagoza.ryuu@gmail.com)">
<meta name="copyright" content="Copyright &copy; 2017 Futago-za Ryuu">
<meta name="keywords" content="parser generator, PEG, JavaScript">
<meta name="description" content="PEG.js is a parser generator for JavaScript based on the parsing expression grammar formalism.">
<title><%- title ? title + " &raquo; " : "" %>PEG.js &ndash; Parser Generator for JavaScript</title>
<link rel="stylesheet" href="/css/common.css">
<link rel="stylesheet" href="/css/layout-default.css">
<link rel="stylesheet" href="/css/content.css">
<link rel="shortcut icon" href="/favicon.ico" type="image/x-icon">
<!--[if IE]>
<script>
var html5elements = ["aside", "footer", "header", "nav"];
for (var i = 0; i < html5elements.length; i++) {
document.createElement(html5elements[i]);
}
</script>
<![endif]-->
</head>
<body>
<div id="main">
<header id="header">
<h1><a href="/">PEG.js</a></h1>
<h2>Parser Generator for JavaScript</h2>
</header>
<nav id="menu">
<%- menuItem(req, "", "Home") %>
<%- menuItem(req, "online", "Online Version") %>
<%- menuItem(req, "documentation", "Documentation") %>
<%- menuItem(req, "development", "Development") %>
</nav>
<div id="content">
<%- body %>
</div>
<footer id="footer">
Copyright &copy; 2017+ <a href="https://futagoza.github.io/">Futago-za Ryuu</a>
&bull;
<a href="https://github.com/pegjs/pegjs">Source code</a>
&bull;
<a href="https://twitter.com/pegjs" title="Follow PEG.js on Twitter">Twitter</a>
<br />
Copyright &copy; 2010&ndash;2016 <a href="https://majda.cz/">David Majda</a>
</footer>
</div>
<script type="text/javascript">
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
ga('create', 'UA-100728112-1', 'auto');
ga('send', 'pageview');
</script>
</body>
</html>

@ -1,95 +0,0 @@
<table id="columns">
<tr>
<td>
<table class="column online" id="left-column">
<tr>
<td class="content-height">
<h2 class="suggestion top">
<span class="step-number">1</span>
<div class="step-title">Write your PEG.js grammar</div>
</h2>
</td>
</tr>
<tr>
<td>
<div class="textarea-wrapper">
<textarea class="code" id="grammar" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" disabled>
<%- example %>
</textarea>
</div>
</td>
</tr>
<tr>
<td class="content-height">
<div id="build-message" class="message progress">Loading...</div>
</td>
</tr>
</table>
</td>
<td>
<table class="column" id="right-column">
<tr>
<td class="content-height">
<h2 class="suggestion top">
<span class="step-number">2</span>
<div class="step-title">Test the generated parser with some input</div>
</h2>
</td>
</tr>
<tr>
<td>
<div class="textarea-wrapper">
<textarea class="code" id="input" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" disabled>2 * (3 + 4)</textarea>
</div>
</td>
</tr>
<tr>
<td class="content-height">
<div id="parse-message" class="message disabled">Parser not available.</div>
</td>
</tr>
<tr>
<td class="content-height">
<h2 id="output-header">Output</h2>
<pre id="output" class="disabled">Output not available.</pre>
</td>
</tr>
<tr>
<td class="content-height">
<h2 class="suggestion">
<span class="step-number">3</span>
<div class="step-title">Download the parser code</div>
</h2>
</td>
</tr>
<tr>
<td class="content-height">
<form method="post" action="/online/download">
<input type="hidden" id="parser-source" name="source">
<input type="submit" id="parser-download" value="Download parser" disabled>
<div id="settings">
<label for="parser-var">Parser variable:</label>
<input type="text" id="parser-var" value="module.exports" disabled>
<div id="options">
<input type="checkbox" id="option-cache" disabled>
<label for="option-cache">Use results cache</label>
<label for="option-optimize">Optimize:</label>
<select id="option-optimize" disabled>
<option value="speed">Parsing speed</option>
<option value="size">Code size</option>
</select>
</div>
</div>
</from>
</td>
</tr>
</table>
</td>
</tr>
</table>
<script src="https://unpkg.com/jquery@1.12.4/dist/jquery.min.js"></script>
<script src="<%- pegjs %>"></script>
<script src="/vendor/jsdump/jsDump.js"></script>
<script src="/vendor/codemirror/codemirror.js"></script>
<script src="/js/online.js"></script>

@ -1,16 +0,0 @@
<div id="mocha"></div>
<link href="/css/test.css" rel="stylesheet" />
<script src="https://unpkg.com/mocha@5.2.0/mocha.js"></script>
<script>
mocha.setup( { ui: "bdd" } );
if ( window.MSInputMethodContext && document.documentMode )
document.getElementById( "mocha" ).innerHTML = "Sorry, IE11 is not supported by the Spec Runner's dependencies.";
else
document.write( "<script src='/js/test-bundle.js' onload='mocha.run()'><\/script>" );
</script>

@ -0,0 +1,3 @@
"use strict";
module.exports = require( "./export.utils" ).Bundler.load();

@ -650,6 +650,13 @@
lodash "^4.17.13"
to-fast-properties "^2.0.0"
"@futagoza/child-process@1.0.0":
version "1.0.0"
resolved "https://registry.yarnpkg.com/@futagoza/child-process/-/child-process-1.0.0.tgz#5f5c7308fb238c7b05d359c8ba4e368fdc12d95b"
integrity sha512-im8iWE7eNHM+Bz9awPDdY4gD/1sC+VIpPgo3Fcu9n/oPb9Up1A01jCbKqgknZYvjdlPGTYp6/bDr0R5w8xfH+g==
dependencies:
any-promise "1.3.0"
"@futagoza/eslint-config-core@11.2.0":
version "11.2.0"
resolved "https://registry.yarnpkg.com/@futagoza/eslint-config-core/-/eslint-config-core-11.2.0.tgz#d34e88b371999011823bd1e8dbb8f0a4a3e883da"
@ -718,6 +725,27 @@
"@futagoza/eslint-config-node" "11.2.0"
"@futagoza/eslint-config-typescript" "11.2.0"
"@nodelib/fs.scandir@2.1.3":
version "2.1.3"
resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.3.tgz#3a582bdb53804c6ba6d146579c46e52130cf4a3b"
integrity sha512-eGmwYQn3gxo4r7jdQnkrrN6bY478C3P+a/y72IJukF8LjB6ZHeB3c+Ehacj3sYeSmUXGlnA67/PmbM9CVwL7Dw==
dependencies:
"@nodelib/fs.stat" "2.0.3"
run-parallel "^1.1.9"
"@nodelib/fs.stat@2.0.3", "@nodelib/fs.stat@^2.0.2":
version "2.0.3"
resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.3.tgz#34dc5f4cabbc720f4e60f75a747e7ecd6c175bd3"
integrity sha512-bQBFruR2TAwoevBEd/NWMoAAtNGzTRgdrqnYCc7dhzfoNvqPzLyqlEQnzZ3kVnNrSp25iyxE00/3h2fqGAGArA==
"@nodelib/fs.walk@^1.2.3":
version "1.2.4"
resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.4.tgz#011b9202a70a6366e436ca5c065844528ab04976"
integrity sha512-1V9XOY4rDW0rehzbrcqAmHnz8e7SKvX27gh8Gt2WgB0+pdzdiLV83p72kZPU+jvMbS1qU5mauP2iOvO8rhmurQ==
dependencies:
"@nodelib/fs.scandir" "2.1.3"
fastq "^1.6.0"
"@sinonjs/commons@^1", "@sinonjs/commons@^1.3.0", "@sinonjs/commons@^1.4.0":
version "1.6.0"
resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.6.0.tgz#ec7670432ae9c8eb710400d112c201a362d83393"
@ -747,16 +775,33 @@
resolved "https://registry.yarnpkg.com/@sinonjs/text-encoding/-/text-encoding-0.7.1.tgz#8da5c6530915653f3a1f38fd5f101d8c3f8079c5"
integrity sha512-+iTbntw2IZPb/anVDbypzfQa+ay64MW0Zo8aJ8gZPWMMK6/OubMVb6lUPMagqjOPnmtauXnFCACVl3O7ogjeqQ==
"@tache/is-source-newer@1.0.0-beta.5":
version "1.0.0-beta.5"
resolved "https://registry.yarnpkg.com/@tache/is-source-newer/-/is-source-newer-1.0.0-beta.5.tgz#444759691122df730650bf30b673fbb865eb67a2"
integrity sha512-v+dlPkYift8jyxLoyS5KOqczEcCINBmswp8OiXnH1h03CuWsY6nSU3E+yAf5hruqlhac6UYCbvWimu0M5+f9og==
"@types/eslint-visitor-keys@^1.0.0":
version "1.0.0"
resolved "https://registry.yarnpkg.com/@types/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#1ee30d79544ca84d68d4b3cdb0af4f205663dd2d"
integrity sha512-OCutwjDZ4aFS6PB1UZ988C4YgwlBHJd6wCeQqaLdmadZ/7e+w79+hbMUFC1QXDNCmdyoRfAFdm0RypzwR+Qpag==
"@types/fs-extra@^8.0.0":
version "8.0.1"
resolved "https://registry.yarnpkg.com/@types/fs-extra/-/fs-extra-8.0.1.tgz#a2378d6e7e8afea1564e44aafa2e207dadf77686"
integrity sha512-J00cVDALmi/hJOYsunyT52Hva5TnJeKP5yd1r+mH/ZU0mbYZflR0Z5kw5kITtKTRYMhm1JMClOFYdHnQszEvqw==
dependencies:
"@types/node" "*"
"@types/json-schema@^7.0.3":
version "7.0.3"
resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.3.tgz#bdfd69d61e464dcc81b25159c270d75a73c1a636"
integrity sha512-Il2DtDVRGDcqjDtE+rF8iqg1CArehSK84HZJCT7AMITlyXRBpuPhqGLDQMowraqqu1coEaimg4ZOqggt6L6L+A==
"@types/node@*":
version "12.12.7"
resolved "https://registry.yarnpkg.com/@types/node/-/node-12.12.7.tgz#01e4ea724d9e3bd50d90c11fd5980ba317d8fa11"
integrity sha512-E6Zn0rffhgd130zbCbAr/JdXfXkoOUFAKNs/rF8qnafSJ8KYaA/j3oz7dcwal+lYjLA7xvdd5J4wdYpCTlP8+w==
"@types/node@8":
version "8.10.59"
resolved "https://registry.yarnpkg.com/@types/node/-/node-8.10.59.tgz#9e34261f30183f9777017a13d185dfac6b899e04"
@ -1046,6 +1091,11 @@ ansi-styles@^3.2.0, ansi-styles@^3.2.1:
dependencies:
color-convert "^1.9.0"
any-promise@1.3.0:
version "1.3.0"
resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f"
integrity sha1-q8av7tzqUugJzcA3au0845Y10X8=
anymatch@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb"
@ -1220,7 +1270,7 @@ binary-extensions@^1.0.0:
resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65"
integrity sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==
bluebird@^3.5.5:
bluebird@3.7.1, bluebird@^3.5.5:
version "3.7.1"
resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.1.tgz#df70e302b471d7473489acf26a93d63b53f874de"
integrity sha512-DdmyoGCleJnkbp3nkbxTLJ18rjDsE4yCggEwKNXkeV123sPNfOCYeDoeuOY+F2FrSjO1YXcTU+dsy96KMy+gcg==
@ -2232,6 +2282,17 @@ fast-deep-equal@^2.0.1:
resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49"
integrity sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=
fast-glob@^3.0.4:
version "3.1.0"
resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.1.0.tgz#77375a7e3e6f6fc9b18f061cddd28b8d1eec75ae"
integrity sha512-TrUz3THiq2Vy3bjfQUB2wNyPdGBeGmdjbzzBLhfHN4YFurYptCKwGq/TfiRavbGywFRzY6U2CdmQ1zmsY5yYaw==
dependencies:
"@nodelib/fs.stat" "^2.0.2"
"@nodelib/fs.walk" "^1.2.3"
glob-parent "^5.1.0"
merge2 "^1.3.0"
micromatch "^4.0.2"
fast-json-stable-stringify@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2"
@ -2242,6 +2303,13 @@ fast-levenshtein@~2.0.6:
resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917"
integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=
fastq@^1.6.0:
version "1.6.0"
resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.6.0.tgz#4ec8a38f4ac25f21492673adb7eae9cfef47d1c2"
integrity sha512-jmxqQ3Z/nXoeyDmWAzF9kH1aGZSis6e/SbfPmJpUnyZ0ogr6iscHQaml4wsEepEWSdtmpy+eVXmCRIMpxaXqOA==
dependencies:
reusify "^1.0.0"
figgy-pudding@^3.5.1:
version "3.5.1"
resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.1.tgz#862470112901c727a0e495a80744bd5baa1d6790"
@ -2351,6 +2419,24 @@ from2@^2.1.0:
inherits "^2.0.1"
readable-stream "^2.0.0"
fs-extra-plus@0.5.11:
version "0.5.11"
resolved "https://registry.yarnpkg.com/fs-extra-plus/-/fs-extra-plus-0.5.11.tgz#32e998d5ac1501937a0d4201cac5f79e2b73de56"
integrity sha512-IpAkV1hAUvQH+QIGFi04yIWGANudCipWZ17yeqZcN8TSNCI+REJakTQTvbchhH1xBM1FkhKU6qpjZ3owbvbUXA==
dependencies:
"@types/fs-extra" "^8.0.0"
fast-glob "^3.0.4"
fs-extra "^8.1.0"
fs-extra@^8.1.0:
version "8.1.0"
resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0"
integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==
dependencies:
graceful-fs "^4.2.0"
jsonfile "^4.0.0"
universalify "^0.1.0"
fs-minipass@^1.2.5:
version "1.2.7"
resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.7.tgz#ccff8570841e7fe4265693da88936c55aed7f7c7"
@ -2428,7 +2514,7 @@ glob-parent@^3.1.0:
is-glob "^3.1.0"
path-dirname "^1.0.0"
glob-parent@^5.0.0:
glob-parent@^5.0.0, glob-parent@^5.1.0:
version "5.1.0"
resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.0.tgz#5f4c1d1e748d30cd73ad2944b3577a81b081e8c2"
integrity sha512-qjtRgnIVmOfnKUE3NJAQEdk+lKrxfw8t5ke7SXtfMTHcjsBfOfWXCQfdb30zfDoZQ2IRSIiidmjtbHZPZ++Ihw==
@ -2471,7 +2557,7 @@ globals@^11.1.0, globals@^11.7.0:
resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e"
integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==
graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2:
graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0:
version "4.2.3"
resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.3.tgz#4a12ff1b60376ef09862c2093edd908328be8423"
integrity sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==
@ -3041,6 +3127,13 @@ json5@^2.1.0:
dependencies:
minimist "^1.2.0"
jsonfile@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb"
integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=
optionalDependencies:
graceful-fs "^4.1.6"
just-extend@^4.0.2:
version "4.0.2"
resolved "https://registry.yarnpkg.com/just-extend/-/just-extend-4.0.2.tgz#f3f47f7dfca0f989c55410a7ebc8854b07108afc"
@ -3216,6 +3309,11 @@ merge-source-map@^1.1.0:
dependencies:
source-map "^0.6.1"
merge2@^1.3.0:
version "1.3.0"
resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.3.0.tgz#5b366ee83b2f1582c48f87e47cf1a9352103ca81"
integrity sha512-2j4DAdlBOkiSZIsaXk4mTE3sRS02yBHAtfy127xRV3bQUFqXkjHCHLW6Scv7DwNRbIWNHH8zpnz9zMaKXIdvYw==
micromatch@^3.1.10, micromatch@^3.1.4:
version "3.1.10"
resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23"
@ -3235,7 +3333,7 @@ micromatch@^3.1.10, micromatch@^3.1.4:
snapdragon "^0.8.1"
to-regex "^3.0.2"
micromatch@^4.0.0:
micromatch@^4.0.0, micromatch@^4.0.2:
version "4.0.2"
resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.2.tgz#4fcb0999bf9fbc2fcbdd212f6d629b9a56c39259"
integrity sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==
@ -4203,6 +4301,11 @@ ret@~0.1.10:
resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc"
integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==
reusify@^1.0.0:
version "1.0.4"
resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76"
integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==
rimraf@2.6.3:
version "2.6.3"
resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab"
@ -4239,6 +4342,11 @@ run-async@^2.2.0:
dependencies:
is-promise "^2.1.0"
run-parallel@^1.1.9:
version "1.1.9"
resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.1.9.tgz#c9dd3a7cf9f4b2c4b6244e173a6ed866e61dd679"
integrity sha512-DEqnSRTDw/Tc3FXf49zedI638Z9onwUotBMiUFKmrO2sdFKIbXamXGQ3Axd4qgphxKB4kw/qP1w5kTxnfU1B9Q==
run-queue@^1.0.0, run-queue@^1.0.3:
version "1.0.3"
resolved "https://registry.yarnpkg.com/run-queue/-/run-queue-1.0.3.tgz#e848396f057d223f24386924618e25694161ec47"
@ -4926,6 +5034,11 @@ unique-slug@^2.0.0:
dependencies:
imurmurhash "^0.1.4"
universalify@^0.1.0:
version "0.1.2"
resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66"
integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==
unset-value@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559"

Loading…
Cancel
Save