UNPKG

tynder

Version:

TypeScript friendly Data validator for JavaScript.

1,524 lines (1,359 loc) 401 kB
#!/usr/bin/env node module.exports.tynder = /******/ (() => { // webpackBootstrap /******/ "use strict"; /******/ var __webpack_modules__ = ({ /***/ "./node_modules/fruitsconfits/modules/lib/object-parser.js": /*!*****************************************************************!*\ !*** ./node_modules/fruitsconfits/modules/lib/object-parser.js ***! \*****************************************************************/ /*! namespace exports */ /*! export getObjectParsers [provided] [no usage info] [missing usage info prevents renaming] */ /*! export objClass [provided] [no usage info] [missing usage info prevents renaming] */ /*! export objClassByNeedleFn [provided] [no usage info] [missing usage info prevents renaming] */ /*! export objClassNot [provided] [no usage info] [missing usage info prevents renaming] */ /*! export objSequence [provided] [no usage info] [missing usage info prevents renaming] */ /*! other exports [not provided] [no usage info] */ /*! runtime requirements: __webpack_require__, __webpack_require__.r, __webpack_exports__, __webpack_require__.d, __webpack_require__.* */ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "objSequence": () => /* binding */ objSequence, /* harmony export */ "objClass": () => /* binding */ objClass, /* harmony export */ "objClassNot": () => /* binding */ objClassNot, /* harmony export */ "objClassByNeedleFn": () => /* binding */ objClassByNeedleFn, /* harmony export */ "getObjectParsers": () => /* binding */ getObjectParsers /* harmony export */ }); /* harmony import */ var _parser__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./parser */ "./node_modules/fruitsconfits/modules/lib/parser.js"); // Copyright (c) 2019 Shellyl_N and Authors // license: ISC // https://github.com/shellyln function objSequence(helper, comparator) { return needle => { return input => { const len = Math.max(0, input.end - input.start); let matched = true; if (len >= needle.length) { for (let i = 0; i < needle.length; i++) { if (!comparator(input.src[input.start + i], needle[i])) { matched = false; break; } } } else { matched = false; } return matched ? { succeeded: true, next: { src: input.src, start: input.start + needle.length, end: input.end, context: input.context, templateArgs: input.templateArgs, templateArgsPos: input.templateArgsPos }, tokens: [helper(needle)] } : { succeeded: false, error: false, src: input.src, pos: input.start, // eslint-disable-next-line @typescript-eslint/restrict-template-expressions message: `operator "objSequence(${needle})"` }; }; }; } function objClass(helper, comparator) { // NOTE: <T> version `needles` type is `T`. return (...needles) => { return input => { const len = Math.max(0, input.end - input.start); let index = -1; const succeeded = len > 0 ? needles.some((needle, idx) => { if (comparator(input.src[input.start], needle)) { index = idx; return true; } }) : false; return succeeded ? { succeeded: true, next: { src: input.src, start: input.start + 1, end: input.end, context: input.context, templateArgs: input.templateArgs, templateArgsPos: input.templateArgsPos }, tokens: [helper(needles[index])] } : { succeeded: false, error: false, src: input.src, pos: input.start, message: `operator "objClass(${needles.join(',')})"` }; }; }; } function objClassNot(helper, comparator) { // NOTE: <T> version `needles` type is `T`. return (...needles) => { return input => { const len = Math.max(0, input.end - input.start); if (len > 0) { for (const needle of needles) { let matched = true; if (!comparator(input.src[input.start], needle)) { matched = false; break; } if (matched) { return { succeeded: false, error: false, src: input.src, pos: input.start, message: `operator "objClassNot(${needles.join(',')})"` }; } } } return { succeeded: true, next: { src: input.src, start: input.start + 1, end: input.end, context: input.context, templateArgs: input.templateArgs, templateArgsPos: input.templateArgsPos }, tokens: [helper(input.src[input.start])] }; }; }; } function objClassByNeedleFn(helper, comparator) { // NOTE: needles[i] should be one character. surrogate pair and/or ligature are accepted. // NOTE: <T> version `needles` type is `T`. return needle => { return input => { const len = Math.max(0, input.end - input.start); const matched = len > 0 ? needle(input.src[input.start]) : false; return matched ? { succeeded: true, next: { src: input.src, start: input.start + 1, end: input.end, context: input.context, templateArgs: input.templateArgs, templateArgsPos: input.templateArgsPos }, tokens: [helper(input.src[input.start])] } : { succeeded: false, error: false, src: input.src, pos: input.start, message: `operator "objClassByNeedleFn"` }; }; }; } // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types function getObjectParsers(params) { const clsFn = objClassByNeedleFn(params.rawToToken, params.comparator); const isAny = clsFn(src => true); // TODO: reduce unneccessary call for adding types. return { seq: objSequence(params.rawToToken, params.comparator), cls: objClass(params.rawToToken, params.comparator), notCls: objClassNot(params.rawToToken, params.comparator), clsFn, classes: { any: isAny }, cat: (0,_parser__WEBPACK_IMPORTED_MODULE_0__.transform)(params.concatTokens), once: (0,_parser__WEBPACK_IMPORTED_MODULE_0__.quantify)(1, 1), repeat: (0,_parser__WEBPACK_IMPORTED_MODULE_0__.quantify)(), qty: (min, max) => (0,_parser__WEBPACK_IMPORTED_MODULE_0__.quantify)(min, max), zeroWidth: helper => (0,_parser__WEBPACK_IMPORTED_MODULE_0__.zeroWidth)(helper), err: message => (0,_parser__WEBPACK_IMPORTED_MODULE_0__.zeroWidthError)(message), beginning: helper => (0,_parser__WEBPACK_IMPORTED_MODULE_0__.beginning)(helper), end: helper => (0,_parser__WEBPACK_IMPORTED_MODULE_0__.end)(helper), first: (...parsers) => (0,_parser__WEBPACK_IMPORTED_MODULE_0__.first)(...parsers), or: (...parsers) => (0,_parser__WEBPACK_IMPORTED_MODULE_0__.or)(...parsers), combine: (0,_parser__WEBPACK_IMPORTED_MODULE_0__.transform)(), erase: (0,_parser__WEBPACK_IMPORTED_MODULE_0__.transform)(tokens => []), trans: fn => (0,_parser__WEBPACK_IMPORTED_MODULE_0__.transform)(fn), ahead: (...parsers) => (0,_parser__WEBPACK_IMPORTED_MODULE_0__.lookAhead)(...parsers), behind: (n, helper) => (0,_parser__WEBPACK_IMPORTED_MODULE_0__.lookBehind)(n, helper), rules: args => (0,_parser__WEBPACK_IMPORTED_MODULE_0__.applyProductionRules)(args), makeProgram: _parser__WEBPACK_IMPORTED_MODULE_0__.makeProgram }; } /***/ }), /***/ "./node_modules/fruitsconfits/modules/lib/parser.js": /*!**********************************************************!*\ !*** ./node_modules/fruitsconfits/modules/lib/parser.js ***! \**********************************************************/ /*! namespace exports */ /*! export applyProductionRules [provided] [no usage info] [missing usage info prevents renaming] */ /*! export beginning [provided] [no usage info] [missing usage info prevents renaming] */ /*! export combine [provided] [no usage info] [missing usage info prevents renaming] */ /*! export end [provided] [no usage info] [missing usage info prevents renaming] */ /*! export first [provided] [no usage info] [missing usage info prevents renaming] */ /*! export formatErrorMessage [provided] [no usage info] [missing usage info prevents renaming] */ /*! export lookAhead [provided] [no usage info] [missing usage info prevents renaming] */ /*! export lookBehind [provided] [no usage info] [missing usage info prevents renaming] */ /*! export makeProgram [provided] [no usage info] [missing usage info prevents renaming] */ /*! export or [provided] [no usage info] [missing usage info prevents renaming] */ /*! export quantify [provided] [no usage info] [missing usage info prevents renaming] */ /*! export transform [provided] [no usage info] [missing usage info prevents renaming] */ /*! export zeroWidth [provided] [no usage info] [missing usage info prevents renaming] */ /*! export zeroWidthError [provided] [no usage info] [missing usage info prevents renaming] */ /*! other exports [not provided] [no usage info] */ /*! runtime requirements: __webpack_require__, __webpack_require__.r, __webpack_exports__, __webpack_require__.d, __webpack_require__.* */ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "formatErrorMessage": () => /* binding */ formatErrorMessage, /* harmony export */ "zeroWidth": () => /* binding */ zeroWidth, /* harmony export */ "zeroWidthError": () => /* binding */ zeroWidthError, /* harmony export */ "beginning": () => /* binding */ beginning, /* harmony export */ "end": () => /* binding */ end, /* harmony export */ "quantify": () => /* binding */ quantify, /* harmony export */ "first": () => /* binding */ first, /* harmony export */ "or": () => /* binding */ or, /* harmony export */ "transform": () => /* binding */ transform, /* harmony export */ "combine": () => /* binding */ combine, /* harmony export */ "lookAhead": () => /* binding */ lookAhead, /* harmony export */ "lookBehind": () => /* binding */ lookBehind, /* harmony export */ "applyProductionRules": () => /* binding */ applyProductionRules, /* harmony export */ "makeProgram": () => /* binding */ makeProgram /* harmony export */ }); /* harmony import */ var _types__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./types */ "./node_modules/fruitsconfits/modules/lib/types.js"); // Copyright (c) 2019 Shellyl_N and Authors // license: ISC // https://github.com/shellyln function getLineAndCol(src, pos) { let line = 1; let col = 1; for (let i = 0; i <= pos; i++) { switch (src[i]) { case '\r': if (src[i + 1] === '\n') { i++; } // Fall Throught case '\n': line++; col = 1; break; default: col++; break; } } return { line, col }; } function formatErrorMessage(result) { let msg = ''; let src = ''; if (typeof result.src === 'string') { src = result.src.slice(Math.max(result.pos - 5, 0), result.pos + 55); // NOTE: (TS>=4.0) TS2339: Property 'slice' does not exist on type 'never'. let ar = src.split(/\r\n|\n|\r/); ar = ar.slice(0, 1).concat(' ^~~~~~~~').concat(...ar.slice(1)); src = ar.join('\n') + '\n\n'; const lineAndCol = getLineAndCol(result.src, result.pos); msg = `parse failed at position:${result.pos} line:${lineAndCol.line} col:${lineAndCol.col} ${result.message ? ` ${result.message}` : ''}\n ${src}`; } else { src = ' (object)\n ^~~~~~~~'; try { src = ' ' + // eslint-disable-next-line @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access JSON.stringify(result.src.slice(Math.max(result.pos - 10, 0), result.pos)) + '\n ' + // eslint-disable-next-line @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access JSON.stringify(result.src.slice(result.pos, result.pos + 1)) + '\n ' + // eslint-disable-next-line @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access JSON.stringify(result.src.slice(result.pos + 1, result.pos + 10)); let ar = src.split(/\r\n|\n|\r/); ar = ar.slice(0, 2).concat(' ^~~~~~~~').concat(...ar.slice(2)); src = ar.join('\n') + '\n\n'; } catch (e) {// Nothing to do. } msg = `parse failed at position:${result.pos} ${result.message ? ` ${result.message}` : ''}\n ${src}`; } return msg; } function zeroWidth(helper) { return input => { return { succeeded: true, next: { src: input.src, start: input.start, end: input.end, context: input.context, templateArgs: input.templateArgs, templateArgsPos: input.templateArgsPos }, tokens: helper ? [helper()] : [] }; }; } function zeroWidthError(message) { return input => { throw new _types__WEBPACK_IMPORTED_MODULE_0__.ParseError({ succeeded: false, error: true, src: input.src, pos: input.start, message: message || '' }); // return ({ // succeeded: false, // error: true, // src: input.src, // pos: input.start, // message: message || '', // }); }; } function beginning(helper) { return input => { return input.start === 0 ? { succeeded: true, next: { src: input.src, start: input.start, end: input.end, context: input.context, templateArgs: input.templateArgs, templateArgsPos: input.templateArgsPos }, tokens: helper ? [helper()] : [] } : { succeeded: false, error: false, src: input.src, pos: input.start, message: 'operator "beginning"' }; }; } function end(helper) { return input => { return input.start === input.end ? { succeeded: true, next: { src: input.src, start: input.start, end: input.end, context: input.context, templateArgs: input.templateArgs, templateArgsPos: input.templateArgsPos }, tokens: helper ? [helper()] : [] } : { succeeded: false, error: false, src: input.src, pos: input.start, message: 'operator "end"' }; }; } // TODO: match by callback function parser // TODO: `nesting` parser function quantify(min, max) { min = min || 0; return parser => { return input => { let next = input; const matched = []; for (;;) { const x = parser(next); if (x.succeeded) { next = x.next; matched.push({ next: x.next, tokens: x.tokens }); if (max && max === matched.length) { break; } } else { if (x.error) { return x; } if (matched.length >= min) { break; } else { return { succeeded: false, error: false, src: next.src, pos: next.start, message: 'operator "quantify"' }; } } } if (matched.length > 0) { const r = []; for (const x of matched) { r.push(...x.tokens); } return { succeeded: true, next: matched[matched.length - 1].next, tokens: r }; } else { return { succeeded: true, next: { src: input.src, start: input.start, end: input.end, context: input.context, templateArgs: input.templateArgs, templateArgsPos: input.templateArgsPos }, tokens: [] }; } }; }; } function first(...parsers) { return input => { let matched = null; let last = null; for (const parser of parsers) { const x = parser(input); if (x.succeeded) { matched = { next: x.next, tokens: x.tokens }; break; } if (last) { if (x.error) { if (!last.error || last.pos < x.pos) { last = x; } } else if (last.pos < x.pos) { last = x; } } else { last = x; } } return matched ? { succeeded: true, next: matched.next, tokens: matched.tokens } : last ? last : { succeeded: false, error: false, src: input.src, pos: input.start, message: 'operator "first"' }; }; } function or(...parsers) { return input => { const matched = []; let last = null; for (const parser of parsers) { const x = parser(input); if (x.succeeded) { matched.push({ next: x.next, tokens: x.tokens }); } else { if (last) { if (x.error) { if (!last.error || last.pos < x.pos) { last = x; } } else if (last.pos < x.pos) { last = x; } } else { last = x; } } } if (matched.length > 0) { const z = matched.reduce((a, b) => a.next.start >= b.next.start ? a : b); return { succeeded: true, next: z.next, tokens: z.tokens }; } return last ? last : { succeeded: false, error: false, src: input.src, pos: input.start, message: 'operator "or"' }; }; } function transform(trans, ctxTrans) { return (...parsers) => { return input => { let next = input; const tokens = []; for (const parser of parsers) { const x = parser(next); if (!x.succeeded) { return x; } next = x.next; tokens.push(...x.tokens); } // TODO: report errors while transforming const t2 = trans ? trans(tokens, input) : tokens; return { succeeded: true, next: ctxTrans ? { src: next.src, start: next.start, end: next.end, context: ctxTrans(next.context), templateArgs: next.templateArgs, templateArgsPos: next.templateArgsPos } : next, tokens: t2 }; }; }; } function combine(...parsers) { return transform()(...parsers); } function lookAhead(...parsers) { return input => { let next = input; for (const parser of parsers) { const x = parser(next); if (!x.succeeded) { return x; } next = x.next; } return { succeeded: true, next: input, tokens: [] }; }; } function lookBehind(n, helper) { return (...parsers) => { return input => { if (input.start - n < 0) { return { succeeded: false, error: false, src: input.src, pos: input.start, message: 'lookBehind: src is too short' }; } let next = { src: input.src, start: input.start - n, end: input.end, context: input.context, templateArgs: input.templateArgs, templateArgsPos: input.templateArgsPos }; for (const parser of parsers) { const x = parser(next); if (!x.succeeded) { return x; } next = x.next; } return { succeeded: true, next: input, tokens: helper ? [helper()] : [] }; }; }; } function applyProductionRules(args) { return lexer => { return lexerInput => { const lexResult = lexer(lexerInput); if (!lexResult.succeeded) { return lexResult; } const input = (0,_types__WEBPACK_IMPORTED_MODULE_0__.parserInput)(lexResult.tokens, lexerInput.context); let next = input; let completed = false; if (args.check(next).succeeded) { return { succeeded: true, next: lexResult.next, tokens: lexResult.tokens }; } completed: for (let i = 0; args.maxApply !== void 0 ? i < args.maxApply : true; i++) { let matched = false; rules: for (const rule of args.rules) { const { parser, rtol } = typeof rule === 'function' ? { parser: rule, rtol: false } : rule; const len = next.src.length; for (let s = 0; s <= len; s++) { const x = parser({ src: next.src, start: rtol ? len - s : s, end: next.src.length, context: next.context, templateArgs: next.templateArgs, templateArgsPos: next.templateArgsPos }); if (x.succeeded) { matched = true; const nextSrc = next.src.slice(0, rtol ? len - s : s); nextSrc.push(...x.tokens); nextSrc.push(...next.src.slice(x.next.start)); next = { src: nextSrc, start: 0, end: nextSrc.length, context: x.next.context, templateArgs: x.next.templateArgs, templateArgsPos: x.next.templateArgsPos }; if (args.check(next).succeeded) { completed = true; break completed; } break rules; } } } if (!matched) { break; } } if (!completed) { if (!args.check(next).succeeded) { throw new _types__WEBPACK_IMPORTED_MODULE_0__.ParseError({ succeeded: false, error: true, src: input.src, pos: input.start, message: 'The application of production rules was not finished' }); } } return { succeeded: true, next: lexResult.next, tokens: next.src }; }; }; } function makeProgram(parser) { return input => { try { return parser(input); } catch (e) { // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access if (e.result) { // eslint-disable-next-line @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-member-access return e.result; } else { throw e; } } }; } /***/ }), /***/ "./node_modules/fruitsconfits/modules/lib/string-parser.js": /*!*****************************************************************!*\ !*** ./node_modules/fruitsconfits/modules/lib/string-parser.js ***! \*****************************************************************/ /*! namespace exports */ /*! export charClass [provided] [no usage info] [missing usage info prevents renaming] */ /*! export charClassByNeedleFn [provided] [no usage info] [missing usage info prevents renaming] */ /*! export charClassNot [provided] [no usage info] [missing usage info prevents renaming] */ /*! export charSequence [provided] [no usage info] [missing usage info prevents renaming] */ /*! export getStringParsers [provided] [no usage info] [missing usage info prevents renaming] */ /*! export templateStringsParam [provided] [no usage info] [missing usage info prevents renaming] */ /*! other exports [not provided] [no usage info] */ /*! runtime requirements: __webpack_require__, __webpack_require__.r, __webpack_exports__, __webpack_require__.d, __webpack_require__.* */ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "charSequence": () => /* binding */ charSequence, /* harmony export */ "charClass": () => /* binding */ charClass, /* harmony export */ "charClassNot": () => /* binding */ charClassNot, /* harmony export */ "charClassByNeedleFn": () => /* binding */ charClassByNeedleFn, /* harmony export */ "templateStringsParam": () => /* binding */ templateStringsParam, /* harmony export */ "getStringParsers": () => /* binding */ getStringParsers /* harmony export */ }); /* harmony import */ var _parser__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./parser */ "./node_modules/fruitsconfits/modules/lib/parser.js"); // Copyright (c) 2019 Shellyl_N and Authors // license: ISC // https://github.com/shellyln function charSequence(helper) { return needle => { return input => { const src = input.src.slice(input.start, input.end); return src.startsWith(needle) ? { succeeded: true, next: { src: input.src, start: input.start + needle.length, end: input.end, context: input.context, templateArgs: input.templateArgs, templateArgsPos: input.templateArgsPos }, tokens: [helper(needle)] } : { succeeded: false, error: false, src: input.src, pos: input.start, message: `operator "charSequence(${needle})"` }; }; }; } function charClass(helper) { // NOTE: needles[i] should be one character. surrogate pair and/or ligature are accepted. return (...needles) => { return input => { const src = input.src.slice(input.start, input.end); let index = -1; const succeeded = needles.some((needle, idx) => { const matched = src.startsWith(needle); if (matched) { index = idx; return true; } }); return succeeded ? { succeeded: true, next: { src: input.src, start: input.start + needles[index].length, end: input.end, context: input.context, templateArgs: input.templateArgs, templateArgsPos: input.templateArgsPos }, tokens: [helper(needles[index])] } : { succeeded: false, error: false, src: input.src, pos: input.start, message: `operator "charClass(${needles.join(',')})"` }; }; }; } function charClassNot(helper) { // NOTE: needles[i] should be one character. surrogate pair and/or ligature are accepted. return (...needles) => { return input => { const src = input.src.slice(input.start, input.end); for (const needle of needles) { const matched = src.startsWith(needle); if (matched) { return { succeeded: false, error: false, src: input.src, pos: input.start, message: `operator "charClassNot(${needles.join(',')})"` }; } } const p = input.src.codePointAt(input.start); if (p === void 0) { return { succeeded: false, error: false, src: input.src, pos: input.start, message: `operator "charClassNot(${needles.join(',')})"` }; } const c = String.fromCodePoint(p); return { succeeded: true, next: { src: input.src, start: input.start + c.length, end: input.end, context: input.context, templateArgs: input.templateArgs, templateArgsPos: input.templateArgsPos }, tokens: [helper(c)] }; }; }; } function charClassByNeedleFn(helper) { // NOTE: needles[i] should be one character. surrogate pair and/or ligature are accepted. return needle => { return input => { const src = input.src.slice(input.start, input.end); const len = needle(src); return len >= 0 ? { succeeded: true, next: { src: input.src, start: input.start + len, end: input.end, context: input.context, templateArgs: input.templateArgs, templateArgsPos: input.templateArgsPos }, tokens: [helper(src.substring(0, len))] } : { succeeded: false, error: false, src: input.src, pos: input.start, message: `operator "charClassByNeedleFn"` }; }; }; } function templateStringsParam(criteria, conv) { return input => { const src = input.src.slice(input.start, input.start + 1); if (src === '\x00') { if (input.templateArgsPos) { let argIdx = -1; const strIdx = input.templateArgsPos.findIndex((v, i) => { argIdx = i; return v === input.start; }); if (0 <= strIdx) { // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-non-null-assertion const o = input.templateArgs[argIdx]; if (criteria(o)) { return { succeeded: true, next: { src: input.src, start: input.start + 1, end: input.end, context: input.context, templateArgs: input.templateArgs, templateArgsPos: input.templateArgsPos }, // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment tokens: [conv ? conv(o) : o] }; } } } } return { succeeded: false, error: false, src: input.src, pos: input.start, message: `operator "stringTemplatesParam()"` }; }; } // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types function getStringParsers(params) { const seq = charSequence(params.rawToToken); const cls = charClass(params.rawToToken); const notCls = charClassNot(params.rawToToken); const clsFn = charClassByNeedleFn(params.rawToToken); const cat = (0,_parser__WEBPACK_IMPORTED_MODULE_0__.transform)(params.concatTokens); const once = (0,_parser__WEBPACK_IMPORTED_MODULE_0__.quantify)(1, 1); const repeat = (0,_parser__WEBPACK_IMPORTED_MODULE_0__.quantify)(); // TODO: reduce unneccessary call for adding types. const qty = (min, max) => (0,_parser__WEBPACK_IMPORTED_MODULE_0__.quantify)(min, max); const combine = (0,_parser__WEBPACK_IMPORTED_MODULE_0__.transform)(); const erase = (0,_parser__WEBPACK_IMPORTED_MODULE_0__.transform)(tokens => []); const isAlpha = clsFn(src => { const p = src.codePointAt(0); if (p === void 0) { return -1; } const c = String.fromCodePoint(p); return 'A' <= c && c <= 'Z' || 'a' <= c && c <= 'z' ? c.length : -1; }); const isUpper = clsFn(src => { const p = src.codePointAt(0); if (p === void 0) { return -1; } const c = String.fromCodePoint(p); return 'A' <= c && c <= 'Z' ? c.length : -1; }); const isLower = clsFn(src => { const p = src.codePointAt(0); if (p === void 0) { return -1; } const c = String.fromCodePoint(p); return 'a' <= c && c <= 'z' ? c.length : -1; }); const isNumber = clsFn(src => { const p = src.codePointAt(0); if (p === void 0) { return -1; } const c = String.fromCodePoint(p); return '0' <= c && c <= '9' ? c.length : -1; }); const isNonZeroNumber = clsFn(src => { const p = src.codePointAt(0); if (p === void 0) { return -1; } const c = String.fromCodePoint(p); return '1' <= c && c <= '9' ? c.length : -1; }); const isBinNum = clsFn(src => { const p = src.codePointAt(0); if (p === void 0) { return -1; } const c = String.fromCodePoint(p); return '0' <= c && c <= '1' ? c.length : -1; }); const isOctNum = clsFn(src => { const p = src.codePointAt(0); if (p === void 0) { return -1; } const c = String.fromCodePoint(p); return '0' <= c && c <= '7' ? c.length : -1; }); const isHexNum = clsFn(src => { const p = src.codePointAt(0); if (p === void 0) { return -1; } const c = String.fromCodePoint(p); return 'A' <= c && c <= 'F' || 'a' <= c && c <= 'f' || '0' <= c && c <= '9' ? c.length : -1; }); const isAlNum = clsFn(src => { const p = src.codePointAt(0); if (p === void 0) { return -1; } const c = String.fromCodePoint(p); return 'A' <= c && c <= 'Z' || 'a' <= c && c <= 'z' || '0' <= c && c <= '9' ? c.length : -1; }); const isSpace = clsFn(src => { const p = src.codePointAt(0); if (p === void 0) { return -1; } const c = String.fromCodePoint(p); return (' \f\n\r\t\v​\u00a0\u1680​\u180e' + '\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a' + '​\u2028\u2029\u202f\u205f​\u3000\ufeff').includes(c) ? c.length : -1; }); const isSpaceWithinSingleLine = clsFn(src => { const p = src.codePointAt(0); if (p === void 0) { return -1; } const c = String.fromCodePoint(p); return (' \f\t\v​\u00a0\u1680​\u180e' + '\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a' + '​\u2028\u2029\u202f\u205f​\u3000\ufeff').includes(c) ? c.length : -1; }); const isControl = clsFn(src => { const p = src.codePointAt(0); if (p === void 0) { return -1; } const c = String.fromCodePoint(p); return 0x0000 <= p && p <= 0x001f || 0x007f <= p && p <= 0x009f ? c.length : -1; }); const isWord = clsFn(src => { const p = src.codePointAt(0); if (p === void 0) { return -1; } const c = String.fromCodePoint(p); return (' \f\n\r\t\v​\u00a0\u1680​\u180e' + '\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a' + '​\u2028\u2029\u202f\u205f​\u3000\ufeff').includes(c) || 0x0000 <= p && p <= 0x001f || 0x007f <= p && p <= 0x009f ? -1 : c.length; }); const isNewline = cls('\r\n', '\n', '\r'); const isAny = clsFn(src => { const p = src.codePointAt(0); if (p === void 0) { return -1; } const c = String.fromCodePoint(p); return c.length; }); const binSep = (0,_parser__WEBPACK_IMPORTED_MODULE_0__.first)(isBinNum, cls('_')); const octSep = (0,_parser__WEBPACK_IMPORTED_MODULE_0__.first)(isOctNum, cls('_')); const hexSep = (0,_parser__WEBPACK_IMPORTED_MODULE_0__.first)(isHexNum, cls('_')); const binaryIntegerNumber = (...prefixes) => combine(erase((0,_parser__WEBPACK_IMPORTED_MODULE_0__.first)(...prefixes)), cat(once(isBinNum), repeat(binSep))); const octalIntegerNumber = (...prefixes) => combine(erase((0,_parser__WEBPACK_IMPORTED_MODULE_0__.first)(...prefixes)), cat(once(isOctNum), repeat(octSep))); const hexIntegerValue = (...prefixes) => combine(erase((0,_parser__WEBPACK_IMPORTED_MODULE_0__.first)(...prefixes)), cat(once(isHexNum), repeat(hexSep))); const decimalIntegerNumber = combine(cat(qty(0, 1)(cls('+', '-')), (0,_parser__WEBPACK_IMPORTED_MODULE_0__.first)(combine(once(isNonZeroNumber), repeat((0,_parser__WEBPACK_IMPORTED_MODULE_0__.first)(isNumber, cls('_')))), seq('0')))); const bigDecimalIntegerNumber = combine(cat(decimalIntegerNumber, erase(seq('n')))); const floatingPointNumber = combine(cat(qty(0, 1)(cls('+', '-')), (0,_parser__WEBPACK_IMPORTED_MODULE_0__.first)(combine(once(isNonZeroNumber), repeat((0,_parser__WEBPACK_IMPORTED_MODULE_0__.first)(isNumber, cls('_')))), seq('0')), qty(0, 1)(combine(seq('.'), qty(1)((0,_parser__WEBPACK_IMPORTED_MODULE_0__.first)(isNumber, cls('_'))))), qty(0, 1)(combine(cls('E', 'e'), qty(0, 1)(cls('+', '-')), (0,_parser__WEBPACK_IMPORTED_MODULE_0__.first)(combine(once(isNonZeroNumber), repeat(isNumber)), seq('0')))))); // TODO: reduce unneccessary call for adding types. return { seq, cls, notCls, clsFn, classes: { alpha: isAlpha, upper: isUpper, lower: isLower, num: isNumber, nonzero: isNonZeroNumber, bin: isBinNum, oct: isOctNum, hex: isHexNum, alnum: isAlNum, space: isSpace, spaceWithinSingleLine: isSpaceWithinSingleLine, ctrl: isControl, newline: isNewline, word: isWord, any: isAny }, numbers: { bin: binaryIntegerNumber, oct: octalIntegerNumber, hex: hexIntegerValue, int: decimalIntegerNumber, bigint: bigDecimalIntegerNumber, float: floatingPointNumber }, isParam: templateStringsParam, cat, once, repeat, qty, zeroWidth: helper => (0,_parser__WEBPACK_IMPORTED_MODULE_0__.zeroWidth)(helper), err: message => (0,_parser__WEBPACK_IMPORTED_MODULE_0__.zeroWidthError)(message), beginning: helper => (0,_parser__WEBPACK_IMPORTED_MODULE_0__.beginning)(helper), end: helper => (0,_parser__WEBPACK_IMPORTED_MODULE_0__.end)(helper), first: (...parsers) => (0,_parser__WEBPACK_IMPORTED_MODULE_0__.first)(...parsers), or: (...parsers) => (0,_parser__WEBPACK_IMPORTED_MODULE_0__.or)(...parsers), combine, erase, trans: fn => (0,_parser__WEBPACK_IMPORTED_MODULE_0__.transform)(fn), ahead: (...parsers) => (0,_parser__WEBPACK_IMPORTED_MODULE_0__.lookAhead)(...parsers), behind: (n, helper) => (0,_parser__WEBPACK_IMPORTED_MODULE_0__.lookBehind)(n, helper), rules: args => (0,_parser__WEBPACK_IMPORTED_MODULE_0__.applyProductionRules)(args), makeProgram: _parser__WEBPACK_IMPORTED_MODULE_0__.makeProgram }; } /***/ }), /***/ "./node_modules/fruitsconfits/modules/lib/types.js": /*!*********************************************************!*\ !*** ./node_modules/fruitsconfits/modules/lib/types.js ***! \*********************************************************/ /*! namespace exports */ /*! export ParseError [provided] [no usage info] [missing usage info prevents renaming] */ /*! export parserInput [provided] [no usage info] [missing usage info prevents renaming] */ /*! export templateStringsParserInput [provided] [no usage info] [missing usage info prevents renaming] */ /*! other exports [not provided] [no usage info] */ /*! runtime requirements: __webpack_require__.r, __webpack_exports__, __webpack_require__.d, __webpack_require__.* */ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "ParseError": () => /* binding */ ParseError, /* harmony export */ "parserInput": () => /* binding */ parserInput, /* harmony export */ "templateStringsParserInput": () => /* binding */ templateStringsParserInput /* harmony export */ }); // Copyright (c) 2019 Shellyl_N and Authors // license: ISC // https://github.com/shellyln class ParseError extends Error { constructor(result) { super(result.message); this.result = result; } } function parserInput(src, context) { return { src, start: 0, end: src.length, // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment context: context, templateArgs: [], templateArgsPos: [] }; } function templateStringsParserInput(strings, values, context) { const templateArgsPos = []; let pos = 0; if (values.length) { for (let i = 0; i < strings.length; i++) { const x = strings[i]; if (i < values.length) { templateArgsPos.push(pos + x.length); pos += x.length + 1; } } } const joined = strings.join('\x00'); return { src: joined, start: 0, end: joined.length, // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment context: context, templateArgs: values, templateArgsPos }; } /***/ }), /***/ "./node_modules/liyad/modules/s-exp/ast.js": /*!*************************************************!*\ !*** ./node_modules/liyad/modules/s-exp/ast.js ***! \*************************************************/ /*! namespace exports */ /*! export backquote [provided] [no usage info] [missing usage info prevents renaming] */ /*! export isBackquoted [provided] [no usage info] [missing usage info prevents renaming] */ /*! export isQuoted [provided] [no usage info] [missing usage info prevents renaming] */ /*! export isSymbol [provided] [no usage info] [missing usage info prevents renaming] */ /*! export isUnquoted [provided] [no usage info] [missing usage info prevents renaming] */ /*! export quote [provided] [no usage info] [missing usage info prevents renaming] */ /*! export splice [provided] [no usage info] [missing usage info prevents renaming] */ /*! export spread [provided] [no usage info] [missing usage info prevents renaming] */ /*! export wrapByUnquote [provided] [no usage info] [missing usage info prevents renaming] */ /*! other exports [not provided] [no usage info] */ /*! runtime requirements: __webpack_require__.r, __webpack_exports__, __webpack_require__.d, __webpack_require__.* */ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "quote": () => /* binding */ quote, /* harmony export */ "isQuoted": () => /* binding */ isQuoted, /* harmony export */ "backquote": () => /* binding */ backquote, /* harmony export */ "isBackquoted": () => /* binding */ isBackquoted, /* harmony export */ "wrapByUnquote": () => /* binding */ wrapByUnquote, /* harmony export */ "isUnquoted": () => /* binding */ isUnquoted, /* harmony export */ "spread": () => /* binding */ spread, /* harmony export */ "splice": () => /* binding */ splice, /* harmony export */ "isSymbol": () => /* binding */ isSymbol /* harmony export */ }); // Copyright (c) 2018, Shellyl_N and Authors // license: ISC // https://github.com/shellyln function quote(state, x) { return [{ symbol: state.config.reservedNames.quote }, x]; } function isQuoted(state, x) { if (Array.isArray(x) && 0 < x.length) { const q = isSymbol(x); if (q && q.symbol === state.config.reservedNames.quote) { return true; } } return false; } function backquote(state, x) { return [{ symbol: state.config.reservedNames.backquote }, x]; } function isBackquoted(state, x) { if (Array.isArray(x) && 0 < x.length) { const q = isSymbol(x); if (q && q.symbol === state.config.reservedNames.backquote) { return true; } } return false; } function wrapByUnquote(state, x) { return [{ symbol: state.config.reservedNames.unquote }, x]; } function isUnquoted(state, x) { if (Array.isArray(x) && 0 < x.length) { const q = isSymbol(x); if (q && q.symbol === state.config.reservedNames.unquote) { return true; } } return false; } function spread(state, x) { return [{ symbol: state.config.reservedNames.spread }, x]; } function splice(state, x) { return [{ symbol: state.config.reservedNames.splice }, x]; } function isSymbol(x, name) { if (x && typeof x === 'object' && Object.prototype.hasOwnProperty.call(x, 'symbol')) { if (name !== void 0) { return x.symbol === name ? x : null; } else { return x; } } return null; } /***/ }), /***/ "./node_modules/liyad/modules/s-exp/compile.js": /*!*****************************************************!*\ !*** ./node_modules/liyad/modules/s-exp/compile.js ***! \*****************************************************/ /*! namespace exports */ /*! export compileLambda [provided] [no usage info] [missing usage info prevents renaming] */ /*! other exports [not provided] [no usage info] */ /*! runtime requirements: __webpack_require__, __webpack_require__.r, __webpack_exports__, __webpack_require__.d, __webpack_require__.* */ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "compileLambda": () => /* binding */ compileLambda /* harmony export */ }); /* harmony import */ var _ast__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./ast */ "./node_modules/liyad/modules/s-exp/ast.js"); /* harmony import */ var _evaluate__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./evaluate */ "./node_modules/liyad/modules/s-exp/evaluate.js"); /* harmony import */ var _errors__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./errors */ "./node_modules/liyad/modules/s-exp/errors.js"); /* harmony import */ var _compile_ops_helpers__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./compile.ops/helpers */ "./node_modules/liyad/modules/s-exp/compile.ops/helpers.js"); /* harmony import */ var _compile_ops__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./compile.ops */ "./node_modules/liyad/modules/s-exp/compile.ops/index.js"); // Copyright (c) 2018, Shellyl_N and Authors // license: ISC // https://github.com/shellyln // tslint:disable-next-line:variable-name function compileCore(state, formalArgs, lastIsSpread, fnBody, _$_vars) { function makeScope(scoped) { const varNamesCopy = new Map(); for (const x of ctx.varNames.entries()) { varNamesCopy.set(x[0], x[1]); } scoped(); ctx.varNames = varNamesCopy; } function compileValue(b) { let compFnBody = ''; if (b === null) { compFnBody += '(null)'; } else if (b === void 0) { compFnBody += '(void 0)'; } else switch (typeof b) { case 'boolean': case 'number': compFnBody += `(${String(b)})`; break; case 'object': if ((0,_ast__WEBPACK_IMPORTED_MODULE_4__.isSymbol)(b)) { const sym = b; (0,_errors__WEBPACK_IMPORTED_MODULE_1__.checkUnsafeVarNamesEx)('(compiler)compileValue', ctx.varNames, sym.symbol); if (ctx.varNames.has(sym.symbol)) { compFnBody += `(${ctx.varNames.get(sym.symbol)})`; } else { _$_vars[ctx.varsCount] = sym.symbol; compFnBody += `(_$_vars[${String(ctx.varsCount++)}])`; } break; } else {} // FALL_THRU default: _$_vars[ctx.varsCount] = b; compFnBody += `(_$_vars[${String(ctx.varsCount++)}])`; break; } return compFnBody; } function compileToken(body, i) { let compFnBody = ''; const b = body[i]; if (Array.isArray(b)) { if (0 < b.length) { const r = (0,_compile_ops_helpers__WEBPACK_IMPORTED_MODULE_2__.applyMacros)(state, b); if (Array.isArray(r)) { if (0 < r.length) { if ((0,_ast__WEBPACK_IMPORTED_MODULE_4__.isSymbol)(r[0])) { const sym = r[0]; const args = r.slice(1); (0,_errors__WEBPACK_IMPORTED_MODULE_1__.checkUnsafeVarNamesEx)('(compiler)compileToken', ops, sym.symbol); if (ops.has(sym.symbol)) { compFnBody += ops.get(sym.symbol)(r, args); } else { if (sym.symbol === state.config.reservedNames.spread) { compFnBody += `...(${args.map(x => compileToken([(0,_compile_ops_helpers__WEBPACK_IMPORTED_MODULE_2__.stripQuoteOrPass)(state, x)], 0)).join(',')})`; } else if (state.funcMap.has(sym.symbol)) { _$_vars[ctx.varsCount] = state.funcMap.get(sym.symbol).fn(state, ''); compFnBody += `((_$_vars[${String(ctx.varsCount++)}])(${args.map(x => compileToken([(0,_compile_ops_helpers__WEBPACK_IMPORTED_MODULE_2__.stripQuoteOrPass)(state, x)], 0)).join(',')}))`; } else if (ctx.varNames.has(sym.symbol)) { compFnBody += `(${String(ctx.varNames.get(sym.symbol))})(${args.map(x => compileToken([(0,_compile_ops_helpers__WEBPACK_IMPORTED_MODULE_2__.stripQuoteOrPass)(state, x)], 0)).join(',')})`; } else { _$_vars[ctx.varsCount] = (0,_compile_ops_helpers__WEBPACK_IMPORTED_MODULE_2__.resolveValueSymbol_dynamic)(state, sym.symbol); compFnBody += `((_$_vars[${String(ctx.varsCount++)}])()(${args.map(x => compileToken([(0,_compile_ops_helpers__WEBPACK_IMPORTED_MODULE_2__.stripQuoteOrPass)(state, x)], 0)).join(',')}))`; } } } else { switch (typeof r[0]) { case 'function': _$_vars[ctx.varsCount] = r[0]; compFnBody += `((_$_vars[${String(ctx.varsCount++)}])(${r.slice(1).map((x, idx, arr) => compileToken([(0,_compile_ops_helpers__WEBPACK_IMPORTED_MODULE_2__.stripQuoteOrPass)(state, x)], 0)).join(',')}))`; break; default: throw new Error(`[SX] compileToken: First item of list is not a function: ${JSON.stringify(r[0])}.`); } } } else { compFnBody += '([])'; } } else { compFnBody += compileValue(b); } } else { compFnBody += '([])'; } } else { compFnBody += compileValue(b); } return compFnBody; } const ctx = { _$_vars, varsCount: 1, varNames: new Map(), varNamesCount: 0, varDefs: 'var x0;', ops: new Map(), makeScope, compileToken }; (0,_compile_ops__WEBPACK_IMPORTED_MODULE_3__.registerOperators)(state, ctx); const ops = ctx.ops; if (state.config.enableTailCallOptimization) { fnBody = (0,_evaluate__WEBPACK_IMPORTED_MODULE_0__.optimizeTailCall)(state, formalArgs, fnBody); } // set 'this' object ctx.varNames.set(state.config.reservedNames.thiz, `(this===(Function('return this')())?null:(this===void 0?null:this))`); const capturedScopes = (0,_evaluate__WEBPACK_IMPORTED_MODULE_0__.getCapturedScopes)(state); if (capturedScopes) { for (const x in capturedScopes) { if (Object.prototype.hasOwnProperty.call(capt