imports working?!
parent
bac6e4cfb8
commit
2a0ffec1f6
|
|
@ -0,0 +1,6 @@
|
|||
[*]
|
||||
indent_style = tab
|
||||
indent_size = 2
|
||||
|
||||
[*.ne]
|
||||
indent_style = spaces
|
||||
23
Instance.js
23
Instance.js
|
|
@ -6,16 +6,20 @@ export default class Instance extends Serializable {
|
|||
module = null;
|
||||
links = {}
|
||||
system = null;
|
||||
context = null;
|
||||
|
||||
// reconstruct context when we need it...
|
||||
get context() {
|
||||
createContext() {
|
||||
const ctx = {};
|
||||
for(const name in this.links) {
|
||||
ctx[name] = this.links[name];
|
||||
}
|
||||
for(const name in this.module.imports) {
|
||||
ctx[name] = this.module.imports[name];
|
||||
}
|
||||
// ctx.Instance = Instance;
|
||||
ctx.create = this.system.newInstance.bind(this.system);
|
||||
return ctx;
|
||||
this.context = ctx;
|
||||
};
|
||||
|
||||
constructor(module, location, parameters, system) {
|
||||
|
|
@ -24,12 +28,27 @@ export default class Instance extends Serializable {
|
|||
this.location = location;
|
||||
this.system = system;
|
||||
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) {
|
||||
const content = this.module.functions[name];
|
||||
evalInContext(content, this.context);
|
||||
}
|
||||
|
||||
get link () {
|
||||
return this._link;
|
||||
}
|
||||
}
|
||||
|
||||
function evalInContext(js, context) {
|
||||
|
|
|
|||
|
|
@ -18,5 +18,6 @@ export default class Module {
|
|||
space: '',
|
||||
last: '',
|
||||
full: ''
|
||||
}
|
||||
};
|
||||
imports = {}
|
||||
}
|
||||
12
System.js
12
System.js
|
|
@ -14,7 +14,7 @@ export default class System extends Serializable {
|
|||
try {
|
||||
mkdirSync(location);
|
||||
} catch {}
|
||||
this.newInstance('xyz.places.world');
|
||||
this.newInstance('xyz.places.main');
|
||||
}
|
||||
|
||||
getModule(name) {
|
||||
|
|
@ -25,17 +25,9 @@ export default class System extends Serializable {
|
|||
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 = {}) {
|
||||
const instance = this.createInstance(name, args);
|
||||
const link = this.linkInstance(instance);
|
||||
const link = instance.link;
|
||||
instance.invokeInternal('restore');
|
||||
return link;
|
||||
}
|
||||
|
|
|
|||
32
grammar.ne
32
grammar.ne
|
|
@ -1,17 +1,31 @@
|
|||
@lexer lexer
|
||||
|
||||
PROGRAM -> _ STATEMENT:+ _ {% ([,stuff,]) => { return stuff } %}
|
||||
STATEMENT -> _ LINK_DECLARATION _ %SEMICOLON:? {% ([,stuff]) => { return stuff } %}
|
||||
| _ %RESTORE _ JS_BLOCK _ %SEMICOLON:? {% ([,,,block]) => { return { type: 'restore', block: block } } %}
|
||||
| _ IDENTIFIER _ JS_BLOCK _ %SEMICOLON:? {% ([,name,,block]) => { return { type: 'function', name: name, block: block } } %}
|
||||
| _ %NAMESPACE __ NAMESPACE _ %SEMICOLON:? {% ([,,,namespace]) => { return { type: 'namespace', namespace: namespace[0] } } %}
|
||||
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 }} %}
|
||||
|
||||
STATEMENT -> _ LINK_DECLARATION _ SEMICOLON {% ([,stuff]) => { return stuff } %}
|
||||
| _ %RESTORE _ JS_BLOCK _ SEMICOLON {% ([,,,block]) => { return { type: 'restore', block: block } } %}
|
||||
| _ IDENTIFIER _ JS_BLOCK _ SEMICOLON {% ([,name,,block]) => { return { type: 'function', name: name, block: block } } %}
|
||||
| _ %NAMESPACE __ NAMESPACE _ SEMICOLON {% ([,,,namespace]) => { return { type: 'namespace', namespace: namespace[0] } } %}
|
||||
| _ DIRECTIVE _ SEMICOLON {% ([,directive]) => { return { type: 'directive', value: directive }} %}
|
||||
| _ %IMPORT __ STRING __ %AS __ IDENTIFIER _ SEMICOLON {% ([,,,moduleName,,,,identifier]) => { return { type: 'import', name: identifier, importName: moduleName }} %}
|
||||
|
||||
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
|
||||
| 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 %}
|
||||
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 %}
|
||||
__ -> %SPACE {% () => undefined %}
|
||||
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"name": "lang",
|
||||
"name": "vogue",
|
||||
"version": "1.0.0",
|
||||
"main": "index.js",
|
||||
"license": "MIT",
|
||||
|
|
@ -9,13 +9,14 @@
|
|||
},
|
||||
"scripts": {
|
||||
"c": "nearleyc",
|
||||
"test": "vogue test"
|
||||
"test": "node run.js test"
|
||||
},
|
||||
"dependencies": {
|
||||
"lodash": "^4.17.21",
|
||||
"moo": "^0.5.1",
|
||||
"nearley": "^2.20.1",
|
||||
"nedb": "^1.8.0",
|
||||
"terminal-kit": "^2.1.0",
|
||||
"uglify-js": "^3.13.5"
|
||||
}
|
||||
}
|
||||
|
|
|
|||
211
run.js
211
run.js
|
|
@ -1,17 +1,18 @@
|
|||
#!/usr/bin/env node
|
||||
|
||||
import { resolve, parse } from 'path';
|
||||
import { readFileSync, readdirSync, readFile, fstat, mkdirSync } from 'fs';
|
||||
import { readFileSync, readdirSync } from 'fs';
|
||||
import nearley from 'nearley';
|
||||
import compile from 'nearley/lib/compile.js';
|
||||
import generate from 'nearley/lib/generate.js';
|
||||
import nearleyGrammar from 'nearley/lib/nearley-language-bootstrapped.js';
|
||||
import moo from 'moo';
|
||||
const grammarFile = 'grammar.ne';
|
||||
// import Serializable from './Serializable.js';
|
||||
import _ from 'lodash';
|
||||
const { get, set } = _;
|
||||
import Module from './Module.js';
|
||||
import System from './System.js';
|
||||
// import Instance from './Instance.js';
|
||||
const debug = true;
|
||||
|
||||
// globals inside grammar context
|
||||
import minify from './minify.js';
|
||||
|
|
@ -23,81 +24,87 @@ Object.defineProperty(Array.prototype, 'empty', {
|
|||
});
|
||||
|
||||
function createParser() {
|
||||
// Parse the grammar source into an AST
|
||||
const grammarParser = new nearley.Parser(nearleyGrammar);
|
||||
grammarParser.feed(readFileSync(grammarFile).toString());
|
||||
const grammarAst = grammarParser.results[0]; // TODO check for errors
|
||||
// Parse the grammar source into an AST
|
||||
const grammarParser = new nearley.Parser(nearleyGrammar);
|
||||
grammarParser.feed(readFileSync(grammarFile).toString());
|
||||
const grammarAst = grammarParser.results[0]; // TODO check for errors
|
||||
|
||||
// Compile the AST into a set of rules
|
||||
const grammarInfoObject = compile(grammarAst, {});
|
||||
// Generate JavaScript code from the rules
|
||||
const grammarJs = generate(grammarInfoObject, "grammar");
|
||||
// Compile the AST into a set of rules
|
||||
const grammarInfoObject = compile(grammarAst, {});
|
||||
// Generate JavaScript code from the rules
|
||||
const grammarJs = generate(grammarInfoObject, "grammar");
|
||||
|
||||
const lexer = moo.compile({
|
||||
LINK: 'link',
|
||||
RESTORE: 'restore',
|
||||
NAMESPACE: 'namespace',
|
||||
REQUIRED: 'required',
|
||||
ARRAY: '[]',
|
||||
OBJECT: '{}',
|
||||
DOTOP: '.',
|
||||
JS_BLOCK: /\[\[[^]*?\n\]\]$/,
|
||||
IDENTIFIER: /[a-zA-Z][a-zA-Z0-9]*/,
|
||||
SPACE: {match: /\s+/, lineBreaks: true},
|
||||
SEMICOLON: ';'
|
||||
});
|
||||
const lexer = moo.compile({
|
||||
LINK: 'link',
|
||||
RESTORE: 'restore',
|
||||
NAMESPACE: 'namespace',
|
||||
REQUIRED: 'required',
|
||||
SINGLETON: 'singleton',
|
||||
KEEPALIVE: 'keepalive',
|
||||
IMPORT: 'import',
|
||||
AS: 'as',
|
||||
STRING: /'(?:\\['\\]|[^\n'\\])*'/,
|
||||
ARRAY: '[]',
|
||||
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) {
|
||||
// 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
|
||||
// }
|
||||
// Pretend this is a CommonJS environment to catch exports from the grammar.
|
||||
const module = { exports: {} };
|
||||
eval(grammarJs);
|
||||
|
||||
// Pretend this is a CommonJS environment to catch exports from the grammar.
|
||||
const module = { exports: {} };
|
||||
eval(grammarJs);
|
||||
|
||||
const grammar = module.exports;
|
||||
return new nearley.Parser(nearley.Grammar.fromCompiled(grammar))
|
||||
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 entry = process.argv[3];
|
||||
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 contents = readFileSync(location).toString();
|
||||
const name = parse(location).name;
|
||||
// parser.reportError = function(token) {
|
||||
// return JSON.stringify(token, null, 2);
|
||||
// var message = this.lexer.formatError(token, 'invalid syntax') + '\n';
|
||||
// message += 'Unexpected ' + (token.type ? token.type + ' token: ' : '');
|
||||
// message +=
|
||||
// JSON.stringify(token.value !== undefined ? token.value : token) + '\n';
|
||||
// return message;
|
||||
// };
|
||||
// var message = this.lexer.formatError(token, 'invalid syntax') + '\n';
|
||||
// message += 'Unexpected ' + (token.type ? token.type + ' token: ' : '');
|
||||
// message +=
|
||||
// JSON.stringify(token.value !== undefined ? token.value : token) + '\n';
|
||||
// return message;
|
||||
// };
|
||||
try {
|
||||
parser.feed(contents);
|
||||
} catch (e) {
|
||||
|
|
@ -110,37 +117,57 @@ function parseModule(location) {
|
|||
|
||||
module.name.last = name;
|
||||
module.name.full = name;
|
||||
for(const item of parsed) {
|
||||
switch(item.type) {
|
||||
case 'link': {
|
||||
if(item.name in module.identifiers)
|
||||
throw new Error('Identifier ' + item.name + ' already declared!');
|
||||
module.identifiers[item.name] = 'link';
|
||||
module.links
|
||||
[item.required ? 'required' : 'optional']
|
||||
[item.array ? 'arrays' : 'single']
|
||||
.push(item.name);
|
||||
break;
|
||||
try {
|
||||
|
||||
for (const item of parsed) {
|
||||
switch (item.type) {
|
||||
case 'link': {
|
||||
if (item.name in module.identifiers)
|
||||
throw new Error('Identifier ' + item.name + ' already declared!');
|
||||
module.identifiers[item.name] = 'link';
|
||||
module.links
|
||||
[item.required ? 'required' : 'optional']
|
||||
[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;
|
||||
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;
|
||||
} //WE JUST ADDED THE FUNCION TO THE MODULE TEMPLATE.
|
||||
// TODO ADD IT TO THE INSTANCE LEVEL, THEN CONTEXT, THEN LiNK PROXY.
|
||||
}
|
||||
} catch (e) {
|
||||
console.error(e);
|
||||
if (debug) {
|
||||
console.log(JSON.stringify(parsed, null, 2));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -3,6 +3,6 @@ namespace xyz.places.places;
|
|||
required link world;
|
||||
link[] roads;
|
||||
|
||||
ping [[
|
||||
|
||||
]]
|
||||
ping {
|
||||
console.log('Ping!', new Date().getTime());
|
||||
}
|
||||
|
|
@ -0,0 +1,8 @@
|
|||
namespace xyz.places;
|
||||
singleton;
|
||||
|
||||
import 'terminal-kit' as terminalkit;
|
||||
|
||||
restore {
|
||||
terminalkit.terminal.cyan('~Welcome to Vogue~\n');
|
||||
}
|
||||
|
|
@ -4,7 +4,7 @@ link[] places;
|
|||
link place;
|
||||
link character;
|
||||
|
||||
restore [[
|
||||
restore {
|
||||
if(places.empty) {
|
||||
for(let i = 0; i < 3; i ++) {
|
||||
const place = create('xyz.places.places.forest', {
|
||||
|
|
@ -17,4 +17,4 @@ restore [[
|
|||
for(const place of places) {
|
||||
place.ping();
|
||||
}
|
||||
]]
|
||||
}
|
||||
308
yarn.lock
308
yarn.lock
|
|
@ -2,114 +2,238 @@
|
|||
# yarn lockfile v1
|
||||
|
||||
|
||||
async@0.2.10:
|
||||
version "0.2.10"
|
||||
resolved "https://registry.yarnpkg.com/async/-/async-0.2.10.tgz#b6bbe0b0674b9d719708ca38de8c237cb526c3d1"
|
||||
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=
|
||||
"@cronvel/get-pixels@^3.4.0":
|
||||
"resolved" "https://registry.npmjs.org/@cronvel/get-pixels/-/get-pixels-3.4.0.tgz"
|
||||
"version" "3.4.0"
|
||||
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:
|
||||
version "2.20.3"
|
||||
resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33"
|
||||
integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==
|
||||
"async@0.2.10":
|
||||
"resolved" "https://registry.npmjs.org/async/-/async-0.2.10.tgz"
|
||||
"version" "0.2.10"
|
||||
|
||||
discontinuous-range@1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/discontinuous-range/-/discontinuous-range-1.0.0.tgz#e38331f0844bba49b9a9cb71c771585aab1bc65a"
|
||||
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=
|
||||
"binary-search-tree@0.2.5":
|
||||
"resolved" "https://registry.npmjs.org/binary-search-tree/-/binary-search-tree-0.2.5.tgz"
|
||||
"version" "0.2.5"
|
||||
dependencies:
|
||||
immediate "~3.0.5"
|
||||
"underscore" "~1.4.4"
|
||||
|
||||
localforage@^1.3.0:
|
||||
version "1.9.0"
|
||||
resolved "https://registry.yarnpkg.com/localforage/-/localforage-1.9.0.tgz#f3e4d32a8300b362b4634cc4e066d9d00d2f09d1"
|
||||
integrity sha512-rR1oyNrKulpe+VM9cYmcFn6tsHuokyVHFaCM3+osEmxaHTbEk8oQu6eGDfS6DQLWi/N67XRmB8ECG37OES368g==
|
||||
"chroma-js@^2.1.0":
|
||||
"resolved" "https://registry.npmjs.org/chroma-js/-/chroma-js-2.1.1.tgz"
|
||||
"version" "2.1.1"
|
||||
dependencies:
|
||||
lie "3.1.1"
|
||||
"cross-env" "^6.0.3"
|
||||
|
||||
lodash@^4.17.21:
|
||||
version "4.17.21"
|
||||
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c"
|
||||
integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==
|
||||
"commander@^2.19.0":
|
||||
"resolved" "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz"
|
||||
"version" "2.20.3"
|
||||
|
||||
minimist@^1.2.5:
|
||||
version "1.2.5"
|
||||
resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602"
|
||||
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==
|
||||
"cross-env@^6.0.3":
|
||||
"resolved" "https://registry.npmjs.org/cross-env/-/cross-env-6.0.3.tgz"
|
||||
"version" "6.0.3"
|
||||
dependencies:
|
||||
minimist "^1.2.5"
|
||||
"cross-spawn" "^7.0.0"
|
||||
|
||||
moo@^0.5.0, moo@^0.5.1:
|
||||
version "0.5.1"
|
||||
resolved "https://registry.yarnpkg.com/moo/-/moo-0.5.1.tgz#7aae7f384b9b09f620b6abf6f74ebbcd1b65dbc4"
|
||||
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==
|
||||
"cross-spawn@^7.0.0":
|
||||
"resolved" "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz"
|
||||
"version" "7.0.3"
|
||||
dependencies:
|
||||
commander "^2.19.0"
|
||||
moo "^0.5.0"
|
||||
railroad-diagrams "^1.0.0"
|
||||
randexp "0.4.6"
|
||||
"path-key" "^3.1.0"
|
||||
"shebang-command" "^2.0.0"
|
||||
"which" "^2.0.1"
|
||||
|
||||
nedb@^1.8.0:
|
||||
version "1.8.0"
|
||||
resolved "https://registry.yarnpkg.com/nedb/-/nedb-1.8.0.tgz#0e3502cd82c004d5355a43c9e55577bd7bd91d88"
|
||||
integrity sha1-DjUCzYLABNU1WkPJ5VV3vXvZHYg=
|
||||
"cwise-compiler@^1.1.2":
|
||||
"resolved" "https://registry.npmjs.org/cwise-compiler/-/cwise-compiler-1.1.3.tgz"
|
||||
"version" "1.1.3"
|
||||
dependencies:
|
||||
async "0.2.10"
|
||||
binary-search-tree "0.2.5"
|
||||
localforage "^1.3.0"
|
||||
mkdirp "~0.5.1"
|
||||
underscore "~1.4.4"
|
||||
"uniq" "^1.0.0"
|
||||
|
||||
railroad-diagrams@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/railroad-diagrams/-/railroad-diagrams-1.0.0.tgz#eb7e6267548ddedfb899c1b90e57374559cddb7e"
|
||||
integrity sha1-635iZ1SN3t+4mcG5Dlc3RVnN234=
|
||||
"discontinuous-range@1.0.0":
|
||||
"resolved" "https://registry.npmjs.org/discontinuous-range/-/discontinuous-range-1.0.0.tgz"
|
||||
"version" "1.0.0"
|
||||
|
||||
randexp@0.4.6:
|
||||
version "0.4.6"
|
||||
resolved "https://registry.yarnpkg.com/randexp/-/randexp-0.4.6.tgz#e986ad5e5e31dae13ddd6f7b3019aa7c87f60ca3"
|
||||
integrity sha512-80WNmd9DA0tmZrw9qQa62GPPWfuXJknrmVmLcxvq4uZBdYqb1wYoKTmnlGUchvVWe0XiLupYkBoXVOxz3C8DYQ==
|
||||
"immediate@~3.0.5":
|
||||
"resolved" "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz"
|
||||
"version" "3.0.6"
|
||||
|
||||
"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:
|
||||
discontinuous-range "1.0.0"
|
||||
ret "~0.1.10"
|
||||
"immediate" "~3.0.5"
|
||||
|
||||
ret@~0.1.10:
|
||||
version "0.1.15"
|
||||
resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc"
|
||||
integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==
|
||||
"localforage@^1.3.0":
|
||||
"resolved" "https://registry.npmjs.org/localforage/-/localforage-1.9.0.tgz"
|
||||
"version" "1.9.0"
|
||||
dependencies:
|
||||
"lie" "3.1.1"
|
||||
|
||||
uglify-js@^3.13.5:
|
||||
version "3.13.5"
|
||||
resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.13.5.tgz#5d71d6dbba64cf441f32929b1efce7365bb4f113"
|
||||
integrity sha512-xtB8yEqIkn7zmOyS2zUNBsYCBRhDkvlNxMMY2smuJ/qA8NCHeQvKCF3i9Z4k8FJH4+PJvZRtMrPynfZ75+CSZw==
|
||||
"lodash@^4.17.21":
|
||||
"resolved" "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz"
|
||||
"version" "4.17.21"
|
||||
|
||||
underscore@~1.4.4:
|
||||
version "1.4.4"
|
||||
resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.4.4.tgz#61a6a32010622afa07963bf325203cf12239d604"
|
||||
integrity sha1-YaajIBBiKvoHljvzJSA88SI51gQ=
|
||||
"minimist@^1.2.5":
|
||||
"resolved" "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz"
|
||||
"version" "1.2.5"
|
||||
|
||||
"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"
|
||||
|
|
|
|||
Reference in New Issue