diff --git a/BUGS.md b/BUGS.md index fe3e170..55c330f 100644 --- a/BUGS.md +++ b/BUGS.md @@ -1,3 +1,4 @@ ## Bugs * regular for loop (for i = 0; i < n; i++) doesn't work at all, error unexpected "{" -* print sizeof void (0) as Array: result is still array, not number \ No newline at end of file +* new operator works incorrectly + \ No newline at end of file diff --git a/bin/Math.bs b/bin/Math.bs deleted file mode 100644 index 2d08a79..0000000 --- a/bin/Math.bs +++ /dev/null @@ -1,2 +0,0 @@ -const sin = Math.sin.bind(Math), - cos = Math.cos.bind(Math) \ No newline at end of file diff --git a/bin/Math.js b/bin/Math.js deleted file mode 100644 index 1623b20..0000000 --- a/bin/Math.js +++ /dev/null @@ -1,426 +0,0 @@ -if (!globalThis) { globalThis = window || global || this || {}; } try { globalThis.require = require; } catch (err) { globalThis.require = () => undefined; } - globalThis.BS = { - Node (tagName, id, className, attributes, children) { - let el = document.createElement(tagName); - id && (el.id = id); - className && (el.className = className); - if (children) { - el.append(children); - } - if (typeof attributes == 'object') { - for(let i in attributes) { - el.setAttribute(i, attributes[i]); - } - } - return el; - }, - DOMtoJSON (node) { - node = node || this; - let obj = { - nodeType: node.nodeType - }; - if (node.tagName) { - obj.tagName = node.tagName.toLowerCase(); - } else - if (node.nodeName) { - obj.nodeName = node.nodeName; - } - if (node.nodeValue) { - obj.nodeValue = node.nodeValue; - } - let attrs = node.attributes; - let childNodes = node.childNodes; - let length; - let arr; - if (attrs) { - length = attrs.length; - arr = obj.attributes = new Array(length); - for (let i = 0; i < length; i++) { - const attr = attrs[i]; - arr[i] = [attr.nodeName, attr.nodeValue]; - } - } - if (childNodes) { - length = childNodes.length; - arr = obj.childNodes = new Array(length); - for (let i = 0; i < length; i++) { - arr[i] = this.DOMtoJSON(childNodes[i]); - } - } - return obj; - }, - valueToDOM (value) { - if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean' || value === null || value === void 0) { - return value + ''; - } - if (BS.types['HTML'](value)) { - return value; - } - return document.createTextNode(value); - }, - cloneNode (value) { - let clone = value.cloneNode(true); - return clone; - }, - through (value0, value1, line, col) { - if (typeof value0 != 'number' || typeof value1 != 'number') { - throw new TypeError(`Number is expected on the line ${line}, col ${col}.`); - } - let output = []; - let min = Math.min(value0, value1); - let max = Math.max(value0, value1); - for (let i = min; i <= max; i++) { - output.push(i); - } - if (value0 != min) - output = output.reverse() - return output; - }, - delete (value, index) { - Array.prototype.splice.call(value, index, 1); - return value; - }, - slice (value, start, end, step = 1, line, col) { - if (!Array.isArray(value) && typeof value != 'string') { - throw new TypeError(`Array or string was expected at line ${line}, col ${col}`); - } - if (typeof start != 'number') { - throw new TypeError(`Number was expected at line ${line}, col ${col}`) - } - if (end === null && step === null) { - return value.slice(start) - } - step = step|0; - if (step >= 0) step = 1; - else step = -1; - let result = value.slice(start, end); - if (step === -1) { - if (typeof value === 'string') - return Array.from(result).reverse().join(''); - return result.reverse(); - } - return result; - }, - ast: (function () { - let r = globalThis.require('./index.js'); - if (r) return r; - return function () {console.warn('Ast is not supported yet in browsers.')} - })(), - parse: (function () { - let r = globalThis.require('./ast_to_js.js'); - if (r) return r; - return function () {console.warn('@eval is not supported yet in browsers.')} - })(), - fs: (function () { - let r = globalThis.require('fs'); - if (r) return r; - return function () {console.warn('@import is not supported yet in browsers.')}; - })(), - types: { - Array (value) { - return Array.isArray(value); - }, - Null (value) { - return value === null; - }, - Undefined (value) { - return value === void 0; - }, - Int (value) { - return parseInt(value) === value && !Number.isNaN(value); - }, - Float (value) { - return typeof value === 'number' && !Number.isNaN(value); - }, - Number (value) { - return typeof value === 'number' && !Number.isNaN(value); - }, - NaN (value) { - return Number.isNaN(value); - }, - String (value) { - return typeof value === 'string'; - }, - Function (value) { - return typeof value === 'function'; - }, - Symbol (value) { - return typeof value === 'symbol'; - }, - Boolean (value) { - return typeof value === 'boolean'; - }, - HTML (value) { - return value instanceof Element; - }, - Object (value) { - return typeof value === 'object' && value !== null; - }, - }, - convert (value, type) { - let t = this.getType(value); - if (t) t = t.toLowerCase(); - let tmp = null; - if (typeof type !== 'object' && t == type.toLowerCase()) return value; - let gt = function (value, type) { - switch (type) { - case 'Number': - case 'Float': - tmp = parseFloat(value); - if (isNaN(tmp)) return 0; - return tmp; - case 'Int': - return value|0; - case 'String': - if (t == 'html') return JSON.stringify(this.DOMtoJSON(value)); - if (t == 'array') return value.join(''); - if (t == 'object') return JSON.stringify(value); - if (t == 'boolean') return !!value; - if (t == 'null') return 'null'; - if (t == 'undefined') return 'undefined'; - else return value.toString(); - case 'Array': - if (t == 'html') return Object.values(this.DOMtoJSON(value)); - if (t == 'object') return Object.values(value); - if (t == 'string') { - try { - let z = JSON.parse(t); - let v = this.getType(z) == 'array'; - if (v) return z; - throw 'err'; - } catch (err) {} - return value.split(''); - } - if (t == 'number' || t == 'int' || t == 'float') { - return (''+value).split(''); - } - else return [value]; - case 'JSON': - if (t == 'html') return this.DOMtoJSON(value); - if (t == 'object' || t == 'string' || t == 'array' || t == 'null' || t == 'number' ) - return value; - throw new TypeError(`Cannot convert ${t} to ${type}`); - case 'Object': - return Object(value); - case 'Boolean': - return Boolean(value); - case 'List': - if (t == 'object' || t == 'array' || t == 'html') { - let ul = document.createElement('ul'); - for (let i in value) { - let li = document.createElement('li'); - if (t == 'object') { - let span = document.createElement('span'); - span.className = 'convert_key'; - span.innerText = i; - li.append(span); - li.appendChild(document.createTextNode(': ')); - } - let span = document.createElement('span'); - span.className = 'convert_value'; - if (this.getType(value[i]) == 'string') { - span.className += ' string'; - span.innerText = `"${value[i]}"`; - } else if (this.getType(value[i]) == 'number') { - span.className += ' number'; - span.innerText = `${value[i]}`; - } else if (this.getType(value[i]) == 'array') { - span.className += ' array'; - span.innerText = JSON.stringify(value[i], null, 2); - } - else span.innerText = `${value[i]}`; - li.append(span); - ul.append(li); - } - return ul; - } - return document.createElement('ul'); - }; - }; - if (typeof type != 'string') { - let r = value; - console.log(type.length); - for (let i = 0; i < type.length; i++) { - r = gt(r, type[i]); - console.log({r, type: type[i]}); - if (i != length -1) { - if (r.map) { - r = r.map(j => { - console.log({each: this.convert(j, type[i+1]), type: type[i+1]}); - return this.convert(j, type[i+1]); - }); - } - } - console.log(r); - } - }; - return gt(value, type); - }, - getType (value) { - for (let i in this.types) { - try { - if (this.types[i](value)) return i; - } catch (err) {continue} - } - }, - sizeof(object) { - if (object instanceof Set || object instanceof Map) - return object.size; - if (object instanceof Array || object instanceof String) - return object.length; - if (object instanceof Object) - return Object.keys(object).length; - if (object === void 0 || object === null) { - return 0 - } - return Object.keys(object).length; - }, - deepFreeze (object) { - const propNames = Object.getOwnPropertyNames(object); - for (const name of propNames) { - const value = object[name]; - - if (value && typeof value === "object") { - BS.deepFreeze(value); - } - } - return Object.freeze(object); - }, - last(number) { - if (number > 0) return number - 1 - return 0 - }, - storage: [], -}; -const BS = globalThis.BS; -try { - Element; -} catch { - globalThis.Element = {prototype: {}}; - Element = globalThis.Element; -} -Element.prototype._append = Element.prototype.append; -Element.prototype.append = function (children) { - if (Array.isArray(children)) { - for (let i = 0, l = children.length; i < l; i++) { - this._append(children[i]); - } - } else { - this._append(children); - } - return this; -}; -Element.prototype.json = function () { - return globalThis.BS.DOMtoJSON(this); -}; -Element.prototype.text = function (content) { - if (content === void 0) { - return this.textContent; - } - this.textContent = content; - return this; -}; -Element.prototype.listen = function (event, callback) { - this.addEventListener(event, callback); - return this; -}; -Element.prototype.css = function (obj) { - for (let i in obj) { - this.style[i] = obj[i]; - } - return this; -}; -Element.prototype.events = function (obj) { - for (let i in obj) { - this.addEventListener(i, obj[i]); - } - return this; -}; -function list (amount, callback) { - let array = []; - for (let i = 0; i < amount; i++) { - if (typeof callback === 'function') { - console.log(i); - array.push(callback(i)); - } else { - array.push(callback); - } - } - return array; -} -function range(start, stop, include = false){ - if (stop === undefined) { - stop = start; - start = 0; - } - if (include) { - if (start > stop) { - stop--; - } else { - stop++ - } - } - let i = start; - return { - [Symbol.iterator]:() => { - return { - next () { - while(i !== stop){ - let temp = i; - if (start > stop) i--; - else i++; - return { - value: temp, - done: false - } - } - return {done: true} - } - } - } - } -} -const PI = 3.141592653589793, - E = 2.718281828459045, - log = (...args) => console.log(...args), - sqrt = Math.sqrt.bind(Math), - Time = { - get now () { - return Date.now() - }, - get ms () { - return new Date().getMilliseconds() - }, - get seconds () { - return new Date().getSeconds() - }, - get minutes () { - return new Date().getMinutes() - }, - get hours () { - return new Date().getHours() - }, - get day () { - return new Date().getDay() - }, - get month () { - return new Date().getMonth() - }, - get year () { - return new Date().getFullYear() - }, - }, - sizeof = function sizeof (object) { - if (object === void 0 || object === null) { - throw new TypeError('Cannot convert undefined or null to object'); - } - if (object instanceof Set || object instanceof Map) - return object.size; - return Object.keys(object).length; - }; - - -// your code below this line - -const sin = BS.deepFreeze(Math.sin.bind(Math)), - cos = BS.deepFreeze(Math.cos.bind(Math)); \ No newline at end of file diff --git a/bin/Random.bs b/bin/Random.bs deleted file mode 100644 index 585488d..0000000 --- a/bin/Random.bs +++ /dev/null @@ -1,6 +0,0 @@ -random = function (Int? min = 0, Int? max = 1) { - return Math.floor(Math.random() * (max - min) + min) -} -random.string = function (length) { - return '' // FIX -} \ No newline at end of file diff --git a/bin/Random.js b/bin/Random.js deleted file mode 100644 index ed9d7ef..0000000 --- a/bin/Random.js +++ /dev/null @@ -1,435 +0,0 @@ -if (!globalThis) { globalThis = window || global || this || {}; } try { globalThis.require = require; } catch (err) { globalThis.require = () => undefined; } - globalThis.BS = { - Node (tagName, id, className, attributes, children) { - let el = document.createElement(tagName); - id && (el.id = id); - className && (el.className = className); - if (children) { - el.append(children); - } - if (typeof attributes == 'object') { - for(let i in attributes) { - el.setAttribute(i, attributes[i]); - } - } - return el; - }, - DOMtoJSON (node) { - node = node || this; - let obj = { - nodeType: node.nodeType - }; - if (node.tagName) { - obj.tagName = node.tagName.toLowerCase(); - } else - if (node.nodeName) { - obj.nodeName = node.nodeName; - } - if (node.nodeValue) { - obj.nodeValue = node.nodeValue; - } - let attrs = node.attributes; - let childNodes = node.childNodes; - let length; - let arr; - if (attrs) { - length = attrs.length; - arr = obj.attributes = new Array(length); - for (let i = 0; i < length; i++) { - const attr = attrs[i]; - arr[i] = [attr.nodeName, attr.nodeValue]; - } - } - if (childNodes) { - length = childNodes.length; - arr = obj.childNodes = new Array(length); - for (let i = 0; i < length; i++) { - arr[i] = this.DOMtoJSON(childNodes[i]); - } - } - return obj; - }, - valueToDOM (value) { - if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean' || value === null || value === void 0) { - return value + ''; - } - if (BS.types['HTML'](value)) { - return value; - } - return document.createTextNode(value); - }, - cloneNode (value) { - let clone = value.cloneNode(true); - return clone; - }, - through (value0, value1, line, col) { - if (typeof value0 != 'number' || typeof value1 != 'number') { - throw new TypeError(`Number is expected on the line ${line}, col ${col}.`); - } - let output = []; - let min = Math.min(value0, value1); - let max = Math.max(value0, value1); - for (let i = min; i <= max; i++) { - output.push(i); - } - if (value0 != min) - output = output.reverse() - return output; - }, - delete (value, index) { - Array.prototype.splice.call(value, index, 1); - return value; - }, - slice (value, start, end, step = 1, line, col) { - if (!Array.isArray(value) && typeof value != 'string') { - throw new TypeError(`Array or string was expected at line ${line}, col ${col}`); - } - if (typeof start != 'number') { - throw new TypeError(`Number was expected at line ${line}, col ${col}`) - } - if (end === null && step === null) { - return value.slice(start) - } - step = step|0; - if (step >= 0) step = 1; - else step = -1; - let result = value.slice(start, end); - if (step === -1) { - if (typeof value === 'string') - return Array.from(result).reverse().join(''); - return result.reverse(); - } - return result; - }, - ast: (function () { - let r = globalThis.require('./index.js'); - if (r) return r; - return function () {console.warn('Ast is not supported yet in browsers.')} - })(), - parse: (function () { - let r = globalThis.require('./ast_to_js.js'); - if (r) return r; - return function () {console.warn('@eval is not supported yet in browsers.')} - })(), - fs: (function () { - let r = globalThis.require('fs'); - if (r) return r; - return function () {console.warn('@import is not supported yet in browsers.')}; - })(), - types: { - Array (value) { - return Array.isArray(value); - }, - Null (value) { - return value === null; - }, - Undefined (value) { - return value === void 0; - }, - Int (value) { - return parseInt(value) === value && !Number.isNaN(value); - }, - Float (value) { - return typeof value === 'number' && !Number.isNaN(value); - }, - Number (value) { - return typeof value === 'number' && !Number.isNaN(value); - }, - NaN (value) { - return Number.isNaN(value); - }, - String (value) { - return typeof value === 'string'; - }, - Function (value) { - return typeof value === 'function'; - }, - Symbol (value) { - return typeof value === 'symbol'; - }, - Boolean (value) { - return typeof value === 'boolean'; - }, - HTML (value) { - return value instanceof Element; - }, - Object (value) { - return typeof value === 'object' && value !== null; - }, - }, - convert (value, type) { - let t = this.getType(value); - if (t) t = t.toLowerCase(); - let tmp = null; - if (typeof type !== 'object' && t == type.toLowerCase()) return value; - let gt = function (value, type) { - switch (type) { - case 'Number': - case 'Float': - tmp = parseFloat(value); - if (isNaN(tmp)) return 0; - return tmp; - case 'Int': - return value|0; - case 'String': - if (t == 'html') return JSON.stringify(this.DOMtoJSON(value)); - if (t == 'array') return value.join(''); - if (t == 'object') return JSON.stringify(value); - if (t == 'boolean') return !!value; - if (t == 'null') return 'null'; - if (t == 'undefined') return 'undefined'; - else return value.toString(); - case 'Array': - if (t == 'html') return Object.values(this.DOMtoJSON(value)); - if (t == 'object') return Object.values(value); - if (t == 'string') { - try { - let z = JSON.parse(t); - let v = this.getType(z) == 'array'; - if (v) return z; - throw 'err'; - } catch (err) {} - return value.split(''); - } - if (t == 'number' || t == 'int' || t == 'float') { - return (''+value).split(''); - } - else return [value]; - case 'JSON': - if (t == 'html') return this.DOMtoJSON(value); - if (t == 'object' || t == 'string' || t == 'array' || t == 'null' || t == 'number' ) - return value; - throw new TypeError(`Cannot convert ${t} to ${type}`); - case 'Object': - return Object(value); - case 'Boolean': - return Boolean(value); - case 'List': - if (t == 'object' || t == 'array' || t == 'html') { - let ul = document.createElement('ul'); - for (let i in value) { - let li = document.createElement('li'); - if (t == 'object') { - let span = document.createElement('span'); - span.className = 'convert_key'; - span.innerText = i; - li.append(span); - li.appendChild(document.createTextNode(': ')); - } - let span = document.createElement('span'); - span.className = 'convert_value'; - if (this.getType(value[i]) == 'string') { - span.className += ' string'; - span.innerText = `"${value[i]}"`; - } else if (this.getType(value[i]) == 'number') { - span.className += ' number'; - span.innerText = `${value[i]}`; - } else if (this.getType(value[i]) == 'array') { - span.className += ' array'; - span.innerText = JSON.stringify(value[i], null, 2); - } - else span.innerText = `${value[i]}`; - li.append(span); - ul.append(li); - } - return ul; - } - return document.createElement('ul'); - }; - }; - if (typeof type != 'string') { - let r = value; - console.log(type.length); - for (let i = 0; i < type.length; i++) { - r = gt(r, type[i]); - console.log({r, type: type[i]}); - if (i != length -1) { - if (r.map) { - r = r.map(j => { - console.log({each: this.convert(j, type[i+1]), type: type[i+1]}); - return this.convert(j, type[i+1]); - }); - } - } - console.log(r); - } - }; - return gt(value, type); - }, - getType (value) { - for (let i in this.types) { - try { - if (this.types[i](value)) return i; - } catch (err) {continue} - } - }, - sizeof(object) { - if (object instanceof Set || object instanceof Map) - return object.size; - if (object instanceof Array || object instanceof String) - return object.length; - if (object instanceof Object) - return Object.keys(object).length; - if (object === void 0 || object === null) { - return 0 - } - return Object.keys(object).length; - }, - deepFreeze (object) { - const propNames = Object.getOwnPropertyNames(object); - for (const name of propNames) { - const value = object[name]; - - if (value && typeof value === "object") { - BS.deepFreeze(value); - } - } - return Object.freeze(object); - }, - storage: [], -}; -const BS = globalThis.BS; -try { - Element; -} catch { - globalThis.Element = {prototype: {}}; - Element = globalThis.Element; -} -Element.prototype._append = Element.prototype.append; -Element.prototype.append = function (children) { - if (Array.isArray(children)) { - for (let i = 0, l = children.length; i < l; i++) { - this._append(children[i]); - } - } else { - this._append(children); - } - return this; -}; -Element.prototype.json = function () { - return globalThis.BS.DOMtoJSON(this); -}; -Element.prototype.text = function (content) { - if (content === void 0) { - return this.textContent; - } - this.textContent = content; - return this; -}; -Element.prototype.listen = function (event, callback) { - this.addEventListener(event, callback); - return this; -}; -Element.prototype.css = function (obj) { - for (let i in obj) { - this.style[i] = obj[i]; - } - return this; -}; -Element.prototype.events = function (obj) { - for (let i in obj) { - this.addEventListener(i, obj[i]); - } - return this; -}; -Array.prototype.last = function () { - return this[this.length - 1]; -}; -function list (amount, callback) { - let array = []; - for (let i = 0; i < amount; i++) { - if (typeof callback === 'function') { - console.log(i); - array.push(callback(i)); - } else { - array.push(callback); - } - } - return array; -} -function range(start, stop, include = false){ - if (stop === undefined) { - stop = start; - start = 0; - } - if (include) { - if (start > stop) { - stop--; - } else { - stop++ - } - } - let i = start; - return { - [Symbol.iterator]:() => { - return { - next () { - while(i !== stop){ - let temp = i; - if (start > stop) i--; - else i++; - return { - value: temp, - done: false - } - } - return {done: true} - } - } - } - } -} -const PI = 3.141592653589793, - E = 2.718281828459045, - log = (...args) => console.log(...args), - sqrt = Math.sqrt.bind(Math), - Time = { - get now () { - return Date.now() - }, - get ms () { - return new Date().getMilliseconds() - }, - get seconds () { - return new Date().getSeconds() - }, - get minutes () { - return new Date().getMinutes() - }, - get hours () { - return new Date().getHours() - }, - get day () { - return new Date().getDay() - }, - get month () { - return new Date().getMonth() - }, - get year () { - return new Date().getFullYear() - }, - }, - sizeof = function sizeof (object) { - if (object === void 0 || object === null) { - throw new TypeError('Cannot convert undefined or null to object'); - } - if (object instanceof Set || object instanceof Map) - return object.size; - return Object.keys(object).length; - }; - - -// your code below this line - -//(async function () { -random = function(min = 0, max = 1) { - var arguments = Array.from(arguments || []); - if (!BS.types["Int"](min) && min !== null) throw new TypeError("Argument \"min\" is not type of Int at line 1, col 19."); - if (!BS.types["Int"](max) && max !== null) throw new TypeError("Argument \"max\" is not type of Int at line 1, col 19."); - return Math.floor(Math.random() * (max - min) + min); -}; -random.string = function(length) { - var arguments = Array.from(arguments || []); - return ""; -}; - //})(); \ No newline at end of file diff --git a/bin/builtin/Date.js b/bin/builtin/Date.js new file mode 100644 index 0000000..68b6940 --- /dev/null +++ b/bin/builtin/Date.js @@ -0,0 +1,84 @@ +class date { + constructor() { + } + get now() { + return Date.now() + } + // !TODO: implement + //setDate(value) { + // if (typeof value != 'object' || value.constructor != Object) { + // throw TypeError('setDate() expects an object.') + // } + // for (let i in value) { + // if (typeof value[i] != 'number' || value[i] < 0 || isNaN(value[i])) { + // throw TypeError('setDate() expects an object with positive number values.') + // } + // } + // let _date = new Date(); + // if (value.hasOwnProperty('year')) { + // _date.setFullYear(value.year); + // } + // if (value.hasOwnProperty('month')) { + // _date.setMonth(value.month); + // } + // if (value.hasOwnProperty('day')) { + // _date.setDate(value.day); + // } + // if (value.hasOwnProperty('hours')) { + // _date.setHours(value.hours); + // } + // if (value.hasOwnProperty('minutes')) { + // _date.setMinutes(value.minutes); + // } + // if (value.hasOwnProperty('seconds')) { + // _date.setSeconds(value.seconds); + // } + // if (value.hasOwnProperty('milliseconds')) { + // _date.setMilliseconds(value.milliseconds); + // } + // _date.prototype = date + // return _date; + //} + get ms() { + return new Date().getMilliseconds() + } + get seconds() { + return new Date().getSeconds() + } + get msInSecond() { + return 1000 + } + get minutes() { + return new Date().getMinutes() + } + get msInMinute() { + return 60000 + } + get hours() { + return new Date().getHours() + } + get msInHour() { + return 3600000 + } + get day() { + return new Date().getDay() + } + get msInDay() { + return 86400000 + } + get month() { + return new Date().getMonth() + } + get msInMonth() { + return 2628000000 + } + get year() { + return new Date().getFullYear() + } + get msInYear() { + return 31536000000 + } +}; +scopes.append_to_global({ + Date: new date() +}); \ No newline at end of file diff --git a/bin/builtin/Math.js b/bin/builtin/Math.js new file mode 100644 index 0000000..bbdd1e8 --- /dev/null +++ b/bin/builtin/Math.js @@ -0,0 +1,58 @@ +function expect_number(value, name) { + if (typeof value !== 'number' || isNaN(value)) { + throw new TypeError(`Unexpected type of argument for "${name}" function. "number" was expected`); + } + return value; +} +scopes.append_to_global({ + sin: function (value) { + expect_number(value, 'sin'); + return Math.sin(value); + }, + cos: function (value) { + expect_number(value, 'cos'); + return Math.cos(value); + }, + tan: function (value) { + expect_number(value, 'tan'); + return Math.tan(value); + }, + atan: function (value) { + expect_number(value, 'atan'); + return Math.atan(value); + }, + atan2: function (value) { + expect_number(value, 'atan2'); + return Math.atan2(value); + }, + abs: function (value) { + expect_number(value, 'abs'); + return Math.abs(value); + }, + sqrt: function (value) { + expect_number(value, 'sqrt'); + return Math.sqrt(value); + }, + PI: Math.PI, + E: Math.E, + ceil: function ceil(value) { + expect_number(value, 'ceil'); + return Math.ceil(value) + }, + floor: function floor(value) { + expect_number(value, 'floor'); + return ~~(value) + }, + min: function min() { + for (let i = 0; i < arguments.length; i++) { + expect_number(arguments[i], 'min'); + } + return Math.min.apply(null, arguments); + }, + max: function max() { + for (let i = 0; i < arguments.length; i++) { + expect_number(arguments[i], 'max'); + } + return Math.max.apply(null, arguments); + }, +}); \ No newline at end of file diff --git a/bin/builtin/random.js b/bin/builtin/random.js new file mode 100644 index 0000000..6e56bf9 --- /dev/null +++ b/bin/builtin/random.js @@ -0,0 +1,71 @@ +function expect_array_or_string(value, name) { + if (!Array.isArray(value) && typeof value !== 'string') { + throw new TypeError(`Unexpected type of argument for "random.${name}" function. "array" or "string" was expected`); + } else if (value.length == 0) { + throw new Error(`Unexpected empty array or string for "random.${name}" function`); + } + return value; +} +const random = { + ALPHABET: 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789', + getRandom() { + return Math.random(); + }, + int(min, max) { + if (typeof min != 'number' || isNaN(min) || typeof max != 'number' || isNaN(max)) { + throw new TypeError(`Unexpected type of argument for "random.int" function. "number" was expected`); + } + return ~~(random.getRandom() * (max|0 - min|0) + min|0); + }, + intInclusive(min, max) { + if (typeof min != 'number' || isNaN(min) || typeof max != 'number' || isNaN(max)) { + throw new TypeError(`Unexpected type of argument for "random.intInclusive" function. "number" was expected`); + } + return random.int(min, max + 1); + }, + float(min, max) { + if (typeof min != 'number' || isNaN(min) || typeof max != 'number' || isNaN(max)) { + throw new TypeError(`Unexpected type of argument for "random.float" function. "number" was expected`); + } + return random.getRandom() * (max - min) + min; + }, + floatInclusive(min, max) { + if (typeof min != 'number' || isNaN(min) || typeof max != 'number' || isNaN(max)) { + throw new TypeError(`Unexpected type of argument for "random.floatInclusive" function. "number" was expected`); + } + return random.float(min, max + 1); + }, + boolean() { + return random.getRandom() > 0.5; + }, + element(array) { + expect_array_or_string(array, 'element'); + return array[random.int(0, array.length)]; + }, + string(length) { + if (typeof length !== 'number' || isNaN(length)) { + throw new TypeError(`Unexpected type of argument for "random.string" function. "number" was expected`); + } + let result = ''; + for (let i = 0; i < length; i++) { + result += random.element(random.ALPHABET); + } + return result; + }, + stringFromSample(sample, length) { + if (typeof sample != 'string' || sample.length == 0) { + throw new TypeError(`Unexpected type of argument for "random.stringFromSample" function. "string" was expected`); + } + if (typeof length !== 'number' || isNaN(length)) { + throw new TypeError(`Unexpected type of argument for "random.stringFromSample" function. "number" was expected`); + } + let result = ''; + for (let i = 0; i < length; i++) { + result += random.element(sample); + } + return result; + } +} +scopes.append_to_global({ + random: random +}); \ No newline at end of file diff --git a/bin/utils.js b/bin/utils.js index 4fd968a..a516897 100644 --- a/bin/utils.js +++ b/bin/utils.js @@ -1,22 +1,23 @@ +// ! This file writes the result of parsing to the final file const fs = require('fs'); const path_join = require('path').join; const BS = require('../lib/compiler'); const beautify = require('js-beautify').js; -// const beautify = require('@wmhilton/beautify') +//const minify = require('@node-minify/core'); +//const uglifyjs = require('@node-minify/uglify-js'); const path_applied = process.cwd(); -let writeFile = (path, fileName, content) => { +let writeFile = async (path, fileName, content, builtins = false) => { // TODO change the line below let ast = ''; try { ast = JSON.parse(JSON.stringify(content, null, 4)) - // console.clear(); // later on for php files if (ast && ast.type && ast.type === 'decorator' && ast.decorator === '@php') { console.log('[File System]: Writing to: '+fileName+'.php'); let ast_to_php = require('../lib/compiler/ast_to_php'); var contentPHP = ast_to_php(ast); - let built_in = fs.readFileSync(`${__dirname}/../lib/compiler/built_in.php`, { encoding: 'utf-8'}); + let built_in = fs.readFileSync(`${__dirname}/../lib/compiler/built_in/php/built_in.php`, { encoding: 'utf-8'}); // beautify.php(``, options).then(php => { fs.writeFileSync( `${path_join(path_applied, `/${fileName}.php`).replace(/\\/g, '/')}`, @@ -33,39 +34,50 @@ let writeFile = (path, fileName, content) => { var contentJS = ast_to_js(ast); //contentJS = contentJS.slice(0, contentJS.length-6) contentJS += '\n'; - let built_in = fs.readFileSync(`${__dirname}/../lib/compiler/built_in.js`, { encoding: 'utf-8'}); + let built_in = ''; + let prepend = ''; + if (builtins) { + built_in = fs.readFileSync(`${__dirname}/../lib/compiler/built_in/js/built_in.js`, { encoding: 'utf-8' }); + built_in += fs.readFileSync(`${__dirname}/../lib/compiler/built_in/js/scope.js`, { encoding: 'utf-8' }); + built_in = built_in + //.replace(/;\s+(if|else\s|for|while|do|return(\s)|try|catch)\s*/g, ';$1$2') + //.replace(/else\s+if/g, 'else if') + .replace(/[ \t]*\/\/[^\n]*/g, ' ') + .replace(/(\r\n?)+\s*/g, ' ') + .replace(/[ \t]+/g, ' ') + .replace(/\{\s+/g, '{') + .replace(/\s+\}/g, '}') + //.replace(/,\s+/g, ', ') + .replace(/(?:\s*)(==?=?|<=?|>=?|!==?|\|\||&&)(?:\s*)/g, '$1'); + built_in += '\n'; + prepend = `if (!globalThis) { + globalThis = window || global || this || {}; + } + try { + globalThis.require = require; + } catch (err) { + globalThis.require = () => undefined; + } + `.replace(/\s*\/\/.*/g, '\n').replace(/\s+/g, ' '); + //await (async function () { + // built_in = await minify({ + // content: built_in, + // compressor: uglifyjs + // }); + //})(); + } // fs.mkdirSync('./build/'); // let p = fileName.split('\\').slice(0, -1); // console.log(p.join('/')) // if (!fs.existsSync(p.join('/'))) { // fs.mkdirSync(`${path_applied}/${p.join('/')}`, {recursive: true}) // } - let prepend = `if (!globalThis) { - globalThis = window || global || this || {}; - } - try { - globalThis.require = require; - } catch (err) { - globalThis.require = () => undefined; - } - `.replace(/\s*\/\/.*/g, '\n').replace(/\s+/g, ' '); // console.log(path_join(path_applied, `/${fileName}.js`).replace(/\\/g, '/')) fs.writeFileSync( `${(`${fileName}.js`).replace(/\\/g, '/')}`, //`${path_join(path_applied, `/${fileName}.js`).replace(/\\/g, '/')}`, - `${prepend} - ${built_in - //.replace(/;\s+(if|else\s|for|while|do|return(\s)|try|catch)\s*/g, ';$1$2') - //.replace(/else\s+if/g, 'else if') - //.replace(/[ \t]*\/\/[^\n]*/g, ' ') - //.replace(/\n+/g, '\n') - //.replace(/[ \t]+/g, ' ') - //.replace(/\{\s+/g, '{') - //.replace(/\s+\}/g, '}') - //.replace(/,\s+/g, ', ') - //.replace(/(?:\s*)(==?=?|<=?|>=?|!==?|\|\||&&)(?:\s*)/g, '$1') - }` - +`\n\n// your code below this line\n\n` + `${prepend}${built_in}` + +`// your code below this line\n\n` +`${beautify(contentJS)}` // beautify(` // ${contentJS} @@ -90,19 +102,16 @@ module.exports = { if (!watch) { //path = path_join(dir, arg0) path = dir - if (!/\.bs$/i.test(path)) { - console.error(new Error('Provided file doesn\'t have .bs extension')); + if (!/\.b(s|m)$/i.test(path)) { + console.error(new Error('Provided file doesn\'t have .bs or .bm extension')); process.exit() } } else { path = path_join(dir, path) //console.log(path) } - let fileName = path.substr(0, path.length - ('.bs'.length)); - //console.dir(fs.promises) - //console.log(fs.existsSync(`${path}`)) - //console.log(`${path_applied}${watch ? '/' + path : ''}`) - //process.exit() + let fileName = path.substr(0, path.length - 3); // '.bs'.length + let fileExtension = path.slice(-3); try { let content = ''; if (!watch && fs.existsSync(`${path}`)) { @@ -110,16 +119,17 @@ module.exports = { } else { if (!fs.existsSync(`${path}`)) path = `${path_applied}${watch ? '\\' + path : ''}`; - //console.log(path) - //process.exit() content = BS(path); } if (content === void 0) { //console.log(']') return; } - let result = writeFile(path, fileName, content); - // result !== void 0 && console.log(`[Output]: ${result}`); + let builtins = false; + if (fileExtension === '.bs') { + builtins = true; + } + writeFile(path, fileName, content, builtins); console.log('Compiled in ' + (Date.now() - date) + 'ms'); } catch (err) { console.warn(new Error('Can\'t compile. Unexpected input.')); diff --git a/index.js b/index.js index 392c298..c82e837 100644 --- a/index.js +++ b/index.js @@ -7,7 +7,7 @@ let lastFile = ''; fs.watch(path_applied, { recursive: true }, function(event, path) { if (event != 'change') return; - if (!/\.bs$/i.test(path)) return; + if (!/\.b(s|m)$/i.test(path)) return; if (path == lastFile && lastChange + 10 > Date.now()) return; lastChange = Date.now(); lastFile = path; @@ -15,3 +15,6 @@ fs.watch(path_applied, { recursive: true }, function(event, path) { console.log(path, 'has', 'changed'); utils.parse(path) }); + +console.log('Watching', path_applied); +console.log('Press Ctrl+C to exit'); diff --git a/lib/compiler/ast_to_js.js b/lib/compiler/ast_to_js.js index 82e5286..273ae56 100644 --- a/lib/compiler/ast_to_js.js +++ b/lib/compiler/ast_to_js.js @@ -10,9 +10,19 @@ const libs = { //} get HTML() { return 'builtin/HTML.js' + }, + get Math() { + return 'builtin/Math.js' + }, + get random() { + return 'builtin/random.js' + }, + get Date() { + return 'builtin/Date.js' } } -module.exports = function parse (statements, tmp, isReturn) { +let lvl = 0; +module.exports = function parse (statements, tmp, isReturn, caller, prependStr = '') { // statememnts must be an array, if no, make it an array if (statements === void 0) { // something went wrong. This part should never be executed @@ -40,21 +50,40 @@ module.exports = function parse (statements, tmp, isReturn) { throw new Error(`Unknow library "${includes[i].value} at line ${includes[i].line}, column ${includes[i].col}"`); let file = libs[includes[i].value]; let content = fs.readFileSync(`${__dirname.replace(/\\/g, '/')}/../../bin/${file}`, 'utf8'); - if (/\.bs$/i.test(file)) { + if (/\.b(s|m)$/i.test(file)) { // console.log(`${parse(to_ast(content))}`); - result += `${parse(to_ast(content+'\n'))}`; + result += `(function () {${parse(to_ast(content+'\n'))}})();`; } else if (/\.js$/i.test(file)) { - result += content; + result += `(function () {${content}})();`; } else { throw new Error(`Unknow library "${includes[i].value} at line ${includes[i].line}, column ${includes[i].col}"`); } } // result += parse(includes); } - result += parse(value, 'isGloobal'); + result += `(function () { + ${parse(value, 'isGloobal')} + })();` + break; + case 'scope': + result += `const $${++lvl} = scopes.new(${lvl}, $${lvl - 1});` + result += prependStr || ''; + if (caller == 'function') + result += `$${lvl}.set("args", Array.from(arguments));` + result += `${parse(value)} + $clearScope($${lvl - 1}, scopes);`; + lvl--; + break; + case 'private': + result += `(function private () { + const scopes = new Scopes(); + const $${++lvl} = scopes.global(); + ${parse(value)} + })();`; + lvl--; break; case 'statement_value': - result += `${parse(value)};`; + result += `${parse(value, tmp, null, 'statement')};`; break; case 'condition_group': for (let i = 0; i < value.length; i++) { @@ -65,16 +94,34 @@ module.exports = function parse (statements, tmp, isReturn) { case 'ternary': result += `${parse(value)} ? ${parse(statement.left)} : ${statement.right === null ? null : parse(statement.right)}`; break; - case 'delete': - if (value.type === 'item_retraction') { - result += `BS.delete(${parse(value.from)}, ${parse(value.value)});`; - } else { - result += `delete ${parse(value)};` + case 'free': { + let r = []; + value = value.value + for (let i = 0; i < value.length; i++) { + if (value[i].value.type != 'identifier') { + throw new Error(`Identifier expected for "free" statement at line ${value[i].line}, column ${value[i].col}"`); + } + r.push(parse(value[i], 'realValue')) + } + if (r.length > 1 || r.length < 1) { + throw new Error(`"free" statement expected only one argument at line ${statement.line}, column ${statement.col}`); } + r.push(`$${lvl}`); + result += `$free(${r.join(', ')});`; break; - // case 'inherit': - // result += `${parse(value)};`; - // break; + } + case 'delete': { + let r = []; + value = value.value + for (let i = 0; i < value.length; i++) { + r.push(parse(value[i], 'realValue')) + } + if (r.length > 2 || r.length < 2) { + throw new Error(`"delete" statement expected exactly two arguments at line ${statement.line}, column ${statement.col}`); + } + result += `$delete(${r.join(', ')});`; + break; + } case 'debugger': result += 'debugger;'; break; @@ -83,7 +130,7 @@ module.exports = function parse (statements, tmp, isReturn) { break; case 'var_assign': if (statement.use_const) { - result += `const ${parse(value, 'const')};`; + result += `${parse(value, 'const')}`; break; } var prepend = statement.use_let ? 'let' : '' @@ -91,12 +138,13 @@ module.exports = function parse (statements, tmp, isReturn) { let pr = prepend; if (tmp == 'isGloobal') pr = 'var'; - result += `${pr} ${parse(value, prepend?.trim())};`; + result += `${parse(value, prepend || '', prepend && prepend.trim ? prepend.trim() : prepend)}`; + //result += `${pr} ${parse(value, prepend && prepend.trim ? prepend.trim() : prepend)};`; break; case 'var_assign_group': if (!!value.value) value = value.value; for (let i = 0; i < value.length; i++) { - r.push(`${parse(value[i], tmp)}`); + r.push(`${parse(value[i], tmp)};`); } if (statement.identifier) { if (tmp == 'const') { @@ -106,12 +154,12 @@ module.exports = function parse (statements, tmp, isReturn) { result += `${statement.identifier.value} = ${r.join()}` } else { - result += `${r.join()}`; + result += `${r.join('')}`; } break; case 'var_reassign': if (tmp == 'const') { - result += `${statement.identifier.value} = BS.deepFreeze(${parse([value])})`; + result += `$${lvl}.set("${statement.identifier.value}", BS.deepFreeze(${parse(value)}), true, true)`; break; } //if (tmp == 'Int') { @@ -119,23 +167,24 @@ module.exports = function parse (statements, tmp, isReturn) { // break; //} if (typeof statement.identifier.value != 'string') - result += `${parse(statement.identifier)} = ${parse([value])}`; + result += `${parse(statement.identifier)} = ${parse(value)}`; else if (value === void 0) { result += statement.identifier.value; break; } else //result += `${statement.identifier.value} = BS.setValue("${statement.identifier.value}", ${statement.identifier.value}, ${parse(value)})`; - result += `${statement.identifier.value} = ${parse(value)}`; + //result += `${statement.identifier.value} = ${parse(value)}`; + result += `$${lvl}.set("${statement.identifier.value}", ${parse(value)}${['Int', 'Array', 'Object', 'let', '\\'].includes(tmp) ? ', true' : ''})`; break; case 'array': - result += '['; + result += 'BS.Array(['; for (let i = 0; i < value.length; i++) { result += parse(value[i]); if (i !== value.length -1) result += ','; } - result += ']'; + result += '])'; break; case 'array_through': result += `BS.through(${parse(value[0])}, ${parse(value[1])}, ${statement.line}, ${statement.col})`; @@ -211,7 +260,7 @@ module.exports = function parse (statements, tmp, isReturn) { v = parse(value); } if (statement.method == 'log' || statement.method == 'error') { - result += `console.${statement.method}(${v});` + result += `console.${statement.method}(get_clear_value(${v}));` } else { //let v = parse(value); if (value.opening_tag) { @@ -226,6 +275,9 @@ module.exports = function parse (statements, tmp, isReturn) { case 'bigInt': result += value; break; + case 'number_negative': + result += `-${parse(value)}`; + break; case 'SAVE': result += `BS.storage.push(${parse(value)});`; break; @@ -242,11 +294,11 @@ module.exports = function parse (statements, tmp, isReturn) { break; case 'string': if (/\r\n/.test(value)) { - result += `\`${value.replace(/\'/g, '\x27').replace(/"/g, '\x22').replace(/\`/g, '\x60')}\`` + result += `\`${value.replace(/\'/g, '\x27').replace(/"/g, '\x22').replace(/\`/g, '\x60').replace(/\$/g, '\x24')}\`` break; } //result += JSON.stringify(value) - result += `"${value.replace(/\'/g, '\x27').replace(/"/g, '\x22').replace(/\`/g, '\x60')}"`//value.indexOf('$') > -1 ? `\`${value}\`` : `${JSON.stringify(value)}`; + result += `"${value.replace(/\'/g, '\x27').replace(/"/g, '\x22').replace(/\`/g, '\x60').replace(/\$/g, '\x24')}"`//value.indexOf('$') > -1 ? `\`${value}\`` : `${JSON.stringify(value)}`; break; case 'null': result += null; @@ -268,11 +320,25 @@ module.exports = function parse (statements, tmp, isReturn) { result += `${from}.${parse(value)}`; break; case 'dot_retraction_v2': - var from = parse(statement.from); + var from = parse(statement.from, tmp); + r = tmp == 'realValue' ? ', 1' : ''; if (value.type !== 'identifier') { - result += `${from}.${parse(value)}`; + if (tmp == 'delete') { + result += `$delete(${from}, "${parse(value)}");`; + break; + } + result += `$get(${from}, "${parse(value, tmp)}"${tmp})`; + break; } - result += `${from}.${value.value}`; + if (tmp == 'delete') { + if (statement.from.type != 'identifier') { + result += `$${lvl}.set(${from}, $delete(${from}, "${value.value}"));`; + break; + } + result += `$${lvl}.set("${statement.from.value}", $delete(${from}, "${value.value}"));`; + break; + } + result += `$get(${from}, "${value.value}"${r})`; break; // not used now ↓ case 'double_dot_retraction': @@ -307,6 +373,8 @@ module.exports = function parse (statements, tmp, isReturn) { result += `${statement.sign}${parse(value)}` break; case 'new': + result += `$new(${parse(value)})` + break; case 'await': case 'yield': result += `${statement.type} ${parse(value)}`; @@ -333,7 +401,6 @@ module.exports = function parse (statements, tmp, isReturn) { }`; break; case 'iife': - // statement.type = 'annonymous_function' result += `(${parse(value)})(${statement.call_arguments.value.map(i => parse(i)).join(',')})`; break; case 'annonymous_function': { @@ -342,17 +409,25 @@ module.exports = function parse (statements, tmp, isReturn) { res += `${statement.async ? 'async ' : ''}function ${statement.identifier ? statement.identifier.value : ''}`; if (statement.arguments) var t = parse(statement.arguments) - else var t = ['', '']; + else var t = ['', '', '', '']; let use_strict = false; - if (/use strict/.test(statement.value[0]?.value?.value?.value)) { - statement.value = statement.value.slice(1) - use_strict = true; - } + //if (/use strict/.test(statement.value[0]?.value?.value?.value)) { + // statement.value = statement.value.slice(1) + // use_strict = true; + //} res += `(${t.length ? t[0] : ''}) { - ${use_strict ? '"use strict"' : ''} - const args = Array.from(arguments || []);` - + `${t.length ? t[1] + '\n' : ''}${parse(statement.value, statement.text)} + ${parse(statement.value, statement.text, null, 'function', + `${use_strict ? '"use strict"' : ''}` + +`$${lvl+1}.set("this", $${lvl+1}.variables, true, true, true);` + + `${t.length ? t[1] + '\n' : ''}` + +`${t[2] ? t[2] : ''}`) + } + return null; }`; + //lvl--; + if (caller == 'statement' && statement.identifier) { + res = `$${lvl}.set("${statement.identifier.value}", ${res})` + } if (statement.identifier) { result += res; break; @@ -362,9 +437,9 @@ module.exports = function parse (statements, tmp, isReturn) { } case 'return': if (value === void 0) { - value = 'null'; + value = `$return($${lvl}, scopes, null)`; } else { - value = parse(value, tmp, isReturn); + value = `$return($${lvl}, scopes, ${parse(value, tmp, isReturn)})`; } var t = ''; // switch (tmp) { @@ -389,12 +464,20 @@ module.exports = function parse (statements, tmp, isReturn) { // result += `${t ? t + 'else ' : ''} return ${value};`; break; case 'identifier': + if (value == 'null') { + result += 'null'; + break; + } if (typeof value !== 'string') { result += value.value; break; } - //result += `local.get("${value}")`; - result += value; + if (tmp == 'realValue') { + result += `$${lvl}.get("${value}", 1)`; + break; + } + result += `$${lvl}.get("${value}")`; + //result += value; break; case 'global': result += `let ${value.value} = (globalThis !== null && globalThis !== void 0) ? globalThis.${value.value} : undefined;\n` @@ -412,14 +495,14 @@ module.exports = function parse (statements, tmp, isReturn) { result += value; break; case 'function_call': - if (value.type == 'identifier') { - result += parse(value); + if (value.type == 'identifier' || value.type == 'keyword') { + result += parse(value, tmp); } else if (value.from && value.type != 'item_retraction') { - result += `${parse(value.from)}.` + result += `$get(${parse(value.from, tmp)}, ` } if (value && value.value && value.value instanceof Array) { if (value.type == 'array') { - result += parse(value) + result += parse(value, tmp) } else { for (let i = 0; i < value.value.length; i++) { result += value.value[i].value @@ -429,17 +512,17 @@ module.exports = function parse (statements, tmp, isReturn) { } } else if (value.type == 'item_retraction') { - result += parse(value) + result += parse(value, tmp) } else if (typeof value === "object" && value.type != 'identifier') { if (value.type === 'expression_with_parenthesis') { - result += parse(value); + result += parse(value, tmp); } else if (value.type == 'function_call') { - result += parse(value); + result += parse(value, tmp); } else if (value.value.type != 'identifier') { - result += parse(value.value); + result += parse(value.value, tmp); } else { - result += value.value.value; + result += `"${value.value.value}")`; } } else if (typeof value === "object") { @@ -468,26 +551,14 @@ module.exports = function parse (statements, tmp, isReturn) { result += '()'; break; } - // result += parse([statement.arguments]); - result += '('; - var args = []; - for (let i = 0; i < statement.arguments.value.length; i++) { - args.push(parse(statement.arguments.value[i])); - } - result += args.join(','); - // result += `(${value.map(i => parse(i)).join(',')})`; + result += '('; + var args = []; + for (let i = 0; i < statement.arguments.value.length; i++) { + args.push(parse(statement.arguments.value[i])); + } + result += args.join(','); result += ')'; break; - // case 'arguments': - // result += '('; - // let args = []; - // for (let i = 0; i < value.length; i++) { - // args.push(parse([value[i]])); - // } - // result += args.join(','); - // // result += `(${value.map(i => parse(i)).join(',')})`; - // result += ')'; - // break; case 'if_else': result += `if (${parse(statement.if.condition)}) {${parse(statement.if.value, tmp)}}`; result += ` else {${parse(statement.else.value, tmp)}}`; @@ -507,13 +578,17 @@ module.exports = function parse (statements, tmp, isReturn) { break; case 'for_loop': if (!statement.from) { + //result += `for (${statement.identifier.value}; ${parse(statement.condition)}; ${parse(statement.change)}) {${parse(value)}}` result += `for (${parse(statement.identifier).replace(';', '')}; ${parse(statement.condition)}; ${parse(statement.change)}) {${parse(value)}}` break; } var value0 = parse(statement.from); var value1 = parse(statement.through); + var iterator = Math.random().toString(16).substr(2, 8); if (!/^\d+$/.test(value0) || !/^\d+$/.test(value1)) { - result += `for (let ${parse(statement.identifier)} of range(${value0}, ${value1}, ${statement.include})) {${parse(value, tmp)}}` + result += `for (let _i${iterator} of range(${value0}, ${value1}, ${statement.include})) { + ${parse(value, tmp, null, '', `$${lvl+1}.set("${statement.identifier.value}", _i${iterator}, true);`)} + }` break; } var min = Math.min(value0, value1); @@ -527,13 +602,16 @@ module.exports = function parse (statements, tmp, isReturn) { } break; case 'for_in': - result += `for (let ${parse(statement.identifier)} in ${parse(statement.iterable)}) {${parse(value, tmp)}}` + var iterator = Math.random().toString(16).substr(2, 8); + result += `for (let _i${iterator} in ${parse(statement.iterable)}) { + ${parse(value, tmp, null, '', `$${lvl+1}.set("${statement.identifier.value}", _i${iterator}, true);`)} + }` break; case 'for_of': - result += `for (let ${parse(statement.identifier)} of ${parse(statement.iterable)}) {${parse(value, tmp)}}` - break; - case 'sleep': - result += `sleep(${value});`; + var iterator = Math.random().toString(16).substr(2, 8); + result += `for (let _i${iterator} of ${parse(statement.iterable)}) { + ${parse(value, tmp, null, '', `$${lvl+1}.set("${statement.identifier.value}", _i${iterator}, true);`)} + }` break; case 'case': result += `case ${parse(value)}:`; @@ -577,13 +655,55 @@ module.exports = function parse (statements, tmp, isReturn) { case 'expression': result += `${parse(value[0])} ${value[1].value} ${parse(value[2])}`; break; + case 'expression_short_equation': { + let v = parse(value[0], 'realValue'); + if (value[0].type == 'identifier') { + if (value[1].value == '+') { + result += `$${lvl}.set("${value[0].value}", $add(${v}, ${parse(value[2])}))`; + break; + } + result += `$${lvl}.set("${value[0].value}", ${v} ${value[1].value} ${parse(value[2])})`; + break; + } + let parentesis = false; + let type = value[0].type; + if (type == 'item_retraction' || type == 'dot_retraction_v2') { + parentesis = true; + let prop = ''; + if (value[0].value && (value[0].value.type == 'identifier' || value[0].value.type == 'keyword')) { + prop = `"${value[0].value.value}"`; + } else { + prop = parse(value[0].value, 'realValue'); + } + result += `$update(${parse(value[0].from, 'realValue')}, ${prop}, ` + if (value[1].value == '+') { + result += `$add(${v}, ${parse(value[2])}))`; + break; + } + result += `${v} ${value[1].value} ${parse(value[2])})` + break + } else if (type == 'item_retraction_last') { + let val = parse(value[0].from, 'realValue'); + result += `$update(${val}, BS.last(${val}.length), `; + if (value[1].value == '+') { + result += `$add(${v}, ${parse(value[2])}))`; + break; + } + result += `${v} ${value[1].value} ${parse(value[2])})` + } + if (value[1].value == '+') { + result += `${v} = $add(${v}, ${parse(value[2])})`; + break; + } + result += `${v} = ${v} ${value[1].value} ${parse(value[2])}`; + break; + } case 'expression_with_parenthesis': if (!statement.arguments) { result += `(${parse(value)})`; break; } if (value.result) { - // statement.type = 'annonymous_function'; result += `(${parse(value)})`; if (statement.call_arguments || statement.arguments) { let args = statement.call_arguments || statement.arguments; @@ -600,6 +720,25 @@ module.exports = function parse (statements, tmp, isReturn) { case 'regexp': result += value; break; + case 'sum': + if (typeof value == 'number') { + result += value; + break; + } + if (statement.operator == '+') { + result += `$add(${parse(statement.left)}, ${parse(statement.right)})`; + break; + } + result += `${parse(statement.left)} ${statement.operator} ${parse(statement.right)}`; + break; + case 'product': + case 'pow': + if (typeof value == 'number') { + result += value; + break; + } + result += `${parse(statement.left)} ${statement.operator} ${parse(statement.right)}`; + break; case 'operator': debugger result += value; @@ -632,7 +771,7 @@ module.exports = function parse (statements, tmp, isReturn) { } result += value; } else { - result += parse(value, tmp); + result += parse(value, tmp, null, caller); } break; case 'throw': @@ -656,7 +795,21 @@ module.exports = function parse (statements, tmp, isReturn) { result += `eval(BS.parse(BS.ast(${parse(value)})));`; break; case 'item_retraction': - result += `${parse(statement.from)}[${parse(value)}]`; + if (tmp == 'delete') { + let v = parse(value, tmp); + let from = null; + if (statement.from.type == 'identifier') { + from = `"${statement.from.value}"`; + } else { + from = parse(statement.from); + } + if (v[0] == '"' || v[0] == "'" || v[0] == '`') { + v = v.slice(1, -1); + } + result += `$${lvl}.set(${from}, $delete(${parse(statement.from)}, "${v}"));`; + } else { + result += `$get(${parse(statement.from, tmp)}, ${parse(value, tmp)})`; + } if (statement.arguments) { var r = []; for (let i = 0; i < statement.arguments.value.length; i++) { @@ -771,7 +924,7 @@ module.exports = function parse (statements, tmp, isReturn) { // } break; case 'object': - var output = '({'; + var output = 'BS.Object({'; for (let i in value) { // if (value[i].type == 'identifier' && value[i].value == 'inherit') { // output += `${i}:(function (self) {return self["${i}"]})(this),`; @@ -789,7 +942,7 @@ module.exports = function parse (statements, tmp, isReturn) { result += output; break; case 'keyword': - result += value; + result += `$${lvl}.get("${value}")`; break; case 'class_declaration': result += `class ${parse(statement.identifier)} { @@ -832,39 +985,24 @@ module.exports = function parse (statements, tmp, isReturn) { var sav = statement.identifiers || []; var values = statement.values; var cancelables = statement.cancelables; + var args = []; if (statement.types.length == 0) return ''; for (let i = 0; i < sav.length; i++) { - r.push(`${parse(sav[i], tmp)}${values[i] ? '=' + parse(values[i], tmp) : ''}`); + r.push(`${sav[i].value}${values[i] ? '=' + parse(values[i], tmp) : ''}`); + //r.push(`${parse(sav[i], tmp)}${values[i] ? '=' + parse(values[i], tmp) : ''}`); if (statement.types[i] !== 'none' && statement.types[i] !== null) { let type = statement.types[i]; - let chk = `BS.checkArgType("${type}", "${sav[i].value}", ${statement.line}, ${statement.col});`; + let v = values[i] !== null && values[i] !== void 0 ? parse(values[i]) : `arguments[${i}] ?? null`; + let chk = `BS.checkArgType("${type}", "${sav[i].value}", ${v}, ${statement.line}, ${statement.col})`; + if (cancelables[i]) chk += `&& ${parse(sav[i])} !== null`; + chk += ';'; types.push(chk); - // types.push([statement.types[i], sav[i]]); - // switch (type) { - // case 'int': - // types.push(`if (parseInt(${parse(sav[i])}) !== ${parse(sav[i])}) { - // throw new TypeError('"${parse(sav[i])}" should be type of int') - // }`); - // break; - // case 'string': - // types.push(`if (typeof ${parse(sav[i])} !== 'string') { - // throw new TypeError('"${parse(sav[i])}" should be type of string') - // }`); - // break; - // } } + args.push(`$${lvl+1}.set("${sav[i].value}", ${sav[i].value});`) } - // result += `(${r.join(', ')})`; - return [r.join(', '), types.length ? types.join('') : ''] - // result += `(${r.join(', ')}) { - // ${types.length ? types.join('') : ''} - // ${parse(statement.value, statement.text)} - // }`; - // result += `constructor (${parse(statement.arguments)}) { - // }` - break; + return [r.join(', '), types.length ? types.join('') : '', args.join('')] case 'try': result += `try {${parse(statement.value)}}` break; @@ -886,6 +1024,9 @@ module.exports = function parse (statements, tmp, isReturn) { case 'period': result += `.` break; + case 'test': + result += `console.log(eval('(function () {${parse(value)}})()') == ${parse(statement.expect)})` + break; case undefined: // whitespace break; default: diff --git a/lib/compiler/built_in.js b/lib/compiler/built_in/js/built_in.js similarity index 67% rename from lib/compiler/built_in.js rename to lib/compiler/built_in/js/built_in.js index 14565b7..433602b 100644 --- a/lib/compiler/built_in.js +++ b/lib/compiler/built_in/js/built_in.js @@ -1,23 +1,12 @@ -class Variable { - constructor(name, type, value) { - this.name = name; - this.type = type; - this.value = value; - } - set valueOf(value) { - if (this.type == 'let' || this.type == '\\') return this.value; - if (BS.getType(value) != this.type) { - throw new TypeError(`Assignment of a different type to variable "${this.name}" rather than "${this.type}" is prohibited.`) - } - this.value = value; - } - get valueOf () { - return this.value; - } +// polifill for Array.prototype.isArray +if (!Array.isArray) { + Array.isArray = function(arg) { + return Object.prototype.toString.call(arg) === '[object Array]'; + }; } globalThis.BS = { var(name, type, value) { - if (BS.getType(value) !== type) throw new TypeError(`Variable "${name}" is required to be "${type}", got "${BS.getType(value)}" instead.`) + if (BS.getType(value) !== type) throw new TypeError(`Variable "${name}" is required to be "${type}", got "${BS.getType(value)}" instead.`); return new Variable(name, type, value); }, setValue(name, oldValue, value) { @@ -27,11 +16,6 @@ globalThis.BS = { } return value; }, - ck(value) { - if (value !== void 0) - return value; - return null; - }, through (value0, value1, line, col) { if (typeof value0 != 'number' || typeof value1 != 'number') { throw new TypeError(`Number is expected on the line ${line}, col ${col}.`); @@ -138,7 +122,7 @@ globalThis.BS = { return typeof value === 'object' && value !== null; }, }, - checkArgType(type, value, line, col) { + checkArgType(type, name, value, line, col) { if (type in this.customTypes) { let r = BS.customTypes[type]; if (r && r(value)) @@ -149,7 +133,7 @@ globalThis.BS = { if (r && r(value)) return true; } - throw new TypeError(`Argument "${value}" is not type of "${type}" at line ${line}, col ${col}.`); + throw new TypeError(`Argument "${name}" is not type of "${type}" at line ${line}, col ${col}.`); }, convert(value, type, outerType) { let t = this.getType(value); @@ -175,7 +159,7 @@ globalThis.BS = { if (t == 'undefined') return 'undefined'; else return value.toString(); case 'Array': - if (t == 'undefined' || 'null') return [] + if (t == 'undefined' || t == 'null') return []; if (t == 'html') return Object.values(this.DOMtoJSON(value)); if (t == 'object') return Object.values(value); if (t == 'string') { @@ -233,13 +217,13 @@ globalThis.BS = { //debugger //span.className += ' array'; //span.innerText = JSON.stringify(value[i], null, 2); - span.append('[') - span.append(gt(value[i], type, 'Array')) - span.append(']') + span.append('['); + span.append(gt(value[i], type, 'Array')); + span.append(']'); } else if (ty == 'Object') { //span.innerText = JSON.stringify(value[i], null, 2); //let innerSpan = gt(value[i], type) - span.append(gt(value[i], type)) + span.append(gt(value[i], type)); } else span.innerText = `${value[i]}`; span.className += ` ${ty}`; @@ -296,7 +280,7 @@ globalThis.BS = { return Object.keys(object).length; //else return 0 if (object === void 0 || object === null) { - return 0 + return 0; //throw new TypeError('Cannot convert undefined or null to object'); } return Object.keys(object).length; @@ -320,48 +304,58 @@ globalThis.BS = { return 0; }, storage: [], - // require('./ast_to_js.js')// || function () {console.warn('@eval is not supported yet in browsers.')} + defineProperty(prototype, propertyName, valueCallback, options) { + options = options || { + writable: true, + enumerable: false, + configurable: true + }; + options.value = valueCallback; + Object.defineProperty(prototype, propertyName, options); + }, + Object(object) { + //let o = Object.create(null); + //return Object.assign(o, object); + return object; + }, + Array(array) { + if (array instanceof Array === false) array = BS.convert(array, 'Array'); + let o = Object.create(null); + let proto = ['push', 'pop', 'shift', 'unshift', 'slice', 'splice', + 'join', 'sort', 'map', 'forEach', 'indexOf', 'at', 'includes']; + for (let i in proto) { + BS.defineProperty(o, proto[i], function () { + return Array.prototype[proto[i]].apply(this, arguments); + }); + } + array.__proto__ = o; + return array; + }, + // require('./ast_to_js.js')// + //|| function () { console.warn('@eval is not supported yet in browsers.') } }; + const BS = globalThis.BS; const TypedArray = Reflect.getPrototypeOf(Int8Array); for (const C of [Array, String, TypedArray]) { - Object.defineProperty(C.prototype, "at", { - value: function at(n) { - // ToInteger() abstract op - n = Math.trunc(n) || 0; - // Allow negative indexing from the end - if (n < 0) n += this.length; - // OOB access is guaranteed to return undefined - if (n < 0 || n >= this.length) return undefined; - // Otherwise, this is just normal property access - return this[n]; - }, - writable: true, - enumerable: false, - configurable: true + BS.defineProperty(C.prototype, "at", function at(n) { + // ToInteger() abstract op + n = Math.trunc(n) || 0; + // Allow negative indexing from the end + if (n < 0) n += this.length; + // OOB access is guaranteed to return undefined + if (n < 0 || n >= this.length) return undefined; + // Otherwise, this is just normal property access + return this[n]; }); - Object.defineProperty(C.prototype, "last", { - value: function last() { - return this[this.length-1]; - }, - writable: true, - enumerable: false, - configurable: true + BS.defineProperty(C.prototype, "last", function last() { + return this[this.length-1]; }); } -Object.defineProperty(String.prototype, "noBreaks", { - value: function noBreaks() { - return this.replace(/\r\n?/g, ''); - }, - writable: true, - enumerable: false, - configurable: true +BS.defineProperty(String.prototype, "noBreaks", function noBreaks() { + return this.replace(/\r\n?/g, ''); }); -// ! causes issues in for in loop -//Array.prototype.last = function () { -// return this[this.length - 1]; -//}; function list (amount, callback) { let array = []; for (let i = 0; i < amount; i++) { @@ -374,68 +368,7 @@ function list (amount, callback) { } return array; } -function range(start, stop, include = false){ - if (stop === undefined) { - stop = start; - start = 0; - } - if (include) { - if (start > stop) { - stop--; - } else { - stop++ - } - } - let i = start; // start - return { // iterator protocol - [Symbol.iterator]:() => { // @@iterator - return { // object with the next function - next () { - while(i !== stop){ - let temp = i; - if (start > stop) i--; - else i++; - return { - value: temp, - done: false, - } - } - return {done: true} - } - } - } - } -} -const PI = 3.141592653589793, - E = 2.718281828459045, - log = (...args) => console.log(...args), - sqrt = Math.sqrt.bind(Math), - Time = { - get now () { - return Date.now() - }, - get ms () { - return new Date().getMilliseconds() - }, - get seconds () { - return new Date().getSeconds() - }, - get minutes () { - return new Date().getMinutes() - }, - get hours () { - return new Date().getHours() - }, - get day () { - return new Date().getDay() - }, - get month () { - return new Date().getMonth() - }, - get year () { - return new Date().getFullYear() - }, - }, +const log = (...args) => console.log(...args), sizeof = function sizeof (object) { if (object === void 0 || object === null) { throw new TypeError('Cannot convert undefined or null to object'); @@ -445,3 +378,135 @@ const PI = 3.141592653589793, } return Object.keys(object).length; }; +function clear_function_value(v) { + if (typeof v !== 'function') return v; + let r = Object.create(null); + r.name = v.name; + r.value = v.value.toString(); + r.type = 'function'; + return r; +} +function get_clear_value(v) { + if (typeof v != 'object' || v === null || v.constructor == 'Date') { + return v; + //return clear_function_value(v); + } + let r = Object.create(null); + if (BS.getType(v) == 'Array') { + r = BS.Array([]); + } + for (let i in v) { + if (v[i] instanceof Variable) { + if (v[i].name == 'this') continue; + //if (typeof v[i].value == 'function') { + // r[`function ${i}`] = clear_function_value(v[i]); + //} + else r[i] = v[i].value; + } + else if (BS.getType(v[i]) == 'Object' && v[i].constructor == 'Date') { + r[i] = get_clear_value(v[i]); + } + else { + r[i] = v[i]; + } + } + return r; +} +function $get(object, property, unclearValue) { + if (object === null || object === void 0) { + throw new TypeError(`Cannot read properties of "null"`); + } + let v = object[property]; + if (v !== void 0) { + if (v instanceof Variable) { + return v.value; + } + if (BS.getType(v) == 'Object') { + if (unclearValue) return v; + return get_clear_value(v); + } + return v; + } + return null; +} +function $free(object, scope) { + if (scope) { + if (!object) { + throw new TypeError(`Attempt to delete non-existing variable`); + } + scope.delete(object); + return; + } +} + +function $delete(object, property) { + if (object === null || object === void 0) { + throw new TypeError(`Cannot read or delete properties of "null"`); + } + let type = BS.getType(object); + if (type != 'Array' && type != 'Object') { + throw new TypeError(`Attempt to change immutable objects"`); + } + if (type == 'Array' || type == 'String') { + if (isNaN(parseInt(property))) { + return object; + } + //if (type == 'String') { + // return object.slice(0, parseInt(property)) + object.slice(parseInt(property) + 1) + //} + try { + object.splice(property, 1); + } finally { + return object; + } + } + delete object[property]; + return object; +} +function $return(localScope, globalScope, value) { + $clearScope(localScope, globalScope); + return value; +} +function $clearScope(localScope, globalScope) { + localScope.scopes.pop(); + globalScope.scopes.pop(); +} + +function $add(value1, value2) { + if (Array.isArray(value1) && Array.isArray(value2)) { + return [].concat(value1, value2); + } + if (Array.isArray(value1)) { + return [].concat(value1, value2) + } + if (BS.getType(value1) == 'Object' && BS.getType(value2) == 'Object') { + return Object.assign({}, value1, value2); + } + if (value1 === null || value2 === null) { + throw new TypeError('"null" cannot be used as in math expressions'); + } + if (typeof value1 === 'string') { + if (typeof value2 !== 'string') { + throw new TypeError('String was expected for concatination, got "'+BS.getType(value2)+'" insetead'); + } + return value1 + value2; + } + if (typeof value1 === 'number') { + if (typeof value2 !== 'number') { + throw new TypeError('Number was expected for math expression, got "'+BS.getType(value2)+'" insetead'); + } + return value1 + value2; + } + return value1 + value2; +} + +function $update(obj, property, value) { + if (!property in obj) { + throw new Error(`Property "${property}" is not found`); + } + return obj[property] = value; +} + +function $new(value) { + return new value; +} \ No newline at end of file diff --git a/lib/compiler/built_in/js/scope.js b/lib/compiler/built_in/js/scope.js new file mode 100644 index 0000000..abb185c --- /dev/null +++ b/lib/compiler/built_in/js/scope.js @@ -0,0 +1,189 @@ +const range = function range(start, stop, include = false) { + if (stop === undefined) { + stop = start; + start = 0; + } + if (include) { + if (start > stop) { + stop--; + } else { + stop++; + } + } + let i = start; // start + return { // iterator protocol + [Symbol.iterator]: () => { // @@iterator + return { // object with the next function + next() { + while (i !== stop) { + let temp = i; + if (start > stop) i--; + else i++; + return { + value: temp, + done: false, + } + } + return { done: true }; + } + } + } + } +}; +const isNaN = function isNaN(number) { + return typeof number == 'number' && number !== number; +}; + +const BUILT_IN_VALUES = { + Infinity: Infinity, + NaN: NaN, + range: range, // function + isNaN: isNaN, // function + empty: function empty(object) { + if (['array', 'string', 'object'].includes(typeof object)) { + return Object.keys(object).length == 0; + } + throw new TypeError(`Unexpected type of argument for "empty" function. "array", "string" or "object" was expected`) + }, + round: function round(object) { + return Math.round(object) + }, +}; +class Variable { + constructor(name, type, value, constant = false, ignoreError = false) { + this.name = name; + this.type = type; + this.value = value === void 0 ? null : value; + this.constant = constant; + this.ignoreError = ignoreError; + } + set realValue(value) { + if (this.constant && !this.ignoreError) { + throw new Error(`Attempt to change value of constant "${this.name}"`) + } else if (this.constant) { + return this.value; + } + if (this.type == 'let' || this.type == '\\' + //|| this.type === null + ) return this.value; + if (this.type !== null && BS.getType(value) != this.type) { + throw new TypeError(`Assignment of a different type to variable "${this.name}" rather than "${this.type}" is prohibited`); + } + this.value = value; + } + get realValue () { + //return get_clear_value(this.value); + return this.value; + } + update(operator, value) { + this.value = eval('this.value' + operator + 'value'); + } +} + +class Scopes { + constructor() { + this.scopes = []; + this.globalScope = null; + } + new(level, parent = this) { + let scope = new Scope(level, parent); + parent.scopes.push(scope); + return scope; + } + global() { + let $0 = this.new(0); + $0.set('this', $0.variables, true, true, true); + $0.init(BUILT_IN_VALUES); + this.globalScope = $0; + //$0.init('Object', BS.Object.bind(BS); + //$0.init('Array', BS.Array.bind(BS); + return $0; + } + append_to_global(object) { + for (let i in object) { + this.globalScope.set(i, object[i], true, true); + BUILT_IN_VALUES[i] = object[i]; + } + } +} + +class Scope { + constructor(level, parent) { + this.level = level; + this.variables = {}; + this.scopes = []; + this.parent = parent; + } + get(propertyName, unclearValue) { + if (this.variables[propertyName] !== void 0) { + if (unclearValue) return this.variables[propertyName].value; + return this.variables[propertyName].realValue; + } + let level = this.level; + if (level == 0 || !this.parent) { + console.warn(`Variable "${propertyName}" has never been declared. "null" is returned instead.`); + return null; + //throw ReferenceError(`Variable "${propertyName}" has never been declared.`) + } + return this.parent.get(propertyName); + } + getScope(propertyName) { + if (this.variables[propertyName]) { + return this; + } + let level = this.level; + if (level == 0 || !this.parent) return null; + return this.parent.getScope(propertyName); + } + init(values) { + for (let i in values) { + this.set(i, values[i], true, true); + } + } + set(propertyName, value, local = false, constant = false, ignoreError = false) { + if (local || constant) { + let v = this.variables[propertyName]; + if (!v) { + this.variables[propertyName] = new Variable(propertyName, null, value, constant, ignoreError) + } + else { + this.variables[propertyName].realValue = value; + } + return null; + } + let scope = this.getScope(propertyName); + // not found + if (scope == null) { + scope = this; + } + let v = scope.variables[propertyName]; + if (!v) { + scope.variables[propertyName] = new Variable(propertyName, null, value, constant); + } + else { + scope.variables[propertyName].realValue = value; + } + return null; + } + delete(propertyName) { + if (typeof propertyName != 'string') { + for (let i in this.variables) { + if (this.variables[i].value == propertyName) { + delete this.variables[i]; + return true; + } + } + } + if (this.variables[propertyName]) { + delete this.variables[propertyName]; + return true; + } + let level = this.level; + if (level == 0 || !this.parent) return false; + return this.parent.delete(propertyName); + } +} + +const scopes = new Scopes(); +const $0 = scopes.global(); + diff --git a/lib/compiler/built_in.php b/lib/compiler/built_in/php/built_in.php similarity index 100% rename from lib/compiler/built_in.php rename to lib/compiler/built_in/php/built_in.php diff --git a/lib/compiler/index.js b/lib/compiler/index.js index d3dd6a1..1b11fd7 100644 --- a/lib/compiler/index.js +++ b/lib/compiler/index.js @@ -2,22 +2,17 @@ const fs = require('fs'); const parser = require('./parser.js'); function readFile (fileName) { let content = null; - // try { - content = fs.readFileSync(fileName, { encoding: "utf8", flag: "r" }); - // } catch (err) { - // throw err; - // } + content = fs.readFileSync(fileName, { encoding: "utf8", flag: "r" }); return content; } module.exports = (string) => { // if string is provided - // console.log(1) - if (!/\.bs$/.test(string)) { + if (!/\.b(s|m)$/.test(string)) { try { let result = parser(string); return result; } catch (err) { - console.log(err) + console.warn(err) return; } } @@ -27,6 +22,6 @@ module.exports = (string) => { let result = parser(file); return result; } catch (err) { - console.log(err) + console.warn(err) } } \ No newline at end of file diff --git a/lib/compiler/parser.js b/lib/compiler/parser.js index 5f381bd..c71aece 100644 --- a/lib/compiler/parser.js +++ b/lib/compiler/parser.js @@ -1,19 +1,20 @@ -const nearley = require("nearley"); +// ! This file takes your input and returns language tokens +const nearley = require("nearley") module.exports = function (str) { - const grammar = require('../grammar'); - // const grammar = require("./basescript.js"); // keep here, otherwise if grammar is changed, watch needs to be restarted - const parser = new nearley.Parser(nearley.Grammar.fromCompiled(grammar)); - // if (str.trim().length == 0) return ''; + const grammar = require('../grammar') + // For dev purposes, keep this here. + // When your grammar updates, you will not need to restart. + const parser = new nearley.Parser(nearley.Grammar.fromCompiled(grammar)) try { - let parsed = parser.feed(str); - // console.log(`Parsing result count: ${parsed.results.length}`) - // console.log(parsed.results); + let parsed = parser.feed(str) let result = parsed.results[0] if (!result) { console.log('[Log]: Grammar doesn\'t match.') return []; }; - console.log('Results: ' + parsed.results.length) + if (parsed.results.length > 1) { + console.log('Results: ' + parsed.results.length) + } return result } catch (err) { try { @@ -23,7 +24,7 @@ module.exports = function (str) { console.error('[Parser]: Bad grammar') let filtered = new Set(message .slice(1) - .map(i => i.split(/based on:\n/)[0].trim())); + .map(i => i.split(/based on:\n/)[0].trim())) console.error([message ? message[0] : '', [...filtered].join(', ')].join('')) } else { console.error('[Parser]: Possible internal error') @@ -31,9 +32,8 @@ module.exports = function (str) { } } catch (error) { console.error('[Parser]: Bad grammar') - console.error(error.message); + console.error(error.message) } - // debugger } - return []; + return [] } \ No newline at end of file diff --git a/lib/grammar/grammar.js b/lib/grammar/grammar.js index 7663de3..7ec2126 100644 --- a/lib/grammar/grammar.js +++ b/lib/grammar/grammar.js @@ -48,13 +48,39 @@ const lexer = moo.compile({ // } ], //'@constructor': 'constructor', - keyword: ['Boolean', 'Number', 'String', 'Array', 'Object', 'unless', 'than', 'constructor', 'null', 'const', 'print', 'var', 'sizeof', 'Infinity', 'NaN', 'undefined', 'globalThis', 'through', 'THAT', 'DELETE', 'SAVE', 'LOG', 'ERROR', 'WRITE', 'INTO', 'PUSH', 'POP', 'SHIFT', 'UNSHIFT', 'FROM', 'Int', 'Float', 'BEGIN', 'END', 'SET', 'TO', 'typeof', 'instanceof', 'in', 'of', 'type', 'super', 'extends', 'function', 'def', 'this', 'echo', 'export', 'as', 'JSON', 'yield', 'async', 'try', 'catch', 'finally', 'static', 'while', 'if', 'else', 'import', 'from', 'let', 'const', 'null', 'of', 'default', 'caseof', 'switch', 'with', 'for', 'case', 'default', 'elif', 'debugger', 'or', 'and', 'return', 'new', 'is', 'not', 'throw', 'break', 'continue'].map(i => new RegExp(`\\b${i}\\b`)), + keyword: { + // reserved keywords and constants + match: ['void', 'constructor' + , 'null', 'this', 'globalThis', 'undefined', 'Infinity' + , 'THAT', 'DELETE' + , 'SAVE', 'INTO', 'PUSH', 'POP', 'SHIFT', 'UNSHIFT' + , 'FROM', 'BEGIN', 'END', 'instanceof', 'type' + , 'super', 'extends', 'function', 'def', 'echo' + , 'export', 'as', 'yield', 'async', 'try', 'catch', 'finally' + , 'static', 'import', 'from', 'of', 'default', 'caseof' + , 'switch', 'with', 'case', 'default', 'debugger' + , 'return', 'new', 'throw'].map(i => new RegExp(`\\b${i}\\b`)), + // Built in types or Converters + match: ['Boolean', 'Number', 'String', 'Array' + , 'Object', 'Function', 'Int', 'Float', 'JSON'//, 'NaN' + ].map(i => new RegExp(`\\b${i}\\b`)), + // if statement keywords + match: ['unless', 'than', 'if', 'else' + , 'elif', 'or', 'and', 'is', 'not'].map(i => new RegExp(`\\b${i}\\b`)), + // loop keywords + match: ['in', 'of', 'while', 'for' + , 'break', 'continue', 'through'].map(i => new RegExp(`\\b${i}\\b`)), + // variable related keywords + match: ['const', 'var', 'delete', 'free' + , 'SET', 'TO', 'print', 'LOG', 'ERROR' + , 'WRITE', 'sizeof', 'typeof'].map(i => new RegExp(`\\b${i}\\b`)), + }, //regexp: /\/((?![*+?])(?:[^\r\n\[/\\]|\\.|\[(?:[^\r\n\]\\]|\\.)*\])+)\/((?:g(?:im?|mi?)?|i(?:gm?|mg?)?|m(?:gi?|ig?)?)?)/, regexp: /\/(?:\\[ ><\n\/\\])*?\//, - operator: ['+', '-', '/', '**', '*', '%'], + operator: ['+', '-', '/', '**', '*', '%', '^'], // ! is not tested - bigInt: /(?:\+|-)?(?:[0-9]+(?:_?[0-9]+)*)n/, - number: /(?:\+|-)?(?:[0-9]+(?:_?[0-9]+)*)(?:\.[0-9]+)?/, + bigInt: /(?:[0-9]+(?:_?[0-9]+)*)n/, + number: /(?:[0-9]+(?:_?[0-9]+)*)(?:\.[0-9]+)?/, boolean: ['true', 'false'], // 'false': 'false', //'null': 'null', @@ -310,7 +336,9 @@ const statement = { offset: v[0].offset, }), debugger: v => assign(v[0], {type: 'debugger'}), - delete: v => assign(v[0], {type: 'delete', value: v[2] }), + delete: v => assign(v[0], {type: 'delete', value: v[1] }), + free: v => assign(v[0], {type: 'free', value: v[1] }), + sleep: v => assign(v[0], {type: 'sleep', value: v[1] }), throw: v => assign(v[0], { type: 'throw', value: v[2] @@ -500,7 +528,7 @@ function Null (v) { // debugger return assign(v[0], { type: 'null', - value: null + value: null, }) } function boolean ([v]) { @@ -519,6 +547,10 @@ const global = {}; Object.join = function (obj) { return {...this, ...obj}; } +function debug(v) { + debugger; + return v; +} var grammar = { Lexer: lexer, ParserRules: [ @@ -602,7 +634,8 @@ var grammar = { {"name": "statement", "symbols": ["class_declaration"], "postprocess": id}, {"name": "statement", "symbols": ["with"], "postprocess": id}, {"name": "statement", "symbols": [{"literal":"debugger"}], "postprocess": statement.debugger}, - {"name": "statement", "symbols": [{"literal":"delete"}, "__", "value"], "postprocess": statement.delete}, + {"name": "statement", "symbols": [{"literal":"delete"}, "arguments"], "postprocess": statement.delete}, + {"name": "statement", "symbols": [{"literal":"free"}, "arguments"], "postprocess": statement.free}, {"name": "statement", "symbols": ["return"], "postprocess": id}, {"name": "statement", "symbols": [{"literal":"throw"}, "__", "value"], "postprocess": statement.throw}, {"name": "statement$subexpression$1", "symbols": [{"literal":"break"}]}, @@ -620,13 +653,33 @@ var grammar = { {"name": "statements_block$ebnf$1$subexpression$1", "symbols": [{"literal":";"}, "_"]}, {"name": "statements_block$ebnf$1", "symbols": ["statements_block$ebnf$1$subexpression$1"], "postprocess": id}, {"name": "statements_block$ebnf$1", "symbols": [], "postprocess": function(d) {return null;}}, - {"name": "statements_block", "symbols": ["_", {"literal":"{"}, "statements", "_", "statements_block$ebnf$1", {"literal":"}"}], "postprocess": v => v[2]}, + {"name": "statements_block", "symbols": ["_", {"literal":"{"}, "statements", "_", "statements_block$ebnf$1", {"literal":"}"}], "postprocess": v => ({ + type: 'scope', + value: v[2], + line: v[2].line, + col: v[2].col + }) }, {"name": "statements_block$ebnf$2$subexpression$1", "symbols": [{"literal":";"}, "_"]}, {"name": "statements_block$ebnf$2", "symbols": ["statements_block$ebnf$2$subexpression$1"], "postprocess": id}, {"name": "statements_block$ebnf$2", "symbols": [], "postprocess": function(d) {return null;}}, - {"name": "statements_block", "symbols": ["_", {"literal":"BEGIN"}, "__", "statements", "_", "statements_block$ebnf$2", {"literal":"END"}], "postprocess": v => v[3]}, - {"name": "statements_block", "symbols": ["_", {"literal":":"}, "_", "statement"], "postprocess": v => [v[3]]}, - {"name": "statements_block", "symbols": ["_", {"literal":"do"}, "__", "statement"], "postprocess": v => [v[3]]}, + {"name": "statements_block", "symbols": ["_", {"literal":"BEGIN"}, "__", "statements", "_", "statements_block$ebnf$2", {"literal":"END"}], "postprocess": v => ({ + type: 'scope', + value: v[3], + line: v[3].line, + col: v[3].colva + }) }, + {"name": "statements_block", "symbols": ["_", {"literal":":"}, "_", "statement"], "postprocess": v => ({ + type: 'scope', + value: [v[3]], + line: v[3].line, + col: v[3].colva + }) }, + {"name": "statements_block", "symbols": ["_", {"literal":"do"}, "__", "statement"], "postprocess": v => ({ + type: 'scope', + value: [v[3]], + line: v[3].line, + col: v[3].colva + }) }, {"name": "type_declaration", "symbols": [{"literal":"type"}, "__", "identifier", "_", "arguments_with_types", "statements_block"], "postprocess": v => { if (v[2].value[0].toUpperCase() != v[2].value[0]) { throw new SyntaxError(`Type name must be capitalized.`) @@ -662,14 +715,16 @@ var grammar = { type: 'global', value: v[3] }) }, - {"name": "atom", "symbols": ["number"], "postprocess": id}, - {"name": "atom", "symbols": ["string"], "postprocess": id}, - {"name": "atom", "symbols": ["myNull"], "postprocess": id}, - {"name": "atom", "symbols": [{"literal":"true"}], "postprocess": id}, - {"name": "atom", "symbols": [{"literal":"false"}], "postprocess": id}, - {"name": "atom", "symbols": ["parenthesized"], "postprocess": id}, - {"name": "atom", "symbols": ["prefixExp"], "postprocess": id}, - {"name": "identifier", "symbols": [(lexer.has("identifier") ? {type: "identifier"} : identifier)], "postprocess": id}, + {"name": "identifier", "symbols": [(lexer.has("identifier") ? {type: "identifier"} : identifier)], "postprocess": (v, l, reject) => { + if (v[0].type == 'null' || + ['Infinity', 'this', 'globalThis', 'NaN' + , 'Boolean', 'Object', 'Array', 'String', 'Number', 'JSON' + ].includes(v[0].value)) { + return reject; + } + return v[0] + } }, + {"name": "identifier", "symbols": ["allowed_keywords"], "postprocess": id}, {"name": "allowed_keywords", "symbols": [{"literal":"Infinity"}], "postprocess": id}, {"name": "allowed_keywords", "symbols": [{"literal":"this"}], "postprocess": id}, {"name": "allowed_keywords", "symbols": [{"literal":"globalThis"}], "postprocess": id}, @@ -685,7 +740,9 @@ var grammar = { return { type: 'convert', value: v[0], - convert_type: v[4] + convert_type: v[4], + line: v[0].line, + col: v[0].col } } }, {"name": "convert_type$subexpression$1", "symbols": [{"literal":"JSON"}]}, @@ -702,6 +759,7 @@ var grammar = { {"name": "pair$ebnf$1", "symbols": [], "postprocess": function(d) {return null;}}, {"name": "pair", "symbols": ["pair$ebnf$1", "key", "_", "arguments_with_types", "statements_block"], "postprocess": object.es6_key_value}, {"name": "pair", "symbols": ["key", "_", {"literal":":"}, "_", "value"], "postprocess": v => [v[0], v[4]]}, + {"name": "pair", "symbols": ["key"], "postprocess": v => [v[0], v[0]]}, {"name": "key", "symbols": ["string"], "postprocess": id}, {"name": "key", "symbols": ["identifier"], "postprocess": id}, {"name": "key", "symbols": [(lexer.has("keyword") ? {type: "keyword"} : keyword)], "postprocess": id}, @@ -711,7 +769,6 @@ var grammar = { {"name": "boolean$subexpression$1", "symbols": [(lexer.has("boolean") ? {type: "boolean"} : boolean)]}, {"name": "boolean", "symbols": ["boolean$subexpression$1"], "postprocess": boolean}, {"name": "string", "symbols": ["string_concat"], "postprocess": id}, - {"name": "string", "symbols": ["number", {"literal":"px"}], "postprocess": string.px}, {"name": "string", "symbols": [{"literal":"typeof"}, "_", {"literal":"("}, "_", "value", "_", {"literal":")"}], "postprocess": v => ({ type: 'typeof', value: v[4], @@ -720,14 +777,6 @@ var grammar = { }) }, {"name": "bigInt", "symbols": [(lexer.has("bigInt") ? {type: "bigInt"} : bigInt)], "postprocess": number.bigInt}, {"name": "number", "symbols": [(lexer.has("number") ? {type: "number"} : number)], "postprocess": number.float}, - {"name": "number$subexpression$1", "symbols": [{"literal":"-"}]}, - {"name": "number", "symbols": ["number$subexpression$1", "_", "value"], "postprocess": v => ({ - type: 'additive', - sign: v[0][0].value, - value: v[2], - line: v[0].line, - col: v[0].col - }) }, {"name": "number", "symbols": [{"literal":"sizeof"}, "_", {"literal":"("}, "_", "value", "_", {"literal":")"}], "postprocess": v => ({ type: 'sizeof', value: v[4], @@ -746,11 +795,16 @@ var grammar = { {"name": "regexp$ebnf$1$subexpression$1", "symbols": ["regexp_flags"]}, {"name": "regexp$ebnf$1", "symbols": ["regexp$ebnf$1", "regexp$ebnf$1$subexpression$1"], "postprocess": function arrpush(d) {return d[0].concat([d[1]]);}}, {"name": "regexp", "symbols": [(lexer.has("regexp") ? {type: "regexp"} : regexp), "regexp$ebnf$1"], "postprocess": regexp.parse}, - {"name": "Var", "symbols": ["identifier"], "postprocess": id}, - {"name": "Var", "symbols": ["prefixExp", "_nbsp", {"literal":"["}, "_", {"literal":"]"}], "postprocess": v => ({ + {"name": "_base", "symbols": ["base"], "postprocess": id}, + {"name": "_base", "symbols": ["array"], "postprocess": id}, + {"name": "_base", "symbols": ["regexp"], "postprocess": id}, + {"name": "_base", "symbols": ["object"], "postprocess": id}, + {"name": "Var", "symbols": ["_base", "_nbsp", {"literal":"["}, "_", {"literal":"]"}], "postprocess": v => ({ type: 'item_retraction_last', //arguments: v[7] ? v[7][1] : null, from: v[0], + line: v[0].line, + col: v[0].col //value: v[4] //identifier: v[0].value }) }, @@ -761,24 +815,29 @@ var grammar = { {"name": "Var$ebnf$2$subexpression$1", "symbols": ["_", {"literal":":"}, "_", "value"]}, {"name": "Var$ebnf$2", "symbols": ["Var$ebnf$2$subexpression$1"], "postprocess": id}, {"name": "Var$ebnf$2", "symbols": [], "postprocess": function(d) {return null;}}, - {"name": "Var", "symbols": ["prefixExp", "_", {"literal":"["}, "Var$subexpression$1", "_", {"literal":":"}, "Var$ebnf$1", "Var$ebnf$2", "_", {"literal":"]"}], "postprocess": array.slice}, - {"name": "Var", "symbols": ["prefixExp", "_nbsp", {"literal":"["}, "_", "value", "_", {"literal":"]"}], "postprocess": v => ({ + {"name": "Var", "symbols": ["_base", "_", {"literal":"["}, "Var$subexpression$1", "_", {"literal":":"}, "Var$ebnf$1", "Var$ebnf$2", "_", {"literal":"]"}], "postprocess": array.slice}, + {"name": "Var", "symbols": ["_base", "_nbsp", {"literal":"["}, "_", "value", "_", {"literal":"]"}], "postprocess": v => ({ type: 'item_retraction', //arguments: v[7] ? v[7][1] : null, from: v[0], - value: v[4] + value: v[4], + line: v[0].line, + col: v[0].col //identifier: v[0].value }) }, {"name": "Var$subexpression$2", "symbols": [(lexer.has("keyword") ? {type: "keyword"} : keyword)]}, {"name": "Var$subexpression$2", "symbols": ["identifier"]}, - {"name": "Var", "symbols": ["prefixExp", "_", {"literal":"."}, "_", "Var$subexpression$2"], "postprocess": (v, l, reject) => { + {"name": "Var", "symbols": ["_base", "_", {"literal":"."}, "_", "Var$subexpression$2"], "postprocess": (v, l, reject) => { if (v[0].type == 'annonymous_function') return reject return { type: 'dot_retraction_v2', from: v[0], value: v[4][0], + line: v[0].line, + col: v[0].col } } }, + {"name": "Var", "symbols": ["identifier"], "postprocess": id}, {"name": "switch$ebnf$1", "symbols": []}, {"name": "switch$ebnf$1$subexpression$1", "symbols": ["_", "case_single_valued"]}, {"name": "switch$ebnf$1", "symbols": ["switch$ebnf$1", "switch$ebnf$1$subexpression$1"], "postprocess": function arrpush(d) {return d[0].concat([d[1]]);}}, @@ -841,14 +900,14 @@ var grammar = { {"name": "construct", "symbols": [{"literal":"constructor"}, "_", "arguments_with_types", "statements_block"], "postprocess": classes.construct}, {"name": "es6_key_value", "symbols": ["identifier", "_", "arguments_with_types", "statements_block"], "postprocess": classes.es6_key_value}, {"name": "if_block", "symbols": [{"literal":"if"}, "statement_condition", "statements_block"], "postprocess": v => { - return Object.assign(v[0], { + return assign(v[0], { type: 'if', condition: v[1], - value: v[2], + value: v[2] }); } }, {"name": "if_block", "symbols": [{"literal":"unless"}, "statement_condition", "statements_block"], "postprocess": v => { - return Object.assign(v[0], { + return assign(v[0], { type: 'if', condition: v[1], value: v[2], @@ -953,8 +1012,10 @@ var grammar = { col: v[0].col }) } }, + {"name": "left_assign", "symbols": ["Var"], "postprocess": id}, + {"name": "left_assign", "symbols": ["function_call"], "postprocess": id}, {"name": "value_reassign$subexpression$1", "symbols": ["value"]}, - {"name": "value_reassign", "symbols": ["prefixExp", "_", {"literal":"="}, "_", "value_reassign$subexpression$1"], "postprocess": v => { + {"name": "value_reassign", "symbols": ["left_assign", "_", {"literal":"="}, "_", "value_reassign$subexpression$1"], "postprocess": v => { return { type: 'var_reassign', identifier: v[0], @@ -976,6 +1037,7 @@ var grammar = { offset: v[0].offset } } }, + {"name": "value_reassign", "symbols": ["value_addition"], "postprocess": id}, {"name": "var_assign$subexpression$1", "symbols": [{"literal":"let"}, "__"]}, {"name": "var_assign$subexpression$1", "symbols": [{"literal":"const"}, "__"]}, {"name": "var_assign$subexpression$1", "symbols": [{"literal":"\\"}]}, @@ -992,7 +1054,9 @@ var grammar = { value: { type: 'var_assign_group', identifier: v[6], - value: [v[2][0]] + value: [v[2][0]], + line: v[2][0].line, + col: v[2][0].col }, offset: v[0].offset } @@ -1012,11 +1076,11 @@ var grammar = { } } }, {"name": "var_reassign", "symbols": ["identifier"], "postprocess": v => ({ - type: 'identifier', - value: v[0], - line: v[0].line, - col: v[0].col, - }) }, + type: 'identifier', + value: v[0], + line: v[0].line, + col: v[0].col, + }) }, {"name": "var_reassign$subexpression$1", "symbols": ["switch"]}, {"name": "var_reassign$subexpression$1", "symbols": ["value"]}, {"name": "var_reassign", "symbols": [{"literal":"SET"}, "_", "identifier", "_", {"literal":"TO"}, "_", "var_reassign$subexpression$1"], "postprocess": v => { @@ -1029,8 +1093,22 @@ var grammar = { offset: v[0].offset } } }, + {"name": "value_addition$subexpression$1", "symbols": [{"literal":"+"}, {"literal":"="}]}, + {"name": "value_addition$subexpression$1", "symbols": [{"literal":"-"}, {"literal":"="}]}, + {"name": "value_addition$subexpression$1", "symbols": [{"literal":"*"}, {"literal":"="}]}, + {"name": "value_addition$subexpression$1", "symbols": [{"literal":"/"}, {"literal":"="}]}, + {"name": "value_addition", "symbols": ["prefixExp", "_nbsp", "value_addition$subexpression$1", "_", "sum"], "postprocess": (v, l, reject) => { + if (v[0].type == 'string' || v[0].type == 'number' || v[0].type == 'boolean' || v[0].type == 'null') { + throw new Error(`Unexpected assignment at line ${v[2][0].line}, col ${v[2][0].col}`) + } + // console.log(v[4]) + return ({ + type: 'expression_short_equation', + value: [v[0], assign(v[2][0], {value: v[2][0].value}), v[4]] + }) + } }, {"name": "while_block", "symbols": [{"literal":"while"}, "statement_condition", "statements_block"], "postprocess": v => { - return Object.assign(v[0], { + return assign(v[0], { type: 'while', condition: v[1], value: v[2], @@ -1039,7 +1117,7 @@ var grammar = { {"name": "for_block$subexpression$1", "symbols": [{"literal":"in"}]}, {"name": "for_block$subexpression$1", "symbols": [{"literal":"of"}]}, {"name": "for_block", "symbols": [{"literal":"for"}, "__", "identifier", "__", "for_block$subexpression$1", "__", "value", "statements_block"], "postprocess": v => { - return Object.assign(v[0], { + return assign(v[0], { type: 'for_' + v[4][0], condition: v[1], identifier: v[2], @@ -1050,7 +1128,7 @@ var grammar = { {"name": "for_block$subexpression$2", "symbols": [{"literal":"in"}]}, {"name": "for_block$subexpression$2", "symbols": [{"literal":"of"}]}, {"name": "for_block", "symbols": [{"literal":"for"}, "_", {"literal":"("}, "_", "identifier", "__", "for_block$subexpression$2", "__", "value", "_", {"literal":")"}, "statements_block"], "postprocess": v => { - return Object.assign(v[0], { + return assign(v[0], { type: 'for_' + v[6][0], //condition: v[4], identifier: v[4], @@ -1115,7 +1193,7 @@ var grammar = { {"name": "return", "symbols": [{"literal":"return"}, "__nbsp", "value"], "postprocess": returns.value}, {"name": "return", "symbols": [{"literal":"return"}], "postprocess": returns.empty}, {"name": "return", "symbols": [{"literal":"=>"}, "_nbsp", "value"], "postprocess": returns.value}, - {"name": "function_call", "symbols": ["prefixExp", "_nbsp", "arguments"], "postprocess": (v, l, reject) => { + {"name": "function_call", "symbols": ["_base", "_nbsp", "arguments"], "postprocess": (v, l, reject) => { if (v[0].type == 'annonymous_function') return reject return ({ type: 'function_call', @@ -1147,7 +1225,7 @@ var grammar = { argument_type: v[0] ? v[0][0] : 'none', can_be_null: v[0] ? v[0][1] : false, identifier: v[1], - value: v[2] ? v[2][3] : undefined + value: v[2] ? v[2][3] : null }) }, {"name": "argument_type$ebnf$1$subexpression$1$subexpression$1", "symbols": [(lexer.has("keyword") ? {type: "keyword"} : keyword)]}, {"name": "argument_type$ebnf$1$subexpression$1$subexpression$1", "symbols": ["identifier"]}, @@ -1164,6 +1242,7 @@ var grammar = { } let n = v[0].value[0]; if (n.toUpperCase() != n) { + return; throw new SyntaxError(`Argument type must be capitalized at line ${v[0].line}, col ${v[0].col}.`); } return [v[0], v[1]]; @@ -1232,22 +1311,23 @@ var grammar = { {"name": "debugging", "symbols": ["debugging$subexpression$1", "debugging_body"], "postprocess": v => ({ type: 'debugging', method: 'log', - value: v[1] + value: v[1], + line: v[0].line, + col: v[0].col }) }, {"name": "debugging", "symbols": [{"literal":"ERROR"}, "debugging_body"], "postprocess": v => ({ type: 'debugging', method: 'error', - value: v[1] - }) }, - {"name": "debugging", "symbols": [{"literal":"WRITE"}, "debugging_body"], "postprocess": v => ({ - type: 'debugging', - method: 'write', - value: v[1] + value: v[1], + line: v[0].line, + col: v[0].col }) }, {"name": "debugging_body", "symbols": ["__", "value"], "postprocess": v => v[1]}, {"name": "debugging_body", "symbols": ["_nbsp", "arguments"], "postprocess": v => ({ type: 'arguments', - value: v[1] + value: v[1], + line: v[1].line, + col: v[1].col }) }, {"name": "html", "symbols": [{"literal":"#"}, {"literal":"{"}, "_", "value", "_", {"literal":"}"}], "postprocess": html.value_to_string}, {"name": "html$ebnf$1", "symbols": []}, @@ -1323,63 +1403,119 @@ var grammar = { line: v[0].line, col: v[0].col }) }, - {"name": "expression$subexpression$1", "symbols": [{"literal":"+"}, {"literal":"="}]}, - {"name": "expression$subexpression$1", "symbols": [{"literal":"-"}, {"literal":"="}]}, - {"name": "expression$subexpression$1", "symbols": [{"literal":"*"}, {"literal":"="}]}, - {"name": "expression$subexpression$1", "symbols": [{"literal":"/"}, {"literal":"="}]}, - {"name": "expression", "symbols": ["expression", "_nbsp", "expression$subexpression$1", "_", "prefixExp"], "postprocess": (v, l, reject) => { - //if (v[0].type == 'annonymous_function') return reject; - return ({ - type: 'expression', - value: [v[0], assign(v[2][0], {value: v[2][0].value+'='}), v[4]] - }) - } }, - {"name": "expression$subexpression$2", "symbols": [{"literal":"**"}]}, - {"name": "expression$subexpression$2", "symbols": [{"literal":"*"}]}, - {"name": "expression$subexpression$2", "symbols": [{"literal":"+"}]}, - {"name": "expression$subexpression$2", "symbols": [{"literal":"-"}]}, - {"name": "expression$subexpression$2", "symbols": [{"literal":"/"}]}, - {"name": "expression$subexpression$2", "symbols": [{"literal":"%"}]}, - {"name": "expression", "symbols": ["expression", "_nbsp", "expression$subexpression$2", "_", "prefixExp"], "postprocess": (v, l, reject) => { - if (v[0].type == 'annonymous_function') return reject; - return ({ - type: 'expression', - value: [v[0], v[2][0], v[4]] - }) - } }, + {"name": "base", "symbols": ["parenthesized"], "postprocess": id}, + {"name": "base", "symbols": ["Var"], "postprocess": id}, + {"name": "base", "symbols": ["function_call"], "postprocess": id}, + {"name": "base", "symbols": ["string"], "postprocess": id}, + {"name": "base", "symbols": ["bigInt"], "postprocess": id}, + {"name": "base", "symbols": ["number"], "postprocess": id}, + {"name": "base", "symbols": ["convert"], "postprocess": id}, + {"name": "sum$subexpression$1", "symbols": [{"literal":"+"}]}, + {"name": "sum$subexpression$1", "symbols": [{"literal":"-"}]}, + {"name": "sum", "symbols": ["sum", "_nbsp", "sum$subexpression$1", "_", "product"], "postprocess": v => ({ + type: 'sum', + left: v[0], + right: v[4], + operator: v[2][0].value, + value: (function (v) { + if (v[0].type == 'number' && v[4].type == 'number') { + if (v[2][0].value == '+') { + return v[0].value + v[4].value + } else { + return v[0].value - v[4].value + } + } else { + return null + } + })(v), + line: v[0].line, + col: v[0].col + }) }, + {"name": "sum", "symbols": ["product"], "postprocess": id}, + {"name": "product$subexpression$1", "symbols": [{"literal":"*"}]}, + {"name": "product$subexpression$1", "symbols": [{"literal":"/"}]}, + {"name": "product", "symbols": ["product", "_nbsp", "product$subexpression$1", "_", "unary"], "postprocess": v => ({ + type: 'product', + left: v[0], + right: v[4], + operator: v[2][0].value, + value: (function (v) { + if (v[0].type == 'number' && v[4].type == 'number') { + if (v[2][0].value == '*') { + return v[0].value * v[4].value + } else { + return v[0].value / v[4].value + } + } else { + return null + } + })(v), + line: v[0].line, + col: v[0].col + }) }, + {"name": "product", "symbols": ["unary"], "postprocess": id}, + {"name": "unary", "symbols": [{"literal":"-"}, "_nbsp", "unary"], "postprocess": v => { + return { + type: 'number_negative', + value: v[2], + line: v[0].line, + col: v[0].col + }} }, + {"name": "unary", "symbols": ["pow"], "postprocess": id}, + {"name": "pow$subexpression$1", "symbols": [{"literal":"**"}]}, + {"name": "pow$subexpression$1", "symbols": [{"literal":"%"}]}, + {"name": "pow", "symbols": ["pow", "_nbsp", "pow$subexpression$1", "_", "unary"], "postprocess": v => ({ + type: 'pow', + left: v[0], + right: v[4], + operator: v[2][0].value, + value: (function (v) { + if (v[0].type == 'number' && v[4].type == 'number') { + if (v[2][0].value == '**') { + return v[0].value ** v[4].value + } else { + return v[0].value % v[4].value + } + } else { + return null + } + })(v), + line: v[0].line, + col: v[0].col + }) }, + {"name": "pow", "symbols": ["base"], "postprocess": id}, {"name": "expression", "symbols": ["prefixExp"], "postprocess": id}, - {"name": "expression", "symbols": ["convert"], "postprocess": id}, {"name": "value", "symbols": ["condition"], "postprocess": id}, {"name": "_value", "symbols": ["expression"], "postprocess": id}, {"name": "_value", "symbols": [{"literal":"!"}, "_", "prefixExp"], "postprocess": v => { - return {type: 'boolean_reversed', value: v[2] } - } }, - {"name": "_value$subexpression$1", "symbols": [{"literal":"new"}]}, - {"name": "_value$subexpression$1", "symbols": [{"literal":"await"}]}, - {"name": "_value$subexpression$1", "symbols": [{"literal":"yield"}]}, - {"name": "_value", "symbols": ["_value$subexpression$1", "__", "prefixExp"], "postprocess": v => { - return assign(v[0][0], { - type: v[0][0].text, - value: v[2] - }) + return { + type: 'boolean_reversed', + value: v[2], + line: v[0].line, + col: v[0].col + } } }, {"name": "_value", "symbols": ["prefixExp", "__", {"literal":"instanceof"}, "__", "prefixExp"], "postprocess": v => ({ type: 'instanceof', left: v[0], - value: v[4] + value: v[4], + line: v[0].line, + col: v[0].col }) }, {"name": "_value", "symbols": ["myNull"], "postprocess": id}, {"name": "_value", "symbols": ["ternary"], "postprocess": id}, - {"name": "prefixExp", "symbols": ["parenthesized"], "postprocess": id}, - {"name": "prefixExp", "symbols": ["Var"], "postprocess": id}, + {"name": "_value", "symbols": [{"literal":"private"}, "statements_block"], "postprocess": v => { + return { + type: 'private', + value: v[1], + line: v[0].line, + col: v[0].col + } + } }, + {"name": "prefixExp", "symbols": ["sum"], "postprocess": id}, {"name": "prefixExp", "symbols": ["annonymous_function"], "postprocess": id}, - {"name": "prefixExp", "symbols": ["function_call"], "postprocess": id}, {"name": "prefixExp", "symbols": ["regexp"], "postprocess": id}, - {"name": "prefixExp", "symbols": ["allowed_keywords"], "postprocess": id}, {"name": "prefixExp", "symbols": ["array"], "postprocess": id}, - {"name": "prefixExp", "symbols": ["string"], "postprocess": id}, - {"name": "prefixExp", "symbols": ["bigInt"], "postprocess": id}, - {"name": "prefixExp", "symbols": ["number"], "postprocess": id}, {"name": "prefixExp", "symbols": ["object"], "postprocess": id}, {"name": "prefixExp", "symbols": ["boolean"], "postprocess": id}, {"name": "prefixExp", "symbols": ["html"], "postprocess": (v, l, reject) => { @@ -1392,7 +1528,9 @@ var grammar = { //if (v[2].type == 'convert') return reject; return { type: 'expression_with_parenthesis', - value: v[2] + value: v[2], + line: v[0].line, + col: v[0].col } } }, {"name": "_$ebnf$1", "symbols": []}, diff --git a/lib/grammar/lexer/footer.js b/lib/grammar/lexer/footer.js index f84d5e3..7b151e4 100644 --- a/lib/grammar/lexer/footer.js +++ b/lib/grammar/lexer/footer.js @@ -193,7 +193,9 @@ const statement = { offset: v[0].offset, }), debugger: v => assign(v[0], {type: 'debugger'}), - delete: v => assign(v[0], {type: 'delete', value: v[2] }), + delete: v => assign(v[0], {type: 'delete', value: v[1] }), + free: v => assign(v[0], {type: 'free', value: v[1] }), + sleep: v => assign(v[0], {type: 'sleep', value: v[1] }), throw: v => assign(v[0], { type: 'throw', value: v[2] @@ -383,7 +385,7 @@ function Null (v) { // debugger return assign(v[0], { type: 'null', - value: null + value: null, }) } function boolean ([v]) { @@ -401,4 +403,8 @@ function extractPair (kv, output) { const global = {}; Object.join = function (obj) { return {...this, ...obj}; +} +function debug(v) { + debugger; + return v; } \ No newline at end of file diff --git a/lib/grammar/lexer/lexer.js b/lib/grammar/lexer/lexer.js index 13ae3a1..0ee68fc 100644 --- a/lib/grammar/lexer/lexer.js +++ b/lib/grammar/lexer/lexer.js @@ -38,13 +38,39 @@ const lexer = moo.compile({ // } ], //'@constructor': 'constructor', - keyword: ['Boolean', 'Number', 'String', 'Array', 'Object', 'unless', 'than', 'constructor', 'null', 'const', 'print', 'var', 'sizeof', 'Infinity', 'NaN', 'undefined', 'globalThis', 'through', 'THAT', 'DELETE', 'SAVE', 'LOG', 'ERROR', 'WRITE', 'INTO', 'PUSH', 'POP', 'SHIFT', 'UNSHIFT', 'FROM', 'Int', 'Float', 'BEGIN', 'END', 'SET', 'TO', 'typeof', 'instanceof', 'in', 'of', 'type', 'super', 'extends', 'function', 'def', 'this', 'echo', 'export', 'as', 'JSON', 'yield', 'async', 'try', 'catch', 'finally', 'static', 'while', 'if', 'else', 'import', 'from', 'let', 'const', 'null', 'of', 'default', 'caseof', 'switch', 'with', 'for', 'case', 'default', 'elif', 'debugger', 'or', 'and', 'return', 'new', 'is', 'not', 'throw', 'break', 'continue'].map(i => new RegExp(`\\b${i}\\b`)), + keyword: { + // reserved keywords and constants + match: ['void', 'constructor' + , 'null', 'this', 'globalThis', 'undefined', 'Infinity' + , 'THAT', 'DELETE' + , 'SAVE', 'INTO', 'PUSH', 'POP', 'SHIFT', 'UNSHIFT' + , 'FROM', 'BEGIN', 'END', 'instanceof', 'type' + , 'super', 'extends', 'function', 'def', 'echo' + , 'export', 'as', 'yield', 'async', 'try', 'catch', 'finally' + , 'static', 'import', 'from', 'of', 'default', 'caseof' + , 'switch', 'with', 'case', 'default', 'debugger' + , 'return', 'new', 'throw'].map(i => new RegExp(`\\b${i}\\b`)), + // Built in types or Converters + match: ['Boolean', 'Number', 'String', 'Array' + , 'Object', 'Function', 'Int', 'Float', 'JSON'//, 'NaN' + ].map(i => new RegExp(`\\b${i}\\b`)), + // if statement keywords + match: ['unless', 'than', 'if', 'else' + , 'elif', 'or', 'and', 'is', 'not'].map(i => new RegExp(`\\b${i}\\b`)), + // loop keywords + match: ['in', 'of', 'while', 'for' + , 'break', 'continue', 'through'].map(i => new RegExp(`\\b${i}\\b`)), + // variable related keywords + match: ['const', 'var', 'delete', 'free' + , 'SET', 'TO', 'print', 'LOG', 'ERROR' + , 'WRITE', 'sizeof', 'typeof'].map(i => new RegExp(`\\b${i}\\b`)), + }, //regexp: /\/((?![*+?])(?:[^\r\n\[/\\]|\\.|\[(?:[^\r\n\]\\]|\\.)*\])+)\/((?:g(?:im?|mi?)?|i(?:gm?|mg?)?|m(?:gi?|ig?)?)?)/, regexp: /\/(?:\\[ ><\n\/\\])*?\//, - operator: ['+', '-', '/', '**', '*', '%'], + operator: ['+', '-', '/', '**', '*', '%', '^'], // ! is not tested - bigInt: /(?:\+|-)?(?:[0-9]+(?:_?[0-9]+)*)n/, - number: /(?:\+|-)?(?:[0-9]+(?:_?[0-9]+)*)(?:\.[0-9]+)?/, + bigInt: /(?:[0-9]+(?:_?[0-9]+)*)n/, + number: /(?:[0-9]+(?:_?[0-9]+)*)(?:\.[0-9]+)?/, boolean: ['true', 'false'], // 'false': 'false', //'null': 'null', diff --git a/lib/grammar/ne/debugging.ne b/lib/grammar/ne/debugging.ne index 525ed43..ac2ec0b 100644 --- a/lib/grammar/ne/debugging.ne +++ b/lib/grammar/ne/debugging.ne @@ -1,20 +1,28 @@ debugging -> ("LOG" | "print") debugging_body {% v => ({ type: 'debugging', method: 'log', - value: v[1] + value: v[1], + line: v[0].line, + col: v[0].col }) %} | "ERROR" debugging_body {% v => ({ type: 'debugging', method: 'error', - value: v[1] -}) %} -| "WRITE" debugging_body {% v => ({ - type: 'debugging', - method: 'write', - value: v[1] + value: v[1], + line: v[0].line, + col: v[0].col }) %} +#| "WRITE" debugging_body {% v => ({ +# type: 'debugging', +# method: 'write', +# value: v[1], +# line: v[0].line, +# col: v[0].col +#}) %} debugging_body -> __ value {% v => v[1] %} | _nbsp arguments {% v => ({ type: 'arguments', - value: v[1] + value: v[1], + line: v[1].line, + col: v[1].col }) %} \ No newline at end of file diff --git a/lib/grammar/ne/functions.ne b/lib/grammar/ne/functions.ne index 0b9a869..8b9d1da 100644 --- a/lib/grammar/ne/functions.ne +++ b/lib/grammar/ne/functions.ne @@ -16,15 +16,12 @@ annonymous_function -> # async: v[0] ? true : false # } #} %} - #| iife {% id %} - -#iife -> "(" _ annonymous_function _ ")" _ arguments {% functions.iife %} return -> "return" __nbsp value {% returns.value %} | "return" {% returns.empty %} | "=>" _nbsp value {% returns.value %} -function_call -> prefixExp _nbsp arguments {% (v, l, reject) => { +function_call -> _base _nbsp arguments {% (v, l, reject) => { if (v[0].type == 'annonymous_function') return reject return ({ type: 'function_call', @@ -45,7 +42,7 @@ argument_identifier_and_value -> argument_type identifier (_ "=" _ value):? {% v argument_type: v[0] ? v[0][0] : 'none', can_be_null: v[0] ? v[0][1] : false, identifier: v[1], - value: v[2] ? v[2][3] : undefined + value: v[2] ? v[2][3] : null }) %} argument_type -> ((%keyword | identifier) "?":? __):? {% v => { @@ -56,6 +53,7 @@ argument_type -> ((%keyword | identifier) "?":? __):? {% v => { } let n = v[0].value[0]; if (n.toUpperCase() != n) { + return; throw new SyntaxError(`Argument type must be capitalized at line ${v[0].line}, col ${v[0].col}.`); } return [v[0], v[1]]; diff --git a/lib/grammar/ne/if_else.ne b/lib/grammar/ne/if_else.ne index 090422b..587a810 100644 --- a/lib/grammar/ne/if_else.ne +++ b/lib/grammar/ne/if_else.ne @@ -1,13 +1,13 @@ # if else if_block -> "if" statement_condition statements_block {% v => { - return Object.assign(v[0], { + return assign(v[0], { type: 'if', condition: v[1], - value: v[2], + value: v[2] }); } %} | "unless" statement_condition statements_block {% v => { - return Object.assign(v[0], { + return assign(v[0], { type: 'if', condition: v[1], value: v[2], diff --git a/lib/grammar/ne/loops.ne b/lib/grammar/ne/loops.ne index 487fc8a..ec1bd2c 100644 --- a/lib/grammar/ne/loops.ne +++ b/lib/grammar/ne/loops.ne @@ -1,13 +1,13 @@ # loops while_block -> "while" statement_condition statements_block {% v => { - return Object.assign(v[0], { + return assign(v[0], { type: 'while', condition: v[1], value: v[2], }); } %} for_block -> "for" __ identifier __ ("in" | "of") __ value statements_block {% v => { - return Object.assign(v[0], { + return assign(v[0], { type: 'for_' + v[4][0], condition: v[1], identifier: v[2], @@ -16,7 +16,7 @@ for_block -> "for" __ identifier __ ("in" | "of") __ value statements_block {% }); } %} for_block -> "for" _ "(" _ identifier __ ("in" | "of") __ value _ ")" statements_block {% v => { - return Object.assign(v[0], { + return assign(v[0], { type: 'for_' + v[6][0], //condition: v[4], identifier: v[4], diff --git a/lib/grammar/ne/main.ne b/lib/grammar/ne/main.ne index c48a414..6866e23 100644 --- a/lib/grammar/ne/main.ne +++ b/lib/grammar/ne/main.ne @@ -80,7 +80,10 @@ statement -> blocks {% id %} #| "DELETE" __ "THAT" EOL {% v => ({ # type: 'DELETE', #}) %} - | "delete" __ value {% statement.delete %} + #| "delete" __ value {% statement.delete %} + | "delete" arguments {% statement.delete %} + | "free" arguments {% statement.free %} + #| "sleep" arguments {% statement.sleep %} | return {% id %} | "throw" __ value {% statement.throw %} | ("break" | "continue") {% statement.break_continue %} @@ -90,6 +93,7 @@ statement -> blocks {% id %} #| "@include" __ string EOL {% statement.include %} | var_assign {% id %} | value_reassign {% statement.value_reassign %} + #| value_addition {% statement.value_addition %} | value {% statement.value %} blocks -> @@ -102,11 +106,37 @@ blocks -> | for_block {% id %} | try_catch_finally {% id %} | switch_multiple {% id %} + #| "test" statements_block _ "expect" _ value {% v => ({ + # type: 'test', + # value: v[1], + # expect: v[5] + #}) %} -statements_block -> _ "{" statements _ (";" _):? "}" {% v => v[2] %} - | _ "BEGIN" __ statements _ (";" _):? "END" {% v => v[3] %} - | _ ":" _ statement {% v => [v[3]] %} - | _ "do" __ statement {% v => [v[3]] %} +statements_block -> _ "{" statements _ (";" _):? "}" {% v => ({ + type: 'scope', + value: v[2], + line: v[2].line, + col: v[2].col +}) %} + | _ "BEGIN" __ statements _ (";" _):? "END" {% v => ({ + type: 'scope', + value: v[3], + line: v[3].line, + col: v[3].colva +}) %} + | _ ":" _ statement {% v => ({ + type: 'scope', + value: [v[3]], + line: v[3].line, + col: v[3].colva + }) %} + #{% v => [v[3]] %} + | _ "do" __ statement {% v => ({ + type: 'scope', + value: [v[3]], + line: v[3].line, + col: v[3].colva + }) %} ### END statements ### type_declaration -> "type" __ identifier _ arguments_with_types statements_block {% v => { diff --git a/lib/grammar/ne/primitives.ne b/lib/grammar/ne/primitives.ne index 0e09051..2e2fa3a 100644 --- a/lib/grammar/ne/primitives.ne +++ b/lib/grammar/ne/primitives.ne @@ -1,14 +1,23 @@ -atom -> number {% id %} - | string {% id %} - | myNull {% id %} - | "true" {% id %} - | "false" {% id %} - | parenthesized {% id %} - | prefixExp {% id %} - # ! function definition is missing +#atom -> number {% id %} +# | string {% id %} +# | myNull {% id %} +# | "true" {% id %} +# | "false" {% id %} +# | parenthesized {% id %} +# | prefixExp {% id %} +# # ! function definition is missing # base line -identifier -> %identifier {% id %} +identifier -> %identifier {% (v, l, reject) => { + if (v[0].type == 'null' || + ['Infinity', 'this', 'globalThis', 'NaN' + , 'Boolean', 'Object', 'Array', 'String', 'Number', 'JSON' + ].includes(v[0].value)) { + return reject; + } + return v[0] +} %} + | allowed_keywords {% id %} allowed_keywords -> "Infinity" {% id %} @@ -21,13 +30,17 @@ allowed_keywords -> | "String" {% id %} | "Number" {% id %} | "JSON" {% id %} + #| "null" {% id %} + #| myNull {% id %} convert -> prefixExp __ "as" __ convert_type {% (v, l, reject) => { //if (v[0] && !v[6] || !v[0] && v[6]) return reject return { type: 'convert', value: v[0], - convert_type: v[4] + convert_type: v[4], + line: v[0].line, + col: v[0].col } } %} @@ -49,6 +62,7 @@ convert_type -> ("JSON" | "String" | "Number" | "Boolean" | "Object" | "Float" | # objects pair -> ("async" __):? key _ arguments_with_types statements_block {% object.es6_key_value %} | key _ ":" _ value {% v => [v[0], v[4]] %} + | key {% v => [v[0], v[0]] %} key -> string {% id %} | identifier {% id %} @@ -73,7 +87,7 @@ boolean -> (%boolean) {% boolean %} # strings string -> string_concat {% id %} # | string _ "[" _ number _ ":" ":":? _ number _ "]" {% string.slice %} - | number "px" {% string.px %} + #| number "px" {% string.px %} #| "typeof" __ prefixExp {% v => { # return { # type: 'typeof', @@ -94,13 +108,13 @@ string -> string_concat {% id %} bigInt -> %bigInt {% number.bigInt %} number -> %number {% number.float %} - | ("-") _ value {% v => ({ - type: 'additive', - sign: v[0][0].value, - value: v[2], - line: v[0].line, - col: v[0].col - }) %} + #| ("-") _ value {% v => ({ + # type: 'additive', + # sign: v[0][0].value, + # value: v[2], + # line: v[0].line, + # col: v[0].col + #}) %} #| "sizeof" __ prefixExp {% v => ({ # type: 'sizeof', # value: v[2], diff --git a/lib/grammar/ne/retraction.ne b/lib/grammar/ne/retraction.ne index 72537fa..4dc7cba 100644 --- a/lib/grammar/ne/retraction.ne +++ b/lib/grammar/ne/retraction.ne @@ -1,28 +1,41 @@ -Var -> identifier {% id %} +_base -> base {% id %} + | array {% id %} + | regexp {% id %} + | object {% id %} + +Var -> # ! needs more tests, though works - | prefixExp _nbsp "[" _ "]" {% v => ({ + _base _nbsp "[" _ "]" {% v => ({ type: 'item_retraction_last', //arguments: v[7] ? v[7][1] : null, from: v[0], + line: v[0].line, + col: v[0].col //value: v[4] //identifier: v[0].value }) %} - | prefixExp _ "[" (_ value) _ ":" (_ value):? (_ ":" _ value):? _ "]" {% array.slice %} - | prefixExp _nbsp "[" _ value _ "]" {% v => ({ + | _base _ "[" (_ value) _ ":" (_ value):? (_ ":" _ value):? _ "]" {% array.slice %} + | _base _nbsp "[" _ value _ "]" {% v => ({ type: 'item_retraction', //arguments: v[7] ? v[7][1] : null, from: v[0], - value: v[4] + value: v[4], + line: v[0].line, + col: v[0].col //identifier: v[0].value }) %} - | prefixExp _ "." _ (%keyword | identifier) {% (v, l, reject) => { + | + _base _ "." _ (%keyword | identifier) {% (v, l, reject) => { if (v[0].type == 'annonymous_function') return reject return { type: 'dot_retraction_v2', from: v[0], value: v[4][0], + line: v[0].line, + col: v[0].col } } %} + | identifier {% id %} # ! removed all for now, code above already replaces this #object_retraction -> single_retraction (_ "." _ right_side_retraction {% v => v[3] %}):+ {% v => ({ diff --git a/lib/grammar/ne/value.ne b/lib/grammar/ne/value.ne index 98cec3c..69a0156 100644 --- a/lib/grammar/ne/value.ne +++ b/lib/grammar/ne/value.ne @@ -1,20 +1,100 @@ # expressions + +base -> parenthesized {% id %} + #| annonymous_function {% id %} + #| regexp {% id %} + | Var {% id %} + | function_call {% id %} + #| allowed_keywords {% id %} + | string {% id %} + | bigInt {% id %} + | number {% id %} + #| array {% id %} + | convert {% id %} + #| object {% id %} + #| boolean {% id %} + +sum -> sum _nbsp ("+" | "-") _ product {% v => ({ + type: 'sum', + left: v[0], + right: v[4], + operator: v[2][0].value, + value: (function (v) { + if (v[0].type == 'number' && v[4].type == 'number') { + if (v[2][0].value == '+') { + return v[0].value + v[4].value + } else { + return v[0].value - v[4].value + } + } else { + return null + } + })(v), + line: v[0].line, + col: v[0].col +}) %} + | product {% id %} + +product -> product _nbsp ("*" | "/") _ unary {% v => ({ + type: 'product', + left: v[0], + right: v[4], + operator: v[2][0].value, + value: (function (v) { + if (v[0].type == 'number' && v[4].type == 'number') { + if (v[2][0].value == '*') { + return v[0].value * v[4].value + } else { + return v[0].value / v[4].value + } + } else { + return null + } + })(v), + line: v[0].line, + col: v[0].col +}) %} + | unary {% id %} + +unary -> "-" _nbsp unary {% v => { + return { + type: 'number_negative', + value: v[2], + line: v[0].line, + col: v[0].col +}} %} + | pow {% id %} + +pow -> pow _nbsp ("**" | "%") _ unary {% v => ({ + type: 'pow', + left: v[0], + right: v[4], + operator: v[2][0].value, + value: (function (v) { + if (v[0].type == 'number' && v[4].type == 'number') { + if (v[2][0].value == '**') { + return v[0].value ** v[4].value + } else { + return v[0].value % v[4].value + } + } else { + return null + } + })(v), + line: v[0].line, + col: v[0].col +}) %} + | base {% id %} + expression -> - expression _nbsp ("+" "=" | "-" "=" | "*" "=" | "/" "=") _ prefixExp {% (v, l, reject) => { - //if (v[0].type == 'annonymous_function') return reject; - return ({ - type: 'expression', - value: [v[0], assign(v[2][0], {value: v[2][0].value+'='}), v[4]] - }) - } %} - | expression _nbsp ("**" | "*" | "+" | "-" | "/" | "%") _ prefixExp {% (v, l, reject) => { - if (v[0].type == 'annonymous_function') return reject; - return ({ - type: 'expression', - value: [v[0], v[2][0], v[4]] - }) - } %} - | prefixExp {% id %} + #| expression _nbsp ("**" | "*" | "+" | "-" | "/" | "%") _ prefixExp {% (v, l, reject) => { + # if (v[0].type == 'annonymous_function') return reject; + # return ({ + # type: 'expression', + # value: [v[0], v[2][0], v[4]] + # }) + #} %} + prefixExp {% id %} # ! removed for now #| "(" _ expression _ ")" (_ arguments):? {% v => ({ # type: 'expression_with_parenthesis', @@ -26,26 +106,33 @@ expression -> #| array_interactions {% id %} # ! removed for now #| "THAT" {% v => ({type: 'USE', line: v[0].line, col: v[0].col}) %} - | convert {% id %} value -> condition {% id %} #| _value {% id %} _value -> expression {% id %} - | "!" _ prefixExp {% v => { - return {type: 'boolean_reversed', value: v[2] } + | + "!" _ prefixExp {% v => { + return { + type: 'boolean_reversed', + value: v[2], + line: v[0].line, + col: v[0].col + } } %} - | ("new" | "await" | "yield") __ prefixExp {% v => { - return assign(v[0][0], { - type: v[0][0].text, - value: v[2] - }) - } %} + #| ("new" | "await" | "yield") __ prefixExp {% v => { + # return assign(v[0][0], { + # type: v[0][0].text, + # value: v[2] + # }) + #} %} #| "@text" __ value {% html.value_to_string %} | prefixExp __ "instanceof" __ prefixExp {% v => ({ type: 'instanceof', left: v[0], - value: v[4] + value: v[4], + line: v[0].line, + col: v[0].col }) %} # | #| condition {% id %} @@ -55,18 +142,28 @@ _value -> # | ("this" | identifier | html | object | number | function_call) _ "." _ ("this" | identifier | html | object | number | function_call) {% v => v %} | myNull {% id %} | ternary {% id %} + | "private" statements_block {% v => { + return { + type: 'private', + value: v[1], + line: v[0].line, + col: v[0].col + } + } %} # | annonymous_function {% id %} -prefixExp -> parenthesized {% id %} - | Var {% id %} +prefixExp -> +#parenthesized {% id %} + sum {% id %} + #| Var {% id %} | annonymous_function {% id %} - | function_call {% id %} + #| function_call {% id %} | regexp {% id %} - | allowed_keywords {% id %} + #| allowed_keywords {% id %} | array {% id %} - | string {% id %} - | bigInt {% id %} - | number {% id %} + #| string {% id %} + #| bigInt {% id %} + #| number {% id %} | object {% id %} | boolean {% id %} #| "+" _ prefixExp {% v => ({ @@ -84,6 +181,8 @@ parenthesized -> "(" _ value _ ")" {% (v, l, reject) => { //if (v[2].type == 'convert') return reject; return { type: 'expression_with_parenthesis', - value: v[2] + value: v[2], + line: v[0].line, + col: v[0].col } } %} diff --git a/lib/grammar/ne/variables.ne b/lib/grammar/ne/variables.ne index 345cb28..db33da0 100644 --- a/lib/grammar/ne/variables.ne +++ b/lib/grammar/ne/variables.ne @@ -1,5 +1,7 @@ +left_assign -> Var {% id %} + | function_call {% id %} # value assignment -value_reassign -> prefixExp _ "=" _ (value) {% v => { +value_reassign -> left_assign _ "=" _ (value) {% v => { return { type: 'var_reassign', identifier: v[0], @@ -19,6 +21,7 @@ value_reassign -> prefixExp _ "=" _ (value) {% v => { offset: v[0].offset } } %} + | value_addition {% id %} var_assign -> ("let" __ | "const" __ | "\\") var_assign_list {% vars.assign %} | "ASSIGN" _ (switch | value) _ "TO" _ identifier {% v => { @@ -31,7 +34,9 @@ var_assign -> ("let" __ | "const" __ | "\\") var_assign_list {% vars.assign %} value: { type: 'var_assign_group', identifier: v[6], - value: [v[2][0]] + value: [v[2][0]], + line: v[2][0].line, + col: v[2][0].col }, offset: v[0].offset } @@ -50,10 +55,10 @@ var_reassign -> identifier _ "=" _ value {% v => { } } %} | identifier {% v => ({ - type: 'identifier', - value: v[0], - line: v[0].line, - col: v[0].col, + type: 'identifier', + value: v[0], + line: v[0].line, + col: v[0].col, }) %} | "SET" _ identifier _ "TO" _ (switch | value) {% v => { return { @@ -65,3 +70,15 @@ var_reassign -> identifier _ "=" _ value {% v => { offset: v[0].offset } } %} + +value_addition -> + prefixExp _nbsp ("+" "=" | "-" "=" | "*" "=" | "/" "=") _ sum {% (v, l, reject) => { + if (v[0].type == 'string' || v[0].type == 'number' || v[0].type == 'boolean' || v[0].type == 'null') { + throw new Error(`Unexpected assignment at line ${v[2][0].line}, col ${v[2][0].col}`) + } + // console.log(v[4]) + return ({ + type: 'expression_short_equation', + value: [v[0], assign(v[2][0], {value: v[2][0].value}), v[4]] + }) + } %} \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index ffe7ab6..9e33ff9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,20 +1,90 @@ { - "name": "basescript", - "version": "1.0.3", + "name": "basescript.js", + "version": "0.1.32", "lockfileVersion": 1, "requires": true, "dependencies": { - "@sindresorhus/is": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", - "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==" + "@node-minify/core": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@node-minify/core/-/core-7.0.0.tgz", + "integrity": "sha512-0EKr4hOfXRgSFWaqcr7S+1H89/svJnYhFw3U2gWn01CxZraPLDbk/5bySi4QzEhzBWxEkq8cfsJa1gKiWbuV+Q==", + "requires": { + "@node-minify/utils": "^7.0.0", + "globby": "11.0.4", + "mkdirp": "1.0.4" + }, + "dependencies": { + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" + } + } }, - "@szmarczak/http-timer": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", - "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", + "@node-minify/google-closure-compiler": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@node-minify/google-closure-compiler/-/google-closure-compiler-7.0.0.tgz", + "integrity": "sha512-oMb0h1vBZhwYwaRb711Q0b00aFkGuZxymd10d3IYqFbH9vNwGwoa3FSjTUsQRcWUEbfpzDj9GAMfFn/iOkOsDw==", + "requires": { + "@node-minify/utils": "^7.0.0", + "google-closure-compiler-java": "20220719.0.0" + } + }, + "@node-minify/uglify-js": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@node-minify/uglify-js/-/uglify-js-7.0.0.tgz", + "integrity": "sha512-oIBEN27NuxTFySCytgUiE9HK35OS9+A7crHJazVEIclvp1ZCzMB62vc7tjRmjUhZ4YdvJ1u9BPupT5VTQCV7Ww==", + "requires": { + "@node-minify/utils": "^7.0.0", + "uglify-js": "3.16.3" + }, + "dependencies": { + "uglify-js": { + "version": "3.16.3", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.16.3.tgz", + "integrity": "sha512-uVbFqx9vvLhQg0iBaau9Z75AxWJ8tqM9AV890dIZCLApF4rTcyHwmAvLeEdYRs+BzYWu8Iw81F79ah0EfTXbaw==" + } + } + }, + "@node-minify/utils": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@node-minify/utils/-/utils-7.0.0.tgz", + "integrity": "sha512-Ujpl66BEB1TpinmVyT9PAsKhK3+/s2CcLqEx1kllbDp0ByaUIRVX30eEAPJ1xleW6yEQz502LghcJvRSrb2hEg==", + "requires": { + "gzip-size": "6.0.0" + }, + "dependencies": { + "gzip-size": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-6.0.0.tgz", + "integrity": "sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==", + "requires": { + "duplexer": "^0.1.2" + } + } + } + }, + "@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "requires": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + } + }, + "@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==" + }, + "@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", "requires": { - "defer-to-connect": "^1.0.1" + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" } }, "abbrev": { @@ -22,13 +92,10 @@ "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" }, - "ansi-align": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", - "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", - "requires": { - "string-width": "^4.1.0" - } + "acorn": { + "version": "5.7.4", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.4.tgz", + "integrity": "sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg==" }, "ansi-regex": { "version": "5.0.1", @@ -52,6 +119,430 @@ "picomatch": "^2.0.4" } }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==" + }, + "babel-code-frame": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", + "integrity": "sha512-XqYMR2dfdGMW+hd0IUZ2PwK+fGeFkOxZJ0wY+JaQAHzt1Zx8LcvpiZD2NiGkEG8qx0CfkAOr5xt76d1e8vG90g==", + "requires": { + "chalk": "^1.1.3", + "esutils": "^2.0.2", + "js-tokens": "^3.0.2" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==" + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==" + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==" + } + } + }, + "babel-core": { + "version": "6.26.3", + "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-6.26.3.tgz", + "integrity": "sha512-6jyFLuDmeidKmUEb3NM+/yawG0M2bDZ9Z1qbZP59cyHLz8kYGKYwpJP0UwUKKUiTRNvxfLesJnTedqczP7cTDA==", + "requires": { + "babel-code-frame": "^6.26.0", + "babel-generator": "^6.26.0", + "babel-helpers": "^6.24.1", + "babel-messages": "^6.23.0", + "babel-register": "^6.26.0", + "babel-runtime": "^6.26.0", + "babel-template": "^6.26.0", + "babel-traverse": "^6.26.0", + "babel-types": "^6.26.0", + "babylon": "^6.18.0", + "convert-source-map": "^1.5.1", + "debug": "^2.6.9", + "json5": "^0.5.1", + "lodash": "^4.17.4", + "minimatch": "^3.0.4", + "path-is-absolute": "^1.0.1", + "private": "^0.1.8", + "slash": "^1.0.0", + "source-map": "^0.5.7" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + } + } + }, + "babel-generator": { + "version": "6.26.1", + "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.1.tgz", + "integrity": "sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==", + "requires": { + "babel-messages": "^6.23.0", + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "detect-indent": "^4.0.0", + "jsesc": "^1.3.0", + "lodash": "^4.17.4", + "source-map": "^0.5.7", + "trim-right": "^1.0.1" + } + }, + "babel-helper-evaluate-path": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/babel-helper-evaluate-path/-/babel-helper-evaluate-path-0.5.0.tgz", + "integrity": "sha512-mUh0UhS607bGh5wUMAQfOpt2JX2ThXMtppHRdRU1kL7ZLRWIXxoV2UIV1r2cAeeNeU1M5SB5/RSUgUxrK8yOkA==" + }, + "babel-helper-flip-expressions": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/babel-helper-flip-expressions/-/babel-helper-flip-expressions-0.4.3.tgz", + "integrity": "sha512-rSrkRW4YQ2ETCWww9gbsWk4N0x1BOtln349Tk0dlCS90oT68WMLyGR7WvaMp3eAnsVrCqdUtC19lo1avyGPejA==" + }, + "babel-helper-is-nodes-equiv": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/babel-helper-is-nodes-equiv/-/babel-helper-is-nodes-equiv-0.0.1.tgz", + "integrity": "sha512-ri/nsMFVRqXn7IyT5qW4/hIAGQxuYUFHa3qsxmPtbk6spZQcYlyDogfVpNm2XYOslH/ULS4VEJGUqQX5u7ACQw==" + }, + "babel-helper-is-void-0": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/babel-helper-is-void-0/-/babel-helper-is-void-0-0.4.3.tgz", + "integrity": "sha512-07rBV0xPRM3TM5NVJEOQEkECX3qnHDjaIbFvWYPv+T1ajpUiVLiqTfC+MmiZxY5KOL/Ec08vJdJD9kZiP9UkUg==" + }, + "babel-helper-mark-eval-scopes": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/babel-helper-mark-eval-scopes/-/babel-helper-mark-eval-scopes-0.4.3.tgz", + "integrity": "sha512-+d/mXPP33bhgHkdVOiPkmYoeXJ+rXRWi7OdhwpyseIqOS8CmzHQXHUp/+/Qr8baXsT0kjGpMHHofHs6C3cskdA==" + }, + "babel-helper-remove-or-void": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/babel-helper-remove-or-void/-/babel-helper-remove-or-void-0.4.3.tgz", + "integrity": "sha512-eYNceYtcGKpifHDir62gHJadVXdg9fAhuZEXiRQnJJ4Yi4oUTpqpNY//1pM4nVyjjDMPYaC2xSf0I+9IqVzwdA==" + }, + "babel-helper-to-multiple-sequence-expressions": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/babel-helper-to-multiple-sequence-expressions/-/babel-helper-to-multiple-sequence-expressions-0.5.0.tgz", + "integrity": "sha512-m2CvfDW4+1qfDdsrtf4dwOslQC3yhbgyBFptncp4wvtdrDHqueW7slsYv4gArie056phvQFhT2nRcGS4bnm6mA==" + }, + "babel-helpers": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helpers/-/babel-helpers-6.24.1.tgz", + "integrity": "sha512-n7pFrqQm44TCYvrCDb0MqabAF+JUBq+ijBvNMUxpkLjJaAu32faIexewMumrH5KLLJ1HDyT0PTEqRyAe/GwwuQ==", + "requires": { + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" + } + }, + "babel-messages": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", + "integrity": "sha512-Bl3ZiA+LjqaMtNYopA9TYE9HP1tQ+E5dLxE0XrAzcIJeK2UqF0/EaqXwBn9esd4UmTfEab+P+UYQ1GnioFIb/w==", + "requires": { + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-minify-builtins": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/babel-plugin-minify-builtins/-/babel-plugin-minify-builtins-0.5.0.tgz", + "integrity": "sha512-wpqbN7Ov5hsNwGdzuzvFcjgRlzbIeVv1gMIlICbPj0xkexnfoIDe7q+AZHMkQmAE/F9R5jkrB6TLfTegImlXag==" + }, + "babel-plugin-minify-constant-folding": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/babel-plugin-minify-constant-folding/-/babel-plugin-minify-constant-folding-0.5.0.tgz", + "integrity": "sha512-Vj97CTn/lE9hR1D+jKUeHfNy+m1baNiJ1wJvoGyOBUx7F7kJqDZxr9nCHjO/Ad+irbR3HzR6jABpSSA29QsrXQ==", + "requires": { + "babel-helper-evaluate-path": "^0.5.0" + } + }, + "babel-plugin-minify-dead-code-elimination": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/babel-plugin-minify-dead-code-elimination/-/babel-plugin-minify-dead-code-elimination-0.5.2.tgz", + "integrity": "sha512-krq9Lwi0QIzyAlcNBXTL4usqUvevB4BzktdEsb8srcXC1AaYqRJiAQw6vdKdJSaXbz6snBvziGr6ch/aoRCfpA==", + "requires": { + "babel-helper-evaluate-path": "^0.5.0", + "babel-helper-mark-eval-scopes": "^0.4.3", + "babel-helper-remove-or-void": "^0.4.3", + "lodash": "^4.17.11" + } + }, + "babel-plugin-minify-flip-comparisons": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/babel-plugin-minify-flip-comparisons/-/babel-plugin-minify-flip-comparisons-0.4.3.tgz", + "integrity": "sha512-8hNwgLVeJzpeLVOVArag2DfTkbKodzOHU7+gAZ8mGBFGPQHK6uXVpg3jh5I/F6gfi5Q5usWU2OKcstn1YbAV7A==", + "requires": { + "babel-helper-is-void-0": "^0.4.3" + } + }, + "babel-plugin-minify-guarded-expressions": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/babel-plugin-minify-guarded-expressions/-/babel-plugin-minify-guarded-expressions-0.4.4.tgz", + "integrity": "sha512-RMv0tM72YuPPfLT9QLr3ix9nwUIq+sHT6z8Iu3sLbqldzC1Dls8DPCywzUIzkTx9Zh1hWX4q/m9BPoPed9GOfA==", + "requires": { + "babel-helper-evaluate-path": "^0.5.0", + "babel-helper-flip-expressions": "^0.4.3" + } + }, + "babel-plugin-minify-infinity": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/babel-plugin-minify-infinity/-/babel-plugin-minify-infinity-0.4.3.tgz", + "integrity": "sha512-X0ictxCk8y+NvIf+bZ1HJPbVZKMlPku3lgYxPmIp62Dp8wdtbMLSekczty3MzvUOlrk5xzWYpBpQprXUjDRyMA==" + }, + "babel-plugin-minify-mangle-names": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/babel-plugin-minify-mangle-names/-/babel-plugin-minify-mangle-names-0.5.1.tgz", + "integrity": "sha512-8KMichAOae2FHlipjNDTo2wz97MdEb2Q0jrn4NIRXzHH7SJ3c5TaNNBkeTHbk9WUsMnqpNUx949ugM9NFWewzw==", + "requires": { + "babel-helper-mark-eval-scopes": "^0.4.3" + } + }, + "babel-plugin-minify-numeric-literals": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/babel-plugin-minify-numeric-literals/-/babel-plugin-minify-numeric-literals-0.4.3.tgz", + "integrity": "sha512-5D54hvs9YVuCknfWywq0eaYDt7qYxlNwCqW9Ipm/kYeS9gYhJd0Rr/Pm2WhHKJ8DC6aIlDdqSBODSthabLSX3A==" + }, + "babel-plugin-minify-replace": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/babel-plugin-minify-replace/-/babel-plugin-minify-replace-0.5.0.tgz", + "integrity": "sha512-aXZiaqWDNUbyNNNpWs/8NyST+oU7QTpK7J9zFEFSA0eOmtUNMU3fczlTTTlnCxHmq/jYNFEmkkSG3DDBtW3Y4Q==" + }, + "babel-plugin-minify-simplify": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/babel-plugin-minify-simplify/-/babel-plugin-minify-simplify-0.5.1.tgz", + "integrity": "sha512-OSYDSnoCxP2cYDMk9gxNAed6uJDiDz65zgL6h8d3tm8qXIagWGMLWhqysT6DY3Vs7Fgq7YUDcjOomhVUb+xX6A==", + "requires": { + "babel-helper-evaluate-path": "^0.5.0", + "babel-helper-flip-expressions": "^0.4.3", + "babel-helper-is-nodes-equiv": "^0.0.1", + "babel-helper-to-multiple-sequence-expressions": "^0.5.0" + } + }, + "babel-plugin-minify-type-constructors": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/babel-plugin-minify-type-constructors/-/babel-plugin-minify-type-constructors-0.4.3.tgz", + "integrity": "sha512-4ADB0irJ/6BeXWHubjCJmrPbzhxDgjphBMjIjxCc25n4NGJ00NsYqwYt+F/OvE9RXx8KaSW7cJvp+iZX436tnQ==", + "requires": { + "babel-helper-is-void-0": "^0.4.3" + } + }, + "babel-plugin-transform-inline-consecutive-adds": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-inline-consecutive-adds/-/babel-plugin-transform-inline-consecutive-adds-0.4.3.tgz", + "integrity": "sha512-8D104wbzzI5RlxeVPYeQb9QsUyepiH1rAO5hpPpQ6NPRgQLpIVwkS/Nbx944pm4K8Z+rx7CgjPsFACz/VCBN0Q==" + }, + "babel-plugin-transform-member-expression-literals": { + "version": "6.9.4", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-member-expression-literals/-/babel-plugin-transform-member-expression-literals-6.9.4.tgz", + "integrity": "sha512-Xq9/Rarpj+bjOZSl1nBbZYETsNEDDJSrb6Plb1sS3/36FukWFLLRysgecva5KZECjUJTrJoQqjJgtWToaflk5Q==" + }, + "babel-plugin-transform-merge-sibling-variables": { + "version": "6.9.5", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-merge-sibling-variables/-/babel-plugin-transform-merge-sibling-variables-6.9.5.tgz", + "integrity": "sha512-xj/KrWi6/uP+DrD844h66Qh2cZN++iugEIgH8QcIxhmZZPNP6VpOE9b4gP2FFW39xDAY43kCmYMM6U0QNKN8fw==" + }, + "babel-plugin-transform-minify-booleans": { + "version": "6.9.4", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-minify-booleans/-/babel-plugin-transform-minify-booleans-6.9.4.tgz", + "integrity": "sha512-9pW9ePng6DZpzGPalcrULuhSCcauGAbn8AeU3bE34HcDkGm8Ldt0ysjGkyb64f0K3T5ilV4mriayOVv5fg0ASA==" + }, + "babel-plugin-transform-property-literals": { + "version": "6.9.4", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-property-literals/-/babel-plugin-transform-property-literals-6.9.4.tgz", + "integrity": "sha512-Pf8JHTjTPxecqVyL6KSwD/hxGpoTZjiEgV7nCx0KFQsJYM0nuuoCajbg09KRmZWeZbJ5NGTySABYv8b/hY1eEA==", + "requires": { + "esutils": "^2.0.2" + } + }, + "babel-plugin-transform-regexp-constructors": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-regexp-constructors/-/babel-plugin-transform-regexp-constructors-0.4.3.tgz", + "integrity": "sha512-JjymDyEyRNhAoNFp09y/xGwYVYzT2nWTGrBrWaL6eCg2m+B24qH2jR0AA8V8GzKJTgC8NW6joJmc6nabvWBD/g==" + }, + "babel-plugin-transform-remove-console": { + "version": "6.9.4", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-remove-console/-/babel-plugin-transform-remove-console-6.9.4.tgz", + "integrity": "sha512-88blrUrMX3SPiGkT1GnvVY8E/7A+k6oj3MNvUtTIxJflFzXTw1bHkuJ/y039ouhFMp2prRn5cQGzokViYi1dsg==" + }, + "babel-plugin-transform-remove-debugger": { + "version": "6.9.4", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-remove-debugger/-/babel-plugin-transform-remove-debugger-6.9.4.tgz", + "integrity": "sha512-Kd+eTBYlXfwoFzisburVwrngsrz4xh9I0ppoJnU/qlLysxVBRgI4Pj+dk3X8F5tDiehp3hhP8oarRMT9v2Z3lw==" + }, + "babel-plugin-transform-remove-undefined": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-remove-undefined/-/babel-plugin-transform-remove-undefined-0.5.0.tgz", + "integrity": "sha512-+M7fJYFaEE/M9CXa0/IRkDbiV3wRELzA1kKQFCJ4ifhrzLKn/9VCCgj9OFmYWwBd8IB48YdgPkHYtbYq+4vtHQ==", + "requires": { + "babel-helper-evaluate-path": "^0.5.0" + } + }, + "babel-plugin-transform-simplify-comparison-operators": { + "version": "6.9.4", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-simplify-comparison-operators/-/babel-plugin-transform-simplify-comparison-operators-6.9.4.tgz", + "integrity": "sha512-GLInxhGAQWJ9YIdjwF6dAFlmh4U+kN8pL6Big7nkDzHoZcaDQOtBm28atEhQJq6m9GpAovbiGEShKqXv4BSp0A==" + }, + "babel-plugin-transform-undefined-to-void": { + "version": "6.9.4", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-undefined-to-void/-/babel-plugin-transform-undefined-to-void-6.9.4.tgz", + "integrity": "sha512-D2UbwxawEY1xVc9svYAUZQM2xarwSNXue2qDIx6CeV2EuMGaes/0su78zlIDIAgE7BvnMw4UpmSo9fDy+znghg==" + }, + "babel-preset-minify": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/babel-preset-minify/-/babel-preset-minify-0.5.0.tgz", + "integrity": "sha512-xj1s9Mon+RFubH569vrGCayA9Fm2GMsCgDRm1Jb8SgctOB7KFcrVc2o8K3YHUyMz+SWP8aea75BoS8YfsXXuiA==", + "requires": { + "babel-plugin-minify-builtins": "^0.5.0", + "babel-plugin-minify-constant-folding": "^0.5.0", + "babel-plugin-minify-dead-code-elimination": "^0.5.0", + "babel-plugin-minify-flip-comparisons": "^0.4.3", + "babel-plugin-minify-guarded-expressions": "^0.4.3", + "babel-plugin-minify-infinity": "^0.4.3", + "babel-plugin-minify-mangle-names": "^0.5.0", + "babel-plugin-minify-numeric-literals": "^0.4.3", + "babel-plugin-minify-replace": "^0.5.0", + "babel-plugin-minify-simplify": "^0.5.0", + "babel-plugin-minify-type-constructors": "^0.4.3", + "babel-plugin-transform-inline-consecutive-adds": "^0.4.3", + "babel-plugin-transform-member-expression-literals": "^6.9.4", + "babel-plugin-transform-merge-sibling-variables": "^6.9.4", + "babel-plugin-transform-minify-booleans": "^6.9.4", + "babel-plugin-transform-property-literals": "^6.9.4", + "babel-plugin-transform-regexp-constructors": "^0.4.3", + "babel-plugin-transform-remove-console": "^6.9.4", + "babel-plugin-transform-remove-debugger": "^6.9.4", + "babel-plugin-transform-remove-undefined": "^0.5.0", + "babel-plugin-transform-simplify-comparison-operators": "^6.9.4", + "babel-plugin-transform-undefined-to-void": "^6.9.4", + "lodash.isplainobject": "^4.0.6" + } + }, + "babel-register": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-register/-/babel-register-6.26.0.tgz", + "integrity": "sha512-veliHlHX06wjaeY8xNITbveXSiI+ASFnOqvne/LaIJIqOWi2Ogmj91KOugEz/hoh/fwMhXNBJPCv8Xaz5CyM4A==", + "requires": { + "babel-core": "^6.26.0", + "babel-runtime": "^6.26.0", + "core-js": "^2.5.0", + "home-or-tmp": "^2.0.0", + "lodash": "^4.17.4", + "mkdirp": "^0.5.1", + "source-map-support": "^0.4.15" + } + }, + "babel-runtime": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", + "integrity": "sha512-ITKNuq2wKlW1fJg9sSW52eepoYgZBggvOAHC0u/CYu/qxQ9EVzThCgR69BnSXLHjy2f7SY5zaQ4yt7H9ZVxY2g==", + "requires": { + "core-js": "^2.4.0", + "regenerator-runtime": "^0.11.0" + } + }, + "babel-template": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz", + "integrity": "sha512-PCOcLFW7/eazGUKIoqH97sO9A2UYMahsn/yRQ7uOk37iutwjq7ODtcTNF+iFDSHNfkctqsLRjLP7URnOx0T1fg==", + "requires": { + "babel-runtime": "^6.26.0", + "babel-traverse": "^6.26.0", + "babel-types": "^6.26.0", + "babylon": "^6.18.0", + "lodash": "^4.17.4" + } + }, + "babel-traverse": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz", + "integrity": "sha512-iSxeXx7apsjCHe9c7n8VtRXGzI2Bk1rBSOJgCCjfyXb6v1aCqE1KSEpq/8SXuVN8Ka/Rh1WDTF0MDzkvTA4MIA==", + "requires": { + "babel-code-frame": "^6.26.0", + "babel-messages": "^6.23.0", + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "babylon": "^6.18.0", + "debug": "^2.6.8", + "globals": "^9.18.0", + "invariant": "^2.2.2", + "lodash": "^4.17.4" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + } + } + }, + "babel-types": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", + "integrity": "sha512-zhe3V/26rCWsEZK8kZN+HaQj5yQ1CilTObixFzKW1UWjqG7618Twz6YEsCnjfg5gBcJh02DrpCkS9h98ZqDY+g==", + "requires": { + "babel-runtime": "^6.26.0", + "esutils": "^2.0.2", + "lodash": "^4.17.4", + "to-fast-properties": "^1.0.3" + } + }, + "babylon": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", + "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==" + }, "balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", @@ -62,21 +553,6 @@ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==" }, - "boxen": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz", - "integrity": "sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==", - "requires": { - "ansi-align": "^3.0.0", - "camelcase": "^6.2.0", - "chalk": "^4.1.0", - "cli-boxes": "^2.2.1", - "string-width": "^4.2.2", - "type-fest": "^0.20.2", - "widest-line": "^3.1.0", - "wrap-ansi": "^7.0.0" - } - }, "brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -94,68 +570,78 @@ "fill-range": "^7.0.1" } }, - "cacheable-request": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", - "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", + "buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" + }, + "butternut": { + "version": "0.4.6", + "resolved": "https://registry.npmjs.org/butternut/-/butternut-0.4.6.tgz", + "integrity": "sha512-UxoiMkH8l4qO1RVB6ZpU9HcLatj16Vts+B/6/XQxRea52UYU/w23a0W0nioQ85mIHlZP8pK8l6XQW/F/01G/zA==", "requires": { - "clone-response": "^1.0.2", - "get-stream": "^5.1.0", - "http-cache-semantics": "^4.0.0", - "keyv": "^3.0.0", - "lowercase-keys": "^2.0.0", - "normalize-url": "^4.1.0", - "responselike": "^1.0.2" + "acorn": "^5.0.3", + "chalk": "^1.1.3", + "magic-string": "^0.20.0", + "minimist": "^1.2.0", + "sourcemap-codec": "^1.3.1" }, "dependencies": { - "get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==" + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==" + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", "requires": { - "pump": "^3.0.0" + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" } }, - "lowercase-keys": { + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "supports-color": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", - "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==" + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==" } } }, - "camelcase": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", - "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==" - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "camel-case": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-3.0.0.tgz", + "integrity": "sha512-+MbKztAYHXPr1jNTSKQF52VpcFjwY5RkR7fxksV8Doo4KAYc5Fl4UJRgthBbTmEx8C54DqahhbLJkDwjI3PI/w==", "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "dependencies": { - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "requires": { - "has-flag": "^4.0.0" - } - } + "no-case": "^2.2.0", + "upper-case": "^1.1.1" } }, + "capture-stack-trace": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.1.tgz", + "integrity": "sha512-mYQLZnx5Qt1JgB1WEiMCf2647plpGeQ2NMR/5L0HNZzGQo4fuSPnK+wjfPnKZV0aiJDgzmWqqkV/g7JD+DW0qw==" + }, "chokidar": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz", - "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==", + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", "requires": { "anymatch": "~3.1.2", "braces": "~3.0.2", @@ -167,15 +653,78 @@ "readdirp": "~3.6.0" } }, - "ci-info": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==" + "clap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/clap/-/clap-1.2.3.tgz", + "integrity": "sha512-4CoL/A3hf90V3VIEjeuhSvlGFEHKzOz+Wfc2IVZc+FaUgU0ZQafJTP49fvnULipOPcAfqhyI2duwQyns6xqjYA==", + "requires": { + "chalk": "^1.1.3" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==" + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==" + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==" + } + } }, - "cli-boxes": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", - "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==" + "clean-css": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.1.tgz", + "integrity": "sha512-4ZxI6dy4lrY6FHzfiy1aEOXgu4LIsW2MhwG0VBKdcoGoH/XLFgaHSdLTGr4O8Be6A8r3MOphEiI8Gc1n0ecf3g==", + "requires": { + "source-map": "~0.6.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "cli-cursor": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", + "integrity": "sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw==", + "requires": { + "restore-cursor": "^2.0.0" + } + }, + "cli-spinners": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-1.3.1.tgz", + "integrity": "sha512-1QL4544moEsDVH9T/l6Cemov/37iv1RtoKf7NJ04A60+4MREXNfx/QvavbH6QoGdsD4N4Mwy49cmaINR/o2mdg==" }, "cliui": { "version": "7.0.4", @@ -187,12 +736,66 @@ "wrap-ansi": "^7.0.0" } }, - "clone-response": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", - "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", + "clone": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", + "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==" + }, + "clone-buffer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/clone-buffer/-/clone-buffer-1.0.0.tgz", + "integrity": "sha512-KLLTJWrvwIP+OPfMn0x2PheDEP20RPUcGXj/ERegTgdmPEZylALQldygiqrPPu8P45uNuPs7ckmReLY6v/iA5g==" + }, + "clone-stats": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz", + "integrity": "sha512-au6ydSpg6nsrigcZ4m8Bc9hxjeW+GJ8xh5G3BJCMt4WXe1H10UNaVOamqQTmrx1kjVuxAHIQSNU6hY4Nsn9/ag==" + }, + "cloneable-readable": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/cloneable-readable/-/cloneable-readable-1.1.3.tgz", + "integrity": "sha512-2EF8zTQOxYq70Y4XKtorQupqF0m49MBz2/yf5Bj+MHjvpG3Hy7sImifnqD6UA+TKYxeSV+u6qqQPawN5UvnpKQ==", + "requires": { + "inherits": "^2.0.1", + "process-nextick-args": "^2.0.0", + "readable-stream": "^2.3.5" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "coa": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/coa/-/coa-1.0.4.tgz", + "integrity": "sha512-KAGck/eNAmCL0dcT3BiuYwLbExK6lduR8DxM3C1TyDzaXhZHyZ8ooX5I5+na2e3dPFuibfxrGdorr0/Lr7RYCQ==", "requires": { - "mimic-response": "^1.0.0" + "q": "^1.1.2" } }, "color-convert": { @@ -208,6 +811,11 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, + "colors": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz", + "integrity": "sha512-ENwblkFQpqqia6b++zLD/KUWafYlVY/UNnAp7oz7LY7E924wmpye416wBOmvv/HMWzl8gL1kJlfvId/1Dg176w==" + }, "commander": { "version": "2.20.3", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", @@ -234,77 +842,72 @@ } } }, - "configstore": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", - "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==", + "convert-source-map": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", + "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", "requires": { - "dot-prop": "^5.2.0", - "graceful-fs": "^4.1.2", - "make-dir": "^3.0.0", - "unique-string": "^2.0.0", - "write-file-atomic": "^3.0.0", - "xdg-basedir": "^4.0.0" + "safe-buffer": "~5.1.1" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + } } }, - "crypto-random-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", - "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==" + "core-js": { + "version": "2.6.12", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz", + "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==" }, - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "requires": { - "ms": "^2.1.1" - } + "core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" }, - "decompress-response": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", - "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", + "crass": { + "version": "0.12.3", + "resolved": "https://registry.npmjs.org/crass/-/crass-0.12.3.tgz", + "integrity": "sha512-0gOYgXVAr6KF7xNUv/+QmTrVsMowpuYu9y1SWzMHFrERzxTygqpeBTXI9CMg1NI1AwQ96ZrkaGHVT9eTC66+Tw==", "requires": { - "mimic-response": "^1.0.0" + "color-convert": "^1.7.0", + "strong-data-uri": "^1.0.4", + "svgo": "^0.7.1" + }, + "dependencies": { + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + } } }, - "deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==" - }, - "defer-to-connect": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", - "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==" - }, - "discontinuous-range": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/discontinuous-range/-/discontinuous-range-1.0.0.tgz", - "integrity": "sha1-44Mx8IRLukm5qctxx3FYWqsbxlo=" - }, - "dot-prop": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", - "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", + "create-error-class": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/create-error-class/-/create-error-class-3.0.2.tgz", + "integrity": "sha512-gYTKKexFO3kh200H1Nit76sRwRtOY32vQd3jpAQKpLtZqyNsSQNfI4N7o3eP2wUjV35pTWKRYqFUDBvUha/Pkw==", "requires": { - "is-obj": "^2.0.0" + "capture-stack-trace": "^1.0.0" } }, - "duplexer3": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", - "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=" - }, - "editorconfig": { - "version": "0.15.3", - "resolved": "https://registry.npmjs.org/editorconfig/-/editorconfig-0.15.3.tgz", - "integrity": "sha512-M9wIMFx96vq0R4F+gRpY3o2exzb8hEj/n9S8unZtHSvYjibBp/iMufSzvmOcV/laG0ZtuTVGtiJggPOSW2r93g==", + "cross-spawn": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", + "integrity": "sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==", "requires": { - "commander": "^2.19.0", - "lru-cache": "^4.1.5", - "semver": "^5.6.0", - "sigmund": "^1.0.1" + "lru-cache": "^4.0.1", + "shebang-command": "^1.2.0", + "which": "^1.2.9" }, "dependencies": { "lru-cache": { @@ -319,32 +922,183 @@ "yallist": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=" + "integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==" } } }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + "css-tree": { + "version": "1.0.0-alpha.29", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.29.tgz", + "integrity": "sha512-sRNb1XydwkW9IOci6iB2xmy8IGCj6r/fr+JWitvJ2JxQRPzN3T4AGGVWCMlVmVwM1gtgALJRmGIlWv5ppnGGkg==", + "requires": { + "mdn-data": "~1.1.0", + "source-map": "^0.5.3" + } + }, + "csso": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/csso/-/csso-3.5.1.tgz", + "integrity": "sha512-vrqULLffYU1Q2tLdJvaCYbONStnfkfimRxXNaGjxMldI0C7JPBC4rB1RyjhfdZ4m1frm8pM9uRPKH3d2knZ8gg==", + "requires": { + "css-tree": "1.0.0-alpha.29" + } + }, + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "requires": { + "ms": "^2.1.1" + } + }, + "deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==" + }, + "defaults": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", + "integrity": "sha512-s82itHOnYrN0Ib8r+z7laQz3sdE+4FP3d9Q7VLO7U+KRT+CR0GsWuyHxzdAY82I7cXv0G/twrqomTJLOssO5HA==", + "requires": { + "clone": "^1.0.2" + }, + "dependencies": { + "clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==" + } + } + }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==" }, - "end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "detect-indent": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz", + "integrity": "sha512-BDKtmHlOzwI7iRuEkhzsnPoi5ypEhWAJB5RvHWe1kMr06js3uK5B3734i3ui5Yd+wOJV1cpE4JnivPD283GU/A==", + "requires": { + "repeating": "^2.0.0" + } + }, + "dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", "requires": { - "once": "^1.4.0" + "path-type": "^4.0.0" } }, + "discontinuous-range": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/discontinuous-range/-/discontinuous-range-1.0.0.tgz", + "integrity": "sha1-44Mx8IRLukm5qctxx3FYWqsbxlo=" + }, + "duplexer": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", + "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==" + }, + "duplexer3": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", + "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=" + }, + "editorconfig": { + "version": "0.15.3", + "resolved": "https://registry.npmjs.org/editorconfig/-/editorconfig-0.15.3.tgz", + "integrity": "sha512-M9wIMFx96vq0R4F+gRpY3o2exzb8hEj/n9S8unZtHSvYjibBp/iMufSzvmOcV/laG0ZtuTVGtiJggPOSW2r93g==", + "requires": { + "commander": "^2.19.0", + "lru-cache": "^4.1.5", + "semver": "^5.6.0", + "sigmund": "^1.0.1" + }, + "dependencies": { + "lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "requires": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=" + } + } + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, "escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" }, - "escape-goat": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz", - "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==" + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==" + }, + "esprima": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", + "integrity": "sha512-OarPfz0lFCiW4/AV2Oy1Rp9qu0iusTKqykwTspGCZtPxmF81JR4MmIebvF1F9+UOKth2ZubLQ4XGGaU+hSn99A==" + }, + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" + }, + "execa": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", + "integrity": "sha512-RztN09XglpYI7aBBrJCPW95jEH7YF1UEPOoX9yDhUTPdp7mK+CQvnLTuD10BNXZ3byLTu2uehZ8EcKT/4CGiFw==", + "requires": { + "cross-spawn": "^5.0.1", + "get-stream": "^3.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + }, + "dependencies": { + "get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==" + } + } + }, + "fast-glob": { + "version": "3.2.11", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", + "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + } + }, + "fastq": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", + "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", + "requires": { + "reusify": "^1.0.4" + } }, "fill-range": { "version": "7.0.1", @@ -370,14 +1124,6 @@ "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" }, - "get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "requires": { - "pump": "^3.0.0" - } - }, "glob": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", @@ -399,56 +1145,197 @@ "is-glob": "^4.0.1" } }, - "global-dirs": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.0.tgz", - "integrity": "sha512-v8ho2DS5RiCjftj1nD9NmnfaOzTdud7RRnVd9kFNOjqZbISlx5DQ+OrTkywgd0dIt7oFCvKetZSHoHcP3sDdiA==", + "globals": { + "version": "9.18.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", + "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==" + }, + "globby": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz", + "integrity": "sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==", "requires": { - "ini": "2.0.0" + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.1.1", + "ignore": "^5.1.4", + "merge2": "^1.3.0", + "slash": "^3.0.0" + }, + "dependencies": { + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" + } } }, - "got": { - "version": "9.6.0", - "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", - "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", + "google-closure-compiler": { + "version": "20181008.0.0", + "resolved": "https://registry.npmjs.org/google-closure-compiler/-/google-closure-compiler-20181008.0.0.tgz", + "integrity": "sha512-XmJIasXHyy4kirthlsuDev2LZcXjYXWfOHwHdCLUQnfJH8T2sxWDNjFLQycaCIXwQLOyw2Kem38VgxrYfG0hzg==", "requires": { - "@sindresorhus/is": "^0.14.0", - "@szmarczak/http-timer": "^1.1.2", - "cacheable-request": "^6.0.0", - "decompress-response": "^3.3.0", - "duplexer3": "^0.1.4", - "get-stream": "^4.1.0", - "lowercase-keys": "^1.0.1", - "mimic-response": "^1.0.1", - "p-cancelable": "^1.0.0", - "to-readable-stream": "^1.0.0", - "url-parse-lax": "^3.0.0" + "chalk": "^1.0.0", + "google-closure-compiler-linux": "^20181008.0.0", + "google-closure-compiler-osx": "^20181008.0.0", + "minimist": "^1.2.0", + "vinyl": "^2.0.1", + "vinyl-sourcemaps-apply": "^0.2.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==" + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==" + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==" + } } }, + "google-closure-compiler-java": { + "version": "20220719.0.0", + "resolved": "https://registry.npmjs.org/google-closure-compiler-java/-/google-closure-compiler-java-20220719.0.0.tgz", + "integrity": "sha512-tjWdQSkFqxaFCgzUBaiJj2CxrWUYV0Ij2txp9Um+GyvrzMeX9rqHSUeW4I9cGpOrXkamvWCyAig4Yi0NZXApdg==" + }, + "google-closure-compiler-linux": { + "version": "20181008.0.0", + "resolved": "https://registry.npmjs.org/google-closure-compiler-linux/-/google-closure-compiler-linux-20181008.0.0.tgz", + "integrity": "sha512-k8njGfH2uzWJiRPPvUxM7MJB28gPrf4kI2bbuiF0gJk/1arXcWCPGjLD6pzCU0UylMy52MUXLgsIpRorqf2brw==", + "optional": true + }, + "google-closure-compiler-osx": { + "version": "20181008.0.0", + "resolved": "https://registry.npmjs.org/google-closure-compiler-osx/-/google-closure-compiler-osx-20181008.0.0.tgz", + "integrity": "sha512-xzf/yH/4MXdb6GbP84iHnpcVCOPBbH0gMVOs0JhR/KbrQh+DlJU+Y8Z/DQzTkw9HgD650R2/WZmBknURyg9OTw==", + "optional": true + }, "graceful-fs": { "version": "4.2.8", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==" }, + "gzip-size": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-5.0.0.tgz", + "integrity": "sha512-5iI7omclyqrnWw4XbXAmGhPsABkSIDQonv2K0h61lybgofWa6iZyvrI3r2zsJH4P8Nb64fFVzlvfhs0g7BBxAA==", + "requires": { + "duplexer": "^0.1.1", + "pify": "^3.0.0" + } + }, + "has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==", + "requires": { + "ansi-regex": "^2.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==" + } + } + }, "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" }, - "has-yarn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz", - "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==" + "he": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", + "integrity": "sha512-z/GDPjlRMNOa2XJiB4em8wJpuuBfrFOlYKTZxtpkdr1uPdibHI8rYA3MY0KDObpVyaes0e/aunid/t88ZI2EKA==" + }, + "home-or-tmp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-2.0.0.tgz", + "integrity": "sha512-ycURW7oUxE2sNiPVw1HVEFsW+ecOpJ5zaj7eC0RlwhibhRBod20muUN8qu/gzx956YrLolVvs1MTXwKgC2rVEg==", + "requires": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.1" + } }, - "http-cache-semantics": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", - "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==" + "html-minifier": { + "version": "3.5.20", + "resolved": "https://registry.npmjs.org/html-minifier/-/html-minifier-3.5.20.tgz", + "integrity": "sha512-ZmgNLaTp54+HFKkONyLFEfs5dd/ZOtlquKaTnqIWFmx3Av5zG6ZPcV2d0o9XM2fXOTxxIf6eDcwzFFotke/5zA==", + "requires": { + "camel-case": "3.0.x", + "clean-css": "4.2.x", + "commander": "2.17.x", + "he": "1.1.x", + "param-case": "2.1.x", + "relateurl": "0.2.x", + "uglify-js": "3.4.x" + }, + "dependencies": { + "commander": { + "version": "2.17.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz", + "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==" + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "uglify-js": { + "version": "3.4.10", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.4.10.tgz", + "integrity": "sha512-Y2VsbPVs0FIshJztycsO2SfPk7/KAF/T72qzv9u5EpQ4kB2hQoHlhNQTsNyy6ul7lQtqJN/AoWeS23OzEiEFxw==", + "requires": { + "commander": "~2.19.0", + "source-map": "~0.6.1" + }, + "dependencies": { + "commander": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.19.0.tgz", + "integrity": "sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==" + } + } + } + } + }, + "ignore": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", + "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==" }, "ignore-by-default": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", - "integrity": "sha1-SMptcvbGo68Aqa1K5odr44ieKwk=" + "integrity": "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==" }, "import-lazy": { "version": "2.1.0", @@ -474,10 +1361,13 @@ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, - "ini": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", - "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==" + "invariant": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "requires": { + "loose-envify": "^1.0.0" + } }, "is-binary-path": { "version": "2.1.0", @@ -487,19 +1377,16 @@ "binary-extensions": "^2.0.0" } }, - "is-ci": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", - "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", - "requires": { - "ci-info": "^2.0.0" - } - }, "is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" }, + "is-finite": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.1.0.tgz", + "integrity": "sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w==" + }, "is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", @@ -513,44 +1400,35 @@ "is-extglob": "^2.1.1" } }, - "is-installed-globally": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", - "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==", - "requires": { - "global-dirs": "^3.0.0", - "is-path-inside": "^3.0.2" - } - }, - "is-npm": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-5.0.0.tgz", - "integrity": "sha512-WW/rQLOazUq+ST/bCAVBp/2oMERWLsR7OrKyt052dNDk4DHcDE0/7QSXITlmi+VBcV13DfIbysG3tZJm5RfdBA==" - }, "is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" }, - "is-obj": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", - "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==" + "is-redirect": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz", + "integrity": "sha512-cr/SlUEe5zOGmzvj9bUyC4LVvkNVAXu4GytXLNMr1pny+a65MpQ9IJzFHD5vi7FyJgb4qt27+eS3TuQnqB+RQw==" }, - "is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==" + "is-retry-allowed": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz", + "integrity": "sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==" }, - "is-typedarray": { + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==" + }, + "isarray": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" }, - "is-yarn-global": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz", - "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==" + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" }, "js-beautify": { "version": "1.14.0", @@ -573,150 +1451,630 @@ } } }, - "json-buffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", - "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=" + "js-tokens": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", + "integrity": "sha512-RjTcuD4xjtthQkaWH7dFlH85L+QaVtSoOyGdZ3g6HFhS9dFNDfLyqgm2NFe2X6cQpeFmt0452FJjFG5UameExg==" }, - "keyv": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", - "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", + "js-yaml": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.7.0.tgz", + "integrity": "sha512-eIlkGty7HGmntbV6P/ZlAsoncFLGsNoM27lkTzS+oneY/EiNhj+geqD9ezg/ip+SW6Var0BJU2JtV0vEUZpWVQ==", "requires": { - "json-buffer": "3.0.0" + "argparse": "^1.0.7", + "esprima": "^2.6.0" } }, - "latest-version": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz", - "integrity": "sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==", - "requires": { - "package-json": "^6.3.0" - } + "jsesc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz", + "integrity": "sha512-Mke0DA0QjUWuJlhsE0ZPPhYiJkRap642SmI/4ztCFaUs6V2AiH1sfecc+57NgaryfAA2VR3v6O+CSjC1jZJKOA==" + }, + "json5": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", + "integrity": "sha512-4xrs1aW+6N5DalkqSVA8fxh458CXvR99WU8WLKmq4v8eWAL86Xo3BVqyd3SkA9wEVjCMqyvvRRkshAdOnBp5rw==" }, "lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==" + }, + "log-symbols": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", + "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", + "requires": { + "chalk": "^2.0.1" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + } + } + }, + "loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "requires": { + "js-tokens": "^3.0.0 || ^4.0.0" + } + }, + "lower-case": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz", + "integrity": "sha512-2Fgx1Ycm599x+WGpIYwJOvsjmXFzTSc34IwDWALRA/8AopUKAVPwfJ+h5+f85BCp0PWmmJcWzEpxOpoXycMpdA==" }, "lowercase-keys": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==" }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "magic-string": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.20.0.tgz", + "integrity": "sha512-hUtRcmCuD+j5eBzB42iSXw55hxrM1l72949VPangbxnas4RL5DhC/KQl6cGAa4XuceBlxqYOIhWKJLWhJ6ubsw==", "requires": { - "yallist": "^4.0.0" + "vlq": "^0.2.1" } }, - "make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "mdn-data": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-1.1.4.tgz", + "integrity": "sha512-FSYbp3lyKjyj3E7fMl6rYvUdX0FBXaluGqlFoYESWQlyUTq8R+wp0rkFxoYFqZlHCvsUXGjyJmLQSnXToYhOSA==" + }, + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==" + }, + "micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", "requires": { - "semver": "^6.0.0" + "braces": "^3.0.2", + "picomatch": "^2.3.1" }, "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" + } + } + }, + "microtime": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/microtime/-/microtime-3.0.0.tgz", + "integrity": "sha512-SirJr7ZL4ow2iWcb54bekS4aWyBQNVcEDBiwAz9D/sTgY59A+uE8UJU15cp5wyZmPBwg/3zf8lyCJ5NUe1nVlQ==", + "requires": { + "node-addon-api": "^1.2.0", + "node-gyp-build": "^3.8.0" + } + }, + "mimic-fn": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==" + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" + }, + "mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "requires": { + "minimist": "^1.2.6" + } + }, + "moo": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/moo/-/moo-0.5.1.tgz", + "integrity": "sha512-I1mnb5xn4fO80BH9BLcF0yLypy2UKl+Cb01Fu0hJRkJjlCRtxZMWkTdAtDd5ZqCOxtCkhmRwyI57vWT+1iZ67w==" + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "nearley": { + "version": "2.20.1", + "resolved": "https://registry.npmjs.org/nearley/-/nearley-2.20.1.tgz", + "integrity": "sha512-+Mc8UaAebFzgV+KpI5n7DasuuQCHA89dmwm7JXw3TV43ukfNQ9DnBH3Mdb2g/I4Fdxc26pwimBWvjIw0UAILSQ==", + "requires": { + "commander": "^2.19.0", + "moo": "^0.5.0", + "railroad-diagrams": "^1.0.0", + "randexp": "0.4.6" + } + }, + "nearley-unparse": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/nearley-unparse/-/nearley-unparse-1.0.1.tgz", + "integrity": "sha1-LyiZZalSsKLTwHJJe5Z6iIP0ZU8=", + "dev": true, + "requires": { + "lodash": "^4.13.1", + "randexp": "^0.4.3" + } + }, + "no-case": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz", + "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==", + "requires": { + "lower-case": "^1.1.1" + } + }, + "node-addon-api": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-1.7.2.tgz", + "integrity": "sha512-ibPK3iA+vaY1eEjESkQkM0BbCqFOaZMiXRTtdB0u7b4djtY6JnsjvPdUHVMg6xQt3B8fpTTWHI9A+ADjM9frzg==" + }, + "node-gyp-build": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-3.9.0.tgz", + "integrity": "sha512-zLcTg6P4AbcHPq465ZMFNXx7XpKKJh+7kkN699NiQWisR2uWYOWNWqRHAmbnmKiL4e9aLSlmy5U7rEMUXV59+A==" + }, + "node-minify": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/node-minify/-/node-minify-3.6.0.tgz", + "integrity": "sha512-/t7Xz0yXFyBrHhnGgAZAoOtuqu+oKyYONj0xUDiST6onGEQ0lwzprXhjTNazNWn7ZfIYYoiyP9Bn0rOd+vBuOA==", + "requires": { + "babel-core": "6.26.3", + "babel-preset-minify": "0.5.0", + "butternut": "0.4.6", + "chalk": "2.4.1", + "clean-css": "4.2.1", + "commander": "2.19.0", + "crass": "0.12.3", + "csso": "3.5.1", + "depd": "1.1.2", + "glob": "7.1.3", + "google-closure-compiler": "20181008.0.0", + "gzip-size": "5.0.0", + "html-minifier": "3.5.20", + "mkdirp": "0.5.1", + "node-version": "1.2.0", + "ora": "3.0.0", + "sqwish": "0.2.2", + "terser": "3.10.2", + "uglify-es": "3.3.9", + "uglify-js": "3.4.9", + "update-notifier": "2.5.0" + }, + "dependencies": { + "ansi-align": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-2.0.0.tgz", + "integrity": "sha512-TdlOggdA/zURfMYa7ABC66j+oqfMew58KpJMbUlH3bcZP1b+cBHIHDDn5uH9INsxrHBPjsqM0tDB4jPTF/vgJA==", + "requires": { + "string-width": "^2.0.0" + } + }, + "ansi-regex": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", + "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==" + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "boxen": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-1.3.0.tgz", + "integrity": "sha512-TNPjfTr432qx7yOjQyaXm3dSR0MH9vXp7eT1BFSl/C51g+EFnOR9hTg1IreahGBmDNCehscshe45f+C1TBZbLw==", + "requires": { + "ansi-align": "^2.0.0", + "camelcase": "^4.0.0", + "chalk": "^2.0.1", + "cli-boxes": "^1.0.0", + "string-width": "^2.0.0", + "term-size": "^1.2.0", + "widest-line": "^2.0.0" + } + }, + "camelcase": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha512-FxAv7HpHrXbh3aPo4o2qxHay2lkLY3x5Mw3KeE4KQE8ysVfziWeRZDwcjauvwBSGEC/nXUPzZy8zeh4HokqOnw==" + }, + "chalk": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", + "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "ci-info": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.6.0.tgz", + "integrity": "sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A==" + }, + "cli-boxes": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-1.0.0.tgz", + "integrity": "sha512-3Fo5wu8Ytle8q9iCzS4D2MWVL2X7JVWRiS1BnXbTFDhS9c/REkM9vd1AmabsoZoY5/dGi5TT9iKL8Kb6DeBRQg==" + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + }, + "commander": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.19.0.tgz", + "integrity": "sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==" + }, + "configstore": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/configstore/-/configstore-3.1.5.tgz", + "integrity": "sha512-nlOhI4+fdzoK5xmJ+NY+1gZK56bwEaWZr8fYuXohZ9Vkc1o3a4T/R3M+yE/w7x/ZVJ1zF8c+oaOvF0dztdUgmA==", + "requires": { + "dot-prop": "^4.2.1", + "graceful-fs": "^4.1.2", + "make-dir": "^1.0.0", + "unique-string": "^1.0.0", + "write-file-atomic": "^2.0.0", + "xdg-basedir": "^3.0.0" + } + }, + "crypto-random-string": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-1.0.0.tgz", + "integrity": "sha512-GsVpkFPlycH7/fRR7Dhcmnoii54gV1nz7y4CWyeFS14N+JVBBhY+r8amRHE4BwSYal7BPTDp8isvAlCxyFt3Hg==" + }, + "dot-prop": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.1.tgz", + "integrity": "sha512-l0p4+mIuJIua0mhxGoh4a+iNL9bmeK5DvnSVQa6T0OhrVmaEa1XScX5Etc673FePCJOArq/4Pa2cLGODUWTPOQ==", + "requires": { + "is-obj": "^1.0.0" + } + }, + "get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==" + }, + "glob": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", + "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "global-dirs": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz", + "integrity": "sha512-NknMLn7F2J7aflwFOlGdNIuCDpN3VGoSoB+aap3KABFWbHVn1TCgFC+np23J8W2BiZbjfEw3BFBycSMv1AFblg==", + "requires": { + "ini": "^1.3.4" + } + }, + "got": { + "version": "6.7.1", + "resolved": "https://registry.npmjs.org/got/-/got-6.7.1.tgz", + "integrity": "sha512-Y/K3EDuiQN9rTZhBvPRWMLXIKdeD1Rj0nzunfoi0Yyn5WBEbzxXKU9Ub2X41oZBagVWOBU3MuDonFMgPWQFnwg==", + "requires": { + "create-error-class": "^3.0.0", + "duplexer3": "^0.1.4", + "get-stream": "^3.0.0", + "is-redirect": "^1.0.0", + "is-retry-allowed": "^1.0.0", + "is-stream": "^1.0.0", + "lowercase-keys": "^1.0.0", + "safe-buffer": "^5.0.1", + "timed-out": "^4.0.0", + "unzip-response": "^2.0.1", + "url-parse-lax": "^1.0.0" + } + }, + "ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" + }, + "is-ci": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.2.1.tgz", + "integrity": "sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg==", + "requires": { + "ci-info": "^1.5.0" + } + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==" + }, + "is-installed-globally": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.1.0.tgz", + "integrity": "sha512-ERNhMg+i/XgDwPIPF3u24qpajVreaiSuvpb1Uu0jugw7KKcxGyCX8cgp8P5fwTmAuXku6beDHHECdKArjlg7tw==", + "requires": { + "global-dirs": "^0.1.0", + "is-path-inside": "^1.0.0" + } + }, + "is-npm": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-1.0.0.tgz", + "integrity": "sha512-9r39FIr3d+KD9SbX0sfMsHzb5PP3uimOiwr3YupUaUFG4W0l1U57Rx3utpttV7qz5U3jmrO5auUa04LU9pyHsg==" + }, + "is-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "integrity": "sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==" + }, + "is-path-inside": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", + "integrity": "sha512-qhsCR/Esx4U4hg/9I19OVUAJkGWtjRYHMRgUMZE2TDdj+Ag+kttZanLupfddNyglzz50cUlmWzUaI37GDfNx/g==", + "requires": { + "path-is-inside": "^1.0.1" + } + }, + "latest-version": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-3.1.0.tgz", + "integrity": "sha512-Be1YRHWWlZaSsrz2U+VInk+tO0EwLIyV+23RhWLINJYwg/UIikxjlj3MhH37/6/EDCAusjajvMkMMUXRaMWl/w==", + "requires": { + "package-json": "^4.0.0" + } + }, + "make-dir": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", + "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", + "requires": { + "pify": "^3.0.0" + } + }, + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha512-miQKw5Hv4NS1Psg2517mV4e4dYNaO3++hjAvLOAzKqZ61rH8NS1SK+vbfBWZ5PY/Me/bEWhUwqMghEW5Fb9T7Q==" + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha512-SknJC52obPfGQPnjIkXbmA6+5H15E+fR+E4iR2oQ3zzCLbd7/ONua69R/Gw7AgkTLsRG+r5fzksYwWe1AgTyWA==", + "requires": { + "minimist": "0.0.8" + } + }, + "package-json": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/package-json/-/package-json-4.0.1.tgz", + "integrity": "sha512-q/R5GrMek0vzgoomq6rm9OX+3PQve8sLwTirmK30YB3Cu0Bbt9OX9M/SIUnroN5BGJkzwGsFwDaRGD9EwBOlCA==", + "requires": { + "got": "^6.7.1", + "registry-auth-token": "^3.0.1", + "registry-url": "^3.0.3", + "semver": "^5.1.0" + } + }, + "prepend-http": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", + "integrity": "sha512-PhmXi5XmoyKw1Un4E+opM2KcsJInDvKyuOumcjjw3waw86ZNjHwVUOOWLc4bCzLdcKNaWBH9e99sbWzDQsVaYg==" + }, + "registry-auth-token": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.4.0.tgz", + "integrity": "sha512-4LM6Fw8eBQdwMYcES4yTnn2TqIasbXuwDx3um+QRs7S55aMKCBKBxvPXl2RiUjHwuJLTyYfxSpmfSAjQpcuP+A==", + "requires": { + "rc": "^1.1.6", + "safe-buffer": "^5.0.1" + } + }, + "registry-url": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-3.1.0.tgz", + "integrity": "sha512-ZbgR5aZEdf4UKZVBPYIgaglBmSF2Hi94s2PcIHhRGFjKYu+chjJdYfHn4rt3hB6eCKLJ8giVIIfgMa1ehDfZKA==", + "requires": { + "rc": "^1.0.1" + } + }, + "semver-diff": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-2.1.0.tgz", + "integrity": "sha512-gL8F8L4ORwsS0+iQ34yCYv///jsOq0ZL7WP55d1HnJ32o7tyFYEFQZQA22mrLIacZdU6xecaBBZ+uEiffGNyXw==", + "requires": { + "semver": "^5.0.3" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==", + "requires": { + "ansi-regex": "^3.0.0" + } + }, + "uglify-js": { + "version": "3.4.9", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.4.9.tgz", + "integrity": "sha512-8CJsbKOtEbnJsTyv6LE6m6ZKniqMiFWmm9sRbopbkGs3gMPPfd3Fh8iIA4Ykv5MgaTbqHr4BaoGLJLZNhsrW1Q==", + "requires": { + "commander": "~2.17.1", + "source-map": "~0.6.1" + }, + "dependencies": { + "commander": { + "version": "2.17.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz", + "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==" + } + } + }, + "unique-string": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-1.0.0.tgz", + "integrity": "sha512-ODgiYu03y5g76A1I9Gt0/chLCzQjvzDy7DsZGsLOE/1MrF6wriEskSncj1+/C58Xk/kPZDppSctDybCwOSaGAg==", + "requires": { + "crypto-random-string": "^1.0.0" + } + }, + "update-notifier": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-2.5.0.tgz", + "integrity": "sha512-gwMdhgJHGuj/+wHJJs9e6PcCszpxR1b236igrOkUofGhqJuG+amlIKwApH1IW1WWl7ovZxsX49lMBWLxSdm5Dw==", + "requires": { + "boxen": "^1.2.1", + "chalk": "^2.0.1", + "configstore": "^3.0.0", + "import-lazy": "^2.1.0", + "is-ci": "^1.0.10", + "is-installed-globally": "^0.1.0", + "is-npm": "^1.0.0", + "latest-version": "^3.0.0", + "semver-diff": "^2.0.0", + "xdg-basedir": "^3.0.0" + } + }, + "url-parse-lax": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", + "integrity": "sha512-BVA4lR5PIviy2PMseNd2jbFQ+jwSwQGdJejf5ctd1rEXt0Ypd7yanUK9+lYechVlN5VaTJGsu2U/3MDDu6KgBA==", + "requires": { + "prepend-http": "^1.0.1" + } + }, + "widest-line": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-2.0.1.tgz", + "integrity": "sha512-Ba5m9/Fa4Xt9eb2ELXt77JxVDV8w7qQrH0zS/TWSJdLyAwQjWoOzpzj5lwVftDz6n/EOu3tNACS84v509qwnJA==", + "requires": { + "string-width": "^2.1.1" + } + }, + "write-file-atomic": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", + "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", + "requires": { + "graceful-fs": "^4.1.11", + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.2" + } + }, + "xdg-basedir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-3.0.0.tgz", + "integrity": "sha512-1Dly4xqlulvPD3fZUQJLY+FUIeqN3N2MM3uqe4rCJftAvOjFa3jFGfctOgluGx4ahPbUCsZkmJILiP0Vi4T6lQ==" } } }, - "microtime": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/microtime/-/microtime-3.0.0.tgz", - "integrity": "sha512-SirJr7ZL4ow2iWcb54bekS4aWyBQNVcEDBiwAz9D/sTgY59A+uE8UJU15cp5wyZmPBwg/3zf8lyCJ5NUe1nVlQ==", - "requires": { - "node-addon-api": "^1.2.0", - "node-gyp-build": "^3.8.0" - } - }, - "mimic-response": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==" - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" - }, - "moo": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/moo/-/moo-0.5.1.tgz", - "integrity": "sha512-I1mnb5xn4fO80BH9BLcF0yLypy2UKl+Cb01Fu0hJRkJjlCRtxZMWkTdAtDd5ZqCOxtCkhmRwyI57vWT+1iZ67w==" - }, - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - }, - "nearley": { - "version": "2.20.1", - "resolved": "https://registry.npmjs.org/nearley/-/nearley-2.20.1.tgz", - "integrity": "sha512-+Mc8UaAebFzgV+KpI5n7DasuuQCHA89dmwm7JXw3TV43ukfNQ9DnBH3Mdb2g/I4Fdxc26pwimBWvjIw0UAILSQ==", - "requires": { - "commander": "^2.19.0", - "moo": "^0.5.0", - "railroad-diagrams": "^1.0.0", - "randexp": "0.4.6" - } - }, - "nearley-unparse": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/nearley-unparse/-/nearley-unparse-1.0.1.tgz", - "integrity": "sha1-LyiZZalSsKLTwHJJe5Z6iIP0ZU8=", - "dev": true, - "requires": { - "lodash": "^4.13.1", - "randexp": "^0.4.3" - } - }, - "node-addon-api": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-1.7.2.tgz", - "integrity": "sha512-ibPK3iA+vaY1eEjESkQkM0BbCqFOaZMiXRTtdB0u7b4djtY6JnsjvPdUHVMg6xQt3B8fpTTWHI9A+ADjM9frzg==" - }, - "node-gyp-build": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-3.9.0.tgz", - "integrity": "sha512-zLcTg6P4AbcHPq465ZMFNXx7XpKKJh+7kkN699NiQWisR2uWYOWNWqRHAmbnmKiL4e9aLSlmy5U7rEMUXV59+A==" + "node-version": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/node-version/-/node-version-1.2.0.tgz", + "integrity": "sha512-ma6oU4Sk0qOoKEAymVoTvk8EdXEobdS7m/mAGhDJ8Rouugho48crHBORAmy5BoOcv8wraPM6xumapQp5hl4iIQ==" }, "nodemon": { - "version": "2.0.13", - "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.13.tgz", - "integrity": "sha512-UMXMpsZsv1UXUttCn6gv8eQPhn6DR4BW+txnL3IN5IHqrCwcrT/yWHfL35UsClGXknTH79r5xbu+6J1zNHuSyA==", + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.19.tgz", + "integrity": "sha512-4pv1f2bMDj0Eeg/MhGqxrtveeQ5/G/UVe9iO6uTZzjnRluSA4PVWf8CW99LUPwGB3eNIA7zUFoP77YuI7hOc0A==", "requires": { - "chokidar": "^3.2.2", - "debug": "^3.2.6", + "chokidar": "^3.5.2", + "debug": "^3.2.7", "ignore-by-default": "^1.0.1", "minimatch": "^3.0.4", - "pstree.remy": "^1.1.7", + "pstree.remy": "^1.1.8", "semver": "^5.7.1", + "simple-update-notifier": "^1.0.7", "supports-color": "^5.5.0", "touch": "^3.1.0", - "undefsafe": "^2.0.3", - "update-notifier": "^5.1.0" + "undefsafe": "^2.0.5" } }, "nopt": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", - "integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=", + "integrity": "sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg==", "requires": { "abbrev": "1" } @@ -726,10 +2084,13 @@ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" }, - "normalize-url": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz", - "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==" + "npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==", + "requires": { + "path-key": "^2.0.0" + } }, "npm-watch": { "version": "0.11.0", @@ -748,43 +2109,135 @@ "wrappy": "1" } }, - "p-cancelable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", - "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==" - }, - "package-json": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz", - "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==", - "requires": { - "got": "^9.6.0", - "registry-auth-token": "^4.0.0", - "registry-url": "^5.0.0", - "semver": "^6.2.0" + "onetime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", + "integrity": "sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ==", + "requires": { + "mimic-fn": "^1.0.0" + } + }, + "ora": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ora/-/ora-3.0.0.tgz", + "integrity": "sha512-LBS97LFe2RV6GJmXBi6OKcETKyklHNMV0xw7BtsVn2MlsgsydyZetSCbCANr+PFLmDyv4KV88nn0eCKza665Mg==", + "requires": { + "chalk": "^2.3.1", + "cli-cursor": "^2.1.0", + "cli-spinners": "^1.1.0", + "log-symbols": "^2.2.0", + "strip-ansi": "^4.0.0", + "wcwidth": "^1.0.1" }, "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + "ansi-regex": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", + "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==" + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==", + "requires": { + "ansi-regex": "^3.0.0" + } } } }, + "os-homedir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha512-B5JU3cabzk8c67mRRd3ECmROafjYMXbuzlwtqdM8IbS8ktlTix8aFGb2bAGKrSRIlnfKwovGUUr72JUPyOb6kQ==" + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==" + }, + "p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==" + }, + "param-case": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/param-case/-/param-case-2.1.1.tgz", + "integrity": "sha512-eQE845L6ot89sk2N8liD8HAuH4ca6Vvr7VWAWwt7+kvvG5aBcPmmphQ68JsEG2qa9n1TykS2DLeMt363AAH8/w==", + "requires": { + "no-case": "^2.2.0" + } + }, "path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" }, + "path-is-inside": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", + "integrity": "sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==" + }, + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==" + }, + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==" + }, "picomatch": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", - "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==" + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" }, - "prepend-http": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", - "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=" + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==" + }, + "private": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", + "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==" + }, + "process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" }, "proto-list": { "version": "1.2.4", @@ -801,22 +2254,15 @@ "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==" }, - "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } + "q": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", + "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==" }, - "pupa": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.1.1.tgz", - "integrity": "sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==", - "requires": { - "escape-goat": "^2.0.0" - } + "queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==" }, "railroad-diagrams": { "version": "1.0.0", @@ -868,33 +2314,46 @@ "picomatch": "^2.2.1" } }, - "registry-auth-token": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.1.tgz", - "integrity": "sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw==", - "requires": { - "rc": "^1.2.8" - } + "regenerator-runtime": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", + "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==" }, - "registry-url": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz", - "integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==", + "relateurl": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", + "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==" + }, + "remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==" + }, + "repeating": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", + "integrity": "sha512-ZqtSMuVybkISo2OWvqvm7iHSWngvdaW3IpsT9/uP8v4gMi591LY6h35wdOfvQdWCKFWZWm2Y1Opp4kV7vQKT6A==", "requires": { - "rc": "^1.2.8" + "is-finite": "^1.0.0" } }, + "replace-ext": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.1.tgz", + "integrity": "sha512-yD5BHCe7quCgBph4rMQ+0KkIRKwWCrHDOX1p1Gp6HwjPM5kVoCdKGNhN7ydqqsX6lJEnQDKZ/tFMiEdQ1dvPEw==" + }, "require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" }, - "responselike": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", - "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", + "restore-cursor": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", + "integrity": "sha512-6IzJLuGi4+R14vwagDHX+JrXmPVtPpn4mffDJ1UdR7/Edm87fl6yi8mMBIVvFtJaNTUvjughmW4hwLhRG7gC1Q==", "requires": { - "lowercase-keys": "^1.0.0" + "onetime": "^2.0.0", + "signal-exit": "^3.0.2" } }, "ret": { @@ -902,31 +2361,47 @@ "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==" }, + "reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==" + }, + "run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "requires": { + "queue-microtask": "^1.2.2" + } + }, "safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" }, + "sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" + }, "semver": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" }, - "semver-diff": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz", - "integrity": "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==", + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", "requires": { - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - } + "shebang-regex": "^1.0.0" } }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==" + }, "sigmund": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz", @@ -937,6 +2412,54 @@ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.5.tgz", "integrity": "sha512-KWcOiKeQj6ZyXx7zq4YxSMgHRlod4czeBQZrPb8OKcohcqAXShm7E20kEMle9WBt26hFcAf0qLOcp5zmY7kOqQ==" }, + "simple-update-notifier": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-1.0.7.tgz", + "integrity": "sha512-BBKgR84BJQJm6WjWFMHgLVuo61FBDSj1z/xSFUIozqO6wO7ii0JxCqlIud7Enr/+LhlbNI0whErq96P2qHNWew==", + "requires": { + "semver": "~7.0.0" + }, + "dependencies": { + "semver": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", + "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==" + } + } + }, + "slash": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", + "integrity": "sha512-3TYDR7xWt4dIqV2JauJr+EJeW356RXijHeUlO+8djJ+uBXPn8/2dpzBc8yQhh583sVvc9CvFAeQVgijsH+PNNg==" + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==" + }, + "source-map-support": { + "version": "0.4.18", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz", + "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==", + "requires": { + "source-map": "^0.5.6" + } + }, + "sourcemap-codec": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==" + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" + }, + "sqwish": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/sqwish/-/sqwish-0.2.2.tgz", + "integrity": "sha512-MyaCOSCiThzFPcXHebkWiiXDDlEzbHtbdJBqos4CkUwiKdCgQU0IOzBJwswhBv2Qg3glj5TxzDxvKobuyB4e8w==" + }, "string-width": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", @@ -963,11 +2486,24 @@ "ansi-regex": "^5.0.1" } }, + "strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==" + }, "strip-json-comments": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" }, + "strong-data-uri": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/strong-data-uri/-/strong-data-uri-1.0.6.tgz", + "integrity": "sha512-zhzBZev0uhT2IrFUerenXhfaE0vFUYwAZsnG0gIKGpfM/Gi6jOUQ3cmcvyTsXeDLIPiTubHESeO7EbD6FoPmzw==", + "requires": { + "truncate": "^2.0.1" + } + }, "supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", @@ -976,6 +2512,70 @@ "has-flag": "^3.0.0" } }, + "svgo": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-0.7.2.tgz", + "integrity": "sha512-jT/g9FFMoe9lu2IT6HtAxTA7RR2XOrmcrmCtGnyB/+GQnV6ZjNn+KOHZbZ35yL81+1F/aB6OeEsJztzBQ2EEwA==", + "requires": { + "coa": "~1.0.1", + "colors": "~1.1.2", + "csso": "~2.3.1", + "js-yaml": "~3.7.0", + "mkdirp": "~0.5.1", + "sax": "~1.2.1", + "whet.extend": "~0.9.9" + }, + "dependencies": { + "csso": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/csso/-/csso-2.3.2.tgz", + "integrity": "sha512-FmCI/hmqDeHHLaIQckMhMZneS84yzUZdrWDAvJVVxOwcKE1P1LF9FGmzr1ktIQSxOw6fl3PaQsmfg+GN+VvR3w==", + "requires": { + "clap": "^1.0.9", + "source-map": "^0.5.3" + } + } + } + }, + "term-size": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/term-size/-/term-size-1.2.0.tgz", + "integrity": "sha512-7dPUZQGy/+m3/wjVz3ZW5dobSoD/02NxJpoXUX0WIyjfVS3l0c+b/+9phIDFA7FHzkYtwtMFgeGZ/Y8jVTeqQQ==", + "requires": { + "execa": "^0.7.0" + } + }, + "terser": { + "version": "3.10.2", + "resolved": "https://registry.npmjs.org/terser/-/terser-3.10.2.tgz", + "integrity": "sha512-+QrFoqBImmsQGB4c/HvaqgZynmbNvNBwoBxuu7fYXtq5EEtlLUzph+WimDj+xMkuqawXPMl2lgCIz81CdXvt+w==", + "requires": { + "commander": "~2.17.1", + "source-map": "~0.6.1", + "source-map-support": "~0.5.6" + }, + "dependencies": { + "commander": { + "version": "2.17.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz", + "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==" + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + } + } + }, "through2": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", @@ -984,10 +2584,15 @@ "readable-stream": "3" } }, - "to-readable-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", - "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==" + "timed-out": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", + "integrity": "sha512-G7r3AhovYtr5YKOWQkta8RKAPb+J9IsO4uVmzjl8AZwfhs8UcUwTiD6gcJYSgOtzyjvQKrKYn41syHbUWMkafA==" + }, + "to-fast-properties": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", + "integrity": "sha512-lxrWP8ejsq+7E3nNjwYmUBMAgjMTZoTI+sdBOpvNyijeDLa29LUn9QaoXAHv4+Z578hbmHHJKZknzxVtvo77og==" }, "to-regex-range": { "version": "5.0.1", @@ -1005,100 +2610,102 @@ "nopt": "~1.0.10" } }, - "type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==" + "trim-right": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", + "integrity": "sha512-WZGXGstmCWgeevgTL54hrCuw1dyMQIzWy7ZfqRJfSmJZBwklI15egmQytFP6bPidmw3M8d5yEowl1niq4vmqZw==" }, - "typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "requires": { - "is-typedarray": "^1.0.0" - } + "truncate": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/truncate/-/truncate-2.1.0.tgz", + "integrity": "sha512-em3E3SUDONOjTBcZ36DTm3RvDded3IRU9rX32oHwwXNt3rJD5MVaFlJTQvs8tJoHRoeYP36OuQ1eL/Q7bNEWIQ==" }, - "undefsafe": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.3.tgz", - "integrity": "sha512-nrXZwwXrD/T/JXeygJqdCO6NZZ1L66HrxM/Z7mIq2oPanoN0F1nLx3lwJMu6AwJY69hdixaFQOuoYsMjE5/C2A==", + "uglify-es": { + "version": "3.3.9", + "resolved": "https://registry.npmjs.org/uglify-es/-/uglify-es-3.3.9.tgz", + "integrity": "sha512-r+MU0rfv4L/0eeW3xZrd16t4NZfK8Ld4SWVglYBb7ez5uXFWHuVRs6xCTrf1yirs9a4j4Y27nn7SRfO6v67XsQ==", "requires": { - "debug": "^2.2.0" + "commander": "~2.13.0", + "source-map": "~0.6.1" }, "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } + "commander": { + "version": "2.13.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.13.0.tgz", + "integrity": "sha512-MVuS359B+YzaWqjCL/c+22gfryv+mCBPHAv3zyVI2GN8EY6IRP8VwtasXn8jyyhvvq84R4ImN1OKRtcbIasjYA==" }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" } } }, - "unique-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", - "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", + "undefsafe": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", + "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==" + }, + "unzip-response": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unzip-response/-/unzip-response-2.0.1.tgz", + "integrity": "sha512-N0XH6lqDtFH84JxptQoZYmloF4nzrQqqrAymNj+/gW60AO2AZgOcf4O/nUXJcYfyQkqvMo9lSupBZmmgvuVXlw==" + }, + "upper-case": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz", + "integrity": "sha512-WRbjgmYzgXkCV7zNVpy5YgrHgbBv126rMALQQMrmzOVC4GM2waQ9x7xtm8VU+1yF2kWyPzI9zbZ48n4vSxwfSA==" + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "vinyl": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.2.1.tgz", + "integrity": "sha512-LII3bXRFBZLlezoG5FfZVcXflZgWP/4dCwKtxd5ky9+LOtM4CS3bIRQsmR1KMnMW07jpE8fqR2lcxPZ+8sJIcw==", "requires": { - "crypto-random-string": "^2.0.0" + "clone": "^2.1.1", + "clone-buffer": "^1.0.0", + "clone-stats": "^1.0.0", + "cloneable-readable": "^1.0.0", + "remove-trailing-separator": "^1.0.1", + "replace-ext": "^1.0.0" } }, - "update-notifier": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-5.1.0.tgz", - "integrity": "sha512-ItnICHbeMh9GqUy31hFPrD1kcuZ3rpxDZbf4KUDavXwS0bW5m7SLbDQpGX3UYr072cbrF5hFUs3r5tUsPwjfHw==", - "requires": { - "boxen": "^5.0.0", - "chalk": "^4.1.0", - "configstore": "^5.0.1", - "has-yarn": "^2.1.0", - "import-lazy": "^2.1.0", - "is-ci": "^2.0.0", - "is-installed-globally": "^0.4.0", - "is-npm": "^5.0.0", - "is-yarn-global": "^0.3.0", - "latest-version": "^5.1.0", - "pupa": "^2.1.1", - "semver": "^7.3.4", - "semver-diff": "^3.1.1", - "xdg-basedir": "^4.0.0" - }, - "dependencies": { - "semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", - "requires": { - "lru-cache": "^6.0.0" - } - } + "vinyl-sourcemaps-apply": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/vinyl-sourcemaps-apply/-/vinyl-sourcemaps-apply-0.2.1.tgz", + "integrity": "sha512-+oDh3KYZBoZC8hfocrbrxbLUeaYtQK7J5WU5Br9VqWqmCll3tFJqKp97GC9GmMsVIL0qnx2DgEDVxdo5EZ5sSw==", + "requires": { + "source-map": "^0.5.1" } }, - "url-parse-lax": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", - "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", + "vlq": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/vlq/-/vlq-0.2.3.tgz", + "integrity": "sha512-DRibZL6DsNhIgYQ+wNdWDL2SL3bKPlVrRiBqV5yuMm++op8W4kGFtaQfCs4KEJn0wBZcHVHJ3eoywX8983k1ow==" + }, + "wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", "requires": { - "prepend-http": "^2.0.0" + "defaults": "^1.0.3" } }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + "whet.extend": { + "version": "0.9.9", + "resolved": "https://registry.npmjs.org/whet.extend/-/whet.extend-0.9.9.tgz", + "integrity": "sha512-mmIPAft2vTgEILgPeZFqE/wWh24SEsR/k+N9fJ3Jxrz44iDFy9aemCxdksfURSHYFCLmvs/d/7Iso5XjPpNfrA==" }, - "widest-line": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", - "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "requires": { - "string-width": "^4.0.0" + "isexe": "^2.0.0" } }, "wrap-ansi": { @@ -1116,32 +2723,11 @@ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" }, - "write-file-atomic": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", - "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", - "requires": { - "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" - } - }, - "xdg-basedir": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", - "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==" - }, "y18n": { "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==" }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, "yargs": { "version": "17.3.1", "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.3.1.tgz", diff --git a/package.json b/package.json index f7cfff8..0050885 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "basescript.js", - "version": "0.1.21", + "version": "0.1.33", "description": "A scritpting language powered with Node.js and Nearley, that compiles down to JavaScript, and has the possibility for even more!", "main": "index.js", "watch": { diff --git a/src/script/script.bs b/src/script/script.bs index a60920a..bdfb167 100644 --- a/src/script/script.bs +++ b/src/script/script.bs @@ -1,2 +1,5 @@ -a = 10 -a.f() \ No newline at end of file +#include +print Date.now +print Date.year +print Date.msInYear +//print lastYear.now \ No newline at end of file diff --git a/src/script/script.js b/src/script/script.js index 2208450..eed9b5f 100644 --- a/src/script/script.js +++ b/src/script/script.js @@ -1,454 +1,97 @@ -if (!globalThis) { globalThis = window || global || this || {}; } try { globalThis.require = require; } catch (err) { globalThis.require = () => undefined; } - class Variable { - constructor(name, type, value) { - this.name = name; - this.type = type; - this.value = value; - } - set valueOf(value) { - if (this.type == 'let' || this.type == '\\') return this.value; - if (BS.getType(value) != this.type) { - throw new TypeError(`Assignment of a different type to variable "${this.name}" rather than "${this.type}" is prohibited.`) - } - this.value = value; - } - get valueOf () { - return this.value; - } -} -globalThis.BS = { - var(name, type, value) { - if (BS.getType(value) !== type) throw new TypeError(`Variable "${name}" is required to be "${type}", got "${BS.getType(value)}" instead.`) - return new Variable(name, type, value); - }, - setValue(name, oldValue, value) { - if (oldValue instanceof Variable) { - oldValue.valueOf = value; - return oldValue; - } - return value; - }, - ck(value) { - if (value !== void 0) - return value; - return null; - }, - through (value0, value1, line, col) { - if (typeof value0 != 'number' || typeof value1 != 'number') { - throw new TypeError(`Number is expected on the line ${line}, col ${col}.`); - } - let output = []; - let min = Math.min(value0, value1); - let max = Math.max(value0, value1); - for (let i = min; i <= max; i++) { - output.push(i); +if (!globalThis) { globalThis = window || global || this || {}; } try { globalThis.require = require; } catch (err) { globalThis.require = () => undefined; } +if (!Array.isArray) {Array.isArray=function(arg) {return Object.prototype.toString.call(arg)==='[object Array]';};} globalThis.BS={var(name, type, value) {if (BS.getType(value)!==type) throw new TypeError(`Variable "${name}" is required to be "${type}", got "${BS.getType(value)}" instead.`); return new Variable(name, type, value);}, setValue(name, oldValue, value) {if (oldValue instanceof Variable) {oldValue.valueOf=value; return oldValue;} return value;}, through (value0, value1, line, col) {if (typeof value0!='number'||typeof value1!='number') {throw new TypeError(`Number is expected on the line ${line}, col ${col}.`);} let output=[]; let min=Math.min(value0, value1); let max=Math.max(value0, value1); for (let i=min; i<=max; i++) {output.push(i);} if (value0!=min) output=output.reverse(); return output;}, delete (value, index) {Array.prototype.splice.call(value, index, 1); return value;}, slice (value, start, end, step=1, line, col) {if (!Array.isArray(value)&&typeof value!='string') {throw new TypeError(`Array or string was expected at line ${line}, col ${col}`);} if (typeof start!='number') {throw new TypeError(`Number was expected at line ${line}, col ${col}`);} if (end===null&&step===null) {return value.slice(start);} step=step|0; if (step>=0) step=1; else step=-1; let result=value.slice(start, end); if (step===-1) {if (typeof value==='string') return Array.from(result).reverse().join(''); return result.reverse();} return result;}, customTypes: {}, types: {Array (value) {return Array.isArray(value);}, Null (value) {return value===null;}, Undefined (value) {return value===void 0;}, Int (value) {return parseInt(value)===value&&!Number.isNaN(value);}, Float (value) {return typeof value==='number'&&!Number.isNaN(value);}, Number (value) {return typeof value==='number'&&!Number.isNaN(value);}, BigInt(value) {return typeof value==='bigint';}, NaN (value) {return Number.isNaN(value);}, String (value) {return typeof value==='string';}, Function (value) {return typeof value==='function';}, Symbol (value) {return typeof value==='symbol';}, Boolean (value) {return typeof value==='boolean';}, Object(value) {if (BS.types.HTML&&BS.types.HTML(value)) {return false;} return typeof value==='object'&&value!==null;},}, checkArgType(type, name, value, line, col) {if (type in this.customTypes) {let r=BS.customTypes[type]; if (r&&r(value)) return true;} if (type in this.types) {let r=BS.types[type]; if (r&&r(value)) return true;} throw new TypeError(`Argument "${name}" is not type of "${type}" at line ${line}, col ${col}.`);}, convert(value, type, outerType) {let t=this.getType(value); if (t) t=t.toLowerCase(); let tmp=null; if (typeof type!=='object'&&t==type.toLowerCase()) return value; let gt=function (value, type, outerType) {outerType=outerType||this.getType(value); switch (type) {case 'Number': case 'Float': tmp=parseFloat(value); if (isNaN(tmp)) return 0; return tmp; case 'Int': return value|0; case 'String': if (t=='html') return JSON.stringify(this.DOMtoJSON(value)); if (t=='array') return value.join(''); if (t=='object') return JSON.stringify(value); if (t=='boolean') return !!value; if (t=='null') return 'null'; if (t=='undefined') return 'undefined'; else return value.toString(); case 'Array': if (t=='undefined'||t=='null') return []; if (t=='html') return Object.values(this.DOMtoJSON(value)); if (t=='object') return Object.values(value); if (t=='string') {try {let z=JSON.parse(t); let v=this.getType(z)=='array'; if (v) return z; throw 'err';} catch (err) {} return value.split('');} if (t=='number'||t=='int'||t=='float') {return (''+value).split('');} else return [value]; case 'JSON': if (t=='html') return this.DOMtoJSON(value); if (t=='object'||t=='string'||t=='array'||t=='null'||t=='number' ) return value; throw new TypeError(`Cannot convert ${t} to ${type}`); case 'Object': return Object(value); case 'Boolean': return Boolean(value); case 'List': let ul=document.createElement('ul'); if (t=='object'||t=='array'||t=='html') {for (let i in value) {let li=document.createElement('li'); if (t=='object') {let span=document.createElement('span'); span.className='convert_key'; span.innerText=i; li.append(span); li.appendChild(document.createTextNode(': '));} let span=document.createElement('span'); span.className='convert_value'; let ty=this.getType(value[i]); if (ty=='String'||ty=='Number'||ty=='Int'||ty=='Float') {if (outerType=='Array') {let li2=document.createElement('li'); li2.innerText=gt(value[i], type, outerType); if (ty=='String') li2.innerText=`"${li2.innerText}"`; span.append(li2);} else {span.innerText=`"${value[i]}"`;}} else if (ty=='Array') {span.append('['); span.append(gt(value[i], type, 'Array')); span.append(']');} else if (ty=='Object') {span.append(gt(value[i], type));} else span.innerText=`${value[i]}`; span.className +=` ${ty}`; li.append(span); ul.append(li);} return ul;} else if (t=='int'||t=='float'||t=='string'||null) {let li=document.createElement('li'); li.textContent=value; ul.append(li);} return ul;};}.bind(this); if (typeof type!='string') {let r=value; console.log(type.length); for (let i=0; i{console.log({each: this.convert(j, type[i+1]), type: type[i+1]}); return this.convert(j, type[i+1]);});}} console.log(r);}}; return gt(value, type);}, getType (value) {for (let i in this.types) {try {if (this.types[i](value)) return i;} catch (err) {continue}}}, sizeof(object) {if (object instanceof Set||object instanceof Map) return object.size; if (object instanceof Array||object instanceof String) return object.length; if (object instanceof Object) return Object.keys(object).length; if (object===void 0||object===null) {return 0;} return Object.keys(object).length;}, deepFreeze (object) {const propNames=Object.getOwnPropertyNames(object); for (const name of propNames) {const value=object[name]; if (value&&typeof value==="object") {globalThis.BS.deepFreeze(value);}} return Object.freeze(object);}, last(number) {if (number>0) return number - 1; return 0;}, storage: [], defineProperty(prototype, propertyName, valueCallback, options) {options=options||{writable: true, enumerable: false, configurable: true}; options.value=valueCallback; Object.defineProperty(prototype, propertyName, options);}, Object(object) {return object;}, Array(array) {if (array instanceof Array===false) array=BS.convert(array, 'Array'); let o=Object.create(null); let proto=['push', 'pop', 'shift', 'unshift', 'slice', 'splice', 'join', 'sort', 'map', 'forEach', 'indexOf', 'at', 'includes']; for (let i in proto) {BS.defineProperty(o, proto[i], function () {return Array.prototype[proto[i]].apply(this, arguments);});} array.__proto__=o; return array;},}; const BS=globalThis.BS; const TypedArray=Reflect.getPrototypeOf(Int8Array); for (const C of [Array, String, TypedArray]) {BS.defineProperty(C.prototype, "at", function at(n) {n=Math.trunc(n)||0; if (n<0) n +=this.length; if (n<0||n>=this.length) return undefined; return this[n];}); BS.defineProperty(C.prototype, "last", function last() {return this[this.length-1];});} BS.defineProperty(String.prototype, "noBreaks", function noBreaks() {return this.replace(/\r\n?/g, '');}); function list (amount, callback) {let array=[]; for (let i=0; iconsole.log(...args), sizeof=function sizeof (object) {if (object===void 0||object===null) {throw new TypeError('Cannot convert undefined or null to object');} if (object instanceof Set||object instanceof Map) {return object.size;} return Object.keys(object).length;}; function clear_function_value(v) {if (typeof v!=='function') return v; let r=Object.create(null); r.name=v.name; r.value=v.value.toString(); r.type='function'; return r;} function get_clear_value(v) {if (typeof v!='object'||v===null||v.constructor=='Date') {return v;} let r=Object.create(null); if (BS.getType(v)=='Array') {r=BS.Array([]);} for (let i in v) {if (v[i] instanceof Variable) {if (v[i].name=='this') continue; else r[i]=v[i].value;} else if (BS.getType(v[i])=='Object'&&v[i].constructor=='Date') {r[i]=get_clear_value(v[i]);} else {r[i]=v[i];}} return r;} function $get(object, property, unclearValue) {if (object===null||object===void 0) {throw new TypeError(`Cannot read properties of "null"`);} let v=object[property]; if (v!==void 0) {if (v instanceof Variable) {return v.value;} if (BS.getType(v)=='Object') {if (unclearValue) return v; return get_clear_value(v);} return v;} return null;} function $free(object, scope) {if (scope) {if (!object) {throw new TypeError(`Attempt to delete non-existing variable`);} scope.delete(object); return;}} function $delete(object, property) {if (object===null||object===void 0) {throw new TypeError(`Cannot read or delete properties of "null"`);} let type=BS.getType(object); if (type!='Array'&&type!='Object') {throw new TypeError(`Attempt to change immutable objects"`);} if (type=='Array'||type=='String') {if (isNaN(parseInt(property))) {return object;} try {object.splice(property, 1);} finally {return object;}} delete object[property]; return object;} function $return(localScope, globalScope, value) {$clearScope(localScope, globalScope); return value;} function $clearScope(localScope, globalScope) {localScope.scopes.pop(); globalScope.scopes.pop();} function $add(value1, value2) {if (Array.isArray(value1)&&Array.isArray(value2)) {return [].concat(value1, value2);} if (Array.isArray(value1)) {return [].concat(value1, value2)} if (BS.getType(value1)=='Object'&&BS.getType(value2)=='Object') {return Object.assign({}, value1, value2);} if (value1===null||value2===null) {throw new TypeError('"null" cannot be used as in math expressions');} if (typeof value1==='string') {if (typeof value2!=='string') {throw new TypeError('String was expected for concatination, got "'+BS.getType(value2)+'" insetead');} return value1 + value2;} if (typeof value1==='number') {if (typeof value2!=='number') {throw new TypeError('Number was expected for math expression, got "'+BS.getType(value2)+'" insetead');} return value1 + value2;} return value1 + value2;} function $update(obj, property, value) {if (!property in obj) {throw new Error(`Property "${property}" is not found`);} return obj[property]=value;} function $new(value) {return new value;}const range=function range(start, stop, include=false) {if (stop===undefined) {stop=start; start=0;} if (include) {if (start>stop) {stop--;} else {stop++;}} let i=start; + return {[Symbol.iterator]: ()=>{return {next() {while (i!==stop) {let temp=i; if (start>stop) i--; else i++; return {value: temp, done: false,}} return {done: true};}}}}}; const isNaN=function isNaN(number) {return typeof number=='number'&&number!==number;}; const BUILT_IN_VALUES={Infinity: Infinity, NaN: NaN, range: range, + isNaN: isNaN, + empty: function empty(object) {if (['array', 'string', 'object'].includes(typeof object)) {return Object.keys(object).length==0;} throw new TypeError(`Unexpected type of argument for "empty" function. "array", "string" or "object" was expected`)}, round: function round(object) {return Math.round(object)},}; class Variable {constructor(name, type, value, constant=false, ignoreError=false) {this.name=name; this.type=type; this.value=value===void 0 ? null : value; this.constant=constant; this.ignoreError=ignoreError;} set realValue(value) {if (this.constant&&!this.ignoreError) {throw new Error(`Attempt to change value of constant "${this.name}"`)} else if (this.constant) {return this.value;} if (this.type=='let'||this.type=='\\' ) return this.value; if (this.type!==null&&BS.getType(value)!=this.type) {throw new TypeError(`Assignment of a different type to variable "${this.name}" rather than "${this.type}" is prohibited`);} this.value=value;} get realValue () {return this.value;} update(operator, value) {this.value=eval('this.value' + operator + 'value');}} class Scopes {constructor() {this.scopes=[]; this.globalScope=null;} new(level, parent=this) {let scope=new Scope(level, parent); parent.scopes.push(scope); return scope;} global() {let $0=this.new(0); $0.set('this', $0.variables, true, true, true); $0.init(BUILT_IN_VALUES); this.globalScope=$0; return $0;} append_to_global(object) {for (let i in object) {this.globalScope.set(i, object[i], true, true); BUILT_IN_VALUES[i]=object[i];}}} class Scope {constructor(level, parent) {this.level=level; this.variables={}; this.scopes=[]; this.parent=parent;} get(propertyName, unclearValue) {if (this.variables[propertyName]!==void 0) {if (unclearValue) return this.variables[propertyName].value; return this.variables[propertyName].realValue;} let level=this.level; if (level==0||!this.parent) {console.warn(`Variable "${propertyName}" has never been declared. "null" is returned instead.`); return null;} return this.parent.get(propertyName);} getScope(propertyName) {if (this.variables[propertyName]) {return this;} let level=this.level; if (level==0||!this.parent) return null; return this.parent.getScope(propertyName);} init(values) {for (let i in values) {this.set(i, values[i], true, true);}} set(propertyName, value, local=false, constant=false, ignoreError=false) {if (local||constant) {let v=this.variables[propertyName]; if (!v) {this.variables[propertyName]=new Variable(propertyName, null, value, constant, ignoreError)} else {this.variables[propertyName].realValue=value;} return null;} let scope=this.getScope(propertyName); if (scope==null) {scope=this;} let v=scope.variables[propertyName]; if (!v) {scope.variables[propertyName]=new Variable(propertyName, null, value, constant);} else {scope.variables[propertyName].realValue=value;} return null;} delete(propertyName) {if (typeof propertyName!='string') {for (let i in this.variables) {if (this.variables[i].value==propertyName) {delete this.variables[i]; return true;}}} if (this.variables[propertyName]) {delete this.variables[propertyName]; return true;} let level=this.level; if (level==0||!this.parent) return false; return this.parent.delete(propertyName);}} const scopes=new Scopes(); const $0=scopes.global(); +// your code below this line + +(function() { + class date { + constructor() {} + get now() { + return Date.now() } - if (value0 != min) - output = output.reverse(); - return output; - }, - delete (value, index) { - // if (typeof value === 'string') { - // return value.substring(0, index) + value.substring(index+1, value.length); - // } - Array.prototype.splice.call(value, index, 1); - return value; - }, - slice (value, start, end, step = 1, line, col) { - if (!Array.isArray(value) && typeof value != 'string') { - throw new TypeError(`Array or string was expected at line ${line}, col ${col}`); + // !TODO: implement + //setDate(value) { + // if (typeof value != 'object' || value.constructor != Object) { + // throw TypeError('setDate() expects an object.') + // } + // for (let i in value) { + // if (typeof value[i] != 'number' || value[i] < 0 || isNaN(value[i])) { + // throw TypeError('setDate() expects an object with positive number values.') + // } + // } + // let _date = new Date(); + // if (value.hasOwnProperty('year')) { + // _date.setFullYear(value.year); + // } + // if (value.hasOwnProperty('month')) { + // _date.setMonth(value.month); + // } + // if (value.hasOwnProperty('day')) { + // _date.setDate(value.day); + // } + // if (value.hasOwnProperty('hours')) { + // _date.setHours(value.hours); + // } + // if (value.hasOwnProperty('minutes')) { + // _date.setMinutes(value.minutes); + // } + // if (value.hasOwnProperty('seconds')) { + // _date.setSeconds(value.seconds); + // } + // if (value.hasOwnProperty('milliseconds')) { + // _date.setMilliseconds(value.milliseconds); + // } + // _date.prototype = date + // return _date; + //} + get ms() { + return new Date().getMilliseconds() } - if (typeof start != 'number') { - throw new TypeError(`Number was expected at line ${line}, col ${col}`); + get seconds() { + return new Date().getSeconds() } - if (end === null && step === null) { - return value.slice(start); + get msInSecond() { + return 1000 } - step = step|0; - if (step >= 0) step = 1; - else step = -1; - // throw new Error(`Step argument on slicing must not be zero at line ${line}, col ${col}`); - // if (step !== 1 && step !== -1) - // throw new Error(`Step must be 1 or -1 at ${line}, col ${col}`); - let result = value.slice(start, end); - if (step === -1) { - if (typeof value === 'string') - return Array.from(result).reverse().join(''); - return result.reverse(); + get minutes() { + return new Date().getMinutes() } - return result; - }, - //ast: (function () { - // let r = globalThis.require('./index'); - // if (r) return r; - // return function () {console.warn('Ast is not supported yet in browsers.')} - //})(), - //parse: (function () { - // let r = globalThis.require('./ast_to_js.js'); - // if (r) return r; - // return function () {console.warn('@eval is not supported yet in browsers.')} - //})(), - //fs: (function () { - // let r = globalThis.require('fs'); - // console.log(r); - // if (r) return r; - // return function () {console.warn('@import is not supported yet in browsers.')}; - //})(), - customTypes: {}, - types: { - Array (value) { - return Array.isArray(value); - }, - Null (value) { - return value === null; - }, - Undefined (value) { - return value === void 0; - }, - Int (value) { - return parseInt(value) === value && !Number.isNaN(value); - }, - Float (value) { - return typeof value === 'number' && !Number.isNaN(value); - }, - Number (value) { - return typeof value === 'number' && !Number.isNaN(value); - }, - BigInt(value) { - return typeof value === 'bigint'; - }, - NaN (value) { - return Number.isNaN(value); - }, - String (value) { - return typeof value === 'string'; - }, - Function (value) { - return typeof value === 'function'; - }, - Symbol (value) { - return typeof value === 'symbol'; - }, - Boolean (value) { - return typeof value === 'boolean'; - }, - Object(value) { - if (BS.types.HTML && BS.types.HTML(value)) { - return false; - } - return typeof value === 'object' && value !== null; - }, - }, - checkArgType(type, value, line, col) { - if (type in this.customTypes) { - let r = BS.customTypes[type]; - if (r && r(value)) - return true; + get msInMinute() { + return 60000 } - if (type in this.types) { - let r = BS.types[type]; - if (r && r(value)) - return true; + get hours() { + return new Date().getHours() } - throw new TypeError(`Argument "${value}" is not type of "${type}" at line ${line}, col ${col}.`); - }, - convert(value, type, outerType) { - let t = this.getType(value); - if (t) t = t.toLowerCase(); - let tmp = null; - if (typeof type !== 'object' && t == type.toLowerCase()) return value; - let gt = function (value, type, outerType) { - outerType = outerType || this.getType(value); - switch (type) { - case 'Number': - case 'Float': - tmp = parseFloat(value); - if (isNaN(tmp)) return 0; - return tmp; - case 'Int': - return value|0; - case 'String': - if (t == 'html') return JSON.stringify(this.DOMtoJSON(value)); - if (t == 'array') return value.join(''); - if (t == 'object') return JSON.stringify(value); - if (t == 'boolean') return !!value; - if (t == 'null') return 'null'; - if (t == 'undefined') return 'undefined'; - else return value.toString(); - case 'Array': - if (t == 'undefined' || 'null') return [] - if (t == 'html') return Object.values(this.DOMtoJSON(value)); - if (t == 'object') return Object.values(value); - if (t == 'string') { - try { - let z = JSON.parse(t); - let v = this.getType(z) == 'array'; - if (v) return z; - throw 'err'; - } catch (err) {} - return value.split(''); - } - if (t == 'number' || t == 'int' || t == 'float') { - return (''+value).split(''); - } - else return [value]; - case 'JSON': - if (t == 'html') return this.DOMtoJSON(value); - if (t == 'object' || t == 'string' || t == 'array' || t == 'null' || t == 'number' ) - return value; - throw new TypeError(`Cannot convert ${t} to ${type}`); - case 'Object': - return Object(value); - case 'Boolean': - return Boolean(value); - case 'List': - let ul = document.createElement('ul'); - if (t == 'object' || t == 'array' || t == 'html') { - for (let i in value) { - let li = document.createElement('li'); - if (t == 'object') { - let span = document.createElement('span'); - span.className = 'convert_key'; - span.innerText = i; - li.append(span); - li.appendChild(document.createTextNode(': ')); - } - let span = document.createElement('span'); - //let li2; - //if (ty == 'Array') - // li2 = document.createElement('li'); - span.className = 'convert_value'; - let ty = this.getType(value[i]); - if (ty == 'String' || ty == 'Number' || ty == 'Int' || ty == 'Float') { - //span.className += ' string'; - if (outerType == 'Array') { - let li2 = document.createElement('li'); - li2.innerText = gt(value[i], type, outerType); - if (ty == 'String') li2.innerText = `"${li2.innerText}"`; - span.append(li2); - //span.append(li) = `"${value[i]}"`; - } else { - span.innerText = `"${value[i]}"`; - } - } else if (ty == 'Array') { - //debugger - //span.className += ' array'; - //span.innerText = JSON.stringify(value[i], null, 2); - span.append('[') - span.append(gt(value[i], type, 'Array')) - span.append(']') - } else if (ty == 'Object') { - //span.innerText = JSON.stringify(value[i], null, 2); - //let innerSpan = gt(value[i], type) - span.append(gt(value[i], type)) - } - else span.innerText = `${value[i]}`; - span.className += ` ${ty}`; - li.append(span); - //if (li2) li.append(li2); - ul.append(li); - } - return ul; - } else if (t == 'int' || t == 'float' || t == 'string' || null) { - let li = document.createElement('li'); - li.textContent = value; - ul.append(li); - } - return ul; - }; - }.bind(this); - if (typeof type != 'string') { - let r = value; - // debugger - console.log(type.length); - for (let i = 0; i < type.length; i++) { - r = gt(r, type[i]); - console.log({r, type: type[i]}); - if (i != length -1) { - if (r.map) { - r = r.map(j => { - console.log({each: this.convert(j, type[i+1]), type: type[i+1]}); - return this.convert(j, type[i+1]); - }); - } - } - console.log(r); - } - }; - // console.log('h', gt(value,type)) - return gt(value, type); - }, - getType (value) { - for (let i in this.types) { - try { - if (this.types[i](value)) return i; - //if (this.curstomTypes[i](value)) return i; - } catch (err) {continue} + get msInHour() { + return 3600000 } - }, - sizeof(object) { - // ? Can be simplified - //* No need for so many checks - if (object instanceof Set || object instanceof Map) - return object.size; - if (object instanceof Array || object instanceof String) - return object.length; - if (object instanceof Object) - return Object.keys(object).length; - //else return 0 - if (object === void 0 || object === null) { - return 0 - //throw new TypeError('Cannot convert undefined or null to object'); + get day() { + return new Date().getDay() } - return Object.keys(object).length; - }, - deepFreeze (object) { - // Retrieve the property names defined on object - const propNames = Object.getOwnPropertyNames(object); - // Freeze properties before freezing self - for (const name of propNames) { - const value = object[name]; - - if (value && typeof value === "object") { - globalThis.BS.deepFreeze(value); - } + get msInDay() { + return 86400000 } - return Object.freeze(object); - }, - last(number) { - // returns the last index of array item - if (number > 0) return number - 1; - return 0; - }, - storage: [], - // require('./ast_to_js.js')// || function () {console.warn('@eval is not supported yet in browsers.')} -}; -const BS = globalThis.BS; - -const TypedArray = Reflect.getPrototypeOf(Int8Array); -for (const C of [Array, String, TypedArray]) { - Object.defineProperty(C.prototype, "at", { - value: function at(n) { - // ToInteger() abstract op - n = Math.trunc(n) || 0; - // Allow negative indexing from the end - if (n < 0) n += this.length; - // OOB access is guaranteed to return undefined - if (n < 0 || n >= this.length) return undefined; - // Otherwise, this is just normal property access - return this[n]; - }, - writable: true, - enumerable: false, - configurable: true - }); - Object.defineProperty(C.prototype, "last", { - value: function last() { - return this[this.length-1]; - }, - writable: true, - enumerable: false, - configurable: true - }); -} -Object.defineProperty(String.prototype, "noBreaks", { - value: function noBreaks() { - return this.replace(/\r\n?/g, ''); - }, - writable: true, - enumerable: false, - configurable: true -}); -// ! causes issues in for in loop -//Array.prototype.last = function () { -// return this[this.length - 1]; -//}; -function list (amount, callback) { - let array = []; - for (let i = 0; i < amount; i++) { - if (typeof callback === 'function') { - console.log(i); - array.push(callback(i)); - } else { - array.push(callback); - } - } - return array; -} -function range(start, stop, include = false){ - if (stop === undefined) { - stop = start; - start = 0; - } - if (include) { - if (start > stop) { - stop--; - } else { - stop++ + get month() { + return new Date().getMonth() } - } - let i = start; // start - return { // iterator protocol - [Symbol.iterator]:() => { // @@iterator - return { // object with the next function - next () { - while(i !== stop){ - let temp = i; - if (start > stop) i--; - else i++; - return { - value: temp, - done: false, - } - } - return {done: true} - } - } + get msInMonth() { + return 2628000000 } - } -} -const PI = 3.141592653589793, - E = 2.718281828459045, - log = (...args) => console.log(...args), - sqrt = Math.sqrt.bind(Math), - Time = { - get now () { - return Date.now() - }, - get ms () { - return new Date().getMilliseconds() - }, - get seconds () { - return new Date().getSeconds() - }, - get minutes () { - return new Date().getMinutes() - }, - get hours () { - return new Date().getHours() - }, - get day () { - return new Date().getDay() - }, - get month () { - return new Date().getMonth() - }, - get year () { + get year() { return new Date().getFullYear() - }, - }, - sizeof = function sizeof (object) { - if (object === void 0 || object === null) { - throw new TypeError('Cannot convert undefined or null to object'); } - if (object instanceof Set || object instanceof Map) { - return object.size; + get msInYear() { + return 31536000000 } - return Object.keys(object).length; }; - - -// your code below this line - -a = 10; -local.get("a").f(); \ No newline at end of file + scopes.append_to_global({ + Date: new date() + }); +})(); +(function() { + console.log(get_clear_value($get($0.get("Date"), "now"))); + console.log(get_clear_value($get($0.get("Date"), "year"))); + console.log(get_clear_value($get($0.get("Date"), "msInYear"))); +})(); \ No newline at end of file