Browse Source

Rebuild the website as a SSR static site

master
Futago-za Ryuu 1 year ago
parent
commit
56722b6d41
50 changed files with 901 additions and 374 deletions
  1. +1
    -0
      .codecov.yml
  2. +2
    -2
      .eslintignore
  3. +1
    -2
      .gitignore
  4. +11
    -8
      .nowignore
  5. +13
    -5
      now.json
  6. +5
    -5
      package.json
  7. +0
    -1
      packages/pegjs/.npmignore
  8. +1
    -1
      tools/publish-dev/package.json
  9. +0
    -3
      tools/publish-dev/publish.js
  10. +0
    -12
      webpack.config.js
  11. +13
    -0
      website/README.md
  12. +0
    -0
      website/assets/css/benchmark.css
  13. +0
    -0
      website/assets/css/common.css
  14. +0
    -0
      website/assets/css/content.css
  15. +0
    -0
      website/assets/css/layout-default.css
  16. +0
    -0
      website/assets/css/layout-online.css
  17. +0
    -0
      website/assets/css/test.css
  18. +0
    -0
      website/assets/favicon.ico
  19. +0
    -0
      website/assets/img/rule.png
  20. +0
    -0
      website/assets/img/spinner-16x16-progress.gif
  21. +0
    -0
      website/assets/img/spinner-48x48.gif
  22. +10
    -2
      website/assets/js/online.js
  23. +0
    -0
      website/assets/vendor/codemirror/codemirror.css
  24. +0
    -0
      website/assets/vendor/codemirror/codemirror.js
  25. +0
    -0
      website/assets/vendor/jsdump/jsDump.js
  26. +0
    -0
      website/assets/vendor/pegjs/peg.js
  27. +35
    -0
      website/export.js
  28. +190
    -0
      website/export.utils.js
  29. +5
    -6
      website/package.json
  30. +61
    -0
      website/pages/development/benchmark.js
  31. +40
    -0
      website/pages/development/index.js
  32. +44
    -0
      website/pages/development/test.js
  33. +29
    -0
      website/pages/development/try.js
  34. +0
    -0
      website/pages/documentation.html
  35. +10
    -0
      website/pages/documentation.js
  36. +61
    -0
      website/pages/index.js
  37. +15
    -1
      website/pages/online.js
  38. +19
    -0
      website/templates/article.js
  39. +86
    -0
      website/templates/editor.html
  40. +40
    -0
      website/templates/editor.js
  41. +89
    -0
      website/templates/html.js
  42. +0
    -30
      website/views/benchmark.ejs
  43. +0
    -28
      website/views/development.ejs
  44. +0
    -39
      website/views/index.ejs
  45. +0
    -53
      website/views/layout-online.ejs
  46. +0
    -61
      website/views/layout.ejs
  47. +0
    -95
      website/views/online.ejs
  48. +0
    -16
      website/views/test.ejs
  49. +3
    -0
      website/webpack.config.js
  50. +117
    -4
      yarn.lock

+ 1
- 0
.codecov.yml View File

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

parsers:
javascript:


+ 2
- 2
.eslintignore View File

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

+ 1
- 2
.gitignore View File

@@ -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

+ 11
- 8
.nowignore View File

@@ -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

+ 13
- 5
now.json View File

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

+ 5
- 5
package.json View File

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


+ 0
- 1
packages/pegjs/.npmignore View File

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

+ 1
- 1
tools/publish-dev/package.json View File

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

+ 0
- 3
tools/publish-dev/publish.js View File

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


+ 0
- 12
webpack.config.js View File

@@ -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",

} ),

];

+ 13
- 0
website/README.md View File

@@ -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`

website/css/benchmark.css → website/assets/css/benchmark.css View File


website/css/common.css → website/assets/css/common.css View File


website/css/content.css → website/assets/css/content.css View File


website/css/layout-default.css → website/assets/css/layout-default.css View File


website/css/layout-online.css → website/assets/css/layout-online.css View File


website/css/test.css → website/assets/css/test.css View File


website/favicon.ico → website/assets/favicon.ico View File


website/img/rule.png → website/assets/img/rule.png View File


website/img/spinner-16x16-progress.gif → website/assets/img/spinner-16x16-progress.gif View File


website/img/spinner-48x48.gif → website/assets/img/spinner-48x48.gif View File


website/js/online.js → website/assets/js/online.js View File

@@ -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);


website/vendor/codemirror/codemirror.css → website/assets/vendor/codemirror/codemirror.css View File


website/vendor/codemirror/codemirror.js → website/assets/vendor/codemirror/codemirror.js View File


website/vendor/jsdump/jsDump.js → website/assets/vendor/jsdump/jsDump.js View File


website/vendor/pegjs/peg.js → website/assets/vendor/pegjs/peg.js View File


+ 35
- 0
website/export.js View File

@@ -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 );

} );

+ 190
- 0
website/export.utils.js View File

@@ -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,

};

+ 5
- 6
website/package.json View File

@@ -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"
}
}

+ 61
- 0
website/pages/development/benchmark.js View File

@@ -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>

`,
} );

},

} );

+ 40
- 0
website/pages/development/index.js View File

@@ -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>

`,
} );

+ 44
- 0
website/pages/development/test.js View File

@@ -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>

`,
} );

},

} );

+ 29
- 0
website/pages/development/try.js View File

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

},

} );

website/views/documentation.ejs → website/pages/documentation.html View File


+ 10
- 0
website/pages/documentation.js View File

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

+ 61
- 0
website/pages/index.js View File

@@ -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>

`,
} );

website/vendor/pegjs/arithmetics.pegjs → website/pages/online.js View File

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

+ 19
- 0
website/templates/article.js View File

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

};

+ 86
- 0
website/templates/editor.html View File

@@ -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>

+ 40
- 0
website/templates/editor.js View File

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

};

+ 89
- 0
website/templates/html.js View File

@@ -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();

+ 0
- 30
website/views/benchmark.ejs View File

@@ -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>

+ 0
- 28
website/views/development.ejs View File

@@ -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>

+ 0
- 39
website/views/index.ejs View File

@@ -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>

+ 0
- 53
website/views/layout-online.ejs View File

@@ -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>

+ 0
- 61
website/views/layout.ejs View File

@@ -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>

+ 0
- 95
website/views/online.ejs View File

@@ -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>

+ 0
- 16
website/views/test.ejs View File

@@ -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>

+ 3
- 0
website/webpack.config.js View File

@@ -0,0 +1,3 @@
"use strict";

module.exports = require( "./export.utils" ).Bundler.load();

+ 117
- 4
yarn.lock View File

@@ -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