imports working?!

sdl
Marcus 2021-05-06 23:05:36 -04:00
parent bac6e4cfb8
commit 2a0ffec1f6
11 changed files with 405 additions and 213 deletions

6
.editorconfig 100644
View File

@ -0,0 +1,6 @@
[*]
indent_style = tab
indent_size = 2
[*.ne]
indent_style = spaces

View File

@ -6,16 +6,20 @@ export default class Instance extends Serializable {
module = null; module = null;
links = {} links = {}
system = null; system = null;
context = null;
// reconstruct context when we need it... // reconstruct context when we need it...
get context() { createContext() {
const ctx = {}; const ctx = {};
for(const name in this.links) { for(const name in this.links) {
ctx[name] = this.links[name]; ctx[name] = this.links[name];
} }
for(const name in this.module.imports) {
ctx[name] = this.module.imports[name];
}
// ctx.Instance = Instance; // ctx.Instance = Instance;
ctx.create = this.system.newInstance.bind(this.system); ctx.create = this.system.newInstance.bind(this.system);
return ctx; this.context = ctx;
}; };
constructor(module, location, parameters, system) { constructor(module, location, parameters, system) {
@ -24,12 +28,27 @@ export default class Instance extends Serializable {
this.location = location; this.location = location;
this.system = system; this.system = system;
for(const name of this.module.links.optional.arrays) this.links[name] = []; for(const name of this.module.links.optional.arrays) this.links[name] = [];
this.createContext();
this._link = new Proxy(this, {
get(target, prop, receiver) {
if(prop === 'restore') return undefined;
if(prop in target.module.functions) {
return target.invokeInternal.bind(target, prop);
}
return undefined;
}
});
} }
invokeInternal(name, ...args) { invokeInternal(name, ...args) {
const content = this.module.functions[name]; const content = this.module.functions[name];
evalInContext(content, this.context); evalInContext(content, this.context);
} }
get link () {
return this._link;
}
} }
function evalInContext(js, context) { function evalInContext(js, context) {

View File

@ -18,5 +18,6 @@ export default class Module {
space: '', space: '',
last: '', last: '',
full: '' full: ''
} };
imports = {}
} }

View File

@ -14,7 +14,7 @@ export default class System extends Serializable {
try { try {
mkdirSync(location); mkdirSync(location);
} catch {} } catch {}
this.newInstance('xyz.places.world'); this.newInstance('xyz.places.main');
} }
getModule(name) { getModule(name) {
@ -25,17 +25,9 @@ export default class System extends Serializable {
return new Instance(this.getModule(name), null, args, this); return new Instance(this.getModule(name), null, args, this);
} }
linkInstance(instance) {
return new Proxy(instance, {
get(target, prop, receiver) {
return target[prop];
}
});
}
newInstance(name, args = {}) { newInstance(name, args = {}) {
const instance = this.createInstance(name, args); const instance = this.createInstance(name, args);
const link = this.linkInstance(instance); const link = instance.link;
instance.invokeInternal('restore'); instance.invokeInternal('restore');
return link; return link;
} }

View File

@ -1,17 +1,31 @@
@lexer lexer @lexer lexer
PROGRAM -> _ STATEMENT:+ _ {% ([,stuff,]) => { return stuff } %} PROGRAM -> _ STATEMENT:+ _ {% ([,stuff,]) => { return stuff } %}
STATEMENT -> _ LINK_DECLARATION _ %SEMICOLON:? {% ([,stuff]) => { return stuff } %}
| _ %RESTORE _ JS_BLOCK _ %SEMICOLON:? {% ([,,,block]) => { return { type: 'restore', block: block } } %} STATEMENT -> _ LINK_DECLARATION _ SEMICOLON {% ([,stuff]) => { return stuff } %}
| _ IDENTIFIER _ JS_BLOCK _ %SEMICOLON:? {% ([,name,,block]) => { return { type: 'function', name: name, block: block } } %} | _ %RESTORE _ JS_BLOCK _ SEMICOLON {% ([,,,block]) => { return { type: 'restore', block: block } } %}
| _ %NAMESPACE __ NAMESPACE _ %SEMICOLON:? {% ([,,,namespace]) => { return { type: 'namespace', namespace: namespace[0] } } %} | _ IDENTIFIER _ JS_BLOCK _ SEMICOLON {% ([,name,,block]) => { return { type: 'function', name: name, block: block } } %}
LINK_DECLARATION -> _ %LINK __ IDENTIFIER {% ([,,,id]) => {return{ type: 'link', array: false, required: false, name: id }} %} | _ %NAMESPACE __ NAMESPACE _ SEMICOLON {% ([,,,namespace]) => { return { type: 'namespace', namespace: namespace[0] } } %}
| _ %LINK _ %ARRAY __ IDENTIFIER {% ([,,,,,id]) => {return{ type: 'link', array: true, required: false, name: id }} %} | _ DIRECTIVE _ SEMICOLON {% ([,directive]) => { return { type: 'directive', value: directive }} %}
| _ %REQUIRED __ %LINK __ IDENTIFIER {% ([,,,,,id]) => {return{ type: 'link', array: false, required: true, name: id }} %} | _ %IMPORT __ STRING __ %AS __ IDENTIFIER _ SEMICOLON {% ([,,,moduleName,,,,identifier]) => { return { type: 'import', name: identifier, importName: moduleName }} %}
| _ %REQUIRED __ %LINK _ %ARRAY __ IDENTIFIER {% ([,,,,,,,id]) => {return{ type: 'link', array: true, required: true, name: id }} %}
DIRECTIVE -> _ %SINGLETON {% () => 'singleton' %}
| _ %KEEPALIVE {% () => 'keepalive' %}
LINK_DECLARATION -> _ %LINK __ IDENTIFIER {% ([,,,id]) => { return { type: 'link', array: false, required: false, name: id }} %}
| _ %LINK _ %ARRAY __ IDENTIFIER {% ([,,,,,id]) => { return { type: 'link', array: true, required: false, name: id }} %}
| _ %REQUIRED __ %LINK __ IDENTIFIER {% ([,,,,,id]) => { return { type: 'link', array: false, required: true, name: id }} %}
| _ %REQUIRED __ %LINK _ %ARRAY __ IDENTIFIER {% ([,,,,,,,id]) => { return { type: 'link', array: true, required: true, name: id }} %}
NAMESPACE -> IDENTIFIER NAMESPACE -> IDENTIFIER
| IDENTIFIER %DOTOP NAMESPACE {% ([a,,b]) => { return [`${a}.${b}`] } %} | IDENTIFIER %DOTOP NAMESPACE {% ([a,,b]) => { return [`${a}.${b}`] } %}
EOL -> SEMICOLON
| "\n"
STRING -> %STRING {% ([d]) => d.value.substring(1, d.value.length - 1) %}
SEMICOLON -> %SEMICOLON:?
IDENTIFIER -> %IDENTIFIER {% ([id]) => id.value %} IDENTIFIER -> %IDENTIFIER {% ([id]) => id.value %}
JS_BLOCK -> %JS_BLOCK {% ([block]) => minify(block.value.substring(2, block.value.length - 2)) %} JS_BLOCK -> %JS_BLOCK {% ([block]) => minify(block.value.substring(2, block.value.length - 2)) %}
| %JS_BLOCK2 {% ([block]) => minify(block.value.substring(2, block.value.length - 2)) %}
_ -> null | %SPACE {% () => undefined %} _ -> null | %SPACE {% () => undefined %}
__ -> %SPACE {% () => undefined %} __ -> %SPACE {% () => undefined %}

View File

@ -1,5 +1,5 @@
{ {
"name": "lang", "name": "vogue",
"version": "1.0.0", "version": "1.0.0",
"main": "index.js", "main": "index.js",
"license": "MIT", "license": "MIT",
@ -9,13 +9,14 @@
}, },
"scripts": { "scripts": {
"c": "nearleyc", "c": "nearleyc",
"test": "vogue test" "test": "node run.js test"
}, },
"dependencies": { "dependencies": {
"lodash": "^4.17.21", "lodash": "^4.17.21",
"moo": "^0.5.1", "moo": "^0.5.1",
"nearley": "^2.20.1", "nearley": "^2.20.1",
"nedb": "^1.8.0", "nedb": "^1.8.0",
"terminal-kit": "^2.1.0",
"uglify-js": "^3.13.5" "uglify-js": "^3.13.5"
} }
} }

211
run.js
View File

@ -1,17 +1,18 @@
#!/usr/bin/env node #!/usr/bin/env node
import { resolve, parse } from 'path'; import { resolve, parse } from 'path';
import { readFileSync, readdirSync, readFile, fstat, mkdirSync } from 'fs'; import { readFileSync, readdirSync } from 'fs';
import nearley from 'nearley'; import nearley from 'nearley';
import compile from 'nearley/lib/compile.js'; import compile from 'nearley/lib/compile.js';
import generate from 'nearley/lib/generate.js'; import generate from 'nearley/lib/generate.js';
import nearleyGrammar from 'nearley/lib/nearley-language-bootstrapped.js'; import nearleyGrammar from 'nearley/lib/nearley-language-bootstrapped.js';
import moo from 'moo'; import moo from 'moo';
const grammarFile = 'grammar.ne'; const grammarFile = 'grammar.ne';
// import Serializable from './Serializable.js'; import _ from 'lodash';
const { get, set } = _;
import Module from './Module.js'; import Module from './Module.js';
import System from './System.js'; import System from './System.js';
// import Instance from './Instance.js'; const debug = true;
// globals inside grammar context // globals inside grammar context
import minify from './minify.js'; import minify from './minify.js';
@ -23,81 +24,87 @@ Object.defineProperty(Array.prototype, 'empty', {
}); });
function createParser() { function createParser() {
// Parse the grammar source into an AST // Parse the grammar source into an AST
const grammarParser = new nearley.Parser(nearleyGrammar); const grammarParser = new nearley.Parser(nearleyGrammar);
grammarParser.feed(readFileSync(grammarFile).toString()); grammarParser.feed(readFileSync(grammarFile).toString());
const grammarAst = grammarParser.results[0]; // TODO check for errors const grammarAst = grammarParser.results[0]; // TODO check for errors
// Compile the AST into a set of rules // Compile the AST into a set of rules
const grammarInfoObject = compile(grammarAst, {}); const grammarInfoObject = compile(grammarAst, {});
// Generate JavaScript code from the rules // Generate JavaScript code from the rules
const grammarJs = generate(grammarInfoObject, "grammar"); const grammarJs = generate(grammarInfoObject, "grammar");
const lexer = moo.compile({ const lexer = moo.compile({
LINK: 'link', LINK: 'link',
RESTORE: 'restore', RESTORE: 'restore',
NAMESPACE: 'namespace', NAMESPACE: 'namespace',
REQUIRED: 'required', REQUIRED: 'required',
ARRAY: '[]', SINGLETON: 'singleton',
OBJECT: '{}', KEEPALIVE: 'keepalive',
DOTOP: '.', IMPORT: 'import',
JS_BLOCK: /\[\[[^]*?\n\]\]$/, AS: 'as',
IDENTIFIER: /[a-zA-Z][a-zA-Z0-9]*/, STRING: /'(?:\\['\\]|[^\n'\\])*'/,
SPACE: {match: /\s+/, lineBreaks: true}, ARRAY: '[]',
SEMICOLON: ';' OBJECT: '{}',
}); DOTOP: '.',
JS_BLOCK: /\[\[[^]*?\n\]\]$/,
JS_BLOCK2: /{[^]*?\n}$/,
IDENTIFIER: /[a-zA-Z][a-zA-Z0-9]*/,
SPACE: { match: /\s+/, lineBreaks: true },
SEMICOLON: ';'
});
// lexer.__proto__.formatError = function(token, message) {
// if (token == null) {
// // An undefined token indicates EOF
// var text = this.buffer.slice(this.index)
// var token = {
// text: text,
// offset: this.index,
// lineBreaks: text.indexOf('\n') === -1 ? 0 : 1,
// line: this.line,
// col: this.col,
// }
// }
// var start = Math.max(0, token.offset - token.col + 1)
// var eol = token.lineBreaks ? token.text.indexOf('\n') : token.text.length
// var firstLine = this.buffer.substring(start, token.offset + eol)
// message += " at line " + token.line + " col " + token.col + ":\n\n"
// message += " " + firstLine + "\n"
// message += " " + Array(token.col).join(" ") + "^"
// return message
// }
// lexer.__proto__.formatError = function(token, message) { // Pretend this is a CommonJS environment to catch exports from the grammar.
// if (token == null) { const module = { exports: {} };
// // An undefined token indicates EOF eval(grammarJs);
// var text = this.buffer.slice(this.index)
// var token = {
// text: text,
// offset: this.index,
// lineBreaks: text.indexOf('\n') === -1 ? 0 : 1,
// line: this.line,
// col: this.col,
// }
// }
// var start = Math.max(0, token.offset - token.col + 1)
// var eol = token.lineBreaks ? token.text.indexOf('\n') : token.text.length
// var firstLine = this.buffer.substring(start, token.offset + eol)
// message += " at line " + token.line + " col " + token.col + ":\n\n"
// message += " " + firstLine + "\n"
// message += " " + Array(token.col).join(" ") + "^"
// return message
// }
// Pretend this is a CommonJS environment to catch exports from the grammar. const grammar = module.exports;
const module = { exports: {} }; return new nearley.Parser(nearley.Grammar.fromCompiled(grammar))
eval(grammarJs);
const grammar = module.exports;
return new nearley.Parser(nearley.Grammar.fromCompiled(grammar))
} }
import _ from 'lodash';
const {get, set} = _;
const systemLocation = resolve(process.argv[2]); const systemLocation = resolve(process.argv[2]);
const entry = process.argv[3]; const entry = process.argv[3];
const modules = {}; const modules = {};
readdirSync(systemLocation).map(v => resolve(systemLocation, v)).map(parseModule);
const sys = new System(modules);
function parseModule(location) { (async () => {
// TODO simplify this line gaddam
await Promise.all(readdirSync(systemLocation).map(v => resolve(systemLocation, v)).map(parseModule));
const sys = new System(modules);
})()
async function parseModule(location) {
const parser = createParser(); const parser = createParser();
const contents = readFileSync(location).toString(); const contents = readFileSync(location).toString();
const name = parse(location).name; const name = parse(location).name;
// parser.reportError = function(token) { // parser.reportError = function(token) {
// return JSON.stringify(token, null, 2); // return JSON.stringify(token, null, 2);
// var message = this.lexer.formatError(token, 'invalid syntax') + '\n'; // var message = this.lexer.formatError(token, 'invalid syntax') + '\n';
// message += 'Unexpected ' + (token.type ? token.type + ' token: ' : ''); // message += 'Unexpected ' + (token.type ? token.type + ' token: ' : '');
// message += // message +=
// JSON.stringify(token.value !== undefined ? token.value : token) + '\n'; // JSON.stringify(token.value !== undefined ? token.value : token) + '\n';
// return message; // return message;
// }; // };
try { try {
parser.feed(contents); parser.feed(contents);
} catch (e) { } catch (e) {
@ -110,37 +117,57 @@ function parseModule(location) {
module.name.last = name; module.name.last = name;
module.name.full = name; module.name.full = name;
for(const item of parsed) { try {
switch(item.type) {
case 'link': { for (const item of parsed) {
if(item.name in module.identifiers) switch (item.type) {
throw new Error('Identifier ' + item.name + ' already declared!'); case 'link': {
module.identifiers[item.name] = 'link'; if (item.name in module.identifiers)
module.links throw new Error('Identifier ' + item.name + ' already declared!');
[item.required ? 'required' : 'optional'] module.identifiers[item.name] = 'link';
[item.array ? 'arrays' : 'single'] module.links
.push(item.name); [item.required ? 'required' : 'optional']
break; [item.array ? 'arrays' : 'single']
.push(item.name);
break;
}
case 'namespace': {
module.name.space = item.namespace;
module.name.full = module.name.space + '.' + module.name.last;
break;
}
case 'restore': {
if (item.name in module.identifiers)
throw new Error('Identifier ' + item.name + ' already declared!');
module.identifiers['restore'] = 'function';
module.functions['restore'] = item.block;
break;
}
case 'function': {
if (item.name in module.identifiers)
throw new Error('Identifier ' + item.name + ' already declared!');
module.identifiers[item.name] = 'function';
module.functions[item.name] = item.block;
break;
}
case 'import': {
if (item.name in module.identifiers)
throw new Error('Identifier ' + item.name + ' already declared!');
const imported = await import(item.importName);
if('default' in imported) {
module.imports[item.name] = imported.default;
} else {
module.imports[item.name] = imported;
}
module.identifiers[item.name] = 'import';
break;
}
} }
case 'namespace': { }
module.name.space = item.namespace; } catch (e) {
module.name.full = module.name.space + '.' + module.name.last; console.error(e);
break; if (debug) {
} console.log(JSON.stringify(parsed, null, 2));
case 'restore': {
if(item.name in module.identifiers)
throw new Error('Identifier ' + item.name + ' already declared!');
module.identifiers['restore'] = 'function';
module.functions['restore'] = item.block;
break;
}
case 'function': {
if(item.name in module.identifiers)
throw new Error('Identifier ' + item.name + ' already declared!');
module.identifiers[item.name] = 'function';
module.functions[item.name] = item.block;
} //WE JUST ADDED THE FUNCION TO THE MODULE TEMPLATE.
// TODO ADD IT TO THE INSTANCE LEVEL, THEN CONTEXT, THEN LiNK PROXY.
} }
} }

View File

@ -3,6 +3,6 @@ namespace xyz.places.places;
required link world; required link world;
link[] roads; link[] roads;
ping [[ ping {
console.log('Ping!', new Date().getTime());
]] }

8
test/main.v 100644
View File

@ -0,0 +1,8 @@
namespace xyz.places;
singleton;
import 'terminal-kit' as terminalkit;
restore {
terminalkit.terminal.cyan('~Welcome to Vogue~\n');
}

View File

@ -4,7 +4,7 @@ link[] places;
link place; link place;
link character; link character;
restore [[ restore {
if(places.empty) { if(places.empty) {
for(let i = 0; i < 3; i ++) { for(let i = 0; i < 3; i ++) {
const place = create('xyz.places.places.forest', { const place = create('xyz.places.places.forest', {
@ -17,4 +17,4 @@ restore [[
for(const place of places) { for(const place of places) {
place.ping(); place.ping();
} }
]] }

308
yarn.lock
View File

@ -2,114 +2,238 @@
# yarn lockfile v1 # yarn lockfile v1
async@0.2.10: "@cronvel/get-pixels@^3.4.0":
version "0.2.10" "resolved" "https://registry.npmjs.org/@cronvel/get-pixels/-/get-pixels-3.4.0.tgz"
resolved "https://registry.yarnpkg.com/async/-/async-0.2.10.tgz#b6bbe0b0674b9d719708ca38de8c237cb526c3d1" "version" "3.4.0"
integrity sha1-trvgsGdLnXGXCMo43owjfLUmw9E=
binary-search-tree@0.2.5:
version "0.2.5"
resolved "https://registry.yarnpkg.com/binary-search-tree/-/binary-search-tree-0.2.5.tgz#7dbb3b210fdca082450dad2334c304af39bdc784"
integrity sha1-fbs7IQ/coIJFDa0jNMMErzm9x4Q=
dependencies: dependencies:
underscore "~1.4.4" "jpeg-js" "^0.4.1"
"ndarray" "^1.0.19"
"ndarray-pack" "^1.1.1"
"node-bitmap" "0.0.1"
"omggif" "^1.0.10"
"pngjs" "^5.0.0"
commander@^2.19.0: "async@0.2.10":
version "2.20.3" "resolved" "https://registry.npmjs.org/async/-/async-0.2.10.tgz"
resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" "version" "0.2.10"
integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==
discontinuous-range@1.0.0: "binary-search-tree@0.2.5":
version "1.0.0" "resolved" "https://registry.npmjs.org/binary-search-tree/-/binary-search-tree-0.2.5.tgz"
resolved "https://registry.yarnpkg.com/discontinuous-range/-/discontinuous-range-1.0.0.tgz#e38331f0844bba49b9a9cb71c771585aab1bc65a" "version" "0.2.5"
integrity sha1-44Mx8IRLukm5qctxx3FYWqsbxlo=
immediate@~3.0.5:
version "3.0.6"
resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.0.6.tgz#9db1dbd0faf8de6fbe0f5dd5e56bb606280de69b"
integrity sha1-nbHb0Pr43m++D13V5Wu2BigN5ps=
lie@3.1.1:
version "3.1.1"
resolved "https://registry.yarnpkg.com/lie/-/lie-3.1.1.tgz#9a436b2cc7746ca59de7a41fa469b3efb76bd87e"
integrity sha1-mkNrLMd0bKWd56QfpGmz77dr2H4=
dependencies: dependencies:
immediate "~3.0.5" "underscore" "~1.4.4"
localforage@^1.3.0: "chroma-js@^2.1.0":
version "1.9.0" "resolved" "https://registry.npmjs.org/chroma-js/-/chroma-js-2.1.1.tgz"
resolved "https://registry.yarnpkg.com/localforage/-/localforage-1.9.0.tgz#f3e4d32a8300b362b4634cc4e066d9d00d2f09d1" "version" "2.1.1"
integrity sha512-rR1oyNrKulpe+VM9cYmcFn6tsHuokyVHFaCM3+osEmxaHTbEk8oQu6eGDfS6DQLWi/N67XRmB8ECG37OES368g==
dependencies: dependencies:
lie "3.1.1" "cross-env" "^6.0.3"
lodash@^4.17.21: "commander@^2.19.0":
version "4.17.21" "resolved" "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz"
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" "version" "2.20.3"
integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==
minimist@^1.2.5: "cross-env@^6.0.3":
version "1.2.5" "resolved" "https://registry.npmjs.org/cross-env/-/cross-env-6.0.3.tgz"
resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" "version" "6.0.3"
integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==
mkdirp@~0.5.1:
version "0.5.5"
resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def"
integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==
dependencies: dependencies:
minimist "^1.2.5" "cross-spawn" "^7.0.0"
moo@^0.5.0, moo@^0.5.1: "cross-spawn@^7.0.0":
version "0.5.1" "resolved" "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz"
resolved "https://registry.yarnpkg.com/moo/-/moo-0.5.1.tgz#7aae7f384b9b09f620b6abf6f74ebbcd1b65dbc4" "version" "7.0.3"
integrity sha512-I1mnb5xn4fO80BH9BLcF0yLypy2UKl+Cb01Fu0hJRkJjlCRtxZMWkTdAtDd5ZqCOxtCkhmRwyI57vWT+1iZ67w==
nearley@^2.20.1:
version "2.20.1"
resolved "https://registry.yarnpkg.com/nearley/-/nearley-2.20.1.tgz#246cd33eff0d012faf197ff6774d7ac78acdd474"
integrity sha512-+Mc8UaAebFzgV+KpI5n7DasuuQCHA89dmwm7JXw3TV43ukfNQ9DnBH3Mdb2g/I4Fdxc26pwimBWvjIw0UAILSQ==
dependencies: dependencies:
commander "^2.19.0" "path-key" "^3.1.0"
moo "^0.5.0" "shebang-command" "^2.0.0"
railroad-diagrams "^1.0.0" "which" "^2.0.1"
randexp "0.4.6"
nedb@^1.8.0: "cwise-compiler@^1.1.2":
version "1.8.0" "resolved" "https://registry.npmjs.org/cwise-compiler/-/cwise-compiler-1.1.3.tgz"
resolved "https://registry.yarnpkg.com/nedb/-/nedb-1.8.0.tgz#0e3502cd82c004d5355a43c9e55577bd7bd91d88" "version" "1.1.3"
integrity sha1-DjUCzYLABNU1WkPJ5VV3vXvZHYg=
dependencies: dependencies:
async "0.2.10" "uniq" "^1.0.0"
binary-search-tree "0.2.5"
localforage "^1.3.0"
mkdirp "~0.5.1"
underscore "~1.4.4"
railroad-diagrams@^1.0.0: "discontinuous-range@1.0.0":
version "1.0.0" "resolved" "https://registry.npmjs.org/discontinuous-range/-/discontinuous-range-1.0.0.tgz"
resolved "https://registry.yarnpkg.com/railroad-diagrams/-/railroad-diagrams-1.0.0.tgz#eb7e6267548ddedfb899c1b90e57374559cddb7e" "version" "1.0.0"
integrity sha1-635iZ1SN3t+4mcG5Dlc3RVnN234=
randexp@0.4.6: "immediate@~3.0.5":
version "0.4.6" "resolved" "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz"
resolved "https://registry.yarnpkg.com/randexp/-/randexp-0.4.6.tgz#e986ad5e5e31dae13ddd6f7b3019aa7c87f60ca3" "version" "3.0.6"
integrity sha512-80WNmd9DA0tmZrw9qQa62GPPWfuXJknrmVmLcxvq4uZBdYqb1wYoKTmnlGUchvVWe0XiLupYkBoXVOxz3C8DYQ==
"iota-array@^1.0.0":
"resolved" "https://registry.npmjs.org/iota-array/-/iota-array-1.0.0.tgz"
"version" "1.0.0"
"is-buffer@^1.0.2":
"resolved" "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz"
"version" "1.1.6"
"isexe@^2.0.0":
"resolved" "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz"
"version" "2.0.0"
"jpeg-js@^0.4.1":
"resolved" "https://registry.npmjs.org/jpeg-js/-/jpeg-js-0.4.3.tgz"
"version" "0.4.3"
"lazyness@^1.2.0":
"resolved" "https://registry.npmjs.org/lazyness/-/lazyness-1.2.0.tgz"
"version" "1.2.0"
"lie@3.1.1":
"resolved" "https://registry.npmjs.org/lie/-/lie-3.1.1.tgz"
"version" "3.1.1"
dependencies: dependencies:
discontinuous-range "1.0.0" "immediate" "~3.0.5"
ret "~0.1.10"
ret@~0.1.10: "localforage@^1.3.0":
version "0.1.15" "resolved" "https://registry.npmjs.org/localforage/-/localforage-1.9.0.tgz"
resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" "version" "1.9.0"
integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== dependencies:
"lie" "3.1.1"
uglify-js@^3.13.5: "lodash@^4.17.21":
version "3.13.5" "resolved" "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz"
resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.13.5.tgz#5d71d6dbba64cf441f32929b1efce7365bb4f113" "version" "4.17.21"
integrity sha512-xtB8yEqIkn7zmOyS2zUNBsYCBRhDkvlNxMMY2smuJ/qA8NCHeQvKCF3i9Z4k8FJH4+PJvZRtMrPynfZ75+CSZw==
underscore@~1.4.4: "minimist@^1.2.5":
version "1.4.4" "resolved" "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz"
resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.4.4.tgz#61a6a32010622afa07963bf325203cf12239d604" "version" "1.2.5"
integrity sha1-YaajIBBiKvoHljvzJSA88SI51gQ=
"mkdirp@~0.5.1":
"resolved" "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz"
"version" "0.5.5"
dependencies:
"minimist" "^1.2.5"
"moo@^0.5.0", "moo@^0.5.1":
"resolved" "https://registry.npmjs.org/moo/-/moo-0.5.1.tgz"
"version" "0.5.1"
"ndarray-pack@^1.1.1":
"resolved" "https://registry.npmjs.org/ndarray-pack/-/ndarray-pack-1.2.1.tgz"
"version" "1.2.1"
dependencies:
"cwise-compiler" "^1.1.2"
"ndarray" "^1.0.13"
"ndarray@^1.0.13", "ndarray@^1.0.19":
"resolved" "https://registry.npmjs.org/ndarray/-/ndarray-1.0.19.tgz"
"version" "1.0.19"
dependencies:
"iota-array" "^1.0.0"
"is-buffer" "^1.0.2"
"nearley@^2.20.1":
"resolved" "https://registry.npmjs.org/nearley/-/nearley-2.20.1.tgz"
"version" "2.20.1"
dependencies:
"commander" "^2.19.0"
"moo" "^0.5.0"
"railroad-diagrams" "^1.0.0"
"randexp" "0.4.6"
"nedb@^1.8.0":
"resolved" "https://registry.npmjs.org/nedb/-/nedb-1.8.0.tgz"
"version" "1.8.0"
dependencies:
"async" "0.2.10"
"binary-search-tree" "0.2.5"
"localforage" "^1.3.0"
"mkdirp" "~0.5.1"
"underscore" "~1.4.4"
"nextgen-events@^1.3.4":
"resolved" "https://registry.npmjs.org/nextgen-events/-/nextgen-events-1.3.4.tgz"
"version" "1.3.4"
"node-bitmap@0.0.1":
"resolved" "https://registry.npmjs.org/node-bitmap/-/node-bitmap-0.0.1.tgz"
"version" "0.0.1"
"omggif@^1.0.10":
"resolved" "https://registry.npmjs.org/omggif/-/omggif-1.0.10.tgz"
"version" "1.0.10"
"path-key@^3.1.0":
"resolved" "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz"
"version" "3.1.1"
"pngjs@^5.0.0":
"resolved" "https://registry.npmjs.org/pngjs/-/pngjs-5.0.0.tgz"
"version" "5.0.0"
"railroad-diagrams@^1.0.0":
"resolved" "https://registry.npmjs.org/railroad-diagrams/-/railroad-diagrams-1.0.0.tgz"
"version" "1.0.0"
"randexp@0.4.6":
"resolved" "https://registry.npmjs.org/randexp/-/randexp-0.4.6.tgz"
"version" "0.4.6"
dependencies:
"discontinuous-range" "1.0.0"
"ret" "~0.1.10"
"ret@~0.1.10":
"resolved" "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz"
"version" "0.1.15"
"setimmediate@^1.0.5":
"resolved" "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz"
"version" "1.0.5"
"seventh@^0.7.40":
"resolved" "https://registry.npmjs.org/seventh/-/seventh-0.7.40.tgz"
"version" "0.7.40"
dependencies:
"setimmediate" "^1.0.5"
"shebang-command@^2.0.0":
"resolved" "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz"
"version" "2.0.0"
dependencies:
"shebang-regex" "^3.0.0"
"shebang-regex@^3.0.0":
"resolved" "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz"
"version" "3.0.0"
"string-kit@^0.12.0":
"resolved" "https://registry.npmjs.org/string-kit/-/string-kit-0.12.5.tgz"
"version" "0.12.5"
"terminal-kit@^2.1.0":
"resolved" "https://registry.npmjs.org/terminal-kit/-/terminal-kit-2.1.0.tgz"
"version" "2.1.0"
dependencies:
"@cronvel/get-pixels" "^3.4.0"
"chroma-js" "^2.1.0"
"lazyness" "^1.2.0"
"ndarray" "^1.0.19"
"nextgen-events" "^1.3.4"
"seventh" "^0.7.40"
"string-kit" "^0.12.0"
"tree-kit" "^0.7.0"
"tree-kit@^0.7.0":
"resolved" "https://registry.npmjs.org/tree-kit/-/tree-kit-0.7.0.tgz"
"version" "0.7.0"
"uglify-js@^3.13.5":
"resolved" "https://registry.npmjs.org/uglify-js/-/uglify-js-3.13.5.tgz"
"version" "3.13.5"
"underscore@~1.4.4":
"resolved" "https://registry.npmjs.org/underscore/-/underscore-1.4.4.tgz"
"version" "1.4.4"
"uniq@^1.0.0":
"resolved" "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz"
"version" "1.0.1"
"which@^2.0.1":
"resolved" "https://registry.npmjs.org/which/-/which-2.0.2.tgz"
"version" "2.0.2"
dependencies:
"isexe" "^2.0.0"