diff --git a/packages/discourse/package.json b/packages/discourse/package.json new file mode 100644 index 00000000..567a1e77 --- /dev/null +++ b/packages/discourse/package.json @@ -0,0 +1,85 @@ +{ + "name": "@plastichub/osr-discourse", + "description": "", + "version": "0.1.9", + "typings": "index.d.ts", + "publishConfig": { + "access": "public" + }, + "module": "main.js", + "main": "main.js", + "bin": { + "osr-discourse": "main.js" + }, + "dependencies": { + "@iarna/toml": "^2.2.5", + "@plastichub/core": "^0.2.5", + "@plastichub/fs": "^0.13.39", + "@plastichub/osr-cache": "^0.4.7", + "@plastichub/osr-cli-commons": "^0.5.1", + "@plastichub/osr-commons": "^0.3.3", + "@plastichub/osr-fs-utils": "^0.1.4", + "@plastichub/osrl": "file:../osrl", + "@types/markdown-it": "^12.2.3", + "@types/node": "^14.17.5", + "@types/yargs": "^17.0.11", + "axios": "^0.27.2", + "bluebird": "^3.7.2", + "chalk": "^2.4.1", + "cheerio": "^1.0.0-rc.12", + "chokidar": "^3.5.3", + "download": "^8.0.0", + "env-var": "^7.1.1", + "escape-html": "^1.0.3", + "fast-glob": "^3.3.0", + "filenamify": "^4.3.0", + "find-up": "^5.0.0", + "front-matter": "^4.0.2", + "generate-password": "^1.7.0", + "glob-base": "^0.3.0", + "isomorphic-unfetch": "^4.0.2", + "js-base64": "^3.7.2", + "js-beautify": "^1.14.9", + "json-to-pretty-yaml": "^1.2.2", + "markdown-it": "^13.0.1", + "md5": "^2.3.0", + "moment": "^2.29.4", + "native-promise-pool": "^3.19.0", + "pretty": "^2.0.0", + "querystring": "^0.2.1", + "request": "^2.88.2", + "sanitize-filename": "^1.6.3", + "showdown": "^2.1.0", + "simple-git": "^3.19.1", + "slugify": "^1.6.6", + "tslog": "^3.3.4", + "turndown": "^7.1.2", + "typescript": "^4.3.5", + "uri-js": "^4.4.1", + "yargs": "^17.5.1" + }, + "scripts": { + "test": "tsc; mocha --full-trace mocha \"spec/**/*.spec.js\"", + "test-with-coverage": "istanbul cover node_modules/.bin/_mocha -- 'spec/**/*.spec.js'", + "lint": "tslint --project=./tsconfig.json", + "build": "tsc -p . --declaration", + "dev": "tsc -p . --declaration -w", + "typings": "tsc --declaration", + "docs": "npx typedoc src/index.ts", + "dev-test-watch": "mocha-typescript-watch", + "typesafe-i18n": "typesafe-i18n", + "link-dev": "sh scripts/link-dev.sh" + }, + "homepage": "https://git.osr-plastic.org/plastichub/lib-content", + "repository": { + "type": "git", + "url": "https://git.osr-plastic.org/plastichub/lib-content.git" + }, + "engines": { + "node": ">= 14.0.0" + }, + "license": "BSD-3-Clause", + "keywords": [ + "typescript" + ] +} diff --git a/packages/osrl/.editorconfig b/packages/osrl/.editorconfig new file mode 100644 index 00000000..10ab7cd4 --- /dev/null +++ b/packages/osrl/.editorconfig @@ -0,0 +1,12 @@ +# http://editorconfig.org +root = true + +[*] +indent_style = tab +indent_size = 4 +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true + +[*.md] +trim_trailing_whitespace = false diff --git a/packages/osrl/.gitignore b/packages/osrl/.gitignore new file mode 100644 index 00000000..fa0e8404 --- /dev/null +++ b/packages/osrl/.gitignore @@ -0,0 +1,5 @@ +/node_modules +/coverage +*.log +.DS_Store +clear_history.sh \ No newline at end of file diff --git a/packages/osrl/.npmignore b/packages/osrl/.npmignore new file mode 100644 index 00000000..d4593c4e --- /dev/null +++ b/packages/osrl/.npmignore @@ -0,0 +1,5 @@ +./docs +./scripts +./tests +./examples +./documentation diff --git a/packages/osrl/.travis.yml b/packages/osrl/.travis.yml new file mode 100644 index 00000000..90343195 --- /dev/null +++ b/packages/osrl/.travis.yml @@ -0,0 +1,10 @@ +language: node_js + +node_js: + - "9" + +script: +- npm run test + +after_success: +- ./node_modules/.bin/codecov diff --git a/packages/osrl/.vscode/launch.json b/packages/osrl/.vscode/launch.json new file mode 100644 index 00000000..a3a3e8e1 --- /dev/null +++ b/packages/osrl/.vscode/launch.json @@ -0,0 +1,164 @@ +{ + // Use IntelliSense to learn about possible attributes. + // Hover to view descriptions of existing attributes. + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + { + "type": "node", + "request": "launch", + "name": "Grunt - Docs", + "skipFiles": [ + "/**" + ], + "program": "${env:APPDATA}\\npm\\node_modules\\grunt\\bin\\grunt", + "cwd": "${workspaceRoot}", + "args": [ + "compile:content-en", + "--verbose=false", + "--watchContent=true", + "--cache=false", + "--logLevel=debug", + "--stack" + ], + "outFiles": [ + "${workspaceFolder}/**/*.js" + ], + "resolveSourceMapLocations": [ + "${workspaceFolder}/**", + "!**/node_modules/**" + ], + "outputCapture": "std" + }, + { + "type": "node", + "request": "launch", + "name": "lang:compile:expand - i18n", + "skipFiles": [], + "program": "${workspaceFolder}\\main.js", + "outFiles": [ + "${workspaceFolder}/**/*.js" + ], + "cwd": "${workspaceFolder}", + "args": [ + "compile", + "--language=osr", + "--debug=true", + "--expand=true", + "--product=asterix", + "--source=\"./examples/library/osr/bazar/root-i18n.html\"", + "--output=\"${root}/${product}/bazar/output-i18n.html\"", + "--root=\"./examples/library\"", + "--profile='${root}/.osrl.json'", + "--plugins='${root}/osr/plugins'", + "--env='bazar'", + "--stdout=true", + "--targetLanguage=de", + "--sourceLanguage=en" + ], + "resolveSourceMapLocations": [ + "${workspaceFolder}/**", + "!**/node_modules/**" + ], + "outputCapture": "std" + }, + { + "type": "node", + "request": "launch", + "name": "lang:compile:osr-ai", + "program": "${workspaceFolder}\\main.js", + "outFiles": [ + "${workspaceFolder}/**/*.js" + ], + "cwd": "${workspaceFolder}", + "args": [ + "compile", + "--language=osr", + "--expand=true", + "--testvar=asterix", + "--source='./tests/osr-ai/open-ai-test.md'", + "--output='./tests/osr-ai/open-ai-test.out.md'", + "--root='./tests/open-ai'", + "--format2=html", + "--stdout=true", + "--var-area=sentmenat", + "--logLevel=trace" + ], + "resolveSourceMapLocations": [ + "${workspaceFolder}/**", + "!**/node_modules/**" + ], + "outputCapture": "std" + }, + { + "type": "node", + "request": "launch", + "name": "lang:compile:template", + "skipFiles": [], + "program": "${workspaceFolder}\\main.js", + "outFiles": [ + "${workspaceFolder}/**/*.js" + ], + "cwd": "${workspaceFolder}", + "args": [ + "compile", + "--language=osr", + "--expand=true", + "--source=\"./tests/templates/source.md\"", + "--template=\"./tests/templates/template.md\"", + "--output=\"./tests/templates/output.md\"", + "--root=\"./tests/templates\"", + "--profile='${OSR_ROOT}/osr-templates/osrl/.osrl.json'", + "--plugins='${root}/osr/plugins'", + "--env='library'", + "--format2=html", + "--stdout=true", + "--trace='${SRC_DIR}/${SRC_NAME}-trace.json'", + "--logLevel=trace", + "--var-area=Sentmenat", + "--var-location=(Spain,Barcelona)", + ], + "resolveSourceMapLocations": [ + "${workspaceFolder}/**", + "!**/node_modules/**" + ], + "outputCapture": "std" + }, + { + "type": "node", + "request": "launch", + "name": "lang:compile:plugins", + "skipFiles": [], + "program": "${workspaceFolder}\\main.js", + "outFiles": [ + "${workspaceFolder}/**/*.js" + ], + "cwd": "${workspaceFolder}", + "args": [ + "compile", + "--language=osr", + "--expand=true", + "--source=\"./tests/plugins/source.md\"", + "--template=\"./tests/plugins/template.md\"", + "--output=\"./tests/plugins/output.md\"", + "--root=\"./tests/templates\"", + "--profile='${OSR_ROOT}/osr-templates/osrl/.osrl.json'", + "--plugins='${root}/osr/plugins'", + "--env='library'", + "--format2=html", + "--stdout=true", + "--logLevel=trace", + "--var-area=Sentmenat", + "--var-location=(Spain,Barcelona)", + "--targetLanguage=es", + "--sourceLanguage=en" + ], + "resolveSourceMapLocations": [ + "${workspaceFolder}/**", + "!**/node_modules/**" + ], + "outputCapture": "std" + } + ] +} + diff --git a/packages/osrl/.vscode/settings.json b/packages/osrl/.vscode/settings.json new file mode 100644 index 00000000..18a40859 --- /dev/null +++ b/packages/osrl/.vscode/settings.json @@ -0,0 +1,6 @@ +{ + "cSpell.words": [ + "cacache", + "plastichub" + ] +} \ No newline at end of file diff --git a/packages/osrl/Engine.d.ts b/packages/osrl/Engine.d.ts new file mode 100644 index 00000000..044e0194 --- /dev/null +++ b/packages/osrl/Engine.d.ts @@ -0,0 +1,22 @@ +import { Liquid } from './liquidjs/liquid'; +import { IObjectLiteral } from '@plastichub/core'; +export { sync as dir } from '@plastichub/fs/dir'; +import { Context } from './conf/bootstrap'; +import { IOptions } from './types'; +export declare const getEngine: () => Engine; +export declare const getContext: () => Context; +export declare class LiquidEx extends Liquid { + owner: Engine; +} +export declare class Engine { + constructor(options: IOptions); + engine: LiquidEx; + options: IOptions; + variables: IObjectLiteral; + expressionCache: IObjectLiteral; + global: any; + context: Context; + stats: any; + render(sourceFile: string, vars: IObjectLiteral): Promise; + parse(string: string, vars: any, iterations?: number): Promise; +} diff --git a/packages/osrl/Engine.js b/packages/osrl/Engine.js new file mode 100644 index 00000000..80426581 --- /dev/null +++ b/packages/osrl/Engine.js @@ -0,0 +1,207 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.Engine = exports.LiquidEx = exports.getContext = exports.getEngine = exports.dir = void 0; +const path = require("path"); +const liquid_1 = require("./liquidjs/liquid"); +const liquid_2 = require("./liquid"); +const fs_1 = require("./fs"); +const yaml_1 = require("yaml"); +var dir_1 = require("@plastichub/fs/dir"); +Object.defineProperty(exports, "dir", { enumerable: true, get: function () { return dir_1.sync; } }); +const read_1 = require("@plastichub/fs/read"); +const write_1 = require("@plastichub/fs/write"); +const remove_1 = require("@plastichub/fs/remove"); +const osr_commons_1 = require("@plastichub/osr-commons"); +const js_1 = require("./plugins/js"); +const ds_1 = require("./plugins/ds"); +const js_2 = require("./plugins/js"); +const i18n_1 = require("./plugins/i18n"); +const print_1 = require("./plugins/print"); +const osr_ai_1 = require("./plugins/osr-ai"); +const turndown_1 = require("./plugins/turndown"); +const html_1 = require("./plugins/html"); +const minclude_1 = require("./plugins/minclude"); +const get_1 = require("./plugins/get"); +const fs_2 = require("./fs"); +const filters_1 = require("./filters"); +const index_1 = require("./index"); +const js_beautify_1 = require("js-beautify"); +const fm = require('front-matter'); +let _engine; +const getEngine = () => _engine; +exports.getEngine = getEngine; +const getContext = () => _engine.context; +exports.getContext = getContext; +class LiquidEx extends liquid_1.Liquid { +} +exports.LiquidEx = LiquidEx; +class Engine { + constructor(options) { + this.engine = (0, liquid_2.engineDefault)(options); + this.options = options || {}; + this.expressionCache = {}; + this.global = {}; + this.stats = { + imports: [] + }; + _engine = this; + } + render(sourceFile, vars) { + return __awaiter(this, void 0, void 0, function* () { + vars = Object.assign(Object.assign({ targetLanguage: this.options.targetLanguage || 'en', sourceLanguage: this.options.sourceLanguage || 'en', i18n: '${OSR_ROOT}/i18n-store/store-en.json' }, this.options.profile.variables), vars); + let owner = this; + let _engine = this.engine; + _engine.owner = owner; + this.variables = vars; + const src = '' + sourceFile; + const resolveFs = (f) => (0, osr_commons_1.resolve)(f, false, vars); + let options_ = Object.assign(Object.assign({ fs: (0, fs_2.defaultFS)(resolveFs) }, this.options), { resolve: resolveFs }); + this.options = options_; + let source = (0, read_1.sync)(sourceFile); + let tmpFile = (sourceFile + '.tmp').replace('.md', '._md'); + tmpFile = (sourceFile + '.tmp').replace('.html', '._html'); + if (this.options.template && (0, fs_1.exists)(this.options.template)) { + const template = (0, read_1.sync)(this.options.template, 'string'); + if (!template) { + index_1.logger.error(`Invalid template file: ${this.options.template}`); + return false; + } + source = (0, index_1.substitute)(false, template, Object.assign({ SOURCE: source }, this.variables)); + (0, write_1.sync)(tmpFile, source); + sourceFile = tmpFile; + } + //@todo + _engine.options['string'] = source; + (0, ds_1.register)(_engine); + (0, js_2.register)(_engine); + (0, i18n_1.register)(_engine); + (0, osr_ai_1.register)(_engine); + (0, print_1.register)(_engine); + (0, minclude_1.register)(_engine); + (0, get_1.register)(_engine); + let _fm = { fm: {} }; + try { + if (fm.test(_engine.options['string'])) { + _fm = { + fm: fm(_engine.options['string']).attributes, + body: fm(_engine.options['string']).body + }; + vars.fm ? _fm.fm = Object.assign(Object.assign({}, vars.fm), _fm.fm) : null; + } + } + catch (e) { + index_1.logger.error(`Error parsing front matter: ${e.message} : ${sourceFile}`); + } + let parsed = yield _engine.parseFile(sourceFile); + _engine.registerFilter('jseval', (x) => __awaiter(this, void 0, void 0, function* () { return yield (0, js_1.runJS)(x, options_, owner, parsed); })); + _engine.registerFilter('jsexp', x => (0, js_1.runJSExpressionEx)(x, options_, _engine, parsed, _engine, {}, "")); + _engine.registerFilter('i18n', (x) => __awaiter(this, void 0, void 0, function* () { return yield (0, i18n_1.i18n)(x, options_, this, parsed, _engine, {}, ""); })); + _engine.registerFilter('html', (x) => __awaiter(this, void 0, void 0, function* () { return yield (0, html_1.html)(x, options_, this); })); + _engine.registerFilter('turndown', (x) => __awaiter(this, void 0, void 0, function* () { return yield (0, turndown_1.markdown)(x, options_, this); })); + _engine.registerFilter('pretty', (x) => __awaiter(this, void 0, void 0, function* () { return yield (0, html_1.pretty)(x, options_, this); })); + _engine.registerFilter('openAI', (x) => __awaiter(this, void 0, void 0, function* () { return yield (0, osr_ai_1.openAI)(x, options_, this, parsed, _engine, {}, ""); })); + let fmChanged = false; + if (Object.keys(_fm.fm) && Object.keys(_fm.fm).length > 0) { + for (let k in _fm.fm) { + if (k.endsWith('_i18n')) { + const val = yield (0, i18n_1.i18n)(_fm.fm[k], options_, this, parsed, _engine, {}, ""); + if (val) { + _fm.fm[k] = val; + delete _fm.fm[k]; + _fm.fm[k.replace('_i18n', '')] = val; + fmChanged = true; + } + } + } + } + fmChanged = true; + if (fmChanged && _fm.fm && Object.keys(_fm.fm).length > 0) { + source = '---\n' + (0, yaml_1.stringify)(_fm.fm) + '---\n' + _fm.body; + (0, write_1.sync)(tmpFile, source); + sourceFile = tmpFile; + options_['source'] = tmpFile; + } + const childCtx = new liquid_1.Context({}, this.options, { + sync: false, + globals: Object.assign(Object.assign(Object.assign({}, _fm.fm), this.variables), { fm: _fm.fm }), + strictVariables: false, + ownPropertyOnly: false + }); + let ret = null; + debugger; + try { + ret = yield _engine.renderFile(sourceFile, childCtx, { + globals: Object.assign(Object.assign(Object.assign({}, _fm.fm), this.variables), { fm: _fm.fm }) + }); + } + catch (e) { + index_1.logger.error(`Error rendering file: ${sourceFile} \n\t : ${e.message}`); + (0, remove_1.sync)(tmpFile); + return false; + } + (0, remove_1.sync)(tmpFile); + options_['source'] = src; + if (options_.format === 'html') { + ret = (0, js_beautify_1.html_beautify)((0, filters_1.md2html)(ret)); + } + if (options_.format === 'pretty') { + ret = (0, js_beautify_1.html_beautify)(ret); + } + if (this.options.trace) { + const traceFile = resolveFs(this.options.trace); + (0, write_1.sync)(traceFile, Object.assign(Object.assign({}, this.stats), this.options.profile)); + } + return ret; + }); + } + parse(string, vars, iterations = 5) { + return __awaiter(this, void 0, void 0, function* () { + let _engine = this.engine; + _engine.options['string'] = string; + let _fm = { fm: {} }; + if (fm.test(_engine.options['string'])) { + _fm = { + fm: fm(_engine.options['string']).attributes + }; + } + this.variables = Object.assign(Object.assign({}, vars), _fm.fm); + let owner = this; + _engine.owner = this; + let options_ = Object.assign({ fs: { + exists: (f) => { + return (0, fs_1.exists)(f); + }, + existsSync: fs_1.existsSync, + readFile: (f) => (0, fs_1.readFile)(path.resolve((0, osr_commons_1.resolve)(f))), + readFileSync: fs_1.readFileSync, + resolve: fs_1.resolve + } }, this.options); + (0, ds_1.register)(_engine); + (0, js_2.register)(_engine); + (0, minclude_1.register)(_engine); + let parsed = _engine.parse(string); + _engine.registerFilter('jseval', x => (0, js_1.runJS)(x, options_, owner, parsed)); + _engine.registerFilter('jsexp', x => (0, js_1.runJSExpression)(x, options_, owner, parsed)); + parsed = _engine.parse(string); + let t = yield _engine.render(parsed, vars, options_); + for (let i = 0; i < iterations; i++) { + t = yield this.engine.render(parsed, vars, options_); + } + if (options_.format === 'html') { + t = (0, js_beautify_1.html_beautify)((0, filters_1.md2html)(t)); + } + return t; + }); + } +} +exports.Engine = Engine; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRW5naW5lLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsic3JjL0VuZ2luZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFBQSw2QkFBNEI7QUFFNUIsOENBQStEO0FBQy9ELHFDQUF3QztBQUN4Qyw2QkFBMEU7QUFFMUUsK0JBQWdDO0FBRWhDLDBDQUFnRDtBQUF2QywwRkFBQSxJQUFJLE9BQU87QUFDcEIsOENBQWtEO0FBQ2xELGdEQUFvRDtBQUNwRCxrREFBa0Q7QUFDbEQseURBQWlFO0FBRWpFLHFDQUF3RTtBQUN4RSxxQ0FBd0Q7QUFDeEQscUNBQXFEO0FBQ3JELHlDQUErRDtBQUMvRCwyQ0FBMkQ7QUFDM0QsNkNBQXFFO0FBQ3JFLGlEQUE2QztBQUM3Qyx5Q0FBNkM7QUFDN0MsaURBQWlFO0FBQ2pFLHVDQUF1RDtBQUl2RCw2QkFBZ0M7QUFDaEMsdUNBQW1DO0FBQ25DLG1DQUE0QztBQUU1Qyw2Q0FBMkM7QUFDM0MsTUFBTSxFQUFFLEdBQUcsT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUFBO0FBRWxDLElBQUksT0FBZSxDQUFBO0FBQ1osTUFBTSxTQUFTLEdBQUcsR0FBVyxFQUFFLENBQUMsT0FBTyxDQUFBO0FBQWpDLFFBQUEsU0FBUyxhQUF3QjtBQUN2QyxNQUFNLFVBQVUsR0FBRyxHQUFZLEVBQUUsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFBO0FBQTNDLFFBQUEsVUFBVSxjQUFpQztBQUV4RCxNQUFhLFFBQVMsU0FBUSxlQUFNO0NBRW5DO0FBRkQsNEJBRUM7QUFFRCxNQUFhLE1BQU07SUFDbEIsWUFBWSxPQUFpQjtRQUM1QixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUEsc0JBQWEsRUFBQyxPQUFPLENBQWEsQ0FBQTtRQUNoRCxJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sSUFBSSxFQUFjLENBQUE7UUFDeEMsSUFBSSxDQUFDLGVBQWUsR0FBRyxFQUFFLENBQUE7UUFDekIsSUFBSSxDQUFDLE1BQU0sR0FBRyxFQUFF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 \ No newline at end of file diff --git a/packages/osrl/LICENSE b/packages/osrl/LICENSE new file mode 100644 index 00000000..ae8a7719 --- /dev/null +++ b/packages/osrl/LICENSE @@ -0,0 +1,28 @@ +The "New" BSD License +********************* + +Copyright (c) 2015 - 2016, xblox +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + * Neither the name of the xblox nor the names of its contributors + may be used to endorse or promote products derived from this software + without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/packages/osrl/README.md b/packages/osrl/README.md new file mode 100644 index 00000000..24e12678 --- /dev/null +++ b/packages/osrl/README.md @@ -0,0 +1,108 @@ +# Content & Expression Engine based on Liquid (JS Implementation) + +## Installation + +```sh +# local +npm install @plastichub/osrl + +#global +npm -g @plastichub/osrl + +# CLI help +osrl compile --help + +``` + +### References + +- [LiquidJS Docs](https://liquidjs.com/api/classes/liquid_.liquid.html) +- [Liquid Docs - Shopify](https://shopify.github.io/liquid/) + +### Usage + +Please find examples in ['./examples](./examples) + +## Todos + +- [ ] Filter/Tags + - [x] Datasources + - [x] Google Sheet + - [x] Local Sheet + - see [exceljs](https://github.com/exceljs/exceljs) + - [x] CSV + - [x] selectors + - [ ] Iterators (scopes) + - [ ] Enums + - [ ] CSS Parser +- [ ] Files / Refs / Variables +- [ ] PDF tables, see [site:tabula](https://github.com/tabulapdf/tabula) +- [ ] JS + - [x] Bind Datasources in local scope + - [x] Default bootstrap + - [x] Plastichub + - [-] OSR + - [x] Default functions: unit conv, string manipulation +- [x] User Plugins +- [x] Refine Engine for scoping +- [ ] RT Security + - Options + - [Secure VM (native)](https://github.com/laverdet/isolated-vm) + - [VM2](https://github.com/patriksimek/vm2#debugging-a-sandboxed-code) + - [ ] fix fucking globals + - [ ] run plugins in cached vm.Script contexts +- [-] Multi Env + - [x] support multi env in profiles +- [x] Settings / Profile + - [-] should read local profil per consumed directory within ```include``` calls +- [-] Instrumentation + - add support for clinic.js | clinic.doctor +- [ ] Platform / Services + - [x] Discourse - API (related, category feed, custom search, topic acc) + - [-] Magento - API (related, components, configurations, options) + - [-] Media Wiki + - [-] CSCart API +- [ ] Documentation + - [ ] Auto - JS Bootstrap docs + - [ ] Generate documented tests + - [ ] Watcher +- [x] OSRL commons (plugins) +- [x] Partials cache + - [x] osr-cache +- [-] VFS & RQL +- [-] OSR-Search + - [-] consume/provide elastic-search queries + - [ ] PDF mining : https://pypi.org/project/pdfminer/ + - [x] basics +- [x] new include tag 'emerge' based on the original 'include' + - [x] context/implicit: evaluate conditional statement as variable + - [-] implicit: forward output format (New: AST/partials), gives format agnostic results + - [-] explicit: cache expiration (=>osr-tasks) + - [ ] track i/o access in context meta db + - [ ] i/o: re-impl. old vfs/service API +- [-] output masking via profile json(-get) paths +- [-] support pandoc for input/output pre/post processing +- [x] OSR-i18n + - [x] tags + - [ ] typings + - [ ] partials => store +- [ ] OSR-AI + - [x] prompt tags +- [ ] Doxygen +- [ ] Binaries +- [ ] Pipes +- [ ] Watcher + - [ ] watch glob +- [ ] Targets +- [ ] Logging +- [ ] Typescript + +## References + +- https://docs.asciidoctor.org/ +- https://github.com/asciidoctor/asciidoctor.js +- [MDAST & Co](https://github.com/syntax-tree/mdast-util-to-markdown) +- https://www.npmjs.com/package/link-preview-js +- https://github.com/microlinkhq/metascraper +- https://github.com/arcetros/scrape-recipe-schema/blob/main/src/index.ts +- https://github.com/digitalbazaar/jsonld.js diff --git a/packages/osrl/_cli.d.ts b/packages/osrl/_cli.d.ts new file mode 100644 index 00000000..0f1fa68c --- /dev/null +++ b/packages/osrl/_cli.d.ts @@ -0,0 +1,45 @@ +import * as CLI from 'yargs'; +import { IOptions } from './types'; +export declare const defaultOptions: (yargs: CLI.Argv) => CLI.Argv<{ + format: string; +} & { + source: unknown; +} & { + template: unknown; +} & { + language: string; +} & { + bootstrap: unknown; +} & { + variables: string; +} & { + trace: string; +} & { + output: string; +} & { + disable: unknown; +} & { + profile: string; +} & { + envVariables: string | boolean; +} & { + stdout: string | boolean; +} & { + dry: string | boolean; +} & { + introspect: unknown; +} & { + env: unknown; +} & { + alt: boolean; +} & { + plugins: unknown; +} & { + targetLanguage: string; +} & { + sourceLanguage: string; +} & { + logLevel: string; +}>; +export declare const sanitize: (argv: any) => IOptions | boolean; +export declare const defaults: () => void; diff --git a/packages/osrl/_cli.js b/packages/osrl/_cli.js new file mode 100644 index 00000000..54c9856c --- /dev/null +++ b/packages/osrl/_cli.js @@ -0,0 +1,169 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.defaults = exports.sanitize = exports.defaultOptions = void 0; +const path = require("path"); +const exists_1 = require("@plastichub/fs/exists"); +const primitives_1 = require("@plastichub/core/primitives"); +const osr_commons_1 = require("@plastichub/osr-commons"); +const index_1 = require("./index"); +const defaultOptions = (yargs) => { + yargs.parserConfiguration({ + "camel-case-expansion": false + }); + return yargs. + showHelpOnFail(true). + option('format', { + describe: 'selects the output format, can be \'html\', \'md\', \'raw\', \'pretty\'', + default: 'md', + choices: ['md', 'html', 'raw', 'pretty'] + }).option('source', { + describe: 'Path to the input file. If not specified, std.in will be used.\ + Glob patters are also supported', + }).option('template', { + describe: 'Path to a surrounding template file, for --source. In this case, the source file will be included by referencing ${SOURCE} in your template file' + }).option('language', { + describe: 'Set source language', + default: 'osr', + choices: ['osr', 'liquid'] + }).option('bootstrap', { + describe: 'Path to another Javscript bootstrap module' + }).option('variables', { + describe: 'Path to another JSON file being filled into Javascript evaluation global scopes', + default: '${OSR_ROOT}/conf/variables.js' + }).option('trace', { + describe: 'Path to the output file', + default: '${SRC_DIR}/${SRC_NAME}-trace.json' + }).option('output', { + describe: 'Path to the output file', + default: '${SRC_DIR}/${SRC_NAME}.md' + }).option('disable', { + describe: 'Comma separated list of disabled tags and filters' + }).option('profile', { + describe: "Path to profile(s) file which provides all settings, paths and variables.\n \ + CLI arguments will override any profile settings.", + default: '${OSR_ROOT}/osr-templates/osrl/.osrl.json' + }).option('envVariables', { + describe: 'Append Global scope for environment variables', + default: 'true', + boolean: true + }).option('stdout', { + describe: 'write on stdout', + default: 'false', + boolean: true + }).option('dry', { + describe: 'Don`t run the compiler', + default: 'false', + boolean: true + }).option('introspect', { + describe: 'Path to a report file, containing scopes and evaluations. Dumps also defaults. - Not implemented!' + }).option('env', { + describe: 'Target environment', + }).option('alt', { + default: false, + describe: 'Use alternate tokenizer, & instead of $', + type: 'boolean' + }).option('plugins', { + describe: "Path or array of paths for plugins to be loaded.\n \ + The --disabled argument is being applied! \ + Accepted file patterns : \n \ + tags: tag.mytag.js\n \ + filters: filter.mytag.js" + }).option('targetLanguage', { + describe: 'The target language (i18n)', + default: 'en', + type: 'string' + }).option('sourceLanguage', { + describe: 'The source language (i18n)', + default: 'en', + type: 'string' + }).option('logLevel', { + describe: 'Log level', + default: 'warn', + type: 'string' + }); +}; +exports.defaultOptions = defaultOptions; +const sanitize = (argv) => { + let ret = { + alt: argv.alt + }; + ret.stdout = argv.stdout === 'true' || argv.stdout === true ? true : false; + ret.dry = argv.dry === 'true' || argv.dry === true ? true : false; + ret.env = argv.env; + ret.trace = argv.trace; + if (argv.plugins) { + if (typeof argv.plugins === 'string') { + ret.plugins = [argv.plugins]; + } + else if ((0, primitives_1.isArray)(argv.plugins)) { + ret.plugins = argv.plugins; + } + else { + ret.plugins = []; + } + } + else { + argv.plugins = []; + } + try { + if (!argv.source) { + index_1.logger.error("You must specify a source path!"); + return false; + } + ret.source = argv.source; + } + catch (e) { + index_1.logger.error("Error sanitize", e); + } + ret.output = argv.output ? argv.output : null; + ret.profile = argv.profile ? argv.profile : null; + ret.template = argv.template ? path.resolve((0, osr_commons_1.resolve)(argv.template, ret.alt)) : null; + if (ret.template && !(0, osr_commons_1.isFile)(ret.template)) { + index_1.logger.error(`Template file ${ret.template} not found or invalid`); + } + const bootstrap = ret.bootstrap ? path.resolve((0, osr_commons_1.resolve)(ret.bootstrap, false, argv)) : null; + if (bootstrap) { + if ((0, exists_1.sync)(bootstrap)) { + ret.bootstrap = bootstrap; + } + else { + index_1.logger.warn(`Error reading bootstrap ${bootstrap}`); + ret.bootstrap = null; + } + } + ret.format = argv.format && (argv.format === 'md' || argv.format === 'html') ? argv.format : 'md'; + ret.language = argv.language && (argv.language === 'liquid' || argv.language === 'liquid') ? argv.language : 'osr'; + if (argv.disabled && argv.disable.includes(',')) { + const disabled = {}; + argv.disable.split(',').forEach((d) => { + disabled[d] = true; + }); + ret.disabled = disabled; + } + if (argv.cwd) { + ret.cwd = path.resolve((0, osr_commons_1.resolve)(argv.cwd)); + if (!(0, exists_1.sync)((ret.cwd))) { + index_1.logger.error(`Invalid working directory ${argv.cwd}`); + } + } + else { + ret.cwd = process.cwd(); + } + ret = Object.assign(Object.assign({}, ret), { variables: {} }); + return ret; +}; +exports.sanitize = sanitize; +// tweaks and handlers +const defaults = () => { + // default command + const DefaultCommand = 'compile'; + if (process.argv.length === 2) { + process.argv.push(DefaultCommand); + } + // currently no default handler, display only : + process.on('unhandledRejection', (reason) => { + console.error('Unhandled rejection, reason: ', reason); + }); +}; +exports.defaults = defaults; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiX2NsaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInNyYy9fY2xpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUNBLDZCQUE0QjtBQUM1QixrREFBc0Q7QUFDdEQsNERBQXFEO0FBQ3JELHlEQUF5RDtBQUV6RCxtQ0FBZ0M7QUFHekIsTUFBTSxjQUFjLEdBQUcsQ0FBQyxLQUFlLEVBQUUsRUFBRTtJQUM5QyxLQUFLLENBQUMsbUJBQW1CLENBQUM7UUFDdEIsc0JBQXNCLEVBQUUsS0FBSztLQUNoQyxDQUFDLENBQUE7SUFDRixPQUFPLEtBQUs7UUFDUixjQUFjLENBQUMsSUFBSSxDQUFDO1FBQ3BCLE1BQU0sQ0FBQyxRQUFRLEVBQUU7UUFDYixRQUFRLEVBQUUseUVBQXlFO1FBQ25GLE9BQU8sRUFBRSxJQUFJO1FBQ2IsT0FBTyxFQUFFLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsUUFBUSxDQUFDO0tBQzNDLENBQUMsQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFO1FBQ2hCLFFBQVEsRUFBRTs0Q0FDc0I7S0FDbkMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUU7UUFDbEIsUUFBUSxFQUFFLGtKQUFrSjtLQUMvSixDQUFDLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRTtRQUNsQixRQUFRLEVBQUUscUJBQXFCO1FBQy9CLE9BQU8sRUFBRSxLQUFLO1FBQ2QsT0FBTyxFQUFFLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQztLQUM3QixDQUFDLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRTtRQUNuQixRQUFRLEVBQUUsNENBQTRDO0tBQ3pELENBQUMsQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFFO1FBQ25CLFFBQVEsRUFBRSxpRkFBaUY7UUFDM0YsT0FBTyxFQUFFLCtCQUErQjtLQUMzQyxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRTtRQUNmLFFBQVEsRUFBRSx5QkFBeUI7UUFDbkMsT0FBTyxFQUFFLG1DQUFtQztL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 \ No newline at end of file diff --git a/packages/osrl/body.md b/packages/osrl/body.md new file mode 100644 index 00000000..e69de29b diff --git a/packages/osrl/commands/compile.d.ts b/packages/osrl/commands/compile.d.ts new file mode 100644 index 00000000..df0510f4 --- /dev/null +++ b/packages/osrl/commands/compile.d.ts @@ -0,0 +1,4 @@ +import * as CLI from 'yargs'; +import { IOptions } from '../types'; +export declare const targets: (f: string, options: IOptions) => any[]; +export declare const register: (cli: CLI.Argv) => CLI.Argv<{}>; diff --git a/packages/osrl/commands/compile.js b/packages/osrl/commands/compile.js new file mode 100644 index 00000000..33f8c652 --- /dev/null +++ b/packages/osrl/commands/compile.js @@ -0,0 +1,135 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.register = exports.targets = void 0; +const path = require("path"); +const bluebird_1 = require("bluebird"); +const exists_1 = require("@plastichub/fs/exists"); +const write_1 = require("@plastichub/fs/write"); +const osr_commons_1 = require("@plastichub/osr-commons"); +const Engine_1 = require("../Engine"); +const options_1 = require("../options"); +const index_1 = require("../index"); +const _cli_1 = require("../_cli"); +const zod_schema_1 = require("../zod_schema"); +let options = (yargs) => (0, _cli_1.defaultOptions)(yargs); +function _compile(options) { + return __awaiter(this, void 0, void 0, function* () { + let engineOptions = Object.assign({ root: [ + ...options.profile.includes + ] }, options); + if (options.dry) { + return; + } + let engine = new Engine_1.Engine(engineOptions); + options.source = path.resolve(options.source); + index_1.logger.info(`\n\nCompile ${options.source}`); + let output = yield engine.render(options.source, options.variables); + if (!output) { + index_1.logger.error(`Error compiling ${options.source} : invalid output`); + return false; + } + output = output.trim(); + if (!options.output && options.stdout) { + process.stdout.write(output); + } + else { + (0, write_1.sync)(options.output, output); + } + const outputPath = path.resolve(options.output); + options.output && index_1.logger.info(`\n\nWriting output to ${outputPath}`); + }); +} +const clone = (obj) => { + if (null == obj || "object" != typeof obj) + return obj; + var copy = obj.constructor(); + for (var attr in obj) { + if (obj.hasOwnProperty(attr)) + copy[attr] = obj[attr]; + } + return copy; +}; +const targets = (f, options) => { + const srcParts = path.parse(f); + const variables = clone(options.pathVariables); + const targets = []; + variables.SRC_NAME = srcParts.name; + variables.SRC_DIR = srcParts.dir; + variables.SRC_EXT = srcParts.ext; + if (variables.ROOT) { + variables.SRC_REL = path.relative(variables.ROOT, srcParts.dir); + } + if (options.targetInfo.IS_GLOB) { + options.targetInfo.GLOB_EXTENSIONS.forEach((e) => { + variables.SRC_NAME = srcParts.name; + variables.SRC_DIR = srcParts.dir; + let targetPath = (0, index_1.substitute)(options.alt, options.pathVariables.DST_PATH, variables); + targetPath = path.resolve(targetPath.replace(options.pathVariables.DST_FILE_EXT, '') + e); + targets.push(targetPath); + }); + } + else { + let targetPath = (0, index_1.substitute)(options.alt, options.pathVariables.DST_PATH, variables); + targets.push(targetPath); + } + return targets; +}; +exports.targets = targets; +function compile(options) { + return __awaiter(this, void 0, void 0, function* () { + if (options.srcInfo) { + return yield bluebird_1.Promise.resolve(options.srcInfo.FILES).map((f) => { + const outputs = (0, exports.targets)(f, options); + return _compile(Object.assign(Object.assign({}, options), { source: f, output: outputs[0] })); + }, { concurrency: 1 }); + } + else { + return _compile(options); + } + }); +} +const register = (cli) => { + return cli.command('compile', 'Compiles input files', options, (argv) => __awaiter(void 0, void 0, void 0, function* () { + if (argv.help) { + return; + } + let options = (0, _cli_1.sanitize)(argv); + if (!options) { + return; + } + options = (0, zod_schema_1.compilerOptions)().parse(options); + options = (0, options_1.parse)(options, argv); + let variables = Object.assign({}, ...Object.keys(argv).filter((k) => k.startsWith('var-')).map((k) => { + return { + [k.replace('var-', '')]: argv[k] + }; + })); + options.variables = Object.assign(Object.assign(Object.assign(Object.assign({}, options.variables), variables), (0, osr_commons_1.DATE_VARS)()), { + model: argv.model + }); + index_1.logger.settings.minLevel = options.logLevel; + if (options.source && !options.srcInfo) { + if (!(0, exists_1.sync)(options.source)) { + index_1.logger.error(`Invalid source file, doesn't exists: ${options.source} `); + return; + } + } + if (options.dry) { + index_1.logger.info(`Abort : Dry enabled`); + return; + } + index_1.logger.debug(`Compile with options`, options); + yield compile(options); + })); +}; +exports.register = register; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcGlsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9jb21tYW5kcy9jb21waWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQUNBLDZCQUE0QjtBQUM1Qix1Q0FBOEM7QUFFOUMsa0RBQXNEO0FBQ3RELGdEQUFvRDtBQUNwRCx5REFBbUQ7QUFDbkQsc0NBQWtDO0FBQ2xDLHdDQUFrQztBQUNsQyxvQ0FBNkM7QUFDN0Msa0NBQWtEO0FBRWxELDhDQUErQztBQUUvQyxJQUFJLE9BQU8sR0FBRyxDQUFDLEtBQWUsRUFBRSxFQUFFLENBQUMsSUFBQSxxQkFBYyxFQUFDLEtBQUssQ0FBQyxDQUFBO0FBRXhELFNBQWUsUUFBUSxDQUFDLE9BQWlCOztRQUNyQyxJQUFJLGFBQWEsbUJBQ2IsSUFBSSxFQUFFO2dCQUNGLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxRQUFRO2FBQzlCLElBQ0UsT0FBTyxDQUNiLENBQUE7UUFDRCxJQUFJLE9BQU8sQ0FBQyxHQUFHLEVBQUU7WUFDYixPQUFNO1NBQ1Q7UUFFRCxJQUFJLE1BQU0sR0FBRyxJQUFJLGVBQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQTtRQUN0QyxPQUFPLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFBO1FBQzdDLGNBQU0sQ0FBQyxJQUFJLENBQUMsZUFBZSxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQTtRQUM1QyxJQUFJLE1BQU0sR0FBRyxNQUFNLE1BQU0sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUE7UUFDbkUsSUFBRyxDQUFDLE1BQU0sRUFBQztZQUNQLGNBQU0sQ0FBQyxLQUFLLENBQUMsbUJBQW1CLE9BQU8sQ0FBQyxNQUFNLG1CQUFtQixDQUFDLENBQUE7WUFDbEUsT0FBTyxLQUFLLENBQUE7U0FDZjtRQUVELE1BQU0sR0FB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 \ No newline at end of file diff --git a/packages/osrl/commands/init.d.ts b/packages/osrl/commands/init.d.ts new file mode 100644 index 00000000..443f33e5 --- /dev/null +++ b/packages/osrl/commands/init.d.ts @@ -0,0 +1,2 @@ +import * as CLI from 'yargs'; +export declare const register: (cli: CLI.Argv) => CLI.Argv<{}>; diff --git a/packages/osrl/commands/init.js b/packages/osrl/commands/init.js new file mode 100644 index 00000000..3c4e6b2f --- /dev/null +++ b/packages/osrl/commands/init.js @@ -0,0 +1,40 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.register = void 0; +const index_1 = require("../index"); +const _cli_1 = require("../_cli"); +const sheets_1 = require("../lib/net/sheets"); +let options = (yargs) => (0, _cli_1.defaultOptions)(yargs); +// node ./main.js init google-sheets --sheet='1oVEiGH4o3SV-mAA3Mb-WNVJMyYl4VMxLjWjrSw_ipJY' --range='Parts!B4:B5' +const initGSheets = (sheet, range) => __awaiter(void 0, void 0, void 0, function* () { + return (0, sheets_1.read)(sheet, range); +}); +const register = (cli) => { + return cli.command('init ', 'Initialize specific language features', options, (argv) => __awaiter(void 0, void 0, void 0, function* () { + if (argv.help) { + return; + } + const verb = argv.verb; + if (!verb) { + index_1.logger.error(`You need to specify a verb`); + } + if (verb === 'google-sheets') { + const sheet = argv.sheet; + const range = argv.range; + initGSheets(sheet, range).then((d) => { + index_1.logger.info('done google auth | sheet result', d); + }); + } + })); +}; +exports.register = register; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5pdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9jb21tYW5kcy9pbml0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQUNBLG9DQUFrQztBQUNsQyxrQ0FBeUM7QUFDekMsOENBQXlDO0FBRXpDLElBQUksT0FBTyxHQUFHLENBQUMsS0FBZSxFQUFFLEVBQUUsQ0FBQyxJQUFBLHFCQUFjLEVBQUMsS0FBSyxDQUFDLENBQUM7QUFFekQsaUhBQWlIO0FBRWpILE1BQU0sV0FBVyxHQUFHLENBQU8sS0FBSyxFQUFFLEtBQUssRUFBRSxFQUFFO0lBQ3ZDLE9BQU8sSUFBQSxhQUFJLEVBQUMsS0FBSyxFQUFDLEtBQUssQ0FBQyxDQUFBO0FBQzVCLENBQUMsQ0FBQSxDQUFBO0FBRU0sTUFBTSxRQUFRLEdBQUcsQ0FBQyxHQUFhLEVBQUUsRUFBRTtJQUN0QyxPQUFPLEdBQUcsQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFFLHVDQUF1QyxFQUFFLE9BQU8sRUFBRSxDQUFPLElBQW1CLEVBQUUsRUFBRTtRQUM5RyxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDWCxPQUFPO1NBQ1Y7UUFDRCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBQ3ZCLElBQUcsQ0FBQyxJQUFJLEVBQUM7WUFDTCxjQUFNLENBQUMsS0FBSyxDQUFDLDRCQUE0QixDQUFDLENBQUM7U0FDOUM7UUFFRCxJQUFHLElBQUksS0FBRyxlQUFlLEVBQUM7WUFDdEIsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztZQUN6QixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO1lBQ3pCLFdBQVcsQ0FBQyxLQUFLLEVBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUU7Z0JBQy9CLGNBQU0sQ0FBQyxJQUFJLENBQUMsaUNBQWlDLEVBQUUsQ0FBQyxDQUFFLENBQUM7WUFDdkQsQ0FBQyxDQUFDLENBQUE7U0FDTDtJQUNMLENBQUMsQ0FBQSxDQUFDLENBQUM7QUFDUCxDQUFDLENBQUM7QUFsQlcsUUFBQSxRQUFRLFlBa0JuQiJ9 \ No newline at end of file diff --git a/packages/osrl/conf/bootstrap.d.ts b/packages/osrl/conf/bootstrap.d.ts new file mode 100644 index 00000000..5889f99a --- /dev/null +++ b/packages/osrl/conf/bootstrap.d.ts @@ -0,0 +1,37 @@ +/// +import { IBaseOptions, IProcessingNode } from '@plastichub/fs/interfaces'; +import { ArrayIterator } from '@plastichub/core/iterator'; +import { IObjectLiteral } from '@plastichub/core'; +export interface Context extends IObjectLiteral { + markdownTable: (data: any, options?: any) => string; + cacache: any; + cheerio: any; + TOML: any; + frontmatter: any; + logger: any; + config: any; + PATHS: any; + fs: { + findUp: any; + iterator: (from: string, options: IBaseOptions) => ArrayIterator; + glob: (path: string, options: any) => string[]; + slash: (s: string) => string; + EIteratorFlags: { + MODE: 2; + TIMES: 4; + SYMLINKS: 8; + FILE_SIZE: 16; + DIRECTORY_SIZE: 32; + CHECKSUM: 64; + MIME: 128; + }; + sizeToString: (size: number) => string; + dir: (dir: any, glob: any) => string[]; + path: any; + exists: (path: string) => boolean | string; + resolve: (path: string, alt: boolean, vars: IObjectLiteral) => string[]; + write: (path: string, content: string) => void; + read: (path: string, type: string) => string | Buffer; + }; +} +export declare const context: Context; diff --git a/packages/osrl/conf/bootstrap.js b/packages/osrl/conf/bootstrap.js new file mode 100644 index 00000000..2a04944c --- /dev/null +++ b/packages/osrl/conf/bootstrap.js @@ -0,0 +1,79 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.context = void 0; +const path = require("path"); +const index_1 = require("../lib/index"); +const __1 = require("../"); +const StringUtils = require("../lib/StringUtils"); +const HexUtils = require("../lib/HexUtils"); +const Arrays = require("../lib/arrays"); +const Primitives = require("../lib/primitives"); +const markdown_1 = require("../lib/markdown"); +const fm = require("front-matter"); +const fs_1 = require("../lib/fs"); +const osr_commons_1 = require("@plastichub/osr-commons"); +const iterator_1 = require("@plastichub/fs/iterator"); +const exists_1 = require("@plastichub/fs/exists"); +const write_1 = require("@plastichub/fs/write"); +const read_1 = require("@plastichub/fs/read"); +const osr_commons_2 = require("@plastichub/osr-commons"); +const env = require("env-var"); +const os = require("os"); +const fs = require("fs"); +const crypto = require("crypto"); +const cheerio = require("cheerio"); +const bluebird_1 = require("bluebird"); +const cacache = require("cacache"); +const js_beautify_1 = require("js-beautify"); +const convert = require('convert-units'); +const fg = require('fast-glob'); +const findUp = require('find-up'); +const hljs = require('highlight.js'); +const prettyHtml = require('json-pretty-html').default; +const prettyJSON = require('json-format-highlight'); +const TOML = require('@iarna/toml'); +const TOMLParser = require('@iarna/toml/lib/toml-parser.js'); +const xlsx = require('node-xlsx'); +const YAML = require('json-to-pretty-yaml'); +exports.context = Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({ convert: convert }, StringUtils), HexUtils), Arrays), Primitives), { markdownTable: markdown_1.markdownTable, + md2html: markdown_1.md2html, + cacache, + cheerio, + logger: __1.logger, config: (0, osr_commons_1.CONFIG_DEFAULT)(), PATHS: osr_commons_1.DEFAULT_ROOTS, TOML: { + parse: TOML.parse, + stringify: TOML.stringify, + parser: TOMLParser + }, frontmatter: fm, YAML, + resolveConfig: index_1.resolveConfig, + prettyHtml, + prettyJSON, + html_beautify: js_beautify_1.html_beautify, + BPromise: bluebird_1.Promise, + hljs, xlsx: { + build: xlsx.build, + parse: xlsx.parse + }, path, fs: Object.assign(Object.assign({ findUp: findUp, iterator: iterator_1.sync, glob: fg, slash: fs_1.forward_slash, EIteratorFlags: { + MODE: 2, + TIMES: 4, + SYMLINKS: 8, + FILE_SIZE: 16, + DIRECTORY_SIZE: 32, + CHECKSUM: 64, + MIME: 128 + }, sizeToString: fs_1.sizeToString, dir: (dir, glob) => fg.sync(glob, { dot: true, cwd: dir, absolute: true }) }, fs), { path, + exists: exists_1.sync, + resolve: osr_commons_2.resolve, + write: write_1.sync, read: read_1.sync }), os: Object.assign({ env: env }, os), crypto: Object.assign(Object.assign({}, crypto), { encrypt: (text, password, algorithm = 'aes-256-cbc') => { + const iv = crypto.randomBytes(16); + const cipher = crypto.createCipheriv(algorithm, password, iv); + let crypted = cipher.update(text, 'utf8', 'hex'); + crypted += cipher.final('hex'); + return crypted; + }, decrypt: (text, password, algorithm = 'aes-128-ecb') => { + const iv = crypto.randomBytes(16); + const decipher = crypto.createCipheriv(algorithm, password, iv); + let dec = decipher.update(text, 'hex', 'utf8'); + dec += decipher.final('utf8'); + return dec; + } }) }); +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9vdHN0cmFwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2NvbmYvYm9vdHN0cmFwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDZCQUE0QjtBQUM1Qix3Q0FBNEM7QUFDNUMsMkJBQTRCO0FBQzVCLGtEQUFpRDtBQUNqRCw0Q0FBMkM7QUFDM0Msd0NBQXVDO0FBQ3ZDLGdEQUErQztBQUMvQyw4Q0FBd0Q7QUFDeEQsbUNBQWtDO0FBQ2xDLGtDQUF1RDtBQUN2RCx5REFBdUU7QUFFdkUsc0RBQTBEO0FBQzFELGtEQUFzRDtBQUN0RCxnREFBb0Q7QUFDcEQsOENBQWtEO0FBRWxELHlEQUFpRDtBQUdqRCwrQkFBK0I7QUFDL0IseUJBQXdCO0FBQ3hCLHlCQUF3QjtBQUN4QixpQ0FBZ0M7QUFDaEMsbUNBQWtDO0FBQ2xDLHVDQUE4QztBQUM5QyxtQ0FBa0M7QUFDbEMsNkNBQTJDO0FBRTNDLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxlQUFlLENBQUMsQ0FBQTtBQUN4QyxNQUFNLEVBQUUsR0FBRyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUE7QUFDL0IsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFBO0FBQ2pDLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FBQTtBQUNwQyxNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxPQUFPLENBQUE7QUFDdEQsTUFBTSxVQUFVLEdBQUcsT0FBTyxDQUFDLHVCQUF1QixDQUFDLENBQUE7QUFDbkQsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFBO0FBQ25DLE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFBO0FBQzVELE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQTtBQUNqQyxNQUFNLElBQUksR0FBRyxPQUFPLENBQUMscUJBQXFCLENBQUMs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 \ No newline at end of file diff --git a/packages/osrl/config.js b/packages/osrl/config.js new file mode 100644 index 00000000..0426515a --- /dev/null +++ b/packages/osrl/config.js @@ -0,0 +1,46 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.TASK_LOG_DIRECTORY = exports.TASK_COMPILE_CONTENT_CACHE = exports.TASK_CONFIG_LOG_DIRECTORY = exports.ENABLED_PRODUCTS = exports.OSRL_LANG_FLAVOR = exports.OSRL_PROFILE = exports.OSRL_MODULE_NAME = exports.PRODUCTS_TARGET_SRC = exports.PRODUCT_HUGO_TEMPLATE = exports.OSRL_ENVIRONMENT = exports.OSRL_ENV_DEV = exports.OSRL_ENV = exports.IS_DEV = exports.PRODUCT_DIR = exports.PRODUCT_CONFIG = exports.PRODUCT_ROOT = exports.I18N_SOURCE_LANGUAGE = exports.I18N_STORE = exports.I18N_STORE_EN = exports.LANGUAGES_ALL = exports.LANGUAGES = exports.TRANSLATE_CONTENT = exports.OSR_ROOT = void 0; +const path = require("path"); +const fs_1 = require("@plastichub/osr-commons"); +const OSR_ROOT = () => path.resolve((0, fs_1.resolve)("${OSR_ROOT}")); +exports.OSR_ROOT = OSR_ROOT; +// Supported languages +exports.TRANSLATE_CONTENT = true; // translate regular pages +exports.LANGUAGES = ['de']; +exports.LANGUAGES_ALL = ['de', 'fr', 'es']; +// i18n constants +exports.I18N_STORE_EN = "${cwd}/i18n-store/store-en.json"; +const I18N_STORE = (root, lang) => `${root}/i18n-store/store-${lang}.json`; +exports.I18N_STORE = I18N_STORE; +exports.I18N_SOURCE_LANGUAGE = 'en'; +// Product compiler +const PRODUCT_ROOT = () => path.resolve((0, fs_1.resolve)("${OSR_ROOT}/products")); +exports.PRODUCT_ROOT = PRODUCT_ROOT; +const PRODUCT_CONFIG = (product) => path.resolve((0, fs_1.resolve)("${OSR_ROOT}/products/${product}/config.json", false, { + product +})); +exports.PRODUCT_CONFIG = PRODUCT_CONFIG; +const PRODUCT_DIR = (product) => path.resolve((0, fs_1.resolve)("${OSR_ROOT}/products/${product}", false, { + product +})); +exports.PRODUCT_DIR = PRODUCT_DIR; +exports.IS_DEV = true; +exports.OSRL_ENV = 'library'; +exports.OSRL_ENV_DEV = 'hugo-debug'; +exports.OSRL_ENVIRONMENT = exports.IS_DEV ? exports.OSRL_ENV_DEV : exports.OSRL_ENV; +exports.PRODUCT_HUGO_TEMPLATE = './osr/hugo/root.html'; +exports.PRODUCTS_TARGET_SRC = './src/content/en/retail'; +// OSRL - Language +exports.OSRL_MODULE_NAME = 'osrl-docs'; +exports.OSRL_PROFILE = '${root}/.osrl.json'; +exports.OSRL_LANG_FLAVOR = 'osr'; +// Products +exports.ENABLED_PRODUCTS = "./config/machines.json"; +// Tasks +exports.TASK_CONFIG_LOG_DIRECTORY = './config/'; +// Task: compile:content +exports.TASK_COMPILE_CONTENT_CACHE = true; +// Task - Logging +exports.TASK_LOG_DIRECTORY = './logs/'; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsidGFza3MvY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDZCQUE0QjtBQUM1Qix1REFBd0Q7QUFFakQsTUFBTSxRQUFRLEdBQUcsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFBLFlBQU8sRUFBQyxhQUFhLENBQUMsQ0FBQyxDQUFBO0FBQXJELFFBQUEsUUFBUSxZQUE2QztBQUVsRSxzQkFBc0I7QUFDVCxRQUFBLGlCQUFpQixHQUFHLElBQUksQ0FBQSxDQUFDLDBCQUEwQjtBQUNuRCxRQUFBLFNBQVMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFBO0FBQ2xCLFFBQUEsYUFBYSxHQUFHLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQTtBQUUvQyxpQkFBaUI7QUFDSixRQUFBLGFBQWEsR0FBRyxpQ0FBaUMsQ0FBQTtBQUN2RCxNQUFNLFVBQVUsR0FBRyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLEdBQUcsSUFBSSxxQkFBcUIsSUFBSSxPQUFPLENBQUE7QUFBcEUsUUFBQSxVQUFVLGNBQTBEO0FBQ3BFLFFBQUEsb0JBQW9CLEdBQUcsSUFBSSxDQUFBO0FBRXhDLG1CQUFtQjtBQUNaLE1BQU0sWUFBWSxHQUFHLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBQSxZQUFPLEVBQUMsc0JBQXNCLENBQUMsQ0FBQyxDQUFBO0FBQWxFLFFBQUEsWUFBWSxnQkFBc0Q7QUFDeEUsTUFBTSxjQUFjLEdBQUcsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUN4QyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUEsWUFBTyxFQUFDLDZDQUE2QyxFQUFFLEtBQUssRUFDdkU7SUFDRSxPQUFPO0NBQ1IsQ0FBQyxDQUFDLENBQUE7QUFKTSxRQUFBLGNBQWMsa0JBSXBCO0FBRUksTUFBTSxXQUFXLEdBQUcsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUN6QyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUEsWUFBTyxFQUFDLGlDQUFpQyxFQUFFLEtBQUssRUFDM0Q7SUFDRSxPQUFPO0NBQ1IsQ0FBQyxDQUFDLENBQUE7QUFKVSxRQUFBLFdBQVcsZUFJckI7QUFFVSxRQUFBLE1BQU0sR0FBRyxJQUFJLENBQUE7QUFDakIsUUFBQSxRQUFRLEdBQUcsU0FBUyxDQUFBO0FBQ3BCLFFBQUEsWUFBWSxHQUFHLFlBQVksQ0FBQTtBQUMzQixRQUFBLGdCQUFnQixHQUFHLGNBQU0sQ0FBQyxDQUFDLENBQUMsb0JBQVksQ0FBQyxDQUFDLENBQUMsZ0JBQVEsQ0FBQTtBQUNuRCxRQUFBLHFCQUFxQixHQUFHLHNCQUFzQixDQUFBO0FBQzlDLFFBQUEsbUJBQW1CLEdBQUcseUJBQXlCLENBQUE7QUFFNUQsa0JBQWtCO0FBQ0wsUUFBQSxnQkFBZ0IsR0FBRyxXQUFXLENBQUE7QUFDOUIsUUFBQSxZQUFZLEdBQUcsb0JBQW9CLENBQUE7QUFDbkMsUUFBQSxnQkFBZ0IsR0FBRyxLQUFLLENBQUE7QUFFckMsV0FBVztBQUNFLFFBQUEsZ0JBQWdCLEdBQUcsd0JBQXdCLENBQUE7QUFFeEQsUUFBUTtBQUNLLFFBQUEseUJBQXlCLEdBQUcsV0FBVyxDQUFBO0FBRXBELHdCQUF3QjtBQUNYLFFBQUEsMEJBQTBCLEdBQUcsSUFBSSxDQUFBO0FBRTlDLGlCQUFpQjtBQUNKLFFBQUEsa0JBQWtCLEdBQUcsU0FBUyxDQUFBIn0= \ No newline at end of file diff --git a/packages/osrl/constants.d.ts b/packages/osrl/constants.d.ts new file mode 100644 index 00000000..adbeefdc --- /dev/null +++ b/packages/osrl/constants.d.ts @@ -0,0 +1,2 @@ +export declare const MODULE_NAME = "OSRL"; +export declare const PROFILE_FILE_NAME = ".osrl.json"; diff --git a/packages/osrl/constants.js b/packages/osrl/constants.js new file mode 100644 index 00000000..3503cf7f --- /dev/null +++ b/packages/osrl/constants.js @@ -0,0 +1,6 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.PROFILE_FILE_NAME = exports.MODULE_NAME = void 0; +exports.MODULE_NAME = `OSRL`; +exports.PROFILE_FILE_NAME = `.osrl.json`; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsic3JjL2NvbnN0YW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBYSxRQUFBLFdBQVcsR0FBRyxNQUFNLENBQUE7QUFDcEIsUUFBQSxpQkFBaUIsR0FBRyxZQUFZLENBQUEifQ== \ No newline at end of file diff --git a/packages/osrl/content/de/sal-test copy.md b/packages/osrl/content/de/sal-test copy.md new file mode 100644 index 00000000..61d69f9e --- /dev/null +++ b/packages/osrl/content/de/sal-test copy.md @@ -0,0 +1,12 @@ + + +Source Language2 : en +Target Language2 : de + + + +```json +{ + +} +``` \ No newline at end of file diff --git a/packages/osrl/content/de/sal-test-ai.md b/packages/osrl/content/de/sal-test-ai.md new file mode 100644 index 00000000..34b2660e --- /dev/null +++ b/packages/osrl/content/de/sal-test-ai.md @@ -0,0 +1,40 @@ +## Example : List all major cities of Spain, as JSON Array, then iterate over it to retrieve tourist attractions + + + + +## [ Madrid ](/Madrid) +- [Royal Palace of Madrid](https://www.patrimonionacional.es/en/real-sitio/palacios/royal-palace-madrid) +- [Prado Museum](https://www.museodelprado.es/en) +- [Retiro Park](https://www.esmadrid.com/en/tourist-information/parque-del-retiro) +- [Plaza Mayor](https://www.esmadrid.com/en/tourist-information/plaza-mayor) +- [Puerta del Sol](https://www.esmadrid.com/en/tourist-information/puerta-del-sol) +- [Thyssen-Bornemisza Museum](https://www.museothyssen.org/en) +- [Santiago Bernabéu Stadium](https://www.realmadrid.com/en/santiago-bernabeu-stadium) +- [Temple of Debod](https://www.esmadrid.com/en/tourist-information/templo-debod) +- [Gran Vía](https://www.esmadrid.com/en/tourist-information/gran-via) +- [Plaza de Cibeles](https://www.esmadrid.com/en/tourist-information/fuente-de-la-cibeles) +- [Reina Sofia Museum](https://www.museoreinasofia.es/en) +- [Mercado de San Miguel](https://www.mercadodesanmiguel.es/en/) +- [El Rastro](https://www.esmadrid.com/en/shopping/el-rastro) +- [Plaza de España](https://www.esmadrid.com/en/tourist-information/plaza-de-espana) +- [National Archaeological Museum](http://www.man.es/man/en/home) +## [ Barcelona ](/Barcelona) +- [La Sagrada Familia](https://sagradafamilia.org) +- [Park Güell](https://www.parkguell.cat) +- [Casa Batlló](https://www.casabatllo.es) +- [La Rambla](https://www.barcelona.com/barcelona_directory/monuments/la_rambla) +- [Gothic Quarter (Barri Gòtic)](https://www.barcelona.com/barcelona_directory/monuments/gothic_quarter) +- [Camp Nou](https://www.fcbarcelona.com/en/club/facilities/camp-nou) +- [Magic Fountain (Font Màgica)](https://www.barcelona.cat/en/what-to-do-in-bcn/magic-fountain/magic-fountain) +- [Montjuïc Hill](https://www.barcelona.com/barcelona_directory/monuments/montjuic) +- [Palau de la Música Catalana](https://www.palaumusica.cat) +- [Casa Milà (La Pedrera)](https://www.lapedrera.com) +- [Picasso Museum](https://www.museupicassobcn.org) +- [Barcelona Cathedral](https://www.catedralbcn.org) +- [Barceloneta Beach](https://www.barcelona-tourist-guide.com/en/attractions/barceloneta.html) +- [Poble Espanyol](https://www.poble-espanyol.com) +- [Tibidabo Amusement Park](https://www.tibidabo.cat/en) +- [Hospital de Sant Pau](https://www.santpaubarcelona.org) +- [Arc de Triomf](https://www.barcelona.com/barcelona_directory/monuments/arc_de_triomphe) +- [Mercat de Sant Josep de la Boqueria (La Boqueria Market)](https://www.boqueria.barcelona) diff --git a/packages/osrl/content/de/sal-test.md b/packages/osrl/content/de/sal-test.md new file mode 100644 index 00000000..61d69f9e --- /dev/null +++ b/packages/osrl/content/de/sal-test.md @@ -0,0 +1,12 @@ + + +Source Language2 : en +Target Language2 : de + + + +```json +{ + +} +``` \ No newline at end of file diff --git a/packages/osrl/content/de/sample_ai_svg.md b/packages/osrl/content/de/sample_ai_svg.md new file mode 100644 index 00000000..7b6a94a0 --- /dev/null +++ b/packages/osrl/content/de/sample_ai_svg.md @@ -0,0 +1,105 @@ + +### Create a SVG Animation + +- argument `skip` : skip existing results (only works with `dst` specified). + + +```js + +[% osr-ai model:"gpt-4o" skip:true gui:true logLevel:"warn" filters:"code,trim" dst:"${SRC_DIR}/${SRC_NAME}.svg" %] + Create a 4 balls, rotating around the outside of a cube, as SVG + - no comments + - scale it to 400x400px + - add another ball bouncing against the inside walls of the cube +[% osr-ai-end %] + +``` + + + + + + + + + + + + +### Create an animated solar system +```js + +[% osr-ai model:"gpt-4o" skip:false gui:true logLevel:"warn" filters:"code,trim" dst:"${SRC_DIR}/${SRC_NAME}-solar.svg" %] + Simluate the solar system, as SVG + - Each planet should open the link to Wikipedia. + - all planets rotate around the sun (center), animated, slow, add a thin line for the orbit + - Add a legend with basic information : size, weight, age, make sure it fits in the screen + - compact the code, no comments + - make it all fit to 600x600px + All as SVG, no comments +[% osr-ai-end %] + +``` + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/packages/osrl/debug.d.ts b/packages/osrl/debug.d.ts new file mode 100644 index 00000000..bf59e98f --- /dev/null +++ b/packages/osrl/debug.d.ts @@ -0,0 +1,7 @@ +export declare const log: (msg: string, d?: any) => void; +export declare const info: (msg: string, d?: any) => void; +export declare const error: (msg: string, d?: any) => void; +export declare const warn: (msg: string, d?: any) => void; +export declare const debug: (msg: string, d?: any) => void; +export declare const inspect: (msg: string, d?: any, pretty?: boolean) => void; +export declare const spinner: (msg: string) => any; diff --git a/packages/osrl/debug.js b/packages/osrl/debug.js new file mode 100644 index 00000000..e386d89a --- /dev/null +++ b/packages/osrl/debug.js @@ -0,0 +1,27 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.spinner = exports.inspect = exports.debug = exports.warn = exports.error = exports.info = exports.log = void 0; +const chalk_1 = require("chalk"); +const ora = require("ora"); +// tslint:disable-next-line:no-var-requires +const jsome = require('jsome'); +jsome.level.show = true; +const glog = console.log; +const log = (msg, d) => glog(chalk_1.default.magenta(msg), d || ''); +exports.log = log; +const info = (msg, d) => glog(chalk_1.default.green(msg), d || ''); +exports.info = info; +const error = (msg, d) => glog(chalk_1.default.red(msg), d || ''); +exports.error = error; +const warn = (msg, d) => glog(chalk_1.default.yellow(msg), d || ''); +exports.warn = warn; +const debug = (msg, d) => glog(chalk_1.default.blue(msg), d || ''); +exports.debug = debug; +const inspect = (msg, d = null, pretty = true) => { + glog(chalk_1.default.blue(msg)); + d && jsome(d); +}; +exports.inspect = inspect; +const spinner = (msg) => ora(msg); +exports.spinner = spinner; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVidWcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJzcmMvZGVidWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsaUNBQXlDO0FBQ3pDLDJCQUEyQjtBQUMzQiwyQ0FBMkM7QUFDM0MsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQy9CLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztBQUN4QixNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDO0FBQ2xCLE1BQU0sR0FBRyxHQUFHLENBQUMsR0FBVyxFQUFFLENBQU8sRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLGVBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0FBQWxFLFFBQUEsR0FBRyxPQUErRDtBQUN4RSxNQUFNLElBQUksR0FBRyxDQUFDLEdBQVcsRUFBRSxDQUFPLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxlQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztBQUFqRSxRQUFBLElBQUksUUFBNkQ7QUFDdkUsTUFBTSxLQUFLLEdBQUcsQ0FBQyxHQUFXLEVBQUUsQ0FBTyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsZUFBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7QUFBaEUsUUFBQSxLQUFLLFNBQTJEO0FBQ3RFLE1BQU0sSUFBSSxHQUFHLENBQUMsR0FBVyxFQUFFLENBQU8sRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLGVBQUssQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0FBQWxFLFFBQUEsSUFBSSxRQUE4RDtBQUN4RSxNQUFNLEtBQUssR0FBRyxDQUFDLEdBQVcsRUFBRSxDQUFPLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxlQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztBQUFqRSxRQUFBLEtBQUssU0FBNEQ7QUFDdkUsTUFBTSxPQUFPLEdBQUcsQ0FBQyxHQUFXLEVBQUUsSUFBUyxJQUFJLEVBQUUsU0FBa0IsSUFBSSxFQUFFLEVBQUU7SUFDMUUsSUFBSSxDQUFDLGVBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUN0QixDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2xCLENBQUMsQ0FBQztBQUhXLFFBQUEsT0FBTyxXQUdsQjtBQUNLLE1BQU0sT0FBTyxHQUFHLENBQUMsR0FBVyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFBcEMsUUFBQSxPQUFPLFdBQTZCIn0= \ No newline at end of file diff --git a/packages/osrl/dev.code-workspace b/packages/osrl/dev.code-workspace new file mode 100644 index 00000000..a8b219bc --- /dev/null +++ b/packages/osrl/dev.code-workspace @@ -0,0 +1,26 @@ +{ + "folders": [ + { + "path": "." + }, + { + "path": "../osr-tasks" + }, + { + "path": "../osr-i18n" + }, + { + "path": "../osr-cli-commons" + }, + { + "path": "../osr-log" + }, + { + "path": "../osr-commons" + }, + { + "path": "../osr-sync" + } + ], + "settings": {} +} \ No newline at end of file diff --git a/packages/osrl/dist/main/main.js b/packages/osrl/dist/main/main.js new file mode 100644 index 00000000..3c370e2d --- /dev/null +++ b/packages/osrl/dist/main/main.js @@ -0,0 +1,375 @@ +// modules are defined as an array +// [ module function, map of requires ] +// +// map of requires is short require name -> numeric require +// +// anything defined in a previous bundle is accessed via the +// orig method which is the require for previous bundles +parcelRequire = (function (modules, cache, entry, globalName) { + // Save the require from previous bundle to this closure if any + var previousRequire = typeof parcelRequire === 'function' && parcelRequire; + var nodeRequire = typeof require === 'function' && require; + + function newRequire(name, jumped) { + if (!cache[name]) { + if (!modules[name]) { + // if we cannot find the module within our internal map or + // cache jump to the current global require ie. the last bundle + // that was added to the page. + var currentRequire = typeof parcelRequire === 'function' && parcelRequire; + if (!jumped && currentRequire) { + return currentRequire(name, true); + } + + // If there are other bundles on this page the require from the + // previous one is saved to 'previousRequire'. Repeat this as + // many times as there are bundles until the module is found or + // we exhaust the require chain. + if (previousRequire) { + return previousRequire(name, true); + } + + // Try the node require function if it exists. + if (nodeRequire && typeof name === 'string') { + return nodeRequire(name); + } + + var err = new Error('Cannot find module \'' + name + '\''); + err.code = 'MODULE_NOT_FOUND'; + throw err; + } + + localRequire.resolve = resolve; + localRequire.cache = {}; + + var module = cache[name] = new newRequire.Module(name); + + modules[name][0].call(module.exports, localRequire, module, module.exports, this); + } + + return cache[name].exports; + + function localRequire(x){ + return newRequire(localRequire.resolve(x)); + } + + function resolve(x){ + return modules[name][1][x] || x; + } + } + + function Module(moduleName) { + this.id = moduleName; + this.bundle = newRequire; + this.exports = {}; + } + + newRequire.isParcelRequire = true; + newRequire.Module = Module; + newRequire.modules = modules; + newRequire.cache = cache; + newRequire.parent = previousRequire; + newRequire.register = function (id, exports) { + modules[id] = [function (require, module) { + module.exports = exports; + }, {}]; + }; + + var error; + for (var i = 0; i < entry.length; i++) { + try { + newRequire(entry[i]); + } catch (e) { + // Save first error but execute all entries + if (!error) { + error = e; + } + } + } + + if (entry.length) { + // Expose entry point to Node, AMD or browser globals + // Based on https://github.com/ForbesLindesay/umd/blob/master/template.js + var mainExports = newRequire(entry[entry.length - 1]); + + // CommonJS + if (typeof exports === "object" && typeof module !== "undefined") { + module.exports = mainExports; + + // RequireJS + } else if (typeof define === "function" && define.amd) { + define(function () { + return mainExports; + }); + + // +[%endjs%] + + +[% js %] + +[%endjs%] \ No newline at end of file diff --git a/packages/osrl/examples/library/.osrl.json b/packages/osrl/examples/library/.osrl.json new file mode 100644 index 00000000..280113be --- /dev/null +++ b/packages/osrl/examples/library/.osrl.json @@ -0,0 +1,35 @@ +{ + "includes": [ + "${root}/osr", + "${root}/osr/bazar" + ], + "variables": { + "PRODUCT_ROOT": "${root}/${product}/", + "abs_url": "https://plastic-hub.com/", + "CACHE": "${root}/cache/", + "CACHE_URL": "${abs_url}/cache/", + "GIT_REPO": "https://git.osr-plastic.org/osr-plastic/pp-next" + }, + "env": { + "bazar": { + "includes": [ + "${root}/osr", + "${root}/osr/widgets", + "${root}/osr/bazar" + ], + "variables": { + "abs_url": "https://dev.osr-plastic.org/" + } + }, + "bazar-release": { + "includes": [ + "${root}/osr", + "${root}/osr/widgets", + "${PRODUCT_ROOT}" + ], + "variables": { + "abs_url": "https://plastic-hub.com/" + } + } + } +} \ No newline at end of file diff --git a/packages/osrl/examples/library/asterix/License.txt b/packages/osrl/examples/library/asterix/License.txt new file mode 100644 index 00000000..4cb84370 --- /dev/null +++ b/packages/osrl/examples/library/asterix/License.txt @@ -0,0 +1,199 @@ +CERN Open Hardware Licence Version 2 - Permissive + + +Preamble + +CERN has developed this licence to promote collaboration among +hardware designers and to provide a legal tool which supports the +freedom to use, study, modify, share and distribute hardware designs +and products based on those designs. Version 2 of the CERN Open +Hardware Licence comes in three variants: this licence, CERN-OHL-P +(permissive); and two reciprocal licences: CERN-OHL-W (weakly +reciprocal) and CERN-OHL-S (strongly reciprocal). + +The CERN-OHL-P is copyright CERN 2020. Anyone is welcome to use it, in +unmodified form only. + +Use of this Licence does not imply any endorsement by CERN of any +Licensor or their designs nor does it imply any involvement by CERN in +their development. + + +1 Definitions + + 1.1 'Licence' means this CERN-OHL-P. + + 1.2 'Source' means information such as design materials or digital + code which can be applied to Make or test a Product or to + prepare a Product for use, Conveyance or sale, regardless of its + medium or how it is expressed. It may include Notices. + + 1.3 'Covered Source' means Source that is explicitly made available + under this Licence. + + 1.4 'Product' means any device, component, work or physical object, + whether in finished or intermediate form, arising from the use, + application or processing of Covered Source. + + 1.5 'Make' means to create or configure something, whether by + manufacture, assembly, compiling, loading or applying Covered + Source or another Product or otherwise. + + 1.6 'Notice' means copyright, acknowledgement and trademark notices, + references to the location of any Notices, modification notices + (subsection 3.3(b)) and all notices that refer to this Licence + and to the disclaimer of warranties that are included in the + Covered Source. + + 1.7 'Licensee' or 'You' means any person exercising rights under + this Licence. + + 1.8 'Licensor' means a person who creates Source or modifies Covered + Source and subsequently Conveys the resulting Covered Source + under the terms and conditions of this Licence. A person may be + a Licensee and a Licensor at the same time. + + 1.9 'Convey' means to communicate to the public or distribute. + + +2 Applicability + + 2.1 This Licence governs the use, copying, modification, Conveying + of Covered Source and Products, and the Making of Products. By + exercising any right granted under this Licence, You irrevocably + accept these terms and conditions. + + 2.2 This Licence is granted by the Licensor directly to You, and + shall apply worldwide and without limitation in time. + + 2.3 You shall not attempt to restrict by contract or otherwise the + rights granted under this Licence to other Licensees. + + 2.4 This Licence is not intended to restrict fair use, fair dealing, + or any other similar right. + + +3 Copying, Modifying and Conveying Covered Source + + 3.1 You may copy and Convey verbatim copies of Covered Source, in + any medium, provided You retain all Notices. + + 3.2 You may modify Covered Source, other than Notices. + + You may only delete Notices if they are no longer applicable to + the corresponding Covered Source as modified by You and You may + add additional Notices applicable to Your modifications. + + 3.3 You may Convey modified Covered Source (with the effect that You + shall also become a Licensor) provided that You: + + a) retain Notices as required in subsection 3.2; and + + b) add a Notice to the modified Covered Source stating that You + have modified it, with the date and brief description of how + You have modified it. + + 3.4 You may Convey Covered Source or modified Covered Source under + licence terms which differ from the terms of this Licence + provided that: + + a) You comply at all times with subsection 3.3; and + + b) You provide a copy of this Licence to anyone to whom You + Convey Covered Source or modified Covered Source. + + +4 Making and Conveying Products + +You may Make Products, and/or Convey them, provided that You ensure +that the recipient of the Product has access to any Notices applicable +to the Product. + + +5 DISCLAIMER AND LIABILITY + + 5.1 DISCLAIMER OF WARRANTY -- The Covered Source and any Products + are provided 'as is' and any express or implied warranties, + including, but not limited to, implied warranties of + merchantability, of satisfactory quality, non-infringement of + third party rights, and fitness for a particular purpose or use + are disclaimed in respect of any Source or Product to the + maximum extent permitted by law. The Licensor makes no + representation that any Source or Product does not or will not + infringe any patent, copyright, trade secret or other + proprietary right. The entire risk as to the use, quality, and + performance of any Source or Product shall be with You and not + the Licensor. This disclaimer of warranty is an essential part + of this Licence and a condition for the grant of any rights + granted under this Licence. + + 5.2 EXCLUSION AND LIMITATION OF LIABILITY -- The Licensor shall, to + the maximum extent permitted by law, have no liability for + direct, indirect, special, incidental, consequential, exemplary, + punitive or other damages of any character including, without + limitation, procurement of substitute goods or services, loss of + use, data or profits, or business interruption, however caused + and on any theory of contract, warranty, tort (including + negligence), product liability or otherwise, arising in any way + in relation to the Covered Source, modified Covered Source + and/or the Making or Conveyance of a Product, even if advised of + the possibility of such damages, and You shall hold the + Licensor(s) free and harmless from any liability, costs, + damages, fees and expenses, including claims by third parties, + in relation to such use. + + +6 Patents + + 6.1 Subject to the terms and conditions of this Licence, each + Licensor hereby grants to You a perpetual, worldwide, + non-exclusive, no-charge, royalty-free, irrevocable (except as + stated in this section 6, or where terminated by the Licensor + for cause) patent license to Make, have Made, use, offer to + sell, sell, import, and otherwise transfer the Covered Source + and Products, where such licence applies only to those patent + claims licensable by such Licensor that are necessarily + infringed by exercising rights under the Covered Source as + Conveyed by that Licensor. + + 6.2 If You institute patent litigation against any entity (including + a cross-claim or counterclaim in a lawsuit) alleging that the + Covered Source or a Product constitutes direct or contributory + patent infringement, or You seek any declaration that a patent + licensed to You under this Licence is invalid or unenforceable + then any rights granted to You under this Licence shall + terminate as of the date such process is initiated. + + +7 General + + 7.1 If any provisions of this Licence are or subsequently become + invalid or unenforceable for any reason, the remaining + provisions shall remain effective. + + 7.2 You shall not use any of the name (including acronyms and + abbreviations), image, or logo by which the Licensor or CERN is + known, except where needed to comply with section 3, or where + the use is otherwise allowed by law. Any such permitted use + shall be factual and shall not be made so as to suggest any kind + of endorsement or implication of involvement by the Licensor or + its personnel. + + 7.3 CERN may publish updated versions and variants of this Licence + which it considers to be in the spirit of this version, but may + differ in detail to address new problems or concerns. New + versions will be published with a unique version number and a + variant identifier specifying the variant. If the Licensor has + specified that a given variant applies to the Covered Source + without specifying a version, You may treat that Covered Source + as being released under any version of the CERN-OHL with that + variant. If no variant is specified, the Covered Source shall be + treated as being released under CERN-OHL-S. The Licensor may + also specify that the Covered Source is subject to a specific + version of the CERN-OHL or any later version in which case You + may apply this or any later version of CERN-OHL with the same + variant identifier published by CERN. + + 7.4 This Licence shall not be enforceable except by a Licensor + acting as such, and third party beneficiary rights are + specifically excluded. diff --git a/packages/osrl/examples/library/asterix/bazar/output-i18n.html b/packages/osrl/examples/library/asterix/bazar/output-i18n.html new file mode 100644 index 00000000..46e2d093 --- /dev/null +++ b/packages/osrl/examples/library/asterix/bazar/output-i18n.html @@ -0,0 +1,10 @@ +# vars + +- Alle Teile werden mit modernen CNC- und Handmaschinen präzise gefertigt +- Sanftes und präzises Eintauchen +- Der Stößel hat eine austauschbare Bronzespitze +- 2 Formschnittstellen: Konus für Presse und M20-Gewindeschnittstelle +- Hitzeschild und Isolierung + + +#end \ No newline at end of file diff --git a/packages/osrl/examples/library/asterix/bazar/output.html b/packages/osrl/examples/library/asterix/bazar/output.html new file mode 100644 index 00000000..d39e0acc --- /dev/null +++ b/packages/osrl/examples/library/asterix/bazar/output.html @@ -0,0 +1,89 @@ +
+

title: Tests - Basics + nav: kb + menu: + kb: + parent: tests + weight: 20 + toc: true + nb: 3

+

fCat: 54

+

vars

+
    +
  • +

    sCat : [sCat]

    +
  • +
  • +

    DST_DIR: ./examples/library/asterix/bazar

    +
  • +
  • +

    fCat : 54

    +
  • +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StandardXMAX
Weight40 Kg70 Kg
Package Dimensions110 x 20 x 55 cm60 x 20 x 140 cm
Plunger Diameter25 mm30 mm
Usable Barrel Length35cm52 cm
Supported Voltage220V / 110V220V / 110V
Input Flake SizeSmall - MediumSmall - Medium
Plastic Shot Size180 Gramm / 170ml300 Gramm / 255ml
Transmission1:1 * 50cm lever (3 solid sticks)1:2 * 80cm lever (4 solid sticks)
Mold InterfaceM20 thread / Cone NozzleM22 thread / Cone Nozzle
Heatbands4 (250W) / Ceramic6 (250W) / Brass
Temperature Controller1 – Inkbird2 – Inkbird
+

product features . md

\ No newline at end of file diff --git a/packages/osrl/examples/library/asterix/config.json b/packages/osrl/examples/library/asterix/config.json new file mode 100644 index 00000000..5d78fc64 --- /dev/null +++ b/packages/osrl/examples/library/asterix/config.json @@ -0,0 +1,41 @@ +{ + "slug": "asterix-sm-morren", + "name": "Asterix - JW-Machines", + "category": "shredder", + "status": "rev-1", + "code": "ASM", + "version": "1.1", + "product_parts": "${abs_url}/${product_rel}/drawings/parts.jpg", + "product_dimensions": "${abs_url}/${product_rel}/drawings/dimensions.jpg", + "product_perspective": "${abs_url}/${product_rel}/renderings/perspective.jpg", + "download": "http://files.osr-plastic.org/files/machines/shredder/${slug}/", + "firmware": "http://files.osr-plastic.org/firmware/http://files.osr-plastic.org/files/firmware/asterix_max/", + "showParts":false, + "forumCategory":false, + "cscartId":2, + "authors": [ + { + "name": "PlasticHub S.L.", + "url": "${author_link}" + }, + { + "name": "Jason Knight", + "url": "https://www.mandin.earth/" + }, + { + "name": "Jeffrey Wiecherink", + "url": "https://jw-machines.com" + } + ], + "osr": { + "version": "0.3" + }, + "production": { + "cam": [ + { + "name": "Base-Plate", + "url": "https://a360.co/3F1eDdS" + } + ] + } +} \ No newline at end of file diff --git a/packages/osrl/examples/library/asterix/config.yaml b/packages/osrl/examples/library/asterix/config.yaml new file mode 100644 index 00000000..215836e4 --- /dev/null +++ b/packages/osrl/examples/library/asterix/config.yaml @@ -0,0 +1,9 @@ +product_id: asterix-jw +preview: ${product_preview} +_buy: "mailto:sales@plastic-hub.com?subject=Inquiry%20-%20${slug}" +teaser: "OSR - Mini - Shredder - ''" +products: false +overview_drawing: true +featuresText: true + + diff --git a/packages/osrl/examples/library/asterix/header_notice.osr b/packages/osrl/examples/library/asterix/header_notice.osr new file mode 100644 index 00000000..e69de29b diff --git a/packages/osrl/examples/library/asterix/parts.xlsx b/packages/osrl/examples/library/asterix/parts.xlsx new file mode 100644 index 00000000..4947ffee Binary files /dev/null and b/packages/osrl/examples/library/asterix/parts.xlsx differ diff --git a/packages/osrl/examples/library/asterix/readme.md b/packages/osrl/examples/library/asterix/readme.md new file mode 100644 index 00000000..7535d3bd --- /dev/null +++ b/packages/osrl/examples/library/asterix/readme.md @@ -0,0 +1,23 @@ +# Precious Plastic Shredder - version 3.5 + +Modified PreciousPlastic shredder for vending usage + +### Shredder modifications: + +- stronger housing +- 32mm hexbar +- 30mm shaft +- UCFL206 Bearings + +### Features + +- Auto-Plunger +- Auto-Reverse +- Safety door +- Optional : auto-Stop/Shred (uses optical sensor) + + +### CAD Todos + +- [ ] Integrate M32 locknuts +- [ ] Add M32 thread(s) on axle diff --git a/packages/osrl/examples/library/asterix/renderings/perspective.jpg b/packages/osrl/examples/library/asterix/renderings/perspective.jpg new file mode 100644 index 00000000..23e27f2e Binary files /dev/null and b/packages/osrl/examples/library/asterix/renderings/perspective.jpg differ diff --git a/packages/osrl/examples/library/asterix/resources/GlobalAssembly.html b/packages/osrl/examples/library/asterix/resources/GlobalAssembly.html new file mode 100644 index 00000000..00f97958 --- /dev/null +++ b/packages/osrl/examples/library/asterix/resources/GlobalAssembly.html @@ -0,0 +1,8109 @@ + + + + + + + + + + +
+
+
+
+ +
+
+ + eDrawings + +
+
+
+
+
+
+
+
+
+ +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ +
+
+
+
+
+
+ +
+
+ +
+
+ +
+
+ + + +
+ +
+
+
+
+
+ +
+
+
+
+
+
+
+
+
+
+ +
+
+ +
+
+ +
+
+
+
Components
+
+
+
+ +
+
+
+
+
+
+ +
+
+ +
+
+
+
Sheets
+
+
+
+
+
+
+
+
+
+
+ +
+
+
+
Layers
+
+
+
+
+
+
+
+
+
+
+
+ +
+
+ +
+
+ +
+ + + + + + + + + +
+
+
+
+
+
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ +
+
+
+
+
+
+
+
+
+
+
+ +
+
+
+
+
+
+
+
+
+
+
+ + +
    + +
    +
    +
    +
    + +
    +
    +
    + +
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    + +
    +
    + +
    +
    + +
    + + + + +
    +

    Connection timed-out. Reload the page to continue.

    +
    +
    + + + diff --git a/packages/osrl/examples/library/asterix/resources/GlobalAssembly.xlsx b/packages/osrl/examples/library/asterix/resources/GlobalAssembly.xlsx new file mode 100644 index 00000000..31cd0618 Binary files /dev/null and b/packages/osrl/examples/library/asterix/resources/GlobalAssembly.xlsx differ diff --git a/packages/osrl/examples/library/asterix/resources/motor.jpg b/packages/osrl/examples/library/asterix/resources/motor.jpg new file mode 100644 index 00000000..942ae5a6 Binary files /dev/null and b/packages/osrl/examples/library/asterix/resources/motor.jpg differ diff --git a/packages/osrl/examples/library/asterix/specs.xlsx b/packages/osrl/examples/library/asterix/specs.xlsx new file mode 100644 index 00000000..e99fc5d4 Binary files /dev/null and b/packages/osrl/examples/library/asterix/specs.xlsx differ diff --git a/packages/osrl/examples/library/asterix/templates/shared/body.md b/packages/osrl/examples/library/asterix/templates/shared/body.md new file mode 100644 index 00000000..bb10207f --- /dev/null +++ b/packages/osrl/examples/library/asterix/templates/shared/body.md @@ -0,0 +1,9 @@ +High Quality Dual Axis Shredder + +## Features + +- Jam detection / Auto-Reverse +- Rigid, flexible and modular framework – enabling hacking and extensions +- Electronics and wiring according to standards +- Auto-Stop after being idle +- Visual feedback diff --git a/packages/osrl/examples/library/osr/bazar/bazar.css b/packages/osrl/examples/library/osr/bazar/bazar.css new file mode 100644 index 00000000..547355f4 --- /dev/null +++ b/packages/osrl/examples/library/osr/bazar/bazar.css @@ -0,0 +1,20569 @@ +@supports(-webkit-appearance:none) { + + .selector:not(*:root), + .litecheckout .litecheckout__field--selectbox .litecheckout__input { + padding-top: 10px !important; + padding-left: 6px !important + } +} + +.vendor-box { + border: 1px solid #ddd; + padding: 10px 20px 20px +} + +.vendor-box .ty-sidebox__title-wrapper { + color: #333 +} + +.vendor-box h2 { + margin: 0 +} + +.vendor-box .logo-container { + margin: 10px 0 +} + +.vendor-box a.store-lnk { + font-weight: 700 +} + +.vendor-box .ty-discussion__rating-wrapper { + display: block; + margin-bottom: 10px; + margin-top: 10px; + margin-left: -2px +} + +.ty-product-detail .ty-product-block__left { + padding-right: 0 !important +} + +@media(max-width:979px) { + + .product-content .row-fluid .main-content-grid, + .product-content .row-fluid .side-grid { + width: 100%; + margin-left: 0 + } +} + + +.clearfix:before, +.clearfix:after { + display: table; + content: ""; + line-height: 0; + width: 100% +} + +.clearfix:after { + clear: both +} + +.input-block-level { + display: block; + width: 100%; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box +} + +.product-title-color { + color: #a0acbc +} + +article, +aside, +details, +figcaption, +figure, +footer, +header, +hgroup, +main, +nav, +section, +summary { + display: block +} + +audio, +canvas, +video { + display: inline-block +} + +audio:not([controls]) { + display: none; + height: 0 +} + +[hidden], +template { + display: none +} + +html { + font-family: sans-serif; + -ms-text-size-adjust: 100%; + -webkit-text-size-adjust: 100% +} + +body { + margin: 0 +} + +a { + background: 0 0 +} + +a:focus { + outline: thin dotted +} + +a:active, +a:hover { + outline: 0 +} + +h1 { + font-size: 2em; + margin: .67em 0 +} + +abbr[title] { + border-bottom: 1px dotted +} + +b, +strong { + font-weight: 700 +} + +i, +em, +dfn { + font-style: italic +} + +hr { + -moz-box-sizing: content-box; + box-sizing: content-box; + height: 0 +} + +mark { + background: #ff0; + color: #000 +} + +code, +kbd, +pre, +samp { + font-family: monospace, serif; + font-size: 1em +} + +pre { + white-space: pre-wrap +} + +q { + quotes: "\201C""\201D""\2018""\2019" +} + +small { + font-size: 80% +} + +sub, +sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline +} + +sup { + top: -.5em +} + +sub { + bottom: -.25em +} + +img { + border: 0 +} + +svg:not(:root) { + overflow: hidden +} + +figure { + margin: 0 +} + +fieldset { + border: 1px solid silver; + margin: 0 2px; + padding: .35em .625em .75em +} + +legend { + border: 0; + padding: 0 +} + +button, +input, +select, +textarea { + font-family: inherit; + font-size: 100%; + margin: 0 +} + +button, +input { + line-height: normal +} + +button, +select { + text-transform: none +} + +button, +html input[type=button], +input[type=reset], +input[type=submit] { + -webkit-appearance: button; + cursor: pointer +} + +button[disabled], +html input[disabled] { + cursor: default +} + +input[type=checkbox], +input[type=radio] { + box-sizing: border-box; + padding: 0 +} + +input[type=search] { + -webkit-appearance: textfield; + -moz-box-sizing: content-box; + -webkit-box-sizing: content-box; + box-sizing: content-box +} + +input[type=search]::-webkit-search-cancel-button, +input[type=search]::-webkit-search-decoration { + -webkit-appearance: none +} + +button::-moz-focus-inner, +input::-moz-focus-inner { + border: 0; + padding: 0 +} + +textarea { + overflow: auto; + vertical-align: top +} + +table { + border-collapse: collapse; + border-spacing: 0 +} + +.ui-helper-hidden { + display: none +} + +.ui-helper-hidden-accessible { + border: 0; + clip: rect(0 0 0 0); + height: 1px; + margin: -1px; + overflow: hidden; + padding: 0; + position: absolute; + width: 1px +} + +.ui-helper-clearfix:before, +.ui-helper-clearfix:after { + content: ""; + display: table; + border-collapse: collapse +} + +.ui-helper-clearfix:after { + clear: both +} + +.ui-helper-clearfix { + min-height: 0 +} + +.ui-helper-zfix { + width: 100%; + height: 100%; + top: 0; + left: 0; + position: absolute; + opacity: 0; + filter: Alpha(Opacity=0) +} + +.ui-front { + z-index: 100 +} + +.ui-state-disabled { + cursor: default !important +} + +.ui-icon { + display: block; + text-indent: -99999px; + overflow: hidden; + background-repeat: no-repeat +} + +.ui-widget-overlay { + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100% +} + +.ui-resizable { + position: relative +} + +.ui-resizable-handle { + position: absolute; + font-size: .1px; + display: block +} + +.ui-resizable-disabled .ui-resizable-handle, +.ui-resizable-autohide .ui-resizable-handle { + display: none +} + +.ui-resizable-n { + cursor: n-resize; + height: 7px; + width: 100%; + top: -5px; + left: 0 +} + +.ui-resizable-s { + cursor: s-resize; + height: 7px; + width: 100%; + bottom: -5px; + left: 0 +} + +.ui-resizable-e { + cursor: e-resize; + width: 7px; + right: -5px; + top: 0; + height: 100% +} + +.ui-resizable-w { + cursor: w-resize; + width: 7px; + left: -5px; + top: 0; + height: 100% +} + +.ui-resizable-se { + cursor: se-resize; + width: 12px; + height: 12px; + right: 1px; + bottom: 1px +} + +.ui-resizable-sw { + cursor: sw-resize; + width: 9px; + height: 9px; + left: -5px; + bottom: -5px +} + +.ui-resizable-nw { + cursor: nw-resize; + width: 9px; + height: 9px; + left: -5px; + top: -5px +} + +.ui-resizable-ne { + cursor: ne-resize; + width: 9px; + height: 9px; + right: -5px; + top: -5px +} + +.ui-selectable-helper { + position: absolute; + z-index: 100; + border: 1px dotted #000 +} + +.ui-autocomplete { + position: absolute; + top: 0; + left: 0; + cursor: default +} + +.ui-button { + display: inline-block; + position: relative; + padding: 0; + line-height: normal; + margin-right: .1em; + cursor: pointer; + vertical-align: middle; + text-align: center; + overflow: visible +} + +.ui-button, +.ui-button:link, +.ui-button:visited, +.ui-button:hover, +.ui-button:active { + text-decoration: none +} + +.ui-button-icon-only { + width: 2.2em +} + +button.ui-button-icon-only { + width: 2.4em +} + +.ui-button-icons-only { + width: 3.4em +} + +button.ui-button-icons-only { + width: 3.7em +} + +.ui-button .ui-button-text { + display: block; + line-height: normal +} + +.ui-button-text-only .ui-button-text { + padding: .4em 1em +} + +.ui-button-icon-only .ui-button-text, +.ui-button-icons-only .ui-button-text { + padding: .4em; + text-indent: -9999999px +} + +.ui-button-text-icon-primary .ui-button-text, +.ui-button-text-icons .ui-button-text { + padding: .4em 1em .4em 2.1em +} + +.ui-button-text-icon-secondary .ui-button-text, +.ui-button-text-icons .ui-button-text { + padding: .4em 2.1em .4em 1em +} + +.ui-button-text-icons .ui-button-text { + padding-left: 2.1em; + padding-right: 2.1em +} + +input.ui-button { + padding: .4em 1em +} + +.ui-button-icon-only .ui-icon, +.ui-button-text-icon-primary .ui-icon, +.ui-button-text-icon-secondary .ui-icon, +.ui-button-text-icons .ui-icon, +.ui-button-icons-only .ui-icon { + position: absolute; + top: 50%; + margin-top: -8px +} + +.ui-button-icon-only .ui-icon { + left: 50%; + margin-left: -8px +} + +.ui-button-text-icon-primary .ui-button-icon-primary, +.ui-button-text-icons .ui-button-icon-primary, +.ui-button-icons-only .ui-button-icon-primary { + left: .5em +} + +.ui-button-text-icon-secondary .ui-button-icon-secondary, +.ui-button-text-icons .ui-button-icon-secondary, +.ui-button-icons-only .ui-button-icon-secondary { + right: .5em +} + +.ui-buttonset { + margin-right: 7px +} + +.ui-buttonset .ui-button { + margin-left: 0; + margin-right: -.3em +} + +input.ui-button::-moz-focus-inner, +button.ui-button::-moz-focus-inner { + border: 0; + padding: 0 +} + +.ui-datepicker { + width: 17em; + padding: .2em .2em 0; + display: none +} + +.ui-datepicker .ui-datepicker-header { + position: relative; + padding: .2em 0 +} + +.ui-datepicker .ui-datepicker-prev, +.ui-datepicker .ui-datepicker-next { + position: absolute; + top: 2px; + width: 1.8em; + height: 1.8em +} + +.ui-datepicker .ui-datepicker-prev-hover, +.ui-datepicker .ui-datepicker-next-hover { + top: 1px +} + +.ui-datepicker .ui-datepicker-prev { + left: 2px +} + +.ui-datepicker .ui-datepicker-next { + right: 2px +} + +.ui-datepicker .ui-datepicker-prev-hover { + left: 1px +} + +.ui-datepicker .ui-datepicker-next-hover { + right: 1px +} + +.ui-datepicker .ui-datepicker-prev span, +.ui-datepicker .ui-datepicker-next span { + display: block; + position: absolute; + left: 50%; + margin-left: -8px; + top: 50%; + margin-top: -8px +} + +.ui-datepicker .ui-datepicker-title { + margin: 0 2.3em; + line-height: 1.8em; + text-align: center +} + +.ui-datepicker .ui-datepicker-title select { + font-size: 1em; + margin: 1px 0 +} + +.ui-datepicker select.ui-datepicker-month-year { + width: 100% +} + +.ui-datepicker select.ui-datepicker-month, +.ui-datepicker select.ui-datepicker-year { + width: 49% +} + +.ui-datepicker table { + width: 100%; + font-size: .9em; + border-collapse: collapse; + margin: 0 0 .4em +} + +.ui-datepicker th { + padding: .7em .3em; + text-align: center; + font-weight: 700; + border: 0 +} + +.ui-datepicker td { + border: 0; + padding: 1px +} + +.ui-datepicker td span, +.ui-datepicker td a { + display: block; + padding: .2em; + text-align: right; + text-decoration: none +} + +.ui-datepicker .ui-datepicker-buttonpane { + background-image: none; + margin: .7em 0 0; + padding: 0 .2em; + border-left: 0; + border-right: 0; + border-bottom: 0 +} + +.ui-datepicker .ui-datepicker-buttonpane button { + float: right; + margin: .5em .2em .4em; + cursor: pointer; + padding: .2em .6em .3em; + width: auto; + overflow: visible +} + +.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { + float: left +} + +.ui-datepicker.ui-datepicker-multi { + width: auto +} + +.ui-datepicker-multi .ui-datepicker-group { + float: left +} + +.ui-datepicker-multi .ui-datepicker-group table { + width: 95%; + margin: 0 auto .4em +} + +.ui-datepicker-multi-2 .ui-datepicker-group { + width: 50% +} + +.ui-datepicker-multi-3 .ui-datepicker-group { + width: 33.3% +} + +.ui-datepicker-multi-4 .ui-datepicker-group { + width: 25% +} + +.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header, +.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { + border-left-width: 0 +} + +.ui-datepicker-multi .ui-datepicker-buttonpane { + clear: left +} + +.ui-datepicker-row-break { + clear: both; + width: 100%; + font-size: 0 +} + +.ui-datepicker-rtl { + direction: rtl +} + +.ui-datepicker-rtl .ui-datepicker-prev { + right: 2px; + left: auto +} + +.ui-datepicker-rtl .ui-datepicker-next { + left: 2px; + right: auto +} + +.ui-datepicker-rtl .ui-datepicker-prev:hover { + right: 1px; + left: auto +} + +.ui-datepicker-rtl .ui-datepicker-next:hover { + left: 1px; + right: auto +} + +.ui-datepicker-rtl .ui-datepicker-buttonpane { + clear: right +} + +.ui-datepicker-rtl .ui-datepicker-buttonpane button { + float: left +} + +.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current, +.ui-datepicker-rtl .ui-datepicker-group { + float: right +} + +.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header, +.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { + border-right-width: 0; + border-left-width: 1px +} + +.ui-dialog { + position: absolute; + top: 0; + left: 0; + padding: .2em; + outline: 0 +} + +.ui-dialog .ui-dialog-titlebar { + padding: .4em 1em; + position: relative +} + +.ui-dialog .ui-dialog-title { + float: left; + margin: .1em 0; + white-space: nowrap; + width: 90%; + overflow: hidden; + text-overflow: ellipsis +} + +.ui-dialog .ui-dialog-titlebar-close { + position: absolute; + right: .3em; + top: 50%; + width: 21px; + margin: -10px 0 0; + padding: 1px; + height: 20px +} + +.ui-dialog .ui-dialog-content { + position: relative; + border: 0; + padding: .5em 1em; + background: 0 0; + overflow: auto +} + +.ui-dialog .ui-dialog-buttonpane { + text-align: left; + border-width: 1px 0 0; + background-image: none; + margin-top: .5em; + padding: .3em 1em .5em .4em +} + +.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset { + float: right +} + +.ui-dialog .ui-dialog-buttonpane button { + margin: .5em .4em .5em 0; + cursor: pointer +} + +.ui-dialog .ui-resizable-se { + width: 12px; + height: 12px; + right: -5px; + bottom: -5px; + background-position: 16px 16px +} + +.ui-draggable .ui-dialog-titlebar { + cursor: move +} + +.ui-menu { + list-style: none; + padding: 2px; + margin: 0; + display: block; + outline: none +} + +.ui-menu .ui-menu { + margin-top: -3px; + position: absolute +} + +.ui-menu .ui-menu-item { + margin: 0; + padding: 0; + width: 100% +} + +.ui-menu .ui-menu-divider { + margin: 5px -2px; + height: 0; + font-size: 0; + line-height: 0; + border-width: 1px 0 0 +} + +.ui-menu .ui-menu-item a { + text-decoration: none; + display: block; + padding: 2px .4em; + line-height: 1.5; + min-height: 0; + font-weight: 400 +} + +.ui-menu .ui-menu-item a.ui-state-focus, +.ui-menu .ui-menu-item a.ui-state-active { + font-weight: 400; + margin: -1px +} + +.ui-menu .ui-state-disabled { + font-weight: 400; + margin: .4em 0 .2em; + line-height: 1.5 +} + +.ui-menu .ui-state-disabled a { + cursor: default +} + +.ui-menu-icons { + position: relative +} + +.ui-menu-icons .ui-menu-item a { + position: relative; + padding-left: 2em +} + +.ui-menu .ui-icon { + position: absolute; + top: .2em; + left: .2em +} + +.ui-menu .ui-menu-icon { + position: static; + float: right +} + +.ui-slider { + position: relative; + text-align: left +} + +.ui-slider .ui-slider-handle { + position: absolute; + z-index: 2; + width: 1.2em; + height: 1.2em; + cursor: default +} + +.ui-slider .ui-slider-range { + position: absolute; + z-index: 1; + font-size: .7em; + display: block; + border: 0; + background-position: 0 0 +} + +.ui-slider.ui-state-disabled .ui-slider-handle, +.ui-slider.ui-state-disabled .ui-slider-range { + filter: inherit +} + +.ui-slider-horizontal { + height: .8em +} + +.ui-slider-horizontal .ui-slider-handle { + top: -.3em; + margin-left: -.6em +} + +.ui-slider-horizontal .ui-slider-range { + top: 0; + height: 100% +} + +.ui-slider-horizontal .ui-slider-range-min { + left: 0 +} + +.ui-slider-horizontal .ui-slider-range-max { + right: 0 +} + +.ui-slider-vertical { + width: .8em; + height: 100px +} + +.ui-slider-vertical .ui-slider-handle { + left: -.3em; + margin-left: 0; + margin-bottom: -.6em +} + +.ui-slider-vertical .ui-slider-range { + left: 0; + width: 100% +} + +.ui-slider-vertical .ui-slider-range-min { + bottom: 0 +} + +.ui-slider-vertical .ui-slider-range-max { + top: 0 +} + +.ui-spinner { + position: relative; + display: inline-block; + overflow: hidden; + padding: 0; + vertical-align: middle +} + +.ui-spinner-input { + border: none; + background: 0 0; + color: inherit; + padding: 0; + margin: .2em 0; + vertical-align: middle; + margin-left: .4em; + margin-right: 22px +} + +.ui-spinner-button { + width: 16px; + height: 50%; + font-size: .5em; + padding: 0; + margin: 0; + text-align: center; + position: absolute; + cursor: default; + display: block; + overflow: hidden; + right: 0 +} + +.ui-spinner a.ui-spinner-button { + border-top: none; + border-bottom: none; + border-right: none +} + +.ui-spinner .ui-icon { + position: absolute; + margin-top: -8px; + top: 50%; + left: 0 +} + +.ui-spinner-up { + top: 0 +} + +.ui-spinner-down { + bottom: 0 +} + +.ui-spinner .ui-icon-triangle-1-s { + background-position: -65px -16px +} + +.ui-tabs { + position: relative; + padding: .2em +} + +.ui-tabs .ui-tabs-nav { + margin: 0; + padding: .2em .2em 0 +} + +.ui-tabs .ui-tabs-nav li { + list-style: none; + float: left; + position: relative; + top: 0; + margin: 1px .2em 0 0; + border-bottom: 0; + padding: 0; + white-space: nowrap +} + +.ui-tabs .ui-tabs-nav li a { + float: left; + padding: .5em 1em; + text-decoration: none +} + +.ui-tabs .ui-tabs-nav li.ui-tabs-active { + margin-bottom: -1px; + padding-bottom: 1px +} + +.ui-tabs .ui-tabs-nav li.ui-tabs-active a, +.ui-tabs .ui-tabs-nav li.ui-state-disabled a, +.ui-tabs .ui-tabs-nav li.ui-tabs-loading a { + cursor: text +} + +.ui-tabs .ui-tabs-nav li a, +.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active a { + cursor: pointer +} + +.ui-tabs .ui-tabs-panel { + display: block; + border-width: 0; + padding: 1em 1.4em; + background: 0 0 +} + +.ui-tooltip { + padding: 8px; + position: absolute; + z-index: 9999; + max-width: 300px; + -webkit-box-shadow: 0 0 5px #aaa; + box-shadow: 0 0 5px #aaa +} + +body .ui-tooltip { + border-width: 2px +} + +.ui-widget .ui-widget { + font-size: 1em +} + +.ui-widget input, +.ui-widget select, +.ui-widget textarea, +.ui-widget button { + font-family: Verdana, Arial, sans-serif; + font-size: 1em +} + +.ui-widget-content { + border: 1px solid #aaa; + background: #fff url(../../../../../../../../design/themes/responsive/media/images/lib/ui/ui-bg_flat_75_ffffff_40x100.png?1626074086) 50% 50% repeat-x; + color: #222 +} + +.ui-widget-content>a { + color: #222 +} + +.ui-widget-header { + border: 1px solid #aaa; + background: #ccc url(../../../../../../../../design/themes/responsive/media/images/lib/ui/ui-bg_highlight-soft_75_cccccc_1x100.png?1626074086) 50% 50% repeat-x; + color: #222; + font-weight: 700 +} + +.ui-widget-header a { + color: #222 +} + +.ui-state-default, +.ui-widget-content .ui-state-default, +.ui-widget-header .ui-state-default { + border: 1px solid #d3d3d3; + background: #e6e6e6 url(../../../../../../../../design/themes/responsive/media/images/lib/ui/ui-bg_glass_75_e6e6e6_1x400.png?1626074086) 50% 50% repeat-x; + font-weight: 400; + color: #555 +} + +.ui-state-default a, +.ui-state-default a:link, +.ui-state-default a:visited { + color: #555; + text-decoration: none +} + +.ui-state-hover, +.ui-widget-content .ui-state-hover, +.ui-widget-header .ui-state-hover, +.ui-state-focus, +.ui-widget-content .ui-state-focus, +.ui-widget-header .ui-state-focus { + border: 1px solid #999; + background: #dadada url(../../../../../../../../design/themes/responsive/media/images/lib/ui/ui-bg_glass_75_dadada_1x400.png?1626074086) 50% 50% repeat-x; + font-weight: 400; + color: #212121 +} + +.ui-state-hover a, +.ui-state-hover a:hover, +.ui-state-hover a:link, +.ui-state-hover a:visited { + color: #212121; + text-decoration: none +} + +.ui-state-active, +.ui-widget-content .ui-state-active, +.ui-widget-header .ui-state-active { + border: 1px solid #aaa; + background: #fff url(../../../../../../../../design/themes/responsive/media/images/lib/ui/ui-bg_glass_65_ffffff_1x400.png?1626074086) 50% 50% repeat-x; + font-weight: 400; + color: #212121 +} + +.ui-state-active a, +.ui-state-active a:link, +.ui-state-active a:visited { + color: #212121; + text-decoration: none +} + +.ui-state-highlight, +.ui-widget-content .ui-state-highlight, +.ui-widget-header .ui-state-highlight { + border: 1px solid #fcefa1; + background: #fbf9ee url(../../../../../../../../design/themes/responsive/media/images/lib/ui/ui-bg_glass_55_fbf9ee_1x400.png?1626074086) 50% 50% repeat-x; + color: #363636 +} + +.ui-state-highlight a, +.ui-widget-content .ui-state-highlight a, +.ui-widget-header .ui-state-highlight a { + color: #363636 +} + +.ui-state-error, +.ui-widget-content .ui-state-error, +.ui-widget-header .ui-state-error { + border: 1px solid #cd0a0a; + background: #fef1ec url(../../../../../../../../design/themes/responsive/media/images/lib/ui/ui-bg_glass_95_fef1ec_1x400.png?1626074086) 50% 50% repeat-x; + color: #cd0a0a +} + +.ui-state-error a, +.ui-widget-content .ui-state-error a, +.ui-widget-header .ui-state-error a { + color: #cd0a0a +} + +.ui-state-error-text, +.ui-widget-content .ui-state-error-text, +.ui-widget-header .ui-state-error-text { + color: #cd0a0a +} + +.ui-priority-primary, +.ui-widget-content .ui-priority-primary, +.ui-widget-header .ui-priority-primary { + font-weight: 700 +} + +.ui-priority-secondary, +.ui-widget-content .ui-priority-secondary, +.ui-widget-header .ui-priority-secondary { + opacity: .7; + filter: Alpha(Opacity=70); + font-weight: 400 +} + +.ui-state-disabled, +.ui-widget-content .ui-state-disabled, +.ui-widget-header .ui-state-disabled { + opacity: .35; + filter: Alpha(Opacity=35); + background-image: none +} + +.ui-state-disabled .ui-icon { + filter: Alpha(Opacity=35) +} + +.ui-icon { + width: 16px; + height: 16px; + background-position: 16px 16px +} + +.ui-icon, +.ui-widget-content .ui-icon { + background-image: url(../../../../../../../../design/themes/responsive/media/images/lib/ui/ui-icons_222222_256x240.png?1626074086) +} + +.ui-widget-header .ui-icon { + background-image: url(../../../../../../../../design/themes/responsive/media/images/lib/ui/ui-icons_222222_256x240.png?1626074086) +} + +.ui-state-default .ui-icon { + background-image: url(../../../../../../../../design/themes/responsive/media/images/lib/ui/ui-icons_888888_256x240.png?1626074086) +} + +.ui-state-hover .ui-icon, +.ui-state-focus .ui-icon { + background-image: url(../../../../../../../../design/themes/responsive/media/images/lib/ui/ui-icons_454545_256x240.png?1626074086) +} + +.ui-state-active .ui-icon { + background-image: url(../../../../../../../../design/themes/responsive/media/images/lib/ui/ui-icons_454545_256x240.png?1626074086) +} + +.ui-state-highlight .ui-icon { + background-image: url(../../../../../../../../design/themes/responsive/media/images/lib/ui/ui-icons_2e83ff_256x240.png?1626074086) +} + +.ui-state-error .ui-icon, +.ui-state-error-text .ui-icon { + background-image: url(../../../../../../../../design/themes/responsive/media/images/lib/ui/ui-icons_cd0a0a_256x240.png?1626074086) +} + +.ui-icon-carat-1-n { + background-position: 0 0 +} + +.ui-icon-carat-1-ne { + background-position: -16px 0 +} + +.ui-icon-carat-1-e { + background-position: -32px 0 +} + +.ui-icon-carat-1-se { + background-position: -48px 0 +} + +.ui-icon-carat-1-s { + background-position: -64px 0 +} + +.ui-icon-carat-1-sw { + background-position: -80px 0 +} + +.ui-icon-carat-1-w { + background-position: -96px 0 +} + +.ui-icon-carat-1-nw { + background-position: -112px 0 +} + +.ui-icon-carat-2-n-s { + background-position: -128px 0 +} + +.ui-icon-carat-2-e-w { + background-position: -144px 0 +} + +.ui-icon-triangle-1-n { + background-position: 0 -16px +} + +.ui-icon-triangle-1-ne { + background-position: -16px -16px +} + +.ui-icon-triangle-1-e { + background-position: -32px -16px +} + +.ui-icon-triangle-1-se { + background-position: -48px -16px +} + +.ui-icon-triangle-1-s { + background-position: -64px -16px +} + +.ui-icon-triangle-1-sw { + background-position: -80px -16px +} + +.ui-icon-triangle-1-w { + background-position: -96px -16px +} + +.ui-icon-triangle-1-nw { + background-position: -112px -16px +} + +.ui-icon-triangle-2-n-s { + background-position: -128px -16px +} + +.ui-icon-triangle-2-e-w { + background-position: -144px -16px +} + +.ui-icon-arrow-1-n { + background-position: 0 -32px +} + +.ui-icon-arrow-1-ne { + background-position: -16px -32px +} + +.ui-icon-arrow-1-e { + background-position: -32px -32px +} + +.ui-icon-arrow-1-se { + background-position: -48px -32px +} + +.ui-icon-arrow-1-s { + background-position: -64px -32px +} + +.ui-icon-arrow-1-sw { + background-position: -80px -32px +} + +.ui-icon-arrow-1-w { + background-position: -96px -32px +} + +.ui-icon-arrow-1-nw { + background-position: -112px -32px +} + +.ui-icon-arrow-2-n-s { + background-position: -128px -32px +} + +.ui-icon-arrow-2-ne-sw { + background-position: -144px -32px +} + +.ui-icon-arrow-2-e-w { + background-position: -160px -32px +} + +.ui-icon-arrow-2-se-nw { + background-position: -176px -32px +} + +.ui-icon-arrowstop-1-n { + background-position: -192px -32px +} + +.ui-icon-arrowstop-1-e { + background-position: -208px -32px +} + +.ui-icon-arrowstop-1-s { + background-position: -224px -32px +} + +.ui-icon-arrowstop-1-w { + background-position: -240px -32px +} + +.ui-icon-arrowthick-1-n { + background-position: 0 -48px +} + +.ui-icon-arrowthick-1-ne { + background-position: -16px -48px +} + +.ui-icon-arrowthick-1-e { + background-position: -32px -48px +} + +.ui-icon-arrowthick-1-se { + background-position: -48px -48px +} + +.ui-icon-arrowthick-1-s { + background-position: -64px -48px +} + +.ui-icon-arrowthick-1-sw { + background-position: -80px -48px +} + +.ui-icon-arrowthick-1-w { + background-position: -96px -48px +} + +.ui-icon-arrowthick-1-nw { + background-position: -112px -48px +} + +.ui-icon-arrowthick-2-n-s { + background-position: -128px -48px +} + +.ui-icon-arrowthick-2-ne-sw { + background-position: -144px -48px +} + +.ui-icon-arrowthick-2-e-w { + background-position: -160px -48px +} + +.ui-icon-arrowthick-2-se-nw { + background-position: -176px -48px +} + +.ui-icon-arrowthickstop-1-n { + background-position: -192px -48px +} + +.ui-icon-arrowthickstop-1-e { + background-position: -208px -48px +} + +.ui-icon-arrowthickstop-1-s { + background-position: -224px -48px +} + +.ui-icon-arrowthickstop-1-w { + background-position: -240px -48px +} + +.ui-icon-arrowreturnthick-1-w { + background-position: 0 -64px +} + +.ui-icon-arrowreturnthick-1-n { + background-position: -16px -64px +} + +.ui-icon-arrowreturnthick-1-e { + background-position: -32px -64px +} + +.ui-icon-arrowreturnthick-1-s { + background-position: -48px -64px +} + +.ui-icon-arrowreturn-1-w { + background-position: -64px -64px +} + +.ui-icon-arrowreturn-1-n { + background-position: -80px -64px +} + +.ui-icon-arrowreturn-1-e { + background-position: -96px -64px +} + +.ui-icon-arrowreturn-1-s { + background-position: -112px -64px +} + +.ui-icon-arrowrefresh-1-w { + background-position: -128px -64px +} + +.ui-icon-arrowrefresh-1-n { + background-position: -144px -64px +} + +.ui-icon-arrowrefresh-1-e { + background-position: -160px -64px +} + +.ui-icon-arrowrefresh-1-s { + background-position: -176px -64px +} + +.ui-icon-arrow-4 { + background-position: 0 -80px +} + +.ui-icon-arrow-4-diag { + background-position: -16px -80px +} + +.ui-icon-extlink { + background-position: -32px -80px +} + +.ui-icon-newwin { + background-position: -48px -80px +} + +.ui-icon-refresh { + background-position: -64px -80px +} + +.ui-icon-shuffle { + background-position: -80px -80px +} + +.ui-icon-transfer-e-w { + background-position: -96px -80px +} + +.ui-icon-transferthick-e-w { + background-position: -112px -80px +} + +.ui-icon-folder-collapsed { + background-position: 0 -96px +} + +.ui-icon-folder-open { + background-position: -16px -96px +} + +.ui-icon-document { + background-position: -32px -96px +} + +.ui-icon-document-b { + background-position: -48px -96px +} + +.ui-icon-note { + background-position: -64px -96px +} + +.ui-icon-mail-closed { + background-position: -80px -96px +} + +.ui-icon-mail-open { + background-position: -96px -96px +} + +.ui-icon-suitcase { + background-position: -112px -96px +} + +.ui-icon-comment { + background-position: -128px -96px +} + +.ui-icon-person { + background-position: -144px -96px +} + +.ui-icon-print { + background-position: -160px -96px +} + +.ui-icon-trash { + background-position: -176px -96px +} + +.ui-icon-locked { + background-position: -192px -96px +} + +.ui-icon-unlocked { + background-position: -208px -96px +} + +.ui-icon-bookmark { + background-position: -224px -96px +} + +.ui-icon-tag { + background-position: -240px -96px +} + +.ui-icon-home { + background-position: 0 -112px +} + +.ui-icon-flag { + background-position: -16px -112px +} + +.ui-icon-calendar { + background-position: -32px -112px +} + +.ui-icon-cart { + background-position: -48px -112px +} + +.ui-icon-pencil { + background-position: -64px -112px +} + +.ui-icon-clock { + background-position: -80px -112px +} + +.ui-icon-disk { + background-position: -96px -112px +} + +.ui-icon-calculator { + background-position: -112px -112px +} + +.ui-icon-zoomin { + background-position: -128px -112px +} + +.ui-icon-zoomout { + background-position: -144px -112px +} + +.ui-icon-search { + background-position: -160px -112px +} + +.ui-icon-wrench { + background-position: -176px -112px +} + +.ui-icon-gear { + background-position: -192px -112px +} + +.ui-icon-heart { + background-position: -208px -112px +} + +.ui-icon-star { + background-position: -224px -112px +} + +.ui-icon-link { + background-position: -240px -112px +} + +.ui-icon-cancel { + background-position: 0 -128px +} + +.ui-icon-plus { + background-position: -16px -128px +} + +.ui-icon-plusthick { + background-position: -32px -128px +} + +.ui-icon-minus { + background-position: -48px -128px +} + +.ui-icon-minusthick { + background-position: -64px -128px +} + +.ui-icon-close { + background-position: -80px -128px +} + +.ui-icon-closethick { + background-position: -96px -128px +} + +.ui-icon-key { + background-position: -112px -128px +} + +.ui-icon-lightbulb { + background-position: -128px -128px +} + +.ui-icon-scissors { + background-position: -144px -128px +} + +.ui-icon-clipboard { + background-position: -160px -128px +} + +.ui-icon-copy { + background-position: -176px -128px +} + +.ui-icon-contact { + background-position: -192px -128px +} + +.ui-icon-image { + background-position: -208px -128px +} + +.ui-icon-video { + background-position: -224px -128px +} + +.ui-icon-script { + background-position: -240px -128px +} + +.ui-icon-alert { + background-position: 0 -144px +} + +.ui-icon-info { + background-position: -16px -144px +} + +.ui-icon-notice { + background-position: -32px -144px +} + +.ui-icon-help { + background-position: -48px -144px +} + +.ui-icon-check { + background-position: -64px -144px +} + +.ui-icon-bullet { + background-position: -80px -144px +} + +.ui-icon-radio-on { + background-position: -96px -144px +} + +.ui-icon-radio-off { + background-position: -112px -144px +} + +.ui-icon-pin-w { + background-position: -128px -144px +} + +.ui-icon-pin-s { + background-position: -144px -144px +} + +.ui-icon-play { + background-position: 0 -160px +} + +.ui-icon-pause { + background-position: -16px -160px +} + +.ui-icon-seek-next { + background-position: -32px -160px +} + +.ui-icon-seek-prev { + background-position: -48px -160px +} + +.ui-icon-seek-end { + background-position: -64px -160px +} + +.ui-icon-seek-start { + background-position: -80px -160px +} + +.ui-icon-seek-first { + background-position: -80px -160px +} + +.ui-icon-stop { + background-position: -96px -160px +} + +.ui-icon-eject { + background-position: -112px -160px +} + +.ui-icon-volume-off { + background-position: -128px -160px +} + +.ui-icon-volume-on { + background-position: -144px -160px +} + +.ui-icon-power { + background-position: 0 -176px +} + +.ui-icon-signal-diag { + background-position: -16px -176px +} + +.ui-icon-signal { + background-position: -32px -176px +} + +.ui-icon-battery-0 { + background-position: -48px -176px +} + +.ui-icon-battery-1 { + background-position: -64px -176px +} + +.ui-icon-battery-2 { + background-position: -80px -176px +} + +.ui-icon-battery-3 { + background-position: -96px -176px +} + +.ui-icon-circle-plus { + background-position: 0 -192px +} + +.ui-icon-circle-minus { + background-position: -16px -192px +} + +.ui-icon-circle-close { + background-position: -32px -192px +} + +.ui-icon-circle-triangle-e { + background-position: -48px -192px +} + +.ui-icon-circle-triangle-s { + background-position: -64px -192px +} + +.ui-icon-circle-triangle-w { + background-position: -80px -192px +} + +.ui-icon-circle-triangle-n { + background-position: -96px -192px +} + +.ui-icon-circle-arrow-e { + background-position: -112px -192px +} + +.ui-icon-circle-arrow-s { + background-position: -128px -192px +} + +.ui-icon-circle-arrow-w { + background-position: -144px -192px +} + +.ui-icon-circle-arrow-n { + background-position: -160px -192px +} + +.ui-icon-circle-zoomin { + background-position: -176px -192px +} + +.ui-icon-circle-zoomout { + background-position: -192px -192px +} + +.ui-icon-circle-check { + background-position: -208px -192px +} + +.ui-icon-circlesmall-plus { + background-position: 0 -208px +} + +.ui-icon-circlesmall-minus { + background-position: -16px -208px +} + +.ui-icon-circlesmall-close { + background-position: -32px -208px +} + +.ui-icon-squaresmall-plus { + background-position: -48px -208px +} + +.ui-icon-squaresmall-minus { + background-position: -64px -208px +} + +.ui-icon-squaresmall-close { + background-position: -80px -208px +} + +.ui-icon-grip-dotted-vertical { + background-position: 0 -224px +} + +.ui-icon-grip-dotted-horizontal { + background-position: -16px -224px +} + +.ui-icon-grip-solid-vertical { + background-position: -32px -224px +} + +.ui-icon-grip-solid-horizontal { + background-position: -48px -224px +} + +.ui-icon-gripsmall-diagonal-se { + background-position: -64px -224px +} + +.ui-icon-grip-diagonal-se { + background-position: -80px -224px +} + +.ui-corner-all, +.ui-corner-top, +.ui-corner-left, +.ui-corner-tl { + border-top-left-radius: 4px +} + +.ui-corner-all, +.ui-corner-top, +.ui-corner-right, +.ui-corner-tr { + border-top-right-radius: 4px +} + +.ui-corner-all, +.ui-corner-bottom, +.ui-corner-left, +.ui-corner-bl { + border-bottom-left-radius: 4px +} + +.ui-corner-all, +.ui-corner-bottom, +.ui-corner-right, +.ui-corner-br { + border-bottom-right-radius: 4px +} + +.ui-widget-overlay { + background: #aaa url(../../../../../../../../design/themes/responsive/media/images/lib/ui/ui-bg_flat_0_aaaaaa_40x100.png?1626074086) 50% 50% repeat-x; + opacity: .3; + filter: Alpha(Opacity=30) +} + +.ui-widget-shadow { + margin: -8px 0 0 -8px; + padding: 8px; + background: #aaa url(../../../../../../../../design/themes/responsive/media/images/lib/ui/ui-bg_flat_0_aaaaaa_40x100.png?1626074086) 50% 50% repeat-x; + opacity: .3; + filter: Alpha(Opacity=30); + border-radius: 8px +} + +.row { + margin-left: -20px +} + +.row:before, +.row:after { + display: table; + content: ""; + line-height: 0; + width: 100% +} + +.row:after { + clear: both +} + +[class*=span] { + float: left; + min-height: 1px; + margin-left: 20px +} + +.container, +.navbar-static-top .container, +.navbar-fixed-top .container, +.navbar-fixed-bottom .container { + width: 940px +} + +.span16 { + width: 940px +} + +.span15 { + width: 880px +} + +.span14 { + width: 820px +} + +.span13 { + width: 760px +} + +.span12 { + width: 700px +} + +.span11 { + width: 640px +} + +.span10 { + width: 580px +} + +.span9 { + width: 520px +} + +.span8 { + width: 460px +} + +.span7 { + width: 400px +} + +.span6 { + width: 340px +} + +.span5 { + width: 280px +} + +.span4 { + width: 220px +} + +.span3 { + width: 160px +} + +.span2 { + width: 100px +} + +.span1 { + width: 40px +} + +.offset16 { + margin-left: 980px +} + +.offset15 { + margin-left: 920px +} + +.offset14 { + margin-left: 860px +} + +.offset13 { + margin-left: 800px +} + +.offset12 { + margin-left: 740px +} + +.offset11 { + margin-left: 680px +} + +.offset10 { + margin-left: 620px +} + +.offset9 { + margin-left: 560px +} + +.offset8 { + margin-left: 500px +} + +.offset7 { + margin-left: 440px +} + +.offset6 { + margin-left: 380px +} + +.offset5 { + margin-left: 320px +} + +.offset4 { + margin-left: 260px +} + +.offset3 { + margin-left: 200px +} + +.offset2 { + margin-left: 140px +} + +.offset1 { + margin-left: 80px +} + +.row-fluid { + width: 100% +} + +.row-fluid:before, +.row-fluid:after { + display: table; + content: ""; + line-height: 0; + width: 100% +} + +.row-fluid:after { + clear: both +} + +.row-fluid [class*=span] { + display: block; + width: 100%; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + float: left; + margin-left: 2.1276595744681% +} + +.row-fluid [class*=span]:first-child { + margin-left: 0 +} + +.row-fluid .controls-row [class*=span]+[class*=span] { + margin-left: 2.1276595744681% +} + +.row-fluid .span16 { + width: 100% +} + +.row-fluid .span15 { + width: 93.617021276596% +} + +.row-fluid .span14 { + width: 87.234042553191% +} + +.row-fluid .span13 { + width: 80.851063829787% +} + +.row-fluid .span12 { + width: 74.468085106383% +} + +.row-fluid .span11 { + width: 68.085106382979% +} + +.row-fluid .span10 { + width: 61.702127659574% +} + +.row-fluid .span9 { + width: 55.31914893617% +} + +.row-fluid .span8 { + width: 48.936170212766% +} + +.row-fluid .span7 { + width: 42.553191489362% +} + +.row-fluid .span6 { + width: 36.170212765957% +} + +.row-fluid .span5 { + width: 29.787234042553% +} + +.row-fluid .span4 { + width: 23.404255319149% +} + +.row-fluid .span3 { + width: 17.021276595745% +} + +.row-fluid .span2 { + width: 10.63829787234% +} + +.row-fluid .span1 { + width: 4.2553191489362% +} + +.row-fluid .offset16 { + margin-left: 104.25531914894% +} + +.row-fluid .offset16:first-child { + margin-left: 102.12765957447% +} + +.row-fluid .offset15 { + margin-left: 97.872340425532% +} + +.row-fluid .offset15:first-child { + margin-left: 95.744680851064% +} + +.row-fluid .offset14 { + margin-left: 91.489361702128% +} + +.row-fluid .offset14:first-child { + margin-left: 89.36170212766% +} + +.row-fluid .offset13 { + margin-left: 85.106382978723% +} + +.row-fluid .offset13:first-child { + margin-left: 82.978723404255% +} + +.row-fluid .offset12 { + margin-left: 78.723404255319% +} + +.row-fluid .offset12:first-child { + margin-left: 76.595744680851% +} + +.row-fluid .offset11 { + margin-left: 72.340425531915% +} + +.row-fluid .offset11:first-child { + margin-left: 70.212765957447% +} + +.row-fluid .offset10 { + margin-left: 65.957446808511% +} + +.row-fluid .offset10:first-child { + margin-left: 63.829787234043% +} + +.row-fluid .offset9 { + margin-left: 59.574468085106% +} + +.row-fluid .offset9:first-child { + margin-left: 57.446808510638% +} + +.row-fluid .offset8 { + margin-left: 53.191489361702% +} + +.row-fluid .offset8:first-child { + margin-left: 51.063829787234% +} + +.row-fluid .offset7 { + margin-left: 46.808510638298% +} + +.row-fluid .offset7:first-child { + margin-left: 44.68085106383% +} + +.row-fluid .offset6 { + margin-left: 40.425531914894% +} + +.row-fluid .offset6:first-child { + margin-left: 38.297872340426% +} + +.row-fluid .offset5 { + margin-left: 34.042553191489% +} + +.row-fluid .offset5:first-child { + margin-left: 31.914893617021% +} + +.row-fluid .offset4 { + margin-left: 27.659574468085% +} + +.row-fluid .offset4:first-child { + margin-left: 25.531914893617% +} + +.row-fluid .offset3 { + margin-left: 21.276595744681% +} + +.row-fluid .offset3:first-child { + margin-left: 19.148936170213% +} + +.row-fluid .offset2 { + margin-left: 14.893617021277% +} + +.row-fluid .offset2:first-child { + margin-left: 12.765957446809% +} + +.row-fluid .offset1 { + margin-left: 8.5106382978723% +} + +.row-fluid .offset1:first-child { + margin-left: 6.3829787234043% +} + +[class*=span].hide, +.row-fluid [class*=span].hide { + display: none +} + +[class*=span].pull-right, +.row-fluid [class*=span].pull-right { + float: right +} + +.container { + margin-right: auto; + margin-left: auto +} + +.container:before, +.container:after { + display: table; + content: ""; + line-height: 0; + width: 100% +} + +.container:after { + clear: both +} + +.container-fluid { + margin: 0 auto; + padding-right: 20px; + padding-left: 20px +} + +.container-fluid:before, +.container-fluid:after { + display: table; + content: ""; + line-height: 0; + width: 100% +} + +.container-fluid:after { + clear: both +} + +[data-icon]:before { + font-family: glyphs; + content: attr(data-icon); + speak: none; + font-weight: 400; + font-variant: normal; + text-transform: none; + line-height: 1; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale +} + +[class*=ty-icon-]:before { + font-family: inherit +} + +.ty-icon-up-dir, +.ty-icon-right-dir, +.ty-icon-down-dir, +.ty-icon-left-dir, +.ty-icon-star-empty, +.ty-icon-th-list, +.ty-icon-heart, +.ty-icon-flight, +.ty-icon-ok, +.ty-icon-cancel, +.ty-icon-cancel-circle, +.ty-icon-minus-circle, +.ty-icon-right-thin, +.ty-icon-cw, +.ty-icon-left-circle, +.ty-icon-right-circle, +.ty-icon-help-circle, +.ty-icon-back, +.ty-icon-products-multicolumns, +.ty-icon-print, +.ty-icon-chat, +.ty-icon-article-alt, +.ty-icon-docs, +.ty-icon-zoom-in, +.ty-icon-zoom-out, +.ty-icon-down-open, +.ty-icon-left-open, +.ty-icon-right-open, +.ty-icon-up-open, +.ty-icon-down-micro, +.ty-icon-up-micro, +.ty-icon-right-open-thin, +.ty-icon-left-open-thin, +.ty-icon-products-without-options, +.ty-icon-short-list, +.ty-icon-plus-circle, +.ty-icon-user, +.ty-icon-doc-text, +.ty-icon-calendar, +.ty-icon-chart-bar, +.ty-icon-download, +.ty-icon-search, +.ty-icon-lock, +.ty-icon-popup, +.ty-icon-plus, +.ty-icon-folder, +.ty-icon-folder-open, +.ty-icon-mail, +.ty-icon-twitter, +.ty-icon-facebook, +.ty-icon-file, +.ty-icon-trashcan, +.ty-icon-d-arrow, +.ty-icon-bubble, +.ty-icon-upload, +.ty-icon-cog, +.ty-icon-square, +.ty-icon-arrow-up-right, +.ty-icon-arrow-up-left, +.ty-icon-arrow-down-left, +.ty-icon-arrow-down-right, +.ty-icon-arrow-down, +.ty-icon-arrow-up, +.ty-icon-arrow-left, +.ty-icon-arrow-right, +.ty-icon-location-arrow, +.ty-icon-star, +.ty-icon-star-half, +.ty-icon-refresh, +.ty-icon-basket, +.ty-icon-image, +.icon-image, +.ty-icon-edit, +.ty-icon-live-edit, +.ty-icon-gift, +.ty-icon-ban-circle, +.ty-icon-wrench, +.ty-icon-feed, +.ty-icon-eye-open, +.ty-icon-eye-close, +.ty-icon-handler, +.ty-icon-cart, +.ty-icon-target, +.ty-icon-pointer, +.ty-icon-shipping, +.ty-icon-courier, +.ty-icon-instagram { + font-family: glyphs; + speak: none; + font-style: normal; + font-weight: 400; + font-variant: normal; + text-transform: none; + line-height: 1; + -webkit-font-smoothing: antialiased +} + +.ty-icon-up-dir:before { + content: "\e000" +} + +.ty-icon-right-dir:before { + content: "\e001" +} + +.ty-icon-down-dir:before { + content: "\e002" +} + +.ty-icon-left-dir:before { + content: "\e003" +} + +.ty-icon-star-empty:before { + content: "\e004" +} + +.ty-icon-th-list:before { + content: "\e005" +} + +.ty-icon-heart:before { + content: "\e006" +} + +.ty-icon-flight:before { + content: "\e007" +} + +.ty-icon-ok:before { + content: "\e008" +} + +.ty-icon-cancel:before { + content: "\e009" +} + +.ty-icon-cancel-circle:before { + content: "\e00a" +} + +.ty-icon-minus-circle:before { + content: "\e00b" +} + +.ty-icon-right-thin:before { + content: "\e00c" +} + +.ty-icon-cw:before { + content: "\e00d" +} + +.ty-icon-left-circle:before { + content: "\e00e" +} + +.ty-icon-right-circle:before { + content: "\e00f" +} + +.ty-icon-help-circle:before { + content: "\e010" +} + +.ty-icon-back:before { + content: "\e011" +} + +.ty-icon-products-multicolumns:before { + content: "\e012" +} + +.ty-icon-print:before { + content: "\e013" +} + +.ty-icon-chat:before { + content: "\e014" +} + +.ty-icon-article-alt:before { + content: "\e015" +} + +.ty-icon-docs:before { + content: "\e016" +} + +.ty-icon-zoom-in:before { + content: "\e017" +} + +.ty-icon-zoom-out:before { + content: "\e018" +} + +.ty-icon-down-open:before { + content: "\e019" +} + +.ty-icon-left-open:before { + content: "\e01a" +} + +.ty-icon-right-open:before { + content: "\e01b" +} + +.ty-icon-up-open:before { + content: "\e01c" +} + +.ty-icon-down-micro:before { + content: "\e01d" +} + +.ty-icon-up-micro:before { + content: "\e01e" +} + +.ty-icon-right-open-thin:before { + content: "\e01f" +} + +.ty-icon-left-open-thin:before { + content: "\e020" +} + +.ty-icon-products-without-options:before { + content: "\e021" +} + +.ty-icon-short-list:before { + content: "\e022" +} + +.ty-icon-plus-circle:before { + content: "\e023" +} + +.ty-icon-user:before { + content: "\e024" +} + +.ty-icon-doc-text:before { + content: "\e025" +} + +.ty-icon-calendar:before { + content: "\e026" +} + +.ty-icon-chart-bar:before { + content: "\e027" +} + +.ty-icon-download:before { + content: "\e028" +} + +.ty-icon-search:before { + content: "\e029" +} + +.ty-icon-lock:before { + content: "\e02a" +} + +.ty-icon-popup:before { + content: "\e02b" +} + +.ty-icon-plus:before { + content: "\e02c" +} + +.ty-icon-folder:before { + content: "\e02d" +} + +.ty-icon-folder-open:before { + content: "\e02e" +} + +.ty-icon-mail:before { + content: "\e02f" +} + +.ty-icon-twitter:before { + content: "\e600" +} + +.ty-icon-facebook:before { + content: "\e601" +} + +.ty-icon-file:before { + content: "\e032" +} + +.ty-icon-trashcan:before { + content: "\e033" +} + +.ty-icon-d-arrow:before { + content: "\e602" +} + +.ty-icon-bubble:before { + content: "\e035" +} + +.ty-icon-upload:before { + content: "\e036" +} + +.ty-icon-cog:before { + content: "\e037" +} + +.ty-icon-square:before { + content: "\e038" +} + +.ty-icon-arrow-up-right:before { + content: "\e039" +} + +.ty-icon-arrow-up-left:before { + content: "\e03a" +} + +.ty-icon-arrow-down-left:before { + content: "\e03b" +} + +.ty-icon-arrow-down-right:before { + content: "\e03c" +} + +.ty-icon-arrow-down:before { + content: "\e03d" +} + +.ty-icon-arrow-up:before { + content: "\e03e" +} + +.ty-icon-arrow-left:before { + content: "\e03f" +} + +.ty-icon-arrow-right:before { + content: "\e040" +} + +.ty-icon-location-arrow:before { + content: "\e901" +} + +.ty-icon-star:before { + content: "\e041" +} + +.ty-icon-star-half:before { + content: "\e042" +} + +.ty-icon-refresh:before { + content: "\e043" +} + +.ty-icon-basket:before { + content: "\e044" +} + +.ty-icon-image:before { + content: "\e045" +} + +.icon-image:before { + content: "\e045" +} + +.ty-icon-edit:before { + content: "\e046" +} + +.ty-icon-live-edit:before { + content: "\e046" +} + +.ty-icon-gift:before { + content: "\e048" +} + +.ty-icon-ban-circle:before { + content: "\e049" +} + +.ty-icon-wrench:before { + content: "\e04a" +} + +.ty-icon-feed:before { + content: "\e603" +} + +.ty-icon-eye-open:before { + content: "\e604" +} + +.ty-icon-eye-close:before { + content: "\e605" +} + +.ty-icon-handler:before { + content: "\e606" +} + +.ty-icon-cart:before { + content: "\e900" +} + +.ty-icon-target:before { + content: "\e9b3" +} + +.ty-icon-pointer:before { + content: "\e04b" +} + +.ty-icon-shipping:before { + content: "\e04c" +} + +.ty-icon-courier:before { + content: "\e04d" +} + +.ty-icon-instagram:before { + content: "\e04e" +} + + +.ty-rub { + font-family: ALSRubl-Arial, Arial, sans-serif; + font-size: inherit +} + +.ty-flag { + display: inline-block; + vertical-align: top; + width: 16px; + height: 16px; + margin: 0 5px 0 0; + +} + +.ty-flag.ty-flag-ad { + background-position: 0 0 +} + +.ty-flag.ty-flag-ae { + background-position: -50px 0 +} + +.ty-flag.ty-flag-af { + background-position: 0 -50px +} + +.ty-flag.ty-flag-ag { + background-position: -50px -50px +} + +.ty-flag.ty-flag-ai { + background-position: -100px 0 +} + +.ty-flag.ty-flag-al { + background-position: -100px -50px +} + +.ty-flag.ty-flag-am { + background-position: 0 -100px +} + +.ty-flag.ty-flag-an { + background-position: -50px -100px +} + +.ty-flag.ty-flag-ao { + background-position: -100px -100px +} + +.ty-flag.ty-flag-aq { + background-position: -150px 0 +} + +.ty-flag.ty-flag-ar { + background-position: -150px -50px +} + +.ty-flag.ty-flag-as { + background-position: -150px -100px +} + +.ty-flag.ty-flag-at { + background-position: 0 -150px +} + +.ty-flag.ty-flag-au { + background-position: -50px -150px +} + +.ty-flag.ty-flag-aw { + background-position: -100px -150px +} + +.ty-flag.ty-flag-ax { + background-position: -150px -150px +} + +.ty-flag.ty-flag-az { + background-position: -200px 0 +} + +.ty-flag.ty-flag-ba { + background-position: -200px -50px +} + +.ty-flag.ty-flag-bb { + background-position: -200px -100px +} + +.ty-flag.ty-flag-bd { + background-position: -200px -150px +} + +.ty-flag.ty-flag-be { + background-position: 0 -200px +} + +.ty-flag.ty-flag-bf { + background-position: -50px -200px +} + +.ty-flag.ty-flag-bg { + background-position: -100px -200px +} + +.ty-flag.ty-flag-bh { + background-position: -150px -200px +} + +.ty-flag.ty-flag-bi { + background-position: -200px -200px +} + +.ty-flag.ty-flag-bj { + background-position: -250px 0 +} + +.ty-flag.ty-flag-bl { + background-position: -250px -50px +} + +.ty-flag.ty-flag-bm { + background-position: -250px -100px +} + +.ty-flag.ty-flag-bn { + background-position: -250px -150px +} + +.ty-flag.ty-flag-bo { + background-position: -250px -200px +} + +.ty-flag.ty-flag-br { + background-position: 0 -250px +} + +.ty-flag.ty-flag-bs { + background-position: -50px -250px +} + +.ty-flag.ty-flag-bt { + background-position: -100px -250px +} + +.ty-flag.ty-flag-bw { + background-position: -150px -250px +} + +.ty-flag.ty-flag-by { + background-position: -200px -250px +} + +.ty-flag.ty-flag-bz { + background-position: -250px -250px +} + +.ty-flag.ty-flag-ca { + background-position: -300px 0 +} + +.ty-flag.ty-flag-cc { + background-position: -300px -50px +} + +.ty-flag.ty-flag-cd { + background-position: -300px -100px +} + +.ty-flag.ty-flag-cf { + background-position: -300px -150px +} + +.ty-flag.ty-flag-cg { + background-position: -300px -200px +} + +.ty-flag.ty-flag-ch { + background-position: -300px -250px +} + +.ty-flag.ty-flag-ci { + background-position: 0 -300px +} + +.ty-flag.ty-flag-ck { + background-position: -50px -300px +} + +.ty-flag.ty-flag-cl { + background-position: -100px -300px +} + +.ty-flag.ty-flag-cm { + background-position: -150px -300px +} + +.ty-flag.ty-flag-cn { + background-position: -200px -300px +} + +.ty-flag.ty-flag-co { + background-position: -250px -300px +} + +.ty-flag.ty-flag-cr { + background-position: -300px -300px +} + +.ty-flag.ty-flag-cu { + background-position: -350px 0 +} + +.ty-flag.ty-flag-cv { + background-position: -350px -50px +} + +.ty-flag.ty-flag-cx { + background-position: -350px -100px +} + +.ty-flag.ty-flag-cy { + background-position: -350px -150px +} + +.ty-flag.ty-flag-cz { + background-position: -350px -200px +} + +.ty-flag.ty-flag-de { + background-position: -350px -250px +} + +.ty-flag.ty-flag-dj { + background-position: -350px -300px +} + +.ty-flag.ty-flag-dk, +.ty-flag.ty-flag-da { + background-position: 0 -350px +} + +.ty-flag.ty-flag-dm { + background-position: -50px -350px +} + +.ty-flag.ty-flag-do { + background-position: -100px -350px +} + +.ty-flag.ty-flag-dz { + background-position: -150px -350px +} + +.ty-flag.ty-flag-ec { + background-position: -200px -350px +} + +.ty-flag.ty-flag-ee { + background-position: -250px -350px +} + +.ty-flag.ty-flag-eg { + background-position: -300px -350px +} + +.ty-flag.ty-flag-eh { + background-position: -350px -350px +} + +.ty-flag.ty-flag-er { + background-position: -400px 0 +} + +.ty-flag.ty-flag-es { + background-position: -400px -50px +} + +.ty-flag.ty-flag-et { + background-position: -400px -100px +} + +.ty-flag.ty-flag-eu { + background-position: -400px -150px +} + +.ty-flag.ty-flag-fi { + background-position: -400px -200px +} + +.ty-flag.ty-flag-fj { + background-position: -400px -250px +} + +.ty-flag.ty-flag-fk { + background-position: -400px -300px +} + +.ty-flag.ty-flag-fm { + background-position: -400px -350px +} + +.ty-flag.ty-flag-fo { + background-position: 0 -400px +} + +.ty-flag.ty-flag-fr { + background-position: -50px -400px +} + +.ty-flag.ty-flag-ga { + background-position: -100px -400px +} + +.ty-flag.ty-flag-gb, +.ty-flag.ty-flag-en { + background-position: -150px -400px +} + +.ty-flag.ty-flag-gd { + background-position: -200px -400px +} + +.ty-flag.ty-flag-ge { + background-position: -250px -400px +} + +.ty-flag.ty-flag-gg { + background-position: -300px -400px +} + +.ty-flag.ty-flag-gh { + background-position: -350px -400px +} + +.ty-flag.ty-flag-gi { + background-position: -400px -400px +} + +.ty-flag.ty-flag-gl { + background-position: -450px 0 +} + +.ty-flag.ty-flag-gm { + background-position: -450px -50px +} + +.ty-flag.ty-flag-gn { + background-position: -450px -100px +} + +.ty-flag.ty-flag-gq { + background-position: -450px -150px +} + +.ty-flag.ty-flag-gr, +.ty-flag.ty-flag-el { + background-position: -450px -200px +} + +.ty-flag.ty-flag-gs { + background-position: -450px -250px +} + +.ty-flag.ty-flag-gt { + background-position: -450px -300px +} + +.ty-flag.ty-flag-gu { + background-position: -450px -350px +} + +.ty-flag.ty-flag-gw { + background-position: -450px -400px +} + +.ty-flag.ty-flag-gy { + background-position: 0 -450px +} + +.ty-flag.ty-flag-hk { + background-position: -50px -450px +} + +.ty-flag.ty-flag-hn { + background-position: -100px -450px +} + +.ty-flag.ty-flag-hr { + background-position: -150px -450px +} + +.ty-flag.ty-flag-ht { + background-position: -200px -450px +} + +.ty-flag.ty-flag-hu { + background-position: -250px -450px +} + +.ty-flag.ty-flag-id { + background-position: -300px -450px +} + +.ty-flag.ty-flag-ie { + background-position: -350px -450px +} + +.ty-flag.ty-flag-il { + background-position: -400px -450px +} + +.ty-flag.ty-flag-im { + background-position: -450px -450px +} + +.ty-flag.ty-flag-in { + background-position: -500px 0 +} + +.ty-flag.ty-flag-iq { + background-position: -500px -50px +} + +.ty-flag.ty-flag-ir { + background-position: -500px -100px +} + +.ty-flag.ty-flag-is { + background-position: -500px -150px +} + +.ty-flag.ty-flag-it { + background-position: -500px -200px +} + +.ty-flag.ty-flag-je { + background-position: -500px -250px +} + +.ty-flag.ty-flag-jm { + background-position: -500px -300px +} + +.ty-flag.ty-flag-jo { + background-position: -500px -350px +} + +.ty-flag.ty-flag-jp { + background-position: -500px -400px +} + +.ty-flag.ty-flag-ke { + background-position: -500px -450px +} + +.ty-flag.ty-flag-kg { + background-position: 0 -500px +} + +.ty-flag.ty-flag-kh { + background-position: -50px -500px +} + +.ty-flag.ty-flag-ki { + background-position: -100px -500px +} + +.ty-flag.ty-flag-km { + background-position: -150px -500px +} + +.ty-flag.ty-flag-kn { + background-position: -200px -500px +} + +.ty-flag.ty-flag-kp { + background-position: -250px -500px +} + +.ty-flag.ty-flag-kr { + background-position: -300px -500px +} + +.ty-flag.ty-flag-kv { + background-position: -350px -500px +} + +.ty-flag.ty-flag-kw { + background-position: -400px -500px +} + +.ty-flag.ty-flag-ky { + background-position: -450px -500px +} + +.ty-flag.ty-flag-kz { + background-position: -500px -500px +} + +.ty-flag.ty-flag-la { + background-position: -550px 0 +} + +.ty-flag.ty-flag-lb { + background-position: -550px -50px +} + +.ty-flag.ty-flag-lc { + background-position: -550px -100px +} + +.ty-flag.ty-flag-li { + background-position: -550px -150px +} + +.ty-flag.ty-flag-lk { + background-position: -550px -200px +} + +.ty-flag.ty-flag-lr { + background-position: -550px -250px +} + +.ty-flag.ty-flag-ls { + background-position: -550px -300px +} + +.ty-flag.ty-flag-lt { + background-position: -550px -350px +} + +.ty-flag.ty-flag-lu { + background-position: -550px -400px +} + +.ty-flag.ty-flag-lv { + background-position: -550px -450px +} + +.ty-flag.ty-flag-ly { + background-position: -550px -500px +} + +.ty-flag.ty-flag-ma { + background-position: 0 -550px +} + +.ty-flag.ty-flag-mc { + background-position: -50px -550px +} + +.ty-flag.ty-flag-md { + background-position: -100px -550px +} + +.ty-flag.ty-flag-me { + background-position: -150px -550px +} + +.ty-flag.ty-flag-mg { + background-position: -200px -550px +} + +.ty-flag.ty-flag-mh { + background-position: -250px -550px +} + +.ty-flag.ty-flag-mk { + background-position: -300px -550px +} + +.ty-flag.ty-flag-ml { + background-position: -350px -550px +} + +.ty-flag.ty-flag-mm { + background-position: -400px -550px +} + +.ty-flag.ty-flag-mn { + background-position: -450px -550px +} + +.ty-flag.ty-flag-mo { + background-position: -500px -550px +} + +.ty-flag.ty-flag-mp { + background-position: -550px -550px +} + +.ty-flag.ty-flag-mr { + background-position: -600px 0 +} + +.ty-flag.ty-flag-ms { + background-position: -600px -50px +} + +.ty-flag.ty-flag-mt { + background-position: -600px -100px +} + +.ty-flag.ty-flag-mu { + background-position: -600px -150px +} + +.ty-flag.ty-flag-mv { + background-position: -600px -200px +} + +.ty-flag.ty-flag-mw { + background-position: -600px -250px +} + +.ty-flag.ty-flag-mx { + background-position: -600px -300px +} + +.ty-flag.ty-flag-my { + background-position: -600px -350px +} + +.ty-flag.ty-flag-mz { + background-position: -600px -400px +} + +.ty-flag.ty-flag-na { + background-position: -600px -450px +} + +.ty-flag.ty-flag-nc { + background-position: -600px -500px +} + +.ty-flag.ty-flag-ne { + background-position: -600px -550px +} + +.ty-flag.ty-flag-nf { + background-position: 0 -600px +} + +.ty-flag.ty-flag-ng { + background-position: -50px -600px +} + +.ty-flag.ty-flag-ni { + background-position: -100px -600px +} + +.ty-flag.ty-flag-nl { + background-position: -150px -600px +} + +.ty-flag.ty-flag-no { + background-position: -200px -600px +} + +.ty-flag.ty-flag-np { + background-position: -250px -600px +} + +.ty-flag.ty-flag-nr { + background-position: -300px -600px +} + +.ty-flag.ty-flag-nu { + background-position: -350px -600px +} + +.ty-flag.ty-flag-nz { + background-position: -400px -600px +} + +.ty-flag.ty-flag-om { + background-position: -450px -600px +} + +.ty-flag.ty-flag-pa { + background-position: -500px -600px +} + +.ty-flag.ty-flag-pe { + background-position: -550px -600px +} + +.ty-flag.ty-flag-pg { + background-position: -600px -600px +} + +.ty-flag.ty-flag-ph { + background-position: -650px 0 +} + +.ty-flag.ty-flag-pk { + background-position: -650px -50px +} + +.ty-flag.ty-flag-pl { + background-position: -650px -100px +} + +.ty-flag.ty-flag-pn { + background-position: -650px -150px +} + +.ty-flag.ty-flag-pr { + background-position: -650px -200px +} + +.ty-flag.ty-flag-ps { + background-position: -650px -250px +} + +.ty-flag.ty-flag-pt { + background-position: -650px -300px +} + +.ty-flag.ty-flag-pw { + background-position: -650px -350px +} + +.ty-flag.ty-flag-py { + background-position: -650px -400px +} + +.ty-flag.ty-flag-qa { + background-position: -650px -450px +} + +.ty-flag.ty-flag-ro { + background-position: -650px -500px +} + +.ty-flag.ty-flag-rs { + background-position: -650px -550px +} + +.ty-flag.ty-flag-ru { + background-position: -650px -600px +} + +.ty-flag.ty-flag-rw { + background-position: 0 -650px +} + +.ty-flag.ty-flag-sa { + background-position: -50px -650px +} + +.ty-flag.ty-flag-sb { + background-position: -100px -650px +} + +.ty-flag.ty-flag-sc { + background-position: -150px -650px +} + +.ty-flag.ty-flag-sd { + background-position: -200px -650px +} + +.ty-flag.ty-flag-se { + background-position: -250px -650px +} + +.ty-flag.ty-flag-sg { + background-position: -300px -650px +} + +.ty-flag.ty-flag-sh { + background-position: -350px -650px +} + +.ty-flag.ty-flag-si { + background-position: -400px -650px +} + +.ty-flag.ty-flag-sk { + background-position: -450px -650px +} + +.ty-flag.ty-flag-sl { + background-position: -500px -650px +} + +.ty-flag.ty-flag-sm { + background-position: -550px -650px +} + +.ty-flag.ty-flag-sn { + background-position: -600px -650px +} + +.ty-flag.ty-flag-so { + background-position: -650px -650px +} + +.ty-flag.ty-flag-sr { + background-position: -700px 0 +} + +.ty-flag.ty-flag-ss { + background-position: -700px -50px +} + +.ty-flag.ty-flag-st { + background-position: -700px -100px +} + +.ty-flag.ty-flag-sv { + background-position: -700px -150px +} + +.ty-flag.ty-flag-sy { + background-position: -700px -200px +} + +.ty-flag.ty-flag-sz { + background-position: -700px -250px +} + +.ty-flag.ty-flag-tc { + background-position: -700px -300px +} + +.ty-flag.ty-flag-td { + background-position: -700px -350px +} + +.ty-flag.ty-flag-tg { + background-position: -700px -400px +} + +.ty-flag.ty-flag-th { + background-position: -700px -450px +} + +.ty-flag.ty-flag-tj { + background-position: -700px -500px +} + +.ty-flag.ty-flag-tm { + background-position: -700px -550px +} + +.ty-flag.ty-flag-tn { + background-position: -700px -600px +} + +.ty-flag.ty-flag-to { + background-position: -700px -650px +} + +.ty-flag.ty-flag-tp { + background-position: 0 -700px +} + +.ty-flag.ty-flag-tr { + background-position: -50px -700px +} + +.ty-flag.ty-flag-tt { + background-position: -100px -700px +} + +.ty-flag.ty-flag-tv { + background-position: -150px -700px +} + +.ty-flag.ty-flag-tw { + background-position: -200px -700px +} + +.ty-flag.ty-flag-tz { + background-position: -250px -700px +} + +.ty-flag.ty-flag-ua { + background-position: -300px -700px +} + +.ty-flag.ty-flag-ug { + background-position: -350px -700px +} + +.ty-flag.ty-flag-us { + background-position: -400px -700px +} + +.ty-flag.ty-flag-uy { + background-position: -450px -700px +} + +.ty-flag.ty-flag-uz { + background-position: -500px -700px +} + +.ty-flag.ty-flag-va { + background-position: -550px -700px +} + +.ty-flag.ty-flag-vc { + background-position: -600px -700px +} + +.ty-flag.ty-flag-ve { + background-position: -650px -700px +} + +.ty-flag.ty-flag-vg { + background-position: -700px -700px +} + +.ty-flag.ty-flag-vi { + background-position: -750px 0 +} + +.ty-flag.ty-flag-vn { + background-position: -750px -50px +} + +.ty-flag.ty-flag-vu { + background-position: -750px -100px +} + +.ty-flag.ty-flag-ws { + background-position: -750px -150px +} + +.ty-flag.ty-flag-ye { + background-position: -750px -200px +} + +.ty-flag.ty-flag-yt { + background-position: -750px -250px +} + +.ty-flag.ty-flag-za { + background-position: -750px -300px +} + +.ty-flag.ty-flag-zh { + background-position: -200px -300px +} + +.ty-flag.ty-flag-zm { + background-position: -750px -350px +} + +.ty-flag.ty-flag-zw { + background-position: -750px -400px +} + +@media only screen and (-webkit-min-device-pixel-ratio:2), +only screen and (min-device-pixel-ratio:2) { + .ty-flag { + background-image: url(../../../../../../../../design/themes/responsive/media/images/icons/flags@2x.png?1626074086); + background-size: 800px 800px + } +} + +@media print { + body { + background: #fff; + min-width: 0 + } + + #ci_header, + #ci_footer { + display: none + } + + .product-main-info h1.ty-mainbox-title, + .in-stock, + .ty-mainbox-title span { + color: #333 + } + + .ty-footer-menu div, + .ty-payment-icons, + .qty, + .sidebox-wrapper, + .ty-sort-container { + display: none + } + + .central-column, + .container-left .central-column { + margin: 0; + overflow: visible + } + + .ty-helper-container { + width: 700px + } + + .container { + width: auto; + border: 0 + } +} + +.ty-menu__items, +.cm-dialog-opener { + -webkit-touch-callout: none +} + +* { + -webkit-tap-highlight-color: transparent +} + +body { + background: #f8f8f8 +} + +body, +p, +div, +li { + color: #465363; + font-family: varela round, sans-serif; + font-size: 14px; + font-style: normal; + font-weight: 400 +} + +p { + margin: 0; + padding: 6px 0 +} + +a { + font-family: varela round, sans-serif; + font-size: 14px; + font-weight: 400; + font-style: normal; + text-decoration: none; + outline: none; + color: #465363; + cursor: pointer; + border-bottom: 0; + -webkit-transition: all 150ms; + -moz-transition: all 150ms; + -o-transition: all 150ms; + transition: all 150ms +} + +a:hover { + color: #313a45 +} + +ul { + padding: 0; + margin: 0; + list-style: none +} + +ol { + padding: 0 0 0 15px +} + +li { + margin: 0; + padding: 2px 0; + text-indent: 0; + list-style: none +} + +hr { + border: 0; + border-bottom: 1px solid #edf2f5 +} + +img { + max-width: 100%; + height: auto; + vertical-align: middle; + font-size: 0 +} + +h1, +h2, +h3, +h4, +h5, +h6 { + margin: 0 0 15px; + color: #465363 +} + +h1, +h2 { + text-decoration: none; + font-weight: 400; + font-style: normal; + font-size: 24px; + font-family: varela round, sans-serif +} + +.ty-btn { + display: inline-block; + margin-bottom: 0; + padding: 6px 14px; + outline: 0; + border: 1px solid transparent; + background: #bdc3c7; + background-image: none; + color: #fff; + vertical-align: middle; + text-align: center; + line-height: 1.428571429; + cursor: pointer; + font-family: varela round, sans-serif; + font-size: 14px; + font-weight: 400; + font-style: normal; + text-decoration: none; + border-radius: 2px; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + -o-user-select: none; + user-select: none; + -webkit-transition: background 200ms; + -moz-transition: background 200ms; + -o-transition: background 200ms; + transition: background 200ms +} + +.ty-btn+.ty-btn { + margin-left: 10px +} + +.ty-btn i { + position: relative; + top: 2px; + margin-right: 5px +} + +.ty-btn:hover { + color: #fff; + text-decoration: none +} + +.ty-btn__big { + padding: 6px 17px; + text-transform: uppercase +} + +.ty-btn__text, +.ty-btn__text:hover { + padding: 0; + background: 0 0 !important; + color: #465363 +} + +.ty-btn__primary { + background: #f58d8e; + color: #fff +} + +.ty-btn__primary:hover { + background: #f7a9aa; + color: #fff +} + +.ty-btn__primary.ty-btn__text { + color: #f58d8e +} + +.ty-btn__secondary { + background: #46aaf2; + color: #fff +} + +.ty-btn__secondary:hover { + background: #76c0f5; + color: #fff +} + +.ty-btn__tertiary { + background: #bdc3c7; + color: #fff +} + +.ty-btn__tertiary:hover { + background: #d9dcde; + color: #fff +} + +.buttons-container .buttons-container { + margin-top: 0 +} + +.ty-btn-go { + position: absolute; + top: 1px; + right: 1px; + padding: 0 10px; + min-width: 32px; + height: 30px; + border: 0; + border-left: 1px solid #cdcdcd; + background: #edf2f5; + cursor: pointer; + box-sizing: border-box; + border-radius: 0 4px 4px 0 +} + +.ty-btn-go__icon { + position: absolute; + top: 5px; + left: 12px; + font-size: 20px; + line-height: 20px; + color: gray +} + +.ty-float-left { + float: left +} + +.ty-float-right { + float: right +} + +.ty-clear-both { + clear: both +} + +.ty-valign { + vertical-align: middle +} + +.ty-valign-top { + vertical-align: top +} + +.ty-valign-bottom { + vertical-align: bottom +} + +.hidden { + display: none; + visibility: visible +} + +.ty-strong { + font-weight: 700 +} + +.ty-italic { + font-style: italic +} + +.ty-lowercase { + text-transform: lowercase +} + +.ty-uppercase { + text-transform: uppercase +} + +.ty-left { + text-align: left +} + +.ty-right { + text-align: right +} + +.ty-center { + text-align: center +} + +.ty-justify { + text-align: justify +} + +.ty-strike { + text-decoration: line-through +} + +.ty-center-block { + margin: 0 auto +} + +.ty-inline { + display: inline +} + +.ty-block { + display: block +} + +.ty-inline-block { + display: inline-block +} + +.ty-scroll-x { + overflow-x: auto; + overflow-y: hidden; + padding-bottom: 3px; + width: 100%; + height: 100% +} + +.ty-hand { + cursor: pointer +} + +.ty-nowrap { + white-space: nowrap +} + +.ty-overflow-hidden { + overflow: hidden +} + +.ty-width-full { + width: 100% +} + +.ty-p-none { + padding: 0 !important +} + +.ty-m-none { + margin: 0 !important +} + +.ty-mb-l { + margin-bottom: 30px +} + +.ty-mt-l { + margin-top: 30px +} + +.ty-mb-m { + margin-bottom: 20px +} + +.ty-mt-m { + margin-top: 20px +} + +.ty-mtb-s { + margin: 10px 0 +} + +.ty-mtb-xs { + margin: 5px 0 +} + +.ty-ml-s { + margin-left: 10px +} + +.ty-mt-s { + margin-top: 10px +} + +.ty-mt-m { + margin-top: 20px +} + +.ty-mb-s { + margin-bottom: 10px +} + +.ty-position-relative { + position: relative +} + +.cm-opacity { + opacity: .3 +} + +.cm-hint { + color: #8292a7 +} + +input[type=text], +input[type=password], +input[type=tel], +input[type=number], +textarea, +select { + padding: 4px 8px; + border: 1px solid #bcceda; + background: #fff; + font-family: varela round, sans-serif; + font-size: 14px; + font-style: normal; + font-weight: 400; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + border-radius: 4px +} + +input[type=text], +input[type=password], +input[type=tel], +input[type=number] { + height: 32px; + -webkit-appearance: none; + border-radius: 0; + border-radius: 4px +} + +select[multiple=multiple] { + min-height: 80px +} + +.radio, +.checkbox, +input[type=radio], +input[type=checkbox] { + margin: -4px 6px 0 0; + padding: 0; + vertical-align: middle +} + +input[type=text]:focus, +input[type=password]:focus, +input[type=tel]:focus, +input[type=number]:focus, +textarea:focus { + outline: 0; + border-color: #465363; + -webkit-transition: border .2s linear 0s; + -moz-transition: border .2s linear 0s; + -o-transition: border .2s linear 0s; + transition: border .2s linear 0s +} + +select { + padding: 4px 3px 3px; + min-width: 4em; + max-width: 100%; + height: 2.2em; + line-height: 2.2em +} + +input[type=number] { + -moz-appearance: textfield +} + +input[type=number]::-webkit-inner-spin-button, +input[type=number]::-webkit-outer-spin-button { + -webkit-appearance: none; + margin: 0 +} + +.ty-control-group { + margin: 0 0 12px; + vertical-align: middle +} + +.ty-control-group:before, +.ty-control-group:after { + display: table; + content: ""; + line-height: 0; + width: 100% +} + +.ty-control-group:after { + clear: both +} + +.ty-control-group__label { + float: left; + padding: 6px 0; + margin-right: 10px; + width: 110px; + color: #313a45 +} + +.ty-control-group__title { + display: block; + padding: 6px 0; + font-weight: 700 +} + +.ty-control-group__price { + width: 115px +} + +.ty-control-group__item { + display: inline-block; + padding: 6px 0; + word-break: break-all; + word-break: break-word +} + +.ty-control-group label.hidden { + display: none +} + +.ty-input-append { + position: relative; + margin: 10px 0 0 +} + +.ty-input-append .ty-input-text { + width: 100%; + padding-right: 35px +} + +.ty-select-field { + padding: 3px 0 +} + +.ty-select-field__label { + display: block; + padding: 3px 0; + margin-right: 10px; + font-size: 90% +} + +.ty-select-field__checkbox { + vertical-align: middle +} + +label.cm-failed-label { + color: #bf4d4d +} + +label.cm-required:after { + padding-left: 3px; + color: #ea7162; + content: "*"; + font-size: 13px; + line-height: 1px +} + +input[type=text].cm-failed-field, +input[type=password].cm-failed-field, +input[type=email].cm-failed-field, +input[type=tel].cm-failed-field, +textarea.cm-failed-field, +.cm-field-container.cm-failed-field input[type=text] { + border: 1px solid #bf4d4d; + background: #fff +} + +.ty-error-text { + color: #b94a48 +} + +.disabled, +select.disabled { + background: #e3e3e3 +} + +.ty-input-text { + width: auto +} + +.ty-input-text-medium { + width: 300px +} + +.ty-input-text-large { + width: 550px +} + +.ty-input-text-short { + width: 50px +} + +.ty-input-text-full { + width: 100% +} + +.ty-input-textarea { + resize: vertical +} + +.ty-table { + width: 100%; + margin-top: 30px; + border: 1px solid #edf2f5; + border-width: 1px 0 1px 1px; + border-bottom: none +} + +.ty-table th { + padding: 12px; + border-right: 1px solid #edf2f5; + border-bottom: 1px solid #edf2f5; + background: #fafbfc; + text-align: left; + text-transform: none; + white-space: nowrap; + font-weight: 700; + line-height: normal +} + +.ty-table th i { + margin-left: 5px; + position: relative; + top: 3px; + font-size: 16px; + color: #bdc3c7 +} + +.ty-table tr, +.table .table tr { + background-color: #fff +} + +.ty-table table tr { + background-color: transparent +} + +.ty-table td, +.ty-table .table td { + padding: 13px; + border-right: 1px solid #ecf0f1; + border-bottom: 1px solid #ecf0f1 +} + +.ty-table tbody tr:nth-child(2n) { + background: #fafbfc +} + +.ty-table th, +.ty-table th a { + color: #404040; + font-weight: 700 +} + +.ty-table__responsive-header { + display: none +} + +.help-inline { + display: block +} + +.help-inline p { + padding: 4px 0 0; + color: #b94a48 !important +} + +.ty-dir-list { + display: inline-block; + width: 7px; + font-size: 15px; + margin-right: 5px; + cursor: pointer +} + +.ty-extra-link { + border-bottom: 1px dotted #4d4d4d; + padding: 0; + text-decoration: none; + color: #313a45; + cursor: pointer +} + +.ty-dashed-link { + border-bottom-width: 1px; + border-bottom-style: dotted; + text-decoration: none +} + +.ty-remove { + position: relative; + display: inline-block; + width: auto; + white-space: nowrap; + text-decoration: none +} + +.ty-remove:hover { + text-decoration: none +} + +.ty-remove__icon { + vertical-align: middle +} + +.ty-remove__txt { + padding-left: 5px; + font-size: 12px; + color: #abc3d1; + vertical-align: middle +} + +.ty-remove:hover .ty-remove__txt, +.ty-remove:hover .ty-remove__icon { + color: #abc3d1 +} + +.ty-delete-big, +.ty-delete-icon { + vertical-align: middle +} + +.ty-delete-big:hover, +.ty-delete-icon:hover { + text-decoration: none +} + +.ty-delete-big__icon { + font-size: 19px; + color: #abc3d1 +} + +.ty-caret { + position: absolute; + top: -16px; + left: 14px; + float: left; + overflow: hidden; + width: 16px; + height: 16px +} + +.ty-caret .ty-caret-outer, +.ty-caret .ty-caret-inner { + position: absolute; + top: 0; + left: 0; + display: inline-block; + margin-left: -1px +} + +.ty-caret .ty-caret-outer { + width: 0; + height: 0; + border-top: 16px solid transparent; + border-right: 16px solid #edf2f5 +} + +.ty-caret .ty-caret-inner { + top: 2px; + left: 1px; + width: 0; + height: 0; + border-top: 14px solid transparent; + border-right: 14px solid #fff +} + +.ty-caret-bottom { + position: absolute; + bottom: -16px; + left: 14px; + float: left; + overflow: hidden; + width: 16px; + height: 16px +} + +.ty-caret-bottom .ty-caret-outer, +.ty-caret-bottom .ty-caret-inner { + position: absolute; + top: 0; + left: 0; + display: inline-block; + margin-left: -1px +} + +.ty-caret-bottom .ty-caret-outer { + width: 0; + height: 0; + border-bottom: 16px solid transparent; + border-left: 16px solid #edf2f5 +} + +.ty-caret-bottom .ty-caret-inner { + top: -1px; + left: 2px; + width: 0; + height: 0; + border-bottom: 14px solid transparent; + border-left: 14px solid #fff +} + +.ty-caret-info { + position: absolute; + top: -7px; + left: 12px; + float: left; + overflow: hidden; + width: 12px; + height: 7px +} + +.ty-caret-info .ty-caret-outer, +.ty-caret-info .ty-caret-inner { + position: absolute; + top: 0; + left: 0; + display: inline-block; + margin-left: -1px +} + +.ty-caret-info .ty-caret-outer { + border-right: 7px solid transparent; + border-bottom: 7px solid #bdc3c7; + border-left: 7px solid transparent +} + +.ty-caret-info .ty-caret-inner { + top: 1px; + left: 1px; + display: inline-block; + border-right: 6px solid transparent; + border-bottom: 6px solid #fff; + border-left: 6px solid transparent +} + +.ty-no-items { + padding: 60px 20px; + background: #f8f9f9; + color: #bdc3c7; + text-align: center; + font-size: 115%; + margin-bottom: 20px +} + +.ty-icon-cancel-circle { + font-size: 16px; + line-height: 16px; + color: #8babbe +} + +.ty-menu { + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + -o-user-select: none; + user-select: none +} + +.ty-menu:before, +.ty-menu:after { + display: table; + content: ""; + line-height: 0; + width: 100% +} + +.ty-menu:after { + clear: both +} + +.ty-menu__items { + background: #fff; + position: relative; + border-radius: 6px +} + +.ty-menu__items:before, +.ty-menu__items:after { + display: table; + content: ""; + line-height: 0; + width: 100% +} + +.ty-menu__items:after { + clear: both +} + +.ty-menu__item { + padding: 0; + display: block; + float: left +} + +.ty-menu__item:nth-child(2) .ty-menu__item-link { + border-top-left-radius: 6px; + border-bottom-left-radius: 6px +} + +.ty-menu__submenu-items { + border-bottom-left-radius: 6px; + border-bottom-right-radius: 6px +} + +.ty-menu__item-active .ty-menu__item-link { + background: #f2f2f2 +} + +.no-touch .ty-menu__item:hover .ty-menu__submenu-items, +.is-hover-menu .ty-menu__submenu-items { + display: block +} + +.no-touch .ty-menu__item:hover .ty-menu__item-link, +.is-hover-menu .ty-menu__item-link, +.is-hover-menu.ty-menu__item-active .ty-menu__item-link { + background: #f7f7f7; + color: #fff; + text-shadow: none +} + +.ty-menu__item .ty-menu__item-link { + color: #393939; + position: relative; + padding: 13px 20px; + display: block; + min-height: 46px; + cursor: pointer; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box +} + +.ty-menu__item .ty-menu__item-link .ty-icon-down-micro { + position: absolute; + font-size: 20px; + right: 12px; + top: 13px +} + +.ty-menu__submenu-items { + min-width: 200px; + display: none; + position: absolute; + background: #fff; + z-index: 200; + border: 1px solid #f5f5f5; + border-top: 0; + padding: 15px 16px +} + +.ty-menu__submenu-items .ty-menu__submenu-item { + margin-bottom: 10px +} + +.ty-menu__submenu-items .ty-menu__submenu-link { + color: #465363 +} + +.ty-menu__submenu-items .ty-top-mine__submenu-col { + margin: 0 10px 0 0; + display: inline-block; + vertical-align: top; + min-width: 139px +} + +.ty-menu__submenu-items .ty-top-mine__submenu-col:last-child { + margin-right: 1px +} + +.ty-menu__submenu-item-header { + min-height: 25px; + margin-bottom: 10px; + padding-bottom: 2px; + border-bottom: 1px solid #e5e5e5 +} + +.ty-menu__submenu-item-header .ty-menu__submenu-link { + font-weight: 700; + color: #465363 +} + +.ty-menu__submenu .ty-menu__submenu-items .ty-menu__submenu-item-active a { + color: #fff; + background: #465363; + padding: 2px 6px +} + +.ty-menu__submenu-dropdown-bottom { + display: block; + background: #ecf0f1; + margin: 0 -16px -15px; + padding: 10px; + text-align: right +} + +.ty-menu-vertical .ty-menu__items { + border-bottom: 1px solid #34495e; + z-index: 30 +} + +.ty-menu-vertical .ty-menu__item { + float: none; + position: relative +} + +.ty-menu-vertical .ty-menu__item .ty-menu__submenu { + display: none; + right: 0; + left: auto; + top: 0; + position: absolute; + z-index: 6 +} + +.ty-menu-vertical .ty-menu__submenu-items { + padding: 0; + border: 1px solid #f5f5f5 +} + +.no-touch .ty-menu-vertical .ty-menu__submenu .ty-menu__item:hover>.ty-menu__submenu-item-header .ty-menu__item-link, +.ty-menu-vertical .ty-menu__submenu .is-hover-menu>.ty-menu__submenu-item-header .ty-menu__item-link { + background: #465363; + color: #393939 +} + +.no-touch .ty-menu-vertical .ty-menu__submenu .ty-menu__item:hover i, +.ty-menu-vertical .ty-menu__submenu .is-hover-menu i { + color: #fff +} + +.ty-menu-vertical .ty-menu__item .ty-menu__submenu .ty-menu__item-link { + color: #465363; + background: #fff; + padding: 14px 20px +} + +.no-touch .ty-menu-vertical .ty-menu__item:hover>.ty-menu__submenu, +.ty-menu-vertical .is-hover-menu>.ty-menu__submenu { + display: block +} + +.no-touch .ty-menu-vertical .ty-menu__item .ty-menu__submenu .ty-menu__item:hover>.ty-menu__item-link { + background: #465363; + color: #fff +} + +.ty-menu-vertical .ty-menu__item .ty-icon-left-open { + display: none +} + +.ty-menu__item-arrow i { + position: absolute; + z-index: 5; + right: 15px; + top: 17px; + color: #a1a6aa +} + +.ty-menu-vertical .ty-menu__submenu-item-header { + margin-bottom: 0; + padding-bottom: 0; + border: 0 +} + +.ty-menu-vertical .ty-menu__items.rtl { + text-align: right +} + +.ty-menu-vertical .ty-menu__items.rtl .ty-icon-right-open { + display: none +} + +.ty-menu-vertical .ty-menu__items.rtl .ty-icon-left-open { + left: 15px; + right: auto; + display: block +} + +.ty-menu-vertical .ty-menu__items.rtl .ty-menu__submenu { + width: 202px; + right: 100%; + left: auto +} + +.ty-menu-vertical .ty-menu__items.rtl .ty-menu__submenu-items { + width: 200px +} + +.ty-menu__submenu { + left: 0 +} + +.ty-menu__submenu-reverse-direction { + right: 0 +} + +.ty-menu__submenu-reverse-direction .ty-menu__submenu-items { + right: 0 +} + +.ty-menu__submenu-to-right { + right: 0 +} + +.ty-menu__submenu-to-right .ty-menu__submenu-items { + right: 0 +} + +.ty-menu-item__sale .ty-menu__item-link, +.no-touch .ty-menu-item__sale .ty-menu__item-link:hover { + color: #ff0 +} + +html.dialog-is-open { + overflow: hidden +} + +html.dialog-is-open body { + overflow: scroll +} + +.ui-widget, +.ui-widget button { + font-family: open sans, sans-serif +} + +.object-container { + padding: 10px 20px 0; + background: #fff; + overflow: auto +} + +.object-container .notification-content { + top: 11px; + right: 24px; + min-width: 420px; + position: absolute; + z-index: 1510 +} + +.ui-widget select, +.ui-widget textarea { + font-weight: 400 +} + +.ui-dialog-content { + overflow: visible; + display: block !important +} + +.ui-widget-content.ui-dialog { + padding: 0; + border: none; + max-width: 930px +} + +.object-container .ty-control-group__label { + float: none; + width: auto; + display: inline-block; + min-width: 120px; + vertical-align: top +} + +.ui-dialog .ui-dialog-content { + overflow: visible; + padding: 0; + min-height: 120px !important; + -webkit-border-radius: 0 0 5px 5px; + -moz-border-radius: 0 0 5px 5px; + border-radius: 0 0 5px 5px; + -webkit-box-shadow: none; + -moz-box-shadow: none; + box-shadow: none +} + +.ui-widget-content.ui-dialog { + border-radius: 6px; + overflow: hidden +} + +.ui-dialog .ui-dialog-titlebar { + padding: 13px 20px 10px; + border: none; + border-bottom: 1px solid #ccdae3; + background: #f7f9fa; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0 +} + +.ui-corner-all { + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0 +} + +.ui-dialog .ui-resizable-se { + right: 1px; + bottom: 1px +} + +.ui-widget-overlay { + position: fixed; + overflow: hidden; + margin: 0; + padding: 0; + background: url(../../../../../../../../design/themes/responsive/media/images/picker_bg_outside.png?1626074086) repeat-x 0 -100% scroll #000; + opacity: .7; + filter: alpha(opacity=70) +} + +div.ui-dialog .ui-dialog-title { + width: auto; + margin: 0; + color: #2c3e50; + font-weight: 400; + font-size: 18px; + padding-right: 20px +} + +.ui-dialog .ui-dialog-titlebar-close { + top: 27px; + right: 13px; + padding: 0 +} + +.ui-draggable .ui-dialog-titlebar { + cursor: url(../../../../../../../../design/themes/responsive/media/images/icons/openhand.cur?1626074086), move +} + +.ui-dialog .buttons-container { + margin: 0 -20px +} + +.ui-dialog .buttons-container.picker { + padding: 13px 0; + width: 100%; + border-top: 1px solid #fff; + background-color: #f9f9f9 +} + +.buttons-container-picker { + padding: 0; + width: 100% +} + +.buttons-container-picker { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + padding: 15px 20px; + border: 1px solid #e3e3e3 +} + +.ui-dialog .buttons-container.picker>div { + margin: 0 15px +} + +.ui-widget-header .ui-icon-closethick { + color: #ccdae3; + background: 0 0; + margin: -10px 0 0 -10px; + text-indent: 0; + font: 13px/1 'glyphs'; + speak: none; + -webkit-font-smoothing: antialiased; + opacity: .7 +} + +.ui-widget-header .ui-icon-closethick.ui-state-hover { + opacity: 1 +} + +.ui-widget-header .ui-icon-closethick:before { + font-family: glyphs; + content: "\e009"; + speak: none; + -webkit-font-smoothing: antialiased +} + +.ui-widget-header .ui-dialog-titlebar-close.ui-state-hover { + border: none; + background: 0 0 +} + +.ui-widget-header .ui-dialog-titlebar-close.ui-state-hover span:before { + color: #fff +} + +.ui-widget-header .ui-state-default { + background: 0 0; + border: 0; + outline: none +} + +.ui-dialog-dragging { + background: #f7f7e7 none; + opacity: .6 +} + +.ui-dialog-dragging .ui-resizable-handle { + display: none +} + +.ui-dialog-dragging .ui-dialog-content { + visibility: hidden +} + +.ty-wysiwyg-content h1 { + font-size: 36px; + font-weight: 700 +} + +.ty-wysiwyg-content h2 { + font-weight: 700; + font-size: 30px +} + +.ty-wysiwyg-content h3 { + font-weight: 700; + font-size: 24px +} + +.ty-wysiwyg-content h4 { + font-weight: 700; + font-size: 18px +} + +.ty-wysiwyg-content h5 { + font-weight: 700; + font-size: 14px +} + +.ty-wysiwyg-content h6 { + font-weight: 700; + font-size: 12px +} + +.ty-wysiwyg-content h1, +.ty-wysiwyg-content h2, +.ty-wysiwyg-content h3 { + margin-top: 20px; + margin-bottom: 10px +} + +.ty-wysiwyg-content h4, +.ty-wysiwyg-content h5, +.ty-wysiwyg-content h6 { + margin-top: 10px; + margin-bottom: 10px +} + +.ty-wysiwyg-content td, +.ty-wysiwyg-content th { + padding: 5px +} + +.ty-wysiwyg-content ul { + padding: 0 0 0 20px; + list-style-type: disc +} + +.ty-wysiwyg-content ul>li { + list-style-type: inherit +} + +.ty-wysiwyg-content ol { + padding: 0 0 0 20px; + list-style-type: decimal +} + +.ty-wysiwyg-content ol>li { + list-style-type: inherit +} + +.ty-product-block__description ul { + padding: 0 0 0 20px; + list-style-type: disc +} + +.ty-product-block__description ul>li { + list-style-type: inherit +} + +.ty-product-block__description ol { + padding: 0 0 0 20px; + list-style-type: decimal +} + +.ty-product-block__description ol>li { + list-style-type: inherit +} + +.ty-product-list__description ul { + padding: 0 0 0 20px; + list-style-type: disc +} + +.ty-product-list__description ul>li { + list-style-type: inherit +} + +.ty-product-list__description ol { + padding: 0 0 0 20px; + list-style-type: decimal +} + +.ty-product-list__description ol>li { + list-style-type: inherit +} + +.ty-wysiwyg-content iframe { + max-width: 100% +} + +.ty-wysiwyg-content .no-border td { + border: 0 +} + +.redactor-box ol li { + list-style-type: decimal +} + +.redactor-box ul li { + list-style-type: disc +} + +.ty-wysiwyg-content [class*=ty-column] { + margin-bottom: 20px; + box-sizing: border-box; + padding: 0 10px +} + +.ty-wysiwyg-content .ty-notice { + padding: 10px 25px; + background: #f7f9fa; + color: #465363; + border-radius: 4px; + display: inline-block +} + +.ty-wysiwyg-content .ty-image { + padding: 10px; + border: 4px solid #fff; + outline: 2px solid #edf2f5; + box-sizing: border-box +} + +.ty-wysiwyg-content { + word-wrap: break-word +} + +.ty-wysiwyg-content h1.ty-main-title { + margin-top: 10px; + padding-bottom: 10px; + font-size: 36px; + text-transform: uppercase; + line-height: 155%; + font-weight: 400 +} + +.ty-wysiwyg-content h1.ty-main-title2 { + margin-top: 45px; + font-weight: 400; + font-size: 37px +} + +@media(max-width:767px) { + + .ty-wysiwyg-content h1.ty-main-title2, + .ty-wysiwyg-content h1.ty-main-title { + font-size: 24px + } +} + +.ty-wysiwyg-content h3.ty-main-title2 { + margin: 78px 0 32px; + font-size: 22px; + font-weight: 400 +} + +.ty-list-container, +.ty-items-container { + margin: 20px 0; + line-height: 140% +} + +.ty-list-container.ty-decimal .ty-list-text, +.ty-items-container.ty-decimal .ty-list-text { + padding-left: 40px +} + +.ty-list-container.ty-decimal .ty-list-item, +.ty-items-container.ty-decimal .ty-list-item { + position: absolute; + margin-top: 7px; + margin-left: -40px; + font-size: 60px; + color: #0cf +} + +.ty-list-container .ty-column4 .ty-company__item, +.ty-list-container .ty-column4 .ty-gift-certificate__item { + padding-right: 10% +} + +@media(max-width:478px) { + + .ty-list-container .ty-column4 .ty-company__item, + .ty-list-container .ty-column4 .ty-gift-certificate__item { + padding-right: 0 + } +} + +.ty-list-container .ty-company__item { + padding-right: 10% +} + +.ty-list-container .ty-list-image { + margin: 17px 0; + text-align: center +} + +.ty-list-container .ty-list-image.ty-left { + text-align: left +} + +.ty-list-container .ty-list-image.ty-right { + text-align: right +} + +.ty-list-container .ty-list-text { + padding-top: 8px; + font-family: Arial; + font-size: 12px; + line-height: 150% +} + +.ty-list-container .ty-list-text.big { + font-size: 16px +} + +.ty-list-container .ty-list-text .ty-header { + display: block; + font-size: 21px +} + +.ty-list-container .ty-list-text .ty-header .ty-big { + font-size: 218%; + font-weight: 700; + line-height: normal +} + +.ty-list-container.with-shadow .ty-list-image { + padding: 10px; + margin-bottom: 14px; + -webkit-box-shadow: 0 0 5px 0 rgba(0, 0, 0, .3); + -moz-box-shadow: 0 0 5px 0 rgba(0, 0, 0, .3); + box-shadow: 0 0 5px 0 rgba(0, 0, 0, .3) +} + +.ty-list-container.with-shadow .ty-list-text { + padding-top: 0; + margin-bottom: 27px +} + +.ty-list-container .ty-list-header { + display: block; + padding-bottom: 6px; + font-size: 22px; + line-height: normal +} + +.ty-items-container .item { + padding-right: 4% +} + +@media screen and (max-width:480px) { + .ty-items-container { + text-align: center + } + + .ty-items-container .item { + padding-right: 0 + } +} + +.ty-column1 { + display: inline-block; + width: 100%; + vertical-align: top; + margin-right: -.25em +} + +.ty-column2 { + display: inline-block; + width: 50%; + vertical-align: top; + margin-right: -.25em +} + +.ty-column3 { + display: inline-block; + width: 33.333333333333%; + vertical-align: top; + margin-right: -.25em +} + +.ty-column4 { + display: inline-block; + width: 25%; + vertical-align: top; + margin-right: -.25em +} + +.ty-column5 { + display: inline-block; + width: 20%; + vertical-align: top; + margin-right: -.25em +} + +.ty-column6 { + display: inline-block; + width: 16.666666666667%; + vertical-align: top; + margin-right: -.25em +} + +.ty-column7 { + display: inline-block; + width: 14.285714285714%; + vertical-align: top; + margin-right: -.25em +} + +.ty-column8 { + display: inline-block; + width: 12.5%; + vertical-align: top; + margin-right: -.25em +} + +.ty-column9 { + display: inline-block; + width: 11.111111111111%; + vertical-align: top; + margin-right: -.25em +} + +.ty-column10 { + display: inline-block; + width: 10%; + vertical-align: top; + margin-right: -.25em +} + +@media(max-width:979px) { + .ty-column1 { + display: inline-block; + width: 100%; + vertical-align: top; + margin-right: -.25em + } + + .ty-column2 { + width: 100% + } + + .ty-column3 { + width: 50% + } + + .ty-column4 { + width: 33.333333333333% + } + + .ty-column5 { + width: 25% + } + + .ty-column6 { + width: 20% + } + + .ty-column7 { + width: 16.666666666667% + } + + .ty-column8 { + width: 14.285714285714% + } + + .ty-column9 { + width: 12.5% + } + + .ty-column10 { + width: 11.111111111111% + } +} + +@media(max-width:767px) { + .ty-column1 { + display: inline-block; + width: 100%; + vertical-align: top; + margin-right: -.25em + } + + .ty-column2 { + width: 50% + } + + .ty-column3 { + width: 50% + } + + .ty-column4 { + width: 50% + } + + .ty-column5 { + width: 50% + } + + .ty-column6 { + width: 50% + } + + .ty-column7 { + width: 50% + } + + .ty-column8 { + width: 50% + } + + .ty-column9 { + width: 50% + } + + .ty-column10 { + width: 50% + } +} + +@media screen and (max-width:480px) { + .ty-column1 { + width: 100% + } + + .ty-column2 { + width: 100% + } + + .ty-column3 { + width: 100% + } + + .ty-column4 { + width: 100% + } + + .ty-column5 { + width: 100% + } + + .ty-column6 { + width: 100% + } + + .ty-column7 { + width: 100% + } + + .ty-column8 { + width: 100% + } + + .ty-column9 { + width: 100% + } + + .ty-column10 { + width: 100% + } +} + +.tygh-top-panel { + background-color: #212121; + background-image: -moz-linear-gradient(top, #212121, #212121); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#212121), to(#212121)); + background-image: -webkit-linear-gradient(top, #212121, #212121); + background-image: -o-linear-gradient(top, #212121, #212121); + background-image: linear-gradient(to bottom, #212121, #212121); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff212121', endColorstr='#ff212121', GradientType=0) +} + +.top-menu-grid { + padding-top: 38px +} + +.top-quick-links { + margin: 6px 0 0 +} + +.top-quick-links a { + color: #969b9b +} + +.our-brands-grid { + margin-bottom: 80px +} + +.ty-order-summary { + margin-top: 66px +} + +.tygh-header>div { + padding-top: 39px +} + +.header-widget-grid .top-menu-grid { + padding-top: 15px +} + +.search-widget-block-grid { + padding: 15px 0 +} + +.tygh-content { + border-top: 2px solid #edf2f5 +} + +.top-menu:after { + left: 0; + right: -1000% +} + +.top-menu:before { + left: -1000%; + right: 0 +} + +.tygh-header { + background-color: #fff; + background-image: -moz-linear-gradient(top, #fff, #fff); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#fff), to(#fff)); + background-image: -webkit-linear-gradient(top, #fff, #fff); + background-image: -o-linear-gradient(top, #fff, #fff); + background-image: linear-gradient(to bottom, #fff, #fff); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffffffff', GradientType=0) +} + +.tygh-content>div { + padding-bottom: 40px +} + +.tygh-content>div { + background-color: #f8f8f8; + filter: "progid:DXImageTransform.Microsoft.gradient(enabled=false)"; + background-color: transparent; + background-image: none +} + +.side-grid .ty-account-info__user-arrow { + display: none +} + +.side-grid .ty-dropdown-box__content { + right: auto; + left: 0 +} + +.main-content-grid { + width: 100% +} + +.footer-content-grid { + margin: 30px 0 +} + +.ty-holiday-gift-banner { + margin-top: -20px; + width: 100% +} + +.top-my-account { + margin-left: 22px +} + +.buttons-container { + padding: 17px 20px; + background: #f7f9fa; + border-radius: 6px +} + +.buttons-container:before, +.buttons-container:after { + display: table; + content: ""; + line-height: 0; + width: 100% +} + +.buttons-container:after { + clear: both +} + +.ty-mainbox-body .buttons-container { + margin: 25px 0 +} + +.ty-mainbox-title { + margin-bottom: 10px +} + +.ty-mainbox-title:before, +.ty-mainbox-title:after { + display: table; + content: ""; + line-height: 0; + width: 100% +} + +.ty-mainbox-title:after { + clear: both +} + +.ty-mainbox-title__left { + float: left +} + +.ty-mainbox-title__right { + display: block; + float: right; + margin-top: 7px; + font-weight: 400; + font-size: 70% +} + +.ty-mainbox-title .ty-status { + float: right; + padding-top: 10px; + color: #404040; + font-style: normal; + font-size: 14px +} + +.ty-mainbox-title .ty-date { + font-style: normal; + font-size: 70%; + white-space: nowrap +} + +.ty-mainbox-container.ty-float-right, +.ty-mainbox-container.ty-float-left { + width: inherit +} + +.ty-subheaders-group { + margin: 0 15px 21px +} + +.ty-subheader { + margin: 0; + padding: 7px 0 10px; + font-size: 18px; + color: #34495e +} + +.ty-subheader__tooltip { + font-size: inherit +} + +.ty-mainbox-simple-title { + margin-bottom: 10px +} + +.ty-mainbox-simple-title:before, +.ty-mainbox-simple-title:after { + display: table; + content: ""; + line-height: 0; + width: 100% +} + +.ty-mainbox-simple-title:after { + clear: both +} + +.ty-sidebox-important { + margin-bottom: 15px +} + +.ty-sidebox-important__title { + width: 100% +} + +.ty-sidebox-important__title-wrapper { + font-size: 13px; + font-weight: 400; + color: #909598; + padding: 4px 14px 8px; + background: #ecf0f1; + float: left; + width: 100%; + box-sizing: border-box +} + +.ty-sidebox-important__body { + -webkit-border-radius: 0 0 5px 5px; + -moz-border-radius: 0 0 5px 5px; + border-radius: 0 0 5px 5px +} + +.ty-text-links { + margin: 0 0 6px +} + +.ty-text-links:first-child { + padding-top: 0 +} + +.ty-text-links .ty-level-0 { + margin-left: 0 +} + +.ty-text-links .ty-level-1 { + margin-left: 10px +} + +.ty-text-links .ty-level-2 { + margin-left: 20px +} + +.ty-text-links .ty-level-3 { + margin-left: 30px +} + +.ty-text-links .ty-level-4 { + margin-left: 40px +} + +.ty-text-links__active>.ty-text-links__a, +.no-touch .ty-text-links__a:hover { + color: #313a45 +} + +.ty-text-links__item { + position: relative; + display: block; + margin-right: 15px +} + +.ty-text-links_show_inline>.ty-text-links__item { + display: inline-block +} + +.ty-text-links_show_inline .ty-level-0>.ty-text-links { + display: none; + position: absolute; + min-width: 200px; + background: #fff; + border: 1px solid #7ea1b7; + z-index: 10; + padding: 5px; + margin: 0; + border-radius: 4px +} + +.no-touch .ty-text-links_show_inline .ty-level-0:hover .ty-text-links { + display: block +} + +.ty-text-links_show_inline .ty-level-0.is-hover-link>.ty-text-links { + display: block +} + +.ty-dropdown-box .ty-text-links__item { + margin: 0; + padding: 7px 14px +} + +.ui-datepicker { + width: unset !important; + min-width: 17em !important +} + +.ty-accordion { + margin-top: 20px +} + +.ty-accordion .ui-accordion-header-icon { + position: absolute; + top: 5px; + right: 10px; + background: 0 0; + text-indent: 0; + overflow: visible +} + +.ty-accordion .ui-accordion-header-icon:before { + font-family: glyphs; + font-size: 25px; + content: "\e019"; + speak: none; + font-weight: 400; + font-variant: normal; + text-transform: none; + line-height: 1; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale +} + +.ty-accordion .ui-accordion-header { + position: relative; + color: #7c7e80; + margin-top: 5px; + padding: 8px 12px; + border: 0; + border-radius: 0; + background: #e5ebec; + background-image: none; + font-family: varela round, sans-serif; + font-size: 14px; + font-weight: 400; + font-style: normal; + text-decoration: none; + cursor: pointer; + border-radius: 4px; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + -o-user-select: none; + user-select: none +} + +.ty-accordion .ui-accordion-header.ui-state-active { + background: #bdc3c7; + color: #fff +} + +.ty-accordion .ui-accordion-header.ui-state-active .ui-accordion-header-icon:before { + content: "\e01c" +} + +.ty-accordion .ui-accordion-content { + border: 0 +} + +.ty-logo-container { + position: relative; + margin-top: 2px +} + +.ty-logo-container__image { + display: inline-block; + text-decoration: none +} + +.ty-logo-container__image.vertical-middle { + visibility: hidden +} + +.ty-grid-list__item { + padding: 10px 10px 25px; + position: relative; + border: 1px solid transparent +} + +.ty-grid-list__item:before, +.ty-grid-list__item:after { + display: table; + content: ""; + line-height: 0; + width: 100% +} + +.ty-grid-list__item:after { + clear: both +} + +.ty-grid-list__item--overlay:hover { + border-color: #acbdcd +} + +.ty-grid-list__item:hover .ty-grid-list__control { + display: block; + position: absolute; + z-index: 110; + background: #fff; + border: 1px solid #acbdcd; + border-top: 0; + margin-left: -11px; + padding: 0 10px 20px +} + +.ty-grid-list__item:hover--control { + border-color: #acbdcd +} + +.ty-grid-list__item:hover .ty-icon-left-circle, +.ty-grid-list__item:hover .ty-icon-right-circle { + visibility: visible +} + +.ty-grid-list__image { + position: relative; + padding: 18px 0; + border: 1px solid #ebebeb; + background: #fff; + text-align: center; + min-height: 50px +} + +.ty-grid-list__image .ty-no-image { + border: 0 +} + +.ty-grid-list__price { + display: block; + text-align: left; + vertical-align: top; + overflow: hidden; + word-break: break-all +} + +.ty-grid-list__no-price { + text-align: left; + width: auto +} + +.ty-grid-list__item-name { + margin-top: 10px; + margin-bottom: 5px; + display: block; + width: 100%; + overflow: hidden +} + +.ty-grid-list__item-name .product-title { + display: block; + color: #a0acbc; + word-wrap: break-word +} + +.ty-grid-list__control { + display: none; + width: 100%; + width: calc(100% - 20px); + padding-top: 5px +} + +.ty-grid-list__control .ty-btn { + margin-bottom: 10px; + margin-right: 10px +} + +.ty-product-empty { + background: #f8f9f9; + margin: 28px 10px 0; + height: 190px; + text-align: center +} + +.ty-product-empty__text { + color: #cdcdcd; + font-size: 115%; + line-height: 190px +} + +.ty-product-list { + padding: 35px 0 +} + +.ty-product-list__image { + position: relative; + float: left; + margin: 0 25px 20px 0; + border: 1px solid #ebebeb +} + +.ty-product-list__content { + overflow: hidden +} + +.ty-product-list__info { + overflow-x: auto; + overflow-y: hidden +} + +.ty-product-list__control .ty-btn { + margin-bottom: 10px; + margin-right: 10px +} + +.ty-product-list__control .ty-product-coming-soon { + margin: 10px 0 +} + +.ty-product-list__item-name .product-title { + font-size: 130%; + word-wrap: break-word +} + +.ty-product-list__price .ty-price-num { + font-size: 120% +} + +.ty-product-list__price { + padding: 10px 0 +} + +.ty-product-list__description { + line-height: 170% +} + +.ty-product-list .ty-qty-out-of-stock { + margin-right: 20px; + padding: 2px 0 0; + vertical-align: top +} + +.ty-compact-list__item { + padding: 10px 0; + border-bottom: 1px solid #dfdfdf; + position: relative +} + +.ty-compact-list__item:before, +.ty-compact-list__item:after { + display: table; + content: ""; + line-height: 0; + width: 100% +} + +.ty-compact-list__item:after { + clear: both +} + +.ty-compact-list__content:before, +.ty-compact-list__content:after { + display: table; + content: ""; + line-height: 0; + width: 100% +} + +.ty-compact-list__content:after { + clear: both +} + +.ty-compact-list__item .ty-discount-label { + top: auto; + right: auto; + bottom: 5px +} + +.ty-compact-list__item .ty-qty { + margin: 0 +} + +.ty-compact-list__image { + float: left; + width: 13%; + padding: 0 25px; + text-align: center +} + +.ty-compact-list__image .ty-discount-label { + position: static; + float: none; + display: inline-block; + margin-top: 5px +} + +.ty-compact-list__title { + float: left; + width: 30%; + margin: 0 10px 0 0; + word-wrap: break-word +} + +.ty-compact-list__controls { + float: right; + position: relative; + padding-bottom: 30px; + width: 40%; + text-align: right +} + +.ty-compact-list__controls .ty-btn__add-to-cart { + margin: 0 0 0 10px +} + +.ty-compact-list__controls .ty-qty-out-of-stock { + margin-right: 0 +} + +.ty-compact-list__controls .ty-product-coming-soon { + width: 100%; + right: 0; + padding-top: 12px; + text-align: right; + position: absolute +} + +.ty-product-coming-soon { + color: #767676 +} + +.ty-compact-list__controls>div { + display: inline-block; + vertical-align: middle +} + +.ty-compact-list__controls .qty { + padding-top: 0 +} + +.ty-compact-list__price { + margin-right: 10px +} + +.ty-compact-list__price .ty-list-price { + margin-right: 4px +} + +.ty-compact-list__item .ty-control-group__label { + width: auto +} + +.ty-thumbnail-list__item { + margin-bottom: 20px; + text-align: center +} + +.ty-thumbnail-list__img-block { + display: inline-block +} + +.ty-thumbnail-list__name { + padding: 6px 0 +} + +.ty-thumbnail-list__butons { + padding: 10px 0 +} + +.ty-template-small__item { + padding: 10px 0; + border-bottom: 1px dotted #ebebeb +} + +.ty-template-small__item:last-child { + border: 0 +} + +.ty-template-small__item-img { + float: left; + margin-right: 10px; + vertical-align: top +} + +.ty-template-small__item-price { + margin-top: 5px +} + +.ty-template-small__item-description { + overflow: hidden +} + +.ty-scroller-list__item { + padding-top: 20px; + padding-bottom: 40px; + text-align: center +} + +.ty-scroller-list__item .ty-grid-list__item { + padding-bottom: 0 +} + +.ty-scroller-list__item .ty-grid-list__item .ty-grid-list__control { + display: block; + position: static; + padding-top: 5px; + padding-bottom: 0; + border-color: transparent; + border-bottom: 0 +} + +.ty-scroller-list__description .product-title { + display: inline-block; + overflow: hidden; + padding-top: 5px; + width: 90%; + text-overflow: ellipsis; + white-space: nowrap; + word-wrap: break-word +} + +.ty-scroller-list__item:hover .ty-quick-view-button { + visibility: visible; + text-align: center +} + +.ty-simple-list__buttons { + padding: 17px 20px +} + +.ty-simple-list .ty-discount-label { + top: 1px; + right: 1px +} + +.ty-simple-list .ty-discount-label:before, +.ty-simple-list .ty-discount-label:after { + content: ""; + position: absolute +} + +.ty-simple-list .ty-discount-label:before { + top: -1px; + right: 0; + bottom: 0; + width: 1px; + height: 150px; + background-image: -webkit-linear-gradient(bottom, transparent, #edf2f5); + background-image: -moz-linear-gradient(bottom, transparent, #edf2f5); + background-image: -o-linear-gradient(bottom, transparent, #edf2f5) +} + +.ty-simple-list .ty-discount-label:after { + top: 0; + right: 1px; + width: 150px; + height: 1px; + background-image: -webkit-linear-gradient(right, #edf2f5, transparent); + background-image: -moz-linear-gradient(right, #edf2f5, transparent); + background-image: -o-linear-gradient(right, #edf2f5, transparent) +} + +ol.text-link-list .text-link-list__item { + list-style: decimal +} + +.ty-profile-field { + margin-top: 30px +} + +.ty-profile-field .ty-input-text { + width: 100% +} + +.ty-profile-field__switch { + margin: 25px 0; + padding: 15px 20px; + border: 2px solid #b2c7d4; + background: #fff; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px +} + +.ty-profile-field__switch-label { + float: left +} + +.ty-profile-field__switch-actions { + float: right +} + +.ty-profile-field__switch-actions label { + padding-right: 15px +} + +.ty-profile-field__select-country, +.ty-profile-field__select-state, +.ty-profile-field__select { + width: 100% +} + +.ty-billing-zip-code, +.ty-shipping-zip-code { + clear: both; + width: 120px +} + +.company .buttons-container { + border-top: 1px solid #ddd; + -webkit-border-radius: 0 0 3px 3px; + -moz-border-radius: 0 0 3px 3px; + border-radius: 0 0 3px 3px; + margin: 30px 0 28px -21px; + padding: 17px 20px; + width: 100% +} + +.ty-billing-first-name, +.ty-billing-last-name, +.ty-shipping-first-name, +.ty-shipping-last-name, +.ty-billing-country, +.ty-billing-state, +.ty-shipping-country, +.ty-shipping-state, +.ty-first-name, +.ty-last-name { + display: inline-block; + width: 47% +} + +.ty-billing-first-name+.ty-billing-last-name, +.ty-billing-country+.ty-billing-state, +.ty-shipping-first-name+.ty-shipping-last-name, +.ty-shipping-country+.ty-shipping-state, +.ty-first-name+.ty-last-name { + margin-left: 4.8% +} + +.billing-last-name, +.shipping-last-name { + margin-right: 0 +} + +.ty-company-description textarea { + width: 100% +} + +.ty-account { + margin-top: 30px +} + +.ty-account--nopadding { + margin: 0 +} + +.ty-account .ty-input-text { + width: 100% +} + +.ty-account-detail { + margin: 45px 0 0 58px; + padding-bottom: 250px; + background: url(../../../../../../../../design/themes/responsive/media/images/profile_details.png?1626074086) no-repeat bottom center; + color: #bdc3c7 +} + +.ty-account-detail h4 { + font-size: 19px; + padding-bottom: 10px +} + +.ty-account-detail ul li { + list-style-type: disc; + margin: 15px 0 0 17px +} + +.ty-account-benefits { + margin: 47px 0 0 60px; + color: #bdc3c7 +} + +.ty-account-benefits h4 { + padding-bottom: 22px; + font-size: 19px +} + +.ty-account-benefits ul li { + list-style-type: disc; + margin-bottom: 11px; + margin-left: 17px +} + +.ty-languages { + margin: 0 15px 0 0 +} + +.ty-languages__item { + float: left; + display: inline-block; + padding: 8px 6px +} + +.ty-languages__icon-link .ty-flag { + margin-right: 0 +} + +.ty-languages__active { + background: #dfe4e4; + color: #000 +} + +.ty-currencies__txt { + float: left; + padding: 8px 5px 8px 0 +} + +.ty-currencies__item { + float: left; + padding: 8px 13px; + border-radius: 4px; + color: #969b9b +} + +.ty-currencies__item:hover { + background: #e0e9ee; + color: #7c8282 +} + +.ty-currencies__active { + background: #e0e9ee; + color: #7c8282 +} + +.ty-sidebox { + margin-bottom: 44px; + word-wrap: break-word; + background: #fff +} + +.ty-sidebox__title { + position: relative; + padding: 0 30px 9px 0; + border-bottom: 1px solid #edf2f5 +} + +.touch .ty-sidebox__title { + cursor: pointer +} + +.ty-sidebox__title-toggle { + position: absolute; + top: 0; + right: 0; + z-index: 100; + float: left; + width: 35px; + color: #abc3d1; + text-align: center; + font-size: 25px; + cursor: pointer +} + +.ty-sidebox__icon-hide { + display: none +} + +.ty-sidebox__title.open .ty-sidebox__icon-open { + display: none +} + +.ty-sidebox__title.open .ty-sidebox__icon-hide { + display: block +} + +.ty-sidebox__title-wrapper, +.ty-sidebox__title span, +.ty-sidebox__title a { + text-decoration: none; + text-transform: uppercase; + font-weight: 700; + font-size: 14px; + color: #a1a6aa; + padding: 0 +} + +.ty-sidebox .buttons-container { + background: 0 0; + padding: 20px 0 +} + +.ty-compare { + position: relative +} + +.ty-compare__wrapper { + overflow-x: auto; + overflow-y: hidden +} + +.ty-compare-menu { + width: 150px +} + +.ty-compare-menu__a { + padding: 8px 16px 7px; + display: block +} + +.ty-compare-menu__a:hover { + background: #eff0f2; + color: #34495e; + text-decoration: none +} + +.ty-compare-menu__elem { + display: block; + padding: 8px 16px 7px; + color: #fff; + background: #1abc9c +} + +.ty-compare-products { + width: 100%; + table-layout: fixed +} + +.ty-compare-products__product { + padding: 0 10px; + width: 215px; + vertical-align: top; + text-align: center +} + +.ty-compare-products__item { + padding: 5px 0 +} + +.ty-compare-products__menu { + vertical-align: top; + padding: 0 10px; + width: 150px +} + +.ty-compare-products__product .buttons-container { + margin: 0 +} + +.no-touch .ty-compare-products__product .ty-qty .ty-control-group__label { + display: inline-block; + float: none; + width: 90px +} + +.touch .ty-compare-products__product .ty-qty .ty-control-group__label { + display: block; + width: 100% +} + +.ty-compare-products__delete { + position: relative; + visibility: hidden; + padding-bottom: 2px +} + +.touch .ty-compare-products__delete, +.ty-compare-products__product:hover .ty-compare-products__delete { + visibility: visible +} + +.ty-compare-feature { + position: relative; + z-index: 20; + margin-bottom: 10px +} + +.ty-compare-feature__table { + width: 100%; + table-layout: fixed +} + +.ty-compare-feature__row:nth-child(odd) { + background-color: #fff +} + +.ty-compare-feature__item { + padding: 10px; + border: 1px solid #ebebeb; + vertical-align: middle; + text-align: left +} + +.ty-compare-feature_item_size { + padding: 0 10px; + width: 215px +} + +.ty-compare-sort { + width: 150px; + text-align: left +} + +.ty-compare-sort__a { + visibility: hidden; + margin-left: 3px; + vertical-align: middle +} + +.touch .ty-compare-sort__a, +.ty-compare-sort:hover .ty-compare-sort__a { + visibility: visible +} + +.ty-compare-list__item { + text-align: left +} + +.ty-compare-checkbox { + position: relative; + top: 2px; + display: inline-block; + margin-right: 5px; + width: 13px; + height: 13px; + border: 1px solid #4d4d4d; + background-color: #fff; + color: #8292a7; + text-align: left +} + +.ty-compare-checkbox__icon { + position: relative; + top: -2px; + left: 1px; + font-size: 11px +} + +.ty-price-num { + font-size: 15px; + font-weight: 700 +} + +.ty-sku { + padding: 0; + font-size: 90% +} + +.ty-price, +.ty-sub-price, +.ty-list-price { + font-size: 100% +} + +.ty-price { + margin: 6px 0; + color: #f58d8e +} + +.ty-sub-price { + color: #f15e60 +} + +.ty-list-price { + color: #f15e60; + line-height: 100%; + font-size: 13px +} + +.ty-tax-include { + display: block; + padding-bottom: 5px +} + +.ty-price-update { + display: inline-block; + font-size: 13px +} + +.ty-qty { + margin-bottom: 15px +} + +.ty-qty-in-stock, +.ty-qty-out-of-stock { + font-weight: 700 +} + +.ty-qty-in-stock { + color: #27ae60 +} + +.ty-qty-out-of-stock { + color: #e74c3c +} + +.ty-min-qty-description { + font-size: 12px; + padding-top: 0; + color: #9bb7c7 +} + +.ty-price-curency { + display: inline-block +} + +.ty-price-curency__title { + display: inline-block; + float: left; + margin: 5px 0 +} + +input.ty-price-curency__input { + margin-left: 5px; + width: 70px; + height: 35px; + font-size: 140% +} + +.ty-no-price { + display: block; + padding: 0; + color: #e74c3c +} + +.ty-product-notify-email { + width: 200px; + margin-bottom: 15px +} + +.ty-product-notify-email__input { + width: 100% +} + +.ty-product-labels { + position: absolute; + display: flex; + flex-wrap: wrap; + margin-left: -3px; + margin-bottom: -3px; + z-index: 1; + max-width: 100%; + max-height: 100%; + overflow: hidden +} + +.ty-product-labels__item { + display: flex; + background-color: #fc9432; + padding: 5px 10px; + margin-left: 3px; + margin-bottom: 3px; + overflow: hidden +} + +.ty-product-labels__item--link:hover { + opacity: .7 +} + +.ty-product-labels__item--discount { + background-color: #fc9432 +} + +.ty-product-labels__item--shipping { + background-color: #f58d8e +} + +@media(min-width:481px) { + .ty-product-labels__item--mini { + margin-bottom: 1px; + margin-left: 1px; + padding: 2px 7px; + font-size: .9em + } +} + +.ty-product-labels__item--rounded { + border-radius: 3px +} + +.ty-product-labels__content { + color: #fff; + text-overflow: ellipsis; + overflow: hidden; + white-space: nowrap +} + +.ty-product-labels__icon { + display: flex; + align-items: center; + margin-right: .5rem +} + +.ty-product-labels--top-right { + top: 0; + right: 0; + justify-content: flex-end +} + +.ty-product-labels--top-left { + top: 0; + flex-direction: row-reverse; + justify-content: flex-end +} + +.ty-product-labels--bottom-right { + bottom: 0; + right: 0; + justify-content: flex-end +} + +.ty-product-labels--bottom-left { + bottom: 0; + flex-direction: row-reverse; + justify-content: flex-end +} + +@media(min-width:481px) { + .ty-product-labels--mini { + margin-bottom: -1px; + margin-left: -1px + } +} + +.ty-product-labels--static { + position: static +} + +.ty-discount-label { + position: absolute; + right: 0; + top: 0; + background: #fc9432; + color: #fff; + list-style: none +} + +.ty-discount-label__item { + float: left; + height: 28px; + font-size: 14px; + white-space: nowrap; + line-height: 28px; + padding: 0 10px 0 12px; + color: #fff +} + +.ty-value-changer { + display: inline-block; + vertical-align: top; + width: 53px +} + +input.ty-value-changer__input { + float: left; + width: 36px; + height: 33px; + text-align: center +} + +.touch input.ty-value-changer__input { + height: 34px +} + +.ty-value-changer__increase, +.ty-value-changer__decrease { + position: relative; + float: right; + width: 14px; + height: 14px; + border: 1px solid #bcceda; + color: #bcceda; + font-size: 16px; + line-height: 13px; + cursor: pointer; + background: #fff; + border-radius: 3px; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + -o-user-select: none; + user-select: none +} + +.ty-value-changer__increase { + margin-bottom: 1px +} + +.ty-value-changer__increase:hover, +.ty-value-changer__decrease:hover { + color: #bcceda +} + +.no-touch .ty-value-changer__increase:hover, +.no-touch .ty-value-changer__decrease:hover { + background: #bcceda; + color: #fff; + text-decoration: none +} + +.touch .ty-value-changer { + width: 110px +} + +.touch .ty-value-changer__input { + float: right +} + +.touch .ty-value-changer__increase, +.touch .ty-value-changer__decrease { + float: left; + width: 36px; + height: 32px; + font-size: 22px; + line-height: 27px; + background: #bcceda; + color: #fff +} + +.touch .ty-value-changer__increase { + border-right: 0; + float: right +} + +.touch .ty-value-changer__decrease { + border-left: 0 +} + +.ty-period { + clear: both +} + +.ty-period__wrapper { + float: left; + padding-right: 20px +} + +.ty-period__select { + width: 180px +} + +.ty-period__dash { + padding: 0 3px +} + +.ty-calendar__block { + width: 115px; + display: inline-block; + position: relative +} + +.ty-calendar__button { + position: absolute; + top: 15px; + right: 2px; + margin-top: -10px; + margin-right: 8px; + color: #9bb7c7; + vertical-align: middle; + font-size: 155% +} + +.ty-calendar__input { + width: 100% +} + +.ty-calendar-link:hover { + text-decoration: none +} + +.ty-qty-discount { + overflow-x: auto; + margin-bottom: 15px +} + +.ty-qty-discount__table { + margin-top: 10px; + min-width: 200px; + padding: 0; + border: 1px solid #edf2f5 +} + +.ty-qty-discount__table .ty-qty-discount__td { + border: 0; + border-right: 1px solid #edf2f5; + padding: 8px 12px +} + +.tooltip { + display: none; + max-width: 200px; + z-index: 10000; + padding: 9px; + background: rgba(0, 0, 0, .8); + color: #fff; + text-align: left; + font-weight: 400; + opacity: 1; + filter: alpha(opacity=100); + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px +} + +.tooltip p { + color: #fff; + padding: 0 +} + +.tooltip li { + color: #fff +} + +.tooltip-arrow { + position: absolute; + top: -10px; + right: 3px; + display: block; + width: 0; + height: 0; + border-style: solid; + border-width: 0 0 10px 10px; + border-color: transparent transparent rgba(0, 0, 0, .8) transparent +} + +.tooltip.arrow-top .tooltip-arrow { + top: auto; + left: auto; + bottom: -10px; + right: 3px; + border-width: 0 10px 10px 0; + border-color: transparent rgba(0, 0, 0, .8) transparent transparent +} + +.tooltip.right { + padding: 9px; + text-align: left !important +} + +.arrow-top.right .tooltip-arrow { + left: 3px; + right: auto; + border-width: 10px 10px 0 0; + border-color: rgba(0, 0, 0, .8) transparent transparent transparent +} + +.arrow-down.right .tooltip-arrow { + right: auto; + top: -10px; + left: 3px; + border-width: 10px 0 0 10px; + border-color: transparent transparent transparent rgba(0, 0, 0, .8) +} + +.arrow-down.top .tooltip-arrow { + top: auto; + bottom: -10px; + border-width: 10px 0 0 10px; + border-color: rgba(0, 0, 0, .8) transparent transparent transparent +} + +.arrow-down.right.top .tooltip-arrow { + right: auto; + top: auto; + bottom: -10px; + left: 3px; + border-width: 10px 10px 0 0; + border-color: rgba(0, 0, 0, .8) transparent transparent transparent +} + +.tooltip img { + max-width: 100% +} + +.touchevents body { + cursor: pointer +} + +.touchevents.mouseevents body { + cursor: initial +} + +.ty-tooltip-block { + vertical-align: middle; + cursor: pointer +} + +.ty-no-image { + position: relative; + display: block; + border: 1px solid #ebebeb; + background: #fcfcfc; + color: #c8c8c8; + cursor: default; + max-width: 100%; + min-width: 100%; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box +} + +.ty-no-image__icon { + position: absolute; + top: 50%; + left: 50%; + display: inline-block; + margin: -16px 0 0 -16px; + width: 32px; + height: 32px; + font-size: 32px; + line-height: 32px +} + +.ty-spinner { + background: url(../../../../../../../../design/themes/responsive/media/images/spinner.gif?1626074086) no-repeat center center +} + +.ty-grayscale { + filter: url(data:image/svg+xml;utf8;base64,PHN2ZyB4bWxucz1cJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCc+PGZpbHRlciBpZD1cJ2dyYXlzY2FsZVwnPjxmZUNvbG9yTWF0cml4IHR5cGU9XCdtYXRyaXhcJyB2YWx1ZXM9XCcwLjMzMzMgMC4zMzMzIDAuMzMzMyAwIDAgMC4zMzMzIDAuMzMzMyAwLjMzMzMgMCAwIDAuMzMzMyAwLjMzMzMgMC4zMzMzIDAgMCAwIDAgMCAxIDBcJy8+PC9maWx0ZXI+PC9zdmc+I2dyYXlzY2FsZQ==); + filter: grayscale(100%); + -webkit-filter: grayscale(100%); + filter: gray +} + +.ty-grayscale:hover { + filter: url(data:image/svg+xml;utf8;base64,PHN2ZyB4bWxucz1cJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCc+PGZpbHRlciBpZD1cJ2dyYXlzY2FsZVwnPjxmZUNvbG9yTWF0cml4IHR5cGU9XCdtYXRyaXhcJyB2YWx1ZXM9XCcxIDAgMCAwIDAsIDAgMSAwIDAgMCwgMCAwIDEgMCAwLCAwIDAgMCAxIDBcJy8+PC9maWx0ZXI+PC9zdmc+I2dyYXlzY2FsZQ==); + filter: grayscale(0%); + -webkit-filter: grayscale(0%) +} + +.ty-status-info label { + display: block; + margin: 0 20px 10px 0 +} + +.ty-select-block { + position: absolute; + top: 33px; + left: 0; + z-index: 1022; + min-width: 50px; + border: 1px solid #7ea1b7; + background-color: #fff +} + +.ty-select-block { + border-bottom-left-radius: 4px; + border-bottom-right-radius: 4px +} + +.ty-select-wrapper { + position: relative +} + +.ty-select-block__a { + cursor: pointer; + display: block; + padding: 7px 13px 4px; + color: #5a87a2; + border: 1px solid transparent +} + +.ty-select-block__a:hover { + background: #e0e9ee; + color: #5a87a2; + text-decoration: none +} + +.ty-select-block__a.open, +.ty-select-block__a.open:hover { + background: #7ea1b7; + color: #fff +} + +.ty-select-block__a.open .ty-select-block__arrow { + color: #fff +} + +.ty-select-block__a-item { + display: inline-block; + vertical-align: top +} + +.ty-select-block__arrow { + margin-left: 3px; + font-size: 140%; + color: #6a93ac +} + +input.ty-select-block__input { + margin: 5px 10px; + width: 220px +} + +.ty-select-block__list-item .ty-select-block__list-a { + text-decoration: none +} + +.ty-select-block__list-a:hover { + background: #465363; + color: #fff +} + +.ty-select-block__list-a { + display: block; + padding: 7px 14px; + white-space: nowrap; + cursor: pointer +} + +.ty-select-block__list-a:before, +.ty-select-block__list-a:after { + display: table; + content: ""; + line-height: 0; + width: 100% +} + +.ty-select-block__list-a:after { + clear: both +} + +.ty-select-block__txt { + float: left; + padding: 8px 5px 8px 0 +} + +.ty-dropdown-box { + display: inline-block; + position: relative; + color: #34495e +} + +.ty-dropdown-box .ty-icon-down-micro { + position: relative; + top: 5px; + width: 7px; + color: #6a93ac; + font-size: 20px; + line-height: 0 +} + +.ty-dropdown-box__title { + position: relative; + display: inline-block; + padding: 7px 11px 7px 8px; + border: 1px solid transparent +} + +.ty-dropdown-box__title a { + color: #6a93ac +} + +.ty-dropdown-box__title a:hover { + text-decoration: none +} + +.ty-dropdown-box__title:hover { + background: #e0e9ee +} + +.ty-dropdown-box__title .ty-account-info__title { + text-decoration: none; + white-space: nowrap +} + +.ty-dropdown-box__title.open { + z-index: 650; + background: #6a93ac +} + +.ty-dropdown-box__title.open a, +.ty-dropdown-box__title.open i, +.ty-dropdown-box__title.open .ty-minicart-title { + color: #fff +} + +.ty-dropdown-box__content { + position: absolute; + right: 0; + z-index: 600; + margin-top: -1px; + min-width: 220px; + border: 1px solid #7ea1b7; + background: #fff; + text-align: left +} + +.ty-dropdown-box__content { + border-bottom-left-radius: 6px; + border-bottom-right-radius: 6px +} + +.ty-account-info__buttons { + border-bottom-left-radius: 6px; + border-bottom-right-radius: 6px +} + +.top-cart-content .ty-dropdown-box__content { + border-top-left-radius: 6px +} + +.top-cart-content .ty-dropdown-box__title { + border-radius: 6px +} + +.top-cart-content .ty-dropdown-box__title.open { + border-bottom-left-radius: 0; + border-bottom-right-radius: 0 +} + +.ty-dropdown-box__content .buttons-container { + border-top-left-radius: 0; + border-top-right-radius: 0 +} + +.ty-dropdown-box__content .ty-dropdown-box__item { + display: block; + margin-bottom: 0; + padding: 7px 14px +} + +.ty-dropdown-box__content .ty-dropdown-box__item:hover { + background: #465363; + color: #fff +} + +.ty-dropdown-box__content .ty-dropdown-box__item:hover a { + display: block; + color: #fff +} + +.ty-dropdown-box__content .ty-account-info__orders { + padding: 14px 14px 7px; + margin-top: 20px; + background: #f7f9fa +} + +.ty-dropdown-box__content .ty-account-info__buttons { + padding: 15px 14px 16px; + margin-top: -6px; + background: #f7f9fa +} + +.ty-dropdown-box__content .ty-account-info__name:hover { + background: 0 0; + color: #34495e +} + +.ty-minicart__icon { + color: #5a87a2; + top: 7px; + font-size: 14px; + position: absolute +} + +.ty-minicart__icon.ty-icon-cart { + font-size: 16px; + top: 8px +} + +.ty-account-info { + padding-top: 2px +} + +.ty-account-info__title { + padding: 0 5px +} + +.ty-account-info__user-arrow { + position: relative; + top: 5px; + width: 7px; + color: #34495e; + font-size: 20px; + line-height: 0 +} + +.logged.ty-sidebox__title .ty-account-info__user-arrow { + display: none +} + +.logged .ty-account-info__title, +.logged .ty-account-info__user-arrow { + color: #5a87a2 +} + +.ty-account-info__item { + padding: 0; + margin-bottom: 12px +} + +.ty-account-info__item .ty-account-info__a { + text-decoration: none +} + +.ty-account-info__name { + padding-bottom: 10px +} + +.ty-account-info__orders { + padding: 15px 0 4px +} + +.ty-account-info__orders-txt { + color: #6c6c6c +} + +.ty-account-info__orders-input { + margin: 5px 0 0 +} + +.ty-dropdown-box__content .ty-account-info__buttons .ty-btn { + display: block; + width: 100%; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box +} + +.ty-dropdown-box__content .ty-account-info__buttons .ty-btn+.ty-btn { + margin: 10px 0 0 +} + +.ty-login { + margin-top: 30px; + min-height: 200px +} + +.ty-login__input { + margin: 0; + width: 100% +} + +.ty-login__remember-me { + padding: 6px 0 +} + +.ty-login__filed-label { + width: auto; + color: #313a45 +} + +.ty-password-forgot__label { + float: left +} + +a.ty-password-forgot__a { + float: right; + padding: 6px 0 +} + +.ty-recover-password { + margin-top: 30px +} + +.ty-login-reglink__a { + display: inline-block; + padding: 0 0 10px +} + +.ty-login-popup { + min-width: 295px; + max-width: 310px; + font-family: varela round, sans-serif; + font-size: 14px +} + +.ty-login-popup .ty-login__input { + margin: 0; + padding: 8px 5px 7px; + height: 36px; + font-size: 115% +} + +.ty-captcha__img { + border: 1px solid #c7c7c7; + cursor: pointer +} + +.ty-captcha__label { + display: inline-block; + margin-bottom: 5px +} + +.ty-captcha__code { + display: inline-block; + min-width: 130px; + vertical-align: top +} + +.ty-captcha__refresh { + position: relative; + vertical-align: middle; + margin-left: 7px; + color: #8d8d8d; + font-size: 14px; + cursor: pointer +} + +.ty-captcha__input { + margin: 0; + margin-right: 10px; + padding: 3px; + width: 120px; + vertical-align: top +} + +.ty-checkout__login .ty-captcha__input { + width: 110px; + margin-bottom: 5px +} + +.ty-checkout__login .buttons-container { + background: 0 0; + margin: 0 +} + +.ty-login-popup .ty-captcha__input { + width: 140px; + margin-bottom: 6px +} + +.ty-captcha__txt { + clear: both; + padding-top: 3px; + color: #465363 +} + +.ty-login-info { + margin: 46px 0 0 59px +} + +.ty-login-info__title, +.ty-login-info h4 { + padding-bottom: 10px; + margin: 0; + font-size: 19px; + color: #bdc3c7 +} + +.ty-login-info__txt { + color: #bdc3c7 +} + +.ty-success-registration__text { + display: block; + padding: 7px 0 40px; + line-height: 170% +} + +.ty-success-registration__item { + display: inline-block; + vertical-align: top; + margin-bottom: 30px; + padding-left: 17px; + min-height: 60px; + width: 48%; + border-left: 1px solid #dde6ec; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box +} + +.success-registration__a { + font-weight: 700 +} + +.ty-success-registration__info { + display: block; + margin-top: 10px; + color: #9bb7c7 +} + +.ty-breadcrumbs { + position: relative; + margin-bottom: 14px; + padding: 20px 105px 10px 0; + color: #fff +} + +.ty-breadcrumbs__arrow, +.ty-breadcrumbs__a, +.ty-breadcrumbs__current { + display: inline-block; + padding: 2px +} + +.ty-breadcrumbs__current { + color: #465363 +} + +.ty-breadcrumbs__a { + display: inline-block; + color: #9bb7c7 +} + +.ty-breadcrumbs__slash { + display: inline-block; + margin: 0 6px; + padding: 2px 0; + color: #9bb7c7 +} + +.ty-breadcrumbs__a:hover { + color: #9bb7c7 +} + +.ty-product-switcher { + position: absolute; + top: 25px; + right: 0; + padding: 0 24px +} + +.ty-product-switcher__a { + display: inline-block; + position: absolute; + cursor: pointer; + top: -2px; + padding: 0; + font-size: 18px +} + +.ty-product-switcher__a:hover { + text-decoration: none +} + +.ty-product-switcher__a-left { + float: left; + left: 0 +} + +.ty-product-switcher__a-right { + float: right; + right: 0 +} + +.ty-product-switcher__icon { + color: #8babbe +} + +.ty-product-switcher__a:hover .ty-product-switcher__icon { + color: #abc3d1 +} + +.ty-product-switcher__a.disabled, +.ty-product-switcher__a.disabled .ty-product-switcher__icon, +.ty-product-switcher__a.disabled:hover .ty-product-switcher__icon { + background: 0 0; + color: #ccdae3; + cursor: default +} + +.ty-product-switcher span { + float: left; + font-size: 85%; + padding: 2px; + color: #ccdae3 +} + +.ty-section { + margin: 20px 0 15px +} + +.ty-section__title { + padding: 13px 15px 11px; + cursor: pointer; + background: #ecf0f1; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + -o-user-select: none; + user-select: none +} + +.ty-section__switch { + float: right +} + +.ty-section__arrow { + padding-left: 6px +} + +.open .ty-section_switch_off, +.ty-section_switch_on { + display: block +} + +.open .ty-section_switch_on, +.ty-section_switch_off { + display: none +} + +.ty-section__body { + overflow: hidden; + padding: 20px 20px 0; + border: 1px solid #ecf0f1; + border-top: none +} + +.ty-section__body .buttons-container { + margin: 30px 0 0 -20px; + padding: 15px 20px; + width: 100%; + background: #edf2f5 +} + +.ty-search-result { + padding: 12px 7px +} + +.ty-search-form__inline-input { + width: 190px +} + +.ty-search-result:hover { + background: #edf2f5 +} + +.ty-search-form__input { + width: 170px +} + +.ty-search-form__input-large { + width: 200px +} + +.ty-subcategories-field { + float: left; + margin-left: 10px +} + +.ty-search-form .ty-search-form__buttons-container { + margin-bottom: 0 +} + +.ty-search-block { + position: relative +} + +.ty-search-magnifier { + position: absolute; + top: 5px; + right: 5px; + padding: 0; + width: 20px; + height: 26px; + border: none; + background: 0 0; + color: #bcceda; + font-size: 145%; + cursor: pointer +} + +input.ty-search-block__input { + display: block; + padding: 7px 30px 7px 10px; + width: 100%; + height: 33px; + border: 1px solid #bcceda; + border-radius: 25px; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + -webkit-transition: all .2s ease-in-out; + -moz-transition: all .2s ease-in-out; + -o-transition: all .2s ease-in-out; + transition: all .2s ease-in-out +} + +.ty-search-block__input:focus { + outline: 0; + border: 1px solid #465363; + background-color: #fff +} + +.vendor-stores-block-grid h2 { + margin: 0; + font-size: 25px; + text-align: center +} + +.ty-sort-container { + padding-left: 10px; + background: #edf2f5; + margin: 28px 0; + display: inline-block; + box-sizing: border-box; + width: 100%; + border-radius: 4px +} + +.ty-sort-container__views-icons { + display: inline-block; + float: right +} + +.ty-sort-container__views-a { + display: block; + color: #9bb7c7; + float: left; + padding: 10px 11px; + width: 15px; + height: 17px; + font-size: 125% +} + +.ty-sort-container__views-a:hover { + text-decoration: none +} + +.ty-sort-container__views-a.active { + background: #dde6ec +} + +.ty-sort-dropdown { + display: inline-block; + position: relative +} + +.ty-sort-dropdown .ty-sort-dropdown__wrapper { + text-decoration: none +} + +.ty-sort-dropdown__wrapper { + padding: 5px 7px 9px; + display: inline-block; + color: #34495e; + cursor: pointer +} + +.ty-sort-dropdown__icon { + font-size: 20px; + position: relative; + padding-left: 10px; + top: 5px +} + +.ty-sort-dropdown__wrapper:hover { + background: #e3ebf0 +} + +.ty-sort-dropdown__wrapper.open { + background: #5a87a2; + color: #fff +} + +.ty-sort-dropdown__content { + position: absolute; + z-index: 100; + border: 1px solid #97a0a5; + background: #fff; + min-width: 200px +} + +.ty-sort-dropdown__content .ty-sort-dropdown__content-item-a { + text-decoration: none +} + +.ty-sort-dropdown__content-item-a { + padding: 7px 14px; + color: #465363; + display: block +} + +.ty-sort-dropdown__content-item-a:hover { + background: #465363; + color: #fff +} + +.ty-subcategories__item { + display: inline-block; + margin: 5px 20px 5px 0 +} + +.ty-subcategories-img { + display: block; + margin: auto; + padding-bottom: 10px +} + +.ty-subcategories-block { + margin: 10px 0; + display: inline-block; + min-width: 350px; + vertical-align: top; + width: 100% +} + +.ty-subcategories-block__item { + padding-bottom: 10px; + text-align: center +} + +.ty-subcategories-block__a { + font-weight: 700 +} + +.ty-feature { + margin: 30px 0 +} + +.ty-feature:before, +.ty-feature:after { + display: table; + content: ""; + line-height: 0; + width: 100% +} + +.ty-feature:after { + clear: both +} + +.ty-feature__image { + float: left; + margin: 0 25px 10px 0 +} + +.ty-feature__description { + line-height: 140%; + overflow: hidden +} + +.ty-product-feature { + padding: 10px +} + +.ty-product-feature:nth-child(2n) { + background: #fafbfc +} + +.ty-product-feature__label { + display: inline-block; + width: 280px; + vertical-align: top +} + +.ty-product-feature__value { + display: inline-block; + margin-left: 5px +} + +.ty-product-feature .ty-product-feature__multiple { + list-style: none; + padding-left: 0 +} + +.ty-product-feature .ty-product-feature__multiple-item { + list-style: none; + margin-bottom: 5px +} + +.ty-product-feature-group { + margin-bottom: 10px +} + +.ty-product-feature-group .ty-subheader { + padding: 15px 0 6px; + margin: 0; + font-size: 120% +} + +.ty-features-all__group { + margin-bottom: 50px +} + +.ty-features-all__list-item { + padding-bottom: 8px +} + +.ty-features-all__list-a { + font-size: 110% +} + +.ty-features-list { + padding: 3px 0 +} + +.ty-tygh { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box +} + +.ty-helper-container { + position: relative +} + +.ty-helper-container { + background: transparent repeat scroll +} + +.container { + min-height: 0; + min-width: 0 +} + +.container-fluid { + max-width: 1200px; + min-width: 280px; + margin: 0 auto +} + +.tygh-footer { + min-height: 36px +} + +.bottom-copyright { + margin-top: 15px; + color: #bdc3c7; + font-size: 13px +} + +.ty-payment-icons { + margin: 10px 0 +} + +.footer-no-wysiwyg ul { + margin: 10px 0 0 0; + padding-left: 0 +} + +.footer-no-wysiwyg ul li { + list-style-type: none +} + +.ty-social-link-block { + margin-top: 13px; + margin-right: 30px; + margin-bottom: 25px; + font-size: 0 +} + +.ty-social-link { + display: inline-block; + margin-top: 5px; + margin-bottom: 5px; + margin-right: 10px; + position: relative; + vertical-align: bottom; + top: 7px +} + +@media(min-width:980px) { + .ty-social-link { + margin-right: 15px + } +} + +.ty-social-link a { + color: #fff; + display: block +} + +.ty-social-link i { + display: inline-block; + vertical-align: middle; + padding-right: 6px; + font-size: 38px; + color: #fff +} + +.ty-social-link span { + display: inline-block; + vertical-align: middle +} + +h3.ty-social-link__title { + display: inline-block; + vertical-align: middle; + font-size: 22px; + font-weight: 400; + margin: 0 20px 5px 0; + color: #fff +} + +.ty-social-link:last-child { + margin-right: 0 +} + +.ty-footer-menu__icon-open, +.ty-footer-menu__icon-hide { + display: none; + color: #bdc3c7 +} + +.footer-stay-connected { + background: #465363; + color: #fff; + min-height: 84px !important +} + +.ty-footer-menu { + color: #9ba1a7 +} + +.ty-footer-menu>.row { + padding: 30px 0 15px +} + +.tygh-footer>div { + background-color: #081b29; + background-image: -moz-linear-gradient(top, #081b29, #081b29); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#081b29), to(#081b29)); + background-image: -webkit-linear-gradient(top, #081b29, #081b29); + background-image: -o-linear-gradient(top, #081b29, #081b29); + background-image: linear-gradient(to bottom, #081b29, #081b29); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff081b29', endColorstr='#ff081b29', GradientType=0); + width: auto; + min-width: none; + max-width: none; + padding: 0 +} + +.tygh-footer .ty-footer-grid__full-width { + float: none; + width: auto +} + +.container-fluid .ty-footer-grid__full-width { + padding-left: 15px; + padding-right: 15px +} + +.footer-copyright { + background-color: #0c293e +} + +.ty-footer-menu__header, +.ty-footer-general__header { + position: relative; + color: #bdc3c7; + font-weight: 700; + font-size: 19px; + padding-top: 20px; + margin-bottom: 0; + cursor: pointer +} + +.ty-footer-menu__items, +.ty-footer-general__body { + margin: 10px 0 20px +} + +.ty-footer-menu__item { + margin-bottom: 8px +} + +.ty-footer-menu__item a { + color: #bdc3c7 +} + +.ty-footer-menu__item a:hover { + color: #465363 +} + +.ty-product-block { + margin: 5px 0 30px; + margin-top: 5px; + position: relative; + display: table; + width: 100%; + table-layout: fixed +} + +.ty-product-block-title { + margin-bottom: 10px; + font-size: 24px; + color: #465363; + word-wrap: break-word +} + +.ty-brand { + margin: 5px 0 +} + +.ty-product-block__img-wrapper { + position: relative; + float: left; + margin-right: 20px; + padding: 0 0 10px; + min-height: 282px; + min-width: 282px; + max-width: 282px +} + +@media(max-width:767px) { + .ty-product-block__img-wrapper { + max-width: 100% + } +} + +.ty-product-block__img-wrapper img { + display: block; + margin: 0 auto +} + +.ty-product-block__left { + display: table-cell; + overflow: hidden +} + +.ty-product-block__note-wrapper { + position: relative +} + +.ty-product-block__note { + position: absolute; + right: 0; + padding: 21px 0 0; + width: 200px; + line-height: 140%; + color: #798d8e; + word-wrap: break-word +} + +.ty-product-block__note-inner { + right: -200px +} + +.ty-product-prices { + margin: 20px 0 +} + +.ty-product-block__note .product-promo-header { + display: block; + margin-bottom: 5px; + font-weight: 700 +} + +.ty-product-block__price-actual { + margin: 10px 0 +} + +.ty-product-block__price-actual .ty-price-num { + font-family: varela round, sans-serif; + font-size: 24px; + font-weight: 700; + font-style: normal; + text-decoration: none +} + +.ty-product-block__option .help-inline { + margin-left: 120px; + display: block; + text-align: left +} + +.ty-product-block__option, +.ty-product-block__advanced-option, +.ty-product-block__field-group { + margin-bottom: 10px +} + +.ty-product-block__field-group .ty-control-group { + margin-bottom: 0 +} + +.ty-product-block__sku .ty-control-group { + margin: 0 +} + +.ty-product-block__description-title { + margin: 20px 0 5px; + font-size: 130%; + font-weight: 400 +} + +.ty-product-block__button { + margin-top: 20px +} + +.ty-product-block__button .ty-btn { + margin-right: 20px; + margin-bottom: 10px +} + +.ty-product-block__button .ty-btn~.ty-btn { + margin-left: 10px +} + +.ty-product-block__button .button-container { + display: inline-block +} + +.content-description { + line-height: 1.4; + word-wrap: break-word +} + +.ty-product-block .ty-discount-label { + z-index: 1 +} + +.ty-product-bigpicture__img { + position: relative; + padding-top: 20px +} + +.ty-product-bigpicture__img:before, +.ty-product-bigpicture__img:after { + display: table; + content: ""; + line-height: 0; + width: 100% +} + +.ty-product-bigpicture__img:after { + clear: both +} + +.ty-product-bigpicture__img .ty-pict { + max-height: 420px; + margin: 0 auto +} + +.ty-product-bigpicture__as-thumbs .ty-product-thumbnails { + float: left; + margin: 0 -60px 0 0; + width: 55px !important; + position: relative; + z-index: 5 +} + +.ty-product-bigpicture .ty-product-bigpicture-thumbnails_gallery { + padding-left: 60px +} + +.ty-product-bigpicture .ty-product-img { + border: 0; + float: right; + width: 100% +} + +.ty-product-bigpicture .ty-previewer { + text-align: center; + margin-left: 60px +} + +.ty-product-bigpicture__no-thumbs .ty-previewer { + margin-left: 0 +} + +.ty-product-bigpicture .ty-product-thumbnails__item { + margin: 0 10px 10px 0 +} + +.ty-product-bigpicture__left { + width: 100%; + float: left; + text-align: center +} + +.ty-product-bigpicture__left-wrapper { + margin: 20px 350px 0 0 +} + +.ty-product-bigpicture .ty-product-block-title { + font-size: 28px; + margin-bottom: 20px +} + +.ty-product-bigpicture__right { + float: left; + margin-left: -320px; + width: 318px; + margin-top: 15px; + padding-bottom: 15px; + background: #f7f9fa; + border: 1px solid #ebebeb; + text-align: center; + box-sizing: border-box +} + +.ty-product-bigpicture .ty-product-block__note { + position: static; + width: auto +} + +.ty-product-bigpicture__brand .ty-features-list { + padding: 16px 0; + border-bottom: 1px solid #dddfdf; + box-shadow: 0 1px 0 #fff; + background: #fff +} + +.ty-product-bigpicture__prices { + padding: 20px 0; + margin: 0 10px 20px; + border-bottom: 1px solid #dddfdf; + box-shadow: 0 1px 0 #fff +} + +.ty-product-bigpicture__prices .ty-list-price { + font-size: 14px +} + +.ty-product-bigpicture__prices .ty-product-block__price-actual .ty-price-num { + font-size: 30px +} + +.ty-product-bigpicture__prices .ty-product-block__price-old { + display: flex; + flex-wrap: wrap; + justify-content: center; + align-items: center +} + +.ty-product-bigpicture__prices .ty-product-block__price-old>span>.ty-list-price { + margin-right: 5px +} + +.ty-product-bigpicture__prices .ty-save-price { + color: #fc8719 +} + +.ty-product-bigpicture__prices .ty-save-price__percent { + display: none +} + +.ty-product-bigpicture__sidebar-bottom { + width: 230px; + padding: 0 20px; + margin: 0 auto; + text-align: left +} + +.ty-product-bigpicture .ty-control-group__label { + display: inline-block; + float: none; + width: 95px; + text-align: left +} + +.ty-product-bigpicture .ty-product-block__note, +.ty-product-bigpicture .ty-product-block__button { + text-align: center +} + +.ty-product-bigpicture .ty-product-block__note { + padding-top: 8px +} + +.ty-product-bigpicture .ty-product-block__button .ty-btn { + margin-right: 0 +} + +.ty-product-bigpicture .ty-product-options__description, +.ty-product-bigpicture .ty-product-variant-image { + margin-left: 0 +} + +.ty-product-bigpicture .ty-product-options .ty-input-text { + width: auto; + max-width: 105px +} + +.ty-product-bigpicture .ty-product-options { + margin-bottom: 10px +} + +.ty-product-bigpicture .ty-product-block__option .help-inline { + margin: 0 0 12px +} + +.ty-product-options__title { + padding-right: 5px; + font-weight: 700 +} + +.ty-product-options { + margin-bottom: 15px +} + +.ty-product-options .ty-table { + margin-top: 10px +} + +.ty-product-options .ty-input-text { + width: 240px +} + +.ty-product-options__item-label { + font-weight: 700 +} + +.ty-product-options__description { + margin: 5px 0 0 120px; + padding: 0; + color: #abc3d1; + font-size: 85% +} + +.ty-product-options__image { + display: inline-block; + margin: 2px 0; + border: 2px solid #fff; + cursor: pointer; + min-height: 52px +} + +.ty-product-options__image--wrapper { + display: inline-block; + vertical-align: middle; + margin: 2px 0; + border: 2px solid #fff +} + +.ty-product-options__image--wrapper--active { + border-color: #abc3d1 +} + +.ty-product-options__image--wrapper .ty-product-options__image { + margin: 0; + border: 0 +} + +.ty-product-options__image--wrapper .ty-no-image { + cursor: unset +} + +.ty-product-options__radio { + display: none +} + +.ty-product-options__radio--label { + display: inline-block; + margin: 2px 8px 2px 0; + border: 2px solid #edf2f5; + cursor: pointer; + padding: 6px 10px +} + +.ty-product-options__radio:checked+.ty-product-options__radio--label, +.ty-product-options__radio--label:hover, +.ty-product-options__radio--label:active { + border-color: #abc3d1 +} + +.product-variant-image-selected { + border-color: #abc3d1 +} + +.ty-product-options__elem { + display: inline-block +} + +.ty-product-options__fileuploader .help-inline { + margin-left: 0 +} + +.ty-product-options__box { + display: inline-block; + padding: 6px 0 +} + +.ty-product-options__box .help-inline { + margin-left: 0 +} + +.ty-product-variant-image { + margin-left: 120px; + padding: 10px 0 +} + +.ui-dialog .ty-product-variant-image { + margin-left: 134px +} + +.ty-product-options__textarea { + min-width: 240px; + min-height: 60px; + resize: vertical +} + +.ty-product-options__no-combinations { + padding-top: 0; + color: #b94a48 +} + +.ty-product-img { + border: 1px solid #edf2f5; + position: relative +} + +.ty-product-img .ty-no-image { + border: 0 +} + +.ty-product-thumbnails { + margin-top: 10px; + text-align: left +} + +.ty-product-thumbnails__item { + display: block; + float: left; + margin: 0 5px 5px 0; + border: 1px solid #edf2f5 +} + +.ty-product-thumbnails__item.active { + border-color: #888 +} + +.ty-previewer { + position: relative; + height: 100%; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + justify-items: center; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center +} + +.ty-previewer:hover .previewer__icon { + visibility: visible +} + +.ty-previewer__icon { + position: absolute; + top: 50%; + left: 50%; + z-index: 1; + display: block; + visibility: hidden; + margin: -18px 0 0 -18px; + padding: 0; + width: 37px; + height: 39px; + background: url(../../../../../../../../design/themes/responsive/media/images/icons/zoom_icon.png?1626074086) no-repeat; + opacity: .7 +} + +@media only screen and (-webkit-min-device-pixel-ratio:2), +only screen and (min-device-pixel-ratio:2) { + .ty-previewer__icon { + background-image: url(../../../../../../../../design/themes/responsive/media/images/icons/zoom_icon@2x.png?1626074086); + background-size: 37px, 39px + } +} + +.ty-previewer__icon:hover { + opacity: 1 +} + +.ty-thumbs-wrapper { + position: relative +} + +.ty-thumbs-wrapper .ty-icon-left-circle, +.ty-thumbs-wrapper .ty-icon-right-circle { + position: absolute; + top: 50%; + visibility: hidden; + margin-top: -10px; + width: 20px; + height: 20px; + font-size: 20px; + cursor: pointer; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + -o-user-select: none; + user-select: none +} + +.touch .ty-grid-list__item .ty-icon-left-circle, +.touch .ty-grid-list__item .ty-icon-right-circle { + visibility: visible +} + +.ty-thumbs-wrapper .ty-icon-left-circle { + left: 3px +} + +.ty-thumbs-wrapper .ty-icon-right-circle { + right: 3px +} + +.ty-popup-tabs { + padding-top: 25px; + margin-top: 25px; + border-top: 1px dotted #dedede +} + +.ty-popup-tabs__item { + display: inline-block; + padding: 2px 15px 2px 0; + text-transform: uppercase; + font-size: 85%; + cursor: pointer +} + +.ty-popup-tabs__icon { + margin-right: 3px; + font-size: 14px +} + +.ty-fileuploader { + padding: 6px 0 0 +} + +.ty-fileuploader__file-section { + overflow: hidden +} + +.ty-fileuploader__file-local { + position: relative; + overflow: hidden; + cursor: pointer +} + +.ty-fileuploader__file-input { + position: absolute; + top: 0; + left: 0; + padding: 0; + width: 100%; + height: 300px; + border: 0; + opacity: 0; + cursor: pointer +} + +span.ty-fileuploader__filename { + padding: 0 0 0 5px; + position: relative; + top: -2px +} + +.ty-fileuploader__icon { + position: relative; + top: 2px; + margin-right: 5px; + cursor: pointer +} + +.ty-fileuploader.cm-failed-field .ty-fileuploader__a { + color: #b94a48; + font-weight: 700 +} + +.ty-quick-view__wrapper { + width: 700px +} + +.ty-quick-view__wrapper .ty-product-block__left { + max-width: 450px; + padding-left: 20px +} + +a.ty-quick-view__title { + font-size: 24px; + font-weight: 700; + color: #465363 +} + +.ty-quick-view__title .ty-product-block-title { + margin-bottom: 0 +} + +.ty-quick-view-tools { + position: relative; + height: 20px +} + +.ty-quick-view-tools .ty-product-switcher { + top: 0 +} + +.ty-quick-view__wrapper .ty-product-block__img { + display: table-cell; + vertical-align: top; + margin-right: 20px; + position: relative +} + +.ty-quick-view__wrapper .ty-product-img { + margin-bottom: 15px +} + +.ty-quick-view__wrapper .ty-product-block__description { + word-wrap: break-word +} + +.ty-quick-view__wrapper .ty-product-block__note { + position: static; + padding-top: 10px; + width: 100% +} + +.ty-quick-view-button { + padding-top: 5px; + text-align: left +} + +.touchevents .ty-mainbox-container .ty-grid-list__control, +.touchevents .ty-grid-list__item:hover .ty-quick-view-button, +.touchevents .ty-grid-list__item .ty-quick-view-button { + display: none +} + +.touchevents .ty-grid-list__item--overlay:hover { + border-color: transparent +} + +.touchevents .ty-grid-list__item--overlay .ty-grid-list__control { + display: none +} + +.ty-product-notification__body { + padding: 15px 20px; + min-height: 72px +} + +.ty-product-notification__body .ty-product-options { + display: block; + padding: 0 +} + +.ty-product-notification__body .ty-control-group__label { + display: none +} + +.ty-product-notification__body .ty-product-options__info { + margin-top: 30px; + padding-left: 0; + max-height: 420px; + overflow-y: auto; + width: 100% +} + +.ty-product-notification__body .ty-product-options-name { + width: 110px; + padding: 6px 0; + float: left +} + +.ty-product-notification__body .ty-product-options-content { + width: 378px; + padding: 6px 0; + float: left +} + +.ty-product-notification__item { + margin-bottom: 20px +} + +.ty-product-notification__content { + overflow: hidden +} + +.ty-product-notification__product-name { + float: left; + display: block; + margin-bottom: 7px +} + +.ty-product-notification__price { + float: right; + margin-left: 25px +} + +.ty-product-notification__image, +.ty-product-notification__body .ty-no-image { + float: left; + margin-right: 20px; + padding: 10px; + min-width: 0 +} + +.ty-product-notification__divider { + margin: 0 0 10px +} + +.ty-product-notification__amount { + width: 46% +} + +.ty-product-notification__subtotal { + font-weight: 700; + width: 46%; + text-align: right +} + +.ty-product-notification__body ul ul { + border-left: 1px solid #edf2f5; + margin-left: 70px +} + +.ty-product-notification__buttons { + padding: 15px 20px; + background: #ecf0f1 +} + +.ty-product-filters__wrapper { + background: #edf2f5; + border-radius: 6px +} + +.ty-product-filters { + padding-top: 5px; + line-height: 140%; + margin-left: 7px; + margin-bottom: 15px +} + +.ty-product-filters__variants { + overflow-y: auto; + line-height: 1.4em; + margin-bottom: 7px +} + +.ty-product-filters__group { + padding: 2px 0; + margin: 5px 3px +} + +.ty-product-filters__group label { + font-weight: initial +} + +.ty-product-filters__group label, +.ty-product-filters__group label>input { + cursor: pointer +} + +.ty-product-filters__group label.disabled, +.ty-product-filters__group label.disabled>input { + background-color: transparent; + color: #dce0e6; + cursor: default +} + +.ty-product-filters__item-more { + margin-bottom: -9px +} + +.ty-product-filters__tools { + padding: 10px 12px +} + +.ty-product-filters__extra-block { + margin-top: -3px +} + +.ty-product-filters__extra-link { + border-color: #abc3d1; + cursor: pointer +} + +.ty-product-filters__color-filter { + display: flex; + flex-wrap: wrap +} + +.ty-product-filters__color-list-item { + display: flex; + position: relative; + padding: 0; + margin: 3px +} + +.ty-product-filters__color-filter-item { + display: flex; + padding: 5px; + justify-content: center; + align-items: center +} + +.ty-product-filters__color-filter-item:hover { + cursor: pointer +} + +.ty-product-filters__color-filter-item--disabled { + opacity: .3 +} + +.ty-product-filters__color-filter-item--disabled:hover { + cursor: auto +} + +.ty-product-filters__color-filter-item:hover .ty-product-filters__color-filter-check, +.ty-product-filters__color-filter-item:focus .ty-product-filters__color-filter-check { + opacity: 1 +} + +.ty-product-filters__color-filter-item--disabled:hover .ty-product-filters__color-filter-check { + opacity: 0 +} + +.ty-product-filters__color-filter-check { + position: absolute; + color: #fff; + opacity: 0 +} + +.ty-product-filters__color-filter-check--invert { + color: #555 +} + +.ty-product-filters__color-filter-check--selected { + opacity: 1 +} + +.ty-product-filters__color-filter-checkbox { + position: absolute; + opacity: 0 +} + +.ty-product-filters__color-filter-swatch { + width: 26px; + height: 26px; + border-radius: 13px; + box-shadow: inset 0 0 0 1px rgba(0, 0, 0, .3) +} + +.ty-product-filters__color-filter-swatch--selected { + box-shadow: inset 0 0 0 1px rgba(0, 0, 0, .3) +} + +.ty-product-filters__color-filter-checkbox:focus+.ty-product-filters__color-filter-item .ty-product-filters__color-filter-swatch { + box-shadow: inset 0 0 0 1px #f58d8e, inset 0 0 0 3px #fff +} + +.ty-filter-icon { + position: absolute; + top: 3px; + left: 0; + display: inline-block; + width: 10px; + height: 10px; + border: 1px solid #ccc; + -webkit-border-radius: 2px; + -moz-border-radius: 2px; + border-radius: 2px; + font-size: 70%; + background: #fff +} + +.ty-filter-icon__check, +.ty-filter-icon__delete { + position: absolute; + top: 50%; + left: 50%; + margin: -3px 0 0 -3px; + width: 8px; + height: 8px; + font-size: 8px +} + +.ty-filter-icon__check, +.ty-filter-icon__delete { + display: none +} + +.ty-product-filters__title { + color: #798ba0; + font-weight: 600 +} + +.ty-product-filters__title .ty-icon-cancel-circle { + position: relative; + font-size: 16px; + top: 4px; + padding-left: 5px; + padding-right: 5px; + margin-right: 5px +} + +.ty-product-filters__title .ty-icon-cancel-circle:hover { + color: #465363 +} + +.ty-product-filters__switch { + padding: 10px; + cursor: pointer; + border-bottom: 1px solid #f3f5f7 +} + +.ty-product-filters__switch-right, +.ty-product-filters__switch-down { + margin-right: 5px; + color: #abc3d1; + float: right; + font-size: 115% +} + +.ty-product-filters__switch-down { + margin-right: 4px +} + +.open.ty-product-filters__switch .ty-product-filters__switch-down, +.ty-product-filters__switch-right { + display: none +} + +.open.ty-product-filters__switch .ty-product-filters__switch-right, +.ty-product-filters__switch-down { + position: relative; + display: inline-block; + top: 2px +} + +.ty-product-filters__advanced-button, +.ty-product-filters__reset-button { + position: relative; + color: #73859c; + font-size: 85% +} + +.ty-product-filters__reset-button { + float: right +} + +.ty-product-filters__reset-icon { + position: absolute; + left: -14px; + font-size: 130% +} + +.ty-product-filters__search { + position: relative; + padding: 10px 10px 0 3px +} + +.ty-product-filters__search .ty-input-text-medium { + padding-right: 28px; + width: 100% +} + +.ty-product-filters__search-icon { + position: absolute; + right: 18px; + top: 18px +} + +.ty-product-filters__no-items-found { + margin-bottom: 20px; + margin-right: 10px +} + +.ty-horizontal-product-filters { + padding-left: 10px; + background: #edf2f5; + margin: 0 0 30px +} + +.ty-horizontal-product-filters-dropdown { + display: inline-block; + position: relative +} + +.ty-horizontal-product-filters-dropdown .ty-horizontal-product-filters-dropdown__wrapper { + text-decoration: none +} + +.ty-horizontal-product-filters-dropdown__wrapper { + padding: 5px 7px 9px; + display: inline-block; + color: #34495e; + cursor: pointer +} + +.ty-horizontal-product-filters-dropdown__wrapper.active { + background: #e3ebf0 +} + +.ty-horizontal-product-filters-dropdown__icon { + font-size: 20px; + position: relative; + padding-left: 10px; + top: 5px +} + +.ty-horizontal-product-filters-dropdown__wrapper:hover { + background: #e3ebf0 +} + +.ty-horizontal-product-filters-dropdown__wrapper.open { + background: #5a87a2; + color: #fff +} + +.ty-horizontal-product-filters-dropdown__content { + position: absolute; + z-index: 101; + border: 1px solid #97a0a5; + background: #fff; + min-width: 250px +} + +.ty-horizontal-filters-content-to-right { + left: 0 +} + +.ty-horizontal-product-filters-dropdown__content .ty-horizontal-product-filters-dropdown__content-item-a { + text-decoration: none +} + +.ty-horizontal-product-filters-dropdown__content-item-a { + padding: 7px 14px; + color: #465363; + display: block +} + +.ty-horizontal-product-filters-dropdown__content-item-a:hover { + background: #465363; + color: #fff +} + +.ty-horizontal-product-filters-dropdown .ty-product-filters { + margin-bottom: 0 +} + +.ty-horizontal-product-filters-dropdown a .ty-icon-cancel-circle { + position: relative; + font-size: 16px; + top: 3px; + padding-left: 5px +} + +.ty-horizontal-product-filters-dropdown a .ty-icon-cancel-circle:hover { + color: #465363 +} + +.ty-horizontal-product-filters .ty-range-slider, +.ty-horizontal-product-filters .ty-range-slider .ui-slider-range, +.ty-horizontal-product-filters .ty-range-slider .ui-slider-handle { + z-index: 101 +} + +.ty-horizontal-product-filters-dropdown__content .ty-product-filters__tools { + background-color: #edf2f5 +} + +.ty-horizontal-product-filters.ty-selected-product-filters { + margin-bottom: 25px +} + +.cm-date-range { + display: inline-block; + padding: 15px 10px 9px; + margin-bottom: 15px +} + +.cm-date-range a { + color: #465363 +} + +.ty-date-range .ty-icon-calendar { + position: relative; + color: #465363; + font-size: 16px; + margin-right: 3px; + top: 2px +} + +.daterangepicker.dropdown-menu.opensright, +.daterangepicker.dropdown-menu.opensleft { + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; + border: 1px solid #97a0a5; + padding: 10px 8px; + z-index: 101 +} + +.daterangepicker.dropdown-menu.opensright:before, +.daterangepicker.dropdown-menu.opensleft:before, +.daterangepicker.dropdown-menu.opensright:after, +.daterangepicker.dropdown-menu.opensleft:after { + display: none +} + +.daterangepicker .ranges { + min-width: 180px +} + +.daterangepicker>.ranges>ul>li { + color: #465363 +} + +.daterangepicker>.ranges>ul>li.active, +.daterangepicker>.ranges>ul>li:hover { + background: #465363; + border: 1px solid #465363; + color: #fff +} + +.daterangepicker .ranges .range_inputs label { + display: block; + width: auto; + color: #465363 +} + +.daterangepicker_start_input, +.daterangepicker_end_input { + margin-top: 5px; + margin-bottom: 20px +} + +.daterangepicker .input-mini { + width: 80px; + cursor: not-allowed; + background-color: #eee +} + +.daterangepicker button.btn.btn-small.btn-success.applyBtn { + -webkit-transition: .4s; + -moz-transition: .4s; + -o-transition: .4s; + transition: .4s; + padding: 10px 15px; + -webkit-border-radius: 5px; + -moz-border-radius: 5px; + border-radius: 5px; + text-transform: none; + border: 2px solid #000; + background: #fff; + color: #000; + display: inline-block; + margin-bottom: 0; + padding: 6px 14px; + outline: 0; + border: 1px solid transparent; + background: #bdc3c7; + background-image: none; + color: #fff; + vertical-align: middle; + text-align: center; + line-height: 1.428571429; + cursor: pointer; + font-family: varela round, sans-serif; + font-size: 14px; + font-weight: 400; + font-style: normal; + text-decoration: none; + border-radius: 2px; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + -o-user-select: none; + user-select: none; + -webkit-transition: background 200ms; + -moz-transition: background 200ms; + -o-transition: background 200ms; + transition: background 200ms; + background: #46aaf2; + margin-right: 5px +} + +.daterangepicker button.btn.btn-small.btn-success.applyBtn:hover { + background-color: #f58d8e +} + +.daterangepicker button.btn.btn-small.clearBtn { + -webkit-transition: .4s; + -moz-transition: .4s; + -o-transition: .4s; + transition: .4s; + padding: 10px 15px; + -webkit-border-radius: 5px; + -moz-border-radius: 5px; + border-radius: 5px; + text-transform: none; + border: 2px solid #000; + background: #fff; + color: #000; + display: inline-block; + margin-bottom: 0; + padding: 6px 14px; + outline: 0; + border: 1px solid transparent; + background: #bdc3c7; + background-image: none; + color: #fff; + vertical-align: middle; + text-align: center; + line-height: 1.428571429; + cursor: pointer; + font-family: varela round, sans-serif; + font-size: 14px; + font-weight: 400; + font-style: normal; + text-decoration: none; + border-radius: 2px; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + -o-user-select: none; + user-select: none; + -webkit-transition: background 200ms; + -moz-transition: background 200ms; + -o-transition: background 200ms; + transition: background 200ms +} + +.daterangepicker .calendar { + max-width: none !important +} + +.daterangepicker .calendar td.active, +.daterangepicker .calendar td.active:hover { + background-color: #465363; + background-image: -moz-linear-gradient(top, #465363, #465363); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#465363), to(#465363)); + background-image: -webkit-linear-gradient(top, #465363, #465363); + background-image: -o-linear-gradient(top, #465363, #465363); + background-image: linear-gradient(to bottom, #465363, #465363); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff465363', endColorstr='#ff465363', GradientType=0) +} + +.ty-price-slider { + padding: 10px; + margin-bottom: 20px; + color: #909598 +} + +.ty-price-slider__inputs { + padding: 0; + color: #909598 +} + +.ty-price-slider__input-text { + margin: 0 0 5px; + width: 74px +} + +.ty-range-slider__wrapper { + margin-left: -1px; + color: #ccdae3 +} + +.ty-range-slider__item { + position: absolute; + top: -5px; + width: 1px; + height: 10px; + background: #ccdae3 +} + +.ty-range-slider__num { + position: absolute; + top: 21px; + left: -25px; + display: block; + width: 45px; + text-align: center; + font-size: 75%; + cursor: pointer; + color: #909598; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden +} + +.ty-range-slider { + position: relative; + margin: 15px 12px; + height: 5px; + border: 1px solid #ccdae3; + background: #ecf0f1; + border-right: none; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0 +} + +.ty-range-slider .ui-slider-range { + background: #ccdae3; + border: 0; + margin-top: -1px; + height: 7px +} + +.ty-range-slider .ui-slider-handle { + top: -9px; + margin-left: -8px; + width: 11px; + height: 20px; + background: #fff; + border-radius: 0; + border: 0; + cursor: col-resize +} + +.ty-range-slider .ui-slider-handle { + outline: 0; + -ms-touch-action: none; + touch-action: none +} + +.ty-range-slider.ui-state-disabled .ui-slider-handle { + cursor: not-allowed +} + +.ty-cart-content { + margin-top: 30px; + border: 1px solid #fff +} + +.ty-cart-content__title { + padding: 12px; + border: 1px solid #fff; + border-right: 0; + border-left: 0; + text-align: center; + white-space: nowrap; + font-weight: 700; + background: #edeff1 +} + +.ty-cart-content__title.ty-left { + text-align: left +} + +.ty-cart-content__title.ty-right { + text-align: right +} + +.ty-cart-content__product-elem { + padding: 17px 10px; + border: none; + border-top: 1px solid #fff; + vertical-align: top +} + +.ty-cart-content__image { + float: left +} + +.ty-cart-content__image-block { + padding-left: 20px +} + +.ty-cart-content__product-title { + font-size: 115%; + word-wrap: break-word +} + +.ty-cart-content__qty { + padding: 12px 30px 0; + text-align: center +} + +.ty-cart-content__sku { + padding: 5px 0; + word-break: break-all; + word-break: break-word +} + +.ty-cart-content__price { + padding-right: 20px; + text-align: right +} + +.ty-cart-content__detailed-link { + display: inline-block; + margin: 10px 0; + border-bottom: 1px dotted transparent; + text-decoration: none; + cursor: pointer +} + +.ty-cart-content__detailed-link.open, +.ty-cart-content__detailed-link:hover { + border-color: #465363; + text-decoration: none +} + +.ty-cart-content__product-delete { + margin: 0 0 0 6px; + vertical-align: middle +} + +.ty-cart-content__product-delete:hover { + text-decoration: none +} + +.ty-cart-content__options { + margin-top: 20px +} + +.ty-cart-content__more-info { + margin-top: 0 +} + +.ty-cart-content__more-info-title { + padding: 12px +} + +.ty-cart-content__clear-button { + margin-left: 10px +} + +.ty-cart-content__payment-methods { + float: right; + margin: 30px 0 0; + border-top: 1px solid #46aaf2; + -webkit-box-shadow: inset 0 70px 70px -30px #6cbcf5; + -moz-box-shadow: inset 0 70px 70px -30px #6cbcf5; + box-shadow: inset 0 70px 70px -30px #6cbcf5; + text-align: center +} + +.ty-cart-content__payment-methods-item { + padding: 20px 10px 0 +} + +.ty-cart-content__payment-methods-title { + display: inline-block; + margin: 0 auto; + margin-bottom: -30px; + padding: 10px; + color: #737373; + text-transform: uppercase; + font-weight: 700; + font-size: 85% +} + +.ty-cart-content__buttons { + padding: 18px 22px; + background: #f7f9fa +} + +.ty-cart-content__left-buttons { + float: left +} + +.ty-cart-content__right-buttons { + float: right +} + +.ty-cart-items { + overflow: auto; + padding: 10px 22px; + max-height: 400px; + width: 320px +} + +.ty-cart-items__list-item { + padding: 10px 0; + position: relative; + border-bottom: 1px solid #ecf0f1 +} + +.ty-cart-items__list-item .ty-icon-cancel-circle { + color: #8babbe +} + +.ty-cart-items__list-item:last-child { + border-bottom: 0 +} + +.ty-cart-items__list-item:hover .ty-cart-items__list-item-tools { + display: block +} + +.ty-cart-items__list-item-tools a:hover { + text-decoration: none +} + +.ty-cart-items__list-item-image { + float: left; + margin-right: 25px +} + +.ty-cart-items__list-item-desc { + overflow: hidden +} + +.ty-cart-items__list-item-tools { + position: absolute; + top: 10px; + right: 0; + display: none +} + +.ty-cart-items__empty { + margin: 15px 0; + color: #abc3d1 +} + +.ty-minicart-title { + padding-left: 20px; + display: inline-block; + text-decoration: none +} + +.ty-cart-total { + background: #edeff1; + border-radius: 6px +} + +.ty-cart-total__wrapper { + padding: 17px 20px; + border: 1px solid #fff; + border-top: none +} + +.ty-cart-statistic { + float: right; + padding-top: 10px +} + +.ty-cart-statistic__item { + clear: both; + overflow: hidden; + padding: 0 0 15px; + color: #8babbe +} + +.ty-cart-statistic__title { + position: relative; + float: left; + margin-right: 20px; + width: 220px; + text-align: right; + white-space: normal +} + +.ty-cart-statistic_title_main { + font-weight: 700 +} + +.ty-statistic-list-subtotal-discount, +.ty-statistic-list-discount { + color: #e74c3c +} + +.ty-cart-statistic__value { + position: relative; + display: inline-block; + width: 140px; + text-align: right +} + +.ty-cart-statistic__total-title { + margin-right: 10px +} + +.ty-cart-statistic__total-value { + display: inline-block; + width: 140px +} + +.ty-cart-statistic__group { + padding-bottom: 5px +} + +.ty-cart-statistic__total-list { + border-top: 1px solid #e0e0e0; + margin-top: 15px +} + +.ty-cart-statistic__total { + padding: 9px 0 0; + text-align: right; + font-weight: 700; + font-size: 138% +} + +.ty-cart-total__a-estimation { + display: inline-block; + margin: 0 2px 0 3px; + text-transform: uppercase; + font-size: 85%; + line-height: 130%; + border-bottom: 1px solid transparent +} + +.ty-cart-total__a-estimation:hover { + border-bottom: 1px dotted #465363; + text-decoration: none +} + +.ty-cart-total__icon-estimation { + padding: 0 2px +} + +.ty-cart-content__estimation { + display: inline-block; + width: 100%; + max-width: 440px; + height: 100%; + box-sizing: content-box +} + +.ty-cart-content__estimation .ty-estimation-buttons { + max-width: inherit; + min-width: 100% +} + +.ty-sidebox .ty-input-text-medium { + width: 100% +} + +.ty-estimation__title { + margin-top: 15px; + font-weight: 700; + font-size: 16px; + color: #8babbe +} + +.ty-estimation-buttons__rate { + float: none +} + +.ty-estimation-buttons .ty-btn+.ty-btn { + margin-left: 0 +} + +.ty-estimation-buttons .ty-btn { + vertical-align: top +} + +.ty-cart-content-products { + margin-bottom: 6px; + position: relative; + padding: 0 10px; + border: 1px solid #bdc3c7; + background: #fff +} + +.ty-cart-content-products__item { + padding-top: 15px; + border-bottom: 1px solid #bdc3c7 +} + +.ty-cart-content-products__item:last-child { + border: 0 +} + +.ty-discount-info { + position: relative; + margin-top: 7px; + padding: 10px; + border: 1px solid #bdc3c7; + background: #fff; + font-size: 90% +} + +.ty-discount-coupon__ty-control-group { + margin: 5px 0 +} + +.ty-coupons__container { + float: left; + padding-right: 25px; + width: 260px +} + +.ty-coupons__item { + padding: 0 0 5px +} + +.ty-coupons__item:last-child { + padding-bottom: 0 +} + +.ty-coupons__item-delete, +.ty-coupons__item-delete:hover { + text-decoration: none +} + +.ty-group-block { + padding: 10px; + border: 1px solid #edf2f5; + border-radius: 3px +} + +.ty-group-block__arrow { + position: relative +} + +.ty-group-block__arrow .ty-caret-info { + top: -17px +} + +.ty-group-block .ty-caret-outer { + border-bottom: 7px solid #edf2f5; + border-bottom-color: rgba(0, 0, 0, .1) +} + +.ty-group-block .ty-caret-inner { + border-bottom-color: #fdfefe +} + +.ty-checkout__title { + display: inline-block; + margin: 30px 0 0; + text-decoration: none; + font-weight: 400; + font-style: normal; + font-size: 24px; + font-family: varela round, sans-serif +} + +.ty-checkout__title-icon { + color: #b2c7d4; + vertical-align: middle; + font-size: 27px +} + +.checkout__block { + padding: 0 20px +} + +.ty-checkout-buttons { + margin-top: 15px; + padding: 17px 25px 0; + border-top: 1px solid #ccdae3; + background: #edf2f5 +} + +.ty-checkout__terms { + margin: 25px 20px; + padding: 15px 20px; + border: 2px solid #bdc3c7; + border-radius: 3px; + background: #fff; + font-weight: 700 +} + +.ty-checkout__shipping-tips { + color: #7f7f7f; + margin-bottom: 40px +} + +.ty-step__container { + margin: 0 0 5px; + position: relative +} + +.ty-step__container .ty-icon-down-micro { + display: none +} + +.ty-step__container-active { + margin: 0 0 45px; + background: #edf2f5 +} + +.ty-step__container-active .ty-tabs { + margin-top: 5px; + padding: 0 10px +} + +.ty-step__container-active .ty-tabs__content { + padding: 0 +} + +.ty-step__body-active .ty-address-switch { + margin: 25px 20px +} + +.ty-step__container-active .ty-step__title-txt { + margin-left: 32px +} + +.ty-step__container-active .ty-step__title-left { + background: #fff; + color: #b2c7d4; + margin-top: -1px +} + +.ty-step__container { + background: #edf2f5; + -webkit-border-radius: 2px; + -moz-border-radius: 2px; + border-radius: 2px +} + +.ty-step__title, +.ty-step__title-active, +.ty-step__title-complete { + position: relative; + padding: 10px 14px 9px +} + +.ty-step__title-complete { + padding-right: 110px +} + +.ty-step__title-complete .ty-step__title-left { + position: static; + padding: 0; + background: 0 0; + color: #9bb7c7; + display: inline +} + +.ty-step__title-complete .ty-step__title-txt { + margin-left: 30px; + color: #9bb7c7 +} + +.ty-step__title-complete .ty-step__title-right .ty-btn { + position: absolute; + right: 8px; + top: 8px +} + +.ty-step__title-active { + background: #b2c7d4; + -webkit-border-radius: 2px; + -moz-border-radius: 2px; + border-radius: 2px +} + +.ty-step__title-arrow { + display: block; + width: 35px; + height: 18px; + position: absolute; + font-size: 80px; + line-height: 0; + bottom: -30px; + color: #b2c7d4; + left: 35px +} + +.ty-step__title-txt { + color: #fff; + font-size: 20px; + font-weight: 400 +} + +.ty-step__title .ty-step__title-txt { + font-weight: 400; + color: #9bb7c7; + margin-left: 36px +} + +.ty-step__title-icon { + position: absolute; + top: 14px; + left: 16px +} + +.ty-step-one .ty-checkout-buttons { + border: 0; + margin-top: 6px +} + +.ty-step-one .buttons-container { + border: 0; + padding-left: 0; + padding-right: 0 +} + +.ty-step__title-left { + font-weight: 400; + font-size: 18px; + position: absolute; + display: inline-block; + color: #fff; + padding: 2px 9px; + background: #b2c7d4; + border-radius: 50px +} + +.ty-step__title-right { + float: right; + padding: 4px 0 0 +} + +.ty-step__body-active { + padding: 20px 0 +} + +.ty-step__body-active .select-profile label { + display: none +} + +.ty-step__body-active .ty-control-group .ty-input-text { + width: 100% +} + +.ty-checkout__relogin { + display: inline-block; + padding: 10px 10px 20px +} + +.ty-checkout__login { + float: left; + padding-right: 3%; + padding-left: 3%; + width: 46% +} + +.ty-checkout__login .ty-login { + margin-top: 0 +} + +.ty-checkout__register { + position: relative; + float: left; + margin: 0 0 0 3%; + width: 45% +} + +.ty-checkout__register #anonymous_checkout .ty-control-group { + margin-bottom: 0; + margin-top: 20px; + padding-left: 20px; + padding-right: 20px +} + +.ty-anonymous_checkout { + padding: 0 25px; + margin-top: 20px +} + +.ty-anonymous_checkout__field { + padding: 0 25px; + margin-top: 20px +} + +.ty-checkout__register-content { + padding-left: 20px +} + +.ty-checkout__register-cancel { + margin-left: 15px +} + +.ty-checkout__register-methods { + margin: 0; + padding: 0 +} + +.ty-checkout__register-methods-item { + margin: 0; + padding: 15px 0 0 +} + +input.ty-checkout__register-methods-radio { + float: left; + margin-top: 2px +} + +.ty-checkout__register-methods-title { + display: block; + padding-bottom: 5px; + overflow: hidden +} + +.ty-checkout__register-methods-hint { + display: inline-block; + padding-left: 20px; + color: #7f7f7f; + font-size: 95% +} + +.ty-shipping-options__vendor-name { + display: inline-block; + padding: 15px 0 10px; + font-weight: 700 +} + +.ty-shipping-options__products { + margin-left: 15px +} + +.ty-shipping-options__total { + margin-top: 15px; + padding: 15px 0; + border-top: 1px solid #e5e5e5 +} + +.ty-shipping-options__image { + max-width: 120px +} + +input.ty-shipping-options__checkbox { + margin: 2px 0 0; + vertical-align: middle; + display: inline-block; + width: 10%; + max-width: 13px +} + +.ty-shipping-options__group { + padding-left: 20px; + display: inline-block; + vertical-align: middle; + box-sizing: border-box; + width: 90% +} + +.ty-shipping-options__method { + margin: 20px 0 5px; + font-size: 0 +} + +.ty-customer-notes { + padding: 15px 20px +} + +.ty-customer-notes__title { + font-weight: 700 +} + +.ty-customer-notes__text { + width: 100%; + height: 100px; + resize: vertical +} + +.ty-checkout__billing-options { + padding: 20px 20px 0 +} + +.ty-checkout__billing-options .ty-customer-notes, +.ty-checkout__billing-options .ty-license-agreement__checkbox, +.ty-checkout__billing-options .ty-company__termsf { + padding-left: 0; + padding-right: 0 +} + +.ty-checkout__billing-options .ty-checkout__terms { + margin-left: 0; + margin-right: 0 +} + +.ty-checkout__billing-options.ty-notab { + padding: 0 20px 0 +} + +.ty-checkout__billing-tabs .ty-tabs { + padding-left: 20px +} + +.ty-credit-card { + display: inline-block; + float: left; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + padding: 15px 22px; + max-width: 363px; + border: 1px solid #f2f2f2; + -webkit-border-radius: 5px; + -moz-border-radius: 5px; + border-radius: 5px; + background: #fff +} + +.ty-credit-card__control-group { + position: relative +} + +input.ty-credit-card__input { + padding: 8px; + padding-right: 54px; + width: 100%; + height: 40px; + font-size: 18px +} + +input.ty-credit-card__input-short { + margin: 0; + width: 50px +} + +.ty-credit-card__ty-control-group { + position: relative +} + +.ty-credit-card .help-inline { + display: none +} + +.ty-credit-card__cvv-field { + display: inline-block; + margin: 17px 15px; + max-width: 190px +} + +.ty-credit-card__cvv-field-input { + width: 65px; + font-size: 18px; + height: 38px !important +} + +.ty-cc-icons { + position: absolute; + right: 57px; + bottom: 25px; + display: inline-block; + margin: 0 0 15px +} + +.ty-cc-icons__item { + position: absolute; + z-index: 10; + display: inline-block; + visibility: hidden; + padding: 2px; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px +} + +.ty-cc-icons__icon { + display: inline-block; + margin: 0; + width: 51px; + height: 32px; + background: url(../../../../../../../../design/themes/responsive/media/images/icons/payments.png?1626074086) no-repeat +} + +.ty-cc-icons__item.cc-default, +.ty-cc-icons__item.active { + visibility: visible +} + +.ty-cc-icons__item .default { + background-position: -300px 0 +} + +.ty-cc-icons__item .visa-electron { + background-position: -200px -100px +} + +.ty-cc-icons__item .maestro { + background-position: 0 -200px +} + +.ty-cc-icons__item .american-express { + background-position: -100px -200px +} + +.ty-cc-icons__item .discover { + background-position: -200px -200px +} + +.ty-cc-icons__item .mastercard { + background-position: 0 -100px +} + +.ty-cc-icons__item .visa { + background-position: -200px 0 +} + +.ty-cvv2-about { + display: inline-block; + margin-left: 10px +} + +.touch .ty-cvv2-about { + display: none +} + +.ty-cvv2-about:hover { + position: relative; + text-decoration: none +} + +.ty-cvv2-about__title { + cursor: pointer; + color: #465363 +} + +.ty-cvv2-about__note { + display: none; + padding: 15px 5px; + width: 340px; + border: 1px solid #fff; + background-color: #fff; + -webkit-border-radius: 6px 6px 6px 6px; + -moz-border-radius: 6px 6px 6px 6px; + border-radius: 6px 6px 6px 6px; + -webkit-box-shadow: 0 2px 4px rgba(0, 0, 0, .2); + -moz-box-shadow: 0 2px 4px rgba(0, 0, 0, .2); + box-shadow: 0 2px 4px rgba(0, 0, 0, .2) +} + +.ty-cvv2-about:hover .ty-cvv2-about__note { + position: absolute; + bottom: 0; + left: 100%; + z-index: 100; + display: block +} + +.ty-cvv2-about__image { + float: left; + padding: 0 15px +} + +.ty-cvv2-about__description { + float: left; + width: 240px +} + +.ty-cvv2-about__description-title { + margin: 0 +} + +.ty-payment-icons { + margin: 10px 0 +} + +.ty-payment-icons__item { + display: inline-block; + margin-left: 10px; + width: 51px; + height: 32px; + background: url(../../../../../../../../design/themes/responsive/media/images/icons/payments.png?1626074086) no-repeat +} + +.ty-payment-icons__item.twocheckout { + background-position: 0 0 +} + +.ty-payment-icons__item.mastercard { + background-position: 0 -100px +} + +.ty-payment-icons__item.paypal { + background-position: -100px -100px +} + +.ty-payment-icons__item.visa { + background-position: -200px 0 +} + +@media only screen and (-webkit-min-device-pixel-ratio:2), +only screen and (min-device-pixel-ratio:2) { + .ty-payment-icons__item { + background-image: url(../../../../../../../../design/themes/responsive/media/images/icons/payments@2x.png?1626074086); + background-size: 400px, 400px + } +} + +.ty-checkout-summary__block { + margin-top: 20px; + width: 100% +} + +.ty-checkout-summary__item { + padding-bottom: 15px +} + +.ty-checkout-summary__total { + text-align: left +} + +.ty-checkout-summary__total-sum { + display: inline-block; + float: right +} + +.ty-checkout-summary__taxes { + padding-bottom: 2px; + font-weight: 700 +} + +.ty-checkout-summary__taxes-amount { + display: inline-block; + overflow: hidden; + width: 70px; + text-overflow: ellipsis; + white-space: nowrap +} + +.ty-checkout-summary__order_discount { + color: #e74c3c +} + +.ty-order-products__list { + padding: 0 +} + +.ty-order-products__list .ty-product-options { + display: block; + padding: 6px 0 0; + color: #8292a7; + margin-bottom: 0 +} + +.ty-order-products__item { + padding: 14px 0; + border-bottom: 1px solid #ecf0f1 +} + +.ty-order-products__item:last-child { + padding-bottom: 5px; + border: none +} + +.ty-order-products__item:first-child { + padding-top: 0 +} + +.ty-order-products__item-delete { + visibility: hidden; + float: right; + margin: 2px 0 0 +} + +.ty-order-products__item-delete:hover { + text-decoration: none +} + +.ty-order-products__item:hover .ty-order-products__item-delete { + visibility: visible +} + +.ty-order-products__price { + color: #313a45 +} + +.ty-order-products__a { + display: inline-block; + margin: 2px 0 5px; + max-width: 235px +} + +.ty-order-products__buttons { + padding: 14px 0 +} + +.ty-order-products__buttons .text-button { + color: #e74c3c +} + +.ty-order-info { + color: #313a45 +} + +.ty-order-info__title { + font-weight: 700 +} + +.shipping-adress__delim { + margin-bottom: 15px; + padding-top: 10px; + border-bottom: 1px solid #ecf0f1 +} + +.ty-order-info__profile-field { + padding: 10px; + background: #edf2f5; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px +} + +.ty-order-info__profile-field-item { + float: none; + clear: left; + word-break: break-all; + word-break: break-word +} + +.ty-order-info__profile-field .b-firstname, +.ty-order-info__profile-field .b-lastname, +.ty-order-info__profile-field .b-address, +.ty-order-info__profile-field .b-city, +.ty-order-info__profile-field .b-country, +.ty-order-info__profile-field .b-state, +.ty-order-info__profile-field .b-zipcode, +.ty-order-info__profile-field .s-firstname, +.ty-order-info__profile-field .s-lastname, +.ty-order-info__profile-field .s-address, +.ty-order-info__profile-field .s-city, +.ty-order-info__profile-field .s-country, +.ty-order-info__profile-field .s-state, +.ty-order-info__profile-field .s-zipcode { + float: left; + clear: none; + padding-right: 5px +} + +.ty-order-info__profile-field .b-address, +.ty-order-info__profile-field .s-address { + clear: left +} + +.ty-checkout-complete__create-account { + width: 49%; + display: inline-block +} + +.ty-checkout-complete__buttons:before, +.ty-checkout-complete__buttons:after { + display: table; + content: ""; + line-height: 0; + width: 100% +} + +.ty-checkout-complete__buttons:after { + clear: both +} + +.ty-checkout-complete__buttons-left { + float: left +} + +.ty-checkout-complete__buttons-right { + float: right +} + +.ty-checkout-complete__login-info { + width: 45%; + margin-left: 5%; + display: inline-block; + vertical-align: top +} + +.ty-checkout-complete_width_full { + width: 100%; + margin: 0 0 45px +} + +.ty-checkout-complete__order-success { + margin-bottom: 20px +} + +.ty-checkout-complete__button-vmid { + display: inline-block; + margin-top: 8px +} + +.ty-other-pay { + margin-top: 20px +} + +.ty-payments-list { + float: left; + margin: 0; + padding-right: 60px +} + +.ty-payments-list__item { + padding: 0 0 20px 0; + font-size: 0 +} + +input.ty-payments-list__checkbox { + margin: 2px 0 0; + display: inline-block; + vertical-align: middle; + width: 10%; + max-width: 13px +} + +.ty-payments-list__checkbox:checked+.ty-payments-list__item-group { + font-weight: 700 +} + +.ty-payments-list__item-group { + padding-left: 20px; + color: #8babbe; + display: inline-block; + vertical-align: middle; + box-sizing: border-box; + width: 90% +} + +.ty-payments-list__description { + padding-top: 5px; + margin-bottom: 10px; + font-weight: 400 +} + +.ty-payments-list__instruction { + display: inline-block; + width: 255px; + margin-bottom: 10px; + color: #465363 +} + +.ty-payments-list__instruction h2 { + font-weight: 700; + font-size: 135%; + line-height: 130% +} + +.ty-payments-list__instruction p { + padding-top: 10px; + line-height: 150% +} + +.ty-payments-list__image { + max-width: 120px +} + +.ty-payment-method-iframe { + position: absolute; + top: 0; + left: 0; + z-index: 1000; + width: 100%; + height: 700px; + background: silver; + opacity: .9 +} + +.ty-payment-method-iframe__label { + position: relative; + top: 350px; + padding: 10px; + height: 50px +} + +.ty-payment-method-iframe__text { + position: relative; + top: 20px; + vertical-align: middle; + text-align: center; + font-weight: 700 +} + +.ty-payment-method-iframe__box { + position: relative; + z-index: 10; + overflow: hidden; + height: 700px +} + +.ty-repay .ty-tabs { + margin-top: 5px +} + +.ty-repay-button { + padding-bottom: 20px +} + +.ty-orders-detail { + position: relative +} + +.ty-orders-detail .tabs { + margin-top: 20px +} + +.ty-orders-detail .ty-subheaders-group { + margin: 0 +} + +.ty-orders__actions { + margin: 25px 0 +} + +.ty-orders__actions .ty-btn+.ty-btn { + margin-left: 30px +} + +.ty-orders__actions-right { + float: right +} + +.ty-orders__actions-right-item { + float: left; + margin-left: 25px +} + +.ty-profiles-info { + margin-top: 20px; + vertical-align: top +} + +.ty-profiles-info:before, +.ty-profiles-info:after { + display: table; + content: ""; + line-height: 0; + width: 100% +} + +.ty-profiles-info:after { + clear: both +} + +.ty-profiles-info__item { + float: left; + margin-right: 3%; + width: 30% +} + +.ty-profiles-info__title { + margin-bottom: 5px; + font-size: 15px +} + +.ty-profiles-info__field { + padding-top: 12px +} + +.ty-profiles-info__field .ty-info-field { + margin-bottom: 5px; + word-break: break-all; + word-break: break-word +} + +.ty-profiles-info__field .ty-info-field:before, +.ty-profiles-info__field .ty-info-field:after { + display: table; + content: ""; + line-height: 0; + width: 100% +} + +.ty-profiles-info__field .ty-info-field:after { + clear: both +} + +.ty-orders-detail__products { + margin-top: 25px +} + +.ty-orders-detail__table { + width: 100%; + margin-top: 10px +} + +.ty-orders-detail__table-description { + margin-left: 20px +} + +.ty-orders-detail__table-product { + width: 65% +} + +.ty-orders-detail__table-price { + width: 15%; + text-align: right +} + +.ty-orders-detail__table-quantity { + width: 10% +} + +.ty-orders-detail__table-subtotal { + text-align: right +} + +.ty-orders-detail__table-code { + word-break: break-all; + word-break: break-word +} + +.ty-orders-notes { + margin-top: 28px +} + +.ty-orders-notes__body { + position: relative; + margin-top: 10px; + padding: 15px; + border: 1px solid #edf2f5; + line-height: 150%; + -webkit-border-radius: 5px; + -moz-border-radius: 5px; + border-radius: 5px +} + +.ty-orders-summary { + margin-top: 28px +} + +.ty-orders-summary__wrapper { + float: left; + margin-top: 10px; + padding: 4px 20px; + min-width: 52%; + background: #fafbfc; + border: 1px solid #edf2f5; + -webkit-border-radius: 5px; + -moz-border-radius: 5px; + border-radius: 5px +} + +.ty-orders-summary__table { + width: 100% +} + +.ty-orders-summary__row { + border-bottom: 1px solid #e3e9ec +} + +.ty-orders-summary__row:last-child { + border-bottom: 0 +} + +.ty-orders-summary__total { + font-weight: 700 +} + +.ty-orders-summary__wrapper td { + padding: 13px 10px 11px 0; + vertical-align: top +} + +.ty-orders-summary__taxes-description { + padding-top: 5px +} + +.ty-orders-summary__right { + float: right +} + +.ty-orders-shipment .ty-subheader { + font-size: 22px; + font-weight: 600; + margin-top: 40px +} + +.ty-orders-shipment .ty-subheader:first-child { + margin-top: 0 +} + +.ty-orders-shipment__info p { + padding-top: 0 +} + +.ty-orders-shipment__table { + width: 100%; + margin-top: 10px +} + +.ty-orders-shipment-notes__header { + font-size: 14px; + float: left; + padding-right: 10px; + display: table-cell +} + +.ty-orders-shipment-notes__body { + display: table-cell +} + +.ty-orders-shipment-notes__info { + padding-top: 20px +} + +.ty-orders-shipment-notes_body { + float: left; + display: table-cell +} + +.ty-orders-search { + position: relative; + width: 100% +} + +.ty-orders-search__item { + vertical-align: top +} + +.ty-orders-search-options .ty-period { + clear: none; + margin-left: 2.1276595744681%; + float: left +} + +.ty-orders-search-options .ty-period__wrapper { + padding-right: 10px; + margin-bottom: 12px +} + +.ty-orders-search-options .ty-period__select-date { + margin-bottom: 12px; + float: left +} + +.ty-orders-search-options .ty-period__select-date .ty-control-group__title { + visibility: hidden +} + +.ty-orders-search-options .ty-period__dash { + padding: 0 +} + +.ty-orders-search-options .ty-status-info { + font-size: 0; + margin-left: -25px +} + +.ty-orders-search-options .ty-status-info label { + display: inline-block; + margin-right: 0; + font-size: .875rem; + width: 25%; + word-break: break-word +} + +.ty-orders-search-options .ty-orders-search__options-status { + margin-left: 25px +} + +.ty-orders-search__user-info { + margin: 0; + padding: 0 +} + +.ty-orders-repay { + margin-top: 30px +} + +.ty-orders-repay .tabs-content { + padding-left: 20px +} + +.ty-order-status { + margin: 5% auto; + padding: 15px 15px 15px 40px; + width: 920px; + border: 1px solid #e5e5e5; + background: #f7f7f7 url(../../../../../../../../design/themes/responsive/media/images/icons/ajax.gif?1626074086) no-repeat 15px center; + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px +} + +.ty-checkout-block-terms { + padding: 0 +} + +.ty-license-agreement__checkbox { + padding: 0 20px +} + +.ty-license-agreement__checkbox__checkbox { + display: block; + font-weight: 700 +} + +.ty-orders-promotion { + margin-top: 30px +} + +.ty-orders-promotion__title { + font-size: 16px +} + +.ty-orders-promotion__description { + overflow-x: auto; + overflow-y: hidden; + margin-bottom: 10px; + padding: 10px +} + +.ty-exception { + position: relative; + margin: 50px 0 30px; + padding: 40px 0 70px +} + +.ty-exception__code { + top: 92px; + left: 63px; + display: inline-block; + width: 300px; + color: #e74c3c; + text-align: center; + font-weight: 700; + font-size: 86px; + line-height: 70px +} + +.ty-exception__code-txt { + display: block; + text-align: center; + font-weight: 400; + font-style: normal; + font-size: 26px +} + +.ty-exception__title-info { + display: inline-block; + padding-left: 30px +} + +.ty-exception__title { + padding: 0 0 25px; + font-size: 25px; + font-weight: 400; + color: #34495e +} + +.ty-exception__info { + padding: 0 0 30px; + color: #bdc3c7; + font-size: 110% +} + +.ty-exception__links { + margin: 0 20px 0 0 +} + +.ty-exception__links-item { + float: left; + list-style-type: none; + margin-right: 20px +} + +.ty-exception__links-a { + text-decoration: underline; + cursor: pointer +} + +.ty-sitemap { + margin-bottom: 10px +} + +.ty-sitemap__section-title { + display: block; + padding: 10px 0 7px; + border-color: #fff; + border-bottom: 1px solid #ebebeb; + font-size: 16px +} + +.ty-sitemap__section-wrapper { + float: left; + margin-top: 20px; + margin-bottom: 30px; + width: 33% +} + +.ty-sitemap__tree { + margin: 20px 0 15px +} + +.ty-sitemap__tree-section-list { + display: inline-block; + float: left; + margin-bottom: 30px; + min-height: 165px; + width: 33%; + font-size: 12px +} + +.ty-sitemap__section-sub-title { + font-weight: 700; + font-size: 120% +} + +.ty-sitemap__tree-list-item { + font-size: 12px; + line-height: 17px; + padding: 5px 0 +} + +.ty-sitemap__tree-list-item { + padding: 5px 0 +} + +.ty-company-fields { + margin-bottom: 50px +} + +.ty-company-fields .ty-input-text, +.ty-company-fields .ty-input-textarea-long { + width: 100% +} + +.ty-company-fields select { + width: 100% +} + +.ty-companies { + padding: 20px 0; + border-bottom: 1px solid #ebebeb +} + +.ty-companies:before, +.ty-companies:after { + display: table; + content: ""; + line-height: 0; + width: 100% +} + +.ty-companies:after { + clear: both +} + +.ty-companies__info { + overflow: hidden; + padding-left: 25px +} + +.ty-companies__img { + float: left; + text-align: center +} + +.ty-company-title { + display: inline-block; + padding: 5px 0 +} + +.ty-company-detail__top-links { + line-height: 20px +} + +.ty-company-detail__view-products { + display: inline-block; + margin-top: 5px; + margin-right: 15px; + cursor: pointer +} + +.ty-company-detail__categories { + margin-top: 10px +} + +.ty-company-detail__table { + width: 100%; + margin-top: 10px +} + +.ty-company-detail__info-title { + margin-bottom: 0; + padding-bottom: 5px; + color: #404040; + font-weight: 700; + font-size: 115% +} + +.ty-company-detail__logo { + float: left; + overflow: hidden; + margin: 0 100px 20px 0; + width: 160px; + height: 100px; + border: 1px solid #ddd; + text-align: center; + line-height: 100px +} + +.ty-company-detail__logo:before, +.ty-company-detail__logo:after { + display: table; + content: ""; + line-height: 0; + width: 100% +} + +.ty-company-detail__logo:after { + clear: both +} + +.ty-company-detail__logo .ty-no-image { + width: 160px !important; + height: 100px !important +} + +.ty-company-detail__info { + overflow: hidden; + margin-top: 25px +} + +.ty-company-detail__info:before, +.ty-company-detail__info:after { + display: table; + content: ""; + line-height: 0; + width: 100% +} + +.ty-company-detail__info:after { + clear: both +} + +.ty-company-image { + vertical-align: middle +} + +.ty-company-detail__info-list { + float: left; + margin-bottom: 20px; + max-width: 240px; + word-break: break-all +} + +.ty-company-detail_info-first { + margin-right: 10% +} + +.ty-company-detail__ty-control-group { + padding-top: 3px +} + +.ty-company-detail__control-label { + display: inline-block; + width: 65px +} + +.ty-company__terms { + margin: 25px 20px; + padding: 15px 20px; + border: 2px solid #bdc3c7; + border-radius: 3px; + background: #fff; + font-weight: 700 +} + +.ty-company-info { + margin: 45px 0 0 58px; + padding-bottom: 280px; + background: url(../../../../../../../../design/themes/responsive/media/images/company_vendor.png?1626074086) no-repeat bottom center +} + +.ty-company-info h4 { + padding-bottom: 10px; + font-size: 19px +} + +.ty-company-info ul li { + margin-bottom: 11px; + margin-left: 17px; + padding: 2px 0; + list-style-type: disc +} + +.ty-grid-vendors .ty-grid-list__company-logo .ty-company-image-wrapper { + display: block; + text-align: center; + line-height: 100px +} + +.ty-grid-vendors .ty-grid-list__item-location .company-location { + display: block; + text-align: center; + color: #a0acbc; + word-wrap: break-word +} + +.ty-grid-vendors .ty-grid-list__total-products .ty-company-total-products { + display: block; + text-align: center; + color: #a0acbc; + word-wrap: break-word; + text-transform: lowercase +} + +.vendor-info-grid { + border-top: 1px solid #edf2f5; + border-bottom: 1px solid #edf2f5; + margin: 30px 0 3px; + padding: 35px 0 +} + +.ty-entry-page__item { + margin: 3px 0; + padding: 8px +} + +.ty-entry-page__a { + display: block +} + +.ty-categories-picker { + margin-top: -1px; + width: 100% +} + +.ty-categories-picker__title, +.ty-categories-picker__item { + padding: 12px; + border: 1px solid #ecf0f1; + text-align: left +} + +.ty-categories-picker .ty-dir-list { + color: #b3b3b3 +} + +.ty-tree-space { + display: inline-block; + width: 10px +} + +.download { + margin-top: 20px +} + +.ty-download__table { + width: 100%; + margin: 11px 0 35px +} + +.ty-download-icon { + margin-right: 5px; + color: #bdc3c7 +} + +.ty-download__empty { + color: #edf2f5 +} + +.ty-download__icon { + margin-left: 5px; + font-size: 120% +} + +.ty-download__size-col { + width: 20% +} + +.ty-download__nostyle { + padding: 0 !important; + border: 0 !important +} + +.ty-download__table-nomargin { + width: 100% +} + +.ty-top-panel { + position: fixed; + width: 100%; + z-index: 500 +} + +.ty-top-panel-padding { + padding-top: 36px +} + +.ty-top-panel__wrapper { + display: flex; + justify-content: space-between; + position: relative; + z-index: 100; + overflow: hidden; + height: 35px; + border-bottom: 1px solid #262626; + background: #333 url(../../../../../../../../design/themes/responsive/media/images/csse_bg.png?1626074086); + -webkit-box-shadow: inset 0 0 25px rgba(0, 0, 0, .5); + -moz-box-shadow: inset 0 0 25px rgba(0, 0, 0, .5); + box-shadow: inset 0 0 25px rgba(0, 0, 0, .5) +} + +.ty-top-panel__title { + display: none; + margin: 0 0 0 15px; + color: #d3d3d3; + text-transform: uppercase; + font-weight: 400; + font-size: 14px; + line-height: 36px +} + +@media(min-width:768px) { + .ty-top-panel__title { + display: inline-block + } +} + +.ty-top-panel__logo { + display: inline-block; + width: 20px; + float: left; + padding: 0 15px; + height: 36px; + border-right: 1px solid #282828; + -webkit-box-shadow: 1px 0 0 0 #393939; + -moz-box-shadow: 1px 0 0 0 #393939; + box-shadow: 1px 0 0 0 #393939 +} + +.ty-top-panel__logo-link:hover { + text-decoration: none +} + +.ty-top-panel__icon-basket { + position: relative; + top: 7px; + color: #666; + font-size: 20px +} + +.ty-top-panel__icon-basket:hover { + color: #f3f3f3 +} + +.ty-top-panel__timer { + color: #cfcfcf; + margin-right: 15px +} + +.ty-top-panel__close { + width: 9px; + padding: 0 15px; + color: #969696; + font-size: 12px +} + +.ty-top-panel__close:hover { + background: rgba(0, 0, 0, .3); + color: #f3f3f3; + text-decoration: none +} + +.ty-top-panel-action { + line-height: 36px +} + +.ty-top-panel-action__setting:hover, +.ty-top-panel-action__setting.active { + background: rgba(0, 0, 0, .3); + text-decoration: none +} + +.ty-top-panel-action__setting:hover .ty-top-panel-action__icon-setting, +.ty-top-panel-action__setting.active .ty-top-panel-action__icon-setting { + color: #f3f3f3 +} + +.ty-top-panel-action__icon-setting { + color: #969696; + font-size: 22px; + position: relative; + top: 3px +} + +.ty-top-panel-action__icon-setting--block-manager { + top: 6px +} + +.ty-top-panel-action_item { + display: inline-block; + border-right: 1px solid #282828; + -webkit-box-shadow: 1px 0 0 0 #393939; + -moz-box-shadow: 1px 0 0 0 #393939; + box-shadow: 1px 0 0 0 #393939 +} + +.ty-top-panel-action__setting { + display: none; + padding: 0 15px; + width: 22px +} + +@media(min-width:768px) { + .ty-top-panel-action__setting { + display: inline-block + } +} + +.minimize-label { + position: absolute; + top: 0; + right: 20px; + z-index: 1000; + width: 35px; + height: 20px; + -webkit-border-radius: 0 0 4px 4px; + -moz-border-radius: 0 0 4px 4px; + border-radius: 0 0 4px 4px; + background: #4d4d4d; + text-decoration: none; + opacity: .7 +} + +.minimize-label:hover { + opacity: 1 +} + +.minimize-label__icon { + position: absolute; + top: -2px; + left: 11px; + color: #ccc; + font-size: 22px +} + +.ty-top-panel-btn { + margin-right: 15px; + padding: 3px 12px; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + background-color: #636363; + background-image: -moz-linear-gradient(top, #6d6d6d, #555); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#6d6d6d), to(#555)); + background-image: -webkit-linear-gradient(top, #6d6d6d, #555); + background-image: -o-linear-gradient(top, #6d6d6d, #555); + background-image: linear-gradient(to bottom, #6d6d6d, #555); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff6d6d6d', endColorstr='#ff555555', GradientType=0); + -webkit-box-shadow: inset 0 1px rgba(255, 255, 255, .3); + -moz-box-shadow: inset 0 1px rgba(255, 255, 255, .3); + box-shadow: inset 0 1px rgba(255, 255, 255, .3); + color: #fff; + text-shadow: 0 1px 0 rgba(0, 0, 0, .5); + font-size: 12px; + cursor: pointer +} + +.ty-top-panel-btn:hover { + background-color: #7d7d7d; + background-image: -moz-linear-gradient(top, #878787, #6e6e6e); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#878787), to(#6e6e6e)); + background-image: -webkit-linear-gradient(top, #878787, #6e6e6e); + background-image: -o-linear-gradient(top, #878787, #6e6e6e); + background-image: linear-gradient(to bottom, #878787, #6e6e6e); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff878787', endColorstr='#ff6e6e6e', GradientType=0); + color: #fff; + text-decoration: none; + text-shadow: 0 1px 0 rgba(0, 0, 0, .5) +} + +.ty-top-panel-btn:active { + background-color: #5f5f5f; + background-image: -moz-linear-gradient(top, #555, #6e6e6e); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#555), to(#6e6e6e)); + background-image: -webkit-linear-gradient(top, #555, #6e6e6e); + background-image: -o-linear-gradient(top, #555, #6e6e6e); + background-image: linear-gradient(to bottom, #555, #6e6e6e); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff555555', endColorstr='#ff6e6e6e', GradientType=0); + -webkit-box-shadow: inset 0 -1px rgba(255, 255, 255, .05); + -moz-box-shadow: inset 0 -1px rgba(255, 255, 255, .05); + box-shadow: inset 0 -1px rgba(255, 255, 255, .05); + color: #fff; + text-shadow: none; + font-size: 12px +} + +.te-mode { + margin-left: 300px +} + +.te-mode .ty-ajax-loading-box { + margin-left: 156px +} + +html #jquery-overlay { + z-index: 1160 +} + +html #jquery-lightbox { + z-index: 1170 +} + +.homepage-banners { + margin-top: 25px +} + +.homepage-hotdeals { + margin: 50px 0 +} + +.ty-homepage-vendors { + margin-top: 35px +} + +.ty-homepage-vendors ul { + margin: 15px 15px 0 0 +} + +.ty-homepage-vendors ul li { + padding: 5px 0 +} + +.ty-homepage-vendors__devider { + border-top: 1px solid #edf2f5; + padding: 10px 0; + margin-top: 15px +} + +.ty-pagination { + margin: 10px 0; + padding: 10px 0 +} + +.ty-pagination__items { + display: inline-block; + color: #7a9fb5 +} + +.ty-pagination__bottom { + border-top: 1px solid #dedede +} + +.ty-pagination__item, +.ty-pagination__selected { + color: #fff; + display: inline-block; + padding: 3px 7px; + min-width: 12px; + text-align: center; + text-decoration: none; + text-transform: uppercase; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; + -webkit-transition: all 200ms; + -moz-transition: all 200ms; + -o-transition: all 200ms; + transition: all 200ms +} + +.ty-pagination__item { + color: #7a9fb5 +} + +.ty-pagination__item:hover { + background: #edf2f5; + color: #7a9fb5; + padding: 4px 7px +} + +.ty-pagination__selected { + color: #fff; + font-size: 14px; + background: #465363 +} + +.ty-pagination__range, +.ty-pagination__btn { + margin: 0 4px; + padding: 5px 7px; + width: auto; + color: #7a9fb5 +} + +.ty-pagination__btn:hover { + color: #7a9fb5 +} + +.ty-pagination__prev, +.ty-pagination__next { + color: #7a9fb5 +} + +.ty-pagination__prev:hover, +.ty-pagination__next:hover { + color: #7a9fb5; + background: #edf2f5; + cursor: pointer +} + +.ty-pagination__text { + text-transform: uppercase +} + +.ty-pagination__text-arrow { + font-size: 16px; + line-height: 10px; + font-style: normal +} + +.ty-pagination__text-arrow:before { + content: "←" +} + +.ty-pagination__right-arrow .ty-pagination__text-arrow:before { + content: "→" +} + +.ty-tabs { + margin-top: 30px; + vertical-align: bottom; + border-bottom: 1px solid #d6e1e8 +} + +.ty-tabs__list { + vertical-align: bottom +} + +.ty-tabs__item, +.ty-tabs .subtab { + float: left; + vertical-align: bottom; + white-space: nowrap; + cursor: pointer; + border-radius: 0; + margin: 2px 2px 0 0; + padding: 0 0 0 3px; + position: relative; + background: #dde6ec; + -webkit-transition: all 200ms; + -moz-transition: all 200ms; + -o-transition: all 200ms; + transition: all 200ms +} + +.ty-tabs__item:hover, +.ty-tabs .subtab:hover { + background: #e6edf1 +} + +.ty-tabs__item.active, +.ty-tabs .subtab.active { + background: #abc3d1 +} + +.ty-tabs__a, +.ty-tabs .subtab a { + display: block; + padding: 8px 21px 2px 18px; + height: 23px; + color: #7c7e80; + text-decoration: none +} + +.ty-tabs__item.active .ty-tabs__a { + color: #fff +} + +.ty-tabs .subtab .ty-tabs__item.active .ty-tabs__a { + color: #7c7e80 +} + +.ty-tabs__a:hover, +.ty-tabs .subtab a:hover { + text-decoration: none; + color: #7c7e80 +} + +.ty-tabs__content { + padding: 15px 5px +} + +.tab-list-title { + margin: 50px 0 15px 0; + padding-bottom: 8px; + border-bottom: 1px solid #edf2f5; + font-size: 22px +} + +.ty-tabs .open .dropdown-menu { + display: block +} + +.ty-tabs .dropdown-menu { + position: absolute; + top: 100%; + right: 0; + z-index: 1000; + display: none; + min-width: 160px; + padding: 5px 0; + margin: 0; + list-style: none; + background-color: #fff; + border: 1px solid #dcdcdc; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; + -webkit-border-top-right-radius: 0; + -moz-border-radius-topright: 0; + border-top-right-radius: 0; + -webkit-border-top-left-radius: 0; + -moz-border-radius-topleft: 0; + border-top-left-radius: 0; + -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, .2); + -moz-box-shadow: 0 5px 10px rgba(0, 0, 0, .2); + box-shadow: 0 5px 10px rgba(0, 0, 0, .2); + -webkit-background-clip: padding-box; + -moz-background-clip: padding-box; + background-clip: padding-box +} + +.ty-tabs .dropdown-menu li.active { + float: none; + border: 0; + margin: 0 +} + +.ty-tabs .dropdown-menu li { + display: block; + margin: 0; + float: none; + background: 0 0; + border: 0 +} + +.ty-tabs .subtab { + float: right !important +} + +.ty-tabs .ty-icon-down-dir { + position: relative; + float: none; + top: 0; + left: 0; + margin: 0 2px +} + +.ty-tabs__item { + border-top-left-radius: 4px; + border-top-right-radius: 4px +} + +.ty-ajax-loading-box__inner { + display: none; + margin: 0 10px 0 5px; + padding: 6px 0 6px 27px; + color: #fff; + font-weight: 700 +} + +.ty-ajax-loading-box { + position: fixed; + top: 50%; + right: 50%; + left: 50%; + z-index: 100001; + display: none; + overflow: visible; + margin-top: -26px; + margin-left: -26px; + padding: 0; + min-height: 52px; + width: 52px; + background: url(../../../../../../../../design/themes/responsive/media/images/icons/ajax_loader.svg?1626074086) no-repeat 10px 10px #0d0d0d; + opacity: .8; + -webkit-border-radius: 5px; + -moz-border-radius: 5px; + border-radius: 5px +} + +.ty-ajax-loading-box_text_block { + min-width: 120px; + min-height: 76px; + background-position: 44px 10px +} + +.ty-ajax-loading-box-with__text-wrapper { + color: #fff; + margin-top: 50px; + display: block; + margin-left: 0; + width: 110px; + padding: 0 5px 5px; + text-align: center +} + +.ty-ajax-overlay { + position: absolute; + top: 0; + bottom: 0; + left: 0; + right: 0; + z-index: 10000; + display: none +} + +.notification-content-extended { + position: fixed; + top: 50%; + left: 50%; + z-index: 1101; + margin: -40px 0 0 -320px; + min-height: 140px; + width: 640px; + color: #000; + background-color: #fff; + border: 1px solid gray +} + +.notification-content-extended { + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px +} + +.notification-content-extended h1 { + border-top-left-radius: 6px; + border-bottom-left-radius: 6px +} + +.ty-product-notification__buttons { + border-bottom-left-radius: 6px; + border-bottom-right-radius: 6px +} + +.notification-content-extended .ty-product-notification__body { + overflow: auto +} + +.notification-body-extended { + color: #000; + overflow-x: hidden; + overflow-y: auto +} + +.notification-container { + position: fixed; + top: 0; + right: 40px; + z-index: 1022; + min-width: 300px; + width: 40% +} + +.notification-container-top { + top: 10px +} + +.notification-content { + position: relative; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + padding: 10px 35px 10px 18px; + line-height: 150%; + border-radius: 2px; + border-radius: 4px +} + +.notification-content strong { + margin-right: 7px +} + +.notification-content-extended h1 { + position: relative; + padding: 13px 30px 10px 20px; + border: none; + border-bottom: 1px solid #bdc3c7; + background: #f8f9f9; + font-weight: 400; + font-size: 18px; + white-space: nowrap; + width: 100%; + overflow: hidden; + text-overflow: ellipsis; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0 +} + +.notification-content-extended h1 span { + position: absolute; + top: 15px; + right: 14px; + width: 16px; + height: 16px; + color: #acacac; + text-shadow: none; + font: 13px/1 'glyphs'; + opacity: 1; + cursor: pointer; + speak: none; + -webkit-font-smoothing: antialiased +} + +.notification-content-extended h1 span:before { + font-family: glyphs; + content: "\e009"; + speak: none; + -webkit-font-smoothing: antialiased +} + +.notification-content-extended h1 span:hover { + color: #dfdfdf; + opacity: 1 +} + +.close { + position: absolute; + top: 5px; + right: 7px; + float: right; + padding: 0; + border: 0; + background: 0 0; + font-size: 20px; + font-family: helvetica neue, Helvetica, Arial, sans-serif; + line-height: 15px; + cursor: pointer; + -webkit-appearance: none +} + +.close:hover { + text-decoration: none; + cursor: pointer +} + +.alert-success, +.alert-warning, +.alert-error { + position: relative; + margin: 7px 0; + border: 1px solid; + font-size: 100%; + opacity: .96 +} + +.alert-success { + border-color: #8bc045; + background: #d0eaae; + color: #496e16 +} + +.alert-success .close { + color: #8bc045 +} + +.alert-warning { + border-color: #f39c12; + background: #f5e08c; + color: #ac6e0b +} + +.alert-warning .close { + color: #f39c12 +} + +.alert-error { + border-color: #c0392b; + background: #eb7064; + color: #fff +} + +.alert-error .close { + color: #c0392b +} + +.alert-error a { + color: #fff; + text-decoration: underline +} + +.owl-item { + -ms-touch-action: pan-y; + touch-action: pan-y; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none +} + +.owl-carousel .owl-wrapper:after { + content: ""; + display: block; + clear: both; + visibility: hidden; + line-height: 0; + height: 0 +} + +.owl-carousel { + display: none; + position: relative; + width: 100%; + -ms-touch-action: pan-y +} + +.owl-carousel .owl-wrapper { + display: none; + position: relative; + -webkit-transform: translate3d(0px, 0px, 0px); + display: flex !important; + align-content: center +} + +.owl-carousel .owl-wrapper-outer { + overflow: hidden; + position: relative; + width: 100% +} + +.owl-carousel .owl-wrapper-outer.autoheight { + -webkit-transition: height 500ms ease-in-out; + -moz-transition: height 500ms ease-in-out; + -ms-transition: height 500ms ease-in-out; + -o-transition: height 500ms ease-in-out; + transition: height 500ms ease-in-out +} + +.owl-carousel .owl-item { + float: left; + min-height: 32px +} + +.owl-buttons { + color: #486c82 +} + +.owl-controls .owl-page, +.owl-controls .owl-buttons div { + cursor: pointer +} + +.owl-controls { + -webkit-tap-highlight-color: transparent; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + -o-user-select: none; + user-select: none +} + +.owl-carousel .owl-wrapper, +.owl-carousel .owl-item { + -webkit-backface-visibility: hidden; + -moz-backface-visibility: hidden; + -ms-backface-visibility: hidden; + -webkit-transform: translate3d(0, 0, 0); + -moz-transform: translate3d(0, 0, 0); + -ms-transform: translate3d(0, 0, 0) +} + +.owl-origin { + -webkit-perspective: 1200px; + -webkit-perspective-origin-x: 50%; + -webkit-perspective-origin-y: 50%; + -moz-perspective: 1200px; + -moz-perspective-origin-x: 50%; + -moz-perspective-origin-y: 50%; + perspective: 1200px +} + +.owl-fade-out { + z-index: 10; + -webkit-animation: fadeout .7s both ease; + -moz-animation: fadeout .7s both ease; + animation: fadeout .7s both ease +} + +.owl-fade-in { + -webkit-animation: fadein .7s both ease; + -moz-animation: fadein .7s both ease; + animation: fadein .7s both ease +} + +.owl-backslide-out { + -webkit-animation: backslideout 1s both ease; + -moz-animation: backslideout 1s both ease; + animation: backslideout 1s both ease +} + +.owl-backslide-in { + -webkit-animation: backslidein 1s both ease; + -moz-animation: backslidein 1s both ease; + animation: backslidein 1s both ease +} + +.owl-godown-out { + -webkit-animation: scaletofade .7s ease both; + -moz-animation: scaletofade .7s ease both; + animation: scaletofade .7s ease both +} + +.owl-godown-in { + -webkit-animation: godown .6s ease both; + -moz-animation: godown .6s ease both; + animation: godown .6s ease both +} + +.owl-fadeup-in { + -webkit-animation: scaleupfrom .5s ease both; + -moz-animation: scaleupfrom .5s ease both; + animation: scaleupfrom .5s ease both +} + +.owl-fadeup-out { + -webkit-animation: scaleupto .5s ease both; + -moz-animation: scaleupto .5s ease both; + animation: scaleupto .5s ease both +} + +@-webkit-keyframes empty { + 0% { + opacity: 1 + } +} + +@-moz-keyframes empty { + 0% { + opacity: 1 + } +} + +@keyframes empty { + 0% { + opacity: 1 + } +} + +@-webkit-keyframes fadein { + 0% { + opacity: 0 + } + + 100% { + opacity: 1 + } +} + +@-moz-keyframes fadein { + 0% { + opacity: 0 + } + + 100% { + opacity: 1 + } +} + +@keyframes fadein { + 0% { + opacity: 0 + } + + 100% { + opacity: 1 + } +} + +@-webkit-keyframes fadeout { + 0% { + opacity: 1 + } + + 100% { + opacity: 0 + } +} + +@-moz-keyframes fadeout { + 0% { + opacity: 1 + } + + 100% { + opacity: 0 + } +} + +@keyframes fadeout { + 0% { + opacity: 1 + } + + 100% { + opacity: 0 + } +} + +@-webkit-keyframes backslideout { + 25% { + opacity: .5; + -webkit-transform: translatez(-500px) + } + + 75% { + opacity: .5; + -webkit-transform: translatez(-500px) translatex(-200%) + } + + 100% { + opacity: .5; + -webkit-transform: translatez(-500px) translatex(-200%) + } +} + +@-moz-keyframes backslideout { + 25% { + opacity: .5; + -moz-transform: translatez(-500px) + } + + 75% { + opacity: .5; + -moz-transform: translatez(-500px) translatex(-200%) + } + + 100% { + opacity: .5; + -moz-transform: translatez(-500px) translatex(-200%) + } +} + +@keyframes backslideout { + 25% { + opacity: .5; + transform: translatez(-500px) + } + + 75% { + opacity: .5; + transform: translatez(-500px) translatex(-200%) + } + + 100% { + opacity: .5; + transform: translatez(-500px) translatex(-200%) + } +} + +@-webkit-keyframes backslidein { + + 0%, + 25% { + opacity: .5; + -webkit-transform: translatez(-500px) translatex(200%) + } + + 75% { + opacity: .5; + -webkit-transform: translatez(-500px) + } + + 100% { + opacity: 1; + -webkit-transform: translatez(0) translatex(0) + } +} + +@-moz-keyframes backslidein { + + 0%, + 25% { + opacity: .5; + -moz-transform: translatez(-500px) translatex(200%) + } + + 75% { + opacity: .5; + -moz-transform: translatez(-500px) + } + + 100% { + opacity: 1; + -moz-transform: translatez(0) translatex(0) + } +} + +@keyframes backslidein { + + 0%, + 25% { + opacity: .5; + transform: translatez(-500px) translatex(200%) + } + + 75% { + opacity: .5; + transform: translatez(-500px) + } + + 100% { + opacity: 1; + transform: translatez(0) translatex(0) + } +} + +@-webkit-keyframes scaletofade { + to { + opacity: 0; + -webkit-transform: scale(.8) + } +} + +@-moz-keyframes scaletofade { + to { + opacity: 0; + -moz-transform: scale(.8) + } +} + +@keyframes scaletofade { + to { + opacity: 0; + transform: scale(.8) + } +} + +@-webkit-keyframes godown { + from { + -webkit-transform: translatey(-100%) + } +} + +@-moz-keyframes godown { + from { + -moz-transform: translatey(-100%) + } +} + +@keyframes godown { + from { + transform: translatey(-100%) + } +} + +@-webkit-keyframes scaleupfrom { + from { + opacity: 0; + -webkit-transform: scale(1.5) + } +} + +@-moz-keyframes scaleupfrom { + from { + opacity: 0; + -moz-transform: scale(1.5) + } +} + +@keyframes scaleupfrom { + from { + opacity: 0; + transform: scale(1.5) + } +} + +@-webkit-keyframes scaleupto { + to { + opacity: 0; + -webkit-transform: scale(1.5) + } +} + +@-moz-keyframes scaleupto { + to { + opacity: 0; + -moz-transform: scale(1.5) + } +} + +@keyframes scaleupto { + to { + opacity: 0; + transform: scale(1.5) + } +} + +.owl-theme { + margin: 0 +} + +.ty-owl-controls { + margin: -40px 0 0; + float: right; + position: relative; + z-index: 100 +} + +.ty-sidebox .ty-owl-controls { + margin: -50px 0 0 +} + +.owl-theme .owl-controls { + margin-top: 10px; + text-align: center +} + +.owl-theme .owl-controls-outside { + margin-top: 0; + text-align: center +} + +.owl-theme .owl-controls .owl-buttons div { + color: #fff; + display: inline-block; + margin: 5px; + padding: 3px 10px; + font-size: 12px; + -webkit-border-radius: 30px; + -moz-border-radius: 30px; + border-radius: 30px; + background: #b2c7d4; + filter: alpha(opacity=70); + opacity: .7 +} + +.owl-theme .owl-controls-outside .owl-buttons div { + float: left; + font-size: 15px; + padding: 2px 9px; + height: 20px; + width: 6px; + margin-top: 3px; + margin-bottom: 0 +} + +.owl-theme .owl-controls-outside .owl-buttons div:last-child { + margin-right: 0 +} + +.owl-theme .owl-controls.clickable .owl-buttons div:hover { + filter: alpha(opacity=100); + opacity: 1; + text-decoration: none +} + +.owl-theme .owl-controls .owl-page { + display: inline-block +} + +.owl-theme .owl-controls .owl-page span { + display: block; + width: 12px; + height: 12px; + margin: 5px 7px; + filter: alpha(opacity=50); + opacity: .5; + -webkit-border-radius: 20px; + -moz-border-radius: 20px; + border-radius: 20px; + background: #a9b0b4 +} + +.owl-theme .owl-controls .owl-page.active span, +.owl-theme .owl-controls.clickable .owl-page:hover span { + filter: alpha(opacity=100); + opacity: 1 +} + +.owl-theme .owl-controls .owl-page span.owl-numbers { + height: auto; + width: auto; + color: #fff; + padding: 2px 10px; + font-size: 12px; + -webkit-border-radius: 30px; + -moz-border-radius: 30px; + border-radius: 30px +} + +.owl-item.loading { + background: url(../../../../../../../../design/themes/responsive/media/images/icons/ajax_loader.svg?1626074086) no-repeat center center +} + +.owl-more-theme .owl-controls { + width: 100%; + position: absolute; + top: 50%; + margin-top: -18px +} + +.owl-more-theme .owl-prev, +.owl-more-theme .owl-next { + position: absolute; + padding: 3px 8px 0 +} + +.owl-more-theme .owl-prev i, +.owl-more-theme .owl-next i { + font-size: 30px +} + +.owl-more-theme .owl-prev { + left: -35px; + -webkit-border-radius: 4px 0 0 4px; + -moz-border-radius: 4px 0 0 4px; + border-radius: 4px 0 0 4px +} + +.owl-more-theme .owl-next { + right: -35px; + -webkit-border-radius: 0 4px 4px 0; + -moz-border-radius: 0 4px 4px 0; + border-radius: 0 4px 4px 0 +} + +#lightbox-container-image-box { + height: 100% !important +} + +#lightbox-container-image, +#lightbox-container-image-data-box, +#lightbox-container-image-box, +#lightbox-image, +#lightbox-nav { + max-width: 100vw +} + +#lightbox-image { + max-height: 80vh +} + +@media(max-width:767px) { + #jquery-lightbox { + overflow: hidden + } +} + +@media(max-width:767px) { + .pp_pic_holder.pp_default { + max-width: 100vw; + overflow: hidden; + position: fixed; + top: 0% !important + } + + #pp_full_res, + .pp_content, + .ppt { + max-width: 100vw + } + + .pp_details { + max-width: 100% + } + + #pp_full_res img, + .pp_hoverContainer, + .pp_content { + max-width: 100%; + height: auto !important + } + + a.pp_close { + top: -35px !important + } +} + +.ty-owl-previewer .object-container, +.ty-owl-previewer .ty-owl-previewer__container, +.ty-owl-previewer .owl-wrapper-outer, +.ty-owl-previewer .owl-wrapper, +.ty-owl-previewer__image-container { + height: 100vh !important; + max-height: 100% +} + +.ty-owl-previewer__image--flex-fix-wrapper { + max-height: 80%; + max-width: 100%; + width: 100%; + height: 100%; + text-align: center; + display: flex; + justify-content: center; + align-items: center +} + +.ty-owl-previewer .owl-controls { + position: absolute; + bottom: 0; + left: 0; + right: 0 +} + +.ty-owl-previewer__image-container { + display: flex; + align-items: center; + justify-content: center +} + +.ty-owl-previewer__image { + display: inline; + max-width: 100%; + max-height: 100% +} + +.ty-owl-previewer__dialog { + height: 80vh !important; + width: 80vw !important; + top: 10vh !important; + left: 10vw !important; + max-height: none; + max-width: 80vw !important; + position: fixed +} + +@media(max-width:767px) { + .ty-owl-previewer__dialog { + height: 100vh !important; + width: 100vw !important; + top: 0 !important; + left: 0 !important; + max-width: 100vw !important + } +} + +.ty-owl-previewer__dialog .ui-dialog-titlebar { + background: #fff; + border: none +} + +.ty-owl-previewer.ui-dialog-content { + height: calc(100% - 48px) !important; + display: flex !important; + align-items: center; + justify-content: center +} + +.ty-owl-previewer.ui-dialog-content .object-container { + padding: 4px; + display: block; + width: 100% +} + +.ty-footer-form-block { + margin: 27px 0 0; + color: #fff +} + +.ty-footer-form-block__title { + display: inline-block; + padding-right: 30px; + font-size: 22px; + color: #fff; + font-weight: 400 +} + +.ty-footer-form-block__form { + display: inline-block; + margin: 0 0 10px !important; + width: 300px +} + +.ty-footer-form-block__form .cm-hint { + color: #c9c9c9 +} + +.dropdown-menu { + display: none +} + +.text-center { + text-align: center +} + +.text-right { + text-align: right +} + +.text-justify { + text-align: justify +} + +.litecheckout .cm-sdek-select-store { + position: static; + display: none +} + +.litecheckout .pickup--map-list, +.litecheckout .pickup--list, +.litecheckout .ty-checkout-select-store, +.litecheckout .ty-checkout-select-store__list, +.litecheckout .ty-checkout-select-store__map-full-div { + padding-left: 0 +} + +.litecheckout .pickup--show-all-btn-wrapper { + width: 100%; + padding: 6.5px; + text-align: center +} + +.litecheckout .pickup__open-pickupups-btn { + display: flex; + margin-top: 15px; + flex-basis: 100%; + padding: 10px 0; + justify-content: center; + align-items: center +} + +.litecheckout .pickup__offices { + align-items: flex-start; + align-content: flex-start; + overflow-y: auto; + height: 500px; + max-height: 500px; + padding: 4px +} + +.litecheckout .pickup__offices.litecheckout__fields-row--wrapped .ty-one-store { + flex-basis: 100%; + width: 100% +} + +.litecheckout .pickup__offices-wrapper { + display: flex; + flex-direction: column; + flex-basis: 30%; + overflow-y: hidden; + height: 502px; + max-height: 502px; + border: 1px solid #edf2f5; + border-right: 0; + margin: 0; + border-radius: 6px 0 0 6px +} + +.litecheckout .pickup__offices-wrapper--near-map { + flex-basis: 100% !important; + width: auto +} + +.litecheckout .pickup__offices--list { + padding: 0 +} + +@media(max-width:767px) { + .litecheckout .pickup__offices--list { + max-height: calc(100vh - 140px) !important; + min-height: calc(100vh - 140px) !important; + overflow: auto + } + + .litecheckout .pickup__offices--list-no-height.pickup__offices { + max-height: unset !important; + min-height: unset !important; + padding: 0; + padding-top: 15px + } + + .litecheckout .pickup__offices--list-no-height.pickup__offices .ty-one-store { + border-top: 1px solid #dce3ea; + border-right: 1px solid #dce3ea + } +} + +.litecheckout .pickup__offices--list .ty-one-store { + padding: 0 !important; + min-height: auto !important; + border-bottom: 1px solid #edf2f5; + padding-top: 10px !important; + padding-bottom: 10px !important +} + +.litecheckout .pickup__offices--list .ty-one-store .ty-sdek-store__label.ty-one-store__label { + border: 0 !important; + border-radius: 0 !important +} + +.litecheckout .pickup__offices--list .ty-sdek-office__selected { + border-radius: 0 !important; + border-left-color: #46aaf2 !important; + background-color: #fff !important +} + +.litecheckout .pickup__offices--list .ty-sdek-office__selected .ty-one-store__name { + color: #46aaf2 +} + +.litecheckout .pickup__offices--list .ty-sdek-office__selected .ty-sdek-store__label.ty-one-store__label { + box-shadow: none !important +} + +.litecheckout .pickup__search { + padding: 10px; + background-color: rgba(0, 0, 0, .02) +} + +.litecheckout .pickup__search-field { + max-width: 100%; + margin: 0 +} + +.litecheckout .pickup--list .pickup__offices-wrapper { + flex-basis: 100%; + border: 0; + overflow: initial; + height: auto +} + +.litecheckout .pickup--list .pickup__offices { + padding: 0; + margin: 0 -6.5px; + height: auto +} + +.litecheckout .pickup--list .pickup__offices.litecheckout__fields-row--wrapped .ty-one-store { + flex-basis: 33.3% +} + +.litecheckout .pickup--map-list, +.litecheckout .pickup--list { + display: flex; + flex-direction: row-reverse; + width: 100% +} + +.litecheckout .pickup__map-wrapper { + display: flex; + flex-basis: 70%; + height: 500px; + margin: 0; + border-radius: 0 6px 6px 0; + overflow: hidden +} + +@media(max-width:767px) { + .litecheckout .pickup__map-wrapper { + border-radius: 0 + } +} + +.litecheckout .pickup__map-container { + flex-basis: 100% +} + +.litecheckout .pickup__offices--list--no-sorting .ty-sdek-office__selected { + order: 1 !important +} + +.litecheckout .pickup--map-list .ty-checkout-select-store__item-view, +.litecheckout .pickup--map-list .ty-checkout-select-store__list__item-view, +.litecheckout .pickup--list .ty-checkout-select-store__item-view, +.litecheckout .pickup--list .ty-checkout-select-store__list__item-view { + padding: 0 6px; + padding-bottom: 20px +} + +.litecheckout .pickup--map-list .ty-checkout-select-store__item-view .ty-btn.ty-btn__tertiary.text-button, +.litecheckout .pickup--map-list .ty-checkout-select-store__list__item-view .ty-btn.ty-btn__tertiary.text-button, +.litecheckout .pickup--list .ty-checkout-select-store__item-view .ty-btn.ty-btn__tertiary.text-button, +.litecheckout .pickup--list .ty-checkout-select-store__list__item-view .ty-btn.ty-btn__tertiary.text-button { + padding: 10px 25px +} + +.litecheckout .pickup--map-list .ty-checkout-select-store__list .ty-one-store__label, +.litecheckout .pickup--list .ty-checkout-select-store__list .ty-one-store__label { + min-height: 105px; + display: flex; + align-items: center +} + +.litecheckout .pickup--map-list .ty-checkout-select-store__list .ty-one-store__label .ty-one-store__name, +.litecheckout .pickup--list .ty-checkout-select-store__list .ty-one-store__label .ty-one-store__name { + padding-top: 0 +} + +.litecheckout .pickup--map-list .ty-checkout-select-store__list .ty-one-store__label label, +.litecheckout .pickup--list .ty-checkout-select-store__list .ty-one-store__label label { + width: 100% +} + +.litecheckout .pickup--map-list .ty-one-store, +.litecheckout .pickup--list .ty-one-store { + display: flex; + width: 33.3%; + flex-basis: 33.3%; + padding: 6.5px; + margin: 0; + min-height: 145px; + order: 1; + background-color: rgba(0, 0, 0, .02); + border-left: 3px solid transparent; + box-sizing: border-box +} + +.litecheckout .pickup--map-list .ty-one-store.hidden, +.litecheckout .pickup--list .ty-one-store.hidden { + display: none +} + +.litecheckout .pickup--map-list .ty-one-store__name, +.litecheckout .pickup--list .ty-one-store__name { + font-size: 16px; + font-weight: 400; + padding: 0 +} + +.litecheckout .pickup--map-list .ty-one-store__description .ty-one-office__address, +.litecheckout .pickup--list .ty-one-store__description .ty-one-office__address { + font-size: 12px; + color: #6c6c6c +} + +.litecheckout .pickup--map-list .ty-one-store__description .ty-one-office__worktime, +.litecheckout .pickup--list .ty-one-store__description .ty-one-office__worktime { + font-size: 12px; + color: #6c6c6c +} + +.litecheckout .pickup--map-list .ty-one-store__label, +.litecheckout .pickup--list .ty-one-store__label { + display: flex; + flex-direction: column; + width: 100%; + margin: 0; + padding: 0 20px; + cursor: pointer; + justify-content: center; + border-radius: 5px; + border: solid 1px #acbdcd +} + +.litecheckout .pickup--map-list .ty-one-store__label *, +.litecheckout .pickup--list .ty-one-store__label * { + cursor: pointer +} + +.litecheckout .pickup--map-list .ty-one-store__radio-0, +.litecheckout .pickup--list .ty-one-store__radio-0 { + display: none; + border-radius: 5px; + border: solid 1px #acbdcd +} + +.litecheckout .pickup--map-list .ty-one-store:hover, +.litecheckout .pickup--list .ty-one-store:hover { + background: rgba(0, 0, 0, .05) +} + +.litecheckout .pickup--map-list .ty-one-store *, +.litecheckout .pickup--list .ty-one-store * { + box-sizing: border-box +} + +@media(max-width:1180px) { + + .litecheckout .pickup--map-list .ty-checkout-select-store, + .litecheckout .pickup--map-list .ty-checkout-select-store__list, + .litecheckout .pickup--list .ty-checkout-select-store, + .litecheckout .pickup--list .ty-checkout-select-store__list { + width: calc(100% - 2px) + } + + .litecheckout .pickup--map-list .ty-one-store, + .litecheckout .pickup--list .ty-one-store { + flex-basis: 100% + } +} + +@media(max-width:767px) { + + .litecheckout .pickup--map-list .ty-one-store, + .litecheckout .pickup--list .ty-one-store { + flex-basis: 100% + } + + .litecheckout .pickup--map-list, + .litecheckout .pickup--list { + flex-direction: row; + flex-wrap: wrap + } + + .litecheckout .pickup__offices-wrapper { + flex-basis: 100%; + height: auto; + max-height: unset; + border: 0 + } + + .litecheckout .pickup__offices { + padding: 4px; + height: auto; + max-height: unset; + overflow-y: auto + } + + .litecheckout .pickup__search { + border: 0 + } + + .litecheckout .pickup__map-wrapper { + flex-direction: column; + flex-basis: 100%; + height: auto; + border: 0 + } + + .litecheckout .pickup__map-container { + flex-basis: 70vh; + height: 70vh; + border: 1px solid #acbdcd + } + + .litecheckout .pickup__map-container--mobile-hint { + display: flex; + visibility: visible; + min-height: 25px; + justify-content: center; + align-items: center; + color: #fff; + background-color: #acbdcd; + border-top: 2px solid #fff; + padding: 5px; + text-align: center; + font-size: .9em + } +} + +@media(min-width:767px) { + + .litecheckout .accordeon-label, + .litecheckout .accordeon-checkbox { + visibility: hidden; + display: none + } + + .litecheckout .pickup__map-container--mobile-hint { + display: none; + visibility: hidden + } +} + +@media(max-width:767px) { + .litecheckout .accordeon-labels { + display: flex; + width: 100%; + padding: 0 10px + } + + .litecheckout .accordeon-label { + display: inline-flex; + border: 1px solid rgba(0, 0, 0, .14); + background-color: rgba(151, 151, 151, .178); + color: rgba(0, 0, 0, .65); + text-align: center; + cursor: pointer; + flex-basis: 100%; + height: 25px; + justify-content: center; + align-items: center + } + + .litecheckout .accordeon-label--checked { + background-color: #4fbe31; + font-weight: 900; + color: #fff + } + + .litecheckout .accordeon-label:first-child { + border-right: 0 + } + + .litecheckout .accordeon-label:checked { + color: #fff + } + + .litecheckout .accordeon-checkbox { + display: none + } + + .litecheckout .accordeon-content { + display: none + } + + .litecheckout .accordeon-checkbox:checked~.accordeon-content { + display: block + } +} + +.ui-dialog .ui-dialog-content.ty-checkout-select-store__map-full-div-in-popup { + min-width: 740px +} + +@media(max-width:768px) { + .ui-dialog .ui-dialog-content.ty-checkout-select-store__map-full-div-in-popup { + min-width: unset; + width: 100% + } +} + +@media(max-width:767px) { + .litecheckout-ya-baloon { + overflow-x: hidden + } +} + +.litecheckout__link { + color: #4fbe32 +} + +.litecheckout__shippings { + transition: .256s padding +} + +.litecheckout__shippings:after { + display: block; + content: ""; + transition: .256s all; + background-color: transparent; + color: #fff +} + +.litecheckout__overlay--active { + position: relative; + z-index: inherit; + padding: 0 5px; + min-height: 300px +} + +.litecheckout__overlay--active:after { + display: flex; + align-items: center; + justify-content: center; + text-align: center; + position: absolute; + top: 0; + bottom: 0; + left: 0; + right: 0; + background-color: rgba(0, 0, 0, .5); + border-radius: 6px; + content: attr(data-ca-lite-checkout-overlay-message); + color: #fff; + font-size: 38px +} + +.litecheckout--clear-field { + position: absolute; + top: 0; + bottom: 0; + right: 0; + width: 45px; + display: none +} + +.litecheckout--clear-field::after { + content: "×"; + display: block; + position: absolute; + width: 100%; + height: 100%; + text-align: center; + color: #4fbe32; + font-size: 45px; + line-height: .9 +} + +.litecheckout__input--selectable--like-link:focus~.litecheckout--clear-field { + display: block +} + +@media(min-width:768px) { + .litecheckout__input--selectable--like-link:focus~.litecheckout--clear-field { + display: none + } +} + +.litecheckout__select { + width: 100%; + height: 41px; + border: 1px solid #acbdcd; + border-radius: 5px; + font-size: 14px; + color: #2e3a47 +} + +.litecheckout__select:hover { + border-color: #465f73 +} + +.litecheckout__select:focus { + border-color: #4fbe31; + outline: 0; + box-shadow: 0 0 0 4px rgba(79, 190, 49, .2), 0 0 0 1px #4fbe31 +} + +.litecheckout__select-label { + display: block; + padding: 6px 0; + font-weight: 700 +} + +.litecheckout .ty-footer-form-block-policy__input--autoclicked .ty-lable-subscribe-policy__wrapper { + max-width: unset +} + +.litecheckout__pickpoint--postamat { + width: 100%; + margin-bottom: 6px +} + +.litecheckout__payment-method .ty-payments-list__item { + display: none +} + +.litecheckout__payment-instructions { + flex-direction: column +} + +.litecheckout__terms { + width: 100% +} + +.litecheckout__terms .ty-checkout__terms { + margin: 0; + border: 1px solid #dce3ea; + background-color: rgba(249, 249, 249, .5) +} + +.litecheckout__submit-btn { + width: 100%; + border-radius: 5px; + background-color: #f58d8e; + height: 54px; + text-align: center; + color: #fff; + font-size: 16px; + border: none; + transition: background 200ms +} + +.litecheckout__submit-btn--auto-width { + max-width: 100%; + width: auto; + padding: 0 30px +} + +.litecheckout__submit-btn:hover, +.litecheckout__submit-btn:focus { + background: #f7a9aa +} + +.litecheckout__form { + width: 100%; + display: flex; + flex-direction: column +} + +.litecheckout__page-title { + margin: 40px 0 15px; + padding: 0 8px; + font-size: 28px +} + +.tygh-footer>div.litecheckout__footer { + background: 0 0 +} + +.litecheckout__footer { + margin-top: 30px +} + +@media(max-width:767px) { + .litecheckout__footer .ty-logo-container { + margin-bottom: 10px + } +} + +.litecheckout__footer .footer-copyright { + background: 0 0 +} + +.litecheckout__footer .bottom-copyright { + margin-top: 0 +} + +.litecheckout__container { + flex-basis: 100%; + padding-top: .5rem; + padding-bottom: .5rem; + max-width: 100% +} + +.litecheckout__section { + display: flex; + flex-direction: column; + flex-shrink: 0; + flex-wrap: wrap +} + +.litecheckout__group { + display: flex; + flex-wrap: wrap; + max-width: 100%; + width: 100% +} + +.litecheckout__group.hidden { + display: none +} + +.litecheckout__group .captcha { + padding: 0 8px +} + +.litecheckout__item { + display: flex; + margin: .5rem +} + +.litecheckout__item--fill { + flex-grow: 1; + flex-shrink: 1 +} + +.litecheckout__item--full { + flex-grow: 1; + flex-shrink: 1; + width: 100% +} + +.litecheckout__item--center { + align-items: center +} + +.litecheckout__item:empty { + display: none +} + +.litecheckout__field { + display: flex; + flex-grow: 1; + flex-shrink: 1; + flex-basis: 100%; + min-width: 12rem; + margin: .5rem; + position: relative; + flex-direction: column; + align-items: flex-start +} + +@media(min-width:768px) { + .litecheckout__field { + min-width: 5rem + } +} + +@media(min-width:768px) { + .litecheckout__field--auto { + flex-grow: 0; + flex-shrink: 0; + flex-basis: auto + } +} + +@media(min-width:768px) { + .litecheckout__field--fill { + flex-basis: auto + } +} + +.litecheckout__field--xsmall { + flex-basis: calc(25% - 1rem) +} + +.litecheckout__field--small { + flex-basis: calc(33.33333% - 1rem) +} + +.litecheckout__field--medium { + flex-basis: calc(50% - 1rem) +} + +.litecheckout__field--large { + flex-basis: calc(66.66667% - 1rem) +} + +.litecheckout__field--xlarge { + flex-basis: calc(75% - 1rem) +} + +.litecheckout__label, +.litecheckout__input { + display: block; + padding: 0; + width: 100%; + font-weight: 400 +} + +.litecheckout__label.hidden, +.litecheckout__input.hidden { + display: none +} + +.litecheckout .litecheckout__input { + padding: 8px 4px; + border: 1px solid #acbdcd; + border-radius: 3px; + box-sizing: border-box; + height: auto; + border-radius: 5px; + background-color: #fff; + font-size: 16px; + color: #2e3a47 +} + +.litecheckout .litecheckout__input--textarea { + resize: vertical; + min-height: 120px; + width: 100% +} + +.litecheckout .litecheckout__input:not(:placeholder-shown), +.litecheckout .litecheckout__input:focus { + padding-top: 14px; + padding-bottom: 2px +} + +.litecheckout .litecheckout__input:hover { + border-color: #465f73 +} + +.litecheckout .litecheckout__input:focus { + border: solid 1px #4fbe31; + box-shadow: 0 0 0 4px rgba(79, 190, 49, .2), 0 0 0 1px #4fbe31; + outline: 0 +} + +.litecheckout .litecheckout__input:placeholder-shown:not(:focus)+.litecheckout__label { + top: 10px; + font-size: 14px; + pointer-events: none +} + +.litecheckout .litecheckout__input[type=hidden]+.litecheckout__label, +.litecheckout .litecheckout__input[disabled]+.litecheckout__label, +.litecheckout .litecheckout__input.disabled+.litecheckout__label { + display: none +} + +.litecheckout .litecheckout__input--selectable { + padding: initial; + padding-left: 9px; + height: 40px; + font-size: 16px; + background: 0; + border: 0; + border-bottom: 1px solid #acbdcd +} + +.litecheckout .litecheckout__input--selectable:not(:placeholder-shown), +.litecheckout .litecheckout__input--selectable:focus { + padding: initial; + padding-left: 9px +} + +.litecheckout .litecheckout__input--selectable+.litecheckout__label { + display: none +} + +.litecheckout .litecheckout__input--selectable--select { + padding-left: 4px; + border: 1px solid #acbdcd +} + +.litecheckout .litecheckout__input--selectable--select:not(:placeholder-shown), +.litecheckout .litecheckout__input--selectable--select:focus { + padding: initial; + padding-left: 4px; + color: #6c6c6c; + padding-right: 1rem; + text-align-last: right +} + +.litecheckout .litecheckout__input--selectable--select:hover { + border: solid 1px #465f73 +} + +.litecheckout .litecheckout__input--selectable--like-link { + background-color: transparent; + border: solid 1px #465f73; + font-size: 22px; + color: #4fbe31; + font-family: pt sans; + text-decoration: dashed; + text-decoration-line: underline +} + +.litecheckout .litecheckout__input--selectable--like-link:not(:placeholder-shown) { + cursor: pointer +} + +.litecheckout .litecheckout__input--selectable--like-link:hover { + border: solid 1px #465f73 +} + +.litecheckout .litecheckout__input--selectable--like-link:focus { + border-color: #4fbe31 +} + +@media(max-width:767px) { + .litecheckout .litecheckout__input--selectable--like-link { + font-size: 14px; + padding-left: 7px; + transition: cubic-bezier(.075, .82, .165, 1) .3s padding !important + } + + .litecheckout .litecheckout__input--selectable--like-link:not(:focus) { + padding-left: 0 + } + + .litecheckout .litecheckout__input--selectable--select { + max-width: unset; + font-size: 14px + } +} + +.litecheckout__label { + transition: .3s all; + font-size: 12px; + color: #a1a6aa; + position: absolute; + top: 2px; + left: 6px; + width: calc(100% - 12px); + overflow-x: hidden; + text-overflow: ellipsis; + word-wrap: break-word; + white-space: nowrap +} + +.litecheckout__step-title { + align-self: center; + font-size: 22px; + color: #2e3a47; + margin-bottom: 0; + font-weight: 400; + font-style: normal; + font-stretch: normal; + line-height: normal; + letter-spacing: normal +} + +.litecheckout__shipping-method { + display: flex; + justify-content: stretch; + align-items: stretch; + height: 130px +} + +.litecheckout__shipping-method__logo-image { + max-height: 60px +} + +.litecheckout__shipping-method__wrapper { + border-radius: 5px; + border: solid 1px #acbdcd; + display: flex; + justify-content: center; + align-items: center; + flex-direction: column; + width: calc(100% - 2px); + height: 130px; + overflow: hidden; + cursor: pointer +} + +.litecheckout__shipping-method__wrapper:hover { + border-color: #465f73 +} + +.litecheckout__shipping-method__wrapper .ty-error-text { + padding: 0 6px +} + +.litecheckout__shipping-method__radio:checked+.litecheckout__shipping-method__wrapper { + border: solid 1px #4fbe31; + box-shadow: 0 0 0 4px rgba(79, 190, 49, .2), 0 0 0 1px #4fbe31 +} + +.litecheckout__shipping-method__title, +.litecheckout__shipping-method__delivery-time { + margin: 0; + padding: 0; + text-align: center; + max-width: calc(100% - 1rem) +} + +.litecheckout__shipping-method__title { + color: #4fbe31; + font-size: 16px +} + +.litecheckout__shipping-method__delivery-time { + color: #6c6c6c; + font-size: 13px; + overflow: hidden; + text-overflow: ellipsis; + white-space: pre +} + +.litecheckout__autocomplete-dropdown { + margin-left: .5rem; + margin-right: .5rem; + max-width: 100%; + width: 100%; + position: relative +} + +.litecheckout__autocomplete-dropdown .ui-widget-content { + border-radius: 3px +} + +.litecheckout__autocomplete-dropdown .ui-menu { + padding: 0; + height: auto; + max-height: 30em; + overflow-y: auto +} + +.litecheckout__autocomplete-dropdown .ui-menu .ui-menu-item { + box-sizing: border-box; + padding: 10px 20px; + border: 1px solid transparent; + border-radius: 3px +} + +.litecheckout__autocomplete-dropdown .ui-state-hover, +.litecheckout__autocomplete-dropdown .ui-widget-content .ui-state-hover, +.litecheckout__autocomplete-dropdown .ui-widget-header .ui-state-hover, +.litecheckout__autocomplete-dropdown .ui-state-focus, +.litecheckout__autocomplete-dropdown .ui-widget-content .ui-state-focus, +.litecheckout__autocomplete-dropdown .ui-widget-header .ui-state-focus { + color: #4fbe31; + background: #fff +} + +.litecheckout__cart { + margin-top: 66px; + padding: 20px 15px; + border-radius: 5px; + background: #f7f9fa +} + +.litecheckout__cart .ty-order-products__price:not(:last-child) { + margin-bottom: 3px +} + +.litecheckout__cart .ty-product-options { + padding-top: 0; + color: #8d939c +} + +.litecheckout__cart .ty-order-products__item { + border-color: #d6e1e8 +} + +.litecheckout__order-products-p { + display: inline-block; + max-width: 238px +} + +.litecheckout__field--checkbox { + justify-content: flex-end; + flex-direction: column-reverse +} + +.litecheckout__field--checkbox .litecheckout__label { + position: relative; + left: 0; + top: 0; + right: auto; + width: auto; + font-size: 14px +} + +.litecheckout__field--checkbox .litecheckout__input { + width: auto; + margin-top: 5px +} + +.litecheckout__field--date .ty-calendar__block { + width: 100% +} + +.litecheckout__field--date .litecheckout__label { + font-size: 14px; + top: 0 +} + +.litecheckout__field--selectbox { + position: relative +} + +.litecheckout__field--selectbox:after { + position: absolute; + top: 10px; + right: 2px; + left: auto; + bottom: auto; + width: 15px; + height: 20px; + content: ''; + display: block; + -webkit-appearance: menulist; + -moz-appearance: none +} + +.litecheckout__field--selectbox .litecheckout__input { + width: 100%; + height: 40px; + padding: 0 !important; + padding-top: 14px !important; + padding-left: 2px !important; + -webkit-appearance: none; + -moz-appearance: menulist; + z-index: 1; + background-color: transparent +} + +.litecheckout__field--selectbox .litecheckout__label { + font-size: 14px +} + +.litecheckout__field--radio { + padding-top: 22px +} + +.litecheckout__field--radio .litecheckout__label { + top: 0; + left: 0; + font-size: 14px +} + +.litecheckout__field--radio .litecheckout__input { + display: inline; + padding: 0; + margin: 0; + width: unset; + height: unset; + margin-bottom: 2px; + margin-right: 5px +} + +.litecheckout__field--radio .litecheckout__input:focus { + box-shadow: 0 1px 0 4px rgba(79, 190, 49, .2), 0 1px 0 1px #4fbe31 +} + +.litecheckout__field--textarea .litecheckout__input { + resize: vertical; + min-height: 120px; + width: 100% +} + +#shipping_rates_list { + width: 100% +} + +#shipping_rates_list>.ty-shipping-options__total { + display: none; + visibility: hidden +} + +.ty-tiles { + display: flex; + justify-content: stretch; + align-items: stretch; + box-sizing: border-box; + min-height: 130px +} + +.ty-tiles__title, +.ty-tiles__text, +.ty-tiles__link { + margin: 0; + padding: 0 +} + +.ty-tiles__title--center, +.ty-tiles__text--center, +.ty-tiles__link--center { + text-align: center +} + +.ty-tiles__title { + color: #4fbe32; + font-size: 16px +} + +.ty-tiles__text { + color: #6c6c6c; + font-size: 13px +} + +.ty-tiles__link { + display: inline-block; + color: #4fbe32; + font-size: 13px +} + +.ty-tiles__link:hover { + color: #ea621f +} + +.ty-tiles__actions { + margin-top: auto; + padding-top: .5rem +} + +.ty-tiles__wrapper { + display: flex; + flex: 1; + flex-direction: column; + box-sizing: border-box; + min-height: 130px; + padding-top: .75rem; + padding-right: 1rem; + padding-bottom: .5rem; + padding-left: 1rem; + border: solid 1px #acbdcd; + border-radius: 5px; + overflow: hidden; + cursor: pointer +} + +.ty-tiles__wrapper:hover { + border-color: #465f73 +} + +.ty-tiles__wrapper .ty-error-text { + padding: 0 6px +} + +.ty-tiles__wrapper--center { + align-items: center +} + +.ty-tiles__wrapper--vcenter { + justify-content: center +} + +.ty-tiles__radio:checked+.ty-tiles__wrapper { + border: solid 1px #4fbe32; + box-shadow: 0 0 0 4px rgba(79, 190, 50, .2), 0 0 0 1px #4fbe32 +} + +@-ms-viewport { + width: device-width; +} + +.hidden { + display: none +} + +.visible-phone { + display: none !important +} + +.visible-tablet { + display: none !important +} + +.hidden-desktop { + display: none !important +} + +.visible-desktop { + display: inherit !important +} + +@media(min-width:768px) and (max-width:979px) { + .hidden-desktop { + display: inherit !important + } + + .visible-desktop { + display: none !important + } + + .visible-tablet { + display: inherit !important + } + + .hidden-tablet { + display: none !important + } +} + +@media(max-width:767px) { + .hidden-desktop { + display: inherit !important + } + + .visible-desktop { + display: none !important + } + + .visible-phone { + display: inherit !important + } + + .hidden-phone { + display: none !important + } +} + +.visible-print { + display: none !important +} + +@media print { + .visible-print { + display: inherit !important + } + + .hidden-print { + display: none !important + } +} + +@media(min-width:1224px) { + .row { + margin-left: -25px + } + + .row:before, + .row:after { + display: table; + content: ""; + line-height: 0; + width: 100% + } + + .row:after { + clear: both + } + + [class*=span] { + float: left; + min-height: 1px; + margin-left: 25px + } + + .container, + .navbar-static-top .container, + .navbar-fixed-top .container, + .navbar-fixed-bottom .container { + width: 1175px + } + + .span16 { + width: 1175px + } + + .span15 { + width: 1100px + } + + .span14 { + width: 1025px + } + + .span13 { + width: 950px + } + + .span12 { + width: 875px + } + + .span11 { + width: 800px + } + + .span10 { + width: 725px + } + + .span9 { + width: 650px + } + + .span8 { + width: 575px + } + + .span7 { + width: 500px + } + + .span6 { + width: 425px + } + + .span5 { + width: 350px + } + + .span4 { + width: 275px + } + + .span3 { + width: 200px + } + + .span2 { + width: 125px + } + + .span1 { + width: 50px + } + + .offset16 { + margin-left: 1225px + } + + .offset15 { + margin-left: 1150px + } + + .offset14 { + margin-left: 1075px + } + + .offset13 { + margin-left: 1000px + } + + .offset12 { + margin-left: 925px + } + + .offset11 { + margin-left: 850px + } + + .offset10 { + margin-left: 775px + } + + .offset9 { + margin-left: 700px + } + + .offset8 { + margin-left: 625px + } + + .offset7 { + margin-left: 550px + } + + .offset6 { + margin-left: 475px + } + + .offset5 { + margin-left: 400px + } + + .offset4 { + margin-left: 325px + } + + .offset3 { + margin-left: 250px + } + + .offset2 { + margin-left: 175px + } + + .offset1 { + margin-left: 100px + } + + .row-fluid { + width: 100% + } + + .row-fluid:before, + .row-fluid:after { + display: table; + content: ""; + line-height: 0; + width: 100% + } + + .row-fluid:after { + clear: both + } + + .row-fluid [class*=span] { + display: block; + width: 100%; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + float: left; + margin-left: 2.1276595744681% + } + + .row-fluid [class*=span]:first-child { + margin-left: 0 + } + + .row-fluid .controls-row [class*=span]+[class*=span] { + margin-left: 2.1276595744681% + } + + .row-fluid .span16 { + width: 100% + } + + .row-fluid .span15 { + width: 93.617021276596% + } + + .row-fluid .span14 { + width: 87.234042553191% + } + + .row-fluid .span13 { + width: 80.851063829787% + } + + .row-fluid .span12 { + width: 74.468085106383% + } + + .row-fluid .span11 { + width: 68.085106382979% + } + + .row-fluid .span10 { + width: 61.702127659574% + } + + .row-fluid .span9 { + width: 55.31914893617% + } + + .row-fluid .span8 { + width: 48.936170212766% + } + + .row-fluid .span7 { + width: 42.553191489362% + } + + .row-fluid .span6 { + width: 36.170212765957% + } + + .row-fluid .span5 { + width: 29.787234042553% + } + + .row-fluid .span4 { + width: 23.404255319149% + } + + .row-fluid .span3 { + width: 17.021276595745% + } + + .row-fluid .span2 { + width: 10.63829787234% + } + + .row-fluid .span1 { + width: 4.2553191489362% + } + + .row-fluid .offset16 { + margin-left: 104.25531914894% + } + + .row-fluid .offset16:first-child { + margin-left: 102.12765957447% + } + + .row-fluid .offset15 { + margin-left: 97.872340425532% + } + + .row-fluid .offset15:first-child { + margin-left: 95.744680851064% + } + + .row-fluid .offset14 { + margin-left: 91.489361702128% + } + + .row-fluid .offset14:first-child { + margin-left: 89.36170212766% + } + + .row-fluid .offset13 { + margin-left: 85.106382978723% + } + + .row-fluid .offset13:first-child { + margin-left: 82.978723404255% + } + + .row-fluid .offset12 { + margin-left: 78.723404255319% + } + + .row-fluid .offset12:first-child { + margin-left: 76.595744680851% + } + + .row-fluid .offset11 { + margin-left: 72.340425531915% + } + + .row-fluid .offset11:first-child { + margin-left: 70.212765957447% + } + + .row-fluid .offset10 { + margin-left: 65.957446808511% + } + + .row-fluid .offset10:first-child { + margin-left: 63.829787234043% + } + + .row-fluid .offset9 { + margin-left: 59.574468085106% + } + + .row-fluid .offset9:first-child { + margin-left: 57.446808510638% + } + + .row-fluid .offset8 { + margin-left: 53.191489361702% + } + + .row-fluid .offset8:first-child { + margin-left: 51.063829787234% + } + + .row-fluid .offset7 { + margin-left: 46.808510638298% + } + + .row-fluid .offset7:first-child { + margin-left: 44.68085106383% + } + + .row-fluid .offset6 { + margin-left: 40.425531914894% + } + + .row-fluid .offset6:first-child { + margin-left: 38.297872340426% + } + + .row-fluid .offset5 { + margin-left: 34.042553191489% + } + + .row-fluid .offset5:first-child { + margin-left: 31.914893617021% + } + + .row-fluid .offset4 { + margin-left: 27.659574468085% + } + + .row-fluid .offset4:first-child { + margin-left: 25.531914893617% + } + + .row-fluid .offset3 { + margin-left: 21.276595744681% + } + + .row-fluid .offset3:first-child { + margin-left: 19.148936170213% + } + + .row-fluid .offset2 { + margin-left: 14.893617021277% + } + + .row-fluid .offset2:first-child { + margin-left: 12.765957446809% + } + + .row-fluid .offset1 { + margin-left: 8.5106382978723% + } + + .row-fluid .offset1:first-child { + margin-left: 6.3829787234043% + } +} + +@media(min-width:768px) and (max-width:979px) { + .row { + margin-left: -10px + } + + .row:before, + .row:after { + display: table; + content: ""; + line-height: 0; + width: 100% + } + + .row:after { + clear: both + } + + [class*=span] { + float: left; + min-height: 1px; + margin-left: 10px + } + + .container, + .navbar-static-top .container, + .navbar-fixed-top .container, + .navbar-fixed-bottom .container { + width: 726px + } + + .span16 { + width: 726px + } + + .span15 { + width: 680px + } + + .span14 { + width: 634px + } + + .span13 { + width: 588px + } + + .span12 { + width: 542px + } + + .span11 { + width: 496px + } + + .span10 { + width: 450px + } + + .span9 { + width: 404px + } + + .span8 { + width: 358px + } + + .span7 { + width: 312px + } + + .span6 { + width: 266px + } + + .span5 { + width: 220px + } + + .span4 { + width: 174px + } + + .span3 { + width: 128px + } + + .span2 { + width: 82px + } + + .span1 { + width: 36px + } + + .offset16 { + margin-left: 746px + } + + .offset15 { + margin-left: 700px + } + + .offset14 { + margin-left: 654px + } + + .offset13 { + margin-left: 608px + } + + .offset12 { + margin-left: 562px + } + + .offset11 { + margin-left: 516px + } + + .offset10 { + margin-left: 470px + } + + .offset9 { + margin-left: 424px + } + + .offset8 { + margin-left: 378px + } + + .offset7 { + margin-left: 332px + } + + .offset6 { + margin-left: 286px + } + + .offset5 { + margin-left: 240px + } + + .offset4 { + margin-left: 194px + } + + .offset3 { + margin-left: 148px + } + + .offset2 { + margin-left: 102px + } + + .offset1 { + margin-left: 56px + } + + .row-fluid { + width: 100% + } + + .row-fluid:before, + .row-fluid:after { + display: table; + content: ""; + line-height: 0; + width: 100% + } + + .row-fluid:after { + clear: both + } + + .row-fluid [class*=span] { + display: block; + width: 100%; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + float: left; + margin-left: 1.3774104683196% + } + + .row-fluid [class*=span]:first-child { + margin-left: 0 + } + + .row-fluid .controls-row [class*=span]+[class*=span] { + margin-left: 1.3774104683196% + } + + .row-fluid .span16 { + width: 100% + } + + .row-fluid .span15 { + width: 93.617021276596% + } + + .row-fluid .span14 { + width: 87.234042553191% + } + + .row-fluid .span13 { + width: 80.851063829787% + } + + .row-fluid .span12 { + width: 74.468085106383% + } + + .row-fluid .span11 { + width: 68.085106382979% + } + + .row-fluid .span10 { + width: 61.702127659574% + } + + .row-fluid .span9 { + width: 55.31914893617% + } + + .row-fluid .span8 { + width: 48.936170212766% + } + + .row-fluid .span7 { + width: 42.553191489362% + } + + .row-fluid .span6 { + width: 36.170212765957% + } + + .row-fluid .span5 { + width: 29.787234042553% + } + + .row-fluid .span4 { + width: 23.404255319149% + } + + .row-fluid .span3 { + width: 17.021276595745% + } + + .row-fluid .span2 { + width: 10.63829787234% + } + + .row-fluid .span1 { + width: 4.2553191489362% + } + + .row-fluid .offset16 { + margin-left: 102.75482093664% + } + + .row-fluid .offset16:first-child { + margin-left: 101.37741046832% + } + + .row-fluid .offset15 { + margin-left: 97.872340425532% + } + + .row-fluid .offset15:first-child { + margin-left: 95.744680851064% + } + + .row-fluid .offset14 { + margin-left: 91.489361702128% + } + + .row-fluid .offset14:first-child { + margin-left: 89.36170212766% + } + + .row-fluid .offset13 { + margin-left: 85.106382978723% + } + + .row-fluid .offset13:first-child { + margin-left: 82.978723404255% + } + + .row-fluid .offset12 { + margin-left: 78.723404255319% + } + + .row-fluid .offset12:first-child { + margin-left: 76.595744680851% + } + + .row-fluid .offset11 { + margin-left: 72.340425531915% + } + + .row-fluid .offset11:first-child { + margin-left: 70.212765957447% + } + + .row-fluid .offset10 { + margin-left: 65.957446808511% + } + + .row-fluid .offset10:first-child { + margin-left: 63.829787234043% + } + + .row-fluid .offset9 { + margin-left: 59.574468085106% + } + + .row-fluid .offset9:first-child { + margin-left: 57.446808510638% + } + + .row-fluid .offset8 { + margin-left: 53.191489361702% + } + + .row-fluid .offset8:first-child { + margin-left: 51.063829787234% + } + + .row-fluid .offset7 { + margin-left: 46.808510638298% + } + + .row-fluid .offset7:first-child { + margin-left: 44.68085106383% + } + + .row-fluid .offset6 { + margin-left: 40.425531914894% + } + + .row-fluid .offset6:first-child { + margin-left: 38.297872340426% + } + + .row-fluid .offset5 { + margin-left: 34.042553191489% + } + + .row-fluid .offset5:first-child { + margin-left: 31.914893617021% + } + + .row-fluid .offset4 { + margin-left: 27.659574468085% + } + + .row-fluid .offset4:first-child { + margin-left: 25.531914893617% + } + + .row-fluid .offset3 { + margin-left: 21.276595744681% + } + + .row-fluid .offset3:first-child { + margin-left: 19.148936170213% + } + + .row-fluid .offset2 { + margin-left: 14.893617021277% + } + + .row-fluid .offset2:first-child { + margin-left: 12.765957446809% + } + + .row-fluid .offset1 { + margin-left: 8.5106382978723% + } + + .row-fluid .offset1:first-child { + margin-left: 6.3829787234043% + } +} + +@media(min-width:1224px) { + .ty-product-detail .ty-product-block__left { + box-sizing: border-box; + padding-right: 200px + } + + .ty-footer-grid__full-width>.row { + width: 1200px; + margin: 0 auto + } + + .ty-footer-grid__full-width>.row-fluid { + max-width: 1200px; + min-width: 280px; + margin: 0 auto + } + + .ty-footer-menu__items, + .ty-footer-general__body { + display: block !important + } +} + +@media(max-width:1224px) { + .ty-calendar__block { + width: 100px + } + + .ty-control-group__price { + width: 100px + } + + .ty-product-detail .ty-product-block__left { + box-sizing: border-box; + padding-right: 200px + } + + .ty-footer-grid__full-width>.row { + width: 960px; + margin: 0 auto + } + + .ty-footer-form-block__form { + width: 220px + } + + h3.ty-footer-form-block__title, + h3.ty-social-link__title { + font-size: 20px + } + + .ty-orders__actions-right { + float: none + } +} + +@media(max-width:979px) { + .ty-sidebox__body-toggle { + display: block + } + + .tygh-content .container, + .ty-footer-menu, + .footer-copyright { + padding: 0 10px + } + + .ty-select-block__a { + margin-right: 0 + } + + .top-currencies { + margin-left: 2px + } + + .ty-product-detail .ty-product-block__left { + box-sizing: border-box; + padding-right: 0 + } + + .ty-grid-list__item .ty-icon-left-circle, + .ty-grid-list__item .ty-icon-right-circle { + visibility: visible + } + + .ty-product-empty { + display: none + } + + .ty-wish-list-empty [class*=ty-column] { + width: 100% + } + + .ty-wish-list-empty [class*=ty-column]:first-child .ty-product-empty { + display: block + } + + .ty-compact-list__title { + width: 20% + } + + .ty-compact-list__controls { + width: 50% + } + + .ty-exception__code { + display: block; + width: 100% + } + + .ty-exception__title-info { + display: block; + padding-left: 0; + text-align: center + } + + .ty-exception__links { + margin: 0 + } + + .ty-exception__links-item { + float: none; + display: inline-block; + margin: 0 5px + } + + .ty-payment-icons .ty-payment-icons__item { + margin-left: 5px + } + + .ty-footer-form-block__title { + padding-left: 10px + } + + .ty-footer-form-block__title, + .ty-footer-form-block__form-container, + .ty-footer-form-block__form { + width: 100% + } + + h3.ty-social-link__title { + display: block; + margin-top: 21px; + margin-bottom: 10px; + margin-right: 0 + } + + .ty-sort-container { + padding-left: 0 + } + + .ty-product-block__note { + width: 100%; + position: static + } + + .ty-product-options__item-label { + display: block; + width: 100%; + float: none + } + + .ty-product-options__description, + .ty-product-block__option .help-inline { + margin-left: 0 + } + + .ty-product-variant-image { + margin-left: 0 + } + + .ty-product-detail .ty-product-block__left { + padding-right: 0 + } + + .ty-multi-checkout__step { + display: block; + width: 100%; + padding-bottom: 20px + } + + .ty-multi-checkout__arrow { + display: none + } + + .ty-payments-list { + padding-right: 20px + } + + .ty-payments-list__instruction { + width: 210px + } + + .ty-pagination__text { + display: none + } +} + +@media(min-width:768px) and (max-width:979px) { + .ty-footer-grid__full-width>.row { + width: 736px; + margin: 0 auto + } + + .ty-social-link__title { + margin-right: 70px + } + + .ty-footer-menu__items, + .ty-footer-general__body { + display: block !important + } + + .ty-footer-form-block__form { + width: 220px + } + + .ty-menu__item .ty-menu__item-link { + padding: 14px 12px + } + + .ty-menu__submenu-items .ty-top-mine__submenu-col { + min-width: 160px; + margin-right: 13px; + margin-bottom: 20px + } + + .ty-top-mine__submenu-col:nth-child(4n) { + margin-right: 0 + } + + .ty-account-info__buttons .ty-btn { + display: block; + margin-bottom: 10px; + margin-left: 0 + } + + .buttons-container.ty-cart-content__top-buttons .ty-btn, + .buttons-container.ty-cart-content__bottom-buttons .ty-btn { + margin-top: 5px; + margin-bottom: 5px + } + + .buttons-container.ty-cart-content__top-buttons button.ty-btn, + .buttons-container.ty-cart-content__bottom-buttons button.ty-btn { + width: 100% + } + + .buttons-container.ty-cart-content__top-buttons .ty-btn, + .buttons-container.ty-cart-content__bottom-buttons .ty-btn { + display: block; + margin-left: 0 + } + + .buttons-container.ty-cart-content__top-buttons .ty-cart-content__right-buttons, + .buttons-container.ty-cart-content__bottom-buttons .ty-cart-content__right-buttons { + text-align: right + } + + .buttons-container.ty-cart-content__top-buttons .ty-cart-content__right-buttons .ty-btn, + .buttons-container.ty-cart-content__bottom-buttons .ty-cart-content__right-buttons .ty-btn { + margin-left: auto; + margin-right: 0 + } + + .ty-orders-search-options .span4.ty-control-group { + width: 50%; + margin-left: 0 + } + + .ty-orders-search-options .ty-period { + margin-left: 0 + } + + .te-mode .ty-orders-detail__table-image { + float: none + } +} + +@media(min-width:768px) { + + .ty-cart-content .ty-cart-content__product-elem, + .ty-cart-content .ty-cart-content__title { + border: 0 + } + + .ty-menu__item, + .ty-text-links_show_inline { + display: block !important + } + + .ty-menu__menu-btn { + display: none !important + } + + .ty-menu-vertical .ty-menu__submenu [class*=menu-level-].ty-menu__item-active>.ty-menu__submenu-item-header .ty-menu__item-link { + background: #465363; + color: #393939 + } + + .ty-menu-vertical .ty-menu__submenu [class*=menu-level-].ty-menu__item-active i { + color: #fff + } + + .ty-sidebox__body { + display: block !important + } +} + +@media(max-width:767px) { + html.dialog-is-open { + overflow: scroll + } + + .ty-menu__items .ty-menu__items-show { + display: block !important; + border-bottom: 0 + } + + .ty-menu__item { + display: none; + float: none; + margin-right: 0; + border-bottom: 1px solid #f0f0f0; + padding: 0; + position: relative + } + + .no-touch .ty-menu__item:hover .ty-menu__submenu-items, + .ty-menu__item:hover .ty-menu__submenu-items { + display: none + } + + .ty-menu__item:last-child { + box-shadow: none; + border-bottom: 0 + } + + .ty-menu__item .ty-menu__item-toggle-active { + background: #f2f2f2 + } + + .ty-menu__item .ty-menu__item-link { + position: static + } + + .ty-menu__submenu .ty-menu__submenu-items { + padding: 0 + } + + .ty-menu__submenu .ty-menu__submenu-items .ty-menu__submenu-item { + border-bottom: 1px solid #d8d8d8; + margin: 0 + } + + .ty-menu__submenu .ty-menu__submenu-items .ty-menu__submenu-item .ty-menu__submenu-link { + display: block; + padding: 12px 30px 12px 40px + } + + .no-touch .ty-menu__submenu-items .ty-menu__submenu-link:hover { + color: #313a45 + } + + .ty-menu__submenu .ty-menu__submenu-items .ty-menu__submenu-item-active a { + color: #000; + background: 0 0 + } + + .ty-menu__submenu .ty-top-mine__submenu-col { + display: block; + position: relative; + margin: 0; + padding: 0 + } + + .ty-menu__submenu .ty-top-mine__submenu-col .ty-menu__submenu-item { + position: relative; + padding: 0; + padding-left: 35px + } + + .ty-menu__submenu .ty-top-mine__submenu-col .ty-menu__submenu-list { + display: none + } + + .ty-menu__submenu .ty-top-mine__submenu-col .ty-menu__item-toggle-active { + background: #e0e0e0 + } + + .ty-menu__items .ty-menu__submenu .ty-top-mine__submenu-col .ty-menu__item-toggle { + color: #bfbfbf + } + + .ty-menu__submenu .ty-menu__submenu-item-header .ty-menu__submenu-link { + padding: 13px 40px; + display: block + } + + .ty-menu__submenu .ty-top-mine__submenu-col .ty-menu__submenu-item-header { + min-height: 45px; + margin: 0; + padding-bottom: 0; + border-bottom: 1px solid #d8d8d8; + text-transform: uppercase; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box + } + + .ty-menu__submenu .ty-top-mine__submenu-col .ty-menu__submenu-item-header-active { + background: #e0e0e0 + } + + .ty-menu__menu-btn { + border-bottom: 0; + box-shadow: none + } + + .ty-menu__submenu-items { + background: #ededed; + position: static + } + + .ty-icon-short-list { + padding-right: 4px + } + + .ty-menu__item-toggle { + width: 50px; + height: 44px; + position: absolute; + text-align: center; + font-size: 35px; + right: 0; + z-index: 100; + color: #fff; + top: 0; + cursor: pointer + } + + .ty-menu__item-toggle:hover { + color: #fff + } + + .ty-menu__icon-hide, + .ty-menu__icon-open { + display: inline-block; + line-height: 46px + } + + .ty-menu__submenu-dropdown-bottom { + margin: auto + } + + .ty-menu__icon-hide { + display: none + } + + .ty-menu__item-toggle-active .ty-menu__icon-hide { + display: inline-block + } + + .ty-menu__item-toggle-active .ty-menu__icon-open { + display: none + } + + .ty-menu-vertical { + margin-bottom: 40px + } + + .ty-dropdown-box__content .ty-menu-vertical { + margin-bottom: 0 + } + + .ty-menu-vertical .ty-menu__item { + display: block + } + + .ty-menu-vertical .ty-menu__item .ty-menu__submenu { + position: static; + display: block + } + + .ty-menu-vertical .ty-menu__item.menu-level-2 { + padding-left: 35px + } + + .ty-menu-vertical .ty-menu__item .ty-menu__submenu .ty-menu__item-link { + background: 0 0; + color: #465363; + padding-left: 40px + } + + .ty-menu-vertical .ty-menu__submenu .ty-menu__submenu-item-header .ty-menu__item-link { + color: #465363 + } + + .ty-menu-vertical .ty-menu__submenu .dropdown-vertical__dir .ty-menu__submenu-item-header .ty-menu__item-link { + text-transform: uppercase; + font-weight: 700 + } + + .ty-menu-vertical .ty-menu__submenu .menu-level-2.ty-menu__item-active .ty-menu__item-link { + background: #e0e0e0 + } + + .ty-menu-vertical .ty-menu__submenu .menu-level-2.ty-menu__item-active .ty-menu__item-link { + color: #000 + } + + .ty-menu-vertical .ty-menu__submenu .ty-menu__submenu .ty-menu__submenu-item-header .ty-menu__item-link { + padding-left: 40px; + text-transform: none; + font-weight: 400; + background: 0 0 + } + + .ty-menu-vertical .ty-menu__item-toggle i { + top: 3px + } + + .ty-menu-vertical .ty-menu__submenu .ty-menu__submenu .ty-menu__submenu-item-header .ty-menu__item-link { + padding-left: 40px + } + + .ty-menu-vertical .ty-menu__item .ty-menu__submenu-items .ty-menu__submenu-items { + border-right: 0; + border-bottom: 0; + border-left: 0 + } + + .ty-menu-vertical .ty-menu__submenu-items .dropdown-vertical__dir .ty-menu__item-toggle { + background: 0 0; + color: #bfbfbf + } + + .ty-menu-vertical .ty-menu__submenu-item-header { + margin-bottom: 0; + padding-bottom: 0; + min-height: none; + border-bottom: none + } + + .ty-menu-vertical .ty-menu__submenu-item-header .ty-menu__submenu-item-header .ty-menu__item-link { + color: #1abc9c; + text-transform: none + } + + .ty-menu-vertical .ty-menu__item .ty-menu__submenu .ty-menu__item:hover i { + color: #a1a6aa !important + } + + .ty-menu-vertical .ty-menu__item .ty-menu__submenu .ty-menu__submenu-items { + border: 1px solid #2b3e51; + border-top: 0; + border-bottom: 0 + } + + .ty-menu-vertical .ty-menu__item .ty-menu__submenu .ty-menu__submenu-items .ty-menu__submenu-items { + border: 0 + } + + .ty-menu-vertical .ty-menu__submenu-items .ty-menu__item { + border-top: 1px solid #d8d8d8; + border-bottom: 0 + } + + .no-touch .ty-menu-vertical .ty-menu__submenu .ty-menu__item:hover>.ty-menu__submenu-item-header .ty-menu__item-link { + background: 0 0; + color: #313a45 + } + + .ty-menu-vertical .menu-level-1.ty-menu__item-active>.ty-menu__submenu-item-header { + background: #e0e0e0 + } + + .ty-menu-vertical__dropdown .ty-menu__item { + display: none + } + + .ty-menu-vertical .ty-menu__items.rtl .ty-menu__submenu { + width: auto + } + + .ty-menu-vertical .ty-menu__items.rtl .ty-menu__submenu-items { + width: auto + } + + .ty-menu-vertical .ty-menu__items.rtl .ty-menu__item-toggle { + left: 0 + } + + .ui-dialog input[type=text], + .ui-dialog input[type=password], + .ui-dialog textarea, + .ui-dialog select { + width: 100% + } + + .ui-dialog input[type=checkbox] { + margin: -20px 0 + } + + body.dialog-is-open { + overflow: visible + } + + div.ui-dialog .ui-dialog-title { + overflow: hidden; + text-overflow: ellipsis + } + + .ty-estimation-buttons__rate { + margin-bottom: 0 + } + + .top-menu-grid { + padding-top: 0 + } + + .top-logo-grid { + padding-top: 15px + } + + .top-logo-grid:before, + .top-logo-grid:after { + display: table; + content: ""; + line-height: 0; + width: 100% + } + + .top-logo-grid:after { + clear: both + } + + .ty-logo-container { + text-align: center; + margin: 10px 0 30px + } + + .tygh-header>div, + .tygh-top-panel>div { + padding: 0 10px + } + + .tygh-top-panel .ty-text-links-wrapper { + border: none + } + + .ty-mainbox-title .ty-status { + display: block; + float: none + } + + .notification-content-extended { + width: 96%; + left: 2%; + right: 10px; + margin: 0 + } + + .ty-product-notification__body .ty-product-options-name { + width: 50% + } + + .ty-product-notification__body .ty-product-options-content { + width: 50%; + text-align: right + } + + .notification-container { + top: 0; + right: 0; + min-width: 100%; + width: 100% + } + + .notification-content { + margin: 0; + border: none + } + + .notification-content .close { + top: 8px; + right: 20px + } + + .ty-product-notification__image { + float: none; + display: block; + margin: 0 auto + } + + .ty-product-notification__product-name { + max-width: 200px + } + + .ty-table table, + .ty-table thead, + .ty-table tbody, + .ty-table th, + .ty-table td, + .ty-table tr { + display: block + } + + .ty-table { + margin: 5px 0 20px + } + + .ty-table { + border: none; + display: block; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box + } + + .ty-table thead tr { + position: absolute; + top: -9999px; + left: -9999px + } + + .ty-table tr { + border: 1px solid #ccc; + border-bottom: none + } + + .ty-table tr:last-child { + border-bottom: 1px solid #ccc + } + + .ty-table td { + border: none; + border-bottom: 1px solid #eee; + white-space: normal; + text-align: left; + min-height: 18px; + width: auto !important + } + + .ty-table td:before, + .ty-table td:after { + display: table; + content: ""; + line-height: 0; + width: 100% + } + + .ty-table td:after { + clear: both + } + + .ty-table tr td:last-child { + border-bottom: 0 + } + + .ty-table__no-items td { + padding: 0 + } + + .ty-table__no-items .ty-no-items { + margin-bottom: 0 + } + + .ty-table__responsive-header { + float: left; + width: 35%; + padding-right: 5%; + font-weight: 700; + word-break: normal; + display: block + } + + .ty-table__responsive-content { + float: left; + width: 50% + } + + .ty-table.hidden, + .ty-table .hidden { + display: none + } + + .ty-cart-content .ty-cart-content__image-block { + border-bottom: 0 + } + + .ty-cart-content .ty-table__responsive-header, + .ty-table__responsive-content { + float: none; + width: 100%; + padding: 0 + } + + .ty-cart-content__image { + float: none; + text-align: center + } + + .ty-cart-content__left-buttons, + .ty-cart-content__right-buttons { + float: none + } + + .ty-cart-content__right-buttons { + margin-top: 10px + } + + .ty-cart-content__top-buttons .ty-btn, + .ty-cart-content__bottom-buttons .ty-btn { + display: block; + width: 100%; + margin: 0; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box + } + + .ty-cart-content__top-buttons .ty-btn+.ty-btn, + .ty-cart-content__bottom-buttons .ty-btn+.ty-btn { + margin: 10px 0 0 + } + + .ty-cart-total .ty-coupons__container { + float: none; + padding: 0; + width: 100% + } + + .ty-cart-content__estimation { + max-width: inherit + } + + .ty-cart-statistic { + float: none; + margin-top: 10px + } + + .ty-cart-statistic__title, + .ty-cart-statistic__total-title { + width: 50%; + margin-right: 0; + float: left + } + + .ty-cart-statistic__value, + .ty-cart-statistic__total-value { + width: 50%; + float: left + } + + .top-links-grid .ty-dropdown-box { + background: 0 0 + } + + .ty-dropdown-box .ty-account-info__title-txt { + display: none + } + + .account-benefits { + margin: 0 0 30px + } + + .top-cart-content { + margin: 13px 0 + } + + .header-widget-grid .top-cart-content { + margin: 0 + } + + .header-widget-grid { + padding: 0 10px + } + + .ty-grid-list__item:hover { + border-radius: 0; + background: 0 0 + } + + .ty-quick-view-button { + display: none; + margin-bottom: 30px + } + + .product-list__control { + float: none; + margin-bottom: 10px + } + + .product-list__image { + float: none; + margin: 0 0 20px; + width: 100%; + text-align: center + } + + .ty-compact-list__controls { + width: 60% + } + + .ty-compact-list__image .ty-discount-label { + display: inline-block; + height: 30px; + position: static; + float: none + } + + .ty-compact-list__image { + padding: 0 10px 0 0 + } + + .ty-sidebox { + margin-bottom: 10px + } + + .ty-sidebox:last-child { + margin-bottom: 30px + } + + .ty-product-block__left { + display: block; + overflow: visible; + min-width: 0 + } + + .ty-product-block { + position: initial + } + + .ty-product-block__img-wrapper { + width: 100%; + margin: 0; + float: none; + text-align: center; + min-height: 0 + } + + .ty-product-block__img-wrapper:before, + .ty-product-block__img-wrapper:after { + display: table; + content: ""; + line-height: 0; + width: 100% + } + + .ty-product-block__img-wrapper:after { + clear: both + } + + .ty-product-block__img-wrapper .ty-no-image { + width: 100% !important + } + + .ui-dialog .ty-product-variant-image { + margin-left: 0 + } + + .ty-product-bigpicture__left, + .ty-product-bigpicture__left-wrapper { + width: 100%; + margin: 0 + } + + .ty-product-bigpicture__right { + width: 100%; + margin-left: 0 + } + + .ty-product-thumbnails { + width: 100% !important + } + + .ty-account-detail { + margin-left: 0; + background: 0 0; + padding-bottom: 0 + } + + .ty-profile-field__switch-label { + float: none; + text-align: center; + margin-bottom: 10px + } + + .ty-profile-field__switch-actions { + float: none; + text-align: center + } + + .ty-billing-first-name, + .ty-billing-last-name, + .ty-shipping-first-name, + .ty-shipping-last-name, + .ty-billing-country, + .ty-billing-state, + .ty-shipping-country, + .ty-shipping-state, + .ty-first-name, + .ty-last-name { + width: 100% + } + + .ty-billing-first-name+.ty-billing-last-name, + .ty-billing-country+.ty-billing-state, + .ty-shipping-first-name+.ty-shipping-last-name, + .ty-shipping-country+.ty-shipping-state, + .ty-first-name+.ty-last-name { + margin-left: 0 + } + + .ty-buttons-container__add-or-close .ty-btn { + display: block; + margin: 0 + } + + .ty-buttons-container__add-or-close .ty-close-text { + padding-top: 10px; + display: inline-block + } + + .ty-login-info { + margin: 30px 0 0 + } + + .ty-success-registration__item { + display: block; + width: 100% + } + + .ty-account-benefits { + margin: 30px 0 0 + } + + .ty-company-fields { + margin-bottom: 20px + } + + .ty-company-info { + margin: 0; + padding: 0; + background: 0 0 + } + + .ty-features-all { + text-align: center + } + + .ty-feature__image { + float: none + } + + .ty-product-feature__label { + width: 180px + } + + .ty-sitemap__tree-section-list, + .ty-sitemap__section-wrapper { + width: 50% + } + + .ty-breadcrumbs { + padding-right: 0 + } + + .ty-product-switcher { + display: inline-block; + width: 100%; + position: relative; + padding: 0; + top: 10px; + text-align: center + } + + .ty-product-switcher__a { + position: relative; + top: 0; + vertical-align: middle; + font-size: 20px + } + + .ty-product-switcher__a-left, + .ty-product-switcher__a-right { + float: none + } + + .ty-product-switcher__a-left { + margin-right: 10px + } + + .ty-product-switcher__a-right { + margin-left: 10px + } + + .ty-product-switcher span { + display: inline-block; + float: none; + font-size: 100% + } + + .ty-checkout__login { + float: none; + padding: 0 15px; + width: 100%; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box + } + + .ty-checkout__register { + float: none; + padding: 0 15px; + margin: 0; + width: 100%; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box + } + + .ty-checkout__register-content { + padding-left: 0 + } + + .ty-checkout-buttons__submit-order { + padding-bottom: 20px + } + + .ty-payments-list__instruction { + width: 255px + } + + .ty-compare-products__menu, + .ty-compare-sort { + width: 130px + } + + .ty-compare-products__product, + .ty-compare-feature_item_size { + width: 180px + } + + .ty-compare__buttons .ty-btn { + width: 100%; + display: block; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box + } + + .ty-compare__buttons .ty-btn+.ty-btn { + margin: 15px 0 0 + } + + .search-block-grid { + margin-top: 0 !important + } + + .footer-no-wysiwyg ul { + margin: 0 + } + + .ty-social-link-block { + margin: 10px 0 20px; + text-align: center + } + + .ty-footer-grid__full-width .ty-float-right, + .ty-footer-grid__full-width .ty-float-left { + float: none + } + + .ty-footer-grid__full-width>.row { + width: auto; + margin: 0 auto + } + + .ty-footer-menu__items, + .ty-footer-general__body { + margin: 0; + display: none + } + + .ty-footer-menu__items .ty-text-links__item, + .ty-footer-general__body .ty-text-links__item { + padding: 15px 0; + border-bottom: 1px solid #edf2f5; + padding-left: 20px; + margin-bottom: 0 + } + + .ty-footer-menu__item { + padding: 15px 0; + border-bottom: 1px solid #dfdfdf; + padding-left: 20px; + margin-bottom: 0 + } + + .ty-footer-menu__header, + .ty-footer-general__header { + padding: 15px 30px 15px 0; + border-bottom: 1px solid #f4f5f6 + } + + .ty-footer-menu__icon-open, + .ty-footer-menu__icon-hide { + position: absolute; + top: 12px; + right: 0; + font-size: 40px; + color: #bfbfbf; + cursor: pointer + } + + .ty-footer-menu__icon-open { + display: block + } + + .ty-footer-menu__header.open .ty-footer-menu__icon-hide, + .ty-footer-general__header.open .ty-footer-menu__icon-hide { + display: block + } + + .ty-footer-menu__header.open .ty-footer-menu__icon-open, + .ty-footer-general__header.open .ty-footer-menu__icon-open { + display: none + } + + .ty-footer-form-block__title { + display: block; + padding-right: 0 + } + + .ty-footer-form-block { + text-align: center; + margin: 20px 0 0 + } + + .order-summary { + margin-top: 0 + } + + .ty-step__container-active { + margin-bottom: 20px + } + + .ty-checkout-complete__buttons .ty-btn { + margin: 0 0 15px + } + + .ty-checkout-complete__buttons-left, + .ty-checkout-complete__buttons-right { + float: none + } + + .ty-period__wrapper { + float: none + } + + .ty-login-popup { + min-width: 100px; + max-width: none + } + + .ty-orders__actions .ty-btn { + text-align: left; + display: block + } + + .ty-orders__actions .ty-btn+.ty-btn { + margin-left: 0; + margin-top: 3px + } + + .ty-profiles-info__item { + float: none; + width: 100%; + margin-bottom: 20px + } + + .ty-profiles-info__item:last-child { + margin-bottom: 0 + } + + .ty-orders-detail__table-image { + float: none; + text-align: center; + margin-bottom: 10px + } + + .ty-orders-detail__table-description { + margin-left: 0 + } + + .ty-orders-summary__right { + float: none + } + + .ty-orders-summary__wrapper { + float: none; + min-width: 0 + } + + .ty-orders-search-options .ty-period { + float: none; + margin-left: 0 + } + + .ty-orders-search-options .ty-period__wrapper { + padding-right: 0 + } + + .ty-orders-search-options .ty-period__select { + width: 100% + } + + .ty-orders-search-options .ty-period__select-date .ty-control-group__title { + display: none + } + + .ty-orders-search-options .ty-status-info { + margin-left: 0 + } + + .ty-orders-search-options .ty-status-info label { + width: 50% + } + + .ty-orders-search-options .ty-orders-search__options-status { + margin-left: 0 + } + + .container { + width: auto + } + + .row-fluid { + width: 100% + } + + .row { + margin-left: 0 + } + + [class*=span], + .row-fluid [class*=span] { + float: none; + display: block; + width: 100%; + margin-left: 0; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box + } + + .span12, + .row-fluid .span12 { + width: 100%; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box + } + + .row-fluid [class*=offset]:first-child { + margin-left: 0 + } + + .ty-cart-items { + width: 256px + } + + .ty-cart-items__list-item-desc { + width: 187px + } + + .ty-cart-items__list-item-tools { + right: -10px; + display: block + } + + .vendor-info-grid { + margin-top: 10px + } + + .vendor-stores-block-grid { + float: left !important; + width: auto !important; + padding: 10px 0 + } + + .vendor-logo-grid .ty-logo-container-vendor { + text-align: center; + float: none; + margin-bottom: 20px + } + + .vendor-search-grid { + margin-bottom: 20px + } + + .ty-text-links-wrapper { + border-bottom: 1px solid #edf2f5 + } + + .ty-text-links-btn { + display: inline-block; + padding: 9px 10px 7px; + color: #6a93ac; + cursor: pointer + } + + .ty-text-links-btn.open { + z-index: 650; + background: #6a93ac; + color: #fff + } + + .ty-text-links-btn__arrow { + font-size: 20px; + line-height: 0; + position: relative; + top: 5px; + width: 7px; + vertical-align: super + } + + .top-links-grid .ty-text-links-btn { + margin-top: -7px + } + + .ty-text-links_show_inline { + position: absolute; + min-width: 170px; + left: 15px; + right: 15px; + display: none; + background: #fff; + border: 1px solid #7ea1b7; + padding: 7px 14px; + z-index: 5; + margin: 0 + } + + .ty-text-links_show_inline .ty-level-0>.ty-text-links { + display: block; + background: 0 0; + border: 0; + padding: 0; + position: relative + } + + .ty-text-links_show_inline .ty-text-links__item { + margin-right: 0; + display: block + } + + .ty-text-links_show_inline .ty-text-links { + margin: 0 + } + + .ty-text-links_show_inline .ty-text-links__item .ty-text-links__a { + display: block + } + + .ty-filter-tooltip { + float: right; + left: 0 !important; + margin-right: 20px + } + + .daterangepicker.dropdown-menu.opensright, + .daterangepicker.dropdown-menu.opensleft { + min-width: 340px !important + } + + .daterangepicker.dropdown-menu.opensright .ranges, + .daterangepicker.dropdown-menu.opensright .calendar, + .daterangepicker.dropdown-menu.opensleft .ranges, + .daterangepicker.dropdown-menu.opensleft .calendar { + float: none; + margin: 10px auto 15px + } + + .daterangepicker.dropdown-menu.opensright:before, + .daterangepicker.dropdown-menu.opensleft:before, + .daterangepicker.dropdown-menu.opensright:after, + .daterangepicker.dropdown-menu.opensleft:after { + display: none + } + + .ty-sidebox__body { + display: none + } + + .ty-horizontal-product-filters { + padding-left: 0 + } + + .ty-horizontal-product-filters-dropdown { + width: 100%; + border-bottom: 1px solid #f3f5f7 + } + + .ty-horizontal-product-filters-dropdown:last-child { + border-bottom: none + } + + .ty-horizontal-product-filters-dropdown__content { + min-width: 100%; + border-top: none; + border-bottom: none; + border-left: 1px solid #edf2f5; + border-right: 1px solid #edf2f5; + box-sizing: border-box; + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box + } + + .ty-horizontal-product-filters-dropdown .ty-horizontal-product-filters-dropdown__wrapper { + display: block; + padding: 10px + } + + .ty-horizontal-product-filters-dropdown__content { + position: relative; + margin-bottom: 10px + } + + .ty-horizontal-product-filters-dropdown__icon { + float: right; + margin-right: 4px; + top: 0 + } + + .ty-subcategories { + text-align: center + } +} + +@media screen and (max-width:480px) { + .ty-mainbox-title__right { + float: none; + display: block; + margin-top: 0 + } + + .ty-mainbox-title__left { + float: none; + display: block + } + + .ty-cart-content__buttons { + padding: 16px 12px + } + + .header-widget-grid .top-logo-grid { + padding-top: 0 + } + + .header-widget-grid .top-logo-grid { + width: 50%; + float: left + } + + .header-widget-grid .cart-content-grid { + width: 50%; + float: right; + white-space: nowrap + } + + .ty-estimation-buttons__rate { + margin-bottom: 10px + } + + .ty-search-form__input { + margin: 4px 0; + width: 100% + } + + .ty-features-all .ty-column6 { + width: 50% + } + + .ty-product-list__image { + float: none; + margin-bottom: 25px; + margin-right: 0; + text-align: center + } + + .ty-sitemap__tree-section-list, + .ty-sitemap__section-wrapper { + width: 100%; + min-height: 0 + } + + .ty-compact-list__controls .ty-product-coming-soon { + position: absolute; + right: 0; + text-align: left; + padding-top: 0 + } + + .ty-product-feature__label { + width: 120px + } + + .ty-product-feature__value { + max-width: 160px + } + + .ty-sort-container__views-a { + padding: 7px + } + + .ty-compact-list__image, + .ty-compact-list__title { + display: block; + width: 100%; + float: none; + padding: 0 + } + + .ty-compact-list__image { + margin-bottom: 10px + } + + .ty-btn__add-to-cart { + margin-right: 10px + } + + .ty-product-block__button .ty-btn+.ty-btn, + .ty-product-block__button .ty-btn~.ty-btn { + margin-left: 0 + } + + .ty-pagination { + text-align: center + } + + .ty-pagination__btn { + width: 94% + } + + .ty-pagination__items { + margin: 15px 0 + } + + .ty-pagination__item { + padding: 5px 6px + } + + .ty-pagination__text { + display: inline-block + } + + .ty-compact-list__controls { + width: 100%; + text-align: left + } + + .ty-compact-list__price { + text-align: left; + width: 100%; + padding-bottom: 10px + } + + .ty-compact-list__price .ty-price-update { + display: inline-block + } + + .ty-step__title-txt { + font-size: 18px + } + + .ty-checkout__billing-tabs .ty-tabs { + padding: 0 + } + + .ty-checkout__billing-tabs .ty-tabs__item { + float: none + } + + .ty-checkout-complete__login-info, + .ty-checkout-complete__create-account { + display: block; + width: 100%; + margin-left: 0 + } + + .ty-payments-list { + padding-right: 0 + } + + .ty-payments-list__instruction { + width: auto + } + + .ty-companies__img { + float: none + } + + .ty-companies__info { + padding: 0 + } + + .ty-filters-search__item { + padding-right: 0 + } + + .ty-subcategories-block { + min-width: 100% + } + + .ty-product-notification__buttons { + display: block; + text-align: right + } + + .ty-product-notification__buttons>div { + float: none; + display: inline-block; + margin: 3px auto + } +} + +.stripe-connect-payment-form__card, +.stripe-connect-payment-form__expiry, +.stripe-connect-payment-form__cvc { + padding: 8px; + border: 1px solid #acbdcd; + background: #fff; + min-height: 21px +} + +.stripe-connect-payment-form__card { + min-width: 300px +} + +.stripe-connect-payment-form__expiry { + max-width: 75px +} + +.stripe-connect-payment-form__cvc { + width: 45px; + display: inline-block; + vertical-align: middle +} + +.ty-control-group.error .sc-field { + border-color: #bf4d4d +} + +.font-10-pt { + font-size: 10pt +} + +.ty-discussion-post__buttons form table { + margin-bottom: 20px +} + +.ty-discussion-post__buttons form table tr { + display: flex; + align-items: flex-end +} + +.ty-discussion-post__buttons form table tr td:first-child { + margin-bottom: 10px +} + +.ty-discussion-post__buttons form .ty-fileuploader__file-link { + display: block !important +} + +.ty-discussion-post__buttons form .ty-fileuploader__a { + display: inline-block; + padding: 10px 8px; + border: 1px solid #999; + background-color: #fff; + color: #0e90d2 +} + +.ty-discussion-post__buttons form .ty-btn.ty-btn__send-right:hover { + margin-left: 16px +} + +.ty-sd_messaging_system-message__content a { + color: #00e +} + +.sd-grid-list__company-name, +.sd-grid-list__vendor-country, +.sd-product-list__company-name, +.sd-product-list__vendor-country { + padding: 0; + color: #313a45; + font-size: 13px +} + +.sd-product-list__vendor-country { + padding-bottom: 6px +} + +.ty-grid-list__item-name { + margin-top: 7px; + margin-bottom: 2px +} + +.ty-grid-list__item-name.sd-grid-list__company-name { + margin-bottom: 5px +} + +.ty-product-list__info .ty-product-list__item-name { + border-bottom: none; + margin-bottom: 0; + padding-bottom: 6px +} + +.sd-product-list__company-name { + border-bottom: 1px solid #edf2f5; + padding-bottom: 5px +} + +.sd-grid-list__vendor-country { + padding-top: 8px +} + +.sd-grid-list__company-name { + padding-bottom: 3px +} + +.ty-vendor-plans { + margin-top: 40px; + text-align: center; + -ms-box-orient: horizontal; + display: -webkit-box; + display: -moz-box; + display: -ms-flexbox; + display: -moz-flex; + display: -webkit-flex; + display: flex; + -webkit-align-items: stretch; + align-items: stretch; + justify-content: center; + flex-wrap: wrap +} + +.ty-vendor-plans__title { + text-align: center; + margin-bottom: 60px +} + +.ty-vendor-plans__title-header { + font-size: 28px +} + +.ty-vendor-plans-info { + min-height: 280px +} + +.ty-vendor-plans__item { + display: inline-block; + width: 220px; + background: #fbfbfb; + vertical-align: top; + margin-right: 25px; + margin-bottom: 25px; + border: 1px solid #f0f0f0; + padding: 1px; + transition: all 200ms +} + +.ty-vendor-plans__item:hover { + border-color: #dedede +} + +.ty-vendor-plans__item.active { + background: #fff; + border: 0; + box-shadow: 0 0 30px #bfbfbf +} + +.ty-vendor-plans__item.active .ty-vendor-plan-content, +.ty-vendor-plans__item.vendor-plan-current { + margin-top: 0 +} + +.ty-vendor-plans__item.hidden { + display: none +} + +.ty-vendor-plans__item .ty-vendor-plan-current-plan { + text-transform: uppercase; + font-size: 11px; + font-weight: 300; + color: #fff; + background-color: #f90; + border-radius: 3px; + border-top-left-radius: 0; + border-top-right-radius: 0; + display: inline; + padding: 4px 18px +} + +.ty-vendor-plans__item .ty-vendor-plan-content { + padding: 7px 14px; + margin-top: 10px +} + +.ty-vendor-plans__item .ty-vendor-plan-descr { + min-height: 1em +} + +.ty-vendor-plans__item .ty-vendor-plan-header { + margin-top: 10px; + font-weight: 200; + font-size: 24px +} + +.ty-vendor-plans__item .ty-vendor-plan-price { + font-size: 25px; + text-transform: uppercase; + font-weight: 600; + margin-right: 5px +} + +.ty-vendor-plans__item .ty-vendor-plan-price-period { + color: #999; + font-size: 15px; + font-weight: 300; + font-style: normal; + text-transform: lowercase; + line-height: 1em +} + +.ty-vendor-plans__item .ty-vendor-plan-link { + margin-top: 20px; + margin-bottom: 10px +} + +.ty-vendor-plans__item .ty-vendor-plan-params { + padding: 15px 0 +} + +.ty-vendor-plans__item .ty-vendor-plan-params p { + margin: 0; + padding: 2px 0; + font-size: 14px +} + +.ty-geo-maps__geolocation { + display: inline-block +} + +.ty-geo-maps__geolocation__opener { + display: inline-block; + padding: 8px 2px +} + +.ty-geo-maps__geolocation__map { + height: 405px; + margin: 0 auto 10px +} + +@media(min-width:768px) { + .ty-geo-maps__geolocation__map { + width: 690px + } +} + +@media(max-width:768px) { + .ty-geo-maps__geolocation__map { + height: calc(100vh - 165px) + } +} + +.geo-map-google-search-bar { + background-color: #fff; + font-family: Roboto; + font-size: 15px; + font-weight: 300; + margin-top: 12px; + margin-left: 12px; + padding: 0 11px 0 13px; + text-overflow: ellipsis; + width: 400px +} + +.geo-map-google-search-bar:focus { + border-color: #4d90fe +} + +.ty-geo-maps-shipping__wrapper { + margin-top: 20px; + border-top: 1px solid #d6e1e8 +} + +.ty-geo-maps-shipping__title { + font-weight: 700; + margin-top: 10px +} + +.ty-geo-maps-shipping__item { + padding-top: 6px; + padding-bottom: 6px +} + +.ty-geo-maps-shipping__label { + display: inline-block +} + +.ty-geo-maps-shipping__value { + display: inline-block +} + +.ty-geo-maps-shipping__link-text { + border-bottom: 1px dotted currentColor +} + +.ty-geo-maps-shipping__price { + font-weight: 700 +} + +.ty-geo-maps-shipping__popup { + margin-bottom: 20px; + text-align: left +} + +.ty-geo-maps-shipping__list { + border: 0; + margin-top: 0; + margin-top: 10px +} + +.ty-geo-maps-shipping__list-city { + text-align: right; + font-weight: 700 +} + +.ty-table tr.ty-geo-maps-shipping__list-item:nth-child(2n) { + background: 0 0 +} + +.ty-geo-maps-shipping__list-item:last-child .ty-geo-maps-shipping__list-col { + border-bottom: 0 +} + +th.ty-geo-maps-shipping__list-head { + background: 0 0; + border-right: 0 +} + +th.ty-geo-maps-shipping__list-head--price { + text-align: right +} + +.ty-geo-maps-shipping__list-col--price { + font-weight: 700; + text-align: right +} + +td.ty-geo-maps-shipping__list-col { + border-right: 0 +} + +.ty-product-bigpicture .ty-geo-maps-shipping__wrapper { + margin-left: 20px; + margin-right: 20px +} + +.ty-product-bigpicture .ty-geo-maps-shipping__item { + text-align: left; + margin-left: 40px; + margin-right: 20px +} + +.ty-product-bigpicture .ty-geo-maps-shipping__label { + text-indent: -20px +} + +.ty-geo-maps-shipping__loader { + width: 50px; + height: 50px; + background: url(../../../../../../../../design/themes/responsive/media/images/icons/ajax_loader.svg?1626074086) no-repeat +} + +.native-captcha { + margin-bottom: 10px; + min-width: 200px +} + +.native-captcha__image-container { + background: #f5f5f5; + text-align: center; + padding: 5px 0; + border: 1px solid #c4c4c4; + border-bottom: 0; + border-radius: 5px 5px 0 0 +} + +.native-captcha__answer { + width: 100%; + margin-bottom: 0; + border-top-left-radius: 0 !important; + border-top-right-radius: 0 !important +} + +@media(min-width:480px) { + .native-captcha--short { + max-width: 310px + } +} + +.ty-banner__image-item { + text-align: center +} + +.ty-banner__image-wrapper { + position: relative; + overflow: hidden; + margin: 0 0 10px; + text-align: center +} + +.ty-scroller-discussion-list { + margin-left: -10px; + margin-right: -10px +} + +.ty-discussion-post__content { + margin-top: 10px; + margin-bottom: 10px +} + +.ty-discussion-post__content a { + display: block; + position: relative +} + +.ty-scroller-discussion-list__item { + margin-left: 10px; + margin-right: 10px +} + +.ty-discussion-post { + position: relative; + margin: 10px 0 15px; + padding: 15px; + border: 1px solid #edf2f5 +} + +.ty-discussion-post__author { + font-weight: 700 +} + +.ty-discussion-post__date { + float: right; + right: 0; + margin-top: 1px; + color: #adadad; + font-size: 12px +} + +.ty-discussion-post__rating { + font-size: 15px; + margin-bottom: 5px +} + +.ty-discussion-post__message { + line-height: 1.75; + word-wrap: break-word +} + +.ty-company-detail__top-links .ty-stars__icon { + font-size: 21px +} + +.ty-discussion__rating-wrapper { + margin-bottom: 10px +} + +.ty-discussion__rating-wrapper .ty-stars .ty-stars__icon { + font-size: 20px; + margin-right: 0 +} + +.ty-stars, +.ty-discussion__review-a, +.ty-discussion__review-write { + display: inline-block; + margin-right: 25px; + cursor: pointer +} + +.ty-grid-vendors .grid-list__rating { + text-align: center; + word-wrap: break-word +} + +.ty-grid-vendors .grid-list__rating .ty-stars { + margin-right: 10px +} + +.ty-grid-vendors .grid-list__rating .ty-discussion__review-quantity { + color: #a0acbc; + display: inline-block +} + +.ty-stars { + color: #465363 +} + +.ty-stars__icon { + vertical-align: middle; + margin-left: 2px; + font-size: 14px +} + +.ty-stars__icon:first-child { + margin-left: 0 +} + +.ty-stars a:hover { + text-decoration: none +} + +.ty-product-list__rating { + position: absolute; + text-align: center; + right: 0; + left: 0 +} + +.ty-product-list__rating .ty-stars { + margin-right: 0 +} + +.grid-list__rating .ty-stars { + margin-bottom: 5px +} + +.ty-companies .ty-stars { + display: block; + margin: 5px 0 0 +} + +.ty-rating { + float: left; + color: #465363 +} + +.ty-rating__label { + display: inline-block +} + +.ty-rating:not(:checked)>.ty-rating__check { + position: absolute; + left: -9999px; + clip: rect(0, 0, 0, 0) +} + +.ty-rating:not(:checked)>.ty-rating__label { + float: right; + width: 17px; + padding: 0; + overflow: hidden; + white-space: nowrap; + cursor: pointer; + font-size: 100%; + line-height: 1.2; + margin-right: 2px +} + +.ty-rating:not(:checked)>.ty-rating__label:before { + font-family: glyphs; + speak: none; + font-style: normal; + font-weight: 400; + font-variant: normal; + text-transform: none; + font-size: 21px; + line-height: 1; + -webkit-font-smoothing: antialiased; + content: "\e004" +} + +.ty-rating:not(:checked)>.ty-rating__label:hover:before, +.ty-rating:not(:checked)>.ty-rating__label:hover~.ty-rating__label:before { + content: "\e041" +} + +.ty-rating>.ty-rating__check:checked~.ty-rating__label:before, +.ty-rating>.ty-rating__check:checked+.ty-rating__label:hover:before, +.ty-rating>.ty-rating__check:checked+.ty-rating__label:hover~.ty-rating__label:before, +.ty-rating>.ty-rating__check:checked~.ty-rating__label:hover:before, +.ty-rating>.ty-rating__check:checked~.ty-rating__label:hover~.ty-rating__label:before, +.ty-rating>.ty-rating__label:hover~.ty-rating__check:checked~.ty-rating__label:before { + content: "\e041" +} + +.ty-template-small__item-description .ty-stars { + display: block +} + +@media(max-width:979px) { + .ty-discussion-post__author { + display: block + } + + .ty-discussion-post__date { + display: block; + float: none + } +} + +.ty-sd_messaging_system-message { + position: relative; + width: 100%; + display: inline-block; + vertical-align: top +} + +.ty-sd_messaging_system-message__content { + margin-top: 15px; + margin-bottom: 2px; + padding-left: 70px; + position: relative; + white-space: normal +} + +.ty-sd_messaging_system-message__content a { + display: block; + position: relative +} + +.ty-sd_messaging_system-message__message { + word-break: break-word +} + +.ty-sd_messaging_system-message__date { + opacity: .5; + font-weight: 400 +} + +@media(max-width:481px) { + .ty-sd_messaging_system-message__date { + display: block; + margin-left: 0 + } +} + +.ty-sd_messaging_system-message__user-image { + border-radius: 50%; + padding: 1px; + border: 1px solid #d2dae2 +} + +.ty-sd_messaging_system-message__author { + display: inline-block; + position: absolute; + left: 0; + top: 0 +} + +.ty-sd_messaging_system-message__author .ty-no-image { + width: 46px; + height: 46px; + background: #fff; + border: none; + display: inline-block; + min-width: 0; + border-radius: 50% +} + +.ty-sd_messaging_system-tickets-list__ticket-new { + border: 2px solid #ff4136 +} + +.ty-sd_messaging_system-recipient-user__image { + display: inline-block; + vertical-align: top; + padding: 9px 7px 8px; + margin-left: 15px; + padding-right: 19px +} + +.ty-sd_messaging_system-recipient-user__image img, +.ty-sd_messaging_system-recipient-user__image .ty-no-image { + border-radius: 50% +} + +.ty-sd_messaging_system-recipient-user__name { + margin-bottom: 5px; + margin-top: 4px; + display: block; + font-weight: 600; + font-size: 14px +} + +.ty-sd_messaging_system-recipient-user__name .ty-sd_messaging_system-last-message__date { + margin-left: 7px +} + +@media(min-width:320px) and (max-width:961px) { + .ty-sd_messaging_system-last-message__message { + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis + } +} + +@media(min-width:320px) { + .ty-sd_messaging_system-last-message__message { + width: 200px + } +} + +@media(min-width:481px) { + .ty-sd_messaging_system-last-message__message { + width: 320px + } +} + +@media(min-width:641px) { + .ty-sd_messaging_system-last-message__message { + width: 440px + } +} + +@media(min-width:961px) { + .ty-sd_messaging_system-last-message__message { + width: auto + } +} + +.ty-sd_messaging_system-last-message__date { + color: #999; + font-size: 12px; + font-weight: 400 +} + +.ty-sd_messaging_system-last-message__date i { + font-size: 13px +} + +.ty-sd_messaging_system-last-message__date.dotted:not(.pull-right):before { + content: '\2022'; + margin-right: 10px +} + +.ty-sd_messaging_system-name { + font-weight: 700 +} + +.ty-sd_messaging_system-textarea { + resize: none; + margin-bottom: 10px; + border-radius: 0; + box-sizing: border-box; + transition: all 150ms; + width: 100%; + height: 82px +} + +.ty-sd_messaging_system-all { + position: relative; + display: inline-block; + clear: both; + margin-bottom: 3px; + padding: 10px; + vertical-align: top; + border-radius: 5px; + background-color: #eceff1 +} + +.ty-sd_messaging_system-all:before { + position: absolute; + top: 19px; + display: block; + width: 8px; + height: 8px; + content: '\00a0'; + -webkit-transform: rotate(29deg) skew(-35deg); + transform: rotate(29deg) skew(-35deg) +} + +.ty-sd_messaging_system__create-ticket .sd_messaging_system__icon { + font-family: sd-messaging; + speak: none; + font-style: normal; + font-weight: 400; + font-variant: normal; + text-transform: none; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + line-height: .9; + top: 1px +} + +.ty-sd_messaging_system__create-ticket .sd_messaging_system__icon.icon-only { + margin-right: 0 +} + +.ty-sd_messaging_system__create-ticket .sd_messaging_system__icon:after { + content: '\e88e' +} + +.ty-sd_messaging__body { + overflow: visible; + font-size: 11px; + line-height: 16px +} + +.ty-sd_messaging__body .ty-sd_messaging__body { + position: relative +} + +.ty-sd_messaging__list { + margin-bottom: 0 +} + +.ty-sd_messaging__list-linked.ty-sd_messaging__message .ty-sd_messaging__wrapper { + padding: 15px +} + +@media(max-widt_:767px) { + .ty-sd_messaging__list-linked.ty-sd_messaging__message .ty-sd_messaging__wrapper.ty-sd_messaging__ticket { + padding: 7px + } +} + +.ty-sd_messaging__list-linked .ty-sd_messaging { + margin-top: 0; + padding: 0 +} + +.ty-sd_messaging__list-linked .ty-sd_messaging__wrapper { + display: block +} + +.ty-sd_messaging__list-bordered>li { + border: 2px solid #eee; + padding-top: 8px; + margin-top: 10px +} + +.ty-sd_messaging__list-bordered>li:first-child { + padding-top: 0; + border-bottom-width: 0 +} + +.ty-sd_messaging__list-bordered>li:last-child { + border-bottom-width: 2px +} + +.ty-sd_messaging-no-image__circle { + fill: #fff; + stroke: #d2dae2; + stroke-width: 3px +} + +.ty-sd_messaging-no-image__fill { + fill: #d2dae2; + fill-rule: evenodd +} + +.ty-sd_messaging__ticket-new { + background: #f58d8e +} + +.ty-sd_messaging__ticket-new .ty-sd_messaging_system-last-message__date, +.ty-sd_messaging__ticket-new .ty-sd_messaging_system-recipient-user__name, +.ty-sd_messaging__ticket-new .ty-sd_messaging_system-last-message__message, +.ty-sd_messaging__ticket-new:after { + color: #fff +} + +.ty-sd_messaging__ticket-new:hover .ty-sd_messaging_system-last-message__date, +.ty-sd_messaging__ticket-new:hover .ty-sd_messaging_system-recipient-user__name, +.ty-sd_messaging__ticket-new:hover .ty-sd_messaging_system-last-message__message, +.ty-sd_messaging__ticket-new:hover:after { + color: #999 +} + +.ty-sd_messaging__wrapper:after { + position: absolute; + right: 30px; + top: calc(44%); + content: "\e01b"; + font-size: 15px; + display: inline-block; + font-family: glyphs; + speak: none; + text-transform: none; + line-height: 1; + -webkit-font-smoothing: antialiased +} + +@media(max-width:767px) { + .ty-sd_messaging__wrapper:after { + content: "" + } +} + +.ty-discussion-post__buttons-form { + margin: 0 auto; + float: none +} + +.ty-discussion-post__form { + max-width: 680px; + margin: 0 auto; + font-size: 0 +} + +.ty-discussion-post__form .ty-btn.ty-btn__send-right, +.ty-discussion-post__form .ty-btn.ty-btn__send-right:hover { + border-radius: 0; + box-sizing: border-box; + position: relative; + text-transform: none; + font-size: 14px +} + +.ty-discussion-post__form .ty-btn.ty-btn__send-left, +.ty-discussion-post__form .ty-btn.ty-btn__send-left:hover { + border-radius: 0; + z-index: 3; + position: relative; + width: 90px; + box-sizing: border-box; + margin-right: 20px; + margin-bottom: 10px; + text-transform: none; + display: inline-block; + font-size: 14px +} + +.ty-discussion-post__form .ty-btn.ty-btn__send-refresh, +.ty-discussion-post__form .ty-btn.ty-btn__send-refresh:hover { + margin-bottom: 10px; + background: 0 0; + text-transform: none; + font-size: 14px; + color: #555; + padding: 5px 14px +} + +@media(max-width:767px) { + + .ty-discussion-post__form .ty-btn.ty-btn__send-refresh, + .ty-discussion-post__form .ty-btn.ty-btn__send-refresh:hover { + background: 0 0; + text-transform: none; + font-size: 14px; + color: #555; + margin-bottom: 10px + } +} + +.ty-discussion-post__form [disabled=disabled] { + opacity: .5; + pointer-events: none +} + +.ticket-messages-block { + position: relative +} + +.ticket-messages-block:before { + content: ""; + height: 100%; + vertical-align: bottom +} + +.ticket-messages-block+.ty-discussion-post__buttons { + position: fixed; + left: 0; + right: 0; + bottom: 0; + -webkit-overflow-scrolling: auto; + z-index: 1000; + border-top: 1px solid #d2dae2 +} + +@media(max-width:767px) { + .ticket-messages-block+.ty-discussion-post__buttons { + padding: 10px + } +} + +.ticket-messages-list { + height: auto; + overflow-y: auto; + overflow-x: hidden; + display: block; + position: relative; + min-height: 150px +} + +.ticket-messages-list .ty-no-items { + background: 0 0 +} + +@media(max-width:767px) { + .ticket-messages-list { + min-width: 0 + } +} + +.recipient-message { + padding-left: 70px; + padding-right: 120px; + margin-left: 50px +} + +.recipient-message .ty-sd_messaging_system-all:before { + left: -3px; + background-color: #eceff1 +} + +@media(min-width:320px) and (max-width:961px) { + .recipient-message { + margin: 15px 10px 0 + } +} + +@media(min-width:320px) and (max-width:481px) { + .recipient-message { + padding-left: 10px + } + + .recipient-message .ty-pict { + display: none + } +} + +.author-message { + padding-right: 70px; + padding-left: 120px; + margin-right: 50px; + text-align: right +} + +.author-message .ty-sd_messaging_system-message__author { + left: auto; + right: 0; + margin-right: 11px +} + +.author-message .ty-sd_messaging_system-name { + text-align: right +} + +.author-message .ty-sd_messaging_system-all { + padding-right: 20px; + padding-left: 20px +} + +.author-message .ty-sd_messaging_system-all:before { + right: -3px; + background-color: #eceff1 +} + +@media(min-width:320px) and (max-width:961px) { + .author-message { + margin: 7px 10px 0 + } +} + +@media(min-width:320px) and (max-width:481px) { + .author-message { + padding-right: 10px; + padding-left: 10px + } + + .author-message .ty-sd_messaging_system-message__author { + display: none + } +} + +.short-message-container { + cursor: pointer +} + +.new-message { + color: #ff4136; + font-weight: 600 +} + +.ty-helper-container .tygh-content .messages-list { + min-height: calc(100vh - 515px); + padding-top: 40px +} + +@media(max-width:767px) { + .ticket-messages_list { + max-width: calc(100% - 20px) + } + + .ticket_messages { + min-height: calc(100vh - 434px) + } + + .ticket_messages_list { + padding-bottom: 211px; + width: calc(100% - 20px) + } + + .ty-sd_messaging_system-textarea { + float: left; + width: 100%; + height: 40px; + margin-bottom: 5px + } + + .author-message .ty-sd_messaging_system-message__author { + right: 5px + } + + .span16.top-menu-grid { + padding-top: 0 + } +} + +.ty-last-message { + word-break: break-word +} + +.ty-no-messages { + padding-left: 362px +} + +.ty-sd_messaging__list-linked .ty-sd_messaging__wrapper:focus, +.ty-sd_messaging__list-linked .ty-sd_messaging__wrapper:hover { + background-color: #f7f7f7 +} + +.ty-sd_messaging_system-recipient-user__image, +.ty-sd_messaging__body { + display: table-cell; + vertical-align: middle +} + +.ty-sd_messaging_system-recipient-user__image img:not(.media-preview), +.media-right img:not(.media-preview), +.thumbnail .ty-sd_messaging img:not(.media-preview) { + max-width: none +} + +.ty-sd_messaging, +.ty-sd_messaging__body { + position: relative +} + +svg.no-image-icon { + overflow: visible +} + +.pac-container { + z-index: 1101 +} + +#vendors_map { + min-height: 500px; + height: 100% +} + +.ty-grid-list__company-distance { + margin-top: 3px; + margin-bottom: 3px +} + +.ty-grid-list__company-distance .ty-company-distance { + line-height: 120%; + color: #a6a6a6; + display: block; + text-align: center; + word-wrap: break-word +} + +.ty-grid-list__company-distance .ty-company-distance:hover { + color: #46aaf2 +} + +.ty-sellers-list__item-distance .ty-company-distance { + line-height: 120%; + color: #a6a6a6; + word-wrap: break-word +} + +.ty-sellers-list__item-distance .ty-company-distance:hover { + color: #46aaf2 +} + +.ty-filter-products-by-geolocation-popup__item { + float: left; + padding: 8px 13px; + color: #2d3540 +} + +.ty-filter-products-by-geolocation-popup__item:hover { + background: #e0e9ee; + color: #7c8282 +} + +.ty-filter-products-by-geolocation-popup__icon { + margin-right: 5px; + float: left; + margin-top: 2px +} + +.ty-filter-products-by-geolocation-popup__title { + margin-bottom: 10px; + font-size: 24px; + color: #465363; + word-wrap: break-word +} + +.ty-filter-products-by-geolocation-popup__not-your-city { + margin-bottom: 10px +} + +.ty-filter-products-by-geolocation-filter-address { + padding-top: 12px; + padding-bottom: 10px; + margin-bottom: 20px +} + +.ty-filter-products-by-geolocation-filter-address__input-text { + padding-top: 10px; + padding-left: 9px +} + +.ty-vendors-locations-use-my-location { + font-size: 120%; + color: #7c97b1; + position: absolute; + right: 18px; + top: 20px +} + +#tygh_main_container { + overflow: hidden +} + +.tygh-top-panel a { + font-size: .9em +} + +.tygh-top-panel .ty-text-links__active a { + color: #46aaf2 +} + +.tygh-top-panel .ty-currencies__item { + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0 +} + +.tygh-top-panel .ty-currencies__active, +.tygh-top-panel .ty-currencies__item:hover { + background-color: #3b3b3b; + color: #fff +} + +.tygh-top-panel .ty-dropdown-box__title .ty-icon-down-micro, +.tygh-top-panel .ty-dropdown-box__title a { + color: #969b9b +} + +.tygh-top-panel .ty-dropdown-box__title:hover, +.tygh-top-panel .ty-dropdown-box__title.open { + background-color: #46aaf2 +} + +.tygh-top-panel .ty-dropdown-box__title:hover .ty-icon-down-micro, +.tygh-top-panel .ty-dropdown-box__title:hover a, +.tygh-top-panel .ty-dropdown-box__title.open .ty-icon-down-micro, +.tygh-top-panel .ty-dropdown-box__title.open a { + color: #fff +} + +.tygh-top-panel .ty-dropdown-box__title.open:after { + content: ""; + position: absolute; + border-width: 6px; + border-style: solid; + border-color: transparent transparent #46aaf2; + left: 50%; + bottom: -7px; + margin-left: -3px +} + +.tygh-top-panel .ty-dropdown-box__content { + margin-top: 6px; + border-color: #46aaf2 +} + +.tygh-top-panel .ty-select-block__a { + padding: 8px 13px 3px; + color: #969b9b +} + +.tygh-top-panel .ty-select-block__a .ty-icon-down-micro { + color: #969b9b +} + +.tygh-top-panel .ty-select-block__a:hover, +.tygh-top-panel .ty-select-block__a.open { + background-color: #3b3b3b; + color: #fff +} + +.tygh-top-panel .ty-select-block__a:hover .ty-icon-down-micro, +.tygh-top-panel .ty-select-block__a.open .ty-icon-down-micro { + color: #fff +} + +.tygh-top-panel .top-quick-links a:hover { + color: #969b9b +} + +.tygh-top-panel .ty-dropdown-box { + margin: 0 +} + +.tygh-top-panel .ty-dropdown-box__title a:hover { + color: #fff +} + +.tygh-top-panel .ty-text-links { + margin-right: 0 +} + +.tygh-top-panel .ty-dropdown-box__content .ty-text-links { + margin: 0 +} + +.tygh-top-panel .ty-dropdown-box__content .ty-text-links__item { + display: block; + margin: 0 +} + +.tygh-top-panel .ty-dropdown-box__content .ty-text-links__a { + padding: 7px 14px; + display: block; + color: #465363 +} + +.tygh-top-panel .ty-dropdown-box__content .ty-text-links__a:hover { + color: #fff; + background: #f58d8e +} + +.tygh-top-panel .ty-text-links-btn { + color: #969b9b +} + +.tygh-top-panel .ty-text-links-btn.open { + background: #46aaf2; + color: #fff +} + +@media screen and (max-width:767px) { + .ty-text-links_show_inline .ty-text-links__item { + display: block + } + + .ty-text-links_show_inline { + -webkit-box-shadow: 0 1px 2px 0 rgba(0, 0, 0, .12); + -moz-box-shadow: 0 1px 2px 0 rgba(0, 0, 0, .12); + box-shadow: 0 1px 2px 0 rgba(0, 0, 0, .12); + border: solid #46aaf2; + border-width: 3px 0 0 + } + + .top-quick-links a { + color: #465363 + } + + .top-quick-links a:hover { + color: #f58d8e + } +} + +.ty-account-info__item .ty-account-info__a { + display: block +} + +.top-menu-grid { + padding-top: 32px +} + +input.ty-search-block__input { + -webkit-border-radius: 5px; + -moz-border-radius: 5px; + border-radius: 5px +} + +.ty-select-block { + background-color: #46aaf2; + border: none; + top: auto +} + +.ty-select-block__list-a { + color: #fff +} + +.ty-select-block__list-a:hover { + background-color: #f58d8e +} + +.ty-select-block:after { + content: ""; + position: absolute; + border-width: 6px; + border-style: solid; + border-color: transparent transparent #46aaf2; + left: 50%; + top: -12px; + margin-left: -3px +} + +.top-cart-content { + text-align: right +} + +.top-cart-content .ty-dropdown-box__title { + background-color: #f58d8e; + position: relative +} + +.top-cart-content .ty-dropdown-box__title.open { + -webkit-border-bottom-right-radius: 5px; + -moz-border-radius-bottomright: 5px; + border-bottom-right-radius: 5px; + -webkit-border-bottom-left-radius: 5px; + -moz-border-radius-bottomleft: 5px; + border-bottom-left-radius: 5px +} + +.top-cart-content .ty-dropdown-box__title.open:after { + content: ""; + position: absolute; + border-width: 6px; + border-style: solid; + border-color: transparent transparent #f58d8e; + left: 50%; + bottom: -6px; + margin-left: -3px +} + +.top-cart-content .ty-dropdown-box__title a, +.top-cart-content .ty-dropdown-box__title .ty-minicart__icon, +.top-cart-content .ty-dropdown-box__title .ty-icon-down-micro { + color: #fff +} + +.top-cart-content .ty-dropdown-box__content { + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; + margin-top: 5px +} + +.ty-dropdown-box__content { + border: none; + border-top: 3px solid #f58d8e; + -webkit-box-shadow: 0 1px 2px 0 rgba(0, 0, 0, .12); + -moz-box-shadow: 0 1px 2px 0 rgba(0, 0, 0, .12); + box-shadow: 0 1px 2px 0 rgba(0, 0, 0, .12) +} + +.ty-dropdown-box__content .ty-dropdown-box__item:hover { + background: #f58d8e +} + +input.ty-search-block__input:focus { + border: 2px solid #bcceda; + background-color: #edf2f5 +} + +.top-menu { + position: relative; + padding: 10px 0 5px; + z-index: 10 +} + +.top-menu:before, +.top-menu:after { + content: ""; + position: absolute; + top: 0; + bottom: 0; + border-top: 2px solid #edf2f5; + z-index: -1 +} + +.ty-menu__items { + background: #fff +} + +.ty-menu__item { + font-size: 15px; + margin-right: 5px +} + +.ty-menu__item.visible-phone .ty-menu__item-link { + padding: 20px; + background-color: #46aaf2; + color: #fff; + margin-right: 0; + -webkit-transition: background .4s; + -moz-transition: background .4s; + -o-transition: background .4s; + transition: background .4s +} + +.ty-menu__item a { + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; + font: inherit +} + +.ty-menu__item-arrow i { + top: 13px +} + +.ty-menu__item .ty-menu__item-link, +.ty-menu-vertical .ty-menu__item .ty-menu__submenu .ty-menu__item-link { + padding: 12px 15px; + min-height: 0 +} + +.banners { + margin-bottom: 20px +} + +.ty-column2 { + width: 25% +} + +.no-touch .ty-menu__item:hover .ty-menu__item-link, +.is-hover-menu .ty-menu__item-link, +.is-hover-menu.ty-menu__item-active .ty-menu__item-link { + background: #fff; + color: #000; + text-decoration: underline +} + +.ty-menu__item:hover:not(.ty-menu__item-nodrop) .ty-menu__item-link:after { + content: ""; + position: absolute; + border: 9px solid; + border-top-color: currentcolor; + border-right-color: currentcolor; + border-bottom-color: currentcolor; + border-left-color: currentcolor; + border-color: transparent transparent #fff; + left: 40%; + bottom: -13px; + margin-left: -4px; + z-index: 201 +} + +.ty-menu-vertical .ty-menu__item:hover .ty-menu__item-link:after { + display: none +} + +.ty-menu-vertical .ty-menu__item .ty-menu__submenu .ty-menu__submenu-items { + top: 0; + border: 1px solid #f5f5f5 +} + +.ty-menu-vertical .ty-menu__item { + margin-right: 0 +} + +.ty-menu-vertical .ty-menu__item:hover i, +.ty-menu-vertical .ty-menu__item.is-hover-menu i { + color: #fff +} + +.ty-menu-vertical .ty-menu__item .ty-menu__submenu .ty-menu__item i { + color: #a1a6aa +} + +.ty-menu-vertical .ty-menu__item .ty-menu__submenu .ty-menu__item:hover i, +.ty-menu-vertical .ty-menu__item .ty-menu__submenu .ty-menu__item.is-hover-menu i { + color: #fff +} + +.ty-menu-vertical .ty-menu__item .ty-menu__submenu .ty-menu__submenu-items, +.ty-menu-vertical .ty-menu__items { + border: 0 +} + +.no-touch .ty-menu-vertical .ty-menu__item:hover .ty-menu__submenu .ty-menu__item-link, +.ty-menu-vertical .is-hover-menu .ty-menu__submenu .ty-menu__item-link { + background: 0 0; + color: #393939; + text-transform: none +} + +.ty-menu-vertical .ty-menu__submenu .menu-level-1.ty-menu__item-active>.ty-menu__submenu-item-header .ty-menu__item-link, +.ty-menu-vertical .ty-menu__submenu .menu-level-2.ty-menu__item-active>.ty-menu__submenu-item-header .ty-menu__item-link { + background: #f2f2f2 +} + +.no-touch .ty-menu-vertical .ty-menu__submenu .ty-menu__item:hover>.ty-menu__submenu-item-header .ty-menu__item-link, +.ty-menu-vertical .ty-menu__submenu .is-hover-menu>.ty-menu__submenu-item-header .ty-menu__item-link { + background: #f58d8e; + color: #fff; + text-decoration: none +} + +.ty-menu-vertical .ty-menu__item .ty-menu__item-link { + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0 +} + +.ty-menu__item>.ty-menu__submenu { + padding-top: 13px; + margin-bottom: -30px +} + +.ty-menu__item>.ty-menu__submenu>ul { + box-shadow: 1px 0 5px rgba(0, 0, 0, .16) +} + +.ty-menu__submenu { + text-transform: none +} + +.ty-menu__submenu-items { + -webkit-border-radius: 5px; + -moz-border-radius: 5px; + border-radius: 5px +} + +.ty-menu__submenu-item-header .ty-menu__submenu-link { + font-weight: 400 +} + +.ty-menu .ty-menu__item-link { + padding: 12px 13px; + min-height: 0 +} + +.ty-menu__items li:first-child>div>.ty-menu__item-link { + -webkit-border-top-right-radius: 5px; + -moz-border-radius-topright: 5px; + border-top-right-radius: 5px; + -webkit-border-top-left-radius: 5px; + -moz-border-radius-topleft: 5px; + border-top-left-radius: 5px +} + +.ty-menu__items li:last-child>div>.ty-menu__item-link { + -webkit-border-bottom-right-radius: 5px; + -moz-border-radius-bottomright: 5px; + border-bottom-right-radius: 5px; + -webkit-border-bottom-left-radius: 5px; + -moz-border-radius-bottomleft: 5px; + border-bottom-left-radius: 5px +} + +@media screen and (min-width:767px) and (max-width:1000px) { + .ty-menu__item .ty-menu__item-link { + padding: 10px 8px; + font-weight: 400; + font-size: 12px; + min-height: 0 + } + + .ty-menu-vertical .ty-menu__item i { + top: 12px + } +} + +@media screen and (min-width:767px) { + .no-touch .ty-menu__submenu-items .ty-menu__submenu-link:hover { + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; + color: #f58d8e; + text-decoration: under + } + + .no-touch .ty-menu__submenu-item-header .ty-menu__submenu-link:hover { + background-color: transparent; + color: inherit + } +} + +@media screen and (max-width:979px) { + .ty-column6 { + width: 33% !important + } + + .ty-column4 { + width: 25% !important + } + + .ty-grid-list__image { + height: 150px !important; + width: 120% !important + } + + .ty-grid-list__image img { + height: 150px !important + } +} + +@media screen and (max-width:767px) { + .top-menu { + background: 0 0 + } + + .top-menu:before, + .top-menu:after { + display: none + } + + .ty-column6 { + width: 33% !important + } + + .ty-column4 { + width: 50% !important + } + + .ty-grid-vendors .ty-grid-list__company-logo { + height: auto + } + + .grid-list__rating, + .ty-grid-list__total-products { + display: none !important + } + + .ty-menu__item.visible-phone { + text-transform: uppercase; + margin: 0 -12px + } + + .ty-menu__item { + margin-right: 0; + text-transform: none; + font-weight: 400; + border-bottom-color: #465363 + } + + .ty-menu-vertical .ty-menu__item i { + font-size: 14px; + position: relative; + top: -12px; + right: 0; + color: #fff + } + + .ty-menu-vertical .ty-menu__item-active .ty-menu__item-link { + background: #f58d8e + } + + .ty-menu-vertical .ty-menu__item .ty-menu__submenu .ty-menu__submenu-item-header .ty-menu__item-link, + .ty-menu-vertical .ty-menu__item .ty-menu__submenu .ty-menu__item .ty-menu__submenu .ty-menu__submenu-item-header .ty-menu__item-link { + color: #fff; + text-transform: none; + font-weight: 400; + background: 0 0 + } + + .ty-menu-vertical .ty-menu__submenu-items .ty-menu__item { + border-top-color: #465363 + } + + .no-touch .ty-menu-vertical .ty-menu__item:hover .ty-menu__submenu .ty-menu__item-link, + .ty-menu-vertical .is-hover-menu .ty-menu__submenu .ty-menu__item-link, + .ty-menu-vertical .is-hover-menu.ty-menu__item-active .ty-menu__submenu .ty-menu__item-link { + font-size: 14px; + color: #fff; + background: 0 0 + } + + .ty-menu__item.ty-menu__item-active .ty-menu__item-link, + .no-touch .ty-menu__item.ty-menu__item-active:hover .ty-menu__item-link { + background: #f58d8e + } + + .ty-menu-vertical .ty-menu__item.menu-level-2.ty-menu__item-active, + .ty-menu-vertical .ty-menu__submenu .ty-menu__item.ty-menu__item-active .ty-menu__submenu-item-header .ty-menu__item-link, + .ty-menu-vertical .ty-menu__submenu .ty-menu__submenu .ty-menu__item.ty-menu__item-active .ty-menu__submenu-item-header .ty-menu__item-link { + background: #981f26 + } + + .ty-menu__item:hover:not(.ty-menu__item-nodrop) .ty-menu__item-link:after { + display: none + } + + .ty-menu__item:nth-child(n+2) .ty-menu__item-link { + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0 + } + + .ty-menu__item-toggle, + .ty-menu__item-toggle-active { + background-color: rgba(0, 0, 0, .1) !important; + width: 38px; + height: 34px; + top: 7px; + right: 10px; + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px + } + + .ty-menu__item-toggle .ty-menu__icon-hide, + .ty-menu__item-toggle .ty-menu__icon-open, + .ty-menu__item-toggle-active .ty-menu__icon-hide, + .ty-menu__item-toggle-active .ty-menu__icon-open { + line-height: 34px + } + + .ty-menu__item:last-child .ty-menu__item-link { + -webkit-border-bottom-right-radius: 5px; + -moz-border-radius-bottomright: 5px; + border-bottom-right-radius: 5px; + -webkit-border-bottom-left-radius: 5px; + -moz-border-radius-bottomleft: 5px; + border-bottom-left-radius: 5px + } + + .ty-menu__item .ty-menu__item-link { + color: #fff; + padding: 15px + } + + .ty-menu__submenu-items { + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; + background-color: transparent; + padding: 15px 30px + } + + .ty-menu__item>.ty-menu__submenu>ul { + border-top: none; + border-bottom: none + } + + .ty-menu__items { + background-color: #313a45; + margin: 0 12px + } + + .ty-menu__item>.ty-menu__submenu { + padding-top: 0 + } + + .ty-menu__submenu-items { + border: none + } + + .ty-menu__submenu-items .ty-menu__submenu-item { + border-bottom: none !important; + border-top: 1px solid #465363 !important + } + + .ty-menu__submenu-items .ty-menu__submenu-item:hover .ty-menu__submenu-link { + color: #fff + } + + .ty-menu__submenu-items .ty-menu__submenu-link { + color: #fff + } + + .ty-menu__submenu .ty-top-mine__submenu-col .ty-menu__submenu-item-header { + border-bottom: none; + border-top: 1px solid #465363; + text-transform: none + } + + .ty-menu__submenu .ty-top-mine__submenu-col .ty-menu__submenu-item-header a { + color: #fff + } + + .ty-menu__submenu .ty-top-mine__submenu-col .ty-menu__submenu-item-header a:hover { + color: #fff + } + + .ty-menu__submenu .ty-top-mine__submenu-col .ty-menu__submenu-item-header-active { + background: rgba(255, 0, 0, .5) + } + + .ty-menu__submenu .ty-menu__submenu-items .ty-menu__submenu-item-active { + background: rgba(255, 0, 0, .3) + } + + .ty-menu__submenu .ty-menu__submenu-items .ty-menu__submenu-item-active a { + color: #fff + } +} + +.ty-menu__submenu-items .ty-menu__submenu-item { + margin-top: 15px; + padding-right: 20px +} + +.ty-product-filters__wrapper { + background-color: transparent +} + +.ty-product-filters__title, +.ty-product-filters__item { + color: inherit +} + +.ty-product-filters__item:hover { + color: #f58d8e +} + +.ty-product-filters__item.disabled, +.ty-product-filters__item.checked.disabled, +.ty-product-filters__item.disabled:hover { + color: #dce0e6 +} + +.ty-range-slider .ui-slider-range { + background-color: #f58d8e +} + +.ty-range-slider .ui-slider-handle { + width: 8px; + height: 8px; + border: 8px solid #46aaf2; + -webkit-border-radius: 50%; + -moz-border-radius: 50%; + border-radius: 50% +} + +.ty-range-slider__num { + color: #46aaf2; + font-size: 1em; + background-color: #e6e6e6; + width: 40px; + top: 25px; + left: -20px; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px +} + +.ty-product-filters__switch { + padding-right: 30px +} + +.ty-product-filters__switch>i { + margin-right: -20px +} + +@media screen and (min-width:767px) and (max-width:1000px) { + .ty-range-slider__num { + font-size: 9px; + background: 0 0; + padding: 0 + } +} + +.ty-sort-container, +.ty-horizontal-product-filters { + background-color: transparent +} + +.ty-sort-container__views-a, +.ty-horizontal-product-filters__views-a { + background-color: #edf2f5; + color: #465363; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; + -webkit-transition: .4s; + -moz-transition: .4s; + -o-transition: .4s; + transition: .4s; + margin-left: 3px +} + +.ty-sort-container__views-a.active, +.ty-sort-container__views-a:hover, +.ty-horizontal-product-filters__views-a.active, +.ty-horizontal-product-filters__views-a:hover { + background-color: #f58d8e; + color: #fff +} + +.ty-sort-dropdown__wrapper, +.ty-horizontal-product-filters-dropdown__wrapper { + background-color: #edf2f5; + -webkit-border-radius: 5px; + -moz-border-radius: 5px; + border-radius: 5px; + border: 2px solid #e6edf1; + padding: 3px 5px 7px +} + +.ty-sort-dropdown__wrapper:hover, +.ty-sort-dropdown__wrapper.open, +.ty-horizontal-product-filters-dropdown__wrapper:hover, +.ty-horizontal-product-filters-dropdown__wrapper.open { + background-color: #fff; + color: #465363 +} + +@media screen and (max-width:400px) { + + .ty-sort-dropdown__wrapper, + .ty-horizontal-product-filters-dropdown__wrapper { + font-size: .9em + } + + .ty-column2 { + width: 25% + } +} + +.ty-sort-dropdown__content, +.ty-horizontal-product-filters-dropdown__content { + border: 2px solid #e6edf1; + -webkit-border-radius: 5px; + -moz-border-radius: 5px; + border-radius: 5px +} + +.ty-sort-dropdown__content-item-a:hover, +.ty-horizontal-product-filters-dropdown__content-item-a:hover { + background-color: #edf2f5; + color: #f58d8e +} + +.ty-horizontal-product-filters { + margin-bottom: 0 +} + +.ty-grid-list__item { + border: 1px solid #edf2f5; + border-radius: 5px; + background-color: #fff; + margin: 0 10px 25px; + padding: 10px 10px 20px; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + -webkit-transition: box-shadow .4s; + -moz-transition: box-shadow .4s; + -o-transition: box-shadow .4s; + transition: box-shadow .4s +} + +.ty-grid-list__item:hover { + background-color: #fff; + -webkit-box-shadow: 0 0 15px 0 rgba(0, 0, 0, .12); + -moz-box-shadow: 0 0 15px 0 rgba(0, 0, 0, .12); + box-shadow: 0 0 15px 0 rgba(0, 0, 0, .12) +} + +.ty-grid-list__item-name { + max-width: 100%; + display: block; + height: 3.2em; + overflow: hidden +} + +.ty-grid-list__item-name .product-title { + color: #465363; + font-size: 1.15em; + line-height: 1.3em +} + +.ty-grid-list__item-name .product-title:hover { + color: #f58d8e +} + +.ty-grid-list__image .owl-carousel .owl-item { + height: 250px +} + +.ty-grid-list__image .owl-carousel { + display: inline-block +} + +.ty-grid-list__image { + border: none; + position: relative; + width: auto; + height: 250px; + margin-top: -10px; + margin-left: -10px; + overflow: hidden; + padding: 0; + width: 111% +} + +.ty-grid-list__image img { + object-fit: cover; + width: 100%; + height: 250px +} + +.ty-grid-list__price { + display: block; + text-align: left; + float: none; + max-width: 100% +} + +.ty-grid-list__control { + border-bottom-left-radius: 5px; + border-bottom-right-radius: 5px +} + +.ty-grid-list__control .ty-btn { + padding: 10px 15px; + -webkit-border-radius: 5px; + -moz-border-radius: 5px; + border-radius: 5px +} + +.ty-product-block__left { + width: 49%; + display: inline-block; + background-color: #fff; + padding: 50px; + padding-right: 50px; + box-sizing: border-box; + float: right +} + +.ty-no-items { + color: #465363 +} + +.ty-price-num { + font-weight: 400; + font-size: 1.25em +} + +.ty-list-price { + color: #8292a7 +} + +.grid-list__rating { + height: 24px +} + +.ty-grid-list__control { + position: relative +} + +.ty-quick-view-button { + text-align: center; + position: absolute; + width: 100%; + width: calc(100% - 20px); + bottom: 100%; + margin-bottom: 120px +} + +.ty-scroller-list__item .ty-quick-view-button { + bottom: 50px +} + +.ty-product-list { + background-color: #fff; + border: 1px solid #edf2f5; + padding: 0; + margin-bottom: 10px; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + -webkit-border-radius: 5px; + -moz-border-radius: 5px; + border-radius: 5px; + -webkit-transition: box-shadow .4s; + -moz-transition: box-shadow .4s; + -o-transition: box-shadow .4s; + transition: box-shadow .4s +} + +.ty-product-list:hover { + -webkit-box-shadow: 0 0 15px 0 rgba(0, 0, 0, .12); + -moz-box-shadow: 0 0 15px 0 rgba(0, 0, 0, .12); + box-shadow: 0 0 15px 0 rgba(0, 0, 0, .12) +} + +.ty-product-list__item-name { + padding-bottom: 5px; + margin-bottom: 5px; + border-bottom: 1px solid #edf2f5 +} + +.ty-product-list__image { + border: none +} + +.ty-product-list+hr { + display: none +} + +.ty-product-list__control .ty-btn__text { + padding: 0 !important +} + +.ty-compact-list { + background-color: #fff; + border: 1px solid #edf2f5; + -webkit-border-radius: 5px; + -moz-border-radius: 5px; + border-radius: 5px +} + +.ty-compact-list__item:last-child { + border-bottom: none +} + +.ty-compact-list__controls { + margin-right: 10px +} + +.ty-compact-list__item .ty-value-changer { + padding-top: 6px +} + +.ty-pagination__bottom { + border: none +} + +.ty-pagination__selected { + background-color: #f58d8e; + color: #fff +} + +.ty-pagination__item:hover { + background-color: transparent; + color: #f58d8e +} + +.ty-pagination__text { + text-transform: none; + background-color: transparent; + color: inherit +} + +.ty-sidebox { + background-color: #fff; + -webkit-box-shadow: 0 1px 4px 0 rgba(0, 0, 0, .12); + -moz-box-shadow: 0 1px 4px 0 rgba(0, 0, 0, .12); + box-shadow: 0 1px 4px 0 rgba(0, 0, 0, .12); + -webkit-border-radius: 5px; + -moz-border-radius: 5px; + border-radius: 5px; + border-bottom: 3px solid #bcceda +} + +.ty-sidebox__title { + background-color: #46aaf2; + color: #fff; + padding: 6px 30px 12px 12px; + -webkit-border-top-right-radius: 5px; + -moz-border-radius-topright: 5px; + border-top-right-radius: 5px; + -webkit-border-top-left-radius: 5px; + -moz-border-radius-topleft: 5px; + border-top-left-radius: 5px; + margin: 0 +} + +.ty-sidebox__title span, +.ty-sidebox__title a { + color: inherit +} + +.ty-sidebox__body { + padding: 12px +} + +.ty-sidebox__icon-open, +.ty-sidebox__icon-hide { + color: #fff; + margin-top: 6px; + padding: 6px 12px; + float: right +} + +.ty-btn { + -webkit-transition: .4s; + -moz-transition: .4s; + -o-transition: .4s; + transition: .4s; + padding: 10px 15px; + -webkit-border-radius: 5px; + -moz-border-radius: 5px; + border-radius: 5px; + text-transform: none +} + +.ty-btn:hover, +.ty-btn:active { + padding: 10px 15px +} + +.ty-btn__primary:hover { + background-color: #46aaf2 +} + +.ty-btn__secondary:hover { + background-color: #f58d8e +} + +.buttons-container { + background: #edf2f5 +} + +.ty-product-thumbnails { + width: 100%important; + text-align: center +} + +.ty-product-thumbnails__item { + display: inline-block; + float: inherit +} + +.ty-product-block__img-wrapper { + background-color: #fff; + box-sizing: border-box; + width: 48% !important; + max-width: inherit; + height: auto; + display: inline-block; + overflow: hidden +} + +.ty-thumbs-wrapper .ty-icon-left-circle { + left: 20px +} + +.ty-thumbs-wrapper .ty-icon-right-circle { + right: 20px +} + +.ty-product-block__img-wrapper img { + object-fit: cover; + width: 100%; + height: 100% +} + +.ty-product-block__note .product-promo-header { + text-transform: uppercase; + font-weight: 400 +} + +.ty-product-block__note .product-promo-body { + font-size: .9em; + color: #73859c +} + +.ty-product-block-title { + padding-bottom: 5px; + border-bottom: 1px solid #edf2f5 +} + +.ty-product-switcher span { + color: #465363 +} + +.ty-product-switcher__icon { + color: #46aaf2; + -webkit-transition: color .4s; + -moz-transition: color .4s; + -o-transition: color .4s; + transition: color .4s +} + +.ty-product-switcher__a:hover .ty-product-switcher__icon { + color: #f58d8e +} + +.ty-product-switcher__a.disabled .ty-product-switcher__icon { + color: #46aaf2; + opacity: .5 +} + +.ty-product-img { + border: none +} + +@media screen and (max-width:767px) { + .ty-product-block-title { + margin-top: 15px + } + + .ty-product-block__button .ty-btn { + margin-right: 10px + } + + .ty-btn+.ty-btn { + margin-left: 0 + } + + .ty-btn__text { + padding: 0 !important + } +} + +.ty-tabs__item { + background-color: #edf2f5; + font-size: 1.25em; + -webkit-border-radius: 5px; + -moz-border-radius: 5px; + border-radius: 5px; + margin: 4px 4px 4px 0; + border: 1px solid transparent; + border-width: 0 1px +} + +.ty-tabs__item:hover { + background-color: #fff +} + +.ty-tabs__item:hover a { + color: #1694ef +} + +.ty-tabs__item.active { + background-color: #fff; + color: #46aaf2; + border-right: 1px solid #ccdae3; + border-left: 1px solid #ccdae3; + -webkit-border-bottom-right-radius: 0; + -moz-border-radius-bottomright: 0; + border-bottom-right-radius: 0; + -webkit-border-bottom-left-radius: 0; + -moz-border-radius-bottomleft: 0; + border-bottom-left-radius: 0; + -webkit-box-shadow: inset 0 3px 0 0 #46aaf2; + -moz-box-shadow: inset 0 3px 0 0 #46aaf2; + box-shadow: inset 0 3px 0 0 #46aaf2 +} + +.ty-tabs__item.active .ty-tabs__a { + color: inherit +} + +.ty-tabs__item.active:after { + content: ""; + display: block; + background: #fff; + width: 100%; + position: absolute; + height: 5px; + left: -1px; + border-right: 1px solid #ccdae3; + border-left: 1px solid #ccdae3 +} + +.ty-tabs__a { + color: inherit; + font: inherit; + padding: 12px 20px +} + +.ty-tabs__content { + background-color: #fff; + border: 1px solid #ccdae3; + border-top: none; + -webkit-border-bottom-right-radius: 5px; + -moz-border-radius-bottomright: 5px; + border-bottom-right-radius: 5px; + -webkit-border-bottom-left-radius: 5px; + -moz-border-radius-bottomleft: 5px; + border-bottom-left-radius: 5px; + padding: 20px; + -webkit-box-shadow: 0 1px 2px 0 rgba(0, 0, 0, .12); + -moz-box-shadow: 0 1px 2px 0 rgba(0, 0, 0, .12); + box-shadow: 0 1px 2px 0 rgba(0, 0, 0, .12) +} + +.ty-tabs__content .content-description { + line-height: 1.5 +} + +.ty-discussion-post { + background: #fff +} + +.ty-cart-content { + -webkit-box-shadow: 0 1px 2px 0 rgba(0, 0, 0, .12); + -moz-box-shadow: 0 1px 2px 0 rgba(0, 0, 0, .12); + box-shadow: 0 1px 2px 0 rgba(0, 0, 0, .12) +} + +.ty-cart-content th { + background-color: #fff; + border: 1px solid #edf2f5 +} + +.ty-cart-content tbody tr:nth-child(2n) { + background-color: #fff +} + +.ty-cart-content .ty-cart-content__product-elem, +.ty-cart-content .ty-cart-content__title { + border: 1px solid #edf2f5 +} + +.ty-cart-total { + border: 1px solid #edf2f5; + -webkit-box-shadow: 0 1px 2px 0 rgba(0, 0, 0, .12); + -moz-box-shadow: 0 1px 2px 0 rgba(0, 0, 0, .12); + box-shadow: 0 1px 2px 0 rgba(0, 0, 0, .12); + -webkit-border-bottom-right-radius: 5px; + -moz-border-radius-bottomright: 5px; + border-bottom-right-radius: 5px; + -webkit-border-bottom-left-radius: 5px; + -moz-border-radius-bottomleft: 5px; + border-bottom-left-radius: 5px +} + +.ty-cart-total input[type=text] { + border-color: #dde6ec +} + +.ty-cart-total__wrapper { + border: none +} + +.ty-step__container, +.ty-step__container-active { + -webkit-border-radius: 5px; + -moz-border-radius: 5px; + border-radius: 5px; + overflow: hidden; + margin-bottom: 5px; + border: 1px solid #edf2f5 +} + +.ty-step__container h3, +.ty-step__container-active h3 { + margin-bottom: 0 +} + +.ty-step__title-arrow { + display: none +} + +.ty-step__container-active { + background-color: #fff +} + +.ty-step__container-active .ty-step__title-left { + color: #fff; + background-color: transparent +} + +.ty-step__container-active .ty-step__title-txt { + color: #fff +} + +.ty-step__title .ty-step__title-left { + color: #465363 +} + +.ty-step__title .ty-step__title-txt { + color: #465363 +} + +.ty-step__title-left, +.ty-step__title-txt { + background-color: transparent +} + +.ty-step__title-active { + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; + background-color: #46aaf2 +} + +.ty-step__title-complete .ty-step__title-right .ty-btn { + padding: 0; + margin: 4px 0; + background-color: transparent; + color: #465363 +} + +.ty-checkout-buttons { + background-color: transparent; + border: none +} + +.notification-content-extended { + -webkit-border-radius: 5px; + -moz-border-radius: 5px; + border-radius: 5px +} + +.notification-content-extended h1 { + background-color: transparent; + border: none +} + +.notification-content-extended h1 span { + color: #465363 +} + +.notification-content-extended h1 span:hover { + color: #f58d8e +} + +.ui-dialog .ui-dialog-titlebar { + background: 0 0; + border: none +} + +.ui-dialog .ui-dialog-titlebar-close .ui-icon-closethick { + color: #465363 +} + +.ui-dialog .ui-dialog-titlebar-close.ui-state-hover .ui-icon-closethick { + color: #667990 !important +} + +.ui-widget-header .ui-dialog-titlebar-close.ui-state-hover span:before { + color: #46aaf2 +} + +.ty-cart-items__list-item .ty-icon-cancel-circle { + color: #46aaf2 +} + +.ty-breadcrumbs__a { + color: #465363 +} + +.ty-breadcrumbs__current { + color: #888 +} + +.ty-footer-menu { + background: #081b29 url(//patterns.cart-services.com/images/6.png) repeat +} + +.ty-footer-menu__header { + font-size: 1.45em; + font-weight: 400; + color: #fff +} + +.ty-footer-menu__item { + margin-bottom: 6px +} + +.ty-footer-menu__item a { + color: #fff; + font-size: .95em +} + +.ty-footer-menu__item a:hover { + color: #f58d8e +} + +.footer-copyright { + background-color: #040d14 +} + +@media screen and (max-width:767px) { + .ty-footer-menu { + padding-bottom: 10px + } + + .ty-footer-menu__header { + font-size: 1.2em; + border-bottom-color: #103754 + } + + .ty-footer-menu__item { + border-bottom-color: #103754; + margin-bottom: 0 + } + + .ty-footer-menu__icon-open, + .ty-footer-menu__icon-hide { + font-size: 14px; + padding: 8px 12px; + background-color: rgba(0, 0, 0, .1); + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px + } + + .footer-no-wysiwyg .ty-footer-menu__items, + .footer-no-wysiwyg .ty-footer-general__body { + margin-top: 0 + } + + .ty-compact-list__controls { + margin-right: 0 + } +} + +.owl-carousel.ty-scroller-list { + background: #fff; + -webkit-border-radius: 5px; + -moz-border-radius: 5px; + border-radius: 5px; + padding: 10px 0; + border: 1px solid #edf2f5 +} + +.owl-theme .owl-controls .owl-buttons div { + opacity: 1; + background: #46aaf2; + line-height: 24px +} + +.owl-theme .owl-controls.clickable .owl-buttons div:hover { + background: #f58d8e +} + +.owl-theme .owl-controls .owl-page span { + background-color: #46aaf2 +} + +.owl-theme .owl-controls .owl-page.active span, +.owl-theme .owl-controls.clickable .owl-page:hover span { + background-color: #f58d8e +} + +input[type=text], +input[type=password], +textarea, +select { + padding: 4px 8px; + border: 2px solid #edf2f5; + background: #edf2f5; + -webkit-transition: border .2s linear 0s; + -moz-transition: border .2s linear 0s; + -o-transition: border .2s linear 0s; + transition: border .2s linear 0s +} + +input[type=text]:hover, +input[type=password]:hover, +textarea:hover { + border-color: #8dcbf7 +} + +input[type=text]:focus, +input[type=password]:focus, +textarea:focus { + outline: 0; + border-color: #8dcbf7; + background: #fff +} + +.ty-control-group__title { + font-weight: 400 +} + +.ty-calendar__button { + color: #465363 +} + +.footer-stay-connected { + background: #46aaf2 +} + +.ty-footer-form-block__form .cm-hint { + color: #8292a7 +} + +.ty-btn-go { + border: none; + background: 0 0 +} + +.ty-compare-menu__elem { + background: #465363 +} + +.ty-product-empty { + border: 1px solid #edf2f5 +} + +h1, +h2, +h3, +h4 { + font-family: varela round, Arial, sans-serif; + color: #000 +} + +body, +p, +div, +li { + font-family: system-ui, -apple-system, BlinkMacSystemFont, segoe ui, Roboto, Oxygen, Ubuntu, Cantarell, fira sans, droid sans, helvetica neue, sans-serif; + color: #000 +} + +h1 { + font-size: 32px +} + +.ty-footer-menu, +.tygh-footer { + background: #fff +} + +.ty-text-links .ty-text-links__a, +li { + color: rgba(0, 0, 0, .6) +} + +.ty-grid-vendors .ty-grid-list__item { + padding: 0 20px 10px +} + +.ty-grid-vendors .ty-grid-list__company-logo { + height: 180px; + width: 100% +} + +.ty-companies__img .ty-nowrap.ty-stars, +.ty-companies__img .ty-discussion__review-quantity { + display: none +} + +.ty-grid-vendors .ty-company-image-wrapper { + height: 100% +} + +.ty-apply-for-vendor-plan #company_plan { + display: none +} + +.tygh-top-panel { + background: #e2edf7; + padding: 6px 0 +} + +.ty-geo-maps__geolocation { + margin-right: 15px +} + +.ty-geo-maps__geolocation__opener { + padding: 9px 2px +} + +.tygh-top-panel .top-my-account { + background: #fff; + border: 2px solid #000; + border-radius: 5px +} + +.tygh-top-panel .top-my-account .ty-dropdown-box__title { + padding: 6px; + border-radius: 5px +} + +.tygh-top-panel .ty-dropdown-box__title:hover, +.tygh-top-panel .ty-dropdown-box__title.open { + background: #fff +} + +.tygh-top-panel a, +.tygh-top-panel a:hover, +.ty-dropdown-box__title.open a, +.ty-dropdown-box__title.open i, +.ty-dropdown-box__title.open .ty-minicart-title, +.tygh-top-panel .ty-dropdown-box__title:hover .ty-icon-down-micro, +.tygh-top-panel .ty-dropdown-box__title:hover a, +.tygh-top-panel .ty-dropdown-box__title.open .ty-icon-down-micro, +.tygh-top-panel .ty-dropdown-box__title.open a, +.tygh-top-panel .top-my-account .ty-dropdown-box__title a { + color: #000 !important +} + +.tygh-top-panel .ty-dropdown-box__title.open:after { + display: none +} + +.tygh-top-panel .ty-dropdown-box__content { + border: 2px solid #000; + border-radius: 5px +} + +.ty-dropdown-box__content .ty-dropdown-box__item:hover { + background: #e2edf7 +} + +.tygh-top-panel .ty-currencies__active, +.tygh-top-panel .ty-currencies__item:hover { + background: #fff; + color: #000 +} + +.tygh-top-panel .ty-currencies__item { + padding: 6px 10px; + margin-right: 5px; + border: 2px solid transparent; + border-radius: 5px +} + +.top-quick-links, +.ty-text-links { + margin: 0 +} + +.ty-text-links .ty-text-links__a { + line-height: 30px +} + +.ty-text-links .ty-text-links__a:hover { + text-decoration: underline +} + +#search_input { + border: 2px solid #000; + background: #fff; + height: 44px +} + +.ty-search-block button { + height: 36px; + width: 36px +} + +.tygh-header>div { + padding-top: 20px +} + +.top-menu-grid { + padding-top: 10px +} + +.ty-dropdown-box__content { + background: #fff; + border: 2px solid #000; + border-radius: 5px +} + +.ty-dropdown-box__title.open .ty-minicart-title { + color: #fff +} + +.top-cart-content .ty-dropdown-box__title.open:after { + display: none +} + +.ty-cart-items__list-item .ty-icon-cancel-circle { + color: #f58d8e +} + +#banner_slider_951.owl-carousel .owl-wrapper-outer { + border-radius: 30px; + margin-top: 30px; + height: 450px +} + +.owl-theme .owl-controls .owl-page span { + background: #e2edf7; + border: 2px solid #000; + opacity: 1 +} + +.ty-sort-container { + padding: 0 +} + +.ty-sort-dropdown__wrapper, +.ty-horizontal-product-filters-dropdown__wrapper { + background: #fff; + border: 2px solid #000; + margin-right: 15px +} + +.ty-sort-dropdown__content, +.ty-horizontal-product-filters-dropdown__content { + background: #fff; + border: 2px solid #000; + margin-top: 10px +} + +.mobile-filters .ty-dropdown-box__title { + background: #fde77a; + padding: 10px 20px; + border: 2px solid #000; + border-radius: 5px; + margin-bottom: 20px +} + +.mobile-filters .cm-popup-box { + width: 100%; + padding: 10px; + box-sizing: border-box; + margin-top: 10px +} + +.span16 .sd-grid-list__company-name { + display: none +} + +.ty-geo-maps-shipping__item { + background-color: #cee6ce; + padding: 13px; + color: #fff; + margin-right: 50px; + border-radius: 4px +} + +.ty-product-block__field-group .ty-control-group.product-list-field { + display: none +} + +.sd-grid-list__vendor-country { + padding-top: 10px; + color: gray; + font-size: 12px +} + +.ty-grid-list__item-name .product-title { + color: #000 +} + +.ty-product-list__info .ty-control-group.product-list-field, +.ty-product-list__info .ty-product-list__feature { + display: none +} + +.ty-mainbox-container { + margin-bottom: 40px +} + +.ty-grid-list__item, +.ty-product-list { + border: 2px solid #000; + background: #fff; + border-radius: 8px; + transition: all .2s ease-in-out 0s; + box-shadow: none; + overflow: hidden +} + +.ty-grid-list__item--overlay:hover, +.ty-product-list:hover { + box-shadow: none; + border-color: #000; + transform: scale(1.02) +} + +.ty-grid-list__image { + border-radius: 6px 0 +} + +.ty-product-list__image { + margin-bottom: 0 +} + +.ty-product-list__image img { + border: none; + object-fit: cover; + width: 220px; + height: 220px +} + +.grid-list__rating { + display: none +} + +.ty-product-variant-image.ty-clear-both, +tr#extra_option_variants_0_1 { + display: none +} + +.ty-product-list__content { + padding: 20px; + box-sizing: border-box +} + +.ty-product-list__rating { + bottom: 0; + background: #000; + background: linear-gradient(0deg, rgba(0, 0, 0, 0.43) 12%, rgba(255, 255, 255, 0) 98%) +} + +.ty-nowrap.ty-stars { + padding: 4px +} + +.ty-product-list__content .ty-product-list__qty { + display: none +} + +.ty-range-slider .ui-slider-handle { + border: 8px solid #b8d8e5 +} + +.ty-range-slider__num { + color: #b8d8e5; + background: 0 0; + width: auto +} + +.ty-range-slider .ui-slider-range { + background-color: #fee77b +} + +.ty-product-filters__block { + background: #fff; + padding: 5px; + border-radius: 10px; + margin-bottom: 15px +} + +#slider_32_6 .ty-range-slider__num { + white-space: unset +} + +.ty-sort-dropdown__content .ty-sort-dropdown__content-item-a { + white-space: nowrap +} + +.subcategories li { + width: 32%; + text-align: center; + margin: 0 0 22px; + padding: 10px; + box-sizing: border-box +} + +.subcategories li a span { + padding: 5px 10px; + background: #fff; + border: 2px solid #000; + border-radius: 4px +} + +.ty-subcategories__item .ty-subcategories-img { + padding-bottom: 0; + width: 100%; + border-radius: 5px; + margin-bottom: 10px +} + +.ty-subcategories__item .ty-subcategories-img:hover { + opacity: .8 +} + +#category_products_11 .subcategories li a span { + padding: 0; + background: 0 0; + border: none; + border-radius: inherit +} + +.ty-product-list__item-name .product-title { + color: #000 +} + +.ty-product-list__control .ty-btn { + margin-top: 10px +} + +.ty-product-block__img-wrapper, +.ty-product-block__left { + margin: 4px 8px 6px 0; + border: 2px solid #000; + border-radius: 10px +} + +.ty-product-block__img-wrapper .owl-item { + width: 450px; + height: 450px +} + +.ty-control-group__label { + width: 100% +} + +.ty-product-switcher { + display: none +} + +.ty-product-block-title { + color: #1b1b1b +} + +.ty-btn { + border: 2px solid #000; + background: #fff; + color: #000 +} + +.ty-btn:hover { + background: #e2edf7; + color: #000 +} + +.ty-btn__primary { + background: #fee77b +} + +.ty-btn__primary:hover { + background: #ffde45; + color: #000 +} + +.ty-tabs__item { + background: #e2edf7; + color: #1b1b1b; + margin: 4px 8px 6px 0; + border: 2px solid #000; + transition: none +} + +.ty-tabs__item:hover { + background: #fff +} + +.ty-tabs__item:hover a { + color: #1b1b1b +} + +.ty-tabs__content { + background-color: #fff; + border: 2px solid #000; + border-top: none +} + +.ty-tabs__item.active { + background-color: #fff; + color: #1b1b1b; + border: 2px solid #000; + border-bottom: none; + -webkit-box-shadow: none; + -moz-box-shadow: none; + box-shadow: none +} + +.ty-tabs__item.active:after { + left: -2px; + height: 10px; + border-right: 2px solid #000; + border-left: 2px solid #000 +} + +.ty-tabs { + border-bottom: 2px solid #000 +} + +#content_description .row { + margin: 0 +} + +.ty-stars__icon { + color: #fee77b +} + +.pages p { + font-size: 17px; + line-height: 30px +} + +.pages li { + font-size: 17px; + line-height: 28px; + color: #000 +} + +.pages { + max-width: 1000px; + margin: 0 auto +} + +#credit_card_name { + padding: 8px; + border: 1px solid #acbdcd; + background: #fff; + min-height: 21px +} + +#litechekout_payments_form { + background-color: #fff; + padding: 30px; + box-sizing: border-box; + border-radius: 10px; + border: 3px solid #000 +} + +.checkoutpagetitle h1 { + font-size: 30px !important; + width: 100%; + border-bottom: 3px solid #000; + font-family: varela round, sans-serif +} + +.litecheckout__field.litecheckout__field--fill { + width: 23% +} + +.litecheckout__shipping-method__text { + margin: 5px; + background-color: #ffd1d1; + width: 100%; + border-radius: 5px; + border-top-left-radius: 5px; + border-top-right-radius: 5px; + border-bottom-right-radius: 5px; + border-bottom-left-radius: 5px; + padding: 14px; + color: #fff !important +} + +.ty-credit-card { + border: 0 +} + +.ty-credit-card { + padding: 0 +} + +.ty-credit-card__cvv-field { + margin-left: 20px; + margin-top: 0 +} + +#litecheckout_step_payment .litecheckout__shipping-method.litecheckout__field.litecheckout__field--xsmall { + display: none +} + +#litecheckout_step_location .litecheckout__item { + display: none +} + +.span4.side-grid.litecheckout__cart { + background-color: #fff; + border-radius: 7px; + border: 3px solid #000; + margin-top: 90px +} + +.span4.side-grid.litecheckout__cart .ty-wysiwyg-content h3 { + margin-top: 0 +} + +.stripe-connect-payment-form__card.sc-field.sc-field--empty, +.stripe-connect-payment-form__cvc.sc-field.sc-field--empty, +.stripe-connect-payment-form__expiry.sc-field.sc-field--empty { + border-radius: 5px +} + +.vendor-page .ty-mainbox-title__right, +.vendor-page .ty-sort-container, +.vendor-page .ty-mainbox-title, +.vendor-page p.ty-no-items { + display: none +} + +.ty-product-block__left .ty-discussion__review-write { + display: none +} + +.span8.main-content-grid { + background-color: #fff; + padding: 20px; + border-radius: 10px; + border: 3px solid +} + +.ty-profile-field__buttons.buttons-container, +#apply_for_vendor_account .buttons-container { + background-color: #fff; + margin: 0; + padding: 0 +} + +.ty-product-block__left .ty-qty .ty-control-group__label, +.ty-product-block__left .ty-control-group__item, +.ty-product-block__advanced-option .ty-control-group__label { + display: none +} + +.ty-product-block__left .ty-product-block__field-group, +.ty-product-block__left .ty-product-block__button { + display: inline-block; + vertical-align: middle; + margin: 0 +} + +.ty-product-block__left .ty-qty, +.ty-product-block__left .ty-product-block__button .ty-btn { + margin: 0 +} + +.ty-product-block__left input[type=text] { + background: #fee77b; + border: none +} + +.ty-product-block__left .ty-value-changer__increase, +.ty-value-changer__decrease { + color: #000; + line-height: 14px +} + +.product-seller .ty-mainbox-simple-title, +.product-seller .ty-mainbox-simple-body { + display: inline-block; + width: auto +} + +.product-seller .ty-btn, +.product-seller .logo-container { + display: none +} + +.product-seller .ty-mainbox-simple-title, +.product-seller .store-lnk { + font-size: 15px +} + +.product-seller .ty-pict { + width: 100%; + height: 100%; + object-fit: cover +} + +.product-seller .logo-container.ty-float-left { + width: 50px; + height: 50px; + background-color: #fff; + border-radius: 6px; + display: inherit; + overflow: hidden +} + +.product-seller .store-lnk { + color: #f58d8e; + margin-right: 10px +} + +.product-seller { + font-size: 16px; + display: inline-block; + vertical-align: middle +} + +.float-right { + text-align: right; + padding-right: 9px +} + +.ty-vendor-communication__post-write.cm-dialog-opener.cm-dialog-auto-size { + cursor: pointer; + font-family: varela round, sans-serif; + font-size: 14px; + font-style: normal; + background-color: #eaeaea; + padding: 10px; + display: inline-block; + border-radius: 7px; + margin-left: 0 +} + +.ty-product-block__left .ty-product-block__field-group { + background-color: #fee77b; + padding: 4px; + border: 2px solid #000; + border-radius: 6px +} + +.vendor-page a.cm-dialog-opener.cm-dialog-auto-size.ty-vendor-communication__post-write { + vertical-align: middle; + text-align: center; + cursor: pointer; + font-family: varela round, sans-serif; + font-size: 14px; + font-style: normal; + background-color: #fee77a; + padding: 10px; + display: inline-block; + border: 2px solid #000; + border-radius: 7px; + margin-bottom: 20px; + margin-top: 20px +} + +.vendor-page .row.profile-about-me { + margin-left: 0 +} + +.vendor-page .ty-wysiwyg-content a { + color: #7cacf3 +} + +.vendor-page .ty-wysiwyg-content p, +.vendor-page .ty-wysiwyg-content a { + background-color: #f8f8f8 !important; + padding: 0; + margin-bottom: 2px !important; + font-size: 16px !important +} + +.ty-company-detail__info-list { + line-height: 1.7; + margin-top: 15px; + word-break: normal +} + +.vendor-name .store-lnk { + font-size: 35px; + pointer-events: none; + color: #000; + display: inline-block; + margin-bottom: 15px !important +} + +.ty-companies__img { + width: 150px; + height: 150px; + background-color: #fff; + float: inherit; + margin: 0 auto +} + +.ty-company-detail__logo, +.ty-logo-container-vendor { + width: 100%; + height: 250px; + background-color: #fff +} + +.ty-company-image, +.ty-logo-container-vendor__image { + width: 100%; + height: 100%; + object-fit: contain +} + +.ty-companies__info div { + display: none +} + +.ty-companies__info .ty-company-title a { + display: inherit !important; + text-align: center +} + +.ty-companies__info { + padding-left: 0 +} + +.ty-companies { + width: 30%; + display: inline-block; + text-align: center; + border-bottom: 0; + margin: 1% +} + +.grid-list { + margin-left: -10px +} + +.ty-mainbox-container { + margin-top: 50px +} + +.location-more-visible { + margin-top: 30px; + background-color: #fce67b; + border-color: #fce67b; + padding-left: 10px; + margin-right: 10px; + border-radius: 5px +} + +.top-currencies { + margin-top: 20px; + margin-right: 20px; + background-color: #e2edf7; + border-radius: 5px +} + +.top-logo { + width: 100px; + margin-right: -100px; + margin-top: 0 +} + +.container-fluid .header-grid { + padding: 0; + margin: 0 +} + +.top-search { + margin-top: 30px +} + +.top-my-account { + margin-top: 30px +} + +.top-cart-content { + margin-top: 30px +} + +.tygh-top-panel .top-my-account { + background: #fff; + border: 2px solid #000; + border-radius: 5px; + margin-top: 29px; + margin-left: 10px +} + +.ty-icon-cart:before { + color: #000 +} + +.ty-icon-down-micro::before { + color: #000 +} + +.tygh-header>div { + padding-top: 0 +} + +.tygh-top-panel { + margin-bottom: -20px +} + +.tygh-top-panel .ty-dropdown-box .top-currency-drop { + margin-top: 30px !important +} + +.row-fluid [class*=span]:first-child { + padding: 0 +} + +.tygh-top-panel { + margin-bottom: 0 +} + +.tygh-top-panel .top-currencies-drop { + margin-top: 30px; + margin-right: 10px +} + +.ty-dropdown-box__content { + min-width: 115px; + text-align: left +} + +.ty-dropdown-box__title { + border-radius: 5px +} + +.row-fluid [class*=span]:first-child { + padding: 20px +} + +.ty-mainbox-container { + margin-top: 50px; + margin: 20px +} + +.row-fluid [class*=span]:first-child { + padding: 0 20px +} + +.tygh-top-panel .ty-dropdown-box__content { + min-width: 150% +} + +.ty-value-changer__increase, +.ty-value-changer__decrease { + background: #f6f0d6; + border: none +} + +.ty-value-changer__increase { + margin-bottom: 5px +} + +@media(max-width:767px) { + .tygh-header>div { + padding-top: 0 !important; + margin-top: -40px; + margin-bottom: 10px + } + + .span6 { + display: none + } + + .span8 { + margin: -130px + } + + .top-search { + display: none + } + + .span2 { + width: 100px; + position: relative; + display: inline + } + + .ty-company-detail__info-list { + display: none + } + + .tygh-header>div { + padding-top: 40px !important + } + + .top-menu-grid { + padding-top: 0 !important + } + + .top-menu { + padding-top: 0 !important + } + + .ty-menu__item>.ty-menu__submenu { + margin-bottom: 0 + } + + .ty-menu__item.visible-phone .ty-menu__item-link { + background-color: #fff; + border: 2px solid #000; + color: #000 + } + + .top-grid [class*=span] { + float: left + } + + .top-logo-grid { + position: absolute; + z-index: 999; + width: 60px !important; + top: 0; + margin-top: 0; + padding: 0 + } + + .ty-menu__item .ty-menu__item-link { + min-height: inherit; + -webkit-box-sizing: inherit; + -moz-box-sizing: inherit; + box-sizing: inherit + } + + .ty-column2 { + width: 50% + } + + .ty-product-block__img-wrapper, + .ty-product-block__left { + width: 100% !important; + margin: 0 auto; + margin-top: 10px + } + + .ty-tabs__a { + padding: 8px 9px; + font-size: 13px; + height: auto + } + + .ty-btn.ty-btn__tertiary.text-button { + display: none + } + + . span16 { + width: 1440px + } + + .hidden-phone { + width: 1440px + } +} + +@media(max-width:480px) { + .ty-column2 { + width: 100% + } + + .ty-pagination__btn { + width: auto + } + + #content_description { + padding: 12px; + border: 2px solid; + border-radius: 7px + } + + .ty-accordion .ui-accordion-header { + background: #e2edf7; + color: #1b1b1b; + margin: 4px 8px 6px 0; + border: 2px solid #000; + transition: none + } + + #content_discussion_block { + background-color: #f8f8f8 + } + + .ty-product-list__image img { + width: 100% + } +} \ No newline at end of file diff --git a/packages/osrl/examples/library/osr/bazar/other_item.html b/packages/osrl/examples/library/osr/bazar/other_item.html new file mode 100644 index 00000000..c925d69d --- /dev/null +++ b/packages/osrl/examples/library/osr/bazar/other_item.html @@ -0,0 +1,7 @@ + diff --git a/packages/osrl/examples/library/osr/bazar/post.osr b/packages/osrl/examples/library/osr/bazar/post.osr new file mode 100644 index 00000000..0c3088cd --- /dev/null +++ b/packages/osrl/examples/library/osr/bazar/post.osr @@ -0,0 +1,20 @@ +[% include "product_variables.osr" %] + +[%js%] +const _pathIn = path.resolve(PRODUCT_ROOT + './bazar/output.html'); +const product = readFile(_pathIn); + +const $ = cheerio.load(product, { + xmlMode: true +}); + +$('a').each(function () { + $(this).attr("style", "color:#4C74B9"); +}) + +$('table').each(function () { + $(this).attr("style", "display:table;width:auto;margin-left:auto;margin-right:auto"); +}) + +return $.html() +[%endjs%] diff --git a/packages/osrl/examples/library/osr/bazar/preview.osr b/packages/osrl/examples/library/osr/bazar/preview.osr new file mode 100644 index 00000000..fbba05dc --- /dev/null +++ b/packages/osrl/examples/library/osr/bazar/preview.osr @@ -0,0 +1,29 @@ +[% include "product_variables.osr" %] + +[%js%] +const _pathIn = path.resolve(PRODUCT_ROOT + './bazar/output.html'); +const product = readFile(_pathIn); + +const $ = cheerio.load(product, { + xmlMode: true +}); + +$('a').each(function () { + $(this).attr("style", "color:#4C74B9"); +}) + +$('table').each(function () { + $(this).attr("style", "display:table;width:auto;margin-left:auto;margin-right:auto"); +}) +/* +$('img').each(function () { + $(this).css({ + "border-radius" : "4px" + }); +}) +*/ + +let output = readFile('${root}/osr/bazar/product_begin.html'); +output = substitute(output, {product:$.html()}); +return output; +[%endjs%] diff --git a/packages/osrl/examples/library/osr/bazar/product_begin.html b/packages/osrl/examples/library/osr/bazar/product_begin.html new file mode 100644 index 00000000..d64b036f --- /dev/null +++ b/packages/osrl/examples/library/osr/bazar/product_begin.html @@ -0,0 +1,1242 @@ + + + + + +Machines :: Extruder :: Extruder Fully Built :: Extrusion v3.5 - 'Lydia' + + + + + + + + + + + + + + + + + + +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + +
    +
    +
    +
    + + +
    +
    +
    + Barcelona + + +
    +
    + + +
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    +

    +Sold by: +

    + +
    +
    + PlasticHub + +
    +
    +
    +
    +
    + +
    +
    +
    + + + + + + + + +
    + + + +
    +
    +
    +
    +
    + + + + + + +
    + + + +
    +
    +
    +
    + + + +

    Extrusion v3.5 - 'Lydia'

    +
    +
    +
    +
    + + +
    + + + + + +2,650.00 + +
    + + + + +
    +
    +
    +
    + + + + + + + + + + + + + + + +
    +
    +
    +
    +
    + +PlasticHub +
    +
    +
    +
    + +
    +
    + +
    + +
    + + +In stock + +
    +
    +
    + + +
    +
    ++ + + +
    +
    +
    +
    +
    +
    + + + + + + + + + + +Contact vendor +
    +
    +
    +
    +
    +
    +Processing time and rates: +
    + Barcelona + + +
    +
    +
    +
    +
    + + +
    +
    + + +
    +
    + +
    ${product}
    + +
    +
    +
    +Country of Origin: +
    Spain
    +
    +
    +Dimensions : +
    80x80x20CM
    +
    +
    +Weight (KG): + +
    60KG
    +
    +
    +
    +
    +
    +
    +
    +
    +

    +Item location +

    +
    + +Spain: + +
    +
      +
    • +SAN FELIU DE CODINES +
    • +
    • +3-5 business days +
    • +
    • +Free +
    • +
    +
    +
    +
    +
    +

    +Domestic shipping to +

    +
    + +Spain: + +
    +
      +
    • +One item: €120.00 +
    • +
    • +Each additional item: €0.00 +
    • +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +

    +Similar products +

    +
    + + +
    +
    +
    + + + + +
    + + + +
    + +
    +
    +
    + + + + + + + +2,500.00 + +
    +
    +
    +
    + + + + +
    + + + +
    + +
    +
    +
    + + + + + + + +1,500.00 + +
    +
    +
    +
    + + + + +
    +
    + +
    +
    + +
    +
    +
    + + + + + + + +10.00 + +
    +
    +
    +
    + + + + +
    +
    + +
    +
    +
    + +PETBOT + +
    +
    +
    +
    + + + + + + + +400.00 + +
    +
    +
    +
    +
    + +
    +
    + +
    +
    + + +
    +
    + + + + + + + + + + + + diff --git a/packages/osrl/examples/library/osr/bazar/product_features.md b/packages/osrl/examples/library/osr/bazar/product_features.md new file mode 100644 index 00000000..c9840f08 --- /dev/null +++ b/packages/osrl/examples/library/osr/bazar/product_features.md @@ -0,0 +1,5 @@ +- All parts are precision manufactured, using modern CNC and manual machines +- Smooth and precise plunging experience +- The plunger has a replaceable bronze tip +- 2 mold interfaces: cone for press, and M20 thread interface +- Heat-shield and insulation diff --git a/packages/osrl/examples/library/osr/bazar/root-i18n.html b/packages/osrl/examples/library/osr/bazar/root-i18n.html new file mode 100644 index 00000000..bfca309e --- /dev/null +++ b/packages/osrl/examples/library/osr/bazar/root-i18n.html @@ -0,0 +1,10 @@ +[% capture my_images %] + [%- render "product_features.md" -%] +[% endcapture %] +# vars + +[[ my_images | i18n]] + +[%- i18n -%][%- i18n-end -%] + +#end diff --git a/packages/osrl/examples/library/osr/bazar/root.html b/packages/osrl/examples/library/osr/bazar/root.html new file mode 100644 index 00000000..f43e7279 --- /dev/null +++ b/packages/osrl/examples/library/osr/bazar/root.html @@ -0,0 +1,27 @@ +--- +title: Tests - Basics +nav: kb +menu: + kb: + parent: tests + weight: 20 +toc: true +nb: 3 +fCat: 54 +--- + +# vars + +[% capture sCat %][[fCat]][% endcapture %] + +- sCat : [sCat] + +- DST_DIR: [[DST_DIR]] + +- fCat : [[fCat]] + +[% render "xlsx.osr" file:"./specs.xlsx" html:true cat:[sCat] %] + +[%- i18n %] +[%- include "product_features.md" -%] +[%- i18n-end %] diff --git a/packages/osrl/examples/library/osr/bazar/root.html_ b/packages/osrl/examples/library/osr/bazar/root.html_ new file mode 100644 index 00000000..50f6b730 --- /dev/null +++ b/packages/osrl/examples/library/osr/bazar/root.html_ @@ -0,0 +1,55 @@ + +[% include "product_variables.osr" %] + +[% include "body.md" %] + +[% include "header_notice.osr" %] + +[% include "${PRODUCT_ROOT}/header_notice.osr" %] + +
    + [% include "product_overview_drawings.osr" %] +
    + +
    +
    + +
    +

    Specification

    + [% include "product_specs.osr" html:true %] +
    + +
    + [% if config.show.authors %] + [% include "authors_html.osr" authors:product.authors showHeader:true %] + [%endif%] +
    +
    +
    + +[% include "product_resources.osr" %] + +
    + +[% include "product_showreel.osr" %] + +[% if config.show.others %] + [% include "other_products.osr" %] +[%endif%] + +[% if config.show.howtos %] + [% include "product_howtos.osr" %] +[%endif%] + +[% include "social_links.osr" %] + +[% include "vendor_instagram.osr" %] + +[% if config.show.debug %] + [% include "product_debug.osr" %] +[%endif%] + + +[%js%] + +[%endjs%] diff --git a/packages/osrl/examples/library/osr/bazar/specs.xlsx b/packages/osrl/examples/library/osr/bazar/specs.xlsx new file mode 100644 index 00000000..c44b56c0 Binary files /dev/null and b/packages/osrl/examples/library/osr/bazar/specs.xlsx differ diff --git a/packages/osrl/examples/library/osr/bazar/xlsx.osr b/packages/osrl/examples/library/osr/bazar/xlsx.osr new file mode 100644 index 00000000..186fb375 --- /dev/null +++ b/packages/osrl/examples/library/osr/bazar/xlsx.osr @@ -0,0 +1,21 @@ +[% js %] +console.log('fCat', cat); +console.log('file', file); +const _path = lookup(file); +const h = html; +if (!fs.exists(_path)) { + console.error("file doesn't exists", file); + // try global item config (temp, for moulds) + if (global.private && global.private.specs) { + data = markdownTable(global.private.specs); + return md2html(data); + } + return ''; +} else { + const t = global; + let data = xlsx.parse(_path); + data[0].data = data[0].data.filter((d) => !!d.length); + data = markdownTable(data[0].data); + return md2html(data); +} +[% endjs %] diff --git a/packages/osrl/examples/library/osr/extra_resources.md b/packages/osrl/examples/library/osr/extra_resources.md new file mode 100644 index 00000000..e69de29b diff --git a/packages/osrl/examples/library/osr/gallery.osr b/packages/osrl/examples/library/osr/gallery.osr new file mode 100644 index 00000000..db6ebdb1 --- /dev/null +++ b/packages/osrl/examples/library/osr/gallery.osr @@ -0,0 +1,11 @@ +[%js%] +const _path = substitute(`${cwd}/${product_rel}/${path}`); +console.log(_path); +if(fs.images(_path).length) +{ + const t = html.thumbs(`${abs_url}/${product_rel}/${path}`,_path); + return `

    ${name}

    ${t}`; +}else{ + console.log(_path + 'doesnt exists'); +} +[%endjs%] diff --git a/packages/osrl/examples/library/osr/gallery_com.osr b/packages/osrl/examples/library/osr/gallery_com.osr new file mode 100644 index 00000000..1fbbc60a --- /dev/null +++ b/packages/osrl/examples/library/osr/gallery_com.osr @@ -0,0 +1,11 @@ +[%js%] +const _path = substitute(`${cwd}/${product_rel}/${path}`); +console.log(_path + ' _com'); +if(fs.images(_path).length) +{ + const t = html.thumbs(`${abs_url}/${product_rel}/${path}`,_path); + return `

    ${name}

    ${t}`; +}else{ + console.log(_path + 'doesnt exists'); +} +[%endjs%] \ No newline at end of file diff --git a/packages/osrl/examples/library/osr/global.json b/packages/osrl/examples/library/osr/global.json new file mode 100644 index 00000000..9c685c3a --- /dev/null +++ b/packages/osrl/examples/library/osr/global.json @@ -0,0 +1,100 @@ +{ + "products_path": "./products/products", + "fragments_path": "../../products/templates/jekyll/", + "vendor_name": "Plastic Hub", + "vendor_website": "https://plastic-hub.com/", + "vendor_products_external": "https://plastic-hub.com/products/", + "vendor_instagram": "https://www.instagram.com/plastichubcat", + "vendor_youtube": "https://www.youtube.com/channel/UCuWDxJtV2pf5BefHEy09Cew/featured?view_as=subscriber", + "vendor_github": "https://git.osr-plastic.org/osr-plastic", + "vendor_contact_email": "mailto:sales@plastic-hub.com", + "vendor_whatsapp": "tel:0034666894789", + "vendor_facebook": "https://www.facebook.com/plastichubcat/", + "vendor_blog": "https://precious-plastic.org/", + "vendor_discord": "https://discord.gg/vR5d6ShTez", + "author_link_pp": "https://preciousplastic.com/", + "author_link": "https://osr-plastic.org", + "site": "https://precious-plastic.org/", + "github_root": "https://precious-plastic.org/", + "OSR_HOWTOS_ROOT_URL": "https://osr-plastic.org/howtos/", + "OSR_HOWTOS_PATH": "../../ph3/pp-next2/howtos", + "mysql" : { + }, + "show": { + "badges": false, + "authors": true, + "head": true, + "debug": false, + "wiki": false, + "forum": false, + "others": false, + "howtos":false + }, + "discourse": { + "host": "https://forum.osr-plastic.org/", + "key": "a642d7405fb1318990b9e440cbc8d262a81d643c0530980ab470671296197d4f", + "username": "PlasticHub", + "rateLimitConcurrency": 1 + }, + "instagram": { + + }, + "all": [ + { + "name": "Zoe", + "rel": "products/zoe", + "slug": "zoe", + "link": "https://shop.osr-plastic.org/shredder-en/shredder-fully-built/zoe-shredder-and-extrusion-combo/", + "image" : "https://plastic-hub.com/products/zoe/media/gallery/xmax.JPG" + }, + { + "name": "Lydia-v3.5", + "rel": "products/extrusion/lydia-v3.5", + "slug": "lydia-v3.5", + "link": "https://bazar.preciousplastic.com/machines/extruder/extruder-fully-built/extrusion-v3.1-lydia/", + "image" : "https://plastic-hub.com/products/extrusion/lydia-v3.5/renderings/perspective.jpg" + }, + { + "name": "Lydia-v4.5", + "rel": "products/extrusion/lydia-v4.5", + "slug": "lydia-v4.5", + "link": "https://bazar.preciousplastic.com/machines/extruder-pro/extruder-pro-fully-built/extrusion-v4.3-lydia/", + "image" : "https://plastic-hub.com/products/extrusion/lydia-v4.5/renderings/perspective_2k_teaser.png" + }, + { + "name": "Elena", + "rel": "products/injection/elena", + "slug": "elena", + "link": "https://bazar.preciousplastic.com/machines/injection/injection-fully-built/arbor-injection-machine-elena-catalonia-the-original/", + "image" : "https://plastic-hub.com/products/injection/elena/renderings/teaser.jpg" + }, + { + "name": "Obelix", + "rel": "products/shredder/obelix", + "slug": "obelix", + "link": "https://bazar.preciousplastic.com/machines/shredder-pro/shredder-pro-fully-built/upgraded-v4-shredder/", + "image" : "https://plastic-hub.com/products/shredder/obelix/media/gallery/latest.jpg" + }, + { + "name": "Asterix", + "rel": "products/shredder/asterix", + "slug": "asterix", + "link": "https://bazar.preciousplastic.com/machines/shredder/shredder-fully-built/dual-axis-shredder-withh-auto-plunge-and-reverse/", + "image" : "https://plastic-hub.com/products/shredder/asterix/media/gallery/revA.JPG" + }, + { + "name": "Idefix", + "rel": "products/shredder/idefix", + "slug": "idefix", + "link": "https://bazar.preciousplastic.com/machines/shredder/shredder-fully-built/shredder-v3.1-and-hopper/", + "image" : "https://plastic-hub.com/products/shredder/idefix/media/gallery/IMG_2994.JPG" + }, + { + "name": "Cassandra", + "rel": "products/cassandra", + "slug": "cassandra", + "link": "https://bazar.preciousplastic.com/machines/sheetpress/sheet-press-fully-built/heat-conductive-putty-sheetpress/", + "image" : "https://plastic-hub.com/products/cassandra/media/gallery/perspective_closed.JPG" + } + ] +} \ No newline at end of file diff --git a/packages/osrl/examples/library/osr/header_notice.osr b/packages/osrl/examples/library/osr/header_notice.osr new file mode 100644 index 00000000..9416436d --- /dev/null +++ b/packages/osrl/examples/library/osr/header_notice.osr @@ -0,0 +1,3 @@ +
    + Please always contact us through EMAIL : sales@plastic-hub.com
    +
    diff --git a/packages/osrl/examples/library/osr/other_products.osr b/packages/osrl/examples/library/osr/other_products.osr new file mode 100644 index 00000000..0b87ed16 --- /dev/null +++ b/packages/osrl/examples/library/osr/other_products.osr @@ -0,0 +1,25 @@ +
    +

    See our other products

    +
    +[%js%] +const template = readFile('${root}/osr/bazar/other_item.html'); +let product = store.product; +let all = config.all.filter((p)=>{ + return p.slug !== product.slug; +}) +const ret = all.map((p)=>{ + const vars = { + ...p, + image: p.image || substitute('${abs_url}/' + p.rel + '/renderings/perspective.jpg',global) + } + return substitute(template,vars); +}) +return ret; +[%endjs%] +
    + +
    diff --git a/packages/osrl/examples/library/osr/package.json b/packages/osrl/examples/library/osr/package.json new file mode 100644 index 00000000..1a808bcd --- /dev/null +++ b/packages/osrl/examples/library/osr/package.json @@ -0,0 +1,11 @@ +{ + "name": "osr", + "version": "1.0.0", + "description": "", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "author": "", + "license": "ISC" +} diff --git a/packages/osrl/examples/library/osr/plugins/cache.js b/packages/osrl/examples/library/osr/plugins/cache.js new file mode 100644 index 00000000..9d956205 --- /dev/null +++ b/packages/osrl/examples/library/osr/plugins/cache.js @@ -0,0 +1,3 @@ +module.exports = { + +}; \ No newline at end of file diff --git a/packages/osrl/examples/library/osr/plugins/html.js b/packages/osrl/examples/library/osr/plugins/html.js new file mode 100644 index 00000000..02619265 --- /dev/null +++ b/packages/osrl/examples/library/osr/plugins/html.js @@ -0,0 +1,58 @@ +const path = require('path'); +const proc = require('process'); +console.log('cwd ' + proc.cwd()) + +// const c = require('@plastichub/osrl/library') + +const context = {}// require('@plastichub/osrl/library').getContext(); + +const link = (name, link, _class) => `${name}`; +const wrap = (content) => ` +
    +
    + ${content} +
    +
    +`; + +const image = (src, link, style) => ``; + +const item = (content, style = 'border-color: #c5c5c5;width: 300px;display: inline-block', title) => + `
    + ${content}
    +
    ${title||''}
    +
    `; + +const styles = { + thumb: 'border:none; width:200px;max-height:200px' +}; + +const center_caption = (el = 'h5', text) => `<${el} style="text-align:center">${text}`; + +const thumbs = (url, folder) => { + folder = path.resolve(folder); + images = []; + /* + let images = context.fs.images(folder, { + absolute: false + }); + */ + images = images.map((i) => item(image(`${url}/${i}`), 'border:none; width:200px;max-height:200px')); + images = wrap(images.join('\n')); + return images; +} +module.exports = { + html: { + link: link, + caption: { + center: center_caption + }, + container: { + wrap: wrap, + item: item + }, + image: image, + styles: styles, + thumbs: thumbs + } +}; \ No newline at end of file diff --git a/packages/osrl/examples/library/osr/plugins/instagram.js b/packages/osrl/examples/library/osr/plugins/instagram.js new file mode 100644 index 00000000..607a72a5 --- /dev/null +++ b/packages/osrl/examples/library/osr/plugins/instagram.js @@ -0,0 +1,59 @@ +const url = require('url'); +const path = require('path'); +process.on('unhandledRejection', (reason) => { + console.error('Unhandled rejection, reason: ', reason); + debugger; +}); +const images = (user, password, context) => { + return new Promise((resolve, reject) => { + context.ig.feed(user, password).then((f) => { + f = f.feed.filter((p)=>{ + return p.media_type !==2; + }); + let ret = f.map((p) => { + try { + const media = p.carousel_media ? p.carousel_media[0] : { + image_versions2: p.image_versions2 + }; + if (media) { + const version = media.image_versions2.candidates[1] ? media.image_versions2.candidates[1] : media.image_versions2.candidates[0]; + return { + image: version.url, + url: p.code + } + } + } catch (e) { + debugger; + } + }); + context.BPromise.resolve(ret).map((i) => { + const parts = url.parse(i.image); + const fileName = context.fs.path.basename(parts.pathname); + const cacheDir = context.fs.path.resolve(`${context.CACHE}`); + const cacheFile = context.fs.path.resolve(`${cacheDir}/${fileName}`); + if (context.fs.exists(cacheFile)) { + return cacheFile; + } else { + return context.download(i.image, cacheDir); + } + }, { + concurrency: 1 + }).then(() => { + ret = ret.map((i) => { + const parts = url.parse(i.image); + const fileName = context.fs.path.basename(parts.pathname); + return { + path: `${context.CACHE_URL}/${fileName}`, + url : i.url + } + }); + resolve(ret); + }); + }); + }); +} +module.exports = { + instagram: { + images: images + } +}; \ No newline at end of file diff --git a/packages/osrl/examples/library/osr/plugins/magento.js b/packages/osrl/examples/library/osr/plugins/magento.js new file mode 100644 index 00000000..2885dd62 --- /dev/null +++ b/packages/osrl/examples/library/osr/plugins/magento.js @@ -0,0 +1,15 @@ +const parts = (user, password, url, category, context) => { + return new Promise((resolve, reject) => { + context.Magento.Magento.init(url, user, password).then(() => { + const productsAPI = new context.Magento.API.CatalogProductRepositoryV1Api(context.Magento.Magento.apiConfig); + productsAPI.catalogProductRepositoryV1GetListGet('category_id', "" + category).then((products) => { + resolve(products.items); + }) + }); + }); +} +module.exports = { + magento: { + parts: parts + } +}; \ No newline at end of file diff --git a/packages/osrl/examples/library/osr/plugins/package.json b/packages/osrl/examples/library/osr/plugins/package.json new file mode 100644 index 00000000..e36c6892 --- /dev/null +++ b/packages/osrl/examples/library/osr/plugins/package.json @@ -0,0 +1,11 @@ +{ + "name": "plugins", + "version": "1.0.0", + "description": "", + "main": "cache.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "author": "", + "license": "ISC" +} diff --git a/packages/osrl/examples/library/osr/product.osr b/packages/osrl/examples/library/osr/product.osr new file mode 100644 index 00000000..52ddd9e1 --- /dev/null +++ b/packages/osrl/examples/library/osr/product.osr @@ -0,0 +1,9 @@ +[% include "product_header_jekyll.osr" %] + +[% if config.show.badges %] + {% include product_badges.html %} +[%endif%] + +[% if config.show.authors %] +[% include "authors.osr" authors:product.authors showHeader:true %] +[%endif%] diff --git a/packages/osrl/examples/library/osr/product_debug.osr b/packages/osrl/examples/library/osr/product_debug.osr new file mode 100644 index 00000000..f1db6cc9 --- /dev/null +++ b/packages/osrl/examples/library/osr/product_debug.osr @@ -0,0 +1,6 @@ +## Product +[% js %] + if(debug){ + return "
    " + prettyJSON(store.product) + "
    "; + } +[%endjs%] diff --git a/packages/osrl/examples/library/osr/product_forum.osr b/packages/osrl/examples/library/osr/product_forum.osr new file mode 100644 index 00000000..d1990202 --- /dev/null +++ b/packages/osrl/examples/library/osr/product_forum.osr @@ -0,0 +1,25 @@ +[%js%] +try{ + return new Promise((resolve, reject) => { + const d = new Discourse.Discourser({ + host: config.discourse.host, + key: config.discourse.key, + username: config.discourse.username, + rateLimitConcurrency: 1 + }); + d.getTopicItemsOfCategories([category]).then((posts) => { + if(!posts.length){ + return ''; + } + posts = posts.map((p)=>{ + const url = `${config.discourse.host}/t/${p.id}`; + const title = `${p.fancy_title}`; + return `${title}
    `; + }).join('\n'); + resolve(posts); + }); + }); +}catch(e){ + debugger; +} +[%endjs%] diff --git a/packages/osrl/examples/library/osr/product_header_jekyll.osr b/packages/osrl/examples/library/osr/product_header_jekyll.osr new file mode 100644 index 00000000..5777baa5 --- /dev/null +++ b/packages/osrl/examples/library/osr/product_header_jekyll.osr @@ -0,0 +1,97 @@ +[% js foo=2 %] +[%endjs%] +[% capture config %][% js %] +const globalVariables = readJSON('${root}/osr/global.json'); +addGlobal({config:globalVariables}); +return globalVariables; +[%endjs%][% endcapture %] +[% capture product %][% js %] + + let globalVariables = readJSON('${root}/osr/global.json'); + let localVariables = readJSON('${PRODUCT_ROOT}/config.json'); + let localYAML = readFile('${PRODUCT_ROOT}/config.yaml'); + + let defaultsYAML = fs.findUp.sync('defaults.yaml', { + cwd:PRODUCT_ROOT, + stopAt:root + }); + + if(defaultsYAML){ + defaultsYAML = readFile(defaultsYAML).trim(); + localYAML = `${defaultsYAML}\n${localYAML}`; + } + + let defaultsJSON = fs.findUp.sync('defaults.json', { + cwd:PRODUCT_ROOT, + stopAt:root + }); + + if(defaultsJSON){ + defaultsJSON = readJSON(defaultsJSON); + localVariables = { + ...defaultsJSON, + ...localVariables + } + } + + + let allVariables = { + ...localVariables, + ...globalVariables, + ...scope + } + let all = substitute(JSON.stringify(allVariables,null,2),allVariables); + allVariables = JSON.parse(all); + resolveConfig(allVariables); + return allVariables; + +[%endjs%][% endcapture %] +--- +[% js %] +let globalVariables = readJSON('${root}/osr/global.json'); +resolveConfig(globalVariables); +addGlobal(globalVariables); +let localVariables = readJSON('${PRODUCT_ROOT}/config.json'); +let localYAML = readFile('${PRODUCT_ROOT}/config.yaml'); + +let defaultsYAML = fs.findUp.sync('defaults.yaml', { + cwd:PRODUCT_ROOT, + stopAt:root +}); + +if(defaultsYAML){ + defaultsYAML = readFile(defaultsYAML).trim(); + localYAML = `${defaultsYAML}\n${localYAML}`; +} + +let defaultsJSON = fs.findUp.sync('defaults.json', { + cwd:PRODUCT_ROOT, + stopAt:root +}); + +if(defaultsJSON){ + defaultsJSON = readJSON(defaultsJSON); + localVariables = { + ...defaultsJSON, + ...localVariables + } +} +localVariables['rel']=product.replace('products/',''); +localVariables['image']='${abs_url}/${product_rel}/renderings/perspective.jpg'; +let allVariables = { + ...localVariables, + ...globalVariables, + ...scope + +} + +let all = substitute(JSON.stringify(allVariables, null, 2), allVariables); +allVariables = JSON.parse(all); +resolveConfig(allVariables); +store.product = allVariables; +addGlobal(allVariables); +register('product', allVariables); +const yaml = substitute(localYAML, allVariables); +return (YAML.stringify(allVariables) + yaml).trim(); +[%endjs%] +--- diff --git a/packages/osrl/examples/library/osr/product_howtos.osr b/packages/osrl/examples/library/osr/product_howtos.osr new file mode 100644 index 00000000..79207c4b --- /dev/null +++ b/packages/osrl/examples/library/osr/product_howtos.osr @@ -0,0 +1,12 @@ +[%js%] +if(store.product.howtos && store.product.howtos.length){ + return store.product.howtos.map((i)=>{ + return i + }).join('\n
    '); + /* + const t = html.thumbs(`${abs_url}/${product}/media/products`,`${PRODUCT_ROOT}/media/products`); + return `
    Products done with ${store.product.name}
    + ${t}`; + */ +} +[%endjs%] diff --git a/packages/osrl/examples/library/osr/product_overview_drawings.osr b/packages/osrl/examples/library/osr/product_overview_drawings.osr new file mode 100644 index 00000000..cb8fc996 --- /dev/null +++ b/packages/osrl/examples/library/osr/product_overview_drawings.osr @@ -0,0 +1,29 @@ +
    +[% if product.showDimensions !=false %] +

    Dimensions

    + +

    + +

    +
    +
    +[% endif %] + +[% if product.showParts !=false %] +
    +
    +
    +

    Parts

    + +

    + +

    +
    +
    +
    +

    [% include 'product_parts.osr' %]

    +
    +
    +
    +
    +[% endif %] diff --git a/packages/osrl/examples/library/osr/product_parts.osr b/packages/osrl/examples/library/osr/product_parts.osr new file mode 100644 index 00000000..46f60401 --- /dev/null +++ b/packages/osrl/examples/library/osr/product_parts.osr @@ -0,0 +1,7 @@ +[%js%] +let p = PRODUCT_ROOT; +const _path = path.resolve(PRODUCT_ROOT + './parts.xlsx'); +const data = xlsx.parse(_path); +data[0].data = data[0].data.filter((d) => !!d.length); +return md2html(markdownTable(data[0].data)); +[%endjs%] diff --git a/packages/osrl/examples/library/osr/product_resources.osr b/packages/osrl/examples/library/osr/product_resources.osr new file mode 100644 index 00000000..95f55427 --- /dev/null +++ b/packages/osrl/examples/library/osr/product_resources.osr @@ -0,0 +1,50 @@ +### Resources + +[% if product.forum %] +- [Forum]([[product.forum]]) +[% endif %] +[% if product.download %] +- [Download]([[product.download]]) +[% endif %] +[% if product.firmware %] +- [Firmware]([[product.firmware]]) +[% endif %] + +[% if product.Preview3d %] +[% if product.edrawings %] +- [3D-Preview]([[product.edrawings]]) +[% else %] +- [3D-Preview]([[product.abs_url]]/[[product.product_rel]]/resources/edrawings.html) +[% endif %] +- [Source Code Reposity]([[GIT_REPO]]/src/branch/master/machines/[[product.rel]]) +[%endif%] +[% if product.hasSpec %] +- [Specification PDF]([[product.abs_url]]/[[product.product_rel]]/resources/spec.pdf) +[%endif%] + +[% if product.howtoSection %] +- [How-tos]([[product.howtoSection]]) +[%endif%] + +[% if product.library %] +- [Library]([[product.library]]) +[%endif%] + +
    +[% if config.show.wiki %] + [% if product.wiki_articles %] +

    Wiki Articles

    +[% include "product_wiki.osr" category:product.wiki_articles %] + [% else %] + [% endif %] +[% else %] +[% endif %] + +[% if config.show.forum %] + [% if product.forumCategory %] +

    Forum Posts

    +[% include "product_forum.osr" category:product.forumCategory %] + [% endif %] +[% endif %] + +[% include "extra_resources.md" %] diff --git a/packages/osrl/examples/library/osr/product_showreel.osr b/packages/osrl/examples/library/osr/product_showreel.osr new file mode 100644 index 00000000..7bd0337a --- /dev/null +++ b/packages/osrl/examples/library/osr/product_showreel.osr @@ -0,0 +1,7 @@ +[%js%] +if(fs.images(`${PRODUCT_ROOT}/media/products`).length){ + const t = html.thumbs(`${abs_url}/${product}/media/products`,`${PRODUCT_ROOT}/media/products`); + return `

    Products done with ${store.product.name}

    + ${t}`; +} +[%endjs%] diff --git a/packages/osrl/examples/library/osr/product_specs.osr b/packages/osrl/examples/library/osr/product_specs.osr new file mode 100644 index 00000000..5bcf142e --- /dev/null +++ b/packages/osrl/examples/library/osr/product_specs.osr @@ -0,0 +1,14 @@ +[%js%] +let p = PRODUCT_ROOT; +const _path = path.resolve(PRODUCT_ROOT + './specs.xlsx'); +let data = xlsx.parse(_path); +data[0].data = data[0].data.filter((d)=>d.length >0); +data = markdownTable(data[0].data); +if(html){ + return md2html(data); +}else{ + + data; + +} +[%endjs%] diff --git a/packages/osrl/examples/library/osr/product_variables.osr b/packages/osrl/examples/library/osr/product_variables.osr new file mode 100644 index 00000000..2e462aaa --- /dev/null +++ b/packages/osrl/examples/library/osr/product_variables.osr @@ -0,0 +1,55 @@ +[% capture config %][% js %] +const globalVariables = readJSON('${root}/osr/global.json'); +addGlobal({config:globalVariables}); +return globalVariables; +[%endjs%][% endcapture %] + +[% capture product %][% js %] + + let globalVariables = readJSON('${root}/osr/global.json'); + let localVariables = readJSON('${PRODUCT_ROOT}/config.json'); + localVariables['image']='${product_rel}/renderings/perspective.jpg'; + localVariables['rel']=product.replace('products/',''); + localVariables['sidebar'] = { + nav: "machines" + }; + + let localYAML = readFile('${PRODUCT_ROOT}/config.yaml'); + + let defaultsYAML = fs.findUp.sync('defaults.yaml', { + cwd:PRODUCT_ROOT, + stopAt:root + }); + + if(defaultsYAML){ + defaultsYAML = readFile(defaultsYAML).trim(); + localYAML = `${defaultsYAML}\n${localYAML}`; + } + + let defaultsJSON = fs.findUp.sync('defaults.json', { + cwd:PRODUCT_ROOT, + stopAt:root + }); + + if(defaultsJSON){ + defaultsJSON = readJSON(defaultsJSON); + localVariables = { + ...defaultsJSON, + ...localVariables + } + } + + + let allVariables = { + ...localVariables, + ...globalVariables, + ...scope + } + allVariables.product_rel = product; + let all = substitute(JSON.stringify(allVariables,null,2),allVariables); + allVariables = JSON.parse(all); + resolveConfig(allVariables); + addGlobal({product:allVariables}); + return allVariables; + +[%endjs%][% endcapture %] diff --git a/packages/osrl/examples/library/osr/product_wiki.osr b/packages/osrl/examples/library/osr/product_wiki.osr new file mode 100644 index 00000000..4987324c --- /dev/null +++ b/packages/osrl/examples/library/osr/product_wiki.osr @@ -0,0 +1,24 @@ +[%js%] +try{ + return new Promise((resolve, reject) => { + const d = new Discourse.Discourser({ + host: config.discourse.host, + key: config.discourse.key, + username: config.discourse.username, + rateLimitConcurrency: 1 + }); + d.getTopicItemsOfCategories([category]).then((posts) => { + let content = "
      " + posts = posts.map((p)=>{ + const url = `${config.discourse.host}/t/${p.id}`; + const title = `${p.fancy_title}`; + return `
    • ${title}
    • `; + }).join('\n'); + content += posts + "
    "; + resolve(content); + }); + }); +}catch(e){ + debugger; +} +[%endjs%] diff --git a/packages/osrl/examples/library/osr/products.json b/packages/osrl/examples/library/osr/products.json new file mode 100644 index 00000000..1f6f17ab --- /dev/null +++ b/packages/osrl/examples/library/osr/products.json @@ -0,0 +1,2507 @@ +[ + { + "product_id": "19", + "product": "Hand Cranked Shredder", + "product_type": "P", + "parent_product_id": "0", + "product_code": "", + "status": "A", + "company_id": "1", + "list_price": "0.00", + "amount": "1", + "weight": "0.000", + "length": "0", + "width": "0", + "height": "0", + "shipping_freight": "0.00", + "low_avail_limit": "0", + "timestamp": "1644428621", + "updated_timestamp": "1644428621", + "usergroup_ids": "0", + "is_edp": "N", + "edp_shipping": "N", + "unlimited_download": "N", + "tracking": "D", + "free_shipping": "N", + "zero_price_action": "R", + "is_pbp": "Y", + "is_op": "N", + "is_oper": "N", + "is_returnable": "Y", + "return_period": "10", + "avail_since": "0", + "out_of_stock_actions": "N", + "localization": "", + "min_qty": "0", + "max_qty": "0", + "qty_step": "0", + "list_qty_count": "0", + "tax_ids": "", + "age_verification": "N", + "age_limit": "0", + "options_type": "P", + "exceptions_type": "F", + "details_layout": "default", + "shipping_params": "a:5:{s:16:\"min_items_in_box\";i:0;s:16:\"max_items_in_box\";i:0;s:10:\"box_length\";i:0;s:9:\"box_width\";i:0;s:10:\"box_height\";i:0;}", + "facebook_obj_type": "", + "buy_now_url": "", + "price": "1150.000000", + "category_ids": [ + 19 + ], + "seo_name": "hand-cranked-shredder", + "seo_path": "6/19", + "main_category": 19, + "options_type_raw": null, + "exceptions_type_raw": null, + "tracking_raw": null, + "zero_price_action_raw": null, + "min_qty_raw": null, + "max_qty_raw": null, + "qty_step_raw": null, + "list_qty_count_raw": null, + "details_layout_raw": "default", + "variation_features": [], + "main_pair": { + "pair_id": "110", + "image_id": "0", + "detailed_id": "8726", + "position": "0", + "object_id": "19", + "object_type": "product", + "detailed": { + "object_id": "19", + "object_type": "product", + "type": "M", + "image_path": "https://shop.osr-plastic.org/images/detailed/8/DSC00549.JPG", + "alt": "", + "image_x": "1080", + "image_y": "1364", + "http_image_path": "http://shop.osr-plastic.org/images/detailed/8/DSC00549.JPG", + "https_image_path": "https://shop.osr-plastic.org/images/detailed/8/DSC00549.JPG", + "absolute_path": "/var/www/vhosts/osr-plastic.org/shop.osr-plastic.org/images/detailed/8/DSC00549.JPG", + "relative_path": "detailed/8/DSC00549.JPG", + "is_high_res": false + } + }, + "image_pairs": { + "111": { + "pair_id": "111", + "image_id": "0", + "detailed_id": "8727", + "position": "1", + "object_id": "19", + "object_type": "product", + "detailed": { + "object_id": "19", + "object_type": "product", + "type": "A", + "image_path": "https://shop.osr-plastic.org/images/detailed/8/hand-cranked-shredder-111.JPG", + "alt": "", + "image_x": "1394", + "image_y": "1080", + "http_image_path": "http://shop.osr-plastic.org/images/detailed/8/hand-cranked-shredder-111.JPG", + "https_image_path": "https://shop.osr-plastic.org/images/detailed/8/hand-cranked-shredder-111.JPG", + "absolute_path": "/var/www/vhosts/osr-plastic.org/shop.osr-plastic.org/images/detailed/8/hand-cranked-shredder-111.JPG", + "relative_path": "detailed/8/hand-cranked-shredder-111.JPG", + "is_high_res": false + } + }, + "112": { + "pair_id": "112", + "image_id": "0", + "detailed_id": "8728", + "position": "2", + "object_id": "19", + "object_type": "product", + "detailed": { + "object_id": "19", + "object_type": "product", + "type": "A", + "image_path": "https://shop.osr-plastic.org/images/detailed/8/hand-cranked-shredder-112.JPG", + "alt": "", + "image_x": "1383", + "image_y": "1080", + "http_image_path": "http://shop.osr-plastic.org/images/detailed/8/hand-cranked-shredder-112.JPG", + "https_image_path": "https://shop.osr-plastic.org/images/detailed/8/hand-cranked-shredder-112.JPG", + "absolute_path": "/var/www/vhosts/osr-plastic.org/shop.osr-plastic.org/images/detailed/8/hand-cranked-shredder-112.JPG", + "relative_path": "detailed/8/hand-cranked-shredder-112.JPG", + "is_high_res": false + } + } + }, + "base_price": "1150.000000", + "selected_options": [], + "has_options": false, + "product_options": [], + "discounts": { + "A": 0, + "P": 0 + }, + "product_features": [], + "qty_content": [], + "premoderation_reason": "" + }, + { + "product_id": "18", + "product": "Grinder - Idefix", + "product_type": "P", + "parent_product_id": "0", + "product_code": "", + "status": "A", + "company_id": "1", + "list_price": "0.00", + "amount": "1", + "weight": "0.000", + "length": "0", + "width": "0", + "height": "0", + "shipping_freight": "0.00", + "low_avail_limit": "0", + "timestamp": "1644427431", + "updated_timestamp": "1644427431", + "usergroup_ids": "0", + "is_edp": "N", + "edp_shipping": "N", + "unlimited_download": "N", + "tracking": "D", + "free_shipping": "N", + "zero_price_action": "R", + "is_pbp": "Y", + "is_op": "N", + "is_oper": "N", + "is_returnable": "Y", + "return_period": "10", + "avail_since": "0", + "out_of_stock_actions": "N", + "localization": "", + "min_qty": "0", + "max_qty": "0", + "qty_step": "0", + "list_qty_count": "0", + "tax_ids": "", + "age_verification": "N", + "age_limit": "0", + "options_type": "P", + "exceptions_type": "F", + "details_layout": "default", + "shipping_params": "a:5:{s:16:\"min_items_in_box\";i:0;s:16:\"max_items_in_box\";i:0;s:10:\"box_length\";i:0;s:9:\"box_width\";i:0;s:10:\"box_height\";i:0;}", + "facebook_obj_type": "", + "buy_now_url": "", + "price": "2445.000000", + "category_ids": [ + 6 + ], + "seo_name": "grinder-idefix", + "seo_path": "6", + "main_category": 6, + "options_type_raw": null, + "exceptions_type_raw": null, + "tracking_raw": null, + "zero_price_action_raw": null, + "min_qty_raw": null, + "max_qty_raw": null, + "qty_step_raw": null, + "list_qty_count_raw": null, + "details_layout_raw": "default", + "variation_features": [], + "main_pair": { + "pair_id": "102", + "image_id": "0", + "detailed_id": "8718", + "position": "0", + "object_id": "18", + "object_type": "product", + "detailed": { + "object_id": "18", + "object_type": "product", + "type": "M", + "image_path": "https://shop.osr-plastic.org/images/detailed/8/perspective_qv9o-6p.JPG", + "alt": "", + "image_x": "1569", + "image_y": "1255", + "http_image_path": "http://shop.osr-plastic.org/images/detailed/8/perspective_qv9o-6p.JPG", + "https_image_path": "https://shop.osr-plastic.org/images/detailed/8/perspective_qv9o-6p.JPG", + "absolute_path": "/var/www/vhosts/osr-plastic.org/shop.osr-plastic.org/images/detailed/8/perspective_qv9o-6p.JPG", + "relative_path": "detailed/8/perspective_qv9o-6p.JPG", + "is_high_res": false + } + }, + "image_pairs": { + "103": { + "pair_id": "103", + "image_id": "0", + "detailed_id": "8719", + "position": "1", + "object_id": "18", + "object_type": "product", + "detailed": { + "object_id": "18", + "object_type": "product", + "type": "A", + "image_path": "https://shop.osr-plastic.org/images/detailed/8/grinder-idefix-103.JPG", + "alt": "", + "image_x": "1984", + "image_y": "2976", + "http_image_path": "http://shop.osr-plastic.org/images/detailed/8/grinder-idefix-103.JPG", + "https_image_path": "https://shop.osr-plastic.org/images/detailed/8/grinder-idefix-103.JPG", + "absolute_path": "/var/www/vhosts/osr-plastic.org/shop.osr-plastic.org/images/detailed/8/grinder-idefix-103.JPG", + "relative_path": "detailed/8/grinder-idefix-103.JPG", + "is_high_res": false + } + }, + "104": { + "pair_id": "104", + "image_id": "0", + "detailed_id": "8720", + "position": "2", + "object_id": "18", + "object_type": "product", + "detailed": { + "object_id": "18", + "object_type": "product", + "type": "A", + "image_path": "https://shop.osr-plastic.org/images/detailed/8/grinder-idefix-104.jpg", + "alt": "", + "image_x": "1569", + "image_y": "1255", + "http_image_path": "http://shop.osr-plastic.org/images/detailed/8/grinder-idefix-104.jpg", + "https_image_path": "https://shop.osr-plastic.org/images/detailed/8/grinder-idefix-104.jpg", + "absolute_path": "/var/www/vhosts/osr-plastic.org/shop.osr-plastic.org/images/detailed/8/grinder-idefix-104.jpg", + "relative_path": "detailed/8/grinder-idefix-104.jpg", + "is_high_res": false + } + }, + "105": { + "pair_id": "105", + "image_id": "0", + "detailed_id": "8721", + "position": "3", + "object_id": "18", + "object_type": "product", + "detailed": { + "object_id": "18", + "object_type": "product", + "type": "A", + "image_path": "https://shop.osr-plastic.org/images/detailed/8/grinder-idefix-105.JPG", + "alt": "", + "image_x": "2976", + "image_y": "1984", + "http_image_path": "http://shop.osr-plastic.org/images/detailed/8/grinder-idefix-105.JPG", + "https_image_path": "https://shop.osr-plastic.org/images/detailed/8/grinder-idefix-105.JPG", + "absolute_path": "/var/www/vhosts/osr-plastic.org/shop.osr-plastic.org/images/detailed/8/grinder-idefix-105.JPG", + "relative_path": "detailed/8/grinder-idefix-105.JPG", + "is_high_res": false + } + }, + "106": { + "pair_id": "106", + "image_id": "0", + "detailed_id": "8722", + "position": "4", + "object_id": "18", + "object_type": "product", + "detailed": { + "object_id": "18", + "object_type": "product", + "type": "A", + "image_path": "https://shop.osr-plastic.org/images/detailed/8/grinder-idefix-106.JPG", + "alt": "", + "image_x": "1984", + "image_y": "2976", + "http_image_path": "http://shop.osr-plastic.org/images/detailed/8/grinder-idefix-106.JPG", + "https_image_path": "https://shop.osr-plastic.org/images/detailed/8/grinder-idefix-106.JPG", + "absolute_path": "/var/www/vhosts/osr-plastic.org/shop.osr-plastic.org/images/detailed/8/grinder-idefix-106.JPG", + "relative_path": "detailed/8/grinder-idefix-106.JPG", + "is_high_res": false + } + } + }, + "base_price": "2445.000000", + "selected_options": [], + "has_options": false, + "product_options": [], + "discounts": { + "A": 0, + "P": 0 + }, + "product_features": [], + "qty_content": [], + "premoderation_reason": "" + }, + { + "product_id": "17", + "product": "Injection Barrel - Kit", + "product_type": "P", + "parent_product_id": "0", + "product_code": "", + "status": "A", + "company_id": "1", + "list_price": "0.00", + "amount": "1", + "weight": "0.000", + "length": "0", + "width": "0", + "height": "0", + "shipping_freight": "0.00", + "low_avail_limit": "0", + "timestamp": "1644421975", + "updated_timestamp": "1644423631", + "usergroup_ids": "0", + "is_edp": "N", + "edp_shipping": "N", + "unlimited_download": "N", + "tracking": "D", + "free_shipping": "N", + "zero_price_action": "R", + "is_pbp": "Y", + "is_op": "N", + "is_oper": "N", + "is_returnable": "Y", + "return_period": "10", + "avail_since": "0", + "out_of_stock_actions": "N", + "localization": "", + "min_qty": "0", + "max_qty": "0", + "qty_step": "0", + "list_qty_count": "0", + "tax_ids": "", + "age_verification": "N", + "age_limit": "0", + "options_type": "P", + "exceptions_type": "F", + "details_layout": "default", + "shipping_params": "a:5:{s:16:\"min_items_in_box\";i:0;s:16:\"max_items_in_box\";i:0;s:10:\"box_length\";i:0;s:9:\"box_width\";i:0;s:10:\"box_height\";i:0;}", + "facebook_obj_type": "", + "buy_now_url": "", + "price": "950.000000", + "category_ids": [ + 8 + ], + "seo_name": "injection-barrel-kit", + "seo_path": "7/8", + "main_category": 8, + "options_type_raw": null, + "exceptions_type_raw": null, + "tracking_raw": null, + "zero_price_action_raw": null, + "min_qty_raw": null, + "max_qty_raw": null, + "qty_step_raw": null, + "list_qty_count_raw": null, + "details_layout_raw": "default", + "variation_features": [], + "main_pair": { + "pair_id": "96", + "image_id": "0", + "detailed_id": "8712", + "position": "0", + "object_id": "17", + "object_type": "product", + "detailed": { + "object_id": "17", + "object_type": "product", + "type": "M", + "image_path": "https://shop.osr-plastic.org/images/detailed/8/DSC00737.JPG", + "alt": "", + "image_x": "4000", + "image_y": "4000", + "http_image_path": "http://shop.osr-plastic.org/images/detailed/8/DSC00737.JPG", + "https_image_path": "https://shop.osr-plastic.org/images/detailed/8/DSC00737.JPG", + "absolute_path": "/var/www/vhosts/osr-plastic.org/shop.osr-plastic.org/images/detailed/8/DSC00737.JPG", + "relative_path": "detailed/8/DSC00737.JPG", + "is_high_res": false + } + }, + "image_pairs": { + "97": { + "pair_id": "97", + "image_id": "0", + "detailed_id": "8713", + "position": "1", + "object_id": "17", + "object_type": "product", + "detailed": { + "object_id": "17", + "object_type": "product", + "type": "A", + "image_path": "https://shop.osr-plastic.org/images/detailed/8/injection-barrel-kit-97.jpg", + "alt": "", + "image_x": "1771", + "image_y": "1183", + "http_image_path": "http://shop.osr-plastic.org/images/detailed/8/injection-barrel-kit-97.jpg", + "https_image_path": "https://shop.osr-plastic.org/images/detailed/8/injection-barrel-kit-97.jpg", + "absolute_path": "/var/www/vhosts/osr-plastic.org/shop.osr-plastic.org/images/detailed/8/injection-barrel-kit-97.jpg", + "relative_path": "detailed/8/injection-barrel-kit-97.jpg", + "is_high_res": false + } + }, + "98": { + "pair_id": "98", + "image_id": "0", + "detailed_id": "8714", + "position": "2", + "object_id": "17", + "object_type": "product", + "detailed": { + "object_id": "17", + "object_type": "product", + "type": "A", + "image_path": "https://shop.osr-plastic.org/images/detailed/8/injection-barrel-kit-98.JPG", + "alt": "", + "image_x": "1919", + "image_y": "1080", + "http_image_path": "http://shop.osr-plastic.org/images/detailed/8/injection-barrel-kit-98.JPG", + "https_image_path": "https://shop.osr-plastic.org/images/detailed/8/injection-barrel-kit-98.JPG", + "absolute_path": "/var/www/vhosts/osr-plastic.org/shop.osr-plastic.org/images/detailed/8/injection-barrel-kit-98.JPG", + "relative_path": "detailed/8/injection-barrel-kit-98.JPG", + "is_high_res": false + } + }, + "99": { + "pair_id": "99", + "image_id": "0", + "detailed_id": "8715", + "position": "3", + "object_id": "17", + "object_type": "product", + "detailed": { + "object_id": "17", + "object_type": "product", + "type": "A", + "image_path": "https://shop.osr-plastic.org/images/detailed/8/injection-barrel-kit-99.JPG", + "alt": "", + "image_x": "838", + "image_y": "851", + "http_image_path": "http://shop.osr-plastic.org/images/detailed/8/injection-barrel-kit-99.JPG", + "https_image_path": "https://shop.osr-plastic.org/images/detailed/8/injection-barrel-kit-99.JPG", + "absolute_path": "/var/www/vhosts/osr-plastic.org/shop.osr-plastic.org/images/detailed/8/injection-barrel-kit-99.JPG", + "relative_path": "detailed/8/injection-barrel-kit-99.JPG", + "is_high_res": false + } + } + }, + "base_price": "950.000000", + "selected_options": [], + "has_options": false, + "product_options": [], + "discounts": { + "A": 0, + "P": 0 + }, + "product_features": [], + "qty_content": [], + "premoderation_reason": "" + }, + { + "product_id": "16", + "product": "Extrusion - v4.5 - Lydia - Kit", + "product_type": "P", + "parent_product_id": "0", + "product_code": "", + "status": "A", + "company_id": "1", + "list_price": "0.00", + "amount": "1", + "weight": "0.000", + "length": "0", + "width": "0", + "height": "0", + "shipping_freight": "0.00", + "low_avail_limit": "0", + "timestamp": "1644420782", + "updated_timestamp": "1644424676", + "usergroup_ids": "0", + "is_edp": "N", + "edp_shipping": "N", + "unlimited_download": "N", + "tracking": "D", + "free_shipping": "N", + "zero_price_action": "R", + "is_pbp": "Y", + "is_op": "N", + "is_oper": "N", + "is_returnable": "Y", + "return_period": "10", + "avail_since": "0", + "out_of_stock_actions": "N", + "localization": "", + "min_qty": "0", + "max_qty": "0", + "qty_step": "0", + "list_qty_count": "0", + "tax_ids": "", + "age_verification": "N", + "age_limit": "0", + "options_type": "P", + "exceptions_type": "F", + "details_layout": "default", + "shipping_params": "a:5:{s:16:\"min_items_in_box\";i:0;s:16:\"max_items_in_box\";i:0;s:10:\"box_length\";i:0;s:9:\"box_width\";i:0;s:10:\"box_height\";i:0;}", + "facebook_obj_type": "", + "buy_now_url": "", + "price": "750.000000", + "category_ids": [ + 12 + ], + "seo_name": "extrusion-v4.5-lydia-kit", + "seo_path": "11/12", + "main_category": 12, + "options_type_raw": null, + "exceptions_type_raw": null, + "tracking_raw": null, + "zero_price_action_raw": null, + "min_qty_raw": null, + "max_qty_raw": null, + "qty_step_raw": null, + "list_qty_count_raw": null, + "details_layout_raw": "default", + "variation_features": [], + "main_pair": { + "pair_id": "95", + "image_id": "0", + "detailed_id": "8711", + "position": "0", + "object_id": "16", + "object_type": "product", + "detailed": { + "object_id": "16", + "object_type": "product", + "type": "M", + "image_path": "https://shop.osr-plastic.org/images/detailed/8/latest.jpg", + "alt": "", + "image_x": "1617", + "image_y": "1080", + "http_image_path": "http://shop.osr-plastic.org/images/detailed/8/latest.jpg", + "https_image_path": "https://shop.osr-plastic.org/images/detailed/8/latest.jpg", + "absolute_path": "/var/www/vhosts/osr-plastic.org/shop.osr-plastic.org/images/detailed/8/latest.jpg", + "relative_path": "detailed/8/latest.jpg", + "is_high_res": false + } + }, + "image_pairs": { + "100": { + "pair_id": "100", + "image_id": "0", + "detailed_id": "8716", + "position": "1", + "object_id": "16", + "object_type": "product", + "detailed": { + "object_id": "16", + "object_type": "product", + "type": "A", + "image_path": "https://shop.osr-plastic.org/images/detailed/8/extrusion-v4.5-lydia-kit-100.jpg", + "alt": "", + "image_x": "1617", + "image_y": "1080", + "http_image_path": "http://shop.osr-plastic.org/images/detailed/8/extrusion-v4.5-lydia-kit-100.jpg", + "https_image_path": "https://shop.osr-plastic.org/images/detailed/8/extrusion-v4.5-lydia-kit-100.jpg", + "absolute_path": "/var/www/vhosts/osr-plastic.org/shop.osr-plastic.org/images/detailed/8/extrusion-v4.5-lydia-kit-100.jpg", + "relative_path": "detailed/8/extrusion-v4.5-lydia-kit-100.jpg", + "is_high_res": false + } + }, + "101": { + "pair_id": "101", + "image_id": "0", + "detailed_id": "8717", + "position": "2", + "object_id": "16", + "object_type": "product", + "detailed": { + "object_id": "16", + "object_type": "product", + "type": "A", + "image_path": "https://shop.osr-plastic.org/images/detailed/8/extrusion-v4.5-lydia-kit-101.JPG", + "alt": "", + "image_x": "828", + "image_y": "797", + "http_image_path": "http://shop.osr-plastic.org/images/detailed/8/extrusion-v4.5-lydia-kit-101.JPG", + "https_image_path": "https://shop.osr-plastic.org/images/detailed/8/extrusion-v4.5-lydia-kit-101.JPG", + "absolute_path": "/var/www/vhosts/osr-plastic.org/shop.osr-plastic.org/images/detailed/8/extrusion-v4.5-lydia-kit-101.JPG", + "relative_path": "detailed/8/extrusion-v4.5-lydia-kit-101.JPG", + "is_high_res": false + } + } + }, + "base_price": "750.000000", + "selected_options": [], + "has_options": false, + "product_options": [], + "discounts": { + "A": 0, + "P": 0 + }, + "product_features": [], + "qty_content": [], + "premoderation_reason": "" + }, + { + "product_id": "15", + "product": "Extrusion Screw & Barrel - PreciousPlastic v3.0", + "product_type": "P", + "parent_product_id": "0", + "product_code": "", + "status": "A", + "company_id": "1", + "list_price": "0.00", + "amount": "1", + "weight": "0.000", + "length": "0", + "width": "0", + "height": "0", + "shipping_freight": "0.00", + "low_avail_limit": "0", + "timestamp": "1644350492", + "updated_timestamp": "1644350677", + "usergroup_ids": "0", + "is_edp": "N", + "edp_shipping": "N", + "unlimited_download": "N", + "tracking": "D", + "free_shipping": "N", + "zero_price_action": "R", + "is_pbp": "Y", + "is_op": "N", + "is_oper": "N", + "is_returnable": "Y", + "return_period": "10", + "avail_since": "0", + "out_of_stock_actions": "N", + "localization": "", + "min_qty": "0", + "max_qty": "0", + "qty_step": "0", + "list_qty_count": "0", + "tax_ids": "", + "age_verification": "N", + "age_limit": "0", + "options_type": "P", + "exceptions_type": "F", + "details_layout": "default", + "shipping_params": "a:5:{s:16:\"min_items_in_box\";i:0;s:16:\"max_items_in_box\";i:0;s:10:\"box_length\";i:0;s:9:\"box_width\";i:0;s:10:\"box_height\";i:0;}", + "facebook_obj_type": "", + "buy_now_url": "", + "price": "250.000000", + "category_ids": [ + 12 + ], + "seo_name": "extrusion-screw-pp-v3.0", + "seo_path": "11/12", + "main_category": 12, + "options_type_raw": null, + "exceptions_type_raw": null, + "tracking_raw": null, + "zero_price_action_raw": null, + "min_qty_raw": null, + "max_qty_raw": null, + "qty_step_raw": null, + "list_qty_count_raw": null, + "details_layout_raw": "default", + "variation_features": [], + "main_pair": { + "pair_id": "78", + "image_id": "0", + "detailed_id": "8694", + "position": "0", + "object_id": "15", + "object_type": "product", + "detailed": { + "object_id": "15", + "object_type": "product", + "type": "M", + "image_path": "https://shop.osr-plastic.org/images/detailed/8/v3-screw.jpeg", + "alt": "", + "image_x": "745", + "image_y": "450", + "http_image_path": "http://shop.osr-plastic.org/images/detailed/8/v3-screw.jpeg", + "https_image_path": "https://shop.osr-plastic.org/images/detailed/8/v3-screw.jpeg", + "absolute_path": "/var/www/vhosts/osr-plastic.org/shop.osr-plastic.org/images/detailed/8/v3-screw.jpeg", + "relative_path": "detailed/8/v3-screw.jpeg", + "is_high_res": false + } + }, + "image_pairs": { + "79": { + "pair_id": "79", + "image_id": "0", + "detailed_id": "8695", + "position": "1", + "object_id": "15", + "object_type": "product", + "detailed": { + "object_id": "15", + "object_type": "product", + "type": "A", + "image_path": "https://shop.osr-plastic.org/images/detailed/8/extrusion-screw-pp-v3.0-79.png", + "alt": "", + "image_x": "871", + "image_y": "636", + "http_image_path": "http://shop.osr-plastic.org/images/detailed/8/extrusion-screw-pp-v3.0-79.png", + "https_image_path": "https://shop.osr-plastic.org/images/detailed/8/extrusion-screw-pp-v3.0-79.png", + "absolute_path": "/var/www/vhosts/osr-plastic.org/shop.osr-plastic.org/images/detailed/8/extrusion-screw-pp-v3.0-79.png", + "relative_path": "detailed/8/extrusion-screw-pp-v3.0-79.png", + "is_high_res": false + } + }, + "80": { + "pair_id": "80", + "image_id": "0", + "detailed_id": "8696", + "position": "2", + "object_id": "15", + "object_type": "product", + "detailed": { + "object_id": "15", + "object_type": "product", + "type": "A", + "image_path": "https://shop.osr-plastic.org/images/detailed/8/extrusion-screw-pp-v3.0-80.png", + "alt": "", + "image_x": "800", + "image_y": "600", + "http_image_path": "http://shop.osr-plastic.org/images/detailed/8/extrusion-screw-pp-v3.0-80.png", + "https_image_path": "https://shop.osr-plastic.org/images/detailed/8/extrusion-screw-pp-v3.0-80.png", + "absolute_path": "/var/www/vhosts/osr-plastic.org/shop.osr-plastic.org/images/detailed/8/extrusion-screw-pp-v3.0-80.png", + "relative_path": "detailed/8/extrusion-screw-pp-v3.0-80.png", + "is_high_res": false + } + }, + "81": { + "pair_id": "81", + "image_id": "0", + "detailed_id": "8697", + "position": "3", + "object_id": "15", + "object_type": "product", + "detailed": { + "object_id": "15", + "object_type": "product", + "type": "A", + "image_path": "https://shop.osr-plastic.org/images/detailed/8/extrusion-screw-pp-v3.0-81.png", + "alt": "", + "image_x": "800", + "image_y": "405", + "http_image_path": "http://shop.osr-plastic.org/images/detailed/8/extrusion-screw-pp-v3.0-81.png", + "https_image_path": "https://shop.osr-plastic.org/images/detailed/8/extrusion-screw-pp-v3.0-81.png", + "absolute_path": "/var/www/vhosts/osr-plastic.org/shop.osr-plastic.org/images/detailed/8/extrusion-screw-pp-v3.0-81.png", + "relative_path": "detailed/8/extrusion-screw-pp-v3.0-81.png", + "is_high_res": false + } + } + }, + "base_price": "250.000000", + "selected_options": [], + "has_options": false, + "product_options": [], + "discounts": { + "A": 0, + "P": 0 + }, + "product_features": [], + "qty_content": [], + "premoderation_reason": "" + }, + { + "product_id": "14", + "product": "Filament Cooler", + "product_type": "P", + "parent_product_id": "0", + "product_code": "FLM", + "status": "A", + "company_id": "1", + "list_price": "0.00", + "amount": "1", + "weight": "0.000", + "length": "0", + "width": "0", + "height": "0", + "shipping_freight": "0.00", + "low_avail_limit": "0", + "timestamp": "1644343653", + "updated_timestamp": "1644343800", + "usergroup_ids": "0", + "is_edp": "N", + "edp_shipping": "N", + "unlimited_download": "N", + "tracking": "D", + "free_shipping": "N", + "zero_price_action": "R", + "is_pbp": "Y", + "is_op": "N", + "is_oper": "N", + "is_returnable": "Y", + "return_period": "10", + "avail_since": "0", + "out_of_stock_actions": "N", + "localization": "", + "min_qty": "0", + "max_qty": "0", + "qty_step": "0", + "list_qty_count": "0", + "tax_ids": "", + "age_verification": "N", + "age_limit": "0", + "options_type": "P", + "exceptions_type": "F", + "details_layout": "default", + "shipping_params": "a:5:{s:16:\"min_items_in_box\";i:0;s:16:\"max_items_in_box\";i:0;s:10:\"box_length\";i:0;s:9:\"box_width\";i:0;s:10:\"box_height\";i:0;}", + "facebook_obj_type": "", + "buy_now_url": "", + "price": "290.000000", + "category_ids": [ + 12 + ], + "seo_name": "filament-cooler", + "seo_path": "11/12", + "main_category": 12, + "options_type_raw": null, + "exceptions_type_raw": null, + "tracking_raw": null, + "zero_price_action_raw": null, + "min_qty_raw": null, + "max_qty_raw": null, + "qty_step_raw": null, + "list_qty_count_raw": null, + "details_layout_raw": "default", + "variation_features": [], + "main_pair": { + "pair_id": "75", + "image_id": "0", + "detailed_id": "8691", + "position": "0", + "object_id": "14", + "object_type": "product", + "detailed": { + "object_id": "14", + "object_type": "product", + "type": "M", + "image_path": "https://shop.osr-plastic.org/images/detailed/8/perspective_2ayl-wq.jpg", + "alt": "", + "image_x": "1931", + "image_y": "1545", + "http_image_path": "http://shop.osr-plastic.org/images/detailed/8/perspective_2ayl-wq.jpg", + "https_image_path": "https://shop.osr-plastic.org/images/detailed/8/perspective_2ayl-wq.jpg", + "absolute_path": "/var/www/vhosts/osr-plastic.org/shop.osr-plastic.org/images/detailed/8/perspective_2ayl-wq.jpg", + "relative_path": "detailed/8/perspective_2ayl-wq.jpg", + "is_high_res": false + } + }, + "image_pairs": { + "76": { + "pair_id": "76", + "image_id": "0", + "detailed_id": "8692", + "position": "1", + "object_id": "14", + "object_type": "product", + "detailed": { + "object_id": "14", + "object_type": "product", + "type": "A", + "image_path": "https://shop.osr-plastic.org/images/detailed/8/filament-cooler-76.jpg", + "alt": "", + "image_x": "2048", + "image_y": "2040", + "http_image_path": "http://shop.osr-plastic.org/images/detailed/8/filament-cooler-76.jpg", + "https_image_path": "https://shop.osr-plastic.org/images/detailed/8/filament-cooler-76.jpg", + "absolute_path": "/var/www/vhosts/osr-plastic.org/shop.osr-plastic.org/images/detailed/8/filament-cooler-76.jpg", + "relative_path": "detailed/8/filament-cooler-76.jpg", + "is_high_res": false + } + } + }, + "base_price": "290.000000", + "selected_options": [], + "has_options": false, + "product_options": [], + "discounts": { + "A": 0, + "P": 0 + }, + "product_features": [], + "qty_content": [], + "premoderation_reason": "" + }, + { + "product_id": "13", + "product": "Lydia - Mini", + "product_type": "P", + "parent_product_id": "0", + "product_code": "LM", + "status": "A", + "company_id": "1", + "list_price": "0.00", + "amount": "1", + "weight": "0.000", + "length": "0", + "width": "0", + "height": "0", + "shipping_freight": "0.00", + "low_avail_limit": "0", + "timestamp": "1644342464", + "updated_timestamp": "1644343934", + "usergroup_ids": "0", + "is_edp": "N", + "edp_shipping": "N", + "unlimited_download": "N", + "tracking": "D", + "free_shipping": "N", + "zero_price_action": "R", + "is_pbp": "Y", + "is_op": "N", + "is_oper": "N", + "is_returnable": "Y", + "return_period": "10", + "avail_since": "0", + "out_of_stock_actions": "N", + "localization": "", + "min_qty": "0", + "max_qty": "0", + "qty_step": "0", + "list_qty_count": "0", + "tax_ids": "", + "age_verification": "N", + "age_limit": "0", + "options_type": "P", + "exceptions_type": "F", + "details_layout": "default", + "shipping_params": "a:5:{s:16:\"min_items_in_box\";i:0;s:16:\"max_items_in_box\";i:0;s:10:\"box_length\";i:0;s:9:\"box_width\";i:0;s:10:\"box_height\";i:0;}", + "facebook_obj_type": "", + "buy_now_url": "", + "price": "1800.000000", + "category_ids": [ + 14 + ], + "seo_name": "lydia-mini", + "seo_path": "11/14", + "main_category": 14, + "options_type_raw": null, + "exceptions_type_raw": null, + "tracking_raw": null, + "zero_price_action_raw": null, + "min_qty_raw": null, + "max_qty_raw": null, + "qty_step_raw": null, + "list_qty_count_raw": null, + "details_layout_raw": "default", + "variation_features": [], + "main_pair": { + "pair_id": "74", + "image_id": "0", + "detailed_id": "8690", + "position": "0", + "object_id": "13", + "object_type": "product", + "detailed": { + "object_id": "13", + "object_type": "product", + "type": "M", + "image_path": "https://shop.osr-plastic.org/images/detailed/8/perspective_j69l-oe.JPG", + "alt": "", + "image_x": "1931", + "image_y": "1545", + "http_image_path": "http://shop.osr-plastic.org/images/detailed/8/perspective_j69l-oe.JPG", + "https_image_path": "https://shop.osr-plastic.org/images/detailed/8/perspective_j69l-oe.JPG", + "absolute_path": "/var/www/vhosts/osr-plastic.org/shop.osr-plastic.org/images/detailed/8/perspective_j69l-oe.JPG", + "relative_path": "detailed/8/perspective_j69l-oe.JPG", + "is_high_res": false + } + }, + "image_pairs": { + "77": { + "pair_id": "77", + "image_id": "0", + "detailed_id": "8693", + "position": "1", + "object_id": "13", + "object_type": "product", + "detailed": { + "object_id": "13", + "object_type": "product", + "type": "A", + "image_path": "https://shop.osr-plastic.org/images/detailed/8/lydia-mini-77.jpg", + "alt": "", + "image_x": "1716", + "image_y": "2048", + "http_image_path": "http://shop.osr-plastic.org/images/detailed/8/lydia-mini-77.jpg", + "https_image_path": "https://shop.osr-plastic.org/images/detailed/8/lydia-mini-77.jpg", + "absolute_path": "/var/www/vhosts/osr-plastic.org/shop.osr-plastic.org/images/detailed/8/lydia-mini-77.jpg", + "relative_path": "detailed/8/lydia-mini-77.jpg", + "is_high_res": false + } + } + }, + "base_price": "1800.000000", + "selected_options": [], + "has_options": false, + "product_options": [], + "discounts": { + "A": 0, + "P": 0 + }, + "product_features": [], + "qty_content": [], + "premoderation_reason": "" + }, + { + "product_id": "12", + "product": "elx", + "product_type": "P", + "parent_product_id": "0", + "product_code": "", + "status": "D", + "company_id": "1", + "list_price": "0.00", + "amount": "0", + "weight": "0.000", + "length": "0", + "width": "0", + "height": "0", + "shipping_freight": "0.00", + "low_avail_limit": "0", + "timestamp": "1644329325", + "updated_timestamp": "1644329376", + "usergroup_ids": "0", + "is_edp": "N", + "edp_shipping": "N", + "unlimited_download": "N", + "tracking": "D", + "free_shipping": "N", + "zero_price_action": "R", + "is_pbp": "N", + "is_op": "N", + "is_oper": "N", + "is_returnable": "Y", + "return_period": "10", + "avail_since": "0", + "out_of_stock_actions": "N", + "localization": "", + "min_qty": "0", + "max_qty": "0", + "qty_step": "0", + "list_qty_count": "0", + "tax_ids": "", + "age_verification": "N", + "age_limit": "0", + "options_type": "P", + "exceptions_type": "F", + "details_layout": "", + "shipping_params": "a:5:{s:16:\"min_items_in_box\";i:0;s:16:\"max_items_in_box\";i:0;s:10:\"box_length\";i:0;s:9:\"box_width\";i:0;s:10:\"box_height\";i:0;}", + "facebook_obj_type": "", + "buy_now_url": "", + "price": "11.000000", + "category_ids": [ + 11 + ], + "seo_name": "textss", + "seo_path": "11", + "main_category": 11, + "options_type_raw": null, + "exceptions_type_raw": null, + "tracking_raw": null, + "zero_price_action_raw": null, + "min_qty_raw": null, + "max_qty_raw": null, + "qty_step_raw": null, + "list_qty_count_raw": null, + "details_layout_raw": "", + "variation_features": [], + "base_price": "11.000000", + "selected_options": [], + "has_options": false, + "product_options": [], + "discounts": { + "A": 0, + "P": 0 + }, + "product_features": [], + "qty_content": [], + "premoderation_reason": "" + }, + { + "product_id": "11", + "product": "Elena XMAX", + "product_type": "P", + "parent_product_id": "0", + "product_code": "ELM", + "status": "A", + "company_id": "1", + "list_price": "0.00", + "amount": "1", + "weight": "0.000", + "length": "0", + "width": "0", + "height": "0", + "shipping_freight": "0.00", + "low_avail_limit": "0", + "timestamp": "1644318804", + "updated_timestamp": "1644319500", + "usergroup_ids": "0", + "is_edp": "N", + "edp_shipping": "N", + "unlimited_download": "N", + "tracking": "D", + "free_shipping": "N", + "zero_price_action": "R", + "is_pbp": "Y", + "is_op": "N", + "is_oper": "N", + "is_returnable": "Y", + "return_period": "10", + "avail_since": "0", + "out_of_stock_actions": "N", + "localization": "", + "min_qty": "0", + "max_qty": "0", + "qty_step": "0", + "list_qty_count": "0", + "tax_ids": "", + "age_verification": "N", + "age_limit": "0", + "options_type": "P", + "exceptions_type": "F", + "details_layout": "default", + "shipping_params": "a:5:{s:16:\"min_items_in_box\";i:0;s:16:\"max_items_in_box\";i:0;s:10:\"box_length\";i:0;s:9:\"box_width\";i:0;s:10:\"box_height\";i:0;}", + "facebook_obj_type": "", + "buy_now_url": "", + "price": "2100.000000", + "category_ids": [ + 10 + ], + "seo_name": "elena-xmax", + "seo_path": "7/10", + "main_category": 10, + "options_type_raw": null, + "exceptions_type_raw": null, + "tracking_raw": null, + "zero_price_action_raw": null, + "min_qty_raw": null, + "max_qty_raw": null, + "qty_step_raw": null, + "list_qty_count_raw": null, + "details_layout_raw": "default", + "variation_features": [], + "main_pair": { + "pair_id": "66", + "image_id": "0", + "detailed_id": "8682", + "position": "0", + "object_id": "11", + "object_type": "product", + "detailed": { + "object_id": "11", + "object_type": "product", + "type": "M", + "image_path": "https://shop.osr-plastic.org/images/detailed/8/perspective_wfuy-xq.jpg", + "alt": "", + "image_x": "2135", + "image_y": "2135", + "http_image_path": "http://shop.osr-plastic.org/images/detailed/8/perspective_wfuy-xq.jpg", + "https_image_path": "https://shop.osr-plastic.org/images/detailed/8/perspective_wfuy-xq.jpg", + "absolute_path": "/var/www/vhosts/osr-plastic.org/shop.osr-plastic.org/images/detailed/8/perspective_wfuy-xq.jpg", + "relative_path": "detailed/8/perspective_wfuy-xq.jpg", + "is_high_res": false + } + }, + "image_pairs": { + "67": { + "pair_id": "67", + "image_id": "0", + "detailed_id": "8683", + "position": "1", + "object_id": "11", + "object_type": "product", + "detailed": { + "object_id": "11", + "object_type": "product", + "type": "A", + "image_path": "https://shop.osr-plastic.org/images/detailed/8/elena-xmax-67.jpg", + "alt": "", + "image_x": "1679", + "image_y": "1680", + "http_image_path": "http://shop.osr-plastic.org/images/detailed/8/elena-xmax-67.jpg", + "https_image_path": "https://shop.osr-plastic.org/images/detailed/8/elena-xmax-67.jpg", + "absolute_path": "/var/www/vhosts/osr-plastic.org/shop.osr-plastic.org/images/detailed/8/elena-xmax-67.jpg", + "relative_path": "detailed/8/elena-xmax-67.jpg", + "is_high_res": false + } + } + }, + "base_price": "2100.000000", + "selected_options": [], + "has_options": false, + "product_options": [], + "discounts": { + "A": 0, + "P": 0 + }, + "product_features": [], + "qty_content": [], + "premoderation_reason": "" + }, + { + "product_id": "10", + "product": "Mold Service", + "product_type": "P", + "parent_product_id": "0", + "product_code": "", + "status": "A", + "company_id": "1", + "list_price": "0.00", + "amount": "1", + "weight": "0.000", + "length": "0", + "width": "0", + "height": "0", + "shipping_freight": "0.00", + "low_avail_limit": "0", + "timestamp": "1644164569", + "updated_timestamp": "1644402865", + "usergroup_ids": "0", + "is_edp": "N", + "edp_shipping": "N", + "unlimited_download": "N", + "tracking": "D", + "free_shipping": "N", + "zero_price_action": "R", + "is_pbp": "Y", + "is_op": "N", + "is_oper": "N", + "is_returnable": "Y", + "return_period": "10", + "avail_since": "0", + "out_of_stock_actions": "N", + "localization": "", + "min_qty": "0", + "max_qty": "0", + "qty_step": "0", + "list_qty_count": "0", + "tax_ids": "", + "age_verification": "N", + "age_limit": "0", + "options_type": "P", + "exceptions_type": "F", + "details_layout": "default", + "shipping_params": "a:5:{s:16:\"min_items_in_box\";i:0;s:16:\"max_items_in_box\";i:0;s:10:\"box_length\";i:0;s:9:\"box_width\";i:0;s:10:\"box_height\";i:0;}", + "facebook_obj_type": "", + "buy_now_url": "", + "price": "0.000000", + "category_ids": [ + 3 + ], + "seo_name": "mold-service", + "seo_path": "3", + "main_category": 3, + "options_type_raw": null, + "exceptions_type_raw": null, + "tracking_raw": null, + "zero_price_action_raw": null, + "min_qty_raw": null, + "max_qty_raw": null, + "qty_step_raw": null, + "list_qty_count_raw": null, + "details_layout_raw": "default", + "variation_features": [], + "main_pair": { + "pair_id": "59", + "image_id": "0", + "detailed_id": "8675", + "position": "0", + "object_id": "10", + "object_type": "product", + "detailed": { + "object_id": "10", + "object_type": "product", + "type": "M", + "image_path": "https://shop.osr-plastic.org/images/detailed/8/molds2.jpg", + "alt": "", + "image_x": "1254", + "image_y": "836", + "http_image_path": "http://shop.osr-plastic.org/images/detailed/8/molds2.jpg", + "https_image_path": "https://shop.osr-plastic.org/images/detailed/8/molds2.jpg", + "absolute_path": "/var/www/vhosts/osr-plastic.org/shop.osr-plastic.org/images/detailed/8/molds2.jpg", + "relative_path": "detailed/8/molds2.jpg", + "is_high_res": false + } + }, + "image_pairs": { + "58": { + "pair_id": "58", + "image_id": "0", + "detailed_id": "8674", + "position": "1", + "object_id": "10", + "object_type": "product", + "detailed": { + "object_id": "10", + "object_type": "product", + "type": "A", + "image_path": "https://shop.osr-plastic.org/images/detailed/8/molds.jpg", + "alt": "", + "image_x": "1254", + "image_y": "836", + "http_image_path": "http://shop.osr-plastic.org/images/detailed/8/molds.jpg", + "https_image_path": "https://shop.osr-plastic.org/images/detailed/8/molds.jpg", + "absolute_path": "/var/www/vhosts/osr-plastic.org/shop.osr-plastic.org/images/detailed/8/molds.jpg", + "relative_path": "detailed/8/molds.jpg", + "is_high_res": false + } + }, + "93": { + "pair_id": "93", + "image_id": "0", + "detailed_id": "8709", + "position": "2", + "object_id": "10", + "object_type": "product", + "detailed": { + "object_id": "10", + "object_type": "product", + "type": "A", + "image_path": "https://shop.osr-plastic.org/images/detailed/8/mold-service-93.JPG", + "alt": "", + "image_x": "2976", + "image_y": "1680", + "http_image_path": "http://shop.osr-plastic.org/images/detailed/8/mold-service-93.JPG", + "https_image_path": "https://shop.osr-plastic.org/images/detailed/8/mold-service-93.JPG", + "absolute_path": "/var/www/vhosts/osr-plastic.org/shop.osr-plastic.org/images/detailed/8/mold-service-93.JPG", + "relative_path": "detailed/8/mold-service-93.JPG", + "is_high_res": false + } + }, + "94": { + "pair_id": "94", + "image_id": "0", + "detailed_id": "8710", + "position": "3", + "object_id": "10", + "object_type": "product", + "detailed": { + "object_id": "10", + "object_type": "product", + "type": "A", + "image_path": "https://shop.osr-plastic.org/images/detailed/8/mold-service-94.JPG", + "alt": "", + "image_x": "1802", + "image_y": "1680", + "http_image_path": "http://shop.osr-plastic.org/images/detailed/8/mold-service-94.JPG", + "https_image_path": "https://shop.osr-plastic.org/images/detailed/8/mold-service-94.JPG", + "absolute_path": "/var/www/vhosts/osr-plastic.org/shop.osr-plastic.org/images/detailed/8/mold-service-94.JPG", + "relative_path": "detailed/8/mold-service-94.JPG", + "is_high_res": false + } + } + }, + "base_price": "0.000000", + "selected_options": [], + "has_options": false, + "product_options": [], + "discounts": { + "A": 0, + "P": 0 + }, + "product_features": [], + "qty_content": [], + "premoderation_reason": "" + }, + { + "product_id": "9", + "product": "Zoe - Shredder & Extrusion Combo", + "product_type": "P", + "parent_product_id": "0", + "product_code": "", + "status": "A", + "company_id": "1", + "list_price": "0.00", + "amount": "1", + "weight": "0.000", + "length": "0", + "width": "0", + "height": "0", + "shipping_freight": "0.00", + "low_avail_limit": "0", + "timestamp": "1644164492", + "updated_timestamp": "1644342025", + "usergroup_ids": "0", + "is_edp": "N", + "edp_shipping": "N", + "unlimited_download": "N", + "tracking": "D", + "free_shipping": "N", + "zero_price_action": "R", + "is_pbp": "Y", + "is_op": "N", + "is_oper": "N", + "is_returnable": "Y", + "return_period": "10", + "avail_since": "0", + "out_of_stock_actions": "N", + "localization": "", + "min_qty": "0", + "max_qty": "0", + "qty_step": "0", + "list_qty_count": "0", + "tax_ids": "", + "age_verification": "N", + "age_limit": "0", + "options_type": "P", + "exceptions_type": "F", + "details_layout": "default", + "shipping_params": "a:5:{s:16:\"min_items_in_box\";i:0;s:16:\"max_items_in_box\";i:0;s:10:\"box_length\";i:0;s:9:\"box_width\";i:0;s:10:\"box_height\";i:0;}", + "facebook_obj_type": "", + "buy_now_url": "", + "price": "5000.000000", + "category_ids": [ + 19, + 14 + ], + "seo_name": "zoe-shredder-and-extrusion-combo", + "seo_path": "6/19", + "main_category": 19, + "options_type_raw": null, + "exceptions_type_raw": null, + "tracking_raw": null, + "zero_price_action_raw": null, + "min_qty_raw": null, + "max_qty_raw": null, + "qty_step_raw": null, + "list_qty_count_raw": null, + "details_layout_raw": "default", + "variation_features": [], + "main_pair": { + "pair_id": "56", + "image_id": "0", + "detailed_id": "8672", + "position": "0", + "object_id": "9", + "object_type": "product", + "detailed": { + "object_id": "9", + "object_type": "product", + "type": "M", + "image_path": "https://shop.osr-plastic.org/images/detailed/8/RevB-Auto-Plunger.jpg", + "alt": "", + "image_x": "1999", + "image_y": "1545", + "http_image_path": "http://shop.osr-plastic.org/images/detailed/8/RevB-Auto-Plunger.jpg", + "https_image_path": "https://shop.osr-plastic.org/images/detailed/8/RevB-Auto-Plunger.jpg", + "absolute_path": "/var/www/vhosts/osr-plastic.org/shop.osr-plastic.org/images/detailed/8/RevB-Auto-Plunger.jpg", + "relative_path": "detailed/8/RevB-Auto-Plunger.jpg", + "is_high_res": false + } + }, + "image_pairs": { + "72": { + "pair_id": "72", + "image_id": "0", + "detailed_id": "8688", + "position": "2", + "object_id": "9", + "object_type": "product", + "detailed": { + "object_id": "9", + "object_type": "product", + "type": "A", + "image_path": "https://shop.osr-plastic.org/images/detailed/8/zoe-shredder-and-extrusion-combo-72.jpg", + "alt": "", + "image_x": "2048", + "image_y": "1375", + "http_image_path": "http://shop.osr-plastic.org/images/detailed/8/zoe-shredder-and-extrusion-combo-72.jpg", + "https_image_path": "https://shop.osr-plastic.org/images/detailed/8/zoe-shredder-and-extrusion-combo-72.jpg", + "absolute_path": "/var/www/vhosts/osr-plastic.org/shop.osr-plastic.org/images/detailed/8/zoe-shredder-and-extrusion-combo-72.jpg", + "relative_path": "detailed/8/zoe-shredder-and-extrusion-combo-72.jpg", + "is_high_res": false + } + }, + "73": { + "pair_id": "73", + "image_id": "0", + "detailed_id": "8689", + "position": "3", + "object_id": "9", + "object_type": "product", + "detailed": { + "object_id": "9", + "object_type": "product", + "type": "A", + "image_path": "https://shop.osr-plastic.org/images/detailed/8/zoe-shredder-and-extrusion-combo-73.jpg", + "alt": "", + "image_x": "2048", + "image_y": "1152", + "http_image_path": "http://shop.osr-plastic.org/images/detailed/8/zoe-shredder-and-extrusion-combo-73.jpg", + "https_image_path": "https://shop.osr-plastic.org/images/detailed/8/zoe-shredder-and-extrusion-combo-73.jpg", + "absolute_path": "/var/www/vhosts/osr-plastic.org/shop.osr-plastic.org/images/detailed/8/zoe-shredder-and-extrusion-combo-73.jpg", + "relative_path": "detailed/8/zoe-shredder-and-extrusion-combo-73.jpg", + "is_high_res": false + } + } + }, + "base_price": "5000.000000", + "selected_options": [], + "has_options": false, + "product_options": [], + "discounts": { + "A": 0, + "P": 0 + }, + "product_features": [], + "qty_content": [], + "premoderation_reason": "" + }, + { + "product_id": "8", + "product": "Cassanda - Light", + "product_type": "P", + "parent_product_id": "0", + "product_code": "", + "status": "A", + "company_id": "1", + "list_price": "0.00", + "amount": "1", + "weight": "0.000", + "length": "0", + "width": "0", + "height": "0", + "shipping_freight": "0.00", + "low_avail_limit": "0", + "timestamp": "1644164351", + "updated_timestamp": "1644322701", + "usergroup_ids": "0", + "is_edp": "N", + "edp_shipping": "N", + "unlimited_download": "N", + "tracking": "D", + "free_shipping": "N", + "zero_price_action": "R", + "is_pbp": "Y", + "is_op": "N", + "is_oper": "N", + "is_returnable": "Y", + "return_period": "10", + "avail_since": "0", + "out_of_stock_actions": "N", + "localization": "", + "min_qty": "0", + "max_qty": "0", + "qty_step": "0", + "list_qty_count": "0", + "tax_ids": "", + "age_verification": "N", + "age_limit": "0", + "options_type": "P", + "exceptions_type": "F", + "details_layout": "default", + "shipping_params": "a:5:{s:16:\"min_items_in_box\";i:0;s:16:\"max_items_in_box\";i:0;s:10:\"box_length\";i:0;s:9:\"box_width\";i:0;s:10:\"box_height\";i:0;}", + "facebook_obj_type": "", + "buy_now_url": "", + "price": "5000.000000", + "category_ids": [ + 18 + ], + "seo_name": "cassanda-light", + "seo_path": "15/18", + "main_category": 18, + "options_type_raw": null, + "exceptions_type_raw": null, + "tracking_raw": null, + "zero_price_action_raw": null, + "min_qty_raw": null, + "max_qty_raw": null, + "qty_step_raw": null, + "list_qty_count_raw": null, + "details_layout_raw": "default", + "variation_features": [], + "main_pair": { + "pair_id": "71", + "image_id": "0", + "detailed_id": "8687", + "position": "0", + "object_id": "8", + "object_type": "product", + "detailed": { + "object_id": "8", + "object_type": "product", + "type": "M", + "image_path": "https://shop.osr-plastic.org/images/detailed/8/perspective-stackked.jpg", + "alt": "", + "image_x": "1931", + "image_y": "1545", + "http_image_path": "http://shop.osr-plastic.org/images/detailed/8/perspective-stackked.jpg", + "https_image_path": "https://shop.osr-plastic.org/images/detailed/8/perspective-stackked.jpg", + "absolute_path": "/var/www/vhosts/osr-plastic.org/shop.osr-plastic.org/images/detailed/8/perspective-stackked.jpg", + "relative_path": "detailed/8/perspective-stackked.jpg", + "is_high_res": false + } + }, + "image_pairs": { + "68": { + "pair_id": "68", + "image_id": "0", + "detailed_id": "8684", + "position": "2", + "object_id": "8", + "object_type": "product", + "detailed": { + "object_id": "8", + "object_type": "product", + "type": "A", + "image_path": "https://shop.osr-plastic.org/images/detailed/8/cassanda-light-68.JPG", + "alt": "", + "image_x": "1919", + "image_y": "1080", + "http_image_path": "http://shop.osr-plastic.org/images/detailed/8/cassanda-light-68.JPG", + "https_image_path": "https://shop.osr-plastic.org/images/detailed/8/cassanda-light-68.JPG", + "absolute_path": "/var/www/vhosts/osr-plastic.org/shop.osr-plastic.org/images/detailed/8/cassanda-light-68.JPG", + "relative_path": "detailed/8/cassanda-light-68.JPG", + "is_high_res": false + } + }, + "69": { + "pair_id": "69", + "image_id": "0", + "detailed_id": "8685", + "position": "3", + "object_id": "8", + "object_type": "product", + "detailed": { + "object_id": "8", + "object_type": "product", + "type": "A", + "image_path": "https://shop.osr-plastic.org/images/detailed/8/cassanda-light-69.JPG", + "alt": "", + "image_x": "1919", + "image_y": "1080", + "http_image_path": "http://shop.osr-plastic.org/images/detailed/8/cassanda-light-69.JPG", + "https_image_path": "https://shop.osr-plastic.org/images/detailed/8/cassanda-light-69.JPG", + "absolute_path": "/var/www/vhosts/osr-plastic.org/shop.osr-plastic.org/images/detailed/8/cassanda-light-69.JPG", + "relative_path": "detailed/8/cassanda-light-69.JPG", + "is_high_res": false + } + }, + "70": { + "pair_id": "70", + "image_id": "0", + "detailed_id": "8686", + "position": "4", + "object_id": "8", + "object_type": "product", + "detailed": { + "object_id": "8", + "object_type": "product", + "type": "A", + "image_path": "https://shop.osr-plastic.org/images/detailed/8/cassanda-light-70.JPG", + "alt": "", + "image_x": "1919", + "image_y": "1080", + "http_image_path": "http://shop.osr-plastic.org/images/detailed/8/cassanda-light-70.JPG", + "https_image_path": "https://shop.osr-plastic.org/images/detailed/8/cassanda-light-70.JPG", + "absolute_path": "/var/www/vhosts/osr-plastic.org/shop.osr-plastic.org/images/detailed/8/cassanda-light-70.JPG", + "relative_path": "detailed/8/cassanda-light-70.JPG", + "is_high_res": false + } + } + }, + "base_price": "5000.000000", + "selected_options": [], + "has_options": false, + "product_options": [], + "discounts": { + "A": 0, + "P": 0 + }, + "product_features": [], + "qty_content": [], + "premoderation_reason": "" + }, + { + "product_id": "7", + "product": "Sheetpress - Cell - 1.20m", + "product_type": "P", + "parent_product_id": "0", + "product_code": "", + "status": "A", + "company_id": "1", + "list_price": "0.00", + "amount": "1", + "weight": "0.000", + "length": "0", + "width": "0", + "height": "0", + "shipping_freight": "0.00", + "low_avail_limit": "0", + "timestamp": "1644164213", + "updated_timestamp": "1644164224", + "usergroup_ids": "0", + "is_edp": "N", + "edp_shipping": "N", + "unlimited_download": "N", + "tracking": "D", + "free_shipping": "N", + "zero_price_action": "R", + "is_pbp": "Y", + "is_op": "N", + "is_oper": "N", + "is_returnable": "Y", + "return_period": "10", + "avail_since": "0", + "out_of_stock_actions": "N", + "localization": "", + "min_qty": "0", + "max_qty": "0", + "qty_step": "0", + "list_qty_count": "0", + "tax_ids": "", + "age_verification": "N", + "age_limit": "0", + "options_type": "P", + "exceptions_type": "F", + "details_layout": "default", + "shipping_params": "a:5:{s:16:\"min_items_in_box\";i:0;s:16:\"max_items_in_box\";i:0;s:10:\"box_length\";i:0;s:9:\"box_width\";i:0;s:10:\"box_height\";i:0;}", + "facebook_obj_type": "", + "buy_now_url": "", + "price": "6900.000000", + "category_ids": [ + 18 + ], + "seo_name": "sheetpress-cell-1.20m", + "seo_path": "15/18", + "main_category": 18, + "options_type_raw": null, + "exceptions_type_raw": null, + "tracking_raw": null, + "zero_price_action_raw": null, + "min_qty_raw": null, + "max_qty_raw": null, + "qty_step_raw": null, + "list_qty_count_raw": null, + "details_layout_raw": "default", + "variation_features": [], + "main_pair": { + "pair_id": "53", + "image_id": "0", + "detailed_id": "8669", + "position": "0", + "object_id": "7", + "object_type": "product", + "detailed": { + "object_id": "7", + "object_type": "product", + "type": "M", + "image_path": "https://shop.osr-plastic.org/images/detailed/8/perspective_ezdf-nd.JPG", + "alt": "", + "image_x": "2861", + "image_y": "2799", + "http_image_path": "http://shop.osr-plastic.org/images/detailed/8/perspective_ezdf-nd.JPG", + "https_image_path": "https://shop.osr-plastic.org/images/detailed/8/perspective_ezdf-nd.JPG", + "absolute_path": "/var/www/vhosts/osr-plastic.org/shop.osr-plastic.org/images/detailed/8/perspective_ezdf-nd.JPG", + "relative_path": "detailed/8/perspective_ezdf-nd.JPG", + "is_high_res": false + } + }, + "image_pairs": { + "54": { + "pair_id": "54", + "image_id": "0", + "detailed_id": "8670", + "position": "2", + "object_id": "7", + "object_type": "product", + "detailed": { + "object_id": "7", + "object_type": "product", + "type": "A", + "image_path": "https://shop.osr-plastic.org/images/detailed/8/latest2.jpg", + "alt": "", + "image_x": "1884", + "image_y": "1975", + "http_image_path": "http://shop.osr-plastic.org/images/detailed/8/latest2.jpg", + "https_image_path": "https://shop.osr-plastic.org/images/detailed/8/latest2.jpg", + "absolute_path": "/var/www/vhosts/osr-plastic.org/shop.osr-plastic.org/images/detailed/8/latest2.jpg", + "relative_path": "detailed/8/latest2.jpg", + "is_high_res": false + } + } + }, + "base_price": "6900.000000", + "selected_options": [], + "has_options": false, + "product_options": [], + "discounts": { + "A": 0, + "P": 0 + }, + "product_features": [], + "qty_content": [], + "premoderation_reason": "" + }, + { + "product_id": "6", + "product": "Obelix - Upgraded v4 - Shredder", + "product_type": "P", + "parent_product_id": "0", + "product_code": "", + "status": "A", + "company_id": "1", + "list_price": "0.00", + "amount": "1", + "weight": "0.000", + "length": "0", + "width": "0", + "height": "0", + "shipping_freight": "0.00", + "low_avail_limit": "0", + "timestamp": "1644163162", + "updated_timestamp": "1644163204", + "usergroup_ids": "0", + "is_edp": "N", + "edp_shipping": "N", + "unlimited_download": "N", + "tracking": "D", + "free_shipping": "N", + "zero_price_action": "R", + "is_pbp": "Y", + "is_op": "N", + "is_oper": "N", + "is_returnable": "Y", + "return_period": "10", + "avail_since": "0", + "out_of_stock_actions": "N", + "localization": "", + "min_qty": "0", + "max_qty": "0", + "qty_step": "0", + "list_qty_count": "0", + "tax_ids": "", + "age_verification": "N", + "age_limit": "0", + "options_type": "P", + "exceptions_type": "F", + "details_layout": "default", + "shipping_params": "a:5:{s:16:\"min_items_in_box\";i:0;s:16:\"max_items_in_box\";i:0;s:10:\"box_length\";i:0;s:9:\"box_width\";i:0;s:10:\"box_height\";i:0;}", + "facebook_obj_type": "activity", + "buy_now_url": "", + "price": "6000.000000", + "category_ids": [ + 19 + ], + "seo_name": "obelix-upgraded-v4-shredder", + "seo_path": "6/19", + "main_category": 19, + "options_type_raw": null, + "exceptions_type_raw": null, + "tracking_raw": null, + "zero_price_action_raw": null, + "min_qty_raw": null, + "max_qty_raw": null, + "qty_step_raw": null, + "list_qty_count_raw": null, + "details_layout_raw": "default", + "variation_features": [], + "main_pair": { + "pair_id": "51", + "image_id": "0", + "detailed_id": "8667", + "position": "0", + "object_id": "6", + "object_type": "product", + "detailed": { + "object_id": "6", + "object_type": "product", + "type": "M", + "image_path": "https://shop.osr-plastic.org/images/detailed/8/revA-0.8.jpg", + "alt": "", + "image_x": "1400", + "image_y": "1082", + "http_image_path": "http://shop.osr-plastic.org/images/detailed/8/revA-0.8.jpg", + "https_image_path": "https://shop.osr-plastic.org/images/detailed/8/revA-0.8.jpg", + "absolute_path": "/var/www/vhosts/osr-plastic.org/shop.osr-plastic.org/images/detailed/8/revA-0.8.jpg", + "relative_path": "detailed/8/revA-0.8.jpg", + "is_high_res": false + } + }, + "image_pairs": { + "52": { + "pair_id": "52", + "image_id": "0", + "detailed_id": "8668", + "position": "1", + "object_id": "6", + "object_type": "product", + "detailed": { + "object_id": "6", + "object_type": "product", + "type": "A", + "image_path": "https://shop.osr-plastic.org/images/detailed/8/rev-latest.jpg", + "alt": "", + "image_x": "1754", + "image_y": "2369", + "http_image_path": "http://shop.osr-plastic.org/images/detailed/8/rev-latest.jpg", + "https_image_path": "https://shop.osr-plastic.org/images/detailed/8/rev-latest.jpg", + "absolute_path": "/var/www/vhosts/osr-plastic.org/shop.osr-plastic.org/images/detailed/8/rev-latest.jpg", + "relative_path": "detailed/8/rev-latest.jpg", + "is_high_res": false + } + } + }, + "base_price": "6000.000000", + "selected_options": [], + "has_options": false, + "product_options": [], + "discounts": { + "A": 0, + "P": 0 + }, + "product_features": [], + "qty_content": [], + "premoderation_reason": "" + }, + { + "product_id": "5", + "product": "Lydia - v3.5", + "product_type": "P", + "parent_product_id": "0", + "product_code": "", + "status": "A", + "company_id": "1", + "list_price": "0.00", + "amount": "1", + "weight": "0.000", + "length": "0", + "width": "0", + "height": "0", + "shipping_freight": "0.00", + "low_avail_limit": "0", + "timestamp": "1644162887", + "updated_timestamp": "1644162887", + "usergroup_ids": "0", + "is_edp": "N", + "edp_shipping": "N", + "unlimited_download": "N", + "tracking": "D", + "free_shipping": "N", + "zero_price_action": "R", + "is_pbp": "Y", + "is_op": "N", + "is_oper": "N", + "is_returnable": "Y", + "return_period": "10", + "avail_since": "0", + "out_of_stock_actions": "N", + "localization": "", + "min_qty": "0", + "max_qty": "0", + "qty_step": "0", + "list_qty_count": "0", + "tax_ids": "", + "age_verification": "N", + "age_limit": "0", + "options_type": "P", + "exceptions_type": "F", + "details_layout": "default", + "shipping_params": "a:5:{s:16:\"min_items_in_box\";i:0;s:16:\"max_items_in_box\";i:0;s:10:\"box_length\";i:0;s:9:\"box_width\";i:0;s:10:\"box_height\";i:0;}", + "facebook_obj_type": "activity", + "buy_now_url": "", + "price": "2650.000000", + "category_ids": [ + 14 + ], + "seo_name": "lydia-v3.5", + "seo_path": "11/14", + "main_category": 14, + "options_type_raw": null, + "exceptions_type_raw": null, + "tracking_raw": null, + "zero_price_action_raw": null, + "min_qty_raw": null, + "max_qty_raw": null, + "qty_step_raw": null, + "list_qty_count_raw": null, + "details_layout_raw": "default", + "variation_features": [], + "main_pair": { + "pair_id": "50", + "image_id": "0", + "detailed_id": "8666", + "position": "0", + "object_id": "5", + "object_type": "product", + "detailed": { + "object_id": "5", + "object_type": "product", + "type": "M", + "image_path": "https://shop.osr-plastic.org/images/detailed/8/perspective_uu8s-zl.jpg", + "alt": "", + "image_x": "1647", + "image_y": "1273", + "http_image_path": "http://shop.osr-plastic.org/images/detailed/8/perspective_uu8s-zl.jpg", + "https_image_path": "https://shop.osr-plastic.org/images/detailed/8/perspective_uu8s-zl.jpg", + "absolute_path": "/var/www/vhosts/osr-plastic.org/shop.osr-plastic.org/images/detailed/8/perspective_uu8s-zl.jpg", + "relative_path": "detailed/8/perspective_uu8s-zl.jpg", + "is_high_res": false + } + }, + "base_price": "2650.000000", + "selected_options": [], + "has_options": false, + "product_options": [], + "discounts": { + "A": 0, + "P": 0 + }, + "product_features": [], + "qty_content": [], + "premoderation_reason": "" + }, + { + "product_id": "4", + "product": "Lydia - v4.5", + "product_type": "P", + "parent_product_id": "0", + "product_code": "L45", + "status": "A", + "company_id": "1", + "list_price": "0.00", + "amount": "0", + "weight": "0.000", + "length": "0", + "width": "0", + "height": "0", + "shipping_freight": "0.00", + "low_avail_limit": "0", + "timestamp": "1644162438", + "updated_timestamp": "1644315470", + "usergroup_ids": "0", + "is_edp": "N", + "edp_shipping": "N", + "unlimited_download": "N", + "tracking": "D", + "free_shipping": "N", + "zero_price_action": "R", + "is_pbp": "Y", + "is_op": "N", + "is_oper": "N", + "is_returnable": "Y", + "return_period": "10", + "avail_since": "0", + "out_of_stock_actions": "N", + "localization": "", + "min_qty": "0", + "max_qty": "0", + "qty_step": "0", + "list_qty_count": "0", + "tax_ids": "", + "age_verification": "N", + "age_limit": "0", + "options_type": "P", + "exceptions_type": "F", + "details_layout": "default", + "shipping_params": "a:5:{s:16:\"min_items_in_box\";i:0;s:16:\"max_items_in_box\";i:0;s:10:\"box_length\";i:0;s:9:\"box_width\";i:0;s:10:\"box_height\";i:0;}", + "facebook_obj_type": "activity", + "buy_now_url": "", + "price": "4500.000000", + "category_ids": [ + 14 + ], + "seo_name": "lydia-v4.5", + "seo_path": "11/14", + "main_category": 14, + "options_type_raw": null, + "exceptions_type_raw": null, + "tracking_raw": null, + "zero_price_action_raw": null, + "min_qty_raw": null, + "max_qty_raw": null, + "qty_step_raw": null, + "list_qty_count_raw": null, + "details_layout_raw": "default", + "variation_features": [], + "main_pair": { + "pair_id": "49", + "image_id": "0", + "detailed_id": "8665", + "position": "0", + "object_id": "4", + "object_type": "product", + "detailed": { + "object_id": "4", + "object_type": "product", + "type": "M", + "image_path": "https://shop.osr-plastic.org/images/detailed/8/preview_ujgx-6j.jpg", + "alt": "", + "image_x": "3090", + "image_y": "3089", + "http_image_path": "http://shop.osr-plastic.org/images/detailed/8/preview_ujgx-6j.jpg", + "https_image_path": "https://shop.osr-plastic.org/images/detailed/8/preview_ujgx-6j.jpg", + "absolute_path": "/var/www/vhosts/osr-plastic.org/shop.osr-plastic.org/images/detailed/8/preview_ujgx-6j.jpg", + "relative_path": "detailed/8/preview_ujgx-6j.jpg", + "is_high_res": false + } + }, + "image_pairs": { + "46": { + "pair_id": "46", + "image_id": "0", + "detailed_id": "8662", + "position": "1", + "object_id": "4", + "object_type": "product", + "detailed": { + "object_id": "4", + "object_type": "product", + "type": "A", + "image_path": "https://shop.osr-plastic.org/images/detailed/8/background_removed_perspective.png", + "alt": "", + "image_x": "665", + "image_y": "375", + "http_image_path": "http://shop.osr-plastic.org/images/detailed/8/background_removed_perspective.png", + "https_image_path": "https://shop.osr-plastic.org/images/detailed/8/background_removed_perspective.png", + "absolute_path": "/var/www/vhosts/osr-plastic.org/shop.osr-plastic.org/images/detailed/8/background_removed_perspective.png", + "relative_path": "detailed/8/background_removed_perspective.png", + "is_high_res": false + } + }, + "47": { + "pair_id": "47", + "image_id": "0", + "detailed_id": "8663", + "position": "2", + "object_id": "4", + "object_type": "product", + "detailed": { + "object_id": "4", + "object_type": "product", + "type": "A", + "image_path": "https://shop.osr-plastic.org/images/detailed/8/IMG_3618.JPG", + "alt": "", + "image_x": "2976", + "image_y": "1680", + "http_image_path": "http://shop.osr-plastic.org/images/detailed/8/IMG_3618.JPG", + "https_image_path": "https://shop.osr-plastic.org/images/detailed/8/IMG_3618.JPG", + "absolute_path": "/var/www/vhosts/osr-plastic.org/shop.osr-plastic.org/images/detailed/8/IMG_3618.JPG", + "relative_path": "detailed/8/IMG_3618.JPG", + "is_high_res": false + } + }, + "48": { + "pair_id": "48", + "image_id": "0", + "detailed_id": "8664", + "position": "3", + "object_id": "4", + "object_type": "product", + "detailed": { + "object_id": "4", + "object_type": "product", + "type": "A", + "image_path": "https://shop.osr-plastic.org/images/detailed/8/latest_hgcw-ds.JPG", + "alt": "", + "image_x": "882", + "image_y": "861", + "http_image_path": "http://shop.osr-plastic.org/images/detailed/8/latest_hgcw-ds.JPG", + "https_image_path": "https://shop.osr-plastic.org/images/detailed/8/latest_hgcw-ds.JPG", + "absolute_path": "/var/www/vhosts/osr-plastic.org/shop.osr-plastic.org/images/detailed/8/latest_hgcw-ds.JPG", + "relative_path": "detailed/8/latest_hgcw-ds.JPG", + "is_high_res": false + } + } + }, + "base_price": "4500.000000", + "selected_options": [], + "has_options": true, + "product_options": [], + "discounts": { + "A": 0, + "P": 0 + }, + "product_features": [], + "qty_content": [], + "premoderation_reason": "" + }, + { + "product_id": "3", + "product": "Elena Standard", + "product_type": "P", + "parent_product_id": "0", + "product_code": "ELS", + "status": "A", + "company_id": "1", + "list_price": "0.00", + "amount": "1", + "weight": "40.000", + "length": "0", + "width": "0", + "height": "0", + "shipping_freight": "0.00", + "low_avail_limit": "0", + "timestamp": "1644159993", + "updated_timestamp": "1644398136", + "usergroup_ids": "0", + "is_edp": "N", + "edp_shipping": "N", + "unlimited_download": "N", + "tracking": "D", + "free_shipping": "N", + "zero_price_action": "R", + "is_pbp": "Y", + "is_op": "N", + "is_oper": "N", + "is_returnable": "Y", + "return_period": "10", + "avail_since": "0", + "out_of_stock_actions": "N", + "localization": "", + "min_qty": "0", + "max_qty": "0", + "qty_step": "0", + "list_qty_count": "0", + "tax_ids": "", + "age_verification": "N", + "age_limit": "0", + "options_type": "P", + "exceptions_type": "F", + "details_layout": "default", + "shipping_params": "a:5:{s:16:\"min_items_in_box\";i:1;s:16:\"max_items_in_box\";i:0;s:10:\"box_length\";i:15;s:9:\"box_width\";i:50;s:10:\"box_height\";i:120;}", + "facebook_obj_type": "activity", + "buy_now_url": "", + "price": "1650.000000", + "category_ids": [ + 10 + ], + "seo_name": "elena", + "seo_path": "7/10", + "main_category": 10, + "options_type_raw": null, + "exceptions_type_raw": null, + "tracking_raw": null, + "zero_price_action_raw": null, + "min_qty_raw": null, + "max_qty_raw": null, + "qty_step_raw": null, + "list_qty_count_raw": null, + "details_layout_raw": "default", + "variation_features": [], + "main_pair": { + "pair_id": "38", + "image_id": "0", + "detailed_id": "8654", + "position": "0", + "object_id": "3", + "object_type": "product", + "detailed": { + "object_id": "3", + "object_type": "product", + "type": "M", + "image_path": "https://shop.osr-plastic.org/images/detailed/8/perspective.JPG", + "alt": "", + "image_x": "1661", + "image_y": "2293", + "http_image_path": "http://shop.osr-plastic.org/images/detailed/8/perspective.JPG", + "https_image_path": "https://shop.osr-plastic.org/images/detailed/8/perspective.JPG", + "absolute_path": "/var/www/vhosts/osr-plastic.org/shop.osr-plastic.org/images/detailed/8/perspective.JPG", + "relative_path": "detailed/8/perspective.JPG", + "is_high_res": false + } + }, + "image_pairs": { + "39": { + "pair_id": "39", + "image_id": "0", + "detailed_id": "8655", + "position": "1", + "object_id": "3", + "object_type": "product", + "detailed": { + "object_id": "3", + "object_type": "product", + "type": "A", + "image_path": "https://shop.osr-plastic.org/images/detailed/8/classic.jpg", + "alt": "", + "image_x": "640", + "image_y": "640", + "http_image_path": "http://shop.osr-plastic.org/images/detailed/8/classic.jpg", + "https_image_path": "https://shop.osr-plastic.org/images/detailed/8/classic.jpg", + "absolute_path": "/var/www/vhosts/osr-plastic.org/shop.osr-plastic.org/images/detailed/8/classic.jpg", + "relative_path": "detailed/8/classic.jpg", + "is_high_res": false + } + }, + "40": { + "pair_id": "40", + "image_id": "0", + "detailed_id": "8656", + "position": "2", + "object_id": "3", + "object_type": "product", + "detailed": { + "object_id": "3", + "object_type": "product", + "type": "A", + "image_path": "https://shop.osr-plastic.org/images/detailed/8/IMG_3577.JPG", + "alt": "", + "image_x": "1679", + "image_y": "1679", + "http_image_path": "http://shop.osr-plastic.org/images/detailed/8/IMG_3577.JPG", + "https_image_path": "https://shop.osr-plastic.org/images/detailed/8/IMG_3577.JPG", + "absolute_path": "/var/www/vhosts/osr-plastic.org/shop.osr-plastic.org/images/detailed/8/IMG_3577.JPG", + "relative_path": "detailed/8/IMG_3577.JPG", + "is_high_res": false + } + }, + "41": { + "pair_id": "41", + "image_id": "0", + "detailed_id": "8657", + "position": "3", + "object_id": "3", + "object_type": "product", + "detailed": { + "object_id": "3", + "object_type": "product", + "type": "A", + "image_path": "https://shop.osr-plastic.org/images/detailed/8/mold_jack.jpg", + "alt": "", + "image_x": "1080", + "image_y": "1080", + "http_image_path": "http://shop.osr-plastic.org/images/detailed/8/mold_jack.jpg", + "https_image_path": "https://shop.osr-plastic.org/images/detailed/8/mold_jack.jpg", + "absolute_path": "/var/www/vhosts/osr-plastic.org/shop.osr-plastic.org/images/detailed/8/mold_jack.jpg", + "relative_path": "detailed/8/mold_jack.jpg", + "is_high_res": false + } + } + }, + "base_price": "1650.000000", + "selected_options": [], + "has_options": false, + "product_options": [], + "discounts": { + "A": 0, + "P": 0 + }, + "product_features": [], + "qty_content": [], + "premoderation_reason": "" + }, + { + "product_id": "2", + "product": "Asterix - JW", + "product_type": "P", + "parent_product_id": "0", + "product_code": "ASM", + "status": "A", + "company_id": "1", + "list_price": "0.00", + "amount": "1", + "weight": "65.000", + "length": "0", + "width": "0", + "height": "0", + "shipping_freight": "0.00", + "low_avail_limit": "0", + "timestamp": "1644158843", + "updated_timestamp": "1644398091", + "usergroup_ids": "0", + "is_edp": "N", + "edp_shipping": "N", + "unlimited_download": "N", + "tracking": "D", + "free_shipping": "N", + "zero_price_action": "R", + "is_pbp": "Y", + "is_op": "N", + "is_oper": "N", + "is_returnable": "Y", + "return_period": "10", + "avail_since": "0", + "out_of_stock_actions": "N", + "localization": "", + "min_qty": "0", + "max_qty": "0", + "qty_step": "0", + "list_qty_count": "0", + "tax_ids": "", + "age_verification": "N", + "age_limit": "0", + "options_type": "P", + "exceptions_type": "F", + "details_layout": "default", + "shipping_params": "a:5:{s:16:\"min_items_in_box\";i:1;s:16:\"max_items_in_box\";i:5;s:10:\"box_length\";i:50;s:9:\"box_width\";i:50;s:10:\"box_height\";i:80;}", + "facebook_obj_type": "activity", + "buy_now_url": "", + "price": "3300.000000", + "category_ids": [ + 19 + ], + "seo_name": "asterix-sm", + "seo_path": "6/19", + "main_category": 19, + "options_type_raw": null, + "exceptions_type_raw": null, + "tracking_raw": null, + "zero_price_action_raw": null, + "min_qty_raw": null, + "max_qty_raw": null, + "qty_step_raw": null, + "list_qty_count_raw": null, + "details_layout_raw": "default", + "variation_features": [], + "main_pair": { + "pair_id": "36", + "image_id": "0", + "detailed_id": "8652", + "position": "0", + "object_id": "2", + "object_type": "product", + "detailed": { + "object_id": "2", + "object_type": "product", + "type": "M", + "image_path": "https://shop.osr-plastic.org/images/detailed/8/perspective_izc2-0c.jpg", + "alt": "", + "image_x": "1999", + "image_y": "1545", + "http_image_path": "http://shop.osr-plastic.org/images/detailed/8/perspective_izc2-0c.jpg", + "https_image_path": "https://shop.osr-plastic.org/images/detailed/8/perspective_izc2-0c.jpg", + "absolute_path": "/var/www/vhosts/osr-plastic.org/shop.osr-plastic.org/images/detailed/8/perspective_izc2-0c.jpg", + "relative_path": "detailed/8/perspective_izc2-0c.jpg", + "is_high_res": false + } + }, + "image_pairs": { + "65": { + "pair_id": "65", + "image_id": "0", + "detailed_id": "8681", + "position": "6", + "object_id": "2", + "object_type": "product", + "detailed": { + "object_id": "2", + "object_type": "product", + "type": "A", + "image_path": "https://shop.osr-plastic.org/images/detailed/8/asterix-sm-65.JPG", + "alt": "", + "image_x": "1079", + "image_y": "1542", + "http_image_path": "http://shop.osr-plastic.org/images/detailed/8/asterix-sm-65.JPG", + "https_image_path": "https://shop.osr-plastic.org/images/detailed/8/asterix-sm-65.JPG", + "absolute_path": "/var/www/vhosts/osr-plastic.org/shop.osr-plastic.org/images/detailed/8/asterix-sm-65.JPG", + "relative_path": "detailed/8/asterix-sm-65.JPG", + "is_high_res": false + } + } + }, + "base_price": "3300.000000", + "selected_options": [], + "has_options": false, + "product_options": [], + "discounts": { + "A": 0, + "P": 0 + }, + "product_features": [], + "qty_content": [], + "premoderation_reason": "" + } +] \ No newline at end of file diff --git a/packages/osrl/examples/library/osr/social_links.osr b/packages/osrl/examples/library/osr/social_links.osr new file mode 100644 index 00000000..4706ebd1 --- /dev/null +++ b/packages/osrl/examples/library/osr/social_links.osr @@ -0,0 +1,36 @@ + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    diff --git a/packages/osrl/examples/library/osr/vendor_instagram.osr b/packages/osrl/examples/library/osr/vendor_instagram.osr new file mode 100644 index 00000000..c5df3d77 --- /dev/null +++ b/packages/osrl/examples/library/osr/vendor_instagram.osr @@ -0,0 +1,22 @@ +

    Our latest Instagram posts

    + +[%js%] + +return cacache.get.info(CACHE, 'vendor-instagram').then((cache)=>{ + if(cache){ + return cacache.get(CACHE, 'vendor-instagram').then((cached)=>{ + return cached.data.toString(); + }) + } + console.log('get instagram images'); + return instagram.images(config.instagram.user,config.instagram.token,global).then((images)=>{ + images = images.slice(0, 8); + images = html.container.wrap(images.map((i)=> html.container.item(html.image(i.path, "https://www.instagram.com/p/" + i.url,'max-height:200px'),'border:none; width:200px;max-height:200px')).join('\n')); + return cacache.put(CACHE,'vendor-instagram',images).then(()=>{ + return images; + }) + }); + +}); + +[%endjs%] diff --git a/packages/osrl/examples/library/osr/vendor_magento.osr b/packages/osrl/examples/library/osr/vendor_magento.osr new file mode 100644 index 00000000..c8255990 --- /dev/null +++ b/packages/osrl/examples/library/osr/vendor_magento.osr @@ -0,0 +1,34 @@ +

    Product Accessoires

    +[%js%] + +process.on('unhandledRejection', (reason) => { + console.error('Unhandled rejection, reason: ', reason); + debugger; +}); + +const cache_key = 'magento-' + store.product.slug; + +return cacache.get.info(CACHE,cache_key).then((cache)=>{ + if(cache){ + return cacache.get(CACHE, cache_key).then((cached)=>{ + return cached.data.toString(); + }) + } + + return magento.parts(config.magento.user,config.magento.password,config.magento.url,store.product.magentoCategory, global).then((products)=>{ + console.log('get magento products'); + products = html.container.wrap(products.map((i)=> { + if(!i || !i.media_gallery_entries){ + return null; + } + const url = i.custom_attributes.find((a) => a.attribute_code ==='url_key').value; + const name = i.custom_attributes.find((a) => a.attribute_code ==='meta_title').value; + const image = `${MAGENTO_URL}/media/catalog/product/${i.media_gallery_entries[0].file}`; + return html.container.item(html.image(image,`${MAGENTO_URL}/${url}.html`),html.styles.thumb, name); + })); + cacache.put(CACHE,cache_key,products); + return products; + }); +}); + +[%endjs%] diff --git a/packages/osrl/examples/library/osr/widgets/authors.osr b/packages/osrl/examples/library/osr/widgets/authors.osr new file mode 100644 index 00000000..b1877bb8 --- /dev/null +++ b/packages/osrl/examples/library/osr/widgets/authors.osr @@ -0,0 +1,10 @@ +[%if showHeader %] +## Authors +[%endif%] + +[% for author in authors %] +- [ [[author.name]] ]( [[author.url]] ) +[% endfor %] + +[% js %] +[%endjs%] diff --git a/packages/osrl/examples/library/osr/widgets/authors_html.osr b/packages/osrl/examples/library/osr/widgets/authors_html.osr new file mode 100644 index 00000000..9e64af50 --- /dev/null +++ b/packages/osrl/examples/library/osr/widgets/authors_html.osr @@ -0,0 +1,8 @@ +[%if showHeader %] +

    Authors

    +[%endif%] + diff --git a/packages/osrl/examples/makeExample.js b/packages/osrl/examples/makeExample.js new file mode 100644 index 00000000..ef0299de --- /dev/null +++ b/packages/osrl/examples/makeExample.js @@ -0,0 +1,8 @@ +const path = require('path') +const read = require('@plastichub/fs/read').sync; + +const argv = require('yargs-parser')(process.argv.slice(2)) + +const template = path.parse(argv.template); +const runner = path.parse(argv.runner); +const output = path.parse(argv.output); diff --git a/packages/osrl/examples/markdown.md.liquid b/packages/osrl/examples/markdown.md.liquid new file mode 100644 index 00000000..c6f44a68 --- /dev/null +++ b/packages/osrl/examples/markdown.md.liquid @@ -0,0 +1,2 @@ +--- markdown.md.liquid to HTML test --- +### Some heading diff --git a/packages/osrl/examples/parts.csv b/packages/osrl/examples/parts.csv new file mode 100644 index 00000000..3bd6670b --- /dev/null +++ b/packages/osrl/examples/parts.csv @@ -0,0 +1,13 @@ +Part Nr.,Description,Configuration +,, +1,Heatbands,250W – 220V | 110V | OD:35mm | Height : 6cm +2,PID Controller,InkBird 100-VH {{name}} +3,Power Switch,IP55 Grade +4,Solid Round Bar,25mm diameter / 50 cm long +5,Rack,Module-3 | 3cm x 3 cm x 50 cm +6,Plunger,25mm diameter / 38 cm long +7,Gear Brackets,14 cm x 2 cm x 7 cm | Aluminium | 25 mm Bushing +8,Car – Jack,20 x 15 cm Mould Plate +9,Barrel,35cm | ID: 25 mm | OD: 35 mm +10,Nozzle Interface,M20 / 12 mm bore +11,Nozzle,M20 / 12 mm bore with inset cone diff --git a/packages/osrl/examples/test-ask.html b/packages/osrl/examples/test-ask.html new file mode 100644 index 00000000..4a7902ff --- /dev/null +++ b/packages/osrl/examples/test-ask.html @@ -0,0 +1,4 @@ +who are you : {% ask 'who are you ?', type: "input" %} + +- ['table'] +- [trim-newlines] diff --git a/packages/osrl/examples/test-js.html b/packages/osrl/examples/test-js.html new file mode 100644 index 00000000..baf0716e --- /dev/null +++ b/packages/osrl/examples/test-js.html @@ -0,0 +1,20 @@ +{% minclude "test.md" %} + + +[% js %] + +return new Promise((resolve, reject) => { + + console.log(path.resolve('..')); +/* + const log = git.log(path.resolve('..'),'./examples'); + log.then((d)=>{ + const t = git.print_log('httt',d.files); + console.log('tt',d); + resolve(t); + }) +*/ + +}); + +[%endjs%] \ No newline at end of file diff --git a/packages/osrl/examples/test.html b/packages/osrl/examples/test.html new file mode 100644 index 00000000..770db0ba --- /dev/null +++ b/packages/osrl/examples/test.html @@ -0,0 +1,31 @@ + +{% if recurse_test %} +Name : {{name}} +{% else %} + +### Test Array: + +{% for item in items %} + Item[items] = {{item}} +{% endfor %} + +### Test Array with Objects + +{% for item in objects %} + item[att] = {{item.att}} +{% endfor %} + +{% endif %} + +{% include 'footer.html' %} + +### Markdown test + +{% include 'markdown.md.liquid' %} + +### CSV Test + +{% include 'parts.csv' %} + +5 * 100 = {{ number | times: 100}} + diff --git a/packages/osrl/examples/test.js b/packages/osrl/examples/test.js new file mode 100644 index 00000000..78c6a978 --- /dev/null +++ b/packages/osrl/examples/test.js @@ -0,0 +1,4 @@ +exports.default = function (variables) { + // console.log('hello', variables.my_number); + return 'cool ! my_number = ' + variables.my_number; +} diff --git a/packages/osrl/examples/test.md b/packages/osrl/examples/test.md new file mode 100644 index 00000000..b25fa3fc --- /dev/null +++ b/packages/osrl/examples/test.md @@ -0,0 +1 @@ +last diff --git a/packages/osrl/examples/testBazar.sh b/packages/osrl/examples/testBazar.sh new file mode 100644 index 00000000..b0203e36 --- /dev/null +++ b/packages/osrl/examples/testBazar.sh @@ -0,0 +1,35 @@ +node ./main.js compile \ + --debug=true \ + --source='${root}/osr/bazar/root.html' \ + --root='../../ph3/products' \ + --product=products/shredder/obelix \ + --profile='${root}/.osrl.json' \ + --output='${root}/${product}/bazar/output.html' \ + --plugins='${root}/osr/plugins' \ + --env='bazar' \ + --format='html' \ + --stdout=false \ + +exit; + +node ./main.js compile \ + --debug=true \ + --source='${root}/osr/bazar/preview.osr' \ + --root='../../ph3/products' \ + --product=products/injection/elena \ + --profile='${root}/.osrl.json' \ + --output='${root}/${product}/bazar/output_preview.html' \ + --env='bazar' \ + --format='html' \ + --stdout=false \ + +node ./main.js compile \ + --debug=true \ + --source='${root}/osr/bazar/post.osr' \ + --root='../../ph3/products' \ + --product=products/injection/elena \ + --profile='${root}/.osrl.json' \ + --output='${root}/${product}/bazar/output_final.html' \ + --env='bazar' \ + --format='html' \ + --stdout=false \ diff --git a/packages/osrl/examples/testParseText.js b/packages/osrl/examples/testParseText.js new file mode 100644 index 00000000..2776d020 --- /dev/null +++ b/packages/osrl/examples/testParseText.js @@ -0,0 +1,29 @@ +const parse = require('../index').parseText; +const path = require('path') +const read = require('@plastichub/fs/read').sync; + +const template_ = read(`test.html`); +let vars = { + name: '{{test}}', + test: '{{other}}', + other: 'alice', + show: true, + items: ['first', 'second'], + objects: [{ + att: 'first att' + }, { + att: 'second att' + }], + recurse_test: false, + number: 5, + globals: { + test: 1 + } +}; + +parse(template_, vars, 5, { + root: [ + path.resolve('./') + ], + toHTML: true +}).then(console.log); diff --git a/packages/osrl/examples/testProduct.sh b/packages/osrl/examples/testProduct.sh new file mode 100644 index 00000000..af116326 --- /dev/null +++ b/packages/osrl/examples/testProduct.sh @@ -0,0 +1,8 @@ +node ./main.js compile \ + --debug=true \ + --source='${root}/osr/product.osr' \ + --root='../../ph3/products' \ + --product=products/elena \ + --profile='${root}/.osrl.json' \ + --output='${root}/_products/elena.osr.md' \ + --stdout=true \ diff --git a/packages/osrl/filters/index.d.ts b/packages/osrl/filters/index.d.ts new file mode 100644 index 00000000..1d29260f --- /dev/null +++ b/packages/osrl/filters/index.d.ts @@ -0,0 +1,12 @@ +import { IOptions } from '../types'; +export type Filter = (src: any) => any; +export type FilterMap = { + [key: string]: Filter; +}; +export declare const md2html: (content: any) => any; +export declare const beautify: (content: any) => string; +export declare const toFilters: (src: any, Filters: FilterMap) => Filter[]; +export declare const applyFilters: (src: any, _filters: string, filters: FilterMap) => Promise; +export declare function cleanArray(arr: any[]): any[]; +export declare const isValidUrl: (url: string) => boolean; +export declare const Filters: (options: IOptions) => FilterMap; diff --git a/packages/osrl/filters/index.js b/packages/osrl/filters/index.js new file mode 100644 index 00000000..db4d338e --- /dev/null +++ b/packages/osrl/filters/index.js @@ -0,0 +1,108 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.Filters = exports.isValidUrl = exports.cleanArray = exports.applyFilters = exports.toFilters = exports.beautify = exports.md2html = void 0; +const showdown_1 = require("showdown"); +const js_beautify_1 = require("js-beautify"); +const turndown_1 = require("../plugins/turndown"); +const __1 = require(".."); +const index_1 = require("../index"); +////////////////////////////////////////////////////// +// +// Filters +const md2html = (content) => { + let converter = new showdown_1.Converter({ + tables: true, + parseImgDimensions: true, + simplifiedAutoLink: true, + tasklists: true + }); + converter.setOption('literalMidWordUnderscores', 'true'); + return converter.makeHtml(content); +}; +exports.md2html = md2html; +const beautify = (content) => (0, js_beautify_1.html_beautify)(content, {}); +exports.beautify = beautify; +////////////////////////////////////////////////////// +// +// Filter Utils +const toFilters = (src, Filters) => { + src = (src || '').split(','); + const ret = []; + src.forEach((f) => { + if (Filters[f]) { + ret.push(Filters[f]); + } + }); + return ret; +}; +exports.toFilters = toFilters; +const applyFilters = (src, _filters, filters) => __awaiter(void 0, void 0, void 0, function* () { + (0, exports.toFilters)(_filters, filters).forEach((f) => { + let _ret = f(src); + if (_ret) { + src = _ret; + } + }); + return src; +}); +exports.applyFilters = applyFilters; +function cleanArray(arr) { + const uniqueItems = Array.from(new Set(arr.map(item => JSON.stringify(item)))) + .map(item => JSON.parse(item)); + return uniqueItems.filter(item => { + if (Array.isArray(item)) { + return item.length > 0; // Exclude empty arrays + } + else if (typeof item === 'object' && item !== null) { + return Object.keys(item).length > 0; // Exclude empty objects + } + else if (typeof item === 'string') { + return (item); + } + return true; + }).map(item => { + if (typeof item === 'string') { + return item; + } + return item; + }); +} +exports.cleanArray = cleanArray; +const isValidUrl = (url) => { + try { + new URL(url); + return true; + } + catch (_) { + return false; + } +}; +exports.isValidUrl = isValidUrl; +const Filters = (options) => { + return { + html: exports.md2html, + beautify: exports.beautify, + substitute: (str) => (0, __1.substitute)(false, str, options.variables), + markdown: (str) => (0, turndown_1.markdownSync)(str, options, null), + JSONParse: (str) => { + try { + return JSON.parse(str); + } + catch (e) { + index_1.logger.error(`Filter Error : JSONParse: ${e} : ${str} @ ${options.source}`); + return str; + } + } + }; +}; +exports.Filters = Filters; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvZmlsdGVycy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFBQSx1Q0FBb0M7QUFDcEMsNkNBQTJDO0FBQzNDLGtEQUE0RTtBQUU1RSwwQkFBK0I7QUFDL0Isb0NBQWlDO0FBSWpDLHNEQUFzRDtBQUN0RCxFQUFFO0FBQ0YsVUFBVTtBQUNILE1BQU0sT0FBTyxHQUFHLENBQUMsT0FBTyxFQUFFLEVBQUU7SUFDL0IsSUFBSSxTQUFTLEdBQUcsSUFBSSxvQkFBUyxDQUFDO1FBQzFCLE1BQU0sRUFBRSxJQUFJO1FBQ1osa0JBQWtCLEVBQUUsSUFBSTtRQUN4QixrQkFBa0IsRUFBRSxJQUFJO1FBQ3hCLFNBQVMsRUFBRSxJQUFJO0tBQ2xCLENBQUMsQ0FBQztJQUNILFNBQVMsQ0FBQyxTQUFTLENBQUMsMkJBQTJCLEVBQUUsTUFBTSxDQUFDLENBQUE7SUFDeEQsT0FBTyxTQUFTLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFBO0FBQ3RDLENBQUMsQ0FBQTtBQVRZLFFBQUEsT0FBTyxXQVNuQjtBQUNNLE1BQU0sUUFBUSxHQUFHLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxJQUFBLDJCQUFhLEVBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFBO0FBQWxELFFBQUEsUUFBUSxZQUEwQztBQUUvRCxzREFBc0Q7QUFDdEQsRUFBRTtBQUNGLGVBQWU7QUFDUixNQUFNLFNBQVMsR0FBRyxDQUFDLEdBQVEsRUFBRSxPQUFrQixFQUFZLEVBQUU7SUFDaEUsR0FBRyxHQUFHLENBQUMsR0FBRyxJQUFJLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQTtJQUM1QixNQUFNLEdBQUcsR0FBYSxFQUFFLENBQUE7SUFDeEIsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO1FBQ2QsSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDWixHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO1NBQ3ZCO0lBQ0wsQ0FBQyxDQUFDLENBQUE7SUFDRixPQUFPLEdBQUcsQ0FBQTtBQUNkLENBQUMsQ0FBQTtBQVRZLFFBQUEsU0FBUyxhQVNyQjtBQUNNLE1BQU0sWUFBWSxHQUFHLENBQU8sR0FBUSxFQUFFLFFBQWdCLEVBQUUsT0FBa0IsRUFBbUIsRUFBRTtJQUNsRyxJQUFBLGlCQUFTLEVBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO1FBQ3ZDLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQTtRQUNqQixJQUFJLElBQUksRUFBRTtZQUNOLEdBQUcsR0FBRyxJQUFJLENBQUE7U0FDYjtJQUNMLENBQUMsQ0FBQyxDQUFBO0lBQ0YsT0FBTyxHQUFHLENBQUE7QUFDZCxDQUFDLENBQUEsQ0FBQTtBQVJZLFFBQUEsWUFBWSxnQkFReEI7QUFHRCxTQUFnQixVQUFVLENBQUMsR0FBVTtJQUNqQyxNQUFNLFdBQVcsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUN6RSxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUE7SUFDbEMsT0FBTyxXQUFXLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFO1FBQzdCLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUNyQixPQUFPLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsdUJBQXVCO1NBQ2xEO2FBQU0sSUFBSSxPQUFPLElBQUksS0FBSyxRQUFRLElBQUksSUFBSSxLQUFLLElBQUksRUFBRTtZQUNsRCxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLHdCQUF3QjtTQUNoRTthQUFNLElBQUksT0FBTyxJQUFJLEtBQUssUUFBUSxFQUFFO1lBQ2pDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQTtTQUNoQjtRQUNELE9BQU8sSUFBSSxDQUFBO0lBQ2YsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFO1FBQ1YsSUFBSSxPQUFPLElBQUksS0FBSyxRQUFRLEVBQUU7WUFDMUIsT0FBTyxJQUFJLENBQUE7U0FDZDtRQUNELE9BQU8sSUFBSSxDQUFBO0lBQ2YsQ0FBQyxDQUFDLENBQUE7QUFDTixDQUFDO0FBbEJELGdDQWtCQztBQUNNLE1BQU0sVUFBVSxHQUFHLENBQUMsR0FBVyxFQUFXLEVBQUU7SUFDL0MsSUFBSTtRQUNBLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2IsT0FBTyxJQUFJLENBQUM7S0FDZjtJQUFDLE9BQU8sQ0FBQyxFQUFFO1FBQ1IsT0FBTyxLQUFLLENBQUM7S0FDaEI7QUFDTCxDQUFDLENBQUE7QUFQWSxRQUFBLFVBQVUsY0FPdEI7QUFFTSxNQUFNLE9BQU8sR0FBRyxDQUFDLE9BQWlCLEVBQWEsRUFBRTtJQUNwRCxPQUFPO1FBQ0gsSUFBSSxFQUFFLGVBQU87UUFDYixRQUFRLEVBQUUsZ0JBQVE7UUFDbEIsVUFBVSxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxJQUFBLGNBQVUsRUFBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLE9BQU8sQ0FBQyxTQUFTLENBQUM7UUFDOUQsUUFBUSxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxJQUFBLHVCQUFZLEVBQUMsR0FBRyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUM7UUFDbkQsU0FBUyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDZixJQUFJO2dCQUNBLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQTthQUN6QjtZQUFDLE9BQU8sQ0FBQyxFQUFFO2dCQUNSLGNBQU0sQ0FBQyxLQUFLLENBQUMsNkJBQTZCLENBQUMsTUFBTSxHQUFHLE1BQU0sT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUE7Z0JBQzNFLE9BQU8sR0FBRyxDQUFBO2FBQ2I7UUFDTCxDQUFDO0tBQ0osQ0FBQTtBQUNMLENBQUMsQ0FBQTtBQWZZLFFBQUEsT0FBTyxXQWVuQiJ9 \ No newline at end of file diff --git a/packages/osrl/fs/index.d.ts b/packages/osrl/fs/index.d.ts new file mode 100644 index 00000000..b9d6278b --- /dev/null +++ b/packages/osrl/fs/index.d.ts @@ -0,0 +1,13 @@ +export { sync as dir } from '@plastichub/fs/dir'; +export declare const exists: (filepath: string) => Promise; +export declare function readFile(filepath: string): any; +export declare function existsSync(filepath: string): boolean; +export declare function readFileSync(filepath: string): string; +export declare function resolve(root: string, file: string, ext: string): string; +export declare const defaultFS: (resolve: any) => { + exists: (f: any) => Promise; + existsSync: typeof existsSync; + readFile: (f: any) => any; + readFileSync: typeof readFileSync; + resolve: any; +}; diff --git a/packages/osrl/fs/index.js b/packages/osrl/fs/index.js new file mode 100644 index 00000000..b7597074 --- /dev/null +++ b/packages/osrl/fs/index.js @@ -0,0 +1,70 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.defaultFS = exports.resolve = exports.readFileSync = exports.existsSync = exports.readFile = exports.exists = exports.dir = void 0; +const path = require("path"); +const path_1 = require("path"); +const fs_1 = require("fs"); +var dir_1 = require("@plastichub/fs/dir"); +Object.defineProperty(exports, "dir", { enumerable: true, get: function () { return dir_1.sync; } }); +const read_1 = require("@plastichub/fs/read"); +const read_2 = require("@plastichub/fs/read"); +const _ = require("../liquid/underscore"); +const exists = (filepath) => statAsync(filepath).then(() => true).catch(() => false); +exports.exists = exists; +const filters_1 = require("../filters"); +const plugins_1 = require("../plugins/"); +const statAsync = _.promisify(fs_1.stat); +const csv = (file) => { + let content = (0, read_1.sync)(file); + return new Promise((resolve) => { + resolve((0, plugins_1.csvToMarkdown)(content)); + }); +}; +const plugins = { + '.csv': csv +}; +function readFile(filepath) { + const parts = path.parse(filepath); + if (plugins[parts.ext]) { + return plugins[parts.ext](filepath); + } + if (filepath.includes('.md.') || filepath.endsWith('.md')) { + let content = (0, read_1.sync)(filepath); + return new Promise((resolve) => { + resolve((0, filters_1.md2html)(content)); + }); + } + return (0, read_2.async)(filepath); +} +exports.readFile = readFile; +function existsSync(filepath) { + try { + (0, fs_1.statSync)(filepath); + return true; + } + catch (err) { + return false; + } +} +exports.existsSync = existsSync; +function readFileSync(filepath) { + return (0, fs_1.readFileSync)(filepath, 'utf8'); +} +exports.readFileSync = readFileSync; +function resolve(root, file, ext) { + if (!(0, path_1.extname)(file)) + file += ext; + return (0, path_1.resolve)(root, file); +} +exports.resolve = resolve; +const defaultFS = (resolve) => { + return { + exists: (f) => (0, exports.exists)(f), + existsSync: existsSync, + readFile: (f) => readFile(resolve(f)), + readFileSync: readFileSync, + resolve + }; +}; +exports.defaultFS = defaultFS; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvZnMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EsNkJBQTRCO0FBQzVCLCtCQUFzRDtBQUN0RCwyQkFBcUU7QUFFckUsMENBQWdEO0FBQXZDLDBGQUFBLElBQUksT0FBTztBQUNwQiw4Q0FBa0Q7QUFDbEQsOENBQXdEO0FBQ3hELDBDQUF5QztBQUVsQyxNQUFNLE1BQU0sR0FBRyxDQUFDLFFBQWdCLEVBQUUsRUFBRSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQXZGLFFBQUEsTUFBTSxVQUFpRjtBQUVwRyx3Q0FBb0M7QUFDcEMseUNBQTJDO0FBRzNDLE1BQU0sU0FBUyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsU0FBSSxDQUFDLENBQUE7QUFDbkMsTUFBTSxHQUFHLEdBQUcsQ0FBQyxJQUFZLEVBQUUsRUFBRTtJQUN6QixJQUFJLE9BQU8sR0FBRyxJQUFBLFdBQUksRUFBQyxJQUFJLENBQVcsQ0FBQztJQUNuQyxPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7UUFDM0IsT0FBTyxDQUFDLElBQUEsdUJBQWEsRUFBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQ3BDLENBQUMsQ0FBQyxDQUFDO0FBQ1AsQ0FBQyxDQUFBO0FBRUQsTUFBTSxPQUFPLEdBQUc7SUFDWixNQUFNLEVBQUUsR0FBRztDQUNkLENBQUE7QUFFRCxTQUFnQixRQUFRLENBQUMsUUFBZ0I7SUFDckMsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNuQyxJQUFJLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUU7UUFDcEIsT0FBTyxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0tBQ3ZDO0lBQ0QsSUFBSSxRQUFRLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLFFBQVEsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUU7UUFDdkQsSUFBSSxPQUFPLEdBQUcsSUFBQSxXQUFJLEVBQUMsUUFBUSxDQUFXLENBQUM7UUFDdkMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO1lBQzNCLE9BQU8sQ0FBQyxJQUFBLGlCQUFPLEVBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztRQUM5QixDQUFDLENBQUMsQ0FBQztLQUNOO0lBQ0QsT0FBTyxJQUFBLFlBQVMsRUFBQyxRQUFRLENBQUMsQ0FBQztBQUMvQixDQUFDO0FBWkQsNEJBWUM7QUFDRCxTQUFnQixVQUFVLENBQUMsUUFBZ0I7SUFDdkMsSUFBSTtRQUNBLElBQUEsYUFBUSxFQUFDLFFBQVEsQ0FBQyxDQUFBO1FBQ2xCLE9BQU8sSUFBSSxDQUFBO0tBQ2Q7SUFBQyxPQUFPLEdBQUcsRUFBRTtRQUNWLE9BQU8sS0FBSyxDQUFBO0tBQ2Y7QUFDTCxDQUFDO0FBUEQsZ0NBT0M7QUFDRCxTQUFnQixZQUFZLENBQUMsUUFBZ0I7SUFDekMsT0FBTyxJQUFBLGlCQUFnQixFQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQTtBQUM3QyxDQUFDO0FBRkQsb0NBRUM7QUFDRCxTQUFnQixPQUFPLENBQUMsSUFBWSxFQUFFLElBQVksRUFBRSxHQUFXO0lBQzNELElBQUksQ0FBQyxJQUFBLGNBQU8sRUFBQyxJQUFJLENBQUM7UUFBRSxJQUFJLElBQUksR0FBRyxDQUFBO0lBQy9CLE9BQU8sSUFBQSxjQUFXLEVBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFBO0FBQ2xDLENBQUM7QUFIRCwwQkFHQztBQUVNLE1BQU0sU0FBUyxHQUFHLENBQUMsT0FBTyxFQUFFLEVBQUU7SUFDakMsT0FBTztRQUNILE1BQU0sRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBQSxjQUFNLEVBQUMsQ0FBQyxDQUFDO1FBQ3hCLFVBQVUsRUFBRSxVQUFVO1FBQ3RCLFFBQVEsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNyQyxZQUFZLEVBQUUsWUFBWTtRQUMxQixPQUFPO0tBQ1YsQ0FBQTtBQUNMLENBQUMsQ0FBQTtBQVJZLFFBQUEsU0FBUyxhQVFyQiJ9 \ No newline at end of file diff --git a/packages/osrl/index.d.ts b/packages/osrl/index.d.ts new file mode 100644 index 00000000..15e5a48a --- /dev/null +++ b/packages/osrl/index.d.ts @@ -0,0 +1,8 @@ +export * from './liquid'; +export * from './Engine'; +export * from './options'; +export * from './types'; +import { IObjectLiteral } from "@plastichub/core"; +export declare const logger: import("@plastichub/core/debug").Logger; +export { getContext } from './Engine'; +export declare const substitute: (alt: boolean, template: string, vars: IObjectLiteral) => any; diff --git a/packages/osrl/index.js b/packages/osrl/index.js new file mode 100644 index 00000000..8fbba2e6 --- /dev/null +++ b/packages/osrl/index.js @@ -0,0 +1,30 @@ +"use strict"; +var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { enumerable: true, get: function() { return m[k]; } }; + } + Object.defineProperty(o, k2, desc); +}) : (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +})); +var __exportStar = (this && this.__exportStar) || function(m, exports) { + for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.substitute = exports.getContext = exports.logger = void 0; +__exportStar(require("./liquid"), exports); +__exportStar(require("./Engine"), exports); +__exportStar(require("./options"), exports); +__exportStar(require("./types"), exports); +const constants_1 = require("./constants"); +const debug_1 = require("@plastichub/core/debug"); +const strings_1 = require("@plastichub/core/strings"); +exports.logger = (0, debug_1.logger)(constants_1.MODULE_NAME); +var Engine_1 = require("./Engine"); +Object.defineProperty(exports, "getContext", { enumerable: true, get: function () { return Engine_1.getContext; } }); +const substitute = (alt, template, vars) => alt ? (0, strings_1.substituteAlt)(template, vars) : (0, strings_1.substitute)(template, vars); +exports.substitute = substitute; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJzcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSwyQ0FBd0I7QUFDeEIsMkNBQXdCO0FBQ3hCLDRDQUF5QjtBQUN6QiwwQ0FBdUI7QUFFdkIsMkNBQXlDO0FBQ3pDLGtEQUEwRDtBQUMxRCxzREFBcUc7QUFHeEYsUUFBQSxNQUFNLEdBQUcsSUFBQSxjQUFPLEVBQUMsdUJBQVcsQ0FBQyxDQUFBO0FBQzFDLG1DQUFxQztBQUE1QixvR0FBQSxVQUFVLE9BQUE7QUFDWixNQUFNLFVBQVUsR0FBRyxDQUFDLEdBQVksRUFBRSxRQUFnQixFQUFFLElBQW9CLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBQSx1QkFBYyxFQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBQSxvQkFBVyxFQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUExSSxRQUFBLFVBQVUsY0FBZ0kifQ== \ No newline at end of file diff --git a/packages/osrl/lib.js b/packages/osrl/lib.js new file mode 100644 index 00000000..a0ed989d --- /dev/null +++ b/packages/osrl/lib.js @@ -0,0 +1,19 @@ +"use strict"; +var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); +}) : (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +})); +var __exportStar = (this && this.__exportStar) || function(m, exports) { + for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.getContext = void 0; +__exportStar(require("./liquid"), exports); +__exportStar(require("./Engine"), exports); +__exportStar(require("./options"), exports); +var Engine_1 = require("./Engine"); +Object.defineProperty(exports, "getContext", { enumerable: true, get: function () { return Engine_1.getContext; } }); +//# sourceMappingURL=lib.js.map \ No newline at end of file diff --git a/packages/osrl/lib/HexUtils.d.ts b/packages/osrl/lib/HexUtils.d.ts new file mode 100644 index 00000000..82a6a473 --- /dev/null +++ b/packages/osrl/lib/HexUtils.d.ts @@ -0,0 +1,106 @@ +/** + * Converts all escapes in the text str to characters, and can interpret numbers as escapes too. + * @param str {string} the text to be converted. + * @param numbers {string} enum [none, hex, dec, utf8, utf16], what to treat numbers as. + * @returns {string|*} + * @memberOf module:xide/utils/StringUtils + */ +export declare const convertAllEscapes: (str: string, numbers: string) => string | any; +/** + * Converts a string containing CSS escapes to a string of characters, up to 6 digit escapes to characters & throw + * away any following whitespace. + * @param str {string} str: string, the input + * @param convertbackslash {boolean} true if you want \x etc to become x or \a to be treated as 0xA + * @returns {*} + * @memberOf module:xide/utils/StringUtils + */ +export declare const convertCSS2Char: (str: string, convertbackslash: boolean) => string; +/** + * Converts a string containing JavaScript or Java escapes to a string of characters + * @param str {string} str: string, the input + * @param shortEscapes {boolean} if true the function will convert \b etc to characters + * @returns {*} + * @memberOf module:xide/utils/StringUtils + */ +export declare const convertjEsc2Char: (str: string, shortEscapes: boolean) => any; +/** + * + * @param n + * @returns {string} + */ +export declare const to_hex: (n: any) => string; +/** + * Unescape hex sequences like 'x0d' to chars + * @param str {string} + * @returns {string} + * @memberOf module:xide/utils/StringUtils + */ +export declare const replaceHex: (str: string) => string; +/** + * Convert a string into hex values + * @memberOf module:xide/utils/StringUtils + * @param string {string} + * @returns {string} + */ +export declare const stringToHex: (string: any) => string; +/** + * Returns buffer compatible string + * @param string + * @example + * utils.stringToHex("a b") returns "61 20 62" + * @memberOf module:xide/utils/StringUtils + * @returns {string} + */ +export declare const stringToBufferStr: (string: any) => string; +/** + * Return an integer array (as Buffer) for a string + * @param string + * @returns {Array} + */ +export declare const stringToBuffer: (string: any) => any[]; +/** + * + * @param bufferString {String} The serialized buffer formatted as 00,02 (decimal values) + * @memberOf module:xide/utils/StringUtils + * @returns {String} The hex version of the buffer string + */ +export declare const bufferToHexString: (bufferString: any) => string; +/** + * + * @param bufferString {String} The serialized buffer formatted as 00,02 (decimal values) + * @memberOf module:xide/utils/StringUtils + * @returns {integer} The integer array + */ +export declare const bufferFromDecString: (bufferString: any) => any; +/** + * Return a buffer like formatted string "0a 12" + * @param string + * @memberOf module:xide/utils/StringUtils + * @returns {string} + */ +export declare const stringFromDecString: (string: any) => string; +/** + * + * @param string + * @returns {string} + */ +export declare const stringToHex2: (string: any) => string; +/** + * + * @param string {string} + * @returns {string} + */ +export declare const hexToString: (string: string) => string; +/** + * + * @param buffer + * @returns {string} + */ +export declare const prettyHex: (buffer: any) => string; +/** + * + * @param str + * @param prefix + * @returns {string} + */ +export declare const hexEncode: (str: any, prefix: any) => string; diff --git a/packages/osrl/lib/HexUtils.js b/packages/osrl/lib/HexUtils.js new file mode 100644 index 00000000..0acfa46c --- /dev/null +++ b/packages/osrl/lib/HexUtils.js @@ -0,0 +1,1330 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.hexEncode = exports.prettyHex = exports.hexToString = exports.stringToHex2 = exports.stringFromDecString = exports.bufferFromDecString = exports.bufferToHexString = exports.stringToBuffer = exports.stringToBufferStr = exports.stringToHex = exports.replaceHex = exports.to_hex = exports.convertjEsc2Char = exports.convertCSS2Char = exports.convertAllEscapes = void 0; +const utils = {}; +const types = {}; +const json = {}; +const _ = require("lodash"); +/** + * Converts a single hex number to a character. note that no checking is performed to ensure that this is just a hex + * number, eg. no spaces etc. + * @param hex {string} the hex codepoint to be converted. + * @returns {string} + * @memberOf module:xide/utils/StringUtils + */ +const hex2char = (hex) => { + let result = ''; + let n = parseInt(hex, 16); + if (n <= 0xFFFF) { + result += String.fromCharCode(n); + } + else if (n <= 0x10FFFF) { + n -= 0x10000; + result += String.fromCharCode(0xD800 | (n >> 10)) + String.fromCharCode(0xDC00 | (n & 0x3FF)); + } + else { + result += 'hex2Char error: Code point out of range: ' + dec2hex(n); + } + return result; +}; +/** + * Converts a single string representing a decimal number to a character. Note that no checking is performed to + * ensure that this is just a hex number, eg. no spaces etc. + * @param n {string} dec: string, the dec codepoint to be converted + * @returns {string} + */ +const dec2char = (n) => { + let result = ''; + if (n <= 0xFFFF) { + result += String.fromCharCode(n); + } + else if (n <= 0x10FFFF) { + n -= 0x10000; + result += String.fromCharCode(0xD800 | (n >> 10)) + String.fromCharCode(0xDC00 | (n & 0x3FF)); + } + else { + result += 'dec2char error: Code point out of range: ' + dec2hex(n); + } + return result; +}; +const dec2hex = (textString) => (textString + 0).toString(16).toUpperCase(); +let hexequiv = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F']; +const dec2hex2 = (textString) => hexequiv[(textString >> 4) & 0xF] + hexequiv[textString & 0xF]; +const dec2hex4 = (textString) => { + return hexequiv[(textString >> 12) & 0xF] + hexequiv[(textString >> 8) & 0xF] + + hexequiv[(textString >> 4) & 0xF] + hexequiv[textString & 0xF]; +}; +const convertChar2CP = (textString) => { + let haut = 0; + let n = 0; + let CPstring = ''; + for (let i = 0; i < textString.length; i++) { + let b = textString.charCodeAt(i); + if (b < 0 || b > 0xFFFF) { + CPstring += 'Error in convertChar2CP: byte out of range ' + dec2hex(b) + '!'; + } + if (haut !== 0) { + if (0xDC00 <= b && b <= 0xDFFF) { + CPstring += dec2hex(0x10000 + ((haut - 0xD800) << 10) + (b - 0xDC00)) + ' '; + haut = 0; + continue; + } + else { + CPstring += 'Error in convertChar2CP: surrogate out of range ' + dec2hex(haut) + '!'; + haut = 0; + } + } + if (0xD800 <= b && b <= 0xDBFF) { + haut = b; + } + else { + CPstring += dec2hex(b) + ' '; + } + } + return CPstring.substring(0, CPstring.length - 1); +}; +/** + * Converts a string containing &#x...; escapes to a string of characters. + */ +const removeWhitespacesFromHexSequence = (str) => { + // convert up to 6 digit escapes to characters + str = str.replace(/0x([A-Fa-f0-9]{1,4})(\s)?/g, + // tslint:disable-next-line:space-before-function-paren + (matchstr, parens) => hex2char(parens)); + return str; +}; +// ========================== Converting to characters ============================================== +/** + * Converts all escapes in the text str to characters, and can interpret numbers as escapes too. + * @param str {string} the text to be converted. + * @param numbers {string} enum [none, hex, dec, utf8, utf16], what to treat numbers as. + * @returns {string|*} + * @memberOf module:xide/utils/StringUtils + */ +const convertAllEscapes = (str, numbers) => { + let sle = false; + str = convertUnicode2Char(str); + str = removeWhitespacesFromHexSequence(str); + str = convertZeroX2Char(str); + str = convertHexNCR2Char(str); + str = convertDecNCR2Char(str); + if (sle) { + str = (0, exports.convertjEsc2Char)(str, true); + } + else { + str = (0, exports.convertjEsc2Char)(str, false); + str = (0, exports.convertCSS2Char)(str, false); + } + str = convertpEnc2Char(str); + str = convertEntities2Char(str); + str = convertNumbers2Char(str, numbers); + return str; +}; +exports.convertAllEscapes = convertAllEscapes; +/** + * Converts a string containing U+... escapes to a string of characters. + * @param str {string} the input + * @returns {string} + * @memberOf module:xide/utils/StringUtils + */ +const convertUnicode2Char = (str) => { + // first convert the 6 digit escapes to characters + str = str.replace(/[Uu]\+10([A-Fa-f0-9]{4})/g, (matchstr, parens) => hex2char('10' + parens)); + // next convert up to 5 digit escapes to characters + str = str.replace(/[Uu]\+([A-Fa-f0-9]{1,5})/g, (matchstr, parens) => hex2char(parens)); + return str; +}; +/** + * Converts a string containing &#x...; escapes to a string of characters + * @param str + * @returns {*} + */ +const convertHexNCR2Char = (str) => { + // convert up to 6 digit escapes to characters + str = str.replace(/&#x([A-Fa-f0-9]{1,6});/g, (matchstr, parens) => hex2char(parens)); + return str; +}; +/** + * Converts a string containing &#...; escapes to a string of characters + * @param str + * @returns {*} + */ +const convertDecNCR2Char = (str) => { + // convert up to 6 digit escapes to characters + str = str.replace(/&#([0-9]{1,7});/g, (matchstr, parens) => dec2char(parens)); + return str; +}; +/** + * Converts a string containing 0x... escapes to a string of characters, up to 6 digit escapes to characters. + * @param str + * @returns {*} + */ +const convertZeroX2Char = (str) => { + str = str.replace(/0x([A-Fa-f0-9]{1,6})/g, (matchstr, parens) => hex2char(parens)); + return str; +}; +/** + * Converts a string containing CSS escapes to a string of characters, up to 6 digit escapes to characters & throw + * away any following whitespace. + * @param str {string} str: string, the input + * @param convertbackslash {boolean} true if you want \x etc to become x or \a to be treated as 0xA + * @returns {*} + * @memberOf module:xide/utils/StringUtils + */ +const convertCSS2Char = (str, convertbackslash) => { + if (convertbackslash) { + str = str.replace(/\\([A-Fa-f0-9]{1,6})(\s)?/g, (matchstr, parens) => hex2char(parens)); + str = str.replace(/\\/g, ''); + } + else { + str = str.replace(/\\([A-Fa-f0-9]{2,6})(\s)?/g, (matchstr, parens) => hex2char(parens)); + } + return str; +}; +exports.convertCSS2Char = convertCSS2Char; +/** + * Converts a string containing JavaScript or Java escapes to a string of characters + * @param str {string} str: string, the input + * @param shortEscapes {boolean} if true the function will convert \b etc to characters + * @returns {*} + * @memberOf module:xide/utils/StringUtils + */ +const convertjEsc2Char = (str, shortEscapes) => { + // convert ES6 escapes to characters + str = str.replace(/\\u\{([A-Fa-f0-9]{1,})\}/g, (matchstr, parens) => hex2char(parens)); + // convert \U and 6 digit escapes to characters + str = str.replace(/\\U([A-Fa-f0-9]{8})/g, (matchstr, parens) => hex2char(parens)); + // convert \u and 6 digit escapes to characters + str = str.replace(/\\u([A-Fa-f0-9]{4})/g, (matchstr, parens) => hex2char(parens)); + // convert \b etc to characters, if flag set + if (shortEscapes) { + str = str.replace(/\\b/g, '\b'); + str = str.replace(/\\t/g, '\t'); + str = str.replace(/\\n/g, '\n'); + str = str.replace(/\\v/g, '\v'); + str = str.replace(/\\f/g, '\f'); + str = str.replace(/\\r/g, '\r'); + str = str.replace(/\\\'/g, '\''); + str = str.replace(/\\\"/g, '\"'); + str = str.replace(/\\\\/g, '\\'); + } + return str; +}; +exports.convertjEsc2Char = convertjEsc2Char; +/** + * Converts a string containing precent encoded escapes to a string of characters + * @param str {string} the input + * @returns {string} + * @memberOf module:xide/utils/StringUtils + */ +const convertpEnc2Char = (str) => { + // find runs of hex numbers separated by % and send them for conversion + str = str.replace(/((%[A-Fa-f0-9]{2})+)/g, (matchstr, parens) => convertpEsc2Char(parens)); + return str; +}; +/** + * converts a string containing HTML/XML character entities to a string of characters + * @param str {string} the input + * @returns {string} + * @memberOf module:xide/utils/StringUtils + */ +function convertEntities2Char(str) { + let entities = {}; + str = str.replace(/&([A-Za-z0-9]+);/g, function (matchstr, parens) { + if (parens in entities) { + return entities[parens]; + } + else { + return matchstr; + } + }); + return str; +} +/** + * Converts a string containing HTML/XML character entities to a string of characters + * @param str {string} the input + * @param type {string} none, hex, dec, utf8, utf16. what to treat numbers as + * @returns {string} + * @memberOf module:xide/utils/StringUtils + */ +function convertNumbers2Char(str, type) { + if (type === 'hex') { + str = str.replace(/(\b[A-Fa-f0-9]{2,6}\b)/g, (matchstr, parens) => hex2char(parens)); + } + else if (type === 'dec') { + str = str.replace(/(\b[0-9]+\b)/g, function (matchstr, parens) { + return dec2char(parens); + }); + } + else if (type === 'utf8') { + str = str.replace(/(( [A-Fa-f0-9]{2})+)/g, function (matchstr, parens) { + return convertUTF82Char(parens); + }); + } + else if (type === 'utf16') { + str = str.replace(/(( [A-Fa-f0-9]{1,6})+)/g, function (matchstr, parens) { + return convertUTF162Char(parens); + }); + } + return str; +} +/** + * Converts to characters a sequence of space-separated hex numbers representing bytes in utf8. + * @param str {string} the input + * @returns {*} + * @memberOf module:xide/utils/StringUtils + */ +function convertUTF82Char(str) { + let outputString = ''; + let counter = 0; + let n = 0; + // remove leading and trailing spaces + str = str.replace(/^\s+/, ''); + str = str.replace(/\s+$/, ''); + if (str.length === 0) { + return ''; + } + str = str.replace(/\s+/g, ' '); + let listArray = str.split(' '); + for (let i = 0; i < listArray.length; i++) { + let b = parseInt(listArray[i], 16); // alert('b:'+dec2hex(b)); + switch (counter) { + case 0: + if (0 <= b && b <= 0x7F) { // 0xxxxxxx + outputString += dec2char(b); + } + else if (0xC0 <= b && b <= 0xDF) { // 110xxxxx + counter = 1; + n = b & 0x1F; + } + else if (0xE0 <= b && b <= 0xEF) { // 1110xxxx + counter = 2; + n = b & 0xF; + } + else if (0xF0 <= b && b <= 0xF7) { // 11110xxx + counter = 3; + n = b & 0x7; + } + else { + outputString += 'convertUTF82Char: error1 ' + dec2hex(b) + '! '; + } + break; + case 1: + if (b < 0x80 || b > 0xBF) { + outputString += 'convertUTF82Char: error2 ' + dec2hex(b) + '! '; + } + counter--; + outputString += dec2char((n << 6) | (b - 0x80)); + n = 0; + break; + case 2: + case 3: + if (b < 0x80 || b > 0xBF) { + outputString += 'convertUTF82Char: error3 ' + dec2hex(b) + '! '; + } + n = (n << 6) | (b - 0x80); + counter--; + break; + } + } + return outputString.replace(/ $/, ''); +} +/** + * Converts a string of UTF-16 code units to characters + * @param str {string} the input, the equence of UTF16 code units, separated by spaces. + * @returns {string|null} + * @memberOf module:xide/utils/StringUtils + */ +function convertUTF162Char(str) { + let highsurrogate = 0; + let outputString = ''; + // remove leading and multiple spaces + str = str.replace(/^\s+/, ''); + str = str.replace(/\s+$/, ''); + if (str.length === 0) { + return null; + } + str = str.replace(/\s+/g, ' '); + let listArray = str.split(' '); + for (let i = 0; i < listArray.length; i++) { + let b = parseInt(listArray[i], 16); + if (b < 0 || b > 0xFFFF) { + outputString += '!Error in convertUTF162Char: unexpected value, b=' + dec2hex(b) + '!'; + } + if (highsurrogate !== 0) { + if (0xDC00 <= b && b <= 0xDFFF) { + outputString += dec2char(0x10000 + ((highsurrogate - 0xD800) << 10) + (b - 0xDC00)); + highsurrogate = 0; + continue; + } + else { + outputString += 'Error in convertUTF162Char: low surrogate expected, b=' + dec2hex(b) + '!'; + highsurrogate = 0; + } + } + if (0xD800 <= b && b <= 0xDBFF) { // start of supplementary character + highsurrogate = b; + } + else { + outputString += dec2char(b); + } + } + return outputString; +} +/** + * Converts to characters a sequence of %-separated hex numbers representing bytes in utf8. + * @param str {string} the input + * @returns {string} + * @memberOf module:xide/utils/StringUtils + */ +function convertpEsc2Char(str) { + let outputString = ''; + let counter = 0; + let n = 0; + let listArray = str.split('%'); + for (let i = 1; i < listArray.length; i++) { + let b = parseInt(listArray[i], 16); + switch (counter) { + case 0: + if (0 <= b && b <= 0x7F) { // 0xxxxxxx + outputString += dec2char(b); + } + else if (0xC0 <= b && b <= 0xDF) { // 110xxxxx + counter = 1; + n = b & 0x1F; + } + else if (0xE0 <= b && b <= 0xEF) { // 1110xxxx + counter = 2; + n = b & 0xF; + } + else if (0xF0 <= b && b <= 0xF7) { // 11110xxx + counter = 3; + n = b & 0x7; + } + else { + outputString += 'convertpEsc2Char: error ' + dec2hex(b) + '! '; + } + break; + case 1: + if (b < 0x80 || b > 0xBF) { + outputString += 'convertpEsc2Char: error ' + dec2hex(b) + '! '; + } + counter--; + outputString += dec2char((n << 6) | (b - 0x80)); + n = 0; + break; + case 2: + case 3: + if (b < 0x80 || b > 0xBF) { + outputString += 'convertpEsc2Char: error ' + dec2hex(b) + '! '; + } + n = (n << 6) | (b - 0x80); + counter--; + break; + } + } + return outputString; +} +/** + * Converts XML or HTML text to characters by removing all character entities and ncrs. + * @param str {string} the input + * @returns {string} + * @memberOf module:xide/utils/StringUtils + */ +function convertXML2Char(str) { + // remove various escaped forms + str = convertHexNCR2Char(str); + str = convertDecNCR2Char(str); + str = convertEntities2Char(str); + return str; +} +// ============================== Convert to escapes =============================================== +/** + * replaces xml/html syntax-sensitive characters in a string with entities + * also replaces invisible and ambiguous characters with escapes (list to be extended). + * @param str + * @param parameters {boolean] if true, invisible characters are converted to NCRs + * @returns {*} + * @memberOf module:xide/utils/StringUtils + */ +function convertCharStr2XML(str, parameters) { + // bidimarkup: boolean, if true, bidi rle/lre/pdf/rli/lri/fsi/pdi characters are converted to markup + str = str.replace(/&/g, '&'); + str = str.replace(/"/g, '"'); + str = str.replace(//g, '>'); + // replace invisible and ambiguous characters + if (parameters.match(/convertinvisibles/)) { + str = str.replace(/\u2066/g, '⁦'); // lri + str = str.replace(/\u2067/g, '⁧'); // rli + str = str.replace(/\u2068/g, '⁨'); // fsi + str = str.replace(/\u2069/g, '⁩'); // pdi + str = str.replace(/\u202A/g, '‪'); // lre + str = str.replace(/\u202B/g, '‫'); // rle + str = str.replace(/\u202D/g, '‭'); // lro + str = str.replace(/\u202E/g, '‮'); // rlo + str = str.replace(/\u202C/g, '‬'); // pdf + str = str.replace(/\u200E/g, '‎'); // lrm + str = str.replace(/\u200F/g, '‏'); // rlm + str = str.replace(/\u2000/g, ' '); // en quad + str = str.replace(/\u2001/g, ' '); // em quad + str = str.replace(/\u2002/g, ' '); // en space + str = str.replace(/\u2003/g, ' '); // em space + str = str.replace(/\u2004/g, ' '); // 3 per em space + str = str.replace(/\u2005/g, ' '); // 4 per em space + str = str.replace(/\u2006/g, ' '); // 6 per em space + str = str.replace(/\u2007/g, ' '); // figure space + str = str.replace(/\u2008/g, ' '); // punctuation space + str = str.replace(/\u2009/g, ' '); // thin space + str = str.replace(/\u200A/g, ' '); // hair space + str = str.replace(/\u200B/g, '​'); // zwsp + str = str.replace(/\u205F/g, ' '); // mmsp + // str = str.replace(/\uA0/g, ' ') // nbsp + str = str.replace(/\u3000/g, ' '); // ideographic sp + str = str.replace(/\u202F/g, ' '); // nnbsp + str = str.replace(/\u180B/g, '᠋'); // mfvs1 + str = str.replace(/\u180C/g, '᠌'); // mfvs2 + str = str.replace(/\u180D/g, '᠍'); // mfvs3 + str = str.replace(/\u200C/g, '‌'); // zwnj + str = str.replace(/\u200D/g, '‍'); // zwj + str = str.replace(/\u2028/g, '
'); // line sep + str = str.replace(/\u206A/g, ''); // iss + str = str.replace(/\u206B/g, ''); // ass + str = str.replace(/\u206C/g, ''); // iafs + str = str.replace(/\u206D/g, ''); // aafs + str = str.replace(/\u206E/g, ''); // nads + str = str.replace(/\u206F/g, ''); // nods + } + // convert lre/rle/pdf/rli/lri/fsi/pdi to markup + if (parameters.match(/bidimarkup/)) { + str = str.replace(/\u2066/g, '<span dir="ltr">'); // lri + str = str.replace(/\u2067/g, '<span dir="rtl">'); // rli + str = str.replace(/\u2068/g, '<span dir="auto">'); // fsi + str = str.replace(/\u2069/g, '</span>'); // pdi + str = str.replace(/\u202A/g, '<span dir="ltr">'); // + str = str.replace(/\u202B/g, '<span dir="rtl">'); + str = str.replace(/\u202C/g, '</span>'); + str = str.replace(/‪/g, '<span dir="ltr">'); + str = str.replace(/‫/g, '<span dir="rtl">'); + // str = str.replace(/\u202D/g, '<bdo dir="ltr">') + // str = str.replace(/\u202E/g, '<bdo dir="rtl">') + str = str.replace(/‬/g, '</span>'); + } + return str; +} +/** + * Converts a string of characters to code points or code point based escapes. + * @param str {string} the input + * @param parameters {string} enum [ascii, latin1], a set of characters to not convert. + * @param pad {boolean} if true, hex numbers lower than 1000 are padded with zeros. + * @param before {string} any characters to include before a code point (eg. &#x for NCRs). + * @param after {string} any characters to include after (eg. ; for NCRs). + * @param base {string] enum [hex, dec], hex or decimal output. + * @returns {string} + * @memberOf module:xide/utils/StringUtils + */ +function convertCharStr2SelectiveCPs(str, parameters, pad, before, after, base) { + let haut = 0; + let n = 0; + let cp; + let CPstring = ''; + for (let i = 0; i < str.length; i++) { + let b = str.charCodeAt(i); + if (b < 0 || b > 0xFFFF) { + CPstring += 'Error in convertCharStr2SelectiveCPs: byte out of range ' + dec2hex(b) + '!'; + } + if (haut !== 0) { + if (0xDC00 <= b && b <= 0xDFFF) { + if (base === 'hex') { + CPstring += before + dec2hex(0x10000 + ((haut - 0xD800) << 10) + (b - 0xDC00)) + after; + } + else { + cp = 0x10000 + ((haut - 0xD800) << 10) + (b - 0xDC00); + CPstring += before + cp + after; + } + haut = 0; + continue; + } + else { + CPstring += 'Error in convertCharStr2SelectiveCPs: surrogate out of range ' + dec2hex(haut) + '!'; + haut = 0; + } + } + if (0xD800 <= b && b <= 0xDBFF) { + haut = b; + } + else { + if (parameters.match(/ascii/) && b <= 127) { // && b != 0x3E && b != 0x3C && b != 0x26) { + CPstring += str.charAt(i); + } + else if (b <= 255 && parameters.match(/latin1/)) { // && b != 0x3E && b != 0x3C && b != 0x26) { + CPstring += str.charAt(i); + } + else { + if (base === 'hex') { + cp = dec2hex(b); + if (pad) { + while (cp.length < 4) { + cp = '0' + cp; + } + } + } + else { + cp = b; + } + CPstring += before + cp + after; + } + } + } + return CPstring; +} +/** + * + * @param textString + * @returns {string} + */ +function convertCharStr2HexNCR(textString) { + let outputString = ''; + textString = textString.replace(/^\s+/, ''); + if (textString.length === 0) { + return ''; + } + textString = textString.replace(/\s+/g, ' '); + let listArray = textString.split(' '); + for (let i = 0; i < listArray.length; i++) { + let n = parseInt(listArray[i], 16); + outputString += '&#x' + dec2hex(n) + ';'; + } + return (outputString); +} +/** + * + * @param str {string] sequence of Unicode characters + * @returns {string} + */ +function convertCharStr2pEsc(str) { + let outputString = ''; + let CPstring = convertChar2CP(str); + if (str.length === 0) { + return ''; + } + // process each codepoint + let listArray = CPstring.split(' '); + for (let i = 0; i < listArray.length; i++) { + let n = parseInt(listArray[i], 16); + // if (i > 0) { outputString += ' ';} + if (n === 0x20) { + outputString += '%20'; + } + else if (n >= 0x41 && n <= 0x5A) { + outputString += String.fromCharCode(n); + } + else if (n >= 0x61 && n <= 0x7A) { + // alpha + outputString += String.fromCharCode(n); + } + else if (n >= 0x30 && n <= 0x39) { + outputString += String.fromCharCode(n); + } + else if (n === 0x2D || n === 0x2E || n === 0x5F || n === 0x7E) { + outputString += String.fromCharCode(n); + } + else if (n <= 0x7F) { + // - . _ ~ + outputString += '%' + dec2hex2(n); + } + else if (n <= 0x7FF) { + outputString += '%' + dec2hex2(0xC0 | ((n >> 6) & 0x1F)) + '%' + dec2hex2(0x80 | (n & 0x3F)); + } + else if (n <= 0xFFFF) { + outputString += '%' + dec2hex2(0xE0 | ((n >> 12) & 0x0F)) + '%' + dec2hex2(0x80 | ((n >> 6) & 0x3F)) + '%' + dec2hex2(0x80 | (n & 0x3F)); + } + else if (n <= 0x10FFFF) { + outputString += '%' + dec2hex2(0xF0 | ((n >> 18) & 0x07)) + '%' + dec2hex2(0x80 | ((n >> 12) & 0x3F)) + '%' + dec2hex2(0x80 | ((n >> 6) & 0x3F)) + '%' + dec2hex2(0x80 | (n & 0x3F)); + } + else { + outputString += '!Error ' + dec2hex(n) + '!'; + } + } + return (outputString); +} +/** + * Converts a string of characters to UTF-8 byte codes, separated by spaces. + * @param str {string} sequence of Unicode characters. + * @returns {string} + * @memberOf module:xide/utils/StringUtils + */ +function convertCharStr2UTF8(str) { + let highsurrogate = 0; + let suppCP; // decimal code point value for a supp char + let n = 0; + let outputString = ''; + for (let i = 0; i < str.length; i++) { + let cc = str.charCodeAt(i); + if (cc < 0 || cc > 0xFFFF) { + outputString += '!Error in convertCharStr2UTF8: unexpected charCodeAt result, cc=' + cc + '!'; + } + if (highsurrogate !== 0) { + if (0xDC00 <= cc && cc <= 0xDFFF) { + suppCP = 0x10000 + ((highsurrogate - 0xD800) << 10) + (cc - 0xDC00); + outputString += ' ' + dec2hex2(0xF0 | ((suppCP >> 18) & 0x07)) + ' ' + dec2hex2(0x80 | ((suppCP >> 12) & 0x3F)) + ' ' + dec2hex2(0x80 | ((suppCP >> 6) & 0x3F)) + ' ' + dec2hex2(0x80 | (suppCP & 0x3F)); + highsurrogate = 0; + continue; + } + else { + outputString += 'Error in convertCharStr2UTF8: low surrogate expected, cc=' + cc + '!'; + highsurrogate = 0; + } + } + if (0xD800 <= cc && cc <= 0xDBFF) { // high surrogate + highsurrogate = cc; + } + else { + if (cc <= 0x7F) { + outputString += ' ' + dec2hex2(cc); + } + else if (cc <= 0x7FF) { + outputString += ' ' + dec2hex2(0xC0 | ((cc >> 6) & 0x1F)) + ' ' + dec2hex2(0x80 | (cc & 0x3F)); + } + else if (cc <= 0xFFFF) { + outputString += ' ' + dec2hex2(0xE0 | ((cc >> 12) & 0x0F)) + ' ' + dec2hex2(0x80 | ((cc >> 6) & 0x3F)) + ' ' + dec2hex2(0x80 | (cc & 0x3F)); + } + } + } + return outputString.substring(1); +} +/** + * Converts a string of characters to UTF-16 code units, separated by spaces. + * @param str {string} sequence of Unicode characters. + * @returns {string} + * @memberOf module:xide/utils/StringUtils + */ +function convertCharStr2UTF16(str) { + let highsurrogate = 0; + let suppCP; + let n = 0; + let outputString = ''; + let result = ''; + for (let i = 0; i < str.length; i++) { + let cc = str.charCodeAt(i); + if (cc < 0 || cc > 0xFFFF) { + outputString += '!Error in convertCharStr2UTF16: unexpected charCodeAt result, cc=' + cc + '!'; + } + if (highsurrogate !== 0) { + if (0xDC00 <= cc && cc <= 0xDFFF) { + suppCP = 0x10000 + ((highsurrogate - 0xD800) << 10) + (cc - 0xDC00); + suppCP -= 0x10000; + outputString += dec2hex4(0xD800 | (suppCP >> 10)) + ' ' + dec2hex4(0xDC00 | (suppCP & 0x3FF)) + ' '; + highsurrogate = 0; + continue; + } + else { + outputString += 'Error in convertCharStr2UTF16: low surrogate expected, cc=' + cc + '!'; + highsurrogate = 0; + } + } + if (0xD800 <= cc && cc <= 0xDBFF) { // start of supplementary character + highsurrogate = cc; + } + else { + result = dec2hex(cc); + while (result.length < 4) { + result = '0' + result; + } + outputString += result + ' '; + } + } + return outputString.substring(0, outputString.length - 1); +} +/** + * Converts a string of characters to JavaScript escapes. + * @param str {string} sequence of Unicode characters. + * @param parameters {string} a semicolon separated string showing ids for checkboxes that are turned on. + * @returns {string} + * @memberOf module:xide/utils/StringUtils + */ +function convertCharStr2jEsc(str, parameters) { + let highsurrogate = 0; + let suppCP; + let pad; + let n = 0; + let pars = parameters.split(';'); + let outputString = ''; + for (let i = 0; i < str.length; i++) { + let cc = str.charCodeAt(i); + if (cc < 0 || cc > 0xFFFF) { + outputString += '!Error in convertCharStr2UTF16: unexpected charCodeAt result, cc=' + cc + '!'; + } + if (highsurrogate !== 0) { // this is a supp char, and cc contains the low surrogate + if (0xDC00 <= cc && cc <= 0xDFFF) { + suppCP = 0x10000 + ((highsurrogate - 0xD800) << 10) + (cc - 0xDC00); + if (parameters.match(/cstyleSC/)) { + pad = suppCP.toString(16); + while (pad.length < 8) { + pad = '0' + pad; + } + outputString += '\\U' + pad; + } + else if (parameters.match(/es6styleSC/)) { + pad = suppCP.toString(16); + outputString += '\\u{' + pad + '}'; + } + else { + suppCP -= 0x10000; + outputString += '\\u' + dec2hex4(0xD800 | (suppCP >> 10)) + '\\u' + dec2hex4(0xDC00 | (suppCP & 0x3FF)); + } + highsurrogate = 0; + continue; + } + else { + outputString += 'Error in convertCharStr2UTF16: low surrogate expected, cc=' + cc + '!'; + highsurrogate = 0; + } + } + if (0xD800 <= cc && cc <= 0xDBFF) { // start of supplementary character + highsurrogate = cc; + } + else { // this is a BMP character + // outputString += dec2hex(cc) + ' '; + switch (cc) { + case 0: + outputString += '\\0'; + break; + case 8: + outputString += '\\b'; + break; + case 9: + if (parameters.match(/noCR/)) { + outputString += '\\t'; + } + else { + outputString += '\t'; + } + break; + case 10: + if (parameters.match(/noCR/)) { + outputString += '\\n'; + } + else { + outputString += '\n'; + } + break; + case 13: + if (parameters.match(/noCR/)) { + outputString += '\\r'; + } + else { + outputString += '\r'; + } + break; + case 11: + outputString += '\\v'; + break; + case 12: + outputString += '\\f'; + break; + case 34: + if (parameters.match(/noCR/)) { + outputString += '\\\"'; + } + else { + outputString += '"'; + } + break; + case 39: + if (parameters.match(/noCR/)) { + outputString += '\\\\'; + } + else { + outputString += '\''; + } + break; + case 92: + outputString += '\\\\'; + break; + default: + if (cc > 0x1f && cc < 0x7F) { + outputString += String.fromCharCode(cc); + } + else { + pad = cc.toString(16).toUpperCase(); + while (pad.length < 4) { + pad = '0' + pad; + } + outputString += '\\u' + pad; + } + } + } + } + return outputString; +} +/** + * Converts a string of characters to CSS escapes. + * @param str {string} sequence of Unicode characters. + * @returns {string} + * @memberOf module:xide/utils/StringUtils + */ +function convertCharStr2CSS(str) { + // + // + let highsurrogate = 0; + let suppCP; + let pad; + let outputString = ''; + for (let i = 0; i < str.length; i++) { + let cc = str.charCodeAt(i); + if (cc < 0 || cc > 0xFFFF) { + outputString += '!Error in convertCharStr2CSS: unexpected charCodeAt result, cc=' + cc + '!'; + } + if (highsurrogate !== 0) { // this is a supp char, and cc contains the low surrogate + if (0xDC00 <= cc && cc <= 0xDFFF) { + suppCP = 0x10000 + ((highsurrogate - 0xD800) << 10) + (cc - 0xDC00); + pad = suppCP.toString(16).toUpperCase(); + if (suppCP < 0x10000) { + while (pad.length < 4) { + pad = '0' + pad; + } + } + else { + while (pad.length < 6) { + pad = '0' + pad; + } + } + outputString += '\\' + pad + ' '; + highsurrogate = 0; + continue; + } + else { + outputString += 'Error in convertCharStr2CSS: low surrogate expected, cc=' + cc + '!'; + highsurrogate = 0; + } + } + if (0xD800 <= cc && cc <= 0xDBFF) { // start of supplementary character + highsurrogate = cc; + } + else { // this is a BMP character + if (cc === 0x5C) { + outputString += '\\\\'; + } + else if (cc > 0x1f && cc < 0x7F) { + outputString += String.fromCharCode(cc); + } + else if (cc === 0x9 || cc === 0xA || cc === 0xD) { + outputString += String.fromCharCode(cc); + } + else /* if (cc > 0x7E) */ { + pad = cc.toString(16).toUpperCase(); + while (pad.length < 4) { + pad = '0' + pad; + } + outputString += '\\' + pad + ' '; + } + } + } + return outputString; +} +/** + * Converts a string of characters to code points, separated by space. + * @param textString {string} the input + * @param parameters {string} enum [ascii, latin1], a set of characters to not convert. + * @param pad {boolean} if true, hex numbers lower than 1000 are padded with zeros. + * @param type {string} enum[hex, dec, unicode, zerox], whether output should be in hex or dec or unicode U+ form. + * @returns {string} + * @memberOf module:xide/utils/StringUtils + */ +function convertCharStr2CP(textString, parameters, pad, type) { + let haut = 0; + let n = 0; + let CPstring = ''; + let afterEscape = false; + let cp = ''; + for (let i = 0; i < textString.length; i++) { + let b = textString.charCodeAt(i); + if (b < 0 || b > 0xFFFF) { + CPstring += 'Error in convertChar2CP: byte out of range ' + dec2hex(b) + '!'; + } + if (haut !== 0) { + if (0xDC00 <= b && b <= 0xDFFF) { + if (afterEscape) { + CPstring += ' '; + } + if (type === 'hex') { + CPstring += dec2hex(0x10000 + ((haut - 0xD800) << 10) + (b - 0xDC00)); + } + else if (type === 'unicode') { + CPstring += 'U+' + dec2hex(0x10000 + ((haut - 0xD800) << 10) + (b - 0xDC00)); + } + else if (type === 'zerox') { + CPstring += '0x' + dec2hex(0x10000 + ((haut - 0xD800) << 10) + (b - 0xDC00)); + } + else { + CPstring += 0x10000 + ((haut - 0xD800) << 10) + (b - 0xDC00); + } + haut = 0; + continue; + } + else { + CPstring += 'Error in convertChar2CP: surrogate out of range ' + dec2hex(haut) + '!'; + haut = 0; + } + } + if (0xD800 <= b && b <= 0xDBFF) { + haut = b; + } + else { + if (b <= 127 && parameters.match(/ascii/)) { + CPstring += textString.charAt(i); + afterEscape = false; + } + else if (b <= 255 && parameters.match(/latin1/)) { + CPstring += textString.charAt(i); + afterEscape = false; + } + else { + if (afterEscape) { + CPstring += ' '; + } + if (type === 'hex') { + cp = dec2hex(b); + if (pad) { + while (cp.length < 4) { + cp = '0' + cp; + } + } + } + else if (type === 'unicode') { + cp = dec2hex(b); + if (pad) { + while (cp.length < 4) { + cp = '0' + cp; + } + } + CPstring += 'U+'; + } + else if (type === 'zerox') { + cp = dec2hex(b); + if (pad) { + while (cp.length < 4) { + cp = '0' + cp; + } + } + CPstring += '0x'; + } + else { + cp = b; + } + CPstring += cp; + afterEscape = true; + } + } + } + return CPstring; +} +/** + * Converts a string of characters to U+... notation, separated by space. + * @param textString {string} the input + * @param preserve {string} enum [ascii, latin1], a set of characters to not convert. + * @param pad {boolean} if true, hex numbers lower than 1000 are padded with zeros. + * @returns {string} + * @memberOf module:xide/utils/StringUtils + */ +function convertCharStr2Unicode(textString, preserve, pad) { + // pad: + let haut = 0; + let n = 0; + let CPstring = ''; + let cp = ''; + pad = false; + for (let i = 0; i < textString.length; i++) { + let b = textString.charCodeAt(i); + if (b < 0 || b > 0xFFFF) { + CPstring += 'Error in convertChar2CP: byte out of range ' + dec2hex(b) + '!'; + } + if (haut !== 0) { + if (0xDC00 <= b && b <= 0xDFFF) { + CPstring += 'U+' + dec2hex(0x10000 + ((haut - 0xD800) << 10) + (b - 0xDC00)) + ' '; + haut = 0; + continue; + } + else { + CPstring += 'Error in convertChar2CP: surrogate out of range ' + dec2hex(haut) + '!'; + haut = 0; + } + } + if (0xD800 <= b && b <= 0xDBFF) { + haut = b; + } + else { + if (b <= 127 && preserve === 'ascii') { + CPstring += textString.charAt(i) + ' '; + } + else if (b <= 255 && preserve === 'latin1') { + CPstring += textString.charAt(i) + ' '; + } + else { + cp = dec2hex(b); + if (pad) { + while (cp.length < 4) { + cp = '0' + cp; + } + } + CPstring += 'U+' + cp + ' '; + } + } + } + return CPstring.substring(0, CPstring.length - 1); +} +let digit_array = new Array('0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'); +/** + * + * @param n + * @returns {string} + */ +const to_hex = function (n) { + let hex_result = ''; + let the_start = true; + for (let i = 32; i > 0;) { + i -= 4; + let one_digit = (n >> i) & 0xf; + if (!the_start || one_digit !== 0) { + the_start = false; + hex_result += digit_array[one_digit]; + } + } + return '0x' + (hex_result === '' ? '0' : hex_result); +}; +exports.to_hex = to_hex; +/** + * Unescape hex sequences like 'x0d' to chars + * @param str {string} + * @returns {string} + * @memberOf module:xide/utils/StringUtils + */ +const replaceHex = (str) => { + if (_.isString(str)) { + return str.replace(/x([0-9A-Fa-f]{2})/gmi, function () { + return String.fromCharCode(parseInt(arguments[1], 16)); + }); + } + return str; +}; +exports.replaceHex = replaceHex; +let zero = function (n, max) { + n = n.toString(16).toUpperCase(); + while (n.length < max) { + n = '0' + n; + } + return n; +}; +function d2h(d) { + return d.toString(16); +} +function h2d(h) { + return parseInt(h, 16); +} +/** + * Convert a string into hex values + * @memberOf module:xide/utils/StringUtils + * @param string {string} + * @returns {string} + */ +const stringToHex = (string) => { + let str = ''; + let i = 0; + let tmp_len = string.length; + let c; + for (; i < tmp_len; i += 1) { + c = string.charCodeAt(i); + str += zero(d2h(c), 2) + ' '; + } + return str; +}; +exports.stringToHex = stringToHex; +/** + * Returns buffer compatible string + * @param string + * @example + * utils.stringToHex("a b") returns "61 20 62" + * @memberOf module:xide/utils/StringUtils + * @returns {string} + */ +const stringToBufferStr = (string) => { + let i = 0; + let tmp_len = string.length; + let c; + let arr = []; + for (; i < tmp_len; i += 1) { + c = string.charCodeAt(i); + arr.push(c); + } + return arr.join(','); +}; +exports.stringToBufferStr = stringToBufferStr; +/** + * Return an integer array (as Buffer) for a string + * @param string + * @returns {Array} + */ +const stringToBuffer = (string) => { + let i = 0; + let tmp_len = string.length; + let c; + let arr = []; + for (; i < tmp_len; i += 1) { + c = string.charCodeAt(i); + arr.push(c); + } + return arr; +}; +exports.stringToBuffer = stringToBuffer; +/** + * + * @param bufferString {String} The serialized buffer formatted as 00,02 (decimal values) + * @memberOf module:xide/utils/StringUtils + * @returns {String} The hex version of the buffer string + */ +const bufferToHexString = (bufferString) => { + let bytesArray = bufferString.indexOf(',') !== -1 ? bufferString.split(',') : [bufferString]; + let tmp = []; + for (let i = 0; i < bytesArray.length; i++) { + let dec = bytesArray[i]; + tmp.push(dec2hex2(dec)); + } + return tmp.join(' '); +}; +exports.bufferToHexString = bufferToHexString; +/** + * + * @param bufferString {String} The serialized buffer formatted as 00,02 (decimal values) + * @memberOf module:xide/utils/StringUtils + * @returns {integer} The integer array + */ +const bufferFromDecString = (bufferString) => { + let bytesArray = bufferString.indexOf(',') !== -1 ? bufferString.split(',') : [bufferString]; + for (let i = 0; i < bytesArray.length; i++) { + bytesArray[i] = parseInt(bytesArray[i], 10); + } + return bytesArray; +}; +exports.bufferFromDecString = bufferFromDecString; +/** + * Return a buffer like formatted string "0a 12" + * @param string + * @memberOf module:xide/utils/StringUtils + * @returns {string} + */ +const stringFromDecString = (string) => { + let buffer = (0, exports.bufferFromDecString)(string); + let result = ''; + for (let i = 0; i < buffer.length; i++) { + result += String.fromCharCode(buffer[i], 16); + } + return result; +}; +exports.stringFromDecString = stringFromDecString; +/** + * + * @param string + * @returns {string} + */ +const stringToHex2 = (string) => { + let str = ''; + let i = 0; + let tmp_len = string.length; + let c; + for (; i < tmp_len; i += 1) { + c = string.charCodeAt(i); + str += zero(d2h(c), 2) + ' '; + } + return str; +}; +exports.stringToHex2 = stringToHex2; +/** + * + * @param string {string} + * @returns {string} + */ +const hexToString = (string) => { + let arr = string.split(' '); + let str = ''; + let i = 0; + let arr_len = arr.length; + let c; + for (; i < arr_len; i += 1) { + c = String.fromCharCode(h2d(arr[i])); + str += c; + } + return str; +}; +exports.hexToString = hexToString; +/** + * + * @param buffer + * @returns {string} + */ +const prettyHex = function (buffer) { + let rows = Math.ceil(buffer.length / 16); + let last = buffer.length % 16 || 16; + let offsetLength = buffer.length.toString(16).length; + if (offsetLength < 6) { + offsetLength = 6; + } + let str = 'Offset'; + while (str.length < offsetLength) { + str += ' '; + } + str = '\u001b[36m' + str + ' '; + let i; + for (i = 0; i < 16; i++) { + str += ' ' + zero(i, 2); + } + str += '\u001b[0m\n'; + if (buffer.length) { + str += '\n'; + } + let b = 0; + let lastBytes; + let lastSpaces; + let v; + for (i = 0; i < rows; i++) { + str += '\u001b[36m' + zero(b, offsetLength) + '\u001b[0m '; + lastBytes = i === rows - 1 ? last : 16; + lastSpaces = 16 - lastBytes; + let j; + for (j = 0; j < lastBytes; j++) { + str += ' ' + zero(buffer[b], 2); + b++; + } + for (j = 0; j < lastSpaces; j++) { + str += ' '; + } + b -= lastBytes; + str += ' '; + for (j = 0; j < lastBytes; j++) { + v = buffer[b]; + str += (v > 31 && v < 127) || v > 159 ? String.fromCharCode(v) : '.'; + b++; + } + str += '\n'; + } + return str; +}; +exports.prettyHex = prettyHex; +/** + * + * @param str + * @param prefix + * @returns {string} + */ +const hexEncode = (str, prefix) => { + let hex; + let i; + let result = ''; + for (i = 0; i < str.length; i++) { + hex = str.charCodeAt(i).toString(16); + result += ((prefix !== null ? prefix : '000') + hex).slice(-4); + } + return result; +}; +exports.hexEncode = hexEncode; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSGV4VXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvbGliL0hleFV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUNBLE1BQU0sS0FBSyxHQUFRLEVBQUUsQ0FBQztBQUN0QixNQUFNLEtBQUssR0FBUSxFQUFFLENBQUE7QUFDckIsTUFBTSxJQUFJLEdBQVEsRUFBRSxDQUFDO0FBRXJCLDRCQUE0QjtBQUM1Qjs7Ozs7O0dBTUc7QUFDSCxNQUFNLFFBQVEsR0FBRyxDQUFDLEdBQVcsRUFBVSxFQUFFO0lBQ3JDLElBQUksTUFBTSxHQUFHLEVBQUUsQ0FBQztJQUNoQixJQUFJLENBQUMsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQzFCLElBQUksQ0FBQyxJQUFJLE1BQU0sRUFBRTtRQUNiLE1BQU0sSUFBSSxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQ3BDO1NBQU0sSUFBSSxDQUFDLElBQUksUUFBUSxFQUFFO1FBQ3RCLENBQUMsSUFBSSxPQUFPLENBQUM7UUFDYixNQUFNLElBQUksTUFBTSxDQUFDLFlBQVksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO0tBQ2pHO1NBQU07UUFDSCxNQUFNLElBQUksMkNBQTJDLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQ3RFO0lBQ0QsT0FBTyxNQUFNLENBQUM7QUFDbEIsQ0FBQyxDQUFBO0FBRUQ7Ozs7O0dBS0c7QUFDSCxNQUFNLFFBQVEsR0FBRyxDQUFDLENBQVMsRUFBRSxFQUFFO0lBQzNCLElBQUksTUFBTSxHQUFHLEVBQUUsQ0FBQztJQUNoQixJQUFJLENBQUMsSUFBSSxNQUFNLEVBQUU7UUFDYixNQUFNLElBQUksTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUNwQztTQUFNLElBQUksQ0FBQyxJQUFJLFFBQVEsRUFBRTtRQUN0QixDQUFDLElBQUksT0FBTyxDQUFDO1FBQ2IsTUFBTSxJQUFJLE1BQU0sQ0FBQyxZQUFZLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztLQUNqRztTQUFNO1FBQ0gsTUFBTSxJQUFJLDJDQUEyQyxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUN0RTtJQUNELE9BQU8sTUFBTSxDQUFDO0FBQ2xCLENBQUMsQ0FBQTtBQUVELE1BQU0sT0FBTyxHQUFHLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7QUFFNUUsSUFBSSxRQUFRLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUVoRyxNQUFNLFFBQVEsR0FBRyxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsVUFBVSxJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxVQUFVLEdBQUcsR0FBRyxDQUFDLENBQUM7QUFFaEcsTUFBTSxRQUFRLEdBQUcsQ0FBQyxVQUFVLEVBQUUsRUFBRTtJQUM1QixPQUFPLFFBQVEsQ0FBQyxDQUFDLFVBQVUsSUFBSSxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQyxVQUFVLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO1VBQ3ZFLFFBQVEsQ0FBQyxDQUFDLFVBQVUsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxRQUFRLENBQUMsVUFBVSxHQUFHLEdBQUcsQ0FBQyxDQUFDO0FBQ3pFLENBQUMsQ0FBQTtBQUVELE1BQU0sY0FBYyxHQUFHLENBQUMsVUFBa0IsRUFBRSxFQUFFO0lBQzFDLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQztJQUNiLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNWLElBQUksUUFBUSxHQUFHLEVBQUUsQ0FBQztJQUNsQixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsVUFBVSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUN4QyxJQUFJLENBQUMsR0FBRyxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2pDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxFQUFFO1lBQ3JCLFFBQVEsSUFBSSw2Q0FBNkMsR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO1NBQ2hGO1FBQ0QsSUFBSSxJQUFJLEtBQUssQ0FBQyxFQUFFO1lBQ1osSUFBSSxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxNQUFNLEVBQUU7Z0JBQzVCLFFBQVEsSUFBSSxPQUFPLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7Z0JBQzVFLElBQUksR0FBRyxDQUFDLENBQUM7Z0JBQ1QsU0FBUzthQUNaO2lCQUFNO2dCQUNILFFBQVEsSUFBSSxrREFBa0QsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDO2dCQUNyRixJQUFJLEdBQUcsQ0FBQyxDQUFDO2FBQ1o7U0FDSjtRQUNELElBQUksTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksTUFBTSxFQUFFO1lBQzVCLElBQUksR0FBRyxDQUFDLENBQUM7U0FDWjthQUFNO1lBQ0gsUUFBUSxJQUFJLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7U0FDaEM7S0FDSjtJQUNELE9BQU8sUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztBQUN0RCxDQUFDLENBQUE7QUFFRDs7R0FFRztBQUNILE1BQU0sZ0NBQWdDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsRUFBRTtJQUM3Qyw4Q0FBOEM7SUFDOUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsNEJBQTRCO0lBQzFDLHVEQUF1RDtJQUN2RCxDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FDekMsQ0FBQztJQUNGLE9BQU8sR0FBRyxDQUFDO0FBQ2YsQ0FBQyxDQUFBO0FBRUQscUdBQXFHO0FBQ3JHOzs7Ozs7R0FNRztBQUNJLE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxHQUFXLEVBQUUsT0FBZSxFQUFnQixFQUFFO0lBQzVFLElBQUksR0FBRyxHQUFHLEtBQUssQ0FBQztJQUNoQixHQUFHLEdBQUcsbUJBQW1CLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDL0IsR0FBRyxHQUFHLGdDQUFnQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBRTVDLEdBQUcsR0FBRyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUM3QixHQUFHLEdBQUcsa0JBQWtCLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDOUIsR0FBRyxHQUFHLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzlCLElBQUksR0FBRyxFQUFFO1FBQ0wsR0FBRyxHQUFHLElBQUEsd0JBQWdCLEVBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO0tBQ3JDO1NBQU07UUFDSCxHQUFHLEdBQUcsSUFBQSx3QkFBZ0IsRUFBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDbkMsR0FBRyxHQUFHLElBQUEsdUJBQWUsRUFBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7S0FDckM7SUFDRCxHQUFHLEdBQUcsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDNUIsR0FBRyxHQUFHLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2hDLEdBQUcsR0FBRyxtQkFBbUIsQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFFeEMsT0FBTyxHQUFHLENBQUM7QUFDZixDQUFDLENBQUE7QUFuQlksUUFBQSxpQkFBaUIscUJBbUI3QjtBQUNEOzs7OztHQUtHO0FBQ0gsTUFBTSxtQkFBbUIsR0FBRyxDQUFDLEdBQVcsRUFBVSxFQUFFO0lBQ2hELGtEQUFrRDtJQUNsRCxHQUFHLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQywyQkFBMkIsRUFDekMsQ0FBQyxRQUFRLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxDQUNoRCxDQUFDO0lBQ0YsbURBQW1EO0lBQ25ELEdBQUcsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLDJCQUEyQixFQUN6QyxDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FDekMsQ0FBQztJQUNGLE9BQU8sR0FBRyxDQUFDO0FBQ2YsQ0FBQyxDQUFBO0FBRUQ7Ozs7R0FJRztBQUNILE1BQU0sa0JBQWtCLEdBQUcsQ0FBQyxHQUFHLEVBQVUsRUFBRTtJQUN2Qyw4Q0FBOEM7SUFDOUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMseUJBQXlCLEVBQ3ZDLENBQUMsUUFBUSxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUN6QyxDQUFDO0lBQ0YsT0FBTyxHQUFHLENBQUM7QUFDZixDQUFDLENBQUE7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSxrQkFBa0IsR0FBRyxDQUFDLEdBQUcsRUFBVSxFQUFFO0lBQ3ZDLDhDQUE4QztJQUM5QyxHQUFHLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsRUFDaEMsQ0FBQyxRQUFRLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQ3pDLENBQUM7SUFDRixPQUFPLEdBQUcsQ0FBQztBQUNmLENBQUMsQ0FBQTtBQUVEOzs7O0dBSUc7QUFDSCxNQUFNLGlCQUFpQixHQUFHLENBQUMsR0FBVyxFQUFVLEVBQUU7SUFDOUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsdUJBQXVCLEVBQ3JDLENBQUMsUUFBUSxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUN6QyxDQUFDO0lBQ0YsT0FBTyxHQUFHLENBQUM7QUFDZixDQUFDLENBQUE7QUFFRDs7Ozs7OztHQU9HO0FBQ0ksTUFBTSxlQUFlLEdBQUcsQ0FBQyxHQUFXLEVBQUUsZ0JBQXlCLEVBQVUsRUFBRTtJQUM5RSxJQUFJLGdCQUFnQixFQUFFO1FBQ2xCLEdBQUcsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLDRCQUE0QixFQUMxQyxDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FDekMsQ0FBQztRQUNGLEdBQUcsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztLQUNoQztTQUFNO1FBQ0gsR0FBRyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsNEJBQTRCLEVBQzFDLENBQUMsUUFBUSxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUN6QyxDQUFDO0tBQ0w7SUFDRCxPQUFPLEdBQUcsQ0FBQztBQUNmLENBQUMsQ0FBQTtBQVpZLFFBQUEsZUFBZSxtQkFZM0I7QUFFRDs7Ozs7O0dBTUc7QUFDSSxNQUFNLGdCQUFnQixHQUFHLENBQUMsR0FBVyxFQUFFLFlBQXFCLEVBQU8sRUFBRTtJQUN4RSxvQ0FBb0M7SUFDcEMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsMkJBQTJCLEVBQ3pDLENBQUMsUUFBUSxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUN6QyxDQUFDO0lBQ0YsK0NBQStDO0lBQy9DLEdBQUcsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLHNCQUFzQixFQUNwQyxDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FDekMsQ0FBQztJQUNGLCtDQUErQztJQUMvQyxHQUFHLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxzQkFBc0IsRUFDcEMsQ0FBQyxRQUFRLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQ3pDLENBQUM7SUFDRiw0Q0FBNEM7SUFDNUMsSUFBSSxZQUFZLEVBQUU7UUFDZCxHQUFHLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDaEMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ2hDLEdBQUcsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNoQyxHQUFHLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDaEMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ2hDLEdBQUcsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNoQyxHQUFHLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDakMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ2pDLEdBQUcsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztLQUNwQztJQUNELE9BQU8sR0FBRyxDQUFDO0FBQ2YsQ0FBQyxDQUFBO0FBMUJZLFFBQUEsZ0JBQWdCLG9CQTBCNUI7QUFFRDs7Ozs7R0FLRztBQUNILE1BQU0sZ0JBQWdCLEdBQUcsQ0FBQyxHQUFXLEVBQVUsRUFBRTtJQUM3Qyx1RUFBdUU7SUFDdkUsR0FBRyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsdUJBQXVCLEVBQ3JDLENBQUMsUUFBUSxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQ2pELENBQUM7SUFDRixPQUFPLEdBQUcsQ0FBQztBQUNmLENBQUMsQ0FBQTtBQUVEOzs7OztHQUtHO0FBQ0gsU0FBUyxvQkFBb0IsQ0FBQyxHQUFHO0lBQzdCLElBQUksUUFBUSxHQUFHLEVBQUUsQ0FBQztJQUNsQixHQUFHLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxtQkFBbUIsRUFDakMsVUFBVSxRQUFRLEVBQUUsTUFBTTtRQUN0QixJQUFJLE1BQU0sSUFBSSxRQUFRLEVBQUU7WUFDcEIsT0FBTyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDM0I7YUFBTTtZQUNILE9BQU8sUUFBUSxDQUFDO1NBQ25CO0lBQ0wsQ0FBQyxDQUNKLENBQUM7SUFDRixPQUFPLEdBQUcsQ0FBQztBQUNmLENBQUM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxTQUFTLG1CQUFtQixDQUFDLEdBQUcsRUFBRSxJQUFJO0lBQ2xDLElBQUksSUFBSSxLQUFLLEtBQUssRUFBRTtRQUNoQixHQUFHLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyx5QkFBeUIsRUFDdkMsQ0FBQyxRQUFRLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQ3pDLENBQUM7S0FDTDtTQUFNLElBQUksSUFBSSxLQUFLLEtBQUssRUFBRTtRQUN2QixHQUFHLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxlQUFlLEVBQzdCLFVBQVUsUUFBUSxFQUFFLE1BQU07WUFDdEIsT0FBTyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDNUIsQ0FBQyxDQUNKLENBQUM7S0FDTDtTQUFNLElBQUksSUFBSSxLQUFLLE1BQU0sRUFBRTtRQUN4QixHQUFHLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyx1QkFBdUIsRUFDckMsVUFBVSxRQUFRLEVBQUUsTUFBTTtZQUN0QixPQUFPLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3BDLENBQUMsQ0FDSixDQUFDO0tBQ0w7U0FBTSxJQUFJLElBQUksS0FBSyxPQUFPLEVBQUU7UUFDekIsR0FBRyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMseUJBQXlCLEVBQ3ZDLFVBQVUsUUFBUSxFQUFFLE1BQU07WUFDdEIsT0FBTyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNyQyxDQUFDLENBQ0osQ0FBQztLQUNMO0lBQ0QsT0FBTyxHQUFHLENBQUM7QUFDZixDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxTQUFTLGdCQUFnQixDQUFDLEdBQUc7SUFDekIsSUFBSSxZQUFZLEdBQUcsRUFBRSxDQUFDO0lBQ3RCLElBQUksT0FBTyxHQUFHLENBQUMsQ0FBQztJQUNoQixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFFVixxQ0FBcUM7SUFDckMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQzlCLEdBQUcsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQztJQUM5QixJQUFJLEdBQUcsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1FBQ2xCLE9BQU8sRUFBRSxDQUFDO0tBQ2I7SUFDRCxHQUFHLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFFL0IsSUFBSSxTQUFTLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUMvQixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUN2QyxJQUFJLENBQUMsR0FBRyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUUsMEJBQTBCO1FBQy9ELFFBQVEsT0FBTyxFQUFFO1lBQ2IsS0FBSyxDQUFDO2dCQUNGLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxFQUFFLEVBQUcsV0FBVztvQkFDbkMsWUFBWSxJQUFJLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztpQkFDL0I7cUJBQU0sSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLEVBQUUsRUFBRyxXQUFXO29CQUM3QyxPQUFPLEdBQUcsQ0FBQyxDQUFDO29CQUNaLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO2lCQUNoQjtxQkFBTSxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksRUFBRSxFQUFHLFdBQVc7b0JBQzdDLE9BQU8sR0FBRyxDQUFDLENBQUM7b0JBQ1osQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7aUJBQ2Y7cUJBQU0sSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLEVBQUUsRUFBRyxXQUFXO29CQUM3QyxPQUFPLEdBQUcsQ0FBQyxDQUFDO29CQUNaLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO2lCQUNmO3FCQUFNO29CQUNILFlBQVksSUFBSSwyQkFBMkIsR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO2lCQUNuRTtnQkFDRCxNQUFNO1lBQ1YsS0FBSyxDQUFDO2dCQUNGLElBQUksQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLEdBQUcsSUFBSSxFQUFFO29CQUN0QixZQUFZLElBQUksMkJBQTJCLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztpQkFDbkU7Z0JBQ0QsT0FBTyxFQUFFLENBQUM7Z0JBQ1YsWUFBWSxJQUFJLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO2dCQUNoRCxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUNOLE1BQU07WUFDVixLQUFLLENBQUMsQ0FBQztZQUNQLEtBQUssQ0FBQztnQkFDRixJQUFJLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxHQUFHLElBQUksRUFBRTtvQkFDdEIsWUFBWSxJQUFJLDJCQUEyQixHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7aUJBQ25FO2dCQUNELENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQztnQkFDMUIsT0FBTyxFQUFFLENBQUM7Z0JBQ1YsTUFBTTtTQUNiO0tBQ0o7SUFDRCxPQUFPLFlBQVksQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQzFDLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILFNBQVMsaUJBQWlCLENBQUMsR0FBRztJQUMxQixJQUFJLGFBQWEsR0FBRyxDQUFDLENBQUM7SUFDdEIsSUFBSSxZQUFZLEdBQUcsRUFBRSxDQUFDO0lBRXRCLHFDQUFxQztJQUNyQyxHQUFHLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDOUIsR0FBRyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQzlCLElBQUksR0FBRyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7UUFDbEIsT0FBTyxJQUFJLENBQUM7S0FDZjtJQUNELEdBQUcsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQztJQUUvQixJQUFJLFNBQVMsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQy9CLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxTQUFTLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQ3ZDLElBQUksQ0FBQyxHQUFHLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDbkMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLEVBQUU7WUFDckIsWUFBWSxJQUFJLG1EQUFtRCxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7U0FDMUY7UUFDRCxJQUFJLGFBQWEsS0FBSyxDQUFDLEVBQUU7WUFDckIsSUFBSSxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxNQUFNLEVBQUU7Z0JBQzVCLFlBQVksSUFBSSxRQUFRLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxhQUFhLEdBQUcsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQztnQkFDcEYsYUFBYSxHQUFHLENBQUMsQ0FBQztnQkFDbEIsU0FBUzthQUNaO2lCQUFNO2dCQUNILFlBQVksSUFBSSx3REFBd0QsR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO2dCQUM1RixhQUFhLEdBQUcsQ0FBQyxDQUFDO2FBQ3JCO1NBQ0o7UUFDRCxJQUFJLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLE1BQU0sRUFBRSxFQUFFLG1DQUFtQztZQUNqRSxhQUFhLEdBQUcsQ0FBQyxDQUFDO1NBQ3JCO2FBQU07WUFDSCxZQUFZLElBQUksUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQy9CO0tBQ0o7SUFDRCxPQUFPLFlBQVksQ0FBQztBQUN4QixDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxTQUFTLGdCQUFnQixDQUFDLEdBQUc7SUFDekIsSUFBSSxZQUFZLEdBQUcsRUFBRSxDQUFDO0lBQ3RCLElBQUksT0FBTyxHQUFHLENBQUMsQ0FBQztJQUNoQixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFFVixJQUFJLFNBQVMsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQy9CLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxTQUFTLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQ3ZDLElBQUksQ0FBQyxHQUFHLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDbkMsUUFBUSxPQUFPLEVBQUU7WUFDYixLQUFLLENBQUM7Z0JBQ0YsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLEVBQUUsRUFBRSxXQUFXO29CQUNsQyxZQUFZLElBQUksUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO2lCQUMvQjtxQkFBTSxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksRUFBRSxFQUFHLFdBQVc7b0JBQzdDLE9BQU8sR0FBRyxDQUFDLENBQUM7b0JBQ1osQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7aUJBQ2hCO3FCQUFNLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxFQUFFLEVBQUcsV0FBVztvQkFDN0MsT0FBTyxHQUFHLENBQUMsQ0FBQztvQkFDWixDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztpQkFDZjtxQkFBTSxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksRUFBRSxFQUFHLFdBQVc7b0JBQzdDLE9BQU8sR0FBRyxDQUFDLENBQUM7b0JBQ1osQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7aUJBQ2Y7cUJBQU07b0JBQ0gsWUFBWSxJQUFJLDBCQUEwQixHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7aUJBQ2xFO2dCQUNELE1BQU07WUFDVixLQUFLLENBQUM7Z0JBQ0YsSUFBSSxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsR0FBRyxJQUFJLEVBQUU7b0JBQ3RCLFlBQVksSUFBSSwwQkFBMEIsR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO2lCQUNsRTtnQkFDRCxPQUFPLEVBQUUsQ0FBQztnQkFDVixZQUFZLElBQUksUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7Z0JBQ2hELENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ04sTUFBTTtZQUNWLEtBQUssQ0FBQyxDQUFDO1lBQ1AsS0FBSyxDQUFDO2dCQUNGLElBQUksQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLEdBQUcsSUFBSSxFQUFFO29CQUN0QixZQUFZLElBQUksMEJBQTBCLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztpQkFDbEU7Z0JBQ0QsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDO2dCQUMxQixPQUFPLEVBQUUsQ0FBQztnQkFDVixNQUFNO1NBQ2I7S0FDSjtJQUNELE9BQU8sWUFBWSxDQUFDO0FBQ3hCLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILFNBQVMsZUFBZSxDQUFDLEdBQUc7SUFDeEIsK0JBQStCO0lBQy9CLEdBQUcsR0FBRyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUM5QixHQUFHLEdBQUcsa0JBQWtCLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDOUIsR0FBRyxHQUFHLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2hDLE9BQU8sR0FBRyxDQUFDO0FBQ2YsQ0FBQztBQUVELG9HQUFvRztBQUVwRzs7Ozs7OztHQU9HO0FBQ0gsU0FBUyxrQkFBa0IsQ0FBQyxHQUFHLEVBQUUsVUFBVTtJQUN2QyxvR0FBb0c7SUFDcEcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ2pDLEdBQUcsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQztJQUNsQyxHQUFHLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDaEMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBRWhDLDZDQUE2QztJQUM3QyxJQUFJLFVBQVUsQ0FBQyxLQUFLLENBQUMsbUJBQW1CLENBQUMsRUFBRTtRQUN2QyxHQUFHLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBRSxNQUFNO1FBQ2pELEdBQUcsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFFLE1BQU07UUFDakQsR0FBRyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUUsTUFBTTtRQUNqRCxHQUFHLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBRSxNQUFNO1FBRWpELEdBQUcsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLE1BQU07UUFDaEQsR0FBRyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsTUFBTTtRQUNoRCxHQUFHLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxNQUFNO1FBQ2hELEdBQUcsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLE1BQU07UUFDaEQsR0FBRyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsTUFBTTtRQUNoRCxHQUFHLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxNQUFNO1FBQ2hELEdBQUcsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLE1BQU07UUFFaEQsR0FBRyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsVUFBVTtRQUNwRCxHQUFHLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxVQUFVO1FBQ3BELEdBQUcsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLFdBQVc7UUFDckQsR0FBRyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsV0FBVztRQUNyRCxHQUFHLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxpQkFBaUI7UUFDM0QsR0FBRyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsaUJBQWlCO1FBQzNELEdBQUcsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLGlCQUFpQjtRQUMzRCxHQUFHLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxlQUFlO1FBQ3pELEdBQUcsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLG9CQUFvQjtRQUM5RCxHQUFHLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxhQUFhO1FBQ3ZELEdBQUcsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLGFBQWE7UUFDdkQsR0FBRyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsT0FBTztRQUNqRCxHQUFHLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxPQUFPO1FBQ2pELCtDQUErQztRQUMvQyxHQUFHLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxpQkFBaUI7UUFDM0QsR0FBRyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsUUFBUTtRQUVsRCxHQUFHLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxRQUFRO1FBQ2xELEdBQUcsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLFFBQVE7UUFDbEQsR0FBRyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsUUFBUTtRQUVsRCxHQUFHLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxPQUFPO1FBQ2pELEdBQUcsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLE1BQU07UUFDaEQsR0FBRyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsV0FBVztRQUNyRCxHQUFHLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxNQUFNO1FBQ2hELEdBQUcsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLE1BQU07UUFDaEQsR0FBRyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsT0FBTztRQUNqRCxHQUFHLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxPQUFPO1FBQ2pELEdBQUcsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLE9BQU87UUFDakQsR0FBRyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsT0FBTztLQUNwRDtJQUVELGdEQUFnRDtJQUNoRCxJQUFJLFVBQVUsQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLEVBQUU7UUFDaEMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLGtDQUFrQyxDQUFDLENBQUMsQ0FBQyxNQUFNO1FBQ3hFLEdBQUcsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxrQ0FBa0MsQ0FBQyxDQUFDLENBQUMsTUFBTTtRQUN4RSxHQUFHLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsbUNBQW1DLENBQUMsQ0FBQyxDQUFDLE1BQU07UUFDekUsR0FBRyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLGVBQWUsQ0FBQyxDQUFDLENBQUMsTUFBTTtRQUVyRCxHQUFHLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsa0NBQWtDLENBQUMsQ0FBQyxDQUFDLEVBQUU7UUFDcEUsR0FBRyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLGtDQUFrQyxDQUFDLENBQUM7UUFDakUsR0FBRyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLGVBQWUsQ0FBQyxDQUFDO1FBQzlDLEdBQUcsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxrQ0FBa0MsQ0FBQyxDQUFDO1FBQ25FLEdBQUcsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxrQ0FBa0MsQ0FBQyxDQUFDO1FBQ25FLGtFQUFrRTtRQUNsRSxrRUFBa0U7UUFDbEUsR0FBRyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLGVBQWUsQ0FBQyxDQUFDO0tBQ25EO0lBRUQsT0FBTyxHQUFHLENBQUM7QUFDZixDQUFDO0FBRUQ7Ozs7Ozs7Ozs7R0FVRztBQUNILFNBQVMsMkJBQTJCLENBQUMsR0FBRyxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxJQUFJO0lBQzFFLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQztJQUNiLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNWLElBQUksRUFBRSxDQUFDO0lBQ1AsSUFBSSxRQUFRLEdBQUcsRUFBRSxDQUFDO0lBQ2xCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQ2pDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDMUIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLEVBQUU7WUFDckIsUUFBUSxJQUFJLDBEQUEwRCxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7U0FDN0Y7UUFDRCxJQUFJLElBQUksS0FBSyxDQUFDLEVBQUU7WUFDWixJQUFJLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLE1BQU0sRUFBRTtnQkFDNUIsSUFBSSxJQUFJLEtBQUssS0FBSyxFQUFFO29CQUNoQixRQUFRLElBQUksTUFBTSxHQUFHLE9BQU8sQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztpQkFDMUY7cUJBQU07b0JBQ0gsRUFBRSxHQUFHLE9BQU8sR0FBRyxDQUFDLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDO29CQUN0RCxRQUFRLElBQUksTUFBTSxHQUFHLEVBQUUsR0FBRyxLQUFLLENBQUM7aUJBQ25DO2dCQUNELElBQUksR0FBRyxDQUFDLENBQUM7Z0JBQ1QsU0FBUzthQUNaO2lCQUFNO2dCQUNILFFBQVEsSUFBSSwrREFBK0QsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDO2dCQUNsRyxJQUFJLEdBQUcsQ0FBQyxDQUFDO2FBQ1o7U0FDSjtRQUNELElBQUksTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksTUFBTSxFQUFFO1lBQzVCLElBQUksR0FBRyxDQUFDLENBQUM7U0FDWjthQUFNO1lBQ0gsSUFBSSxVQUFVLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUUsRUFBRSw4Q0FBOEM7Z0JBQ3ZGLFFBQVEsSUFBSSxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQzdCO2lCQUFNLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxVQUFVLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsNkNBQTZDO2dCQUM5RixRQUFRLElBQUksR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUM3QjtpQkFBTTtnQkFDSCxJQUFJLElBQUksS0FBSyxLQUFLLEVBQUU7b0JBQ2hCLEVBQUUsR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ2hCLElBQUksR0FBRyxFQUFFO3dCQUNMLE9BQU8sRUFBRSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7NEJBQ2xCLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDO3lCQUNqQjtxQkFDSjtpQkFDSjtxQkFBTTtvQkFDSCxFQUFFLEdBQUcsQ0FBQyxDQUFDO2lCQUNWO2dCQUNELFFBQVEsSUFBSSxNQUFNLEdBQUcsRUFBRSxHQUFHLEtBQUssQ0FBQzthQUNuQztTQUNKO0tBQ0o7SUFDRCxPQUFPLFFBQVEsQ0FBQztBQUNwQixDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILFNBQVMscUJBQXFCLENBQUMsVUFBVTtJQUNyQyxJQUFJLFlBQVksR0FBRyxFQUFFLENBQUM7SUFDdEIsVUFBVSxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQzVDLElBQUksVUFBVSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7UUFDekIsT0FBTyxFQUFFLENBQUM7S0FDYjtJQUNELFVBQVUsR0FBRyxVQUFVLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQztJQUM3QyxJQUFJLFNBQVMsR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3RDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxTQUFTLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQ3ZDLElBQUksQ0FBQyxHQUFHLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDbkMsWUFBWSxJQUFJLEtBQUssR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0tBQzVDO0lBQ0QsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDO0FBQzFCLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsU0FBUyxtQkFBbUIsQ0FBQyxHQUFHO0lBQzVCLElBQUksWUFBWSxHQUFHLEVBQUUsQ0FBQztJQUN0QixJQUFJLFFBQVEsR0FBRyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbkMsSUFBSSxHQUFHLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtRQUNsQixPQUFPLEVBQUUsQ0FBQztLQUNiO0lBQ0QseUJBQXlCO0lBQ3pCLElBQUksU0FBUyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDcEMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDdkMsSUFBSSxDQUFDLEdBQUcsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNuQyxxQ0FBcUM7UUFDckMsSUFBSSxDQUFDLEtBQUssSUFBSSxFQUFFO1lBQ1osWUFBWSxJQUFJLEtBQUssQ0FBQztTQUN6QjthQUFNLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxFQUFFO1lBQy9CLFlBQVksSUFBSSxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQzFDO2FBQU0sSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLEVBQUU7WUFDL0IsUUFBUTtZQUNSLFlBQVksSUFBSSxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQzFDO2FBQU0sSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLEVBQUU7WUFDL0IsWUFBWSxJQUFJLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDMUM7YUFBTSxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxJQUFJLEVBQUU7WUFDN0QsWUFBWSxJQUFJLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDMUM7YUFBTSxJQUFJLENBQUMsSUFBSSxJQUFJLEVBQUU7WUFDbEIsVUFBVTtZQUNWLFlBQVksSUFBSSxHQUFHLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3JDO2FBQU0sSUFBSSxDQUFDLElBQUksS0FBSyxFQUFFO1lBQ25CLFlBQVksSUFBSSxHQUFHLEdBQUcsUUFBUSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLFFBQVEsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztTQUNoRzthQUFNLElBQUksQ0FBQyxJQUFJLE1BQU0sRUFBRTtZQUNwQixZQUFZLElBQUksR0FBRyxHQUFHLFFBQVEsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxRQUFRLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsUUFBUSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO1NBQzVJO2FBQU0sSUFBSSxDQUFDLElBQUksUUFBUSxFQUFFO1lBQ3RCLFlBQVksSUFBSSxHQUFHLEdBQUcsUUFBUSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLFFBQVEsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxRQUFRLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsUUFBUSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO1NBQ3hMO2FBQU07WUFDSCxZQUFZLElBQUksU0FBUyxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7U0FDaEQ7S0FDSjtJQUNELE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQztBQUMxQixDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxTQUFTLG1CQUFtQixDQUFDLEdBQUc7SUFDNUIsSUFBSSxhQUFhLEdBQUcsQ0FBQyxDQUFDO0lBQ3RCLElBQUksTUFBTSxDQUFDLENBQUMsMkNBQTJDO0lBQ3ZELElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNWLElBQUksWUFBWSxHQUFHLEVBQUUsQ0FBQztJQUN0QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUNqQyxJQUFJLEVBQUUsR0FBRyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzNCLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxFQUFFLEdBQUcsTUFBTSxFQUFFO1lBQ3ZCLFlBQVksSUFBSSxrRUFBa0UsR0FBRyxFQUFFLEdBQUcsR0FBRyxDQUFDO1NBQ2pHO1FBQ0QsSUFBSSxhQUFhLEtBQUssQ0FBQyxFQUFFO1lBQ3JCLElBQUksTUFBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksTUFBTSxFQUFFO2dCQUM5QixNQUFNLEdBQUcsT0FBTyxHQUFHLENBQUMsQ0FBQyxhQUFhLEdBQUcsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsTUFBTSxDQUFDLENBQUM7Z0JBQ3BFLFlBQVksSUFBSSxHQUFHLEdBQUcsUUFBUSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsTUFBTSxJQUFJLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLFFBQVEsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxRQUFRLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsUUFBUSxDQUFDLElBQUksR0FBRyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO2dCQUN6TSxhQUFhLEdBQUcsQ0FBQyxDQUFDO2dCQUNsQixTQUFTO2FBQ1o7aUJBQU07Z0JBQ0gsWUFBWSxJQUFJLDJEQUEyRCxHQUFHLEVBQUUsR0FBRyxHQUFHLENBQUM7Z0JBQ3ZGLGFBQWEsR0FBRyxDQUFDLENBQUM7YUFDckI7U0FDSjtRQUNELElBQUksTUFBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksTUFBTSxFQUFFLEVBQUUsaUJBQWlCO1lBQ2pELGFBQWEsR0FBRyxFQUFFLENBQUM7U0FDdEI7YUFBTTtZQUNILElBQUksRUFBRSxJQUFJLElBQUksRUFBRTtnQkFDWixZQUFZLElBQUksR0FBRyxHQUFHLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQzthQUN0QztpQkFBTSxJQUFJLEVBQUUsSUFBSSxLQUFLLEVBQUU7Z0JBQ3BCLFlBQVksSUFBSSxHQUFHLEdBQUcsUUFBUSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLFFBQVEsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQzthQUNsRztpQkFBTSxJQUFJLEVBQUUsSUFBSSxNQUFNLEVBQUU7Z0JBQ3JCLFlBQVksSUFBSSxHQUFHLEdBQUcsUUFBUSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLFFBQVEsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxRQUFRLENBQUMsSUFBSSxHQUFHLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7YUFDL0k7U0FDSjtLQUNKO0lBQ0QsT0FBTyxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3JDLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILFNBQVMsb0JBQW9CLENBQUMsR0FBRztJQUM3QixJQUFJLGFBQWEsR0FBRyxDQUFDLENBQUM7SUFDdEIsSUFBSSxNQUFNLENBQUM7SUFDWCxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDVixJQUFJLFlBQVksR0FBRyxFQUFFLENBQUM7SUFDdEIsSUFBSSxNQUFNLEdBQUcsRUFBRSxDQUFDO0lBQ2hCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQ2pDLElBQUksRUFBRSxHQUFHLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDM0IsSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJLEVBQUUsR0FBRyxNQUFNLEVBQUU7WUFDdkIsWUFBWSxJQUFJLG1FQUFtRSxHQUFHLEVBQUUsR0FBRyxHQUFHLENBQUM7U0FDbEc7UUFDRCxJQUFJLGFBQWEsS0FBSyxDQUFDLEVBQUU7WUFDckIsSUFBSSxNQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxNQUFNLEVBQUU7Z0JBQzlCLE1BQU0sR0FBRyxPQUFPLEdBQUcsQ0FBQyxDQUFDLGFBQWEsR0FBRyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxNQUFNLENBQUMsQ0FBQztnQkFDcEUsTUFBTSxJQUFJLE9BQU8sQ0FBQztnQkFDbEIsWUFBWSxJQUFJLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxNQUFNLElBQUksRUFBRSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztnQkFDcEcsYUFBYSxHQUFHLENBQUMsQ0FBQztnQkFDbEIsU0FBUzthQUNaO2lCQUFNO2dCQUNILFlBQVksSUFBSSw0REFBNEQsR0FBRyxFQUFFLEdBQUcsR0FBRyxDQUFDO2dCQUN4RixhQUFhLEdBQUcsQ0FBQyxDQUFDO2FBQ3JCO1NBQ0o7UUFDRCxJQUFJLE1BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLE1BQU0sRUFBRSxFQUFFLG1DQUFtQztZQUNuRSxhQUFhLEdBQUcsRUFBRSxDQUFDO1NBQ3RCO2FBQU07WUFDSCxNQUFNLEdBQUcsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3JCLE9BQU8sTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7Z0JBQ3RCLE1BQU0sR0FBRyxHQUFHLEdBQUcsTUFBTSxDQUFDO2FBQ3pCO1lBQ0QsWUFBWSxJQUFJLE1BQU0sR0FBRyxHQUFHLENBQUM7U0FDaEM7S0FDSjtJQUNELE9BQU8sWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztBQUM5RCxDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsU0FBUyxtQkFBbUIsQ0FBQyxHQUFHLEVBQUUsVUFBVTtJQUN4QyxJQUFJLGFBQWEsR0FBRyxDQUFDLENBQUM7SUFDdEIsSUFBSSxNQUFNLENBQUM7SUFDWCxJQUFJLEdBQUcsQ0FBQztJQUNSLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNWLElBQUksSUFBSSxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDakMsSUFBSSxZQUFZLEdBQUcsRUFBRSxDQUFDO0lBQ3RCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQ2pDLElBQUksRUFBRSxHQUFHLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDM0IsSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJLEVBQUUsR0FBRyxNQUFNLEVBQUU7WUFDdkIsWUFBWSxJQUFJLG1FQUFtRSxHQUFHLEVBQUUsR0FBRyxHQUFHLENBQUM7U0FDbEc7UUFDRCxJQUFJLGFBQWEsS0FBSyxDQUFDLEVBQUUsRUFBRSx5REFBeUQ7WUFDaEYsSUFBSSxNQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxNQUFNLEVBQUU7Z0JBQzlCLE1BQU0sR0FBRyxPQUFPLEdBQUcsQ0FBQyxDQUFDLGFBQWEsR0FBRyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxNQUFNLENBQUMsQ0FBQztnQkFDcEUsSUFBSSxVQUFVLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxFQUFFO29CQUM5QixHQUFHLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztvQkFDMUIsT0FBTyxHQUFHLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTt3QkFDbkIsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7cUJBQ25CO29CQUNELFlBQVksSUFBSSxLQUFLLEdBQUcsR0FBRyxDQUFDO2lCQUMvQjtxQkFBTSxJQUFJLFVBQVUsQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLEVBQUU7b0JBQ3ZDLEdBQUcsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO29CQUMxQixZQUFZLElBQUksTUFBTSxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7aUJBQ3RDO3FCQUFNO29CQUNILE1BQU0sSUFBSSxPQUFPLENBQUM7b0JBQ2xCLFlBQVksSUFBSSxLQUFLLEdBQUcsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUMsQ0FBQyxHQUFHLEtBQUssR0FBRyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7aUJBQzNHO2dCQUNELGFBQWEsR0FBRyxDQUFDLENBQUM7Z0JBQ2xCLFNBQVM7YUFDWjtpQkFBTTtnQkFDSCxZQUFZLElBQUksNERBQTRELEdBQUcsRUFBRSxHQUFHLEdBQUcsQ0FBQztnQkFDeEYsYUFBYSxHQUFHLENBQUMsQ0FBQzthQUNyQjtTQUNKO1FBQ0QsSUFBSSxNQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxNQUFNLEVBQUUsRUFBRSxtQ0FBbUM7WUFDbkUsYUFBYSxHQUFHLEVBQUUsQ0FBQztTQUN0QjthQUFNLEVBQUUsMEJBQTBCO1lBQy9CLHFDQUFxQztZQUNyQyxRQUFRLEVBQUUsRUFBRTtnQkFDUixLQUFLLENBQUM7b0JBQ0YsWUFBWSxJQUFJLEtBQUssQ0FBQztvQkFDdEIsTUFBTTtnQkFDVixLQUFLLENBQUM7b0JBQ0YsWUFBWSxJQUFJLEtBQUssQ0FBQztvQkFDdEIsTUFBTTtnQkFDVixLQUFLLENBQUM7b0JBQ0YsSUFBSSxVQUFVLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxFQUFFO3dCQUMxQixZQUFZLElBQUksS0FBSyxDQUFDO3FCQUN6Qjt5QkFBTTt3QkFDSCxZQUFZLElBQUksSUFBSSxDQUFDO3FCQUN4QjtvQkFDRCxNQUFNO2dCQUNWLEtBQUssRUFBRTtvQkFDSCxJQUFJLFVBQVUsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUU7d0JBQzFCLFlBQVksSUFBSSxLQUFLLENBQUM7cUJBQ3pCO3lCQUFNO3dCQUNILFlBQVksSUFBSSxJQUFJLENBQUM7cUJBQ3hCO29CQUNELE1BQU07Z0JBQ1YsS0FBSyxFQUFFO29CQUNILElBQUksVUFBVSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBRTt3QkFDMUIsWUFBWSxJQUFJLEtBQUssQ0FBQztxQkFDekI7eUJBQU07d0JBQ0gsWUFBWSxJQUFJLElBQUksQ0FBQztxQkFDeEI7b0JBQ0QsTUFBTTtnQkFDVixLQUFLLEVBQUU7b0JBQ0gsWUFBWSxJQUFJLEtBQUssQ0FBQztvQkFDdEIsTUFBTTtnQkFDVixLQUFLLEVBQUU7b0JBQ0gsWUFBWSxJQUFJLEtBQUssQ0FBQztvQkFDdEIsTUFBTTtnQkFDVixLQUFLLEVBQUU7b0JBQ0gsSUFBSSxVQUFVLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxFQUFFO3dCQUMxQixZQUFZLElBQUksTUFBTSxDQUFDO3FCQUMxQjt5QkFBTTt3QkFDSCxZQUFZLElBQUksR0FBRyxDQUFDO3FCQUN2QjtvQkFDRCxNQUFNO2dCQUNWLEtBQUssRUFBRTtvQkFDSCxJQUFJLFVBQVUsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUU7d0JBQzFCLFlBQVksSUFBSSxNQUFNLENBQUM7cUJBQzFCO3lCQUFNO3dCQUNILFlBQVksSUFBSSxJQUFJLENBQUM7cUJBQ3hCO29CQUNELE1BQU07Z0JBQ1YsS0FBSyxFQUFFO29CQUNILFlBQVksSUFBSSxNQUFNLENBQUM7b0JBQ3ZCLE1BQU07Z0JBQ1Y7b0JBQ0ksSUFBSSxFQUFFLEdBQUcsSUFBSSxJQUFJLEVBQUUsR0FBRyxJQUFJLEVBQUU7d0JBQ3hCLFlBQVksSUFBSSxNQUFNLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDO3FCQUMzQzt5QkFBTTt3QkFDSCxHQUFHLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQzt3QkFDcEMsT0FBTyxHQUFHLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTs0QkFDbkIsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7eUJBQ25CO3dCQUNELFlBQVksSUFBSSxLQUFLLEdBQUcsR0FBRyxDQUFDO3FCQUMvQjthQUNSO1NBQ0o7S0FDSjtJQUNELE9BQU8sWUFBWSxDQUFDO0FBQ3hCLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILFNBQVMsa0JBQWtCLENBQUMsR0FBRztJQUMzQixFQUFFO0lBQ0YsRUFBRTtJQUNGLElBQUksYUFBYSxHQUFHLENBQUMsQ0FBQztJQUN0QixJQUFJLE1BQU0sQ0FBQztJQUNYLElBQUksR0FBRyxDQUFDO0lBQ1IsSUFBSSxZQUFZLEdBQUcsRUFBRSxDQUFDO0lBQ3RCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQ2pDLElBQUksRUFBRSxHQUFHLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDM0IsSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJLEVBQUUsR0FBRyxNQUFNLEVBQUU7WUFDdkIsWUFBWSxJQUFJLGlFQUFpRSxHQUFHLEVBQUUsR0FBRyxHQUFHLENBQUM7U0FDaEc7UUFDRCxJQUFJLGFBQWEsS0FBSyxDQUFDLEVBQUUsRUFBRSx5REFBeUQ7WUFDaEYsSUFBSSxNQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxNQUFNLEVBQUU7Z0JBQzlCLE1BQU0sR0FBRyxPQUFPLEdBQUcsQ0FBQyxDQUFDLGFBQWEsR0FBRyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxNQUFNLENBQUMsQ0FBQztnQkFDcEUsR0FBRyxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7Z0JBQ3hDLElBQUksTUFBTSxHQUFHLE9BQU8sRUFBRTtvQkFDbEIsT0FBTyxHQUFHLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTt3QkFDbkIsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7cUJBQ25CO2lCQUNKO3FCQUFNO29CQUNILE9BQU8sR0FBRyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7d0JBQ25CLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO3FCQUNuQjtpQkFDSjtnQkFDRCxZQUFZLElBQUksSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7Z0JBQ2pDLGFBQWEsR0FBRyxDQUFDLENBQUM7Z0JBQ2xCLFNBQVM7YUFDWjtpQkFBTTtnQkFDSCxZQUFZLElBQUksMERBQTBELEdBQUcsRUFBRSxHQUFHLEdBQUcsQ0FBQztnQkFDdEYsYUFBYSxHQUFHLENBQUMsQ0FBQzthQUNyQjtTQUNKO1FBQ0QsSUFBSSxNQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxNQUFNLEVBQUUsRUFBRSxtQ0FBbUM7WUFDbkUsYUFBYSxHQUFHLEVBQUUsQ0FBQztTQUN0QjthQUFNLEVBQUUsMEJBQTBCO1lBQy9CLElBQUksRUFBRSxLQUFLLElBQUksRUFBRTtnQkFDYixZQUFZLElBQUksTUFBTSxDQUFDO2FBQzFCO2lCQUFNLElBQUksRUFBRSxHQUFHLElBQUksSUFBSSxFQUFFLEdBQUcsSUFBSSxFQUFFO2dCQUMvQixZQUFZLElBQUksTUFBTSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQzthQUMzQztpQkFBTSxJQUFJLEVBQUUsS0FBSyxHQUFHLElBQUksRUFBRSxLQUFLLEdBQUcsSUFBSSxFQUFFLEtBQUssR0FBRyxFQUFFO2dCQUMvQyxZQUFZLElBQUksTUFBTSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQzthQUMzQztpQkFBTSxvQkFBb0IsQ0FBQztnQkFDeEIsR0FBRyxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7Z0JBQ3BDLE9BQU8sR0FBRyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7b0JBQ25CLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO2lCQUNuQjtnQkFDRCxZQUFZLElBQUksSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7YUFDcEM7U0FDSjtLQUNKO0lBQ0QsT0FBTyxZQUFZLENBQUM7QUFDeEIsQ0FBQztBQUVEOzs7Ozs7OztHQVFHO0FBQ0gsU0FBUyxpQkFBaUIsQ0FBQyxVQUFVLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxJQUFJO0lBQ3hELElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQztJQUNiLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNWLElBQUksUUFBUSxHQUFHLEVBQUUsQ0FBQztJQUNsQixJQUFJLFdBQVcsR0FBRyxLQUFLLENBQUM7SUFDeEIsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQ1osS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDeEMsSUFBSSxDQUFDLEdBQUcsVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNqQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLE1BQU0sRUFBRTtZQUNyQixRQUFRLElBQUksNkNBQTZDLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztTQUNoRjtRQUNELElBQUksSUFBSSxLQUFLLENBQUMsRUFBRTtZQUNaLElBQUksTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksTUFBTSxFQUFFO2dCQUM1QixJQUFJLFdBQVcsRUFBRTtvQkFDYixRQUFRLElBQUksR0FBRyxDQUFDO2lCQUNuQjtnQkFDRCxJQUFJLElBQUksS0FBSyxLQUFLLEVBQUU7b0JBQ2hCLFFBQVEsSUFBSSxPQUFPLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQztpQkFDekU7cUJBQU0sSUFBSSxJQUFJLEtBQUssU0FBUyxFQUFFO29CQUMzQixRQUFRLElBQUksSUFBSSxHQUFHLE9BQU8sQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDO2lCQUNoRjtxQkFBTSxJQUFJLElBQUksS0FBSyxPQUFPLEVBQUU7b0JBQ3pCLFFBQVEsSUFBSSxJQUFJLEdBQUcsT0FBTyxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUM7aUJBQ2hGO3FCQUFNO29CQUNILFFBQVEsSUFBSSxPQUFPLEdBQUcsQ0FBQyxDQUFDLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQztpQkFDaEU7Z0JBQ0QsSUFBSSxHQUFHLENBQUMsQ0FBQztnQkFDVCxTQUFTO2FBQ1o7aUJBQU07Z0JBQ0gsUUFBUSxJQUFJLGtEQUFrRCxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUM7Z0JBQ3JGLElBQUksR0FBRyxDQUFDLENBQUM7YUFDWjtTQUNKO1FBQ0QsSUFBSSxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxNQUFNLEVBQUU7WUFDNUIsSUFBSSxHQUFHLENBQUMsQ0FBQztTQUNaO2FBQU07WUFDSCxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksVUFBVSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsRUFBRTtnQkFDdkMsUUFBUSxJQUFJLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ2pDLFdBQVcsR0FBRyxLQUFLLENBQUM7YUFDdkI7aUJBQU0sSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLFVBQVUsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEVBQUU7Z0JBQy9DLFFBQVEsSUFBSSxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNqQyxXQUFXLEdBQUcsS0FBSyxDQUFDO2FBQ3ZCO2lCQUFNO2dCQUNILElBQUksV0FBVyxFQUFFO29CQUNiLFFBQVEsSUFBSSxHQUFHLENBQUM7aUJBQ25CO2dCQUNELElBQUksSUFBSSxLQUFLLEtBQUssRUFBRTtvQkFDaEIsRUFBRSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDaEIsSUFBSSxHQUFHLEVBQUU7d0JBQ0wsT0FBTyxFQUFFLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTs0QkFDbEIsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUM7eUJBQ2pCO3FCQUNKO2lCQUNKO3FCQUFNLElBQUksSUFBSSxLQUFLLFNBQVMsRUFBRTtvQkFDM0IsRUFBRSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDaEIsSUFBSSxHQUFHLEVBQUU7d0JBQ0wsT0FBTyxFQUFFLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTs0QkFDbEIsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUM7eUJBQ2pCO3FCQUNKO29CQUNELFFBQVEsSUFBSSxJQUFJLENBQUM7aUJBQ3BCO3FCQUFNLElBQUksSUFBSSxLQUFLLE9BQU8sRUFBRTtvQkFDekIsRUFBRSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDaEIsSUFBSSxHQUFHLEVBQUU7d0JBQ0wsT0FBTyxFQUFFLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTs0QkFDbEIsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUM7eUJBQ2pCO3FCQUNKO29CQUNELFFBQVEsSUFBSSxJQUFJLENBQUM7aUJBQ3BCO3FCQUFNO29CQUNILEVBQUUsR0FBRyxDQUFDLENBQUM7aUJBQ1Y7Z0JBQ0QsUUFBUSxJQUFJLEVBQUUsQ0FBQztnQkFDZixXQUFXLEdBQUcsSUFBSSxDQUFDO2FBQ3RCO1NBQ0o7S0FDSjtJQUNELE9BQU8sUUFBUSxDQUFDO0FBQ3BCLENBQUM7QUFFRDs7Ozs7OztHQU9HO0FBQ0gsU0FBUyxzQkFBc0IsQ0FBQyxVQUFVLEVBQUUsUUFBUSxFQUFFLEdBQUc7SUFDckQsT0FBTztJQUNQLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQztJQUNiLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNWLElBQUksUUFBUSxHQUFHLEVBQUUsQ0FBQztJQUNsQixJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDWixHQUFHLEdBQUcsS0FBSyxDQUFDO0lBQ1osS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDeEMsSUFBSSxDQUFDLEdBQUcsVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNqQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLE1BQU0sRUFBRTtZQUNyQixRQUFRLElBQUksNkNBQTZDLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztTQUNoRjtRQUNELElBQUksSUFBSSxLQUFLLENBQUMsRUFBRTtZQUNaLElBQUksTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksTUFBTSxFQUFFO2dCQUM1QixRQUFRLElBQUksSUFBSSxHQUFHLE9BQU8sQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztnQkFDbkYsSUFBSSxHQUFHLENBQUMsQ0FBQztnQkFDVCxTQUFTO2FBQ1o7aUJBQU07Z0JBQ0gsUUFBUSxJQUFJLGtEQUFrRCxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUM7Z0JBQ3JGLElBQUksR0FBRyxDQUFDLENBQUM7YUFDWjtTQUNKO1FBQ0QsSUFBSSxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxNQUFNLEVBQUU7WUFDNUIsSUFBSSxHQUFHLENBQUMsQ0FBQztTQUNaO2FBQU07WUFDSCxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksUUFBUSxLQUFLLE9BQU8sRUFBRTtnQkFDbEMsUUFBUSxJQUFJLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO2FBQzFDO2lCQUFNLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxRQUFRLEtBQUssUUFBUSxFQUFFO2dCQUMxQyxRQUFRLElBQUksVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7YUFDMUM7aUJBQU07Z0JBQ0gsRUFBRSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDaEIsSUFBSSxHQUFHLEVBQUU7b0JBQ0wsT0FBTyxFQUFFLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTt3QkFDbEIsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUM7cUJBQ2pCO2lCQUNKO2dCQUNELFFBQVEsSUFBSSxJQUFJLEdBQUcsRUFBRSxHQUFHLEdBQUcsQ0FBQzthQUMvQjtTQUNKO0tBQ0o7SUFDRCxPQUFPLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDdEQsQ0FBQztBQUVELElBQUksV0FBVyxHQUFHLElBQUksS0FBSyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQzVHOzs7O0dBSUc7QUFDSSxNQUFNLE1BQU0sR0FBRyxVQUFVLENBQUM7SUFDN0IsSUFBSSxVQUFVLEdBQUcsRUFBRSxDQUFDO0lBQ3BCLElBQUksU0FBUyxHQUFHLElBQUksQ0FBQztJQUNyQixLQUFLLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHO1FBQ3JCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDUCxJQUFJLFNBQVMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7UUFDL0IsSUFBSSxDQUFDLFNBQVMsSUFBSSxTQUFTLEtBQUssQ0FBQyxFQUFFO1lBQy9CLFNBQVMsR0FBRyxLQUFLLENBQUM7WUFDbEIsVUFBVSxJQUFJLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQztTQUN4QztLQUNKO0lBQ0QsT0FBTyxJQUFJLEdBQUcsQ0FBQyxVQUFVLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQ3pELENBQUMsQ0FBQztBQVpXLFFBQUEsTUFBTSxVQVlqQjtBQUVGOzs7OztHQUtHO0FBQ0ksTUFBTSxVQUFVLEdBQUcsQ0FBQyxHQUFXLEVBQVUsRUFBRTtJQUM5QyxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUU7UUFDakIsT0FBTyxHQUFHLENBQUMsT0FBTyxDQUFDLHNCQUFzQixFQUFFO1lBQ3ZDLE9BQU8sTUFBTSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDM0QsQ0FBQyxDQUFDLENBQUM7S0FDTjtJQUNELE9BQU8sR0FBRyxDQUFDO0FBQ2YsQ0FBQyxDQUFDO0FBUFcsUUFBQSxVQUFVLGNBT3JCO0FBRUYsSUFBSSxJQUFJLEdBQUcsVUFBVSxDQUFDLEVBQUUsR0FBRztJQUN2QixDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNqQyxPQUFPLENBQUMsQ0FBQyxNQUFNLEdBQUcsR0FBRyxFQUFFO1FBQ25CLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0tBQ2Y7SUFDRCxPQUFPLENBQUMsQ0FBQztBQUNiLENBQUMsQ0FBQztBQUVGLFNBQVMsR0FBRyxDQUFDLENBQUM7SUFDVixPQUFPLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDMUIsQ0FBQztBQUVELFNBQVMsR0FBRyxDQUFDLENBQUM7SUFDVixPQUFPLFFBQVEsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDM0IsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0ksTUFBTSxXQUFXLEdBQUcsQ0FBQyxNQUFNLEVBQUUsRUFBRTtJQUNsQyxJQUFJLEdBQUcsR0FBRyxFQUFFLENBQUM7SUFDYixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDVixJQUFJLE9BQU8sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO0lBQzVCLElBQUksQ0FBQyxDQUFDO0lBRU4sT0FBTyxDQUFDLEdBQUcsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUU7UUFDeEIsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDekIsR0FBRyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0tBQ2hDO0lBQ0QsT0FBTyxHQUFHLENBQUM7QUFDZixDQUFDLENBQUM7QUFYVyxRQUFBLFdBQVcsZUFXdEI7QUFFRjs7Ozs7OztHQU9HO0FBQ0ksTUFBTSxpQkFBaUIsR0FBRyxDQUFDLE1BQU0sRUFBRSxFQUFFO0lBQ3hDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNWLElBQUksT0FBTyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7SUFDNUIsSUFBSSxDQUFDLENBQUM7SUFFTixJQUFJLEdBQUcsR0FBRyxFQUFFLENBQUM7SUFDYixPQUFPLENBQUMsR0FBRyxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRTtRQUN4QixDQUFDLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN6QixHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQ2Y7SUFDRCxPQUFPLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDekIsQ0FBQyxDQUFDO0FBWFcsUUFBQSxpQkFBaUIscUJBVzVCO0FBRUY7Ozs7R0FJRztBQUNJLE1BQU0sY0FBYyxHQUFHLENBQUMsTUFBTSxFQUFFLEVBQUU7SUFDckMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1YsSUFBSSxPQUFPLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztJQUM1QixJQUFJLENBQUMsQ0FBQztJQUNOLElBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQztJQUNiLE9BQU8sQ0FBQyxHQUFHLE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFO1FBQ3hCLENBQUMsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3pCLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDZjtJQUNELE9BQU8sR0FBRyxDQUFDO0FBQ2YsQ0FBQyxDQUFDO0FBVlcsUUFBQSxjQUFjLGtCQVV6QjtBQUVGOzs7OztHQUtHO0FBQ0ksTUFBTSxpQkFBaUIsR0FBRyxDQUFDLFlBQVksRUFBRSxFQUFFO0lBQzlDLElBQUksVUFBVSxHQUFHLFlBQVksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDN0YsSUFBSSxHQUFHLEdBQUcsRUFBRSxDQUFDO0lBQ2IsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDeEMsSUFBSSxHQUFHLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3hCLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7S0FDM0I7SUFDRCxPQUFPLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDekIsQ0FBQyxDQUFDO0FBUlcsUUFBQSxpQkFBaUIscUJBUTVCO0FBRUY7Ozs7O0dBS0c7QUFDSSxNQUFNLG1CQUFtQixHQUFHLENBQUMsWUFBWSxFQUFFLEVBQUU7SUFDaEQsSUFBSSxVQUFVLEdBQUcsWUFBWSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUM3RixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsVUFBVSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUN4QyxVQUFVLENBQUMsQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztLQUMvQztJQUNELE9BQU8sVUFBVSxDQUFDO0FBQ3RCLENBQUMsQ0FBQztBQU5XLFFBQUEsbUJBQW1CLHVCQU05QjtBQUVGOzs7OztHQUtHO0FBQ0ksTUFBTSxtQkFBbUIsR0FBRyxDQUFDLE1BQU0sRUFBRSxFQUFFO0lBQzFDLElBQUksTUFBTSxHQUFHLElBQUEsMkJBQW1CLEVBQUMsTUFBTSxDQUFDLENBQUM7SUFDekMsSUFBSSxNQUFNLEdBQUcsRUFBRSxDQUFDO0lBQ2hCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQ3BDLE1BQU0sSUFBSSxNQUFNLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztLQUNoRDtJQUNELE9BQU8sTUFBTSxDQUFDO0FBQ2xCLENBQUMsQ0FBQztBQVBXLFFBQUEsbUJBQW1CLHVCQU85QjtBQUVGOzs7O0dBSUc7QUFDSSxNQUFNLFlBQVksR0FBRyxDQUFDLE1BQU0sRUFBRSxFQUFFO0lBQ25DLElBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQztJQUNiLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNWLElBQUksT0FBTyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7SUFDNUIsSUFBSSxDQUFDLENBQUM7SUFFTixPQUFPLENBQUMsR0FBRyxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRTtRQUN4QixDQUFDLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN6QixHQUFHLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7S0FDaEM7SUFDRCxPQUFPLEdBQUcsQ0FBQztBQUNmLENBQUMsQ0FBQztBQVhXLFFBQUEsWUFBWSxnQkFXdkI7QUFFRjs7OztHQUlHO0FBQ0ksTUFBTSxXQUFXLEdBQUcsQ0FBQyxNQUFjLEVBQUUsRUFBRTtJQUMxQyxJQUFJLEdBQUcsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzVCLElBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQztJQUNiLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNWLElBQUksT0FBTyxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUM7SUFDekIsSUFBSSxDQUFDLENBQUM7SUFFTixPQUFPLENBQUMsR0FBRyxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRTtRQUN4QixDQUFDLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNyQyxHQUFHLElBQUksQ0FBQyxDQUFDO0tBQ1o7SUFDRCxPQUFPLEdBQUcsQ0FBQztBQUNmLENBQUMsQ0FBQTtBQVpZLFFBQUEsV0FBVyxlQVl2QjtBQUVEOzs7O0dBSUc7QUFDSSxNQUFNLFNBQVMsR0FBRyxVQUFVLE1BQU07SUFDckMsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBQ3pDLElBQUksSUFBSSxHQUFHLE1BQU0sQ0FBQyxNQUFNLEdBQUcsRUFBRSxJQUFJLEVBQUUsQ0FBQztJQUNwQyxJQUFJLFlBQVksR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUM7SUFDckQsSUFBSSxZQUFZLEdBQUcsQ0FBQyxFQUFFO1FBQ2xCLFlBQVksR0FBRyxDQUFDLENBQUM7S0FDcEI7SUFDRCxJQUFJLEdBQUcsR0FBRyxRQUFRLENBQUM7SUFDbkIsT0FBTyxHQUFHLENBQUMsTUFBTSxHQUFHLFlBQVksRUFBRTtRQUM5QixHQUFHLElBQUksR0FBRyxDQUFDO0tBQ2Q7SUFFRCxHQUFHLEdBQUcsWUFBWSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUM7SUFFaEMsSUFBSSxDQUFDLENBQUM7SUFDTixLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUNyQixHQUFHLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7S0FDM0I7SUFFRCxHQUFHLElBQUksYUFBYSxDQUFDO0lBQ3JCLElBQUksTUFBTSxDQUFDLE1BQU0sRUFBRTtRQUNmLEdBQUcsSUFBSSxJQUFJLENBQUM7S0FDZjtJQUVELElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNWLElBQUksU0FBUyxDQUFDO0lBQ2QsSUFBSSxVQUFVLENBQUM7SUFDZixJQUFJLENBQUMsQ0FBQztJQUVOLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQ3ZCLEdBQUcsSUFBSSxZQUFZLEdBQUcsSUFBSSxDQUFDLENBQUMsRUFBRSxZQUFZLENBQUMsR0FBRyxhQUFhLENBQUM7UUFDNUQsU0FBUyxHQUFHLENBQUMsS0FBSyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUN2QyxVQUFVLEdBQUcsRUFBRSxHQUFHLFNBQVMsQ0FBQztRQUU1QixJQUFJLENBQUMsQ0FBQztRQUNOLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsU0FBUyxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQzVCLEdBQUcsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUNoQyxDQUFDLEVBQUUsQ0FBQztTQUNQO1FBRUQsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxVQUFVLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDN0IsR0FBRyxJQUFJLEtBQUssQ0FBQztTQUNoQjtRQUVELENBQUMsSUFBSSxTQUFTLENBQUM7UUFDZixHQUFHLElBQUksS0FBSyxDQUFDO1FBRWIsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxTQUFTLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDNUIsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNkLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztZQUNyRSxDQUFDLEVBQUUsQ0FBQztTQUNQO1FBQ0QsR0FBRyxJQUFJLElBQUksQ0FBQztLQUNmO0lBQ0QsT0FBTyxHQUFHLENBQUM7QUFDZixDQUFDLENBQUM7QUF2RFcsUUFBQSxTQUFTLGFBdURwQjtBQUVGOzs7OztHQUtHO0FBQ0ksTUFBTSxTQUFTLEdBQUcsQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUU7SUFDckMsSUFBSSxHQUFHLENBQUM7SUFDUixJQUFJLENBQUMsQ0FBQztJQUNOLElBQUksTUFBTSxHQUFHLEVBQUUsQ0FBQztJQUNoQixLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDN0IsR0FBRyxHQUFHLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3JDLE1BQU0sSUFBSSxDQUFDLENBQUMsTUFBTSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUNsRTtJQUNELE9BQU8sTUFBTSxDQUFDO0FBQ2xCLENBQUMsQ0FBQztBQVRXLFFBQUEsU0FBUyxhQVNwQiJ9 \ No newline at end of file diff --git a/packages/osrl/lib/StringUtils.d.ts b/packages/osrl/lib/StringUtils.d.ts new file mode 100644 index 00000000..b9166059 --- /dev/null +++ b/packages/osrl/lib/StringUtils.d.ts @@ -0,0 +1,75 @@ +/// +export declare const DefaultDelimiter: { + begin: string; + end: string; +}; +export declare const hasFlag: (field: any, enumValue: any) => boolean; +export declare const hasFlagHex: (field: any, enumValue: any) => boolean; +export declare const disableFlag: (enumValue: any, field: any) => any; +/** + * The minimum location of high surrogates + */ +export declare const HIGH_SURROGATE_MIN = 55296; +/** + * The maximum location of high surrogates + */ +export declare const HIGH_SURROGATE_MAX = 56319; +/** + * The minimum location of low surrogates + */ +export declare const LOW_SURROGATE_MIN = 56320; +/** + * The maximum location of low surrogates + */ +export declare const LOW_SURROGATE_MAX = 57343; +export declare const capitalize: (word: any) => any; +export declare const getJson: (inData: any, validOnly: any, ommit: any) => any; +/** + * Escapes a string so that it can safely be passed to the RegExp constructor. + * @param text The string to be escaped + * @return The escaped string + */ +export declare function escapeRegExpEx(text: string): string; +/** + * Sanitizes a string to protect against tag injection. + * @param xml The string to be escaped + * @param forAttribute Whether to also escape ', ", and > in addition to < and & + * @return The escaped string + */ +export declare function escapeXml(xml: string, forAttribute?: boolean): string; +export declare function createUUID(): string; +export declare function escapeRegExp(str: string): string; +export declare function findOcurrences(expression: string, delimiters: IDelimiter): Array; +export declare function multipleReplace(str: string, hash: any): string; +export declare function replaceAll(find: string, replace: string, str: string): string; +export interface IDelimiter { + begin: string; + end: string; +} +export declare function replace(str: string, needle: any | null, what: string | any, delimiters: IDelimiter): string; +export type ByteBuffer = Uint16Array | Uint8Array | Buffer | number[]; +export interface Codec { + encode(data: string): number[]; + decode(data: ByteBuffer): string; +} +/** + * Provides facilities for encoding a string into an ASCII-encoded byte buffer and + * decoding an ASCII-encoded byte buffer into a string. + */ +export declare const ascii: Codec; +/** + * Provides facilities for encoding a string into a Base64-encoded byte buffer and + * decoding a Base64-encoded byte buffer into a string. + */ +export declare const base64: Codec; +/** + * Provides facilities for encoding a string into a hex-encoded byte buffer and + * decoding a hex-encoded byte buffer into a string. + */ +export declare const hex: Codec; +/** + * Provides facilities for encoding a string into a UTF-8-encoded byte buffer and + * decoding a UTF-8-encoded byte buffer into a string. + * Inspired by the work of: https://github.com/mathiasbynens/utf8.js + */ +export declare const utf8: Codec; diff --git a/packages/osrl/lib/StringUtils.js b/packages/osrl/lib/StringUtils.js new file mode 100644 index 00000000..ea672ff0 --- /dev/null +++ b/packages/osrl/lib/StringUtils.js @@ -0,0 +1,437 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.utf8 = exports.hex = exports.base64 = exports.ascii = exports.replace = exports.replaceAll = exports.multipleReplace = exports.findOcurrences = exports.escapeRegExp = exports.createUUID = exports.escapeXml = exports.escapeRegExpEx = exports.getJson = exports.capitalize = exports.LOW_SURROGATE_MAX = exports.LOW_SURROGATE_MIN = exports.HIGH_SURROGATE_MAX = exports.HIGH_SURROGATE_MIN = exports.disableFlag = exports.hasFlagHex = exports.hasFlag = exports.DefaultDelimiter = void 0; +const primitives_1 = require("@plastichub/core/primitives"); +const escapeRegExpPattern = /[[\]{}()|\/\\^$.*+?]/g; +const escapeXmlPattern = /[&<]/g; +const escapeXmlForPattern = /[&<>'"]/g; +const escapeXmlMap = { + '&': '&', + '<': '<', + '>': '>', + '"': '"', + '\'': ''' +}; +exports.DefaultDelimiter = { + begin: '{', + end: '}' +}; +const hasFlag = (field, enumValue) => { + //noinspection JSBitwiseOperatorUsage,JSBitwiseOperatorUsage,JSBitwiseOperatorUsage,JSBitwiseOperatorUsage,JSBitwiseOperatorUsage,JSBitwiseOperatorUsage,JSBitwiseOperatorUsage,JSBitwiseOperatorUsage + // tslint:disable-next-line:no-bitwise + return ((1 << enumValue) & field) ? true : false; +}; +exports.hasFlag = hasFlag; +const hasFlagHex = (field, enumValue) => { + //noinspection JSBitwiseOperatorUsage,JSBitwiseOperatorUsage,JSBitwiseOperatorUsage,JSBitwiseOperatorUsage,JSBitwiseOperatorUsage,JSBitwiseOperatorUsage,JSBitwiseOperatorUsage,JSBitwiseOperatorUsage + // tslint:disable-next-line:no-bitwise + return enumValue & field ? true : false; +}; +exports.hasFlagHex = hasFlagHex; +const disableFlag = (enumValue, field) => { + enumValue &= ~(1 << field); + return enumValue; +}; +exports.disableFlag = disableFlag; +/** + * The minimum location of high surrogates + */ +exports.HIGH_SURROGATE_MIN = 0xD800; +/** + * The maximum location of high surrogates + */ +exports.HIGH_SURROGATE_MAX = 0xDBFF; +/** + * The minimum location of low surrogates + */ +exports.LOW_SURROGATE_MIN = 0xDC00; +/** + * The maximum location of low surrogates + */ +exports.LOW_SURROGATE_MAX = 0xDFFF; +const BASE64_KEYSTR = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='; +const capitalize = (word) => { + return word.substring(0, 1).toUpperCase() + word.substring(1); +}; +exports.capitalize = capitalize; +const getJson = (inData, validOnly, ommit) => { + try { + return (0, primitives_1.isString)(inData) ? JSON.parse(inData) : validOnly === true ? null : inData; + } + catch (e) { + ommit !== false && console.error('error parsing json data ' + inData + ' error = ' + e); + } + return null; +}; +exports.getJson = getJson; +/** + * Escapes a string so that it can safely be passed to the RegExp constructor. + * @param text The string to be escaped + * @return The escaped string + */ +function escapeRegExpEx(text) { + return !text ? text : text.replace(escapeRegExpPattern, '\\$&'); +} +exports.escapeRegExpEx = escapeRegExpEx; +/** + * Sanitizes a string to protect against tag injection. + * @param xml The string to be escaped + * @param forAttribute Whether to also escape ', ", and > in addition to < and & + * @return The escaped string + */ +function escapeXml(xml, forAttribute = true) { + if (!xml) { + return xml; + } + const pattern = forAttribute ? escapeXmlForPattern : escapeXmlPattern; + return xml.replace(pattern, function (character) { + return escapeXmlMap[character]; + }); +} +exports.escapeXml = escapeXml; +function createUUID() { + const S4 = function () { + return (((1 + Math.random()) * 0x10000) | 0).toString(16).substring(1); + }; + return (S4() + S4() + '-' + S4() + '-' + S4() + '-' + S4() + '-' + S4() + S4() + S4()); +} +exports.createUUID = createUUID; +function escapeRegExp(str) { + const special = ['[', ']', '(', ')', '{', '}', '*', '+', '.', '|', '||']; + for (let n = 0; n < special.length; n++) { + str = str.replace(special[n], '\\' + special[n]); + } + return str; +} +exports.escapeRegExp = escapeRegExp; +; +function findOcurrences(expression, delimiters) { + // tslint:disable-next-line:no-object-literal-type-assertion + const d = { + begin: escapeRegExp(delimiters.begin), + end: escapeRegExp(delimiters.end) + }; + return expression.match(new RegExp(d.begin + '([^' + d.end + ']*)' + d.end, 'g')); +} +exports.findOcurrences = findOcurrences; +; +function multipleReplace(str, hash) { + // to array + const a = []; + // tslint:disable-next-line:forin + for (let key in hash) { + a[a.length] = key; + } + return str.replace(new RegExp(a.join('\\b|\\b'), 'g'), function (m) { + return hash[m] || hash['\\' + m]; + }); +} +exports.multipleReplace = multipleReplace; +; +function replaceAll(find, replace, str) { + return str ? str.split(find).join(replace) : ''; +} +exports.replaceAll = replaceAll; +; +function replace(str, needle, what, delimiters) { + if (!str) { + return ''; + } + if (what && (0, primitives_1.isObject)(what) || (0, primitives_1.isArray)(what)) { + what = what; + if (!delimiters) { + // fast case + return multipleReplace(str, what); + } + const occurrence = findOcurrences(str, delimiters); + if (!occurrence) { + return str; + } + else { + for (let i = 0, j = occurrence.length; i < j; i++) { + const el = occurrence[i]; + // strip off delimiters + let _variableName = replaceAll(delimiters.begin, '', el); + _variableName = replaceAll(delimiters.end, '', _variableName); + str = replaceAll(el, (what[_variableName]), str); + } + } + return str; + } + // fast case + return replaceAll(needle, what, str); +} +exports.replace = replace; +; +function decodeUtf8EncodedCodePoint(codePoint, validationRange = [0, Infinity], checkSurrogate) { + if (codePoint < validationRange[0] || codePoint > validationRange[1]) { + throw Error('Invalid continuation byte'); + } + if (checkSurrogate && codePoint >= exports.HIGH_SURROGATE_MIN && codePoint <= exports.LOW_SURROGATE_MAX) { + throw Error('Surrogate is not a scalar value'); + } + let encoded = ''; + if (codePoint > 0xFFFF) { + codePoint -= 0x010000; + encoded += String.fromCharCode(codePoint >>> 0x10 & 0x03FF | exports.HIGH_SURROGATE_MIN); + codePoint = exports.LOW_SURROGATE_MIN | codePoint & 0x03FF; + } + encoded += String.fromCharCode(codePoint); + return encoded; +} +function validateUtf8EncodedCodePoint(codePoint) { + if ((codePoint & 0xC0) !== 0x80) { + throw Error('Invalid continuation byte'); + } +} +/** + * Provides facilities for encoding a string into an ASCII-encoded byte buffer and + * decoding an ASCII-encoded byte buffer into a string. + */ +exports.ascii = { + /** + * Encodes a string into an ASCII-encoded byte buffer. + * + * @param data The text string to encode + */ + encode(data) { + if (data == null) { + return []; + } + const buffer = []; + for (let i = 0, length = data.length; i < length; i++) { + buffer[i] = data.charCodeAt(i); + } + return buffer; + }, + /** + * Decodes an ASCII-encoded byte buffer into a string. + * + * @param data The byte buffer to decode + */ + decode(data) { + if (data == null) { + return ''; + } + let decoded = ''; + for (let i = 0, length = data.length; i < length; i++) { + decoded += String.fromCharCode(data[i]); + } + return decoded; + } +}; +/** + * Provides facilities for encoding a string into a Base64-encoded byte buffer and + * decoding a Base64-encoded byte buffer into a string. + */ +exports.base64 = { + /** + * Encodes a Base64-encoded string into a Base64 byte buffer. + * + * @param data The Base64-encoded string to encode + */ + encode(data) { + if (data == null) { + return []; + } + const buffer = []; + let i = 0; + let length = data.length; + while (data[--length] === '=') { } + while (i < length) { + let encoded = BASE64_KEYSTR.indexOf(data[i++]) << 18; + if (i <= length) { + encoded |= BASE64_KEYSTR.indexOf(data[i++]) << 12; + } + if (i <= length) { + encoded |= BASE64_KEYSTR.indexOf(data[i++]) << 6; + } + if (i <= length) { + encoded |= BASE64_KEYSTR.indexOf(data[i++]); + } + buffer.push((encoded >>> 16) & 0xff); + buffer.push((encoded >>> 8) & 0xff); + buffer.push(encoded & 0xff); + } + while (buffer[buffer.length - 1] === 0) { + buffer.pop(); + } + return buffer; + }, + /** + * Decodes a Base64-encoded byte buffer into a Base64-encoded string. + * + * @param data The byte buffer to decode + */ + decode(data) { + if (data == null) { + return ''; + } + let decoded = ''; + let i = 0; + for (let length = data.length - (data.length % 3); i < length;) { + let encoded = data[i++] << 16 | data[i++] << 8 | data[i++]; + decoded += BASE64_KEYSTR.charAt((encoded >>> 18) & 0x3F); + decoded += BASE64_KEYSTR.charAt((encoded >>> 12) & 0x3F); + decoded += BASE64_KEYSTR.charAt((encoded >>> 6) & 0x3F); + decoded += BASE64_KEYSTR.charAt(encoded & 0x3F); + } + if (data.length % 3 === 1) { + let encoded = data[i++] << 16; + decoded += BASE64_KEYSTR.charAt((encoded >>> 18) & 0x3f); + decoded += BASE64_KEYSTR.charAt((encoded >>> 12) & 0x3f); + decoded += '=='; + } + else if (data.length % 3 === 2) { + let encoded = data[i++] << 16 | data[i++] << 8; + decoded += BASE64_KEYSTR.charAt((encoded >>> 18) & 0x3f); + decoded += BASE64_KEYSTR.charAt((encoded >>> 12) & 0x3f); + decoded += BASE64_KEYSTR.charAt((encoded >>> 6) & 0x3f); + decoded += '='; + } + return decoded; + } +}; +/** + * Provides facilities for encoding a string into a hex-encoded byte buffer and + * decoding a hex-encoded byte buffer into a string. + */ +exports.hex = { + /** + * Encodes a string into a hex-encoded byte buffer. + * + * @param data The hex-encoded string to encode + */ + encode(data) { + if (data == null) { + return []; + } + const buffer = []; + for (let i = 0, length = data.length; i < length; i += 2) { + let encodedChar = parseInt(data.substr(i, 2), 16); + buffer.push(encodedChar); + } + return buffer; + }, + /** + * Decodes a hex-encoded byte buffer into a hex-encoded string. + * + * @param data The byte buffer to decode + */ + decode(data) { + if (data == null) { + return ''; + } + let decoded = ''; + for (let i = 0, length = data.length; i < length; i++) { + decoded += data[i].toString(16).toUpperCase(); + } + return decoded; + } +}; +/** + * Provides facilities for encoding a string into a UTF-8-encoded byte buffer and + * decoding a UTF-8-encoded byte buffer into a string. + * Inspired by the work of: https://github.com/mathiasbynens/utf8.js + */ +exports.utf8 = { + /** + * Encodes a string into a UTF-8-encoded byte buffer. + * + * @param data The text string to encode + */ + encode(data) { + if (data == null) { + return []; + } + const buffer = []; + for (let i = 0, length = data.length; i < length; i++) { + let encodedChar = data.charCodeAt(i); + /** + * Surrogates + * http://en.wikipedia.org/wiki/Universal_Character_Set_characters + */ + if (encodedChar >= exports.HIGH_SURROGATE_MIN && encodedChar <= exports.HIGH_SURROGATE_MAX) { + let lowSurrogate = data.charCodeAt(i + 1); + if (lowSurrogate >= exports.LOW_SURROGATE_MIN && lowSurrogate <= exports.LOW_SURROGATE_MAX) { + encodedChar = 0x010000 + (encodedChar - exports.HIGH_SURROGATE_MIN) * 0x0400 + (lowSurrogate - exports.LOW_SURROGATE_MIN); + i++; + } + } + if (encodedChar < 0x80) { + buffer.push(encodedChar); + } + else { + if (encodedChar < 0x800) { + buffer.push(((encodedChar >> 0x06) & 0x1F) | 0xC0); + } + else if (encodedChar < 0x010000) { + if (encodedChar >= exports.HIGH_SURROGATE_MIN && encodedChar <= exports.LOW_SURROGATE_MAX) { + throw Error('Surrogate is not a scalar value'); + } + buffer.push(((encodedChar >> 0x0C) & 0x0F) | 0xE0); + buffer.push(((encodedChar >> 0x06) & 0x3F) | 0x80); + } + else if (encodedChar < 0x200000) { + buffer.push(((encodedChar >> 0x12) & 0x07) | 0xF0); + buffer.push(((encodedChar >> 0x0C) & 0x3F) | 0x80); + buffer.push(((encodedChar >> 0x06) & 0x3F) | 0x80); + } + buffer.push((encodedChar & 0x3F) | 0x80); + } + } + return buffer; + }, + /** + * Decodes a UTF-8-encoded byte buffer into a string. + * + * @param data The byte buffer to decode + */ + decode(data) { + if (data == null) { + return ''; + } + let decoded = ''; + for (let i = 0, length = data.length; i < length; i++) { + let byte1 = data[i] & 0xFF; + if ((byte1 & 0x80) === 0) { + decoded += decodeUtf8EncodedCodePoint(byte1); + } + else if ((byte1 & 0xE0) === 0xC0) { + let byte2 = data[++i] & 0xFF; + validateUtf8EncodedCodePoint(byte2); + byte2 = byte2 & 0x3F; + let encodedByte = ((byte1 & 0x1F) << 0x06) | byte2; + decoded += decodeUtf8EncodedCodePoint(encodedByte, [0x80, Infinity]); + } + else if ((byte1 & 0xF0) === 0xE0) { + let byte2 = data[++i] & 0xFF; + validateUtf8EncodedCodePoint(byte2); + byte2 = byte2 & 0x3F; + let byte3 = data[++i] & 0xFF; + validateUtf8EncodedCodePoint(byte3); + byte3 = byte3 & 0x3F; + let encodedByte = ((byte1 & 0x1F) << 0x0C) | (byte2 << 0x06) | byte3; + decoded += decodeUtf8EncodedCodePoint(encodedByte, [0x0800, Infinity], true); + } + else if ((byte1 & 0xF8) === 0xF0) { + let byte2 = data[++i] & 0xFF; + validateUtf8EncodedCodePoint(byte2); + byte2 = byte2 & 0x3F; + let byte3 = data[++i] & 0xFF; + validateUtf8EncodedCodePoint(byte3); + byte3 = byte3 & 0x3F; + let byte4 = data[++i] & 0xFF; + validateUtf8EncodedCodePoint(byte4); + byte4 = byte4 & 0x3F; + let encodedByte = ((byte1 & 0x1F) << 0x0C) | (byte2 << 0x0C) | (byte3 << 0x06) | byte4; + decoded += decodeUtf8EncodedCodePoint(encodedByte, [0x010000, 0x10FFFF]); + } + else { + validateUtf8EncodedCodePoint(byte1); + } + } + return decoded; + } +}; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3RyaW5nVXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvbGliL1N0cmluZ1V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUNBLDREQUF5RTtBQUV6RSxNQUFNLG1CQUFtQixHQUFHLHVCQUF1QixDQUFDO0FBQ3BELE1BQU0sZ0JBQWdCLEdBQUcsT0FBTyxDQUFDO0FBQ2pDLE1BQU0sbUJBQW1CLEdBQUcsVUFBVSxDQUFDO0FBQ3ZDLE1BQU0sWUFBWSxHQUFpQjtJQUMvQixHQUFHLEVBQUUsT0FBTztJQUNaLEdBQUcsRUFBRSxNQUFNO0lBQ1gsR0FBRyxFQUFFLE1BQU07SUFDWCxHQUFHLEVBQUUsUUFBUTtJQUNiLElBQUksRUFBRSxPQUFPO0NBQ2hCLENBQUM7QUFDVyxRQUFBLGdCQUFnQixHQUFHO0lBQzVCLEtBQUssRUFBRSxHQUFHO0lBRVYsR0FBRyxFQUFFLEdBQUc7Q0FDWCxDQUFDO0FBQ0ssTUFBTSxPQUFPLEdBQUcsQ0FBQyxLQUFLLEVBQUUsU0FBUyxFQUFFLEVBQUU7SUFDeEMsc01BQXNNO0lBQ3RNLHNDQUFzQztJQUN0QyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksU0FBUyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO0FBQ3JELENBQUMsQ0FBQztBQUpXLFFBQUEsT0FBTyxXQUlsQjtBQUNLLE1BQU0sVUFBVSxHQUFHLENBQUMsS0FBSyxFQUFFLFNBQVMsRUFBRSxFQUFFO0lBQzNDLHNNQUFzTTtJQUN0TSxzQ0FBc0M7SUFDdEMsT0FBTyxTQUFTLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztBQUM1QyxDQUFDLENBQUM7QUFKVyxRQUFBLFVBQVUsY0FJckI7QUFDSyxNQUFNLFdBQVcsR0FBRyxDQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUUsRUFBRTtJQUM1QyxTQUFTLElB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 \ No newline at end of file diff --git a/packages/osrl/lib/arrays.d.ts b/packages/osrl/lib/arrays.d.ts new file mode 100644 index 00000000..f499d4c4 --- /dev/null +++ b/packages/osrl/lib/arrays.d.ts @@ -0,0 +1,62 @@ +/** + * Returns the last element of an array. + * @param array The array. + * @param n Which element from the end (default ist zero). + */ +export declare function tail(array: T[], n?: number): T; +export declare function equals(one: T[], other: T[], itemEquals?: (a: T, b: T) => boolean): boolean; +export declare function binarySearch(array: T[], key: T, comparator: (op1: T, op2: T) => number): number; +/** + * Takes a sorted array and a function p. The array is sorted in such a way that all elements where p(x) is false + * are located before all elements where p(x) is true. + * @returns the least x for which p(x) is true or array.length if no element fullfills the given function. + */ +export declare function findFirst(array: T[], p: (x: T) => boolean): number; +/** + * Returns the top N elements from the array. + * + * Faster than sorting the entire array when the array is a lot larger than N. + * + * @param array The unsorted array. + * @param compare A sort function for the elements. + * @param n The number of elements to return. + * @return The first n elemnts from array when sorted with compare. + */ +export declare function top(array: T[], compare: (a: T, b: T) => number, n: number): T[]; +/** + * @returns a new array with all undefined or null values removed. The original array is not modified at all. + */ +export declare function coalesce(array: T[]): T[]; +/** + * Moves the element in the array for the provided positions. + */ +export declare function move(array: any[], from: number, to: number): void; +/** + * @returns {{false}} if the provided object is an array + * and not empty. + */ +export declare function isFalsyOrEmpty(obj: any): boolean; +/** + * Removes duplicates from the given array. The optional keyFn allows to specify + * how elements are checked for equalness by returning a unique string for each. + */ +export declare function distinct(array: T[], keyFn?: (t: T) => string): T[]; +export declare function uniqueFilter(keyFn: (t: T) => string): (t: T) => boolean; +export declare function firstIndex(array: T[], fn: (item: T) => boolean): number; +export declare function first(array: T[], fn: (item: T) => boolean, notFoundValue?: T): T; +export declare function commonPrefixLength(one: T[], other: T[], equals?: (a: T, b: T) => boolean): number; +export declare function flatten(arr: T[][]): T[]; +export declare function range(to: number, from?: number): number[]; +export declare function fill(num: number, valueFn: () => T, arr?: T[]): T[]; +export declare function index(array: T[], indexer: (t: T) => string): { + [key: string]: T; +}; +export declare function index(array: T[], indexer: (t: T) => string, merger?: (t: T, r: R) => R): { + [key: string]: R; +}; +/** + * Inserts an element into an array. Returns a function which, when + * called, will remove that element from the array. + */ +export declare function insert(array: T[], element: T): () => void; +export declare function remove(array: any[], element: any): void; diff --git a/packages/osrl/lib/arrays.js b/packages/osrl/lib/arrays.js new file mode 100644 index 00000000..98dcd8e0 --- /dev/null +++ b/packages/osrl/lib/arrays.js @@ -0,0 +1,221 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +'use strict'; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.remove = exports.insert = exports.index = exports.fill = exports.range = exports.flatten = exports.commonPrefixLength = exports.first = exports.firstIndex = exports.uniqueFilter = exports.distinct = exports.isFalsyOrEmpty = exports.move = exports.coalesce = exports.top = exports.findFirst = exports.binarySearch = exports.equals = exports.tail = void 0; +/** + * Returns the last element of an array. + * @param array The array. + * @param n Which element from the end (default ist zero). + */ +function tail(array, n = 0) { + return array[array.length - (1 + n)]; +} +exports.tail = tail; +function equals(one, other, itemEquals = (a, b) => a === b) { + if (one.length !== other.length) { + return false; + } + for (let i = 0, len = one.length; i < len; i++) { + if (!itemEquals(one[i], other[i])) { + return false; + } + } + return true; +} +exports.equals = equals; +function binarySearch(array, key, comparator) { + let low = 0, high = array.length - 1; + while (low <= high) { + let mid = ((low + high) / 2) | 0; + let comp = comparator(array[mid], key); + if (comp < 0) { + low = mid + 1; + } + else if (comp > 0) { + high = mid - 1; + } + else { + return mid; + } + } + return -(low + 1); +} +exports.binarySearch = binarySearch; +/** + * Takes a sorted array and a function p. The array is sorted in such a way that all elements where p(x) is false + * are located before all elements where p(x) is true. + * @returns the least x for which p(x) is true or array.length if no element fullfills the given function. + */ +function findFirst(array, p) { + let low = 0, high = array.length; + if (high === 0) { + return 0; // no children + } + while (low < high) { + let mid = Math.floor((low + high) / 2); + if (p(array[mid])) { + high = mid; + } + else { + low = mid + 1; + } + } + return low; +} +exports.findFirst = findFirst; +/** + * Returns the top N elements from the array. + * + * Faster than sorting the entire array when the array is a lot larger than N. + * + * @param array The unsorted array. + * @param compare A sort function for the elements. + * @param n The number of elements to return. + * @return The first n elemnts from array when sorted with compare. + */ +function top(array, compare, n) { + if (n === 0) { + return []; + } + const result = array.slice(0, n).sort(compare); + for (let i = n, m = array.length; i < m; i++) { + const element = array[i]; + if (compare(element, result[n - 1]) < 0) { + result.pop(); + const j = findFirst(result, e => compare(element, e) < 0); + result.splice(j, 0, element); + } + } + return result; +} +exports.top = top; +/** + * @returns a new array with all undefined or null values removed. The original array is not modified at all. + */ +function coalesce(array) { + if (!array) { + return array; + } + return array.filter(e => !!e); +} +exports.coalesce = coalesce; +/** + * Moves the element in the array for the provided positions. + */ +function move(array, from, to) { + array.splice(to, 0, array.splice(from, 1)[0]); +} +exports.move = move; +/** + * @returns {{false}} if the provided object is an array + * and not empty. + */ +function isFalsyOrEmpty(obj) { + return !Array.isArray(obj) || obj.length === 0; +} +exports.isFalsyOrEmpty = isFalsyOrEmpty; +/** + * Removes duplicates from the given array. The optional keyFn allows to specify + * how elements are checked for equalness by returning a unique string for each. + */ +function distinct(array, keyFn) { + if (!keyFn) { + return array.filter((element, position) => { + return array.indexOf(element) === position; + }); + } + const seen = Object.create(null); + return array.filter((elem) => { + const key = keyFn(elem); + if (seen[key]) { + return false; + } + seen[key] = true; + return true; + }); +} +exports.distinct = distinct; +function uniqueFilter(keyFn) { + const seen = Object.create(null); + return element => { + const key = keyFn(element); + if (seen[key]) { + return false; + } + seen[key] = true; + return true; + }; +} +exports.uniqueFilter = uniqueFilter; +function firstIndex(array, fn) { + for (let i = 0; i < array.length; i++) { + const element = array[i]; + if (fn(element)) { + return i; + } + } + return -1; +} +exports.firstIndex = firstIndex; +function first(array, fn, notFoundValue = null) { + const index = firstIndex(array, fn); + return index < 0 ? notFoundValue : array[index]; +} +exports.first = first; +function commonPrefixLength(one, other, equals = (a, b) => a === b) { + let result = 0; + for (let i = 0, len = Math.min(one.length, other.length); i < len && equals(one[i], other[i]); i++) { + result++; + } + return result; +} +exports.commonPrefixLength = commonPrefixLength; +function flatten(arr) { + return arr.reduce((r, v) => r.concat(v), []); +} +exports.flatten = flatten; +function range(to, from = 0) { + const result = []; + for (let i = from; i < to; i++) { + result.push(i); + } + return result; +} +exports.range = range; +function fill(num, valueFn, arr = []) { + for (let i = 0; i < num; i++) { + arr[i] = valueFn(); + } + return arr; +} +exports.fill = fill; +function index(array, indexer, merger = t => t) { + return array.reduce((r, t) => { + const key = indexer(t); + r[key] = merger(t, r[key]); + return r; + }, Object.create(null)); +} +exports.index = index; +/** + * Inserts an element into an array. Returns a function which, when + * called, will remove that element from the array. + */ +function insert(array, element) { + array.push(element); + return () => { + const index = array.indexOf(element); + if (index > -1) { + array.splice(index, 1); + } + }; +} +exports.insert = insert; +function remove(array, element) { + array.splice(array.indexOf(element)); +} +exports.remove = remove; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJyYXlzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2xpYi9hcnJheXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7OztnR0FHZ0c7QUFDaEcsWUFBWSxDQUFDOzs7QUFFYjs7OztHQUlHO0FBQ0gsU0FBZ0IsSUFBSSxDQUFJLEtBQVUsRUFBRSxJQUFZLENBQUM7SUFDaEQsT0FBTyxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3RDLENBQUM7QUFGRCxvQkFFQztBQUVELFNBQWdCLE1BQU0sQ0FBSSxHQUFRLEVBQUUsS0FBVSxFQUFFLGFBQXNDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUM7SUFDdEcsSUFBSSxHQUFHLENBQUMsTUFBTSxLQUFLLEtBQUssQ0FBQyxNQUFNLEVBQUU7UUFDaEMsT0FBTyxLQUFLLENBQUM7S0FDYjtJQUVELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDL0MsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDbEMsT0FBTyxLQUFLLENBQUM7U0FDYjtLQUNEO0lBRUQsT0FBTyxJQUFJLENBQUM7QUFDYixDQUFDO0FBWkQsd0JBWUM7QUFFRCxTQUFnQixZQUFZLENBQUksS0FBVSxFQUFFLEdBQU0sRUFBRSxVQUFzQztJQUN6RixJQUFJLEdBQUcsR0FBRyxDQUFDLEVBQ1YsSUFBSSxHQUFHLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0lBRXpCLE9BQU8sR0FBRyxJQUFJLElBQUksRUFBRTtRQUNuQixJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FB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 \ No newline at end of file diff --git a/packages/osrl/lib/common/array.d.ts b/packages/osrl/lib/common/array.d.ts new file mode 100644 index 00000000..73f2faaf --- /dev/null +++ b/packages/osrl/lib/common/array.d.ts @@ -0,0 +1,14 @@ +/** + * Return last element + * @private + * @param {(Array)} array + * @returns object | undefined + */ +export declare const lastOf: (array: Array) => any; +/** + * Return first element + * @private + * @param {(Array)} array + * @returns object | undefined + */ +export declare const firstOf: (array: Array) => any; diff --git a/packages/osrl/lib/common/array.js b/packages/osrl/lib/common/array.js new file mode 100644 index 00000000..b586298b --- /dev/null +++ b/packages/osrl/lib/common/array.js @@ -0,0 +1,20 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.firstOf = exports.lastOf = void 0; +/** + * Return last element + * @private + * @param {(Array)} array + * @returns object | undefined + */ +const lastOf = (array) => array[array.length - 1]; +exports.lastOf = lastOf; +/** + * Return first element + * @private + * @param {(Array)} array + * @returns object | undefined + */ +const firstOf = (array) => array[0]; +exports.firstOf = firstOf; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJyYXkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbGliL2NvbW1vbi9hcnJheS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQTs7Ozs7R0FLRztBQUNJLE1BQU0sTUFBTSxHQUFHLENBQUMsS0FBaUIsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFBeEQsUUFBQSxNQUFNLFVBQWtEO0FBRXJFOzs7OztHQUtHO0FBQ0ksTUFBTSxPQUFPLEdBQUcsQ0FBQyxLQUFpQixFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFBMUMsUUFBQSxPQUFPLFdBQW1DIn0= \ No newline at end of file diff --git a/packages/osrl/lib/cscart/api-request/AbstractRequest.d.ts b/packages/osrl/lib/cscart/api-request/AbstractRequest.d.ts new file mode 100644 index 00000000..c7cb456c --- /dev/null +++ b/packages/osrl/lib/cscart/api-request/AbstractRequest.d.ts @@ -0,0 +1,29 @@ +import { AxiosInstance } from 'axios'; +import Config from '../config/Config'; +export default abstract class AbstractRequest { + abstract entityPath: string; + abstract prefix: string; + protected requestUrl: string; + protected config: Config; + protected client: AxiosInstance; + abstract handlerParams: any; + abstract params: any; + protected constructor(client: AxiosInstance, config: Config); + protected buildUrl(): string; + protected setParams(): void; + get(): Promise>; + post(data?: any): Promise>; + put(data?: any): Promise>; + delete(): Promise>; + limit(limit: number): this; + page(page: number): this; + byCompany(companyId: number): this; + withProducts(): this; + one(id: number | string): this; + search(query: string): this; + asc(): this; + desc(): this; + orderBy(orderBy: string): this; + setIconSize(size: [number, number]): this; + private isMethodAllowed; +} diff --git a/packages/osrl/lib/cscart/api-request/AbstractRequest.js b/packages/osrl/lib/cscart/api-request/AbstractRequest.js new file mode 100644 index 00000000..62150dc3 --- /dev/null +++ b/packages/osrl/lib/cscart/api-request/AbstractRequest.js @@ -0,0 +1,104 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const qs_1 = require("qs"); +class AbstractRequest { + constructor(client, config) { + this.config = config; + this.client = client; + } + buildUrl() { + const url = this.config.apiUrl + (this.prefix ? this.prefix : '') + this.entityPath + '/'; + console.log('url', url); + return url; + } + setParams() { + } + get() { + this.setParams(); + return this.client.get(this.buildUrl(), { + params: Object.assign({}, this.params), + paramsSerializer: (params) => { + return (0, qs_1.stringify)(params); + } + }); + } + post(data = {}) { + this.setParams(); + return this.client.post(this.buildUrl(), data, { + params: Object.assign({}, this.params), + paramsSerializer: (params) => { + return (0, qs_1.stringify)(params); + } + }); + } + put(data = {}) { + this.setParams(); + return this.client.put(this.buildUrl(), data, { + params: Object.assign({}, this.params), + paramsSerializer: (params) => { + return (0, qs_1.stringify)(params); + } + }); + } + delete() { + this.setParams(); + return this.client.delete(this.buildUrl()); + } + limit(limit) { + this.params = Object.assign(Object.assign({}, this.params), { items_per_page: limit }); + return this; + } + page(page) { + this.params = Object.assign(Object.assign({}, this.params), { page: page }); + return this; + } + byCompany(companyId) { + if (!this.isMethodAllowed(['products'])) { + throw new Error(`Can\'t get company for ${this.entityPath} entity`); + } + this.params = Object.assign(Object.assign({}, this.params), { company_id: companyId }); + return this; + } + withProducts() { + if (!this.isMethodAllowed(['categories'])) { + throw new Error(`Can\'t get company for ${this.entityPath} entity`); + } + return this; + } + one(id) { + this.handlerParams.id = id; + return this; + } + search(query) { + this.handlerParams.search = query; + return this; + } + asc() { + this.handlerParams.order = 'asc'; + return this; + } + desc() { + this.handlerParams.order = 'desc'; + return this; + } + orderBy(orderBy) { + this.handlerParams.orderBy = orderBy; + return this; + } + setIconSize(size) { + if (!this.params.icon_sizes) { + this.params.icon_sizes = { + main_pair: [], + image_pairs: [] + }; + } + this.params.icon_sizes.main_pair.push(size); + this.params.icon_sizes.image_pairs.push(size); + return this; + } + isMethodAllowed(allowed) { + return allowed.indexOf(this.entityPath) !== -1; + } +} +exports.default = AbstractRequest; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQWJzdHJhY3RSZXF1ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9jc2NhcnQvYXBpLXJlcXVlc3QvQWJzdHJhY3RSZXF1ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsMkJBQThCO0FBSzlCLE1BQThCLGVBQWU7SUFTM0MsWUFBc0IsTUFBcUIsRUFBRSxNQUFjO1FBQ3pELElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO0lBQ3ZCLENBQUM7SUFFUyxRQUFRO1FBQ2hCLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsR0FBRyxHQUFHLENBQUM7UUFDMUYsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDeEIsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0lBRVMsU0FBUztJQUNuQixDQUFDO0lBRUQsR0FBRztRQUNELElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQTtRQUVoQixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUNwQixJQUFJLENBQUMsUUFBUSxFQUFFLEVBQ2Y7WUFDRSxNQUFNLG9CQUNELElBQUksQ0FBQyxNQUFNLENBQ2Y7WUFDRCxnQkFBZ0IsRUFBRSxDQUFDLE1BQVcsRUFBRSxFQUFFO2dCQUNoQyxPQUFPLElBQUEsY0FBUyxFQUFDLE1BQU0sQ0FBQyxDQUFBO1lBQzFCLENBQUM7U0FDRixDQUNGLENBQUE7SUFDSCxDQUFDO0lBRUQsSUFBSSxDQUFDLE9BQVksRUFBRTtRQUNqQixJQUFJLENBQUMsU0FBUyxFQUFFLENBQUE7UUFFaEIsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FDckIsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUNmLElBQUksRUFDSjtZQUNFLE1BQU0sb0JBQ0QsSUFBSSxDQUFDLE1BQU0sQ0FDZjtZQUNELGdCQUFnQixFQUFFLENBQUMsTUFBVyxFQUFFLEVBQUU7Z0JBQ2hDLE9BQU8sSUFBQSxjQUFTLEVBQUMsTUFBTSxDQUFDLENBQUE7WUFDMUIsQ0FBQztTQUNGLENBQ0YsQ0FBQTtJQUNILENBQUM7SUFFRCxHQUFHLENBQUMsT0FBWSxFQUFFO1FBQ2hCLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQTtRQUVoQixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUNwQixJQUFJLENBQUMsUUFBUSxFQUFFLEVBQ2YsSUFBSSxFQUNKO1lBQ0UsTUFBTSxvQkFDRCxJQUFJLENBQUMsTUFBTSxDQUNmO1lBQ0QsZ0JBQWdCLEVBQUUsQ0FBQyxNQUFXLEVBQUUsRUFBRTtnQkFDaEMsT0FBTyxJQUFBLGNBQVMsRUFBQyxNQUFNLENBQUMsQ0FBQTtZQUMxQixDQUFDO1NBQ0YsQ0FDRixDQUFBO0lBQ0gsQ0FBQztJQUVELE1BQU07UUFDSixJQUFJLENBQUMsU0FBUyxFQUFFLENBQUE7UUFFaEIsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FDdkIsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUNoQixDQUFBO0lBQ0gsQ0FBQztJQUVELEtBQUssQ0FBQyxLQUFhO1FBQ2pCLElBQUksQ0FBQyxNQUFNLG1DQUNOLElBQUksQ0FBQyxNQUFNLEtBQ2QsY0FBYyxFQUFFLEtBQUssR0FDdEIsQ0FBQTtRQUVELE9BQU8sSUFBSSxDQUFBO0lBQ2IsQ0FBQztJQUVELElBQUksQ0FBQyxJQUFZO1FBQ2YsSUFBSSxDQUFDLE1BQU0sbUNBQ04sSUFBSSxDQUFDLE1BQU0sS0FDZCxJQUFJLEVBQUUsSUFBSSxHQUNYLENBQUE7UUFFRCxPQUFPLElBQUksQ0FBQTtJQUNiLENBQUM7SUFFRCxTQUFTLENBQUMsU0FBaUI7UUFDekIsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxFQUFFO1lBQ3ZDLE1BQU0sSUFBSSxLQUFLLENBQUMsMEJBQTBCLElBQUksQ0FBQyxVQUFVLFNBQVMsQ0FBQyxDQUFDO1NBQ3JFO1FBRUQsSUFBSSxDQUFDLE1BQU0sbUNBQ04sSUFBSSxDQUFDLE1BQU0sS0FDZCxVQUFVLEVBQUUsU0FBUyxHQUN0QixDQUFBO1FBQ0QsT0FBTyxJQUFJLENBQUE7SUFDYixDQUFDO0lBRUQsWUFBWTtRQUNWLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsRUFBRTtZQUN6QyxNQUFNLElBQUksS0FBSyxDQUFDLDBCQUEwQixJQUFJLENBQUMsVUFBVSxTQUFTLENBQUMsQ0FBQztTQUNyRTtRQUNELE9BQU8sSUFBSSxDQUFBO0lBQ2IsQ0FBQztJQUVELEdBQUcsQ0FBQyxFQUFtQjtRQUNyQixJQUFJLENBQUMsYUFBYSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUE7UUFFMUIsT0FBTyxJQUFJLENBQUE7SUFDYixDQUFDO0lBRUQsTUFBTSxDQUFDLEtBQWE7UUFDbEIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1FBRWxDLE9BQU8sSUFBSSxDQUFBO0lBQ2IsQ0FBQztJQUVELEdBQUc7UUFDRCxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDakMsT0FBTyxJQUFJLENBQUE7SUFDYixDQUFDO0lBRUQsSUFBSTtRQUNGLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQztRQUNsQyxPQUFPLElBQUksQ0FBQTtJQUNiLENBQUM7SUFFRCxPQUFPLENBQUMsT0FBZTtRQUNyQixJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7UUFDckMsT0FBTyxJQUFJLENBQUE7SUFDYixDQUFDO0lBRUQsV0FBVyxDQUFDLElBQXNCO1FBQ2hDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRTtZQUMzQixJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsR0FBRztnQkFDdkIsU0FBUyxFQUFFLEVBQUU7Z0JBQ2IsV0FBVyxFQUFFLEVBQUU7YUFDaEIsQ0FBQztTQUNIO1FBRUQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUMzQyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFBO1FBRTdDLE9BQU8sSUFBSSxDQUFBO0lBQ2IsQ0FBQztJQUVPLGVBQWUsQ0FBQyxPQUFzQjtRQUM1QyxPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ2pELENBQUM7Q0FDRjtBQWxLRCxrQ0FrS0MifQ== \ No newline at end of file diff --git a/packages/osrl/lib/cscart/api-request/AuthRequest.d.ts b/packages/osrl/lib/cscart/api-request/AuthRequest.d.ts new file mode 100644 index 00000000..614f800d --- /dev/null +++ b/packages/osrl/lib/cscart/api-request/AuthRequest.d.ts @@ -0,0 +1,15 @@ +import Config from '../config/Config'; +import AbstractRequest from './AbstractRequest'; +import { AxiosInstance } from 'axios'; +declare class AuthRequest extends AbstractRequest { + entityPath: string; + prefix: string; + handlerParams: any; + params: any; + constructor(client: AxiosInstance, config: Config); + login(email: string, password: string): Promise>; + loginWithEkey(ekey: string): Promise>; + socialLogin(provider: string, idToken: string, clientId: string): Promise>; + restorePassword(email: string): Promise>; +} +export default AuthRequest; diff --git a/packages/osrl/lib/cscart/api-request/AuthRequest.js b/packages/osrl/lib/cscart/api-request/AuthRequest.js new file mode 100644 index 00000000..f149e62a --- /dev/null +++ b/packages/osrl/lib/cscart/api-request/AuthRequest.js @@ -0,0 +1,47 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const AbstractRequest_1 = require("./AbstractRequest"); +class AuthRequest extends AbstractRequest_1.default { + constructor(client, config) { + super(client, config); + this.entityPath = 'auth_tokens'; + // prefix: string = 'sra_'; + this.prefix = ''; + this.handlerParams = {}; + this.params = {}; + } + login(email, password) { + return this.post({ email, password }); + } + loginWithEkey(ekey) { + return this.post({ ekey }); + } + socialLogin(provider, idToken, clientId) { + /** + * Workaround for separated api endpoint + */ + const backupEntityPath = this.entityPath; + const backupPrefix = this.prefix; + this.entityPath = 'social_auth'; + this.prefix = 'sra_'; + const request = this.post({ provider, token_id: idToken, client_id: clientId }); + this.entityPath = backupEntityPath; + this.prefix = backupPrefix; + return request; + } + restorePassword(email) { + /** + * Workaround for separated api endpoint + */ + const backupEntityPath = this.entityPath; + const backupPrefix = this.prefix; + this.entityPath = 'recover_password'; + this.prefix = 'sra_'; + const request = this.post({ email }); + this.entityPath = backupEntityPath; + this.prefix = backupPrefix; + return request; + } +} +exports.default = AuthRequest; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQXV0aFJlcXVlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL2NzY2FydC9hcGktcmVxdWVzdC9BdXRoUmVxdWVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUNBLHVEQUErQztBQUcvQyxNQUFNLFdBQVksU0FBUSx5QkFBZTtJQU92QyxZQUFZLE1BQXFCLEVBQUUsTUFBYztRQUMvQyxLQUFLLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFBO1FBUHZCLGVBQVUsR0FBWSxhQUFhLENBQUM7UUFDcEMsZ0NBQWdDO1FBQ2hDLFdBQU0sR0FBVyxFQUFFLENBQUM7UUFNbEIsSUFBSSxDQUFDLGFBQWEsR0FBRyxFQUFFLENBQUM7UUFDeEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUM7SUFDbkIsQ0FBQztJQUVELEtBQUssQ0FBQyxLQUFhLEVBQUUsUUFBZ0I7UUFDbkMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUE7SUFDdkMsQ0FBQztJQUVELGFBQWEsQ0FBQyxJQUFZO1FBQ3hCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUE7SUFDNUIsQ0FBQztJQUVELFdBQVcsQ0FBQyxRQUFnQixFQUFFLE9BQWUsRUFBRSxRQUFnQjtRQUM3RDs7V0FFRztRQUNILE1BQU0sZ0JBQWdCLEdBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQztRQUMxQyxNQUFNLFlBQVksR0FBUSxJQUFJLENBQUMsTUFBTSxDQUFDO1FBRXRDLElBQUksQ0FBQyxVQUFVLEdBQUcsYUFBYSxDQUFDO1FBQ2hDLElBQUksQ0FBQyxNQUFNLEdBQU8sTUFBTSxDQUFDO1FBRXpCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQTtRQUUvRSxJQUFJLENBQUMsVUFBVSxHQUFHLGdCQUFnQixDQUFDO1FBQ25DLElBQUksQ0FBQyxNQUFNLEdBQU8sWUFBWSxDQUFDO1FBRS9CLE9BQU8sT0FBTyxDQUFBO0lBQ2hCLENBQUM7SUFFRCxlQUFlLENBQUMsS0FBYTtRQUMzQjs7V0FFRztRQUNILE1BQU0sZ0JBQWdCLEdBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQztRQUMxQyxNQUFNLFlBQVksR0FBUSxJQUFJLENBQUMsTUFBTSxDQUFDO1FBRXRDLElBQUksQ0FBQyxVQUFVLEdBQUcsa0JBQWtCLENBQUM7UUFDckMsSUFBSSxDQUFDLE1BQU0sR0FBTyxNQUFNLENBQUM7UUFFekIsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUE7UUFFcEMsSUFBSSxDQUFDLFVBQVUsR0FBRyxnQkFBZ0IsQ0FBQztRQUNuQyxJQUFJLENBQUMsTUFBTSxHQUFPLFlBQVksQ0FBQztRQUUvQixPQUFPLE9BQU8sQ0FBQTtJQUNoQixDQUFDO0NBQ0Y7QUFFRCxrQkFBZSxXQUFXLENBQUEifQ== \ No newline at end of file diff --git a/packages/osrl/lib/cscart/api-request/CartRequest.d.ts b/packages/osrl/lib/cscart/api-request/CartRequest.d.ts new file mode 100644 index 00000000..ae8b6ffb --- /dev/null +++ b/packages/osrl/lib/cscart/api-request/CartRequest.d.ts @@ -0,0 +1,25 @@ +import { AxiosInstance } from 'axios'; +import Config from '../config/Config'; +import AbstractRequest from './AbstractRequest'; +declare class CartRequest extends AbstractRequest { + entityPath: string; + prefix: string; + handlerParams: any; + params: any; + constructor(client: AxiosInstance, config: Config); + withShippings(ids?: Array): this; + protected buildUrl(): string; + add(products: IAddToCartProduct | Array): Promise>; + update(product: any): Promise>; + saveUserData(userData: any): Promise>; + protected setParams(): void; +} +interface IAddToCartProduct { + product_id: number; + amount: number; + product_options?: Array<{ + id: number; + value: any; + }>; +} +export default CartRequest; diff --git a/packages/osrl/lib/cscart/api-request/CartRequest.js b/packages/osrl/lib/cscart/api-request/CartRequest.js new file mode 100644 index 00000000..313caed9 --- /dev/null +++ b/packages/osrl/lib/cscart/api-request/CartRequest.js @@ -0,0 +1,58 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const mapValues_1 = require("lodash/mapValues"); +const keyBy_1 = require("lodash/keyBy"); +const AbstractRequest_1 = require("./AbstractRequest"); +class CartRequest extends AbstractRequest_1.default { + constructor(client, config) { + super(client, config); + this.entityPath = 'cart_content'; + this.prefix = 'sra_'; + this.handlerParams = {}; + this.params = {}; + } + withShippings(ids) { + this.params = Object.assign(Object.assign({}, this.params), { calculate_shipping: 'A' }); + if (ids && ids.length) { + this.params = Object.assign(Object.assign({}, this.params), { shipping_ids: ids }); + } + return this; + } + buildUrl() { + let url = super.buildUrl(); + url = url + (this.handlerParams.id ? `${this.handlerParams.id}/` : ''); + return url; + } + add(products) { + let requestProducts = {}; + if (Array.isArray(products)) { + products.map((product) => { + if (product.product_options && product.product_options.length) { + product.product_options = (0, mapValues_1.default)((0, keyBy_1.default)(product.product_options, 'id'), 'value'); + } + requestProducts[product.product_id] = Object.assign({}, product); + }); + } + else { + requestProducts = { + [products.product_id]: Object.assign(Object.assign({}, products), { product_options: products.product_options ? (0, mapValues_1.default)((0, keyBy_1.default)(products.product_options, 'id'), 'value') : undefined }) + }; + } + return this.post({ + products: requestProducts + }); + } + update(product) { + return this.put(Object.assign(Object.assign({}, product), { product_options: product.product_options ? (0, mapValues_1.default)((0, keyBy_1.default)(product.product_options, 'id'), 'value') : undefined })); + } + saveUserData(userData) { + return this.put({ + user_data: userData + }); + } + setParams() { + this.params = Object.assign(Object.assign({}, this.params), { language: this.config.language, sl: this.config.language, lang_code: this.config.language }); + } +} +exports.default = CartRequest; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ2FydFJlcXVlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL2NzY2FydC9hcGktcmVxdWVzdC9DYXJ0UmVxdWVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUNBLGdEQUF3QztBQUN4Qyx3Q0FBZ0M7QUFHaEMsdURBQStDO0FBRS9DLE1BQU0sV0FBWSxTQUFRLHlCQUFlO0lBTXZDLFlBQVksTUFBcUIsRUFBRSxNQUFjO1FBQy9DLEtBQUssQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUE7UUFOdkIsZUFBVSxHQUFXLGNBQWMsQ0FBQTtRQUNuQyxXQUFNLEdBQVcsTUFBTSxDQUFBO1FBTXJCLElBQUksQ0FBQyxhQUFhLEdBQUcsRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDO0lBQ25CLENBQUM7SUFFRCxhQUFhLENBQUMsR0FBbUI7UUFDL0IsSUFBSSxDQUFDLE1BQU0sbUNBQ04sSUFBSSxDQUFDLE1BQU0sS0FDZCxrQkFBa0IsRUFBRSxHQUFHLEdBQ3hCLENBQUE7UUFFRCxJQUFJLEdBQUcsSUFBSSxHQUFHLENBQUMsTUFBTSxFQUFFO1lBQ3JCLElBQUksQ0FBQyxNQUFNLG1DQUNOLElBQUksQ0FBQyxNQUFNLEtBQ2QsWUFBWSxFQUFFLEdBQUcsR0FDbEIsQ0FBQTtTQUNGO1FBRUQsT0FBTyxJQUFJLENBQUE7SUFDYixDQUFDO0lBRVMsUUFBUTtRQUNoQixJQUFJLEdBQUcsR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUE7UUFDMUIsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBRXZFLE9BQU8sR0FBRyxDQUFBO0lBQ1osQ0FBQztJQUVELEdBQUcsQ0FBQyxRQUFzRDtRQUN4RCxJQUFJLGVBQWUsR0FBUSxFQUFFLENBQUM7UUFFOUIsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQzNCLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFZLEVBQUUsRUFBRTtnQkFDNUIsSUFBSSxPQUFPLENBQUMsZUFBZSxJQUFJLE9BQU8sQ0FBQyxlQUFlLENBQUMsTUFBTSxFQUFFO29CQUM3RCxPQUFPLENBQUMsZUFBZSxHQUFHLElBQUEsbUJBQVMsRUFBQyxJQUFBLGVBQUssRUFBQyxPQUFPLENBQUMsZUFBZSxFQUFFLElBQUksQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFBO2lCQUNuRjtnQkFDRCxlQUFlLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxxQkFBTyxPQUFPLENBQUMsQ0FBQztZQUNyRCxDQUFDLENBQUMsQ0FBQTtTQUNIO2FBQU07WUFDTCxlQUFlLEdBQUc7Z0JBQ2hCLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxrQ0FDaEIsUUFBUSxLQUNYLGVBQWUsRUFBRSxRQUFRLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxJQUFBLG1CQUFTLEVBQUMsSUFBQSxlQUFLLEVBQUMsUUFBUSxDQUFDLGVBQWUsRUFBRSxJQUFJLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUNsSDthQUNGLENBQUM7U0FDSDtRQUVELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQztZQUNmLFFBQVEsRUFBRSxlQUFlO1NBQzFCLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFFRCxNQUFNLENBQUMsT0FBWTtRQUNqQixPQUFPLElBQUksQ0FBQyxHQUFHLGlDQUNWLE9BQU8sS0FDVixlQUFlLEVBQUUsT0FBTyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsSUFBQSxtQkFBUyxFQUFDLElBQUEsZUFBSyxFQUFDLE9BQU8sQ0FBQyxlQUFlLEVBQUUsSUFBSSxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsSUFDL0csQ0FBQTtJQUNKLENBQUM7SUFFRCxZQUFZLENBQUMsUUFBYTtRQUN4QixPQUFPLElBQUksQ0FBQyxHQUFHLENBQUM7WUFDZCxTQUFTLEVBQUUsUUFBUTtTQUNwQixDQUFDLENBQUE7SUFDSixDQUFDO0lBRVMsU0FBUztRQUNqQixJQUFJLENBQUMsTUFBTSxtQ0FDTixJQUFJLENBQUMsTUFBTSxLQUNkLFFBQVEsRUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFDaEMsRUFBRSxFQUFVLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUNoQyxTQUFTLEVBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEdBQ2pDLENBQUE7SUFDSCxDQUFDO0NBQ0Y7QUFXRCxrQkFBZSxXQUFXLENBQUEifQ== \ No newline at end of file diff --git a/packages/osrl/lib/cscart/api-request/CategoriesRequest.d.ts b/packages/osrl/lib/cscart/api-request/CategoriesRequest.d.ts new file mode 100644 index 00000000..68f8a5f9 --- /dev/null +++ b/packages/osrl/lib/cscart/api-request/CategoriesRequest.d.ts @@ -0,0 +1,13 @@ +import { AxiosInstance } from 'axios'; +import Config from '../config/Config'; +import AbstractRequest from './AbstractRequest'; +export default class CategoriesRequest extends AbstractRequest { + entityPath: string; + prefix: string; + handlerParams: any; + params: any; + constructor(client: AxiosInstance, config: Config); + protected buildUrl(): string; + withSubcategories(): this; + protected setParams(): void; +} diff --git a/packages/osrl/lib/cscart/api-request/CategoriesRequest.js b/packages/osrl/lib/cscart/api-request/CategoriesRequest.js new file mode 100644 index 00000000..9bc7835f --- /dev/null +++ b/packages/osrl/lib/cscart/api-request/CategoriesRequest.js @@ -0,0 +1,35 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const AbstractRequest_1 = require("./AbstractRequest"); +class CategoriesRequest extends AbstractRequest_1.default { + constructor(client, config) { + super(client, config); + this.entityPath = 'categories'; + this.prefix = 'sra_'; + this.handlerParams = {}; + this.params = {}; + } + buildUrl() { + let url = super.buildUrl(); + return url + (this.handlerParams.id ? `${this.handlerParams.id}/` : ''); + } + withSubcategories() { + this.params = Object.assign(Object.assign({}, this.params), { get_subcategories: 'Y', + /** + * @deprecated + */ + subcategories: 'Y' }); + return this; + } + setParams() { + this.params = Object.assign(Object.assign({}, this.params), { language: this.config.language, sl: this.config.language, lang_code: this.config.language }); + if (this.handlerParams.orderBy) { + this.params.sort_by = this.handlerParams.orderBy; + } + if (this.handlerParams.order) { + this.params.sort_order = this.handlerParams.order; + } + } +} +exports.default = CategoriesRequest; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ2F0ZWdvcmllc1JlcXVlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL2NzY2FydC9hcGktcmVxdWVzdC9DYXRlZ29yaWVzUmVxdWVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUdBLHVEQUErQztBQUUvQyxNQUFxQixpQkFBa0IsU0FBUSx5QkFBZTtJQU01RCxZQUFZLE1BQXFCLEVBQUUsTUFBYztRQUMvQyxLQUFLLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFBO1FBTnZCLGVBQVUsR0FBVyxZQUFZLENBQUM7UUFDbEMsV0FBTSxHQUFXLE1BQU0sQ0FBQTtRQU1yQixJQUFJLENBQUMsYUFBYSxHQUFHLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQztJQUNuQixDQUFDO0lBRVMsUUFBUTtRQUNoQixJQUFJLEdBQUcsR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUE7UUFDMUIsT0FBTyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQTtJQUN6RSxDQUFDO0lBRU0saUJBQWlCO1FBQ3RCLElBQUksQ0FBQyxNQUFNLG1DQUNOLElBQUksQ0FBQyxNQUFNLEtBQ2QsaUJBQWlCLEVBQUUsR0FBRztZQUN0Qjs7ZUFFRztZQUNILGFBQWEsRUFBRSxHQUFHLEdBQ25CLENBQUE7UUFFRCxPQUFPLElBQUksQ0FBQTtJQUNiLENBQUM7SUFFUyxTQUFTO1FBQ2pCLElBQUksQ0FBQyxNQUFNLG1DQUNOLElBQUksQ0FBQyxNQUFNLEtBQ2QsUUFBUSxFQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUNoQyxFQUFFLEVBQVUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQ2hDLFNBQVMsRUFBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsR0FDakMsQ0FBQTtRQUVELElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLEVBQUU7WUFDOUIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUM7U0FDbEQ7UUFFRCxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFO1lBQzVCLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDO1NBQ25EO0lBQ0gsQ0FBQztDQUNGO0FBOUNELG9DQThDQyJ9 \ No newline at end of file diff --git a/packages/osrl/lib/cscart/api-request/LayoutsRequest.d.ts b/packages/osrl/lib/cscart/api-request/LayoutsRequest.d.ts new file mode 100644 index 00000000..0392936c --- /dev/null +++ b/packages/osrl/lib/cscart/api-request/LayoutsRequest.d.ts @@ -0,0 +1,15 @@ +import { AxiosInstance } from 'axios'; +import Config from '../config/Config'; +import AbstractRequest from './AbstractRequest'; +export default class BmLayoutsRequest extends AbstractRequest { + entityPath: string; + prefix: string; + handlerParams: any; + params: any; + constructor(client: AxiosInstance, config: Config); + withBlocks(): this; + withSlug(slug: string | number): this; + forLocation(location: string): this; + protected buildUrl(): string; + protected setParams(): void; +} diff --git a/packages/osrl/lib/cscart/api-request/LayoutsRequest.js b/packages/osrl/lib/cscart/api-request/LayoutsRequest.js new file mode 100644 index 00000000..1273de37 --- /dev/null +++ b/packages/osrl/lib/cscart/api-request/LayoutsRequest.js @@ -0,0 +1,37 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const AbstractRequest_1 = require("./AbstractRequest"); +class BmLayoutsRequest extends AbstractRequest_1.default { + constructor(client, config) { + super(client, config); + this.entityPath = 'ext_bm_layouts'; + this.prefix = 'sra_'; + this.handlerParams = {}; + this.params = {}; + } + withBlocks() { + this.handlerParams.withBlocks = true; + return this; + } + withSlug(slug) { + this.handlerParams.withSlug = slug; + return this; + } + forLocation(location) { + this.handlerParams.location = location; + return this; + } + buildUrl() { + let url = super.buildUrl(); + url = url + (this.handlerParams.id ? `${this.handlerParams.id}/` : ''); + url = url + (this.handlerParams.location ? `sra_ext_bm_locations/${this.handlerParams.location}/` : ''); + url = url + (this.handlerParams.withBlocks ? 'sra_ext_bm_blocks/' : ''); + url = url + (this.handlerParams.withSlug || ''); + return url; + } + setParams() { + this.params = Object.assign(Object.assign({}, this.params), { language: this.config.language, sl: this.config.language, lang_code: this.config.language }); + } +} +exports.default = BmLayoutsRequest; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTGF5b3V0c1JlcXVlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL2NzY2FydC9hcGktcmVxdWVzdC9MYXlvdXRzUmVxdWVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUdBLHVEQUErQztBQUUvQyxNQUFxQixnQkFBaUIsU0FBUSx5QkFBZTtJQU0zRCxZQUFZLE1BQXFCLEVBQUUsTUFBYztRQUMvQyxLQUFLLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFBO1FBTnZCLGVBQVUsR0FBWSxnQkFBZ0IsQ0FBQTtRQUN0QyxXQUFNLEdBQWdCLE1BQU0sQ0FBQTtRQU0xQixJQUFJLENBQUMsYUFBYSxHQUFHLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQztJQUNuQixDQUFDO0lBRU0sVUFBVTtRQUNmLElBQUksQ0FBQyxhQUFhLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztRQUNyQyxPQUFPLElBQUksQ0FBQTtJQUNiLENBQUM7SUFFTSxRQUFRLENBQUMsSUFBbUI7UUFDakMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO1FBQ25DLE9BQU8sSUFBSSxDQUFBO0lBQ2IsQ0FBQztJQUVNLFdBQVcsQ0FBQyxRQUFnQjtRQUNqQyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7UUFDdkMsT0FBTyxJQUFJLENBQUE7SUFDYixDQUFDO0lBRVMsUUFBUTtRQUNoQixJQUFJLEdBQUcsR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUE7UUFDMUIsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZFLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsd0JBQXdCLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFBO1FBQ3ZHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3hFLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUVoRCxPQUFPLEdBQUcsQ0FBQTtJQUNaLENBQUM7SUFFUyxTQUFTO1FBQ2pCLElBQUksQ0FBQyxNQUFNLG1DQUNOLElBQUksQ0FBQyxNQUFNLEtBQ2QsUUFBUSxFQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUNoQyxFQUFFLEVBQVUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQ2hDLFNBQVMsRUFBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsR0FDakMsQ0FBQTtJQUNILENBQUM7Q0FDRjtBQTdDRCxtQ0E2Q0MifQ== \ No newline at end of file diff --git a/packages/osrl/lib/cscart/api-request/NotificationRequest.d.ts b/packages/osrl/lib/cscart/api-request/NotificationRequest.d.ts new file mode 100644 index 00000000..9e98874f --- /dev/null +++ b/packages/osrl/lib/cscart/api-request/NotificationRequest.d.ts @@ -0,0 +1,17 @@ +import { AxiosInstance } from 'axios'; +import Config from '../config/Config'; +import AbstractRequest from './AbstractRequest'; +export default class NotificationRequest extends AbstractRequest { + entityPath: string; + prefix: string; + handlerParams: any; + params: any; + constructor(client: AxiosInstance, config: Config); + /** + * Mark user notifications as viewed + * + * @param lastNotificationDate - all notifications before specified time will be marked as viewed + */ + markAsViewed(lastNotificationDate: string): Promise>; + protected setParams(): void; +} diff --git a/packages/osrl/lib/cscart/api-request/NotificationRequest.js b/packages/osrl/lib/cscart/api-request/NotificationRequest.js new file mode 100644 index 00000000..7534aa16 --- /dev/null +++ b/packages/osrl/lib/cscart/api-request/NotificationRequest.js @@ -0,0 +1,27 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const AbstractRequest_1 = require("./AbstractRequest"); +class NotificationRequest extends AbstractRequest_1.default { + constructor(client, config) { + super(client, config); + this.entityPath = 'unviewed_notifications'; + this.prefix = 'sra_'; + this.handlerParams = {}; + this.params = {}; + } + /** + * Mark user notifications as viewed + * + * @param lastNotificationDate - all notifications before specified time will be marked as viewed + */ + markAsViewed(lastNotificationDate) { + return this.client.get(this.buildUrl() + 'mark_as_viewed', { + params: Object.assign(Object.assign({}, this.params), { time: lastNotificationDate }) + }); + } + setParams() { + this.params = Object.assign(Object.assign({}, this.params), { language: this.config.language, sl: this.config.language, lang_code: this.config.language }); + } +} +exports.default = NotificationRequest; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTm90aWZpY2F0aW9uUmVxdWVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvY3NjYXJ0L2FwaS1yZXF1ZXN0L05vdGlmaWNhdGlvblJlcXVlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFHQSx1REFBK0M7QUFFL0MsTUFBcUIsbUJBQW9CLFNBQVEseUJBQWU7SUFNOUQsWUFBWSxNQUFxQixFQUFFLE1BQWM7UUFDL0MsS0FBSyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQTtRQU52QixlQUFVLEdBQVcsd0JBQXdCLENBQUM7UUFDOUMsV0FBTSxHQUFXLE1BQU0sQ0FBQztRQU10QixJQUFJLENBQUMsYUFBYSxHQUFHLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQztJQUNuQixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILFlBQVksQ0FBQyxvQkFBNEI7UUFDdkMsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FDcEIsSUFBSSxDQUFDLFFBQVEsRUFBRSxHQUFHLGdCQUFnQixFQUNsQztZQUNFLE1BQU0sa0NBQ0QsSUFBSSxDQUFDLE1BQU0sS0FDZCxJQUFJLEVBQUUsb0JBQW9CLEdBQzNCO1NBQ0YsQ0FDRixDQUFBO0lBQ0gsQ0FBQztJQUVTLFNBQVM7UUFDakIsSUFBSSxDQUFDLE1BQU0sbUNBQ04sSUFBSSxDQUFDLE1BQU0sS0FDZCxRQUFRLEVBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQ2hDLEVBQUUsRUFBVSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFDaEMsU0FBUyxFQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxHQUNqQyxDQUFBO0lBQ0gsQ0FBQztDQUNGO0FBckNELHNDQXFDQyJ9 \ No newline at end of file diff --git a/packages/osrl/lib/cscart/api-request/OrdersRequest.d.ts b/packages/osrl/lib/cscart/api-request/OrdersRequest.d.ts new file mode 100644 index 00000000..76426bf5 --- /dev/null +++ b/packages/osrl/lib/cscart/api-request/OrdersRequest.d.ts @@ -0,0 +1,23 @@ +import { AxiosInstance } from 'axios'; +import Config from '../config/Config'; +import AbstractRequest from './AbstractRequest'; +export default class OrdersRequest extends AbstractRequest { + entityPath: string; + prefix: string; + handlerParams: any; + params: any; + constructor(client: AxiosInstance, config: Config); + protected buildUrl(): string; + get(): Promise>; + create(order: INewOrder): Promise>; + protected setParams(): void; +} +interface INewOrder { + products: Array; + shippingIds: Array; + paymentId: number; + userData?: any; + paymentInfo?: any; + [others: string]: any; +} +export {}; diff --git a/packages/osrl/lib/cscart/api-request/OrdersRequest.js b/packages/osrl/lib/cscart/api-request/OrdersRequest.js new file mode 100644 index 00000000..68332398 --- /dev/null +++ b/packages/osrl/lib/cscart/api-request/OrdersRequest.js @@ -0,0 +1,56 @@ +"use strict"; +var __rest = (this && this.__rest) || function (s, e) { + var t = {}; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) + t[p] = s[p]; + if (s != null && typeof Object.getOwnPropertySymbols === "function") + for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { + if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) + t[p[i]] = s[p[i]]; + } + return t; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +const forOwn_1 = require("lodash/forOwn"); +const snakeCase_1 = require("lodash/snakeCase"); +const AbstractRequest_1 = require("./AbstractRequest"); +class OrdersRequest extends AbstractRequest_1.default { + constructor(client, config) { + super(client, config); + this.entityPath = 'orders'; + this.prefix = 'sra_'; + this.handlerParams = {}; + this.params = {}; + } + buildUrl() { + let url = super.buildUrl(); + url = url + (this.handlerParams.id ? `${this.handlerParams.id}/` : ''); + return url; + } + get() { + this.params = Object.assign(Object.assign({}, this.params), { get_orders_data: true, get_children_orders_data: true }); + return super.get(); + } + create(order) { + let productsObject = {}; + order.products.map((product) => { + productsObject = Object.assign(Object.assign({}, productsObject), { [product.cart_id]: product }); + }); + const { products, shippingIds, paymentId, userData, paymentInfo } = order, rest = __rest(order, ["products", "shippingIds", "paymentId", "userData", "paymentInfo"]); + return this.post(Object.assign({ products: productsObject, shipping_ids: shippingIds, payment_id: paymentId, user_data: userData, payment_info: (0, forOwn_1.default)(paymentInfo, (value, key) => { + delete paymentInfo[key]; + paymentInfo[(0, snakeCase_1.default)(key)] = value; + }) }, rest)); + } + setParams() { + this.params = Object.assign(Object.assign({}, this.params), { language: this.config.language, sl: this.config.language, lang_code: this.config.language }); + if (this.handlerParams.orderBy) { + this.params.sort_by = this.handlerParams.orderBy; + } + if (this.handlerParams.order) { + this.params.sort_order = this.handlerParams.order; + } + } +} +exports.default = OrdersRequest; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiT3JkZXJzUmVxdWVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvY3NjYXJ0L2FwaS1yZXF1ZXN0L09yZGVyc1JlcXVlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztBQUNBLDBDQUFrQztBQUNsQyxnREFBd0M7QUFHeEMsdURBQStDO0FBRS9DLE1BQXFCLGFBQWMsU0FBUSx5QkFBZTtJQU14RCxZQUFZLE1BQXFCLEVBQUUsTUFBYztRQUMvQyxLQUFLLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFBO1FBTnZCLGVBQVUsR0FBVyxRQUFRLENBQUM7UUFDOUIsV0FBTSxHQUFXLE1BQU0sQ0FBQTtRQU1yQixJQUFJLENBQUMsYUFBYSxHQUFHLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQztJQUNuQixDQUFDO0lBRVMsUUFBUTtRQUNoQixJQUFJLEdBQUcsR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDM0IsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBRXZFLE9BQU8sR0FBRyxDQUFBO0lBQ1osQ0FBQztJQUVNLEdBQUc7UUFDUixJQUFJLENBQUMsTUFBTSxtQ0FDTixJQUFJLENBQUMsTUFBTSxLQUNkLGVBQWUsRUFBRSxJQUFJLEVBQ3JCLHdCQUF3QixFQUFFLElBQUksR0FDL0IsQ0FBQTtRQUVELE9BQU8sS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFBO0lBQ3BCLENBQUM7SUFFTSxNQUFNLENBQUMsS0FBZ0I7UUFDNUIsSUFBSSxjQUFjLEdBQUcsRUFBRSxDQUFDO1FBRXhCLEtBQUssQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBWSxFQUFFLEVBQUU7WUFDbEMsY0FBYyxtQ0FDVCxjQUFjLEtBQ2pCLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFLE9BQU8sR0FDM0IsQ0FBQTtRQUNILENBQUMsQ0FBQyxDQUFBO1FBRUYsTUFBTSxFQUNKLFFBQVEsRUFDUixXQUFXLEVBQ1gsU0FBUyxFQUNULFFBQVEsRUFDUixXQUFXLEtBRVQsS0FBSyxFQURKLElBQUksVUFDTCxLQUFLLEVBUEgsbUVBT0wsQ0FBUSxDQUFDO1FBRVYsT0FBTyxJQUFJLENBQUMsSUFBSSxpQkFDZCxRQUFRLEVBQUUsY0FBYyxFQUN4QixZQUFZLEVBQUUsV0FBVyxFQUN6QixVQUFVLEVBQUUsU0FBUyxFQUNyQixTQUFTLEVBQUUsUUFBUSxFQUNuQixZQUFZLEVBQ1YsSUFBQSxnQkFBTSxFQUFDLFdBQVcsRUFBRSxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsRUFBRTtnQkFDakMsT0FBTyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUE7Z0JBRXZCLFdBQVcsQ0FBQyxJQUFBLG1CQUFTLEVBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7WUFDdEMsQ0FBQyxDQUFDLElBRUQsSUFBSSxFQUNQLENBQUE7SUFDSixDQUFDO0lBRVMsU0FBUztRQUNqQixJQUFJLENBQUMsTUFBTSxtQ0FDTixJQUFJLENBQUMsTUFBTSxLQUNkLFFBQVEsRUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFDaEMsRUFBRSxFQUFVLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUNoQyxTQUFTLEVBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEdBQ2pDLENBQUE7UUFFRCxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxFQUFFO1lBQzlCLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDO1NBQ2xEO1FBRUQsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRTtZQUM1QixJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQztTQUNuRDtJQUNILENBQUM7Q0FDRjtBQWhGRCxnQ0FnRkMifQ== \ No newline at end of file diff --git a/packages/osrl/lib/cscart/api-request/PagesRequest.d.ts b/packages/osrl/lib/cscart/api-request/PagesRequest.d.ts new file mode 100644 index 00000000..0784d9d7 --- /dev/null +++ b/packages/osrl/lib/cscart/api-request/PagesRequest.d.ts @@ -0,0 +1,13 @@ +import { AxiosInstance } from 'axios'; +import Config from '../config/Config'; +import AbstractRequest from './AbstractRequest'; +export default class PagesRequest extends AbstractRequest { + entityPath: string; + prefix: string; + handlerParams: any; + params: any; + constructor(client: AxiosInstance, config: Config); + protected buildUrl(): string; + forParentPage(parentId: number): this; + protected setParams(): void; +} diff --git a/packages/osrl/lib/cscart/api-request/PagesRequest.js b/packages/osrl/lib/cscart/api-request/PagesRequest.js new file mode 100644 index 00000000..53fa67f0 --- /dev/null +++ b/packages/osrl/lib/cscart/api-request/PagesRequest.js @@ -0,0 +1,32 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const AbstractRequest_1 = require("./AbstractRequest"); +class PagesRequest extends AbstractRequest_1.default { + constructor(client, config) { + super(client, config); + this.entityPath = 'pages'; + this.prefix = 'sra_'; + this.handlerParams = {}; + this.params = {}; + } + buildUrl() { + let url = super.buildUrl(); + url = url + (this.handlerParams.id ? `${this.handlerParams.id}/` : ''); + return url; + } + forParentPage(parentId) { + this.params.parent_id = parentId; + return this; + } + setParams() { + this.params = Object.assign(Object.assign({}, this.params), { language: this.config.language, sl: this.config.language, lang_code: this.config.language }); + if (this.handlerParams.orderBy) { + this.params.sort_by = this.handlerParams.orderBy; + } + if (this.handlerParams.order) { + this.params.sort_order = this.handlerParams.order; + } + } +} +exports.default = PagesRequest; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUGFnZXNSZXF1ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9jc2NhcnQvYXBpLXJlcXVlc3QvUGFnZXNSZXF1ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBRUEsdURBQStDO0FBRS9DLE1BQXFCLFlBQWEsU0FBUSx5QkFBZTtJQU12RCxZQUFZLE1BQXFCLEVBQUUsTUFBYztRQUMvQyxLQUFLLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFBO1FBTnZCLGVBQVUsR0FBVyxPQUFPLENBQUM7UUFDN0IsV0FBTSxHQUFXLE1BQU0sQ0FBQTtRQU1yQixJQUFJLENBQUMsYUFBYSxHQUFHLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQztJQUNuQixDQUFDO0lBRVMsUUFBUTtRQUNoQixJQUFJLEdBQUcsR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDM0IsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBRXZFLE9BQU8sR0FBRyxDQUFBO0lBQ1osQ0FBQztJQUVNLGFBQWEsQ0FBQyxRQUFnQjtRQUNuQyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsR0FBRyxRQUFRLENBQUM7UUFFakMsT0FBTyxJQUFJLENBQUE7SUFDYixDQUFDO0lBRVMsU0FBUztRQUNqQixJQUFJLENBQUMsTUFBTSxtQ0FDTixJQUFJLENBQUMsTUFBTSxLQUNkLFFBQVEsRUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFDaEMsRUFBRSxFQUFVLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUNoQyxTQUFTLEVBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEdBQ2pDLENBQUE7UUFFRCxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxFQUFFO1lBQzlCLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDO1NBQ2xEO1FBRUQsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRTtZQUM1QixJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQztTQUNuRDtJQUNILENBQUM7Q0FDRjtBQXpDRCwrQkF5Q0MifQ== \ No newline at end of file diff --git a/packages/osrl/lib/cscart/api-request/ProductsRequest.d.ts b/packages/osrl/lib/cscart/api-request/ProductsRequest.d.ts new file mode 100644 index 00000000..5d7f1b53 --- /dev/null +++ b/packages/osrl/lib/cscart/api-request/ProductsRequest.d.ts @@ -0,0 +1,21 @@ +import { AxiosInstance } from 'axios'; +import Config from '../config/Config'; +import AbstractRequest from './AbstractRequest'; +export default class ProductsRequest extends AbstractRequest { + entityPath: string; + prefix: string; + handlerParams: any; + params: any; + constructor(client: AxiosInstance, config: Config); + protected buildUrl(): string; + forOptions(options: Array): this; + forCategory(categoryId: number): this; + vendorProducts(productId: number): ProductsRequest; + withFilters(appliedFiltersHash?: string): this; + setParams(): void; +} +interface selectedOption { + optionId: number; + value: any; +} +export {}; diff --git a/packages/osrl/lib/cscart/api-request/ProductsRequest.js b/packages/osrl/lib/cscart/api-request/ProductsRequest.js new file mode 100644 index 00000000..223faca3 --- /dev/null +++ b/packages/osrl/lib/cscart/api-request/ProductsRequest.js @@ -0,0 +1,53 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const AbstractRequest_1 = require("./AbstractRequest"); +class ProductsRequest extends AbstractRequest_1.default { + constructor(client, config) { + super(client, config); + this.entityPath = 'products'; + this.prefix = ''; + this.handlerParams = {}; + this.params = {}; + } + buildUrl() { + let url = super.buildUrl(); + url = url + (this.handlerParams.id ? `${this.handlerParams.id}/` : ''); + console.log('request products', url); + return url; + } + forOptions(options) { + let selected_options = {}; + options.forEach(option => selected_options[option.optionId] = option.value); + this.params.selected_options = selected_options; + return this; + } + forCategory(categoryId) { + this.params.filter = 'Y'; + this.params.cid = categoryId; + return this; + } + vendorProducts(productId) { + this.params.vendor_products_by_product_id = productId; + return this; + } + withFilters(appliedFiltersHash) { + this.params.get_filters = true; + this.params.features_hash = appliedFiltersHash; + return this; + } + setParams() { + this.params = Object.assign(Object.assign({}, this.params), { language: this.config.language, sl: this.config.language, lang_code: this.config.language }); + if (this.handlerParams.orderBy) { + this.params.sort_by = this.handlerParams.orderBy; + } + if (this.handlerParams.order) { + this.params.sort_order = this.handlerParams.order; + } + if (this.handlerParams.search) { + this.params.q = this.handlerParams.search; + } + console.log('set params', this.params); + } +} +exports.default = ProductsRequest; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUHJvZHVjdHNSZXF1ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9jc2NhcnQvYXBpLXJlcXVlc3QvUHJvZHVjdHNSZXF1ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBRUEsdURBQStDO0FBRS9DLE1BQXFCLGVBQWdCLFNBQVEseUJBQWU7SUFNMUQsWUFBWSxNQUFxQixFQUFFLE1BQWM7UUFDL0MsS0FBSyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQTtRQU52QixlQUFVLEdBQVcsVUFBVSxDQUFDO1FBQ2hDLFdBQU0sR0FBVyxFQUFFLENBQUE7UUFNakIsSUFBSSxDQUFDLGFBQWEsR0FBRyxFQUFFLENBQUM7UUFDeEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUM7SUFDbkIsQ0FBQztJQUVTLFFBQVE7UUFDaEIsSUFBSSxHQUFHLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQzNCLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUV2RSxPQUFPLENBQUMsR0FBRyxDQUFDLGtCQUFrQixFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBRXJDLE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQztJQUVELFVBQVUsQ0FBQyxPQUE4QjtRQUN2QyxJQUFJLGdCQUFnQixHQUFRLEVBQUUsQ0FBQztRQUUvQixPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQ3ZCLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUNqRCxDQUFDO1FBRUYsSUFBSSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsR0FBRyxnQkFBZ0IsQ0FBQTtRQUUvQyxPQUFPLElBQUksQ0FBQTtJQUNiLENBQUM7SUFFRCxXQUFXLENBQUMsVUFBa0I7UUFDNUIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDO1FBQ3pCLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxHQUFHLFVBQVUsQ0FBQztRQUU3QixPQUFPLElBQUksQ0FBQTtJQUNiLENBQUM7SUFFRCxjQUFjLENBQUMsU0FBaUI7UUFDOUIsSUFBSSxDQUFDLE1BQU0sQ0FBQyw2QkFBNkIsR0FBRyxTQUFTLENBQUM7UUFFdEQsT0FBTyxJQUFJLENBQUE7SUFDYixDQUFDO0lBRUQsV0FBVyxDQUFDLGtCQUEyQjtRQUNyQyxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7UUFDL0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLEdBQUcsa0JBQWtCLENBQUM7UUFFL0MsT0FBTyxJQUFJLENBQUE7SUFDYixDQUFDO0lBRUQsU0FBUztRQUNQLElBQUksQ0FBQyxNQUFNLG1DQUNOLElBQUksQ0FBQyxNQUFNLEtBQ2QsUUFBUSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUM5QixFQUFFLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQ3hCLFNBQVMsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsR0FDaEMsQ0FBQTtRQUVELElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLEVBQUU7WUFDOUIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUM7U0FDbEQ7UUFFRCxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFO1lBQzVCLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDO1NBQ25EO1FBRUQsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sRUFBRTtZQUM3QixJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQztTQUMzQztRQUNELE9BQU8sQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN6QyxDQUFDO0NBQ0Y7QUExRUQsa0NBMEVDIn0= \ No newline at end of file diff --git a/packages/osrl/lib/cscart/api-request/ProfileRequest.d.ts b/packages/osrl/lib/cscart/api-request/ProfileRequest.d.ts new file mode 100644 index 00000000..92248d55 --- /dev/null +++ b/packages/osrl/lib/cscart/api-request/ProfileRequest.d.ts @@ -0,0 +1,19 @@ +import { AxiosInstance } from 'axios'; +import Config from '../config/Config'; +import AbstractRequest from './AbstractRequest'; +export default class ProfileRequest extends AbstractRequest { + entityPath: string; + prefix: string; + handlerParams: any; + params: any; + constructor(client: AxiosInstance, config: Config); + protected buildUrl(): string; + form(): this; + forAddProfile(): this; + forUpdateProfile(): this; + forAddOrder(): this; + forUpdateOrder(): this; + update(profile: any): Promise>; + create(profile: any): Promise>; + protected setParams(): void; +} diff --git a/packages/osrl/lib/cscart/api-request/ProfileRequest.js b/packages/osrl/lib/cscart/api-request/ProfileRequest.js new file mode 100644 index 00000000..73696118 --- /dev/null +++ b/packages/osrl/lib/cscart/api-request/ProfileRequest.js @@ -0,0 +1,69 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const AbstractRequest_1 = require("./AbstractRequest"); +class ProfileRequest extends AbstractRequest_1.default { + constructor(client, config) { + super(client, config); + this.entityPath = 'profile'; + this.prefix = 'sra_'; + this.handlerParams = {}; + this.params = {}; + } + buildUrl() { + if (this.handlerParams.isProfileFields) { + return this.config.apiUrl + 'sra_profile_fields/'; + } + return super.buildUrl(); + } + form() { + this.handlerParams.form = true; + return this; + } + forAddProfile() { + if (!this.handlerParams.form) { + throw new Error('Please specify form method first'); + } + this.handlerParams.isProfileFields = true; + this.params.location = 'profile'; + this.params.action = 'add'; + return this; + } + forUpdateProfile() { + if (!this.handlerParams.form) { + throw new Error('Please specify form method first'); + } + this.handlerParams.isProfileFields = true; + this.params.location = 'profile'; + this.params.action = 'update'; + return this; + } + forAddOrder() { + if (!this.handlerParams.form) { + throw new Error('Please specify form method first'); + } + this.handlerParams.isProfileFields = true; + this.params.location = 'checkout'; + this.params.action = 'add'; + return this; + } + forUpdateOrder() { + if (!this.handlerParams.form) { + throw new Error('Please specify form method first'); + } + this.handlerParams.isProfileFields = true; + this.params.location = 'checkout'; + this.params.action = 'update'; + return this; + } + update(profile) { + return this.client.put(this.buildUrl() + '1', profile); + } + create(profile) { + return this.post(profile); + } + setParams() { + this.params = Object.assign(Object.assign({}, this.params), { language: this.config.language, sl: this.config.language, lang_code: this.config.language }); + } +} +exports.default = ProfileRequest; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUHJvZmlsZVJlcXVlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL2NzY2FydC9hcGktcmVxdWVzdC9Qcm9maWxlUmVxdWVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUdBLHVEQUErQztBQUUvQyxNQUFxQixjQUFlLFNBQVEseUJBQWU7SUFNekQsWUFBWSxNQUFxQixFQUFFLE1BQWM7UUFDL0MsS0FBSyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQTtRQU52QixlQUFVLEdBQVcsU0FBUyxDQUFBO1FBQzlCLFdBQU0sR0FBVyxNQUFNLENBQUE7UUFNckIsSUFBSSxDQUFDLGFBQWEsR0FBRyxFQUFFLENBQUM7UUFDeEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUM7SUFDbkIsQ0FBQztJQUVTLFFBQVE7UUFDaEIsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLGVBQWUsRUFBRTtZQUN0QyxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLHFCQUFxQixDQUFBO1NBQ2xEO1FBRUQsT0FBTyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUE7SUFDekIsQ0FBQztJQUVNLElBQUk7UUFDVCxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFFL0IsT0FBTyxJQUFJLENBQUE7SUFDYixDQUFDO0lBRU0sYUFBYTtRQUNsQixJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUU7WUFDNUIsTUFBTSxJQUFJLEtBQUssQ0FBQyxrQ0FBa0MsQ0FBQyxDQUFBO1NBQ3BEO1FBRUQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDO1FBQzFDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxHQUFJLFNBQVMsQ0FBQztRQUNsQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBTSxLQUFLLENBQUM7UUFFOUIsT0FBTyxJQUFJLENBQUE7SUFDYixDQUFDO0lBRU0sZ0JBQWdCO1FBQ3JCLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRTtZQUM1QixNQUFNLElBQUksS0FBSyxDQUFDLGtDQUFrQyxDQUFDLENBQUE7U0FDcEQ7UUFFRCxJQUFJLENBQUMsYUFBYSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7UUFDMUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEdBQUksU0FBUyxDQUFDO1FBQ2xDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFNLFFBQVEsQ0FBQztRQUVqQyxPQUFPLElBQUksQ0FBQTtJQUNiLENBQUM7SUFFTSxXQUFXO1FBQ2hCLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRTtZQUM1QixNQUFNLElBQUksS0FBSyxDQUFDLGtDQUFrQyxDQUFDLENBQUE7U0FDcEQ7UUFFRCxJQUFJLENBQUMsYUFBYSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7UUFDMUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEdBQUksVUFBVSxDQUFDO1FBQ25DLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFNLEtBQUssQ0FBQztRQUU5QixPQUFPLElBQUksQ0FBQTtJQUNiLENBQUM7SUFFTSxjQUFjO1FBQ25CLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRTtZQUM1QixNQUFNLElBQUksS0FBSyxDQUFDLGtDQUFrQyxDQUFDLENBQUE7U0FDcEQ7UUFFRCxJQUFJLENBQUMsYUFBYSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7UUFDMUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEdBQUksVUFBVSxDQUFDO1FBQ25DLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFNLFFBQVEsQ0FBQztRQUVqQyxPQUFPLElBQUksQ0FBQTtJQUNiLENBQUM7SUFFRCxNQUFNLENBQUMsT0FBWTtRQUVqQixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUNwQixJQUFJLENBQUMsUUFBUSxFQUFFLEdBQUcsR0FBRyxFQUNyQixPQUFPLENBQ1IsQ0FBQTtJQUNILENBQUM7SUFFTSxNQUFNLENBQUMsT0FBWTtRQUV4QixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUE7SUFDM0IsQ0FBQztJQUVTLFNBQVM7UUFDakIsSUFBSSxDQUFDLE1BQU0sbUNBQ04sSUFBSSxDQUFDLE1BQU0sS0FDZCxRQUFRLEVBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQ2hDLEVBQUUsRUFBVSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFDaEMsU0FBUyxFQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxHQUNqQyxDQUFBO0lBQ0gsQ0FBQztDQUNGO0FBL0ZELGlDQStGQyJ9 \ No newline at end of file diff --git a/packages/osrl/lib/cscart/api-request/SettingsRequest.d.ts b/packages/osrl/lib/cscart/api-request/SettingsRequest.d.ts new file mode 100644 index 00000000..87acae0c --- /dev/null +++ b/packages/osrl/lib/cscart/api-request/SettingsRequest.d.ts @@ -0,0 +1,11 @@ +import { AxiosInstance } from 'axios'; +import Config from '../config/Config'; +import AbstractRequest from './AbstractRequest'; +export default class SettingsRequest extends AbstractRequest { + entityPath: string; + prefix: string; + handlerParams: any; + params: any; + constructor(client: AxiosInstance, config: Config); + protected setParams(): void; +} diff --git a/packages/osrl/lib/cscart/api-request/SettingsRequest.js b/packages/osrl/lib/cscart/api-request/SettingsRequest.js new file mode 100644 index 00000000..c60dcde3 --- /dev/null +++ b/packages/osrl/lib/cscart/api-request/SettingsRequest.js @@ -0,0 +1,17 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const AbstractRequest_1 = require("./AbstractRequest"); +class SettingsRequest extends AbstractRequest_1.default { + constructor(client, config) { + super(client, config); + this.entityPath = 'storefront'; + this.prefix = 'sra_'; + this.handlerParams = {}; + this.params = {}; + } + setParams() { + this.params = Object.assign(Object.assign({}, this.params), { language: this.config.language, sl: this.config.language, lang_code: this.config.language }); + } +} +exports.default = SettingsRequest; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2V0dGluZ3NSZXF1ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9jc2NhcnQvYXBpLXJlcXVlc3QvU2V0dGluZ3NSZXF1ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBR0EsdURBQStDO0FBRS9DLE1BQXFCLGVBQWdCLFNBQVEseUJBQWU7SUFNMUQsWUFBWSxNQUFxQixFQUFFLE1BQWM7UUFDL0MsS0FBSyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQTtRQU52QixlQUFVLEdBQVcsWUFBWSxDQUFBO1FBQ2pDLFdBQU0sR0FBVyxNQUFNLENBQUE7UUFNckIsSUFBSSxDQUFDLGFBQWEsR0FBRyxFQUFFLENBQUM7UUFDeEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUM7SUFDbkIsQ0FBQztJQUVTLFNBQVM7UUFDakIsSUFBSSxDQUFDLE1BQU0sbUNBQ04sSUFBSSxDQUFDLE1BQU0sS0FDZCxRQUFRLEVBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQ2hDLEVBQUUsRUFBVSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFDaEMsU0FBUyxFQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxHQUNqQyxDQUFBO0lBQ0gsQ0FBQztDQUNGO0FBcEJELGtDQW9CQyJ9 \ No newline at end of file diff --git a/packages/osrl/lib/cscart/api-request/SettlementsRequest.d.ts b/packages/osrl/lib/cscart/api-request/SettlementsRequest.d.ts new file mode 100644 index 00000000..ac7f80fc --- /dev/null +++ b/packages/osrl/lib/cscart/api-request/SettlementsRequest.d.ts @@ -0,0 +1,21 @@ +import { AxiosInstance } from 'axios'; +import Config from '../config/Config'; +import AbstractRequest from './AbstractRequest'; +export default class SettlementsRequest extends AbstractRequest { + entityPath: string; + prefix: string; + handlerParams: any; + params: any; + constructor(client: AxiosInstance, config: Config); + protected buildUrl(): string; + getForm(orderId: number): Promise>; + hookUrl(url: string): Promise>; + create(data: INewSettlement): Promise>; + protected setParams(): void; +} +interface INewSettlement { + orderId: number; + repay?: boolean; + [others: string]: any; +} +export {}; diff --git a/packages/osrl/lib/cscart/api-request/SettlementsRequest.js b/packages/osrl/lib/cscart/api-request/SettlementsRequest.js new file mode 100644 index 00000000..3a54874c --- /dev/null +++ b/packages/osrl/lib/cscart/api-request/SettlementsRequest.js @@ -0,0 +1,51 @@ +"use strict"; +var __rest = (this && this.__rest) || function (s, e) { + var t = {}; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) + t[p] = s[p]; + if (s != null && typeof Object.getOwnPropertySymbols === "function") + for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { + if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) + t[p[i]] = s[p[i]]; + } + return t; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +const querystring_1 = require("querystring"); +const AbstractRequest_1 = require("./AbstractRequest"); +class SettlementsRequest extends AbstractRequest_1.default { + constructor(client, config) { + super(client, config); + this.entityPath = 'settlements'; + this.prefix = 'sra_'; + this.handlerParams = {}; + this.params = {}; + } + buildUrl() { + let url = super.buildUrl(); + url = url + (this.handlerParams.id ? `${this.handlerParams.id}/` : ''); + return url; + } + getForm(orderId) { + this.entityPath = 'order_payment'; + this.setParams(); + return this.client.get(this.buildUrl() + orderId, { + params: Object.assign({}, this.params), + paramsSerializer: (params) => { + return (0, querystring_1.stringify)(params); + } + }); + } + hookUrl(url) { + return this.client.get(url); + } + create(data) { + const { orderId, repay } = data, rest = __rest(data, ["orderId", "repay"]); + return this.post(Object.assign({ order_id: orderId, repay: typeof repay !== 'undefined' ? repay : false }, rest)); + } + setParams() { + this.params = Object.assign(Object.assign({}, this.params), { language: this.config.language, sl: this.config.language, lang_code: this.config.language }); + } +} +exports.default = SettlementsRequest; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2V0dGxlbWVudHNSZXF1ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9jc2NhcnQvYXBpLXJlcXVlc3QvU2V0dGxlbWVudHNSZXF1ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7QUFDQSw2Q0FBdUM7QUFHdkMsdURBQStDO0FBRS9DLE1BQXFCLGtCQUFtQixTQUFRLHlCQUFlO0lBTTdELFlBQVksTUFBcUIsRUFBRSxNQUFjO1FBQy9DLEtBQUssQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUE7UUFOdkIsZUFBVSxHQUFZLGFBQWEsQ0FBQztRQUNwQyxXQUFNLEdBQWdCLE1BQU0sQ0FBQztRQU0zQixJQUFJLENBQUMsYUFBYSxHQUFHLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQztJQUNuQixDQUFDO0lBRVMsUUFBUTtRQUNoQixJQUFJLEdBQUcsR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDM0IsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBRXZFLE9BQU8sR0FBRyxDQUFBO0lBQ1osQ0FBQztJQUVELE9BQU8sQ0FBQyxPQUFlO1FBQ3JCLElBQUksQ0FBQyxVQUFVLEdBQVMsZUFBZSxDQUFDO1FBQ3hDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQTtRQUVoQixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUNwQixJQUFJLENBQUMsUUFBUSxFQUFFLEdBQUcsT0FBTyxFQUN6QjtZQUNFLE1BQU0sb0JBQ0QsSUFBSSxDQUFDLE1BQU0sQ0FDZjtZQUNELGdCQUFnQixFQUFFLENBQUMsTUFBVyxFQUFFLEVBQUU7Z0JBQ2hDLE9BQU8sSUFBQSx1QkFBUyxFQUFDLE1BQU0sQ0FBQyxDQUFBO1lBQzFCLENBQUM7U0FDRixDQUNGLENBQUE7SUFDSCxDQUFDO0lBRUQsT0FBTyxDQUFDLEdBQVc7UUFDakIsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQTtJQUM3QixDQUFDO0lBRU0sTUFBTSxDQUFDLElBQW9CO1FBQ2hDLE1BQU0sRUFDSixPQUFPLEVBQ1AsS0FBSyxLQUVILElBQUksRUFESCxJQUFJLFVBQ0wsSUFBSSxFQUpGLG9CQUlMLENBQU8sQ0FBQztRQUVULE9BQU8sSUFBSSxDQUFDLElBQUksaUJBQ2QsUUFBUSxFQUFFLE9BQU8sRUFDakIsS0FBSyxFQUFFLE9BQU8sS0FBSyxLQUFLLFdBQVcsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQ2hELElBQUksRUFDUCxDQUFBO0lBQ0osQ0FBQztJQUVTLFNBQVM7UUFDakIsSUFBSSxDQUFDLE1BQU0sbUNBQ04sSUFBSSxDQUFDLE1BQU0sS0FDZCxRQUFRLEVBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQ2hDLEVBQUUsRUFBVSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFDaEMsU0FBUyxFQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxHQUNqQyxDQUFBO0lBQ0gsQ0FBQztDQUNGO0FBOURELHFDQThEQyJ9 \ No newline at end of file diff --git a/packages/osrl/lib/cscart/api-request/TestimonialsRequest.d.ts b/packages/osrl/lib/cscart/api-request/TestimonialsRequest.d.ts new file mode 100644 index 00000000..4d040bdd --- /dev/null +++ b/packages/osrl/lib/cscart/api-request/TestimonialsRequest.d.ts @@ -0,0 +1,21 @@ +import { AxiosInstance } from 'axios'; +import Config from '../config/Config'; +import AbstractRequest from './AbstractRequest'; +export default class TestimonialsRequest extends AbstractRequest { + entityPath: string; + prefix: string; + handlerParams: any; + params: any; + constructor(client: AxiosInstance, config: Config); + forProduct(objectId: number): this; + forCategory(objectId: number): this; + forArticle(objectId: number): this; + forOrder(objectId: number): this; + forStorefront(objectId: number): this; + forVendor(objectId: number): this; + protected forItem(objectId: number, objectType: IObjectType): void; + create(object_id: number, object_type: IObjectType, name: string, rating_value?: number, message?: string): Promise>; + protected setParams(): void; +} +type IObjectType = 'P' | 'C' | 'A' | 'O' | 'E' | 'M'; +export {}; diff --git a/packages/osrl/lib/cscart/api-request/TestimonialsRequest.js b/packages/osrl/lib/cscart/api-request/TestimonialsRequest.js new file mode 100644 index 00000000..4f86530a --- /dev/null +++ b/packages/osrl/lib/cscart/api-request/TestimonialsRequest.js @@ -0,0 +1,59 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const AbstractRequest_1 = require("./AbstractRequest"); +class TestimonialsRequest extends AbstractRequest_1.default { + constructor(client, config) { + super(client, config); + this.entityPath = 'discussion'; + this.prefix = 'sra_'; + this.handlerParams = {}; + this.params = {}; + } + forProduct(objectId) { + this.forItem(objectId, 'P'); + return this; + } + forCategory(objectId) { + this.forItem(objectId, 'C'); + return this; + } + forArticle(objectId) { + this.forItem(objectId, 'A'); + return this; + } + forOrder(objectId) { + this.forItem(objectId, 'O'); + return this; + } + forStorefront(objectId) { + this.forItem(objectId, 'E'); + return this; + } + forVendor(objectId) { + this.forItem(objectId, 'M'); + return this; + } + forItem(objectId, objectType) { + this.params.object_id = objectId; + this.params.object_type = objectType; + } + create(object_id, object_type, name, rating_value, message) { + return this.post({ + object_id, + object_type, + name, + rating_value, + message, + }); + } + setParams() { + this.params = Object.assign(Object.assign({}, this.params), { language: this.config.language, sl: this.config.language, lang_code: this.config.language, params: { + page: this.params.page, + items_per_page: this.params.items_per_page, + } }); + delete this.params.page; + delete this.params.items_per_page; + } +} +exports.default = TestimonialsRequest; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVGVzdGltb25pYWxzUmVxdWVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvY3NjYXJ0L2FwaS1yZXF1ZXN0L1Rlc3RpbW9uaWFsc1JlcXVlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFHQSx1REFBK0M7QUFFL0MsTUFBcUIsbUJBQW9CLFNBQVEseUJBQWU7SUFNOUQsWUFBWSxNQUFxQixFQUFFLE1BQWM7UUFDL0MsS0FBSyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQTtRQU52QixlQUFVLEdBQVcsWUFBWSxDQUFDO1FBQ2xDLFdBQU0sR0FBVyxNQUFNLENBQUE7UUFNckIsSUFBSSxDQUFDLGFBQWEsR0FBRyxFQUFFLENBQUM7UUFDeEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUM7SUFDbkIsQ0FBQztJQUVNLFVBQVUsQ0FBQyxRQUFnQjtRQUNoQyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQTtRQUUzQixPQUFPLElBQUksQ0FBQTtJQUNiLENBQUM7SUFFTSxXQUFXLENBQUMsUUFBZ0I7UUFDakMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUE7UUFFM0IsT0FBTyxJQUFJLENBQUE7SUFDYixDQUFDO0lBRU0sVUFBVSxDQUFDLFFBQWdCO1FBQ2hDLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFBO1FBRTNCLE9BQU8sSUFBSSxDQUFBO0lBQ2IsQ0FBQztJQUVNLFFBQVEsQ0FBQyxRQUFnQjtRQUM5QixJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQTtRQUUzQixPQUFPLElBQUksQ0FBQTtJQUNiLENBQUM7SUFFTSxhQUFhLENBQUMsUUFBZ0I7UUFDbkMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUE7UUFFM0IsT0FBTyxJQUFJLENBQUE7SUFDYixDQUFDO0lBRU0sU0FBUyxDQUFDLFFBQWdCO1FBQy9CLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFBO1FBRTNCLE9BQU8sSUFBSSxDQUFBO0lBQ2IsQ0FBQztJQUVTLE9BQU8sQ0FBQyxRQUFnQixFQUFFLFVBQXVCO1FBQ3pELElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxHQUFHLFFBQVEsQ0FBQztRQUNqQyxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsR0FBRyxVQUFVLENBQUM7SUFDdkMsQ0FBQztJQUVELE1BQU0sQ0FDSixTQUFpQixFQUNqQixXQUF3QixFQUN4QixJQUFZLEVBQ1osWUFBcUIsRUFDckIsT0FBZ0I7UUFFaEIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDO1lBQ2YsU0FBUztZQUNULFdBQVc7WUFDWCxJQUFJO1lBQ0osWUFBWTtZQUNaLE9BQU87U0FDUixDQUFDLENBQUE7SUFDSixDQUFDO0lBRVMsU0FBUztRQUNqQixJQUFJLENBQUMsTUFBTSxtQ0FDTixJQUFJLENBQUMsTUFBTSxLQUNkLFFBQVEsRUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFDaEMsRUFBRSxFQUFVLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUNoQyxTQUFTLEVBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQ2hDLE1BQU0sRUFBRTtnQkFDTixJQUFJLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJO2dCQUN0QixjQUFjLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxjQUFjO2FBQzNDLEdBQ0YsQ0FBQTtRQUVELE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUE7UUFDdkIsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQTtJQUNuQyxDQUFDO0NBQ0Y7QUFwRkQsc0NBb0ZDIn0= \ No newline at end of file diff --git a/packages/osrl/lib/cscart/api-request/VendorsRequest.d.ts b/packages/osrl/lib/cscart/api-request/VendorsRequest.d.ts new file mode 100644 index 00000000..e514d510 --- /dev/null +++ b/packages/osrl/lib/cscart/api-request/VendorsRequest.d.ts @@ -0,0 +1,14 @@ +import { AxiosInstance } from 'axios'; +import Config from '../config/Config'; +import AbstractRequest from './AbstractRequest'; +export default class VendorsRequest extends AbstractRequest { + entityPath: string; + prefix: string; + handlerParams: any; + params: any; + constructor(client: AxiosInstance, config: Config); + protected buildUrl(): string; + getForm(): Promise>; + create(data: any): Promise>; + protected setParams(): void; +} diff --git a/packages/osrl/lib/cscart/api-request/VendorsRequest.js b/packages/osrl/lib/cscart/api-request/VendorsRequest.js new file mode 100644 index 00000000..c1ec5f77 --- /dev/null +++ b/packages/osrl/lib/cscart/api-request/VendorsRequest.js @@ -0,0 +1,47 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const querystring_1 = require("querystring"); +const AbstractRequest_1 = require("./AbstractRequest"); +class VendorsRequest extends AbstractRequest_1.default { + constructor(client, config) { + super(client, config); + this.entityPath = 'vendors'; + this.prefix = 'sra_'; + this.handlerParams = {}; + this.params = {}; + } + buildUrl() { + let url = super.buildUrl(); + url = url + (this.handlerParams.id ? `${this.handlerParams.id}/` : ''); + return url; + } + getForm() { + this.entityPath = 'vendor_registration'; + this.setParams(); + return this.client.get(super.buildUrl(), { + params: Object.assign({}, this.params), + paramsSerializer: (params) => { + return (0, querystring_1.stringify)(params); + } + }); + } + create(data) { + this.entityPath = 'vendor_registration'; + this.setParams(); + return this.client.post(super.buildUrl(), data); + } + setParams() { + this.params = Object.assign(Object.assign({}, this.params), { language: this.config.language, sl: this.config.language, lang_code: this.config.language }); + if (this.handlerParams.orderBy) { + this.params.sort_by = this.handlerParams.orderBy; + } + if (this.handlerParams.order) { + this.params.sort_order = this.handlerParams.order; + } + if (this.handlerParams.search) { + this.params.q = this.handlerParams.search; + } + } +} +exports.default = VendorsRequest; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVmVuZG9yc1JlcXVlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL2NzY2FydC9hcGktcmVxdWVzdC9WZW5kb3JzUmVxdWVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUNBLDZDQUF1QztBQUd2Qyx1REFBK0M7QUFFL0MsTUFBcUIsY0FBZSxTQUFRLHlCQUFlO0lBTXpELFlBQVksTUFBcUIsRUFBRSxNQUFjO1FBQy9DLEtBQUssQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUE7UUFOdkIsZUFBVSxHQUFlLFNBQVMsQ0FBQztRQUNuQyxXQUFNLEdBQW1CLE1BQU0sQ0FBQTtRQU03QixJQUFJLENBQUMsYUFBYSxHQUFHLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQztJQUNuQixDQUFDO0lBRVMsUUFBUTtRQUNoQixJQUFJLEdBQUcsR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDM0IsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBRXZFLE9BQU8sR0FBRyxDQUFBO0lBQ1osQ0FBQztJQUVELE9BQU87UUFDTCxJQUFJLENBQUMsVUFBVSxHQUFTLHFCQUFxQixDQUFDO1FBQzlDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQTtRQUVoQixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUNwQixLQUFLLENBQUMsUUFBUSxFQUFFLEVBQ2hCO1lBQ0UsTUFBTSxvQkFDRCxJQUFJLENBQUMsTUFBTSxDQUNmO1lBQ0QsZ0JBQWdCLEVBQUUsQ0FBQyxNQUFXLEVBQUUsRUFBRTtnQkFDaEMsT0FBTyxJQUFBLHVCQUFTLEVBQUMsTUFBTSxDQUFDLENBQUE7WUFDMUIsQ0FBQztTQUNGLENBQ0YsQ0FBQTtJQUNILENBQUM7SUFFRCxNQUFNLENBQUMsSUFBUztRQUNkLElBQUksQ0FBQyxVQUFVLEdBQUcscUJBQXFCLENBQUM7UUFDeEMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFBO1FBRWhCLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQ3JCLEtBQUssQ0FBQyxRQUFRLEVBQUUsRUFDaEIsSUFBSSxDQUNMLENBQUE7SUFDSCxDQUFDO0lBRVMsU0FBUztRQUNqQixJQUFJLENBQUMsTUFBTSxtQ0FDTixJQUFJLENBQUMsTUFBTSxLQUNkLFFBQVEsRUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFDaEMsRUFBRSxFQUFVLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUNoQyxTQUFTLEVBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEdBQ2pDLENBQUE7UUFFRCxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxFQUFFO1lBQzlCLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDO1NBQ2xEO1FBRUQsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRTtZQUM1QixJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQztTQUNuRDtRQUVELElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEVBQUU7WUFDN0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUM7U0FDM0M7SUFDSCxDQUFDO0NBQ0Y7QUFsRUQsaUNBa0VDIn0= \ No newline at end of file diff --git a/packages/osrl/lib/cscart/api-request/WishlistRequest.d.ts b/packages/osrl/lib/cscart/api-request/WishlistRequest.d.ts new file mode 100644 index 00000000..57ef9798 --- /dev/null +++ b/packages/osrl/lib/cscart/api-request/WishlistRequest.d.ts @@ -0,0 +1,20 @@ +import { AxiosInstance } from 'axios'; +import Config from '../config/Config'; +import AbstractRequest from './AbstractRequest'; +export default class WishlistRequest extends AbstractRequest { + entityPath: string; + prefix: string; + handlerParams: any; + params: any; + constructor(client: AxiosInstance, config: Config); + protected buildUrl(): string; + add(products: IAddToWishlistProduct): any; + add(products: Array): any; + remove(): Promise>; + protected setParams(): void; +} +interface IAddToWishlistProduct { + product_id: number; + product_options?: Array; +} +export {}; diff --git a/packages/osrl/lib/cscart/api-request/WishlistRequest.js b/packages/osrl/lib/cscart/api-request/WishlistRequest.js new file mode 100644 index 00000000..40abfa09 --- /dev/null +++ b/packages/osrl/lib/cscart/api-request/WishlistRequest.js @@ -0,0 +1,41 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const AbstractRequest_1 = require("./AbstractRequest"); +class WishlistRequest extends AbstractRequest_1.default { + constructor(client, config) { + super(client, config); + this.entityPath = 'wish_list'; + this.prefix = 'sra_'; + this.handlerParams = {}; + this.params = {}; + } + buildUrl() { + let url = super.buildUrl(); + url = url + (this.handlerParams.id ? `${this.handlerParams.id}/` : ''); + return url; + } + add(products) { + let requestProducts = {}; + if (Array.isArray(products)) { + products.map((product) => { + requestProducts[product.product_id] = Object.assign(Object.assign({}, product), { amount: 1 }); + }); + } + else { + requestProducts = { + [products.product_id]: Object.assign(Object.assign({}, products), { amount: 1 }) + }; + } + return this.post({ + products: requestProducts + }); + } + remove() { + return this.delete(); + } + setParams() { + this.params = Object.assign(Object.assign({}, this.params), { language: this.config.language, sl: this.config.language, lang_code: this.config.language }); + } +} +exports.default = WishlistRequest; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiV2lzaGxpc3RSZXF1ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9jc2NhcnQvYXBpLXJlcXVlc3QvV2lzaGxpc3RSZXF1ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBR0EsdURBQStDO0FBRS9DLE1BQXFCLGVBQWdCLFNBQVEseUJBQWU7SUFNMUQsWUFBWSxNQUFxQixFQUFFLE1BQWM7UUFDL0MsS0FBSyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQTtRQU52QixlQUFVLEdBQVcsV0FBVyxDQUFDO1FBQ2pDLFdBQU0sR0FBVyxNQUFNLENBQUM7UUFNdEIsSUFBSSxDQUFDLGFBQWEsR0FBRyxFQUFFLENBQUM7UUFDeEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUM7SUFDbkIsQ0FBQztJQUVTLFFBQVE7UUFDaEIsSUFBSSxHQUFHLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQzNCLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUV2RSxPQUFPLEdBQUcsQ0FBQTtJQUNaLENBQUM7SUFLTSxHQUFHLENBQUMsUUFBOEQ7UUFDdkUsSUFBSSxlQUFlLEdBQVEsRUFBRSxDQUFDO1FBRTlCLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsRUFBRTtZQUMzQixRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBWSxFQUFFLEVBQUU7Z0JBQzVCLGVBQWUsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLG1DQUM5QixPQUFPLEtBQ1YsTUFBTSxFQUFFLENBQUMsR0FDVixDQUFDO1lBQ0osQ0FBQyxDQUFDLENBQUE7U0FDSDthQUFNO1lBQ0wsZUFBZSxHQUFHO2dCQUNoQixDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsa0NBQ2hCLFFBQVEsS0FDWCxNQUFNLEVBQUUsQ0FBQyxHQUNWO2FBQ0YsQ0FBQztTQUNIO1FBRUQsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDO1lBQ2YsUUFBUSxFQUFFLGVBQWU7U0FDMUIsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUVNLE1BQU07UUFDWCxPQUFPLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQTtJQUN0QixDQUFDO0lBRVMsU0FBUztRQUNqQixJQUFJLENBQUMsTUFBTSxtQ0FDTixJQUFJLENBQUMsTUFBTSxLQUNkLFFBQVEsRUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFDaEMsRUFBRSxFQUFVLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUNoQyxTQUFTLEVBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEdBQ2pDLENBQUE7SUFDSCxDQUFDO0NBQ0Y7QUExREQsa0NBMERDIn0= \ No newline at end of file diff --git a/packages/osrl/lib/cscart/config/Config.d.ts b/packages/osrl/lib/cscart/config/Config.d.ts new file mode 100644 index 00000000..d041049b --- /dev/null +++ b/packages/osrl/lib/cscart/config/Config.d.ts @@ -0,0 +1,13 @@ +import IConfig from './IConfig'; +declare class Config implements IConfig { + username: string; + apiKey: string; + apiUrl: string; + siteUrl: string; + client?: string; + timeout?: number; + language?: string; + userToken?: string; + constructor(config: IConfig); +} +export default Config; diff --git a/packages/osrl/lib/cscart/config/Config.js b/packages/osrl/lib/cscart/config/Config.js new file mode 100644 index 00000000..686756fd --- /dev/null +++ b/packages/osrl/lib/cscart/config/Config.js @@ -0,0 +1,16 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +class Config { + constructor(config) { + this.username = config.username; + this.apiKey = config.apiKey; + this.apiUrl = config.apiUrl; + this.siteUrl = config.siteUrl; + this.client = config.client; + this.timeout = config.timeout; + this.language = config.language; + this.userToken = config.userToken; + } +} +exports.default = Config; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9jc2NhcnQvY29uZmlnL0NvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUVBLE1BQU0sTUFBTTtJQVdSLFlBQVksTUFBZTtRQUN2QixJQUFJLENBQUMsUUFBUSxHQUFLLE1BQU0sQ0FBQyxRQUFRLENBQUM7UUFDbEMsSUFBSSxDQUFDLE1BQU0sR0FBTyxNQUFNLENBQUMsTUFBTSxDQUFBO1FBQy9CLElBQUksQ0FBQyxNQUFNLEdBQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQTtRQUMvQixJQUFJLENBQUMsT0FBTyxHQUFNLE1BQU0sQ0FBQyxPQUFPLENBQUE7UUFDaEMsSUFBSSxDQUFDLE1BQU0sR0FBTyxNQUFNLENBQUMsTUFBTSxDQUFBO1FBQy9CLElBQUksQ0FBQyxPQUFPLEdBQU0sTUFBTSxDQUFDLE9BQU8sQ0FBQTtRQUNoQyxJQUFJLENBQUMsUUFBUSxHQUFLLE1BQU0sQ0FBQyxRQUFRLENBQUE7UUFDakMsSUFBSSxDQUFDLFNBQVMsR0FBSSxNQUFNLENBQUMsU0FBUyxDQUFBO0lBQ3RDLENBQUM7Q0FDSjtBQUVELGtCQUFlLE1BQU0sQ0FBQSJ9 \ No newline at end of file diff --git a/packages/osrl/lib/cscart/config/IConfig.d.ts b/packages/osrl/lib/cscart/config/IConfig.d.ts new file mode 100644 index 00000000..c9f034dc --- /dev/null +++ b/packages/osrl/lib/cscart/config/IConfig.d.ts @@ -0,0 +1,11 @@ +interface IConfig { + username: string; + apiKey: string; + apiUrl: string; + siteUrl: string; + client?: string; + timeout?: number; + language?: string; + userToken?: string; +} +export default IConfig; diff --git a/packages/osrl/lib/cscart/config/IConfig.js b/packages/osrl/lib/cscart/config/IConfig.js new file mode 100644 index 00000000..ec4040e3 --- /dev/null +++ b/packages/osrl/lib/cscart/config/IConfig.js @@ -0,0 +1,3 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSUNvbmZpZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvY3NjYXJ0L2NvbmZpZy9JQ29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIifQ== \ No newline at end of file diff --git a/packages/osrl/lib/cscart/index.d.ts b/packages/osrl/lib/cscart/index.d.ts new file mode 100644 index 00000000..56548f92 --- /dev/null +++ b/packages/osrl/lib/cscart/index.d.ts @@ -0,0 +1,41 @@ +import { AxiosInstance } from 'axios'; +import Config from './config/Config'; +import IConfig from './config/IConfig'; +import AuthRequest from './api-request/AuthRequest'; +import CartContentRequest from './api-request/CartRequest'; +import CategoriesRequest from './api-request/CategoriesRequest'; +import LayoutsRequest from './api-request/LayoutsRequest'; +import ProductsRequest from './api-request/ProductsRequest'; +import PagesRequest from './api-request/PagesRequest'; +import OrdersRequest from './api-request/OrdersRequest'; +import SettlementsRequest from './api-request/SettlementsRequest'; +import WishlistRequest from './api-request/WishlistRequest'; +import ProfileRequest from './api-request/ProfileRequest'; +import SettingsRequest from './api-request/SettingsRequest'; +import TestimonialsRequest from './api-request/TestimonialsRequest'; +import VendorsRequest from './api-request/VendorsRequest'; +import NotificationRequest from './api-request/NotificationRequest'; +export declare class CsCartApiSdk { + protected config: Config; + protected client: AxiosInstance; + constructor(config: IConfig); + get products(): ProductsRequest; + get pages(): PagesRequest; + get categories(): CategoriesRequest; + get auth(): AuthRequest; + get layouts(): LayoutsRequest; + get orders(): OrdersRequest; + get settlements(): SettlementsRequest; + get cart(): CartContentRequest; + get wishlist(): WishlistRequest; + get profile(): ProfileRequest; + get settings(): SettingsRequest; + get testimonials(): TestimonialsRequest; + get vendors(): VendorsRequest; + get notifications(): NotificationRequest; + getConfig(): IConfig; + getClient(): AxiosInstance; + setLanguage(language: string): void; + setClientId(id: string): void; + setUserToken(token: string): void; +} diff --git a/packages/osrl/lib/cscart/index.js b/packages/osrl/lib/cscart/index.js new file mode 100644 index 00000000..f5a8577c --- /dev/null +++ b/packages/osrl/lib/cscart/index.js @@ -0,0 +1,103 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.CsCartApiSdk = void 0; +const axios_1 = require("axios"); +const js_base64_1 = require("js-base64"); +const Config_1 = require("./config/Config"); +const AuthRequest_1 = require("./api-request/AuthRequest"); +const CartRequest_1 = require("./api-request/CartRequest"); +const CategoriesRequest_1 = require("./api-request/CategoriesRequest"); +const LayoutsRequest_1 = require("./api-request/LayoutsRequest"); +const ProductsRequest_1 = require("./api-request/ProductsRequest"); +const PagesRequest_1 = require("./api-request/PagesRequest"); +const OrdersRequest_1 = require("./api-request/OrdersRequest"); +const SettlementsRequest_1 = require("./api-request/SettlementsRequest"); +const WishlistRequest_1 = require("./api-request/WishlistRequest"); +const ProfileRequest_1 = require("./api-request/ProfileRequest"); +const SettingsRequest_1 = require("./api-request/SettingsRequest"); +const TestimonialsRequest_1 = require("./api-request/TestimonialsRequest"); +const VendorsRequest_1 = require("./api-request/VendorsRequest"); +const NotificationRequest_1 = require("./api-request/NotificationRequest"); +class CsCartApiSdk { + constructor(config) { + this.config = new Config_1.default(config); + this.client = axios_1.default.create({ + baseURL: this.config.apiUrl, + timeout: this.config.timeout ? this.config.timeout : 8000, + headers: { + 'Cache-Control': 'no-cache', + 'Storefront-Api-Access-Key': this.config.apiKey, + }, + }); + this.client.interceptors.request.use(conf => { + const newConf = Object.assign({}, conf); + newConf.headers.common['Storefront-Api-Access-Key'] = this.config.apiKey; + newConf.headers.common['Cache-Control'] = 'no-cache'; + newConf.params = Object.assign(Object.assign({}, newConf.params), { client: this.config.client }); + if (this.config.userToken) { + // newConf.headers.common.Authorization = `Basic ${Base64.encode(this.config.userToken)}:`; + newConf.headers.common.Authorization = `Basic ${js_base64_1.Base64.encode(this.config.username + ':' + this.config.apiKey)}`; + } + return newConf; + }); + } + get products() { + return new ProductsRequest_1.default(this.client, this.config); + } + get pages() { + return new PagesRequest_1.default(this.client, this.config); + } + get categories() { + return new CategoriesRequest_1.default(this.client, this.config); + } + get auth() { + return new AuthRequest_1.default(this.client, this.config); + } + get layouts() { + return new LayoutsRequest_1.default(this.client, this.config); + } + get orders() { + return new OrdersRequest_1.default(this.client, this.config); + } + get settlements() { + return new SettlementsRequest_1.default(this.client, this.config); + } + get cart() { + return new CartRequest_1.default(this.client, this.config); + } + get wishlist() { + return new WishlistRequest_1.default(this.client, this.config); + } + get profile() { + return new ProfileRequest_1.default(this.client, this.config); + } + get settings() { + return new SettingsRequest_1.default(this.client, this.config); + } + get testimonials() { + return new TestimonialsRequest_1.default(this.client, this.config); + } + get vendors() { + return new VendorsRequest_1.default(this.client, this.config); + } + get notifications() { + return new NotificationRequest_1.default(this.client, this.config); + } + getConfig() { + return this.config; + } + getClient() { + return this.client; + } + setLanguage(language) { + this.config.language = language; + } + setClientId(id) { + this.config.client = id; + } + setUserToken(token) { + this.config.userToken = token; + } +} +exports.CsCartApiSdk = CsCartApiSdk; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbGliL2NzY2FydC9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxpQ0FBeUI7QUFDekIseUNBQWtDO0FBR2xDLDRDQUFvQztBQUVwQywyREFBbUQ7QUFDbkQsMkRBQTBEO0FBQzFELHVFQUErRDtBQUMvRCxpRUFBeUQ7QUFDekQsbUVBQTJEO0FBQzNELDZEQUFxRDtBQUNyRCwrREFBdUQ7QUFDdkQseUVBQWlFO0FBQ2pFLG1FQUEyRDtBQUMzRCxpRUFBeUQ7QUFDekQsbUVBQTJEO0FBQzNELDJFQUFtRTtBQUNuRSxpRUFBeUQ7QUFDekQsMkVBQW1FO0FBRW5FLE1BQWEsWUFBWTtJQUl2QixZQUFZLE1BQWU7UUFDekIsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLGdCQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDakMsSUFBSSxDQUFDLE1BQU0sR0FBRyxlQUFLLENBQUMsTUFBTSxDQUFDO1lBQ3pCLE9BQU8sRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU07WUFDM0IsT0FBTyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSTtZQUN6RCxPQUFPLEVBQUU7Z0JBQ1AsZUFBZSxFQUFFLFVBQVU7Z0JBQzNCLDJCQUEyQixFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTTthQUNoRDtTQUNGLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDMUMsTUFBTSxPQUFPLHFCQUFRLElBQUksQ0FBRSxDQUFDO1lBRTVCLE9BQU8sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLDJCQUEyQixDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFN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 \ No newline at end of file diff --git a/packages/osrl/lib/fs.d.ts b/packages/osrl/lib/fs.d.ts new file mode 100644 index 00000000..a87fb0d6 --- /dev/null +++ b/packages/osrl/lib/fs.d.ts @@ -0,0 +1,10 @@ +export { sync as read } from '@plastichub/fs/read'; +export { sync as exists } from '@plastichub/fs/exists'; +export { sync as dir } from '@plastichub/fs/dir'; +export { sync as write } from '@plastichub/fs/write'; +export declare const sizeToString: (bytes: number, si?: boolean) => string; +export declare const getExtensions: (glob: string) => any[]; +export declare const isFile: (src: string) => boolean; +export declare const isFolder: (src: string) => boolean; +export declare const files: (dir: any, glob: any, options?: any) => []; +export declare const forward_slash: (path: any) => any; diff --git a/packages/osrl/lib/fs.js b/packages/osrl/lib/fs.js new file mode 100644 index 00000000..3b39570c --- /dev/null +++ b/packages/osrl/lib/fs.js @@ -0,0 +1,78 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.forward_slash = exports.files = exports.isFolder = exports.isFile = exports.getExtensions = exports.sizeToString = exports.write = exports.dir = exports.exists = exports.read = void 0; +const fg = require('fast-glob'); +var read_1 = require("@plastichub/fs/read"); +Object.defineProperty(exports, "read", { enumerable: true, get: function () { return read_1.sync; } }); +var exists_1 = require("@plastichub/fs/exists"); +Object.defineProperty(exports, "exists", { enumerable: true, get: function () { return exists_1.sync; } }); +var dir_1 = require("@plastichub/fs/dir"); +Object.defineProperty(exports, "dir", { enumerable: true, get: function () { return dir_1.sync; } }); +var write_1 = require("@plastichub/fs/write"); +Object.defineProperty(exports, "write", { enumerable: true, get: function () { return write_1.sync; } }); +const parseGlob = require('parse-glob'); +const GLOB_GROUP_PATTERN = /[!*+?@]\(.*\)/; +const fs = require("fs"); +const sizeToString = (bytes, si = true) => { + var units; + var u; + var b = bytes; + var thresh = si ? 1000 : 1024; + if (Math.abs(b) < thresh) { + return b + ' B'; + } + units = si + ? ['kB', 'MB', 'GB', 'TB'] + : ['KiB', 'MiB', 'GiB', 'TiB']; + u = -1; + do { + b /= thresh; + ++u; + } while (Math.abs(b) >= thresh && u < units.length - 1); + return b.toFixed(1) + ' ' + units[u]; +}; +exports.sizeToString = sizeToString; +const getExtensions = (glob) => { + const match = glob.match(GLOB_GROUP_PATTERN); + if (match) { + return glob.substring(match.index + 2, glob.lastIndexOf(')')).split('|'); + } + else { + return [parseGlob(glob).path.ext]; + } +}; +exports.getExtensions = getExtensions; +const isFile = (src) => { + let srcIsFile = false; + try { + srcIsFile = fs.lstatSync(src).isFile(); + } + catch (e) { + } + return srcIsFile; +}; +exports.isFile = isFile; +const isFolder = (src) => { + let srcIsFolder = false; + try { + srcIsFolder = fs.lstatSync(src).isDirectory(); + } + catch (e) { + } + return srcIsFolder; +}; +exports.isFolder = isFolder; +const files = (dir, glob, options) => fg.sync(glob, Object.assign({ dot: true, cwd: dir, absolute: true }, options || {})); +exports.files = files; +const forward_slash = (path) => { + const isExtendedLengthPath = /^\\\\\?\\/.test(path); + const hasNonAscii = /[^\u0000-\u0080]+/.test(path); // eslint-disable-line no-control-regex + if (isExtendedLengthPath || hasNonAscii) { + return path; + } + return path.replace(/\\/g, '/'); +}; +exports.forward_slash = forward_slash; +const jekyllNop = "---\n#jekyll\n---\n"; +const frontMatter = /^---[.\r\n]*---/; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvbGliL2ZzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLE1BQU0sRUFBRSxHQUFHLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQztBQUNoQyw0Q0FBbUQ7QUFBMUMsNEZBQUEsSUFBSSxPQUFRO0FBQ3JCLGdEQUF1RDtBQUE5QyxnR0FBQSxJQUFJLE9BQVU7QUFDdkIsMENBQWlEO0FBQXhDLDBGQUFBLElBQUksT0FBTztBQUNwQiw4Q0FBcUQ7QUFBNUMsOEZBQUEsSUFBSSxPQUFTO0FBRXRCLE1BQU0sU0FBUyxHQUFHLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQTtBQUN2QyxNQUFNLGtCQUFrQixHQUFHLGVBQWUsQ0FBQTtBQUUxQyx5QkFBd0I7QUFFakIsTUFBTSxZQUFZLEdBQUcsQ0FBQyxLQUFhLEVBQUUsS0FBYyxJQUFJLEVBQUUsRUFBRTtJQUM5RCxJQUFJLEtBQUssQ0FBQztJQUNWLElBQUksQ0FBQyxDQUFDO0lBQ04sSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDO0lBQ2QsSUFBSSxNQUFNLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUM5QixJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxFQUFFO1FBQ3RCLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQztLQUNuQjtJQUNELEtBQUssR0FBRyxFQUFFO1FBQ04sQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDO1FBQzFCLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ25DLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNQLEdBQUc7UUFDQyxDQUFDLElBQUksTUFBTSxDQUFDO1FBQ1osRUFBRSxDQUFDLENBQUM7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 \ No newline at end of file diff --git a/packages/osrl/lib/i18n.d.ts b/packages/osrl/lib/i18n.d.ts new file mode 100644 index 00000000..3ed6fc19 --- /dev/null +++ b/packages/osrl/lib/i18n.d.ts @@ -0,0 +1,3 @@ +export declare const clean: (text?: string) => string; +export declare const hash: (text: string) => string; +export declare const store: (storePath: string, text: string, file?: string) => void; diff --git a/packages/osrl/lib/i18n.js b/packages/osrl/lib/i18n.js new file mode 100644 index 00000000..b2a1b312 --- /dev/null +++ b/packages/osrl/lib/i18n.js @@ -0,0 +1,19 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.store = exports.hash = exports.clean = void 0; +const crypto_1 = require("crypto"); +const read_1 = require("@plastichub/fs/read"); +const write_1 = require("@plastichub/fs/write"); +const removeNonPrintableCharacters = (text) => text.replace(/[^\x20-\x7E]/g, ''); +const clean = (text = "") => text.trim(); +exports.clean = clean; +const hash = (text) => (0, crypto_1.createHash)('md5').update((0, exports.clean)(text)).digest('base64'); +exports.hash = hash; +const store = (storePath, text, file = '') => { + const _hash = (0, exports.hash)(text); + const store = (0, read_1.sync)(storePath, 'json') || {}; + store[_hash] = (0, exports.clean)(text); + (0, write_1.sync)(storePath, store); +}; +exports.store = store; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaTE4bi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9saWIvaTE4bi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFFQSxtQ0FBbUM7QUFDbkMsOENBQWtEO0FBQ2xELGdEQUFvRDtBQUVwRCxNQUFNLDRCQUE0QixHQUFHLENBQUMsSUFBWSxFQUFVLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLGVBQWUsRUFBRSxFQUFFLENBQUMsQ0FBQTtBQUV6RixNQUFNLEtBQUssR0FBRyxDQUFDLE9BQWUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUE7QUFBMUMsUUFBQSxLQUFLLFNBQXFDO0FBQ2hELE1BQU0sSUFBSSxHQUFHLENBQUMsSUFBWSxFQUFFLEVBQUUsQ0FBQyxJQUFBLG1CQUFVLEVBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUEsYUFBSyxFQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFBO0FBQS9FLFFBQUEsSUFBSSxRQUEyRTtBQUVyRixNQUFNLEtBQUssR0FBRyxDQUFDLFNBQWdCLEVBQUUsSUFBWSxFQUFFLE9BQWUsRUFBRSxFQUFFLEVBQUU7SUFDMUUsTUFBTSxLQUFLLEdBQVcsSUFBQSxZQUFJLEVBQUMsSUFBSSxDQUFDLENBQUE7SUFDaEMsTUFBTSxLQUFLLEdBQUcsSUFBQSxXQUFJLEVBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQTtJQUMzQyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBQSxhQUFLLEVBQUMsSUFBSSxDQUFDLENBQUE7SUFDMUIsSUFBQSxZQUFLLEVBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxDQUFBO0FBQ3hCLENBQUMsQ0FBQTtBQUxZLFFBQUEsS0FBSyxTQUtqQiJ9 \ No newline at end of file diff --git a/packages/osrl/lib/images.d.ts b/packages/osrl/lib/images.d.ts new file mode 100644 index 00000000..ed8b6036 --- /dev/null +++ b/packages/osrl/lib/images.d.ts @@ -0,0 +1,13 @@ +export declare const getFormats: (product: any, folder: any) => { + src: string; + dist: string; + format: string; +}[]; +export declare const updateImages: (root: any, product_root: any, content: any) => Promise; +export declare const format: (formats: any) => any; +export declare const getResizePatterns: (product: any, folder: any) => { + src: string; + dist: string; + percent: number; +}[]; +export declare const resize: (patterns: any) => any; diff --git a/packages/osrl/lib/images.js b/packages/osrl/lib/images.js new file mode 100644 index 00000000..c053fc8f --- /dev/null +++ b/packages/osrl/lib/images.js @@ -0,0 +1,221 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.resize = exports.getResizePatterns = exports.format = exports.updateImages = exports.getFormats = void 0; +var path = require('path'); +const exists = require('@plastichub/fs/exists').sync; +const sharp = require('sharp'); +const glob = require('glob'); +const fs = require('fs'); +const JSDOM = require('jsdom').JSDOM; +const URI = require("uri-js"); +const getFormats = (product, folder) => { + return [{ + src: `${product}/${folder}/*.jpg`, + dist: `${product}/${folder}/webp`, + format: 'webp', + }]; +}; +exports.getFormats = getFormats; +const updateImages = (root, product_root, content) => __awaiter(void 0, void 0, void 0, function* () { + // Feed the content into JSDOM + const dom = new JSDOM(content); + const document = dom.window.document; + // Find the image elements via `querySelectorAll`, replace this selector with your own custom one + const imageElems = document.querySelectorAll('img'); + // If there are no matching elements, just return the original content :) + if (imageElems.length === 0) { + console.log('no images'); + return content; + } + for (const imgElem of imageElems) { + // Get the `src` of the image element + const imgSrc = imgElem.getAttribute('src'); + // Only add this transform for internal images + if (imgSrc.startsWith('https') || imgSrc.startsWith('http')) { + let srcSet = []; + // Replace all of the image sources with a new one that matches the results of the Sharp build + if (imgSrc.indexOf('.png') !== -1) { + continue; + } + const parsed = URI.parse(decodeURIComponent(imgSrc)); + const pParsed = path.parse(parsed.path); + const imageName = (url) => { + return decodeURIComponent(pParsed.base); + }; + // const parts = url.parse(imgSrc); + // Get the metadata for the file and add it as the `${width}w` needed in defining a `srcset` in HTML for `` + const name = imageName(imgSrc); + const _path = decodeURIComponent(parsed.path).replace('//', ''); + const imageSrcPath = `${root}/${_path}`; + if (!exists(imageSrcPath)) { + console.log('image doesnt exists : ' + imageSrcPath + ' \n\t' + imgSrc); + return; + } + const imageSrcPathParts = path.parse(imageSrcPath); + const imgSrc80 = imgSrc.replace(name, '80/' + name); + const imgSrc60 = imgSrc.replace(name, '60/' + name); + const imgSrc40 = imgSrc.replace(name, '40/' + name); + const imgSrc20 = imgSrc.replace(name, '20/' + name); + const _set = (res) => { + return path.resolve(imageSrcPathParts.dir + '/' + res + '/' + name); + }; + if (!exists(_set(80))) { + console.error('doesnt exists ', _set(80), imgSrc); + continue; + } + if (!exists(_set(60))) { + console.error('doesnt exists ', _set(60), imgSrc); + continue; + } + if (!exists(_set(40))) { + console.error('doesnt exists ', _set(40), imgSrc); + continue; + } + if (!exists(_set(20))) { + console.error('doesnt exists ', _set(20), imgSrc); + continue; + } + const img80 = yield sharp(_set(80)); + const md80 = yield img80.metadata(); + srcSet.push(`${imgSrc80.replace(/\s/g, '%20')} ${md80.width}w`); + // Repeat + const img60 = yield sharp(_set(60)); + const md60 = yield img60.metadata(); + srcSet.push(`${imgSrc60.replace(/\s/g, '%20')} ${md60.width}w`); + // Repeat + const img40 = yield sharp(_set(40)); + const md40 = yield img40.metadata(); + srcSet.push(`${imgSrc40.replace(/\s/g, '%20')} ${md40.width}w`); + // Repeat + const img20 = yield sharp(_set(20)); + const md20 = yield img20.metadata(); + srcSet.push(`${imgSrc20.replace(/\s/g, '%20')} ${md20.width}w`); + // Join the `srcset` into a string. that can be added to the `` tag + srcSet = srcSet.join(', '); + // Set the `srcset` attribute + imgElem.setAttribute('srcset', srcSet); + // Find the new `src` for the WebP image + let webpSrc = imgSrc.replace(name, 'webp/' + encodeURIComponent(name)).replace('.png', '.webp').replace('.jpg', '.webp'); + /* const webpSrc = imgSrc + .replace('/images/', '/images/webp/') + .replace('.png', '.webp'); + */ + // Create a separate `source` element for the WebP with feature detection via `type` + const webpElement = document.createElement('source'); + webpElement.setAttribute('srcset', webpSrc); + webpElement.setAttribute('type', 'image/webp'); + // Wrap the `` and the `` into one `` tag in order for it to work + const pictureElement = document.createElement('picture'); + pictureElement.appendChild(webpElement); + pictureElement.appendChild(imgElem.cloneNode()); + // Replace the `` with the `` + imgElem.replaceWith(pictureElement); + } + } + return document.documentElement.outerHTML; +}); +exports.updateImages = updateImages; +const format = (formats) => { + return formats.forEach((format) => { + // Create the `dist` folder if it doesn't exist already + if (!fs.existsSync(format.dist)) { + fs.mkdirSync(format.dist, { + recursive: true + }, (err) => { + if (err) + throw err; + }); + } + // Find all files matching the glob patterns specified in `src` + let files = glob.sync(format.src); + files.forEach((file) => { + let filename = path.basename(file); + if (exists(path.resolve(`${format.dist}/${filename.replace('jpg', format.format)}`))) { + return; + } + const image = sharp(file); + // Convert to WebP via Sharp's inferencing automatically of extensions + image + .toFile(`${format.dist}/${filename.replace('jpg', format.format)}`) + .catch((err) => { + console.log(err); + }); + }); + }); +}; +exports.format = format; +const getResizePatterns = (product, folder) => { + return [{ + src: `${product}/${folder}/*.jpg`, + dist: `${product}/${folder}/80`, + percent: 80, + }, + { + src: `${product}/${folder}/*.jpg`, + dist: `${product}/${folder}/60`, + percent: 60, + }, + { + src: `${product}/${folder}/*.jpg`, + dist: `${product}/${folder}/40`, + percent: 40, + }, + { + src: `${product}/${folder}/*.jpg`, + dist: `${product}/${folder}/20`, + percent: 20, + }, + ]; +}; +exports.getResizePatterns = getResizePatterns; +const resize = (patterns) => { + return patterns.forEach((resize) => { + // Create the `dist` folder if it doesn't exist already + if (!fs.existsSync(resize.dist)) { + fs.mkdirSync(resize.dist, { + recursive: true + }, (err) => { + if (err) + throw err; + }); + } + // Get all of the files that match the glob pattern in `src` + let files = glob.sync(resize.src); + files.forEach((file) => { + // Get the filename, will be used later + let filename = path.basename(file); + // Construct the Sharp object + const image = sharp(file); + if (exists(`${resize.dist}/${filename}`)) { + return; + } + // Retrieve the metadata via Sharp + image + .metadata() + .then((metadata) => { + // Resize the image to a width specified by the `percent` value and output as PNG + return image + .resize(Math.round(metadata.width * (resize.percent / 100))) + .png() + .toFile(`${resize.dist}/${filename}`) + .catch((err) => { + console.log(err); + }); + }) + .catch((err) => { + console.log(err); + }); + }); + }); +}; +exports.resize = resize; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1hZ2VzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2xpYi9pbWFnZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBQUEsSUFBSSxJQUFJLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQzNCLE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLElBQUksQ0FBQztBQUNyRCxNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDL0IsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQzdCLE1BQU0sRUFBRSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUN6QixNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxDQUFDO0FBQ3JDLE1BQU0sR0FBRyxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUV2QixNQUFNLFVBQVUsR0FBRyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtJQUMxQyxPQUFPLENBQUM7WUFDSixHQUFHLEVBQUUsR0FBRyxPQUFPLElBQUksTUFBTSxRQUFRO1lBQ2pDLElBQUksRUFBRSxHQUFHLE9BQU8sSUFBSSxNQUFNLE9BQU87WUFDakMsTUFBTSxFQUFFLE1BQU07U0FDakIsQ0FBQyxDQUFDO0FBQ1AsQ0FBQyxDQUFBO0FBTlksUUFBQSxVQUFVLGNBTXRCO0FBRU0sTUFBTSxZQUFZLEdBQUcsQ0FBTyxJQUFJLEVBQUUsWUFBWSxFQUFFLE9BQU8sRUFBRSxFQUFFO0lBQzlELDhCQUE4QjtJQUM5QixNQUFNLEdBQUcsR0FBRyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUMvQixNQUFNLFFBQVEsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQztJQUVyQyxpR0FBaUc7SUFDakcsTUFBTSxVQUFVLEdBQUcsUUFBUSxDQUFD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 \ No newline at end of file diff --git a/packages/osrl/lib/index.d.ts b/packages/osrl/lib/index.d.ts new file mode 100644 index 00000000..9124098b --- /dev/null +++ b/packages/osrl/lib/index.d.ts @@ -0,0 +1,2 @@ +export declare const substitute: (template: any, map: any) => any; +export declare const resolveConfig: (config: any) => any; diff --git a/packages/osrl/lib/index.js b/packages/osrl/lib/index.js new file mode 100644 index 00000000..7e4c9319 --- /dev/null +++ b/packages/osrl/lib/index.js @@ -0,0 +1,24 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.resolveConfig = exports.substitute = void 0; +const substitute = (template, map) => { + const transform = (k) => k || ''; + return template.replace(/\$\{([^\s\:\}]+)(?:\:([^\s\:\}]+))?\}/g, (match, key, format) => transform(map[key]).toString()); +}; +exports.substitute = substitute; +const _resolve = (config) => { + for (const key in config) { + if (config[key] && typeof config[key] == 'string') { + const resolved = (0, exports.substitute)(config[key], config); + config[key] = resolved; + } + } + return config; +}; +const resolveConfig = (config) => { + config = _resolve(config); + config = _resolve(config); + return config; +}; +exports.resolveConfig = resolveConfig; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvbGliL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUNPLE1BQU0sVUFBVSxHQUFHLENBQUMsUUFBUSxFQUFFLEdBQUcsRUFBRSxFQUFFO0lBQzFDLE1BQU0sU0FBUyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ2pDLE9BQU8sUUFBUSxDQUFDLE9BQU8sQ0FBQyx3Q0FBd0MsRUFDOUQsQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7QUFDNUQsQ0FBQyxDQUFDO0FBSlcsUUFBQSxVQUFVLGNBSXJCO0FBRUYsTUFBTSxRQUFRLEdBQUcsQ0FBQyxNQUFNLEVBQUUsRUFBRTtJQUMxQixLQUFLLE1BQU0sR0FBRyxJQUFJLE1BQU0sRUFBRTtRQUN4QixJQUFJLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxPQUFPLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxRQUFRLEVBQUU7WUFDakQsTUFBTSxRQUFRLEdBQUcsSUFBQSxrQkFBVSxFQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQztZQUNqRCxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsUUFBUSxDQUFDO1NBQ3hCO0tBQ0Y7SUFDRCxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDLENBQUE7QUFDTSxNQUFNLGFBQWEsR0FBRyxDQUFDLE1BQU0sRUFBRSxFQUFFO0lBQ3RDLE1BQU0sR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDMUIsTUFBTSxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUMxQixPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDLENBQUE7QUFKWSxRQUFBLGFBQWEsaUJBSXpCIn0= \ No newline at end of file diff --git a/packages/osrl/lib/markdown.d.ts b/packages/osrl/lib/markdown.d.ts new file mode 100644 index 00000000..3b87915b --- /dev/null +++ b/packages/osrl/lib/markdown.d.ts @@ -0,0 +1,23 @@ +export declare const md2html: (content: any) => any; +/** + * @typedef MarkdownTableOptions + * @property {string|null|Array.} [align] + * @property {boolean} [padding=true] + * @property {boolean} [delimiterStart=true] + * @property {boolean} [delimiterStart=true] + * @property {boolean} [delimiterEnd=true] + * @property {boolean} [alignDelimiters=true] + * @property {(value: string) => number} [stringLength] + */ +/** + * Create a table from a matrix of strings. + * + * from : https://github.com/wooorm/markdown-table/blob/main/index.js + * + * + * + * @param {Array.>} table + * @param {MarkdownTableOptions} [options] + * @returns {string} + */ +export declare const markdownTable: (table: any, options?: any) => string; diff --git a/packages/osrl/lib/markdown.js b/packages/osrl/lib/markdown.js new file mode 100644 index 00000000..8691aa7c --- /dev/null +++ b/packages/osrl/lib/markdown.js @@ -0,0 +1,214 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.markdownTable = exports.md2html = void 0; +const showdown_1 = require("showdown"); +const md2html = (content) => { + let converter = new showdown_1.Converter({ tables: true }); + converter.setOption('literalMidWordUnderscores', 'true'); + return converter.makeHtml(content); +}; +exports.md2html = md2html; +/** + * @typedef MarkdownTableOptions + * @property {string|null|Array.} [align] + * @property {boolean} [padding=true] + * @property {boolean} [delimiterStart=true] + * @property {boolean} [delimiterStart=true] + * @property {boolean} [delimiterEnd=true] + * @property {boolean} [alignDelimiters=true] + * @property {(value: string) => number} [stringLength] + */ +/** + * Create a table from a matrix of strings. + * + * from : https://github.com/wooorm/markdown-table/blob/main/index.js + * + * + * + * @param {Array.>} table + * @param {MarkdownTableOptions} [options] + * @returns {string} + */ +const markdownTable = (table, options = {}) => { + const align = (options.align || []).concat(); + const stringLength = options.stringLength || defaultStringLength; + /** @type {Array} Character codes as symbols for alignment per column. */ + const alignments = []; + /** @type {Array>} Cells per row. */ + const cellMatrix = []; + /** @type {Array>} Sizes of each cell per row. */ + const sizeMatrix = []; + /** @type {Array} */ + const longestCellByColumn = []; + let mostCellsPerRow = 0; + let rowIndex = -1; + // This is a superfluous loop if we don’t align delimiters, but otherwise we’d + // do superfluous work when aligning, so optimize for aligning. + while (++rowIndex < table.length) { + /** @type {Array} */ + const row = []; + /** @type {Array} */ + const sizes = []; + let columnIndex = -1; + if (table[rowIndex].length > mostCellsPerRow) { + mostCellsPerRow = table[rowIndex].length; + } + while (++columnIndex < table[rowIndex].length) { + const cell = serialize(table[rowIndex][columnIndex]); + if (options.alignDelimiters !== false) { + const size = stringLength(cell); + sizes[columnIndex] = size; + if (longestCellByColumn[columnIndex] === undefined || + size > longestCellByColumn[columnIndex]) { + longestCellByColumn[columnIndex] = size; + } + } + row.push(cell); + } + cellMatrix[rowIndex] = row; + sizeMatrix[rowIndex] = sizes; + } + // Figure out which alignments to use. + let columnIndex = -1; + if (typeof align === 'object' && 'length' in align) { + while (++columnIndex < mostCellsPerRow) { + alignments[columnIndex] = toAlignment(align[columnIndex]); + } + } + else { + const code = toAlignment(align); + while (++columnIndex < mostCellsPerRow) { + alignments[columnIndex] = code; + } + } + // Inject the alignment row. + columnIndex = -1; + /** @type {Array} */ + const row = []; + /** @type {Array} */ + const sizes = []; + while (++columnIndex < mostCellsPerRow) { + const code = alignments[columnIndex]; + let before = ''; + let after = ''; + if (code === 99 /* `c` */) { + before = ':'; + after = ':'; + } + else if (code === 108 /* `l` */) { + before = ':'; + } + else if (code === 114 /* `r` */) { + after = ':'; + } + // There *must* be at least one hyphen-minus in each alignment cell. + let size = options.alignDelimiters === false + ? 1 + : Math.max(1, longestCellByColumn[columnIndex] - before.length - after.length); + const cell = before + '-'.repeat(size) + after; + if (options.alignDelimiters !== false) { + size = before.length + size + after.length; + if (size > longestCellByColumn[columnIndex]) { + longestCellByColumn[columnIndex] = size; + } + sizes[columnIndex] = size; + } + row[columnIndex] = cell; + } + // Inject the alignment row. + cellMatrix.splice(1, 0, row); + sizeMatrix.splice(1, 0, sizes); + rowIndex = -1; + /** @type {Array} */ + const lines = []; + while (++rowIndex < cellMatrix.length) { + const row = cellMatrix[rowIndex]; + const sizes = sizeMatrix[rowIndex]; + columnIndex = -1; + /** @type {Array} */ + const line = []; + while (++columnIndex < mostCellsPerRow) { + const cell = row[columnIndex] || ''; + let before = ''; + let after = ''; + if (options.alignDelimiters !== false) { + const size = longestCellByColumn[columnIndex] - (sizes[columnIndex] || 0); + const code = alignments[columnIndex]; + if (code === 114 /* `r` */) { + before = ' '.repeat(size); + } + else if (code === 99 /* `c` */) { + if (size % 2) { + before = ' '.repeat(size / 2 + 0.5); + after = ' '.repeat(size / 2 - 0.5); + } + else { + before = ' '.repeat(size / 2); + after = before; + } + } + else { + after = ' '.repeat(size); + } + } + if (options.delimiterStart !== false && !columnIndex) { + line.push('|'); + } + if (options.padding !== false && + // Don’t add the opening space if we’re not aligning and the cell is + // empty: there will be a closing space. + !(options.alignDelimiters === false && cell === '') && + (options.delimiterStart !== false || columnIndex)) { + line.push(' '); + } + if (options.alignDelimiters !== false) { + line.push(before); + } + line.push(cell); + if (options.alignDelimiters !== false) { + line.push(after); + } + if (options.padding !== false) { + line.push(' '); + } + if (options.delimiterEnd !== false || + columnIndex !== mostCellsPerRow - 1) { + line.push('|'); + } + } + lines.push(options.delimiterEnd === false + ? line.join('').replace(/ +$/, '') + : line.join('')); + } + return lines.join('\n'); +}; +exports.markdownTable = markdownTable; +/** + * @param {string|null|undefined} [value] + * @returns {string} + */ +function serialize(value) { + return value === null || value === undefined ? '' : String(value); +} +/** + * @param {string} value + * @returns {number} + */ +function defaultStringLength(value) { + return value.length; +} +/** + * @param {string|null|undefined} value + * @returns {number} + */ +function toAlignment(value) { + const code = typeof value === 'string' ? value.codePointAt(0) : 0; + return code === 67 /* `C` */ || code === 99 /* `c` */ + ? 99 /* `c` */ + : code === 76 /* `L` */ || code === 108 /* `l` */ + ? 108 /* `l` */ + : code === 82 /* `R` */ || code === 114 /* `r` */ + ? 114 /* `r` */ + : 0; +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFya2Rvd24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvbGliL21hcmtkb3duLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHVDQUFvQztBQUU3QixNQUFNLE9BQU8sR0FBRyxDQUFDLE9BQU8sRUFBRSxFQUFFO0lBQ2pDLElBQUksU0FBUyxHQUFHLElBQUksb0JBQVMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ2hELFNBQVMsQ0FBQyxTQUFTLENBQUMsMkJBQTJCLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDekQsT0FBTyxTQUFTLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ3JDLENBQUMsQ0FBQTtBQUpZLFFBQUEsT0FBTyxXQUluQjtBQUVEOzs7Ozs7Ozs7R0FTRztBQUVIOzs7Ozs7Ozs7O0dBVUc7QUFDSSxNQUFNLGFBQWEsR0FBRyxDQUFDLEtBQUssRUFBRSxVQUFjLEVBQUUsRUFBRSxFQUFFO0lBRXZELE1BQU0sS0FBSyxHQUFHLENBQUMsT0FBTyxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQTtJQUM1QyxNQUFNLFlBQVksR0FBRyxPQUFPLENBQUMsWUFBWSxJQUFJLG1CQUFtQixDQUFBO0lBQ2hFLGlGQUFpRjtJQUNqRixNQUFNLFVBQVUsR0FBRyxFQUFFLENBQUE7SUFDckIsa0RBQWtEO0lBQ2xELE1BQU0sVUFBVSxHQUFHLEVBQUUsQ0FBQTtJQUNyQiwrREFBK0Q7SUFDL0QsTUFBTSxVQUFVLEdBQUcsRUFBRSxDQUFBO0lBQ3JCLDRCQUE0QjtJQUM1QixNQUFNLG1CQUFtQixHQUFHLEVBQUUsQ0FBQTtJQUM5QixJQUFJLGVBQWUsR0FBRyxDQUFDLENBQUE7SUFDdkIsSUFBSSxRQUFRLEdBQUcsQ0FBQyxDQUFDLENBQUE7SUFFakIsOEVBQThFO0lBQzlFLCtEQUErRDtJQUMvRCxPQUFPLEVBQUUsUUFBUSxHQUFHLEtBQUssQ0FB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 \ No newline at end of file diff --git a/packages/osrl/lib/net/mime.d.ts b/packages/osrl/lib/net/mime.d.ts new file mode 100644 index 00000000..2b7a3ec3 --- /dev/null +++ b/packages/osrl/lib/net/mime.d.ts @@ -0,0 +1,29 @@ +export declare const mimes: { + ".doc": string; + ".dot": string; + ".docx": string; + ".dotx": string; + ".docm": string; + ".dotm": string; + ".xls": string; + ".xlt": string; + ".xla": string; + ".xlsx": string; + ".xltx": string; + ".xlsm": string; + ".xltm": string; + ".xlam": string; + ".xlsb": string; + ".ppt": string; + ".pot": string; + ".pps": string; + ".ppa": string; + ".pptx": string; + ".potx": string; + ".ppsx": string; + ".ppam": string; + ".pptm": string; + ".potm": string; + ".ppsm": string; + ".mdb": string; +}; diff --git a/packages/osrl/lib/net/mime.js b/packages/osrl/lib/net/mime.js new file mode 100644 index 00000000..99acf7d8 --- /dev/null +++ b/packages/osrl/lib/net/mime.js @@ -0,0 +1,33 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.mimes = void 0; +exports.mimes = { + ".doc": "application/msword", + ".dot": "application/msword", + ".docx": "application/vnd.openxmlformats-officedocument.wordprocessingml.document", + ".dotx": "application/vnd.openxmlformats-officedocument.wordprocessingml.template", + ".docm": "application/vnd.ms-word.document.macroEnabled.12", + ".dotm": "application/vnd.ms-word.template.macroEnabled.12", + ".xls": "application/vnd.ms-excel", + ".xlt": "application/vnd.ms-excel", + ".xla": "application/vnd.ms-excel", + ".xlsx": "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", + ".xltx": "application/vnd.openxmlformats-officedocument.spreadsheetml.template", + ".xlsm": "application/vnd.ms-excel.sheet.macroEnabled.12", + ".xltm": "application/vnd.ms-excel.template.macroEnabled.12", + ".xlam": "application/vnd.ms-excel.addin.macroEnabled.12", + ".xlsb": "application/vnd.ms-excel.sheet.binary.macroEnabled.12", + ".ppt": "application/vnd.ms-powerpoint", + ".pot": "application/vnd.ms-powerpoint", + ".pps": "application/vnd.ms-powerpoint", + ".ppa": "application/vnd.ms-powerpoint", + ".pptx": "application/vnd.openxmlformats-officedocument.presentationml.presentation", + ".potx": "application/vnd.openxmlformats-officedocument.presentationml.template", + ".ppsx": "application/vnd.openxmlformats-officedocument.presentationml.slideshow", + ".ppam": "application/vnd.ms-powerpoint.addin.macroEnabled.12", + ".pptm": "application/vnd.ms-powerpoint.presentation.macroEnabled.12", + ".potm": "application/vnd.ms-powerpoint.template.macroEnabled.12", + ".ppsm": "application/vnd.ms-powerpoint.slideshow.macroEnabled.12", + ".mdb": "application/vnd.ms-access" +}; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWltZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvbmV0L21pbWUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQWEsUUFBQSxLQUFLLEdBQUc7SUFDakIsTUFBTSxFQUFFLG9CQUFvQjtJQUM1QixNQUFNLEVBQUUsb0JBQW9CO0lBQzVCLE9BQU8sRUFBRSx5RUFBeUU7SUFDbEYsT0FBTyxFQUFFLHlFQUF5RTtJQUNsRixPQUFPLEVBQUUsa0RBQWtEO0lBQzNELE9BQU8sRUFBRSxrREFBa0Q7SUFDM0QsTUFBTSxFQUFFLDBCQUEwQjtJQUNsQyxNQUFNLEVBQUUsMEJBQTBCO0lBQ2xDLE1BQU0sRUFBRSwwQkFBMEI7SUFDbEMsT0FBTyxFQUFFLG1FQUFtRTtJQUM1RSxPQUFPLEVBQUUsc0VBQXNFO0lBQy9FLE9BQU8sRUFBRSxnREFBZ0Q7SUFDekQsT0FBTyxFQUFFLG1EQUFtRDtJQUM1RCxPQUFPLEVBQUUsZ0RBQWdEO0lBQ3pELE9BQU8sRUFBRSx1REFBdUQ7SUFDaEUsTUFBTSxFQUFFLCtCQUErQjtJQUN2QyxNQUFNLEVBQUUsK0JBQStCO0lBQ3ZDLE1BQU0sRUFBRSwrQkFBK0I7SUFDdkMsTUFBTSxFQUFFLCtCQUErQjtJQUN2QyxPQUFPLEVBQUUsMkVBQTJFO0lBQ3BGLE9BQU8sRUFBRSx1RUFBdUU7SUFDaEYsT0FBTyxFQUFFLHdFQUF3RTtJQUNqRixPQUFPLEVBQUUscURBQXFEO0lBQzlELE9BQU8sRUFBRSw0REFBNEQ7SUFDckUsT0FBTyxFQUFFLHdEQUF3RDtJQUNqRSxPQUFPLEVBQUUseURBQXlEO0lBQ2xFLE1BQU0sRUFBRSwyQkFBMkI7Q0FDdEMsQ0FBQSJ9 \ No newline at end of file diff --git a/packages/osrl/lib/net/sheets.d.ts b/packages/osrl/lib/net/sheets.d.ts new file mode 100644 index 00000000..e84fbffe --- /dev/null +++ b/packages/osrl/lib/net/sheets.d.ts @@ -0,0 +1,14 @@ +export declare const read: (sheet: string, range: string, credentialsFile?: string) => Promise; +export declare const download: (sheet: string, dst: string, credentialsFile?: string) => Promise; +/** + * Create an OAuth2 client with the given credentials, and then execute the + * given callback function. + * @param {Object} credentials The authorization client credentials. + * @param {function} callback The callback to call with the authorized client. + */ +/** + * Get and store new token after prompting for user authorization, and then + * execute the given callback with the authorized OAuth2 client. + * @param {google.auth.OAuth2} oAuth2Client The OAuth2 client to get token for. + * @param {getEventsCallback} callback The callback for the authorized client. + */ diff --git a/packages/osrl/lib/net/sheets.js b/packages/osrl/lib/net/sheets.js new file mode 100644 index 00000000..23211f6c --- /dev/null +++ b/packages/osrl/lib/net/sheets.js @@ -0,0 +1,182 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.download = exports.read = void 0; +const index_1 = require("../../index"); +const mime_1 = require("./mime"); +const strings_1 = require("@plastichub/core/strings"); +const osr_commons_1 = require("@plastichub/osr-commons"); +const fs = require("fs"); +const path = require("path"); +const read_1 = require("@plastichub/fs/read"); +const write_1 = require("@plastichub/fs/write"); +const exists_1 = require("@plastichub/fs/exists"); +const { authenticate } = require('@google-cloud/local-auth'); +const { google } = require('googleapis'); +// https://developers.google.com/sheets/api/quickstart/nodejs +// If modifying these scopes, delete token.json. +const SCOPES = ['https://www.googleapis.com/auth/spreadsheets.readonly', + 'https://www.googleapis.com/auth/drive.readonly']; +/** + * Reads previously authorized credentials from the save file. + * + * @return {Promise} + */ +function loadSavedCredentialsIfExist() { + return __awaiter(this, void 0, void 0, function* () { + try { + const tokenPath = path.resolve((0, strings_1.substitute)('${OSR_ROOT}/token.json', osr_commons_1.DEFAULT_ROOTS)); + const credentials = (0, read_1.sync)(tokenPath, 'json'); + return google.auth.fromJSON(credentials); + } + catch (err) { + return null; + } + }); +} +/** + * Serializes credentials to a file compatible with GoogleAUth.fromJSON. + * + * @param {OAuth2Client} client + * @return {Promise} + */ +function saveCredentials(client, credentialsFile = '${OSR_ROOT}/credentials.json') { + return __awaiter(this, void 0, void 0, function* () { + credentialsFile = path.resolve((0, strings_1.substitute)(credentialsFile, osr_commons_1.DEFAULT_ROOTS)); + const keys = (0, read_1.sync)(credentialsFile, 'json'); + const key = keys.installed || keys.web; + const payload = JSON.stringify({ + type: 'authorized_user', + client_id: key.client_id, + client_secret: key.client_secret, + refresh_token: client.credentials.refresh_token, + }); + const tokenPath = path.resolve((0, strings_1.substitute)('${OSR_ROOT}/token.json', osr_commons_1.DEFAULT_ROOTS)); + (0, write_1.sync)(tokenPath, payload); + }); +} +function authorize(credentialsFile = '${OSR_ROOT}/credentials.json') { + return __awaiter(this, void 0, void 0, function* () { + let client = yield loadSavedCredentialsIfExist(); + if (client) { + return client; + } + credentialsFile = path.resolve((0, strings_1.substitute)(credentialsFile, osr_commons_1.DEFAULT_ROOTS)); + client = yield authenticate({ + scopes: SCOPES, + keyfilePath: credentialsFile + }); + if (client.credentials) { + yield saveCredentials(client); + } + return client; + }); +} +const readSheet = (auth, sheet, range) => __awaiter(void 0, void 0, void 0, function* () { + const sheets = google.sheets({ version: 'v4', auth }); + const res = yield sheets.spreadsheets.values.get({ + spreadsheetId: sheet, + range: range, + }); + return res.data.values; +}); +const read = (sheet, range, credentialsFile = '${OSR_ROOT}/credentials.json') => __awaiter(void 0, void 0, void 0, function* () { + credentialsFile = path.resolve((0, strings_1.substitute)(credentialsFile, osr_commons_1.DEFAULT_ROOTS)); + if (!(0, exists_1.sync)(path.resolve(credentialsFile))) { + index_1.logger.error('Cant find credentials.json ', credentialsFile); + return Promise.reject(); + } + const client = yield authorize(credentialsFile); + const ret = yield readSheet(client, sheet, range); + return ret; +}); +exports.read = read; +const download = (sheet, dst, credentialsFile = '${OSR_ROOT}/credentials.json') => __awaiter(void 0, void 0, void 0, function* () { + credentialsFile = path.resolve((0, strings_1.substitute)(credentialsFile, osr_commons_1.DEFAULT_ROOTS)); + if (!(0, exists_1.sync)(path.resolve(credentialsFile))) { + index_1.logger.error('Cant find credentials.json ' + credentialsFile); + return; + } + const auth = yield authorize(credentialsFile); + google.options({ auth: auth }); + const dest = fs.createWriteStream(dst); + const drive = google.drive('v3'); + const res = yield drive.files.export({ + fileId: sheet, + mimeType: mime_1.mimes[path.parse(dst).ext] + }, { + responseType: 'stream' + }); + yield new Promise((resolve, reject) => { + res.data + .on('error', reject) + .pipe(dest) + .on('error', reject) + .on('finish', resolve); + }); +}); +exports.download = download; +/** + * Create an OAuth2 client with the given credentials, and then execute the + * given callback function. + * @param {Object} credentials The authorization client credentials. + * @param {function} callback The callback to call with the authorized client. + */ +/* +const authorize = async (credentials: any) => { + const { client_secret, client_id, redirect_uris } = credentials.installed; + const oAuth2Client = new google.auth.OAuth2(client_id, client_secret, redirect_uris[0]); + + const tokenPath = substitute('${OSR_ROOT}/token.json', DEFAULT_ROOTS); + const token = readFile(tokenPath, 'string') as string; + if (!token) { + return getNewToken(oAuth2Client); + } + + oAuth2Client.setCredentials(JSON.parse(token)); + return oAuth2Client; +} + +*/ +/** + * Get and store new token after prompting for user authorization, and then + * execute the given callback with the authorized OAuth2 client. + * @param {google.auth.OAuth2} oAuth2Client The OAuth2 client to get token for. + * @param {getEventsCallback} callback The callback for the authorized client. + */ +/* +const getNewToken = async (oAuth2Client: any) => { + + const authUrl = oAuth2Client.generateAuthUrl({ + access_type: 'offline', + scope: SCOPES, + }); + + logger.warn('Authorize this app by visiting this url:', authUrl); + + const rl = readline.createInterface({ + input: process.stdin, + output: process.stdout, + }); + + rl.question('Enter the code from that page here: ', (code) => { + rl.close(); + oAuth2Client.getToken(code, (err: any, token: any) => { + if (err) return console.error('Error while trying to retrieve access token', err); + oAuth2Client.setCredentials(token); + const tokenPath = substitute('${OSR_ROOT}/token.json', DEFAULT_ROOTS); + writeFile(tokenPath, JSON.stringify(token, null, 2)); + return oAuth2Client; + }); + }); +} +*/ +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hlZXRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xpYi9uZXQvc2hlZXRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQUNBLHVDQUFvQztBQUNwQyxpQ0FBK0I7QUFFL0Isc0RBQXFEO0FBQ3JELHlEQUF1RDtBQUd2RCx5QkFBeUI7QUFDekIsNkJBQTZCO0FBRTdCLDhDQUF1RDtBQUN2RCxnREFBeUQ7QUFDekQsa0RBQXVEO0FBRXZELE1BQU0sRUFBRSxZQUFZLEVBQUUsR0FBRyxPQUFPLENBQUMsMEJBQTBCLENBQUMsQ0FBQztBQUM3RCxNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDO0FBR3pDLDZEQUE2RDtBQUM3RCxnREFBZ0Q7QUFFaEQsTUFBTSxNQUFNLEdBQUcsQ0FBQyx1REFBdUQ7SUFDbkUsZ0RBQWdELENBQUMsQ0FBQztBQUV0RDs7OztHQUlHO0FBQ0gsU0FBZSwyQkFBMkI7O1FBRXRDLElBQUk7WUFDQSxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUEsb0JBQVUsRUFBQyx3QkFBd0IsRUFBRSwyQkFBYSxDQUFDLENBQUMsQ0FBQztZQUNwRixNQUFNLFdBQVcsR0FBRyxJQUFBLFdBQVEsRUFBQyxTQUFTLEVBQUUsTUFBTSxDQUFXLENBQUM7WUFDMUQsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQztTQUM1QztRQUFDLE9BQU8sR0FBRyxFQUFFO1lBQ1YsT0FBTyxJQUFJLENBQUM7U0FDZjtJQUNMLENBQUM7Q0FBQTtBQUVEOzs7OztHQUtHO0FBQ0gsU0FBZSxlQUFlLENBQUMsTUFBTSxFQUFFLGtCQUEwQiw4QkFBOEI7O1FBRTNGLGVBQWUsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUEsb0JBQVUsRUFBQyxlQUFlLEVBQUUsMkJBQWEsQ0FBQyxDQUFDLENBQUM7UUFFM0Us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 \ No newline at end of file diff --git a/packages/osrl/lib/primitives.d.ts b/packages/osrl/lib/primitives.d.ts new file mode 100644 index 00000000..45060ea2 --- /dev/null +++ b/packages/osrl/lib/primitives.d.ts @@ -0,0 +1,106 @@ +export declare function traverse(o: any, ctx: any, fn: (obj: any, prop: string, value: any) => void): void; +/** + * @returns whether the provided parameter is a JavaScript Array or not. + */ +export declare function isArray(array: any): array is any[]; +/** + * @returns whether the provided parameter is a JavaScript String or not. + */ +export declare function isString(str: any): str is string; +/** + * @returns whether the provided parameter is a JavaScript Array and each element in the array is a string. + */ +export declare function isStringArray(value: any): value is string[]; +/** + * + * @returns whether the provided parameter is of type `object` but **not** + * `null`, an `array`, a `regexp`, nor a `date`. + */ +export declare function isObject(obj: any): boolean; +/** + * In **contrast** to just checking `typeof` this will return `false` for `NaN`. + * @returns whether the provided parameter is a JavaScript Number or not. + */ +export declare function isNumber(obj: any): obj is number; +/** + * @returns whether the provided parameter is a JavaScript Boolean or not. + */ +export declare function isBoolean(obj: any): obj is boolean; +/** + * @returns whether the provided parameter is undefined. + */ +export declare function isUndefined(obj: any): boolean; +/** + * @returns whether the provided parameter is undefined or null. + */ +export declare function isUndefinedOrNull(obj: any): boolean; +/** + * @returns whether the provided parameter is an empty JavaScript Object or not. + */ +export declare function isEmptyObject(obj: any): obj is any; +/** + * @returns whether the provided parameter is a JavaScript Function or not. + */ +export declare function isFunction(obj: any): obj is Function; +/** + * @returns whether the provided parameters is are JavaScript Function or not. + */ +export declare function areFunctions(...objects: any[]): boolean; +export type TypeConstraint = string | Function; +export declare function validateConstraints(args: any[], constraints: TypeConstraint[]): void; +export declare function validateConstraint(arg: any, constraint: TypeConstraint): void; +/** + * Creates a new object of the provided class and will call the constructor with + * any additional argument supplied. + */ +export declare function create(ctor: Function, ...args: any[]): any; +export interface IFunction0 { + (): T; +} +export interface IFunction1 { + (a1: A1): T; +} +export interface IFunction2 { + (a1: A1, a2: A2): T; +} +export interface IFunction3 { + (a1: A1, a2: A2, a3: A3): T; +} +export interface IFunction4 { + (a1: A1, a2: A2, a3: A3, a4: A4): T; +} +export interface IFunction5 { + (a1: A1, a2: A2, a3: A3, a4: A4, a5: A5): T; +} +export interface IFunction6 { + (a1: A1, a2: A2, a3: A3, a4: A4, a5: A5, a6: A6): T; +} +export interface IFunction7 { + (a1: A1, a2: A2, a3: A3, a4: A4, a5: A5, a6: A6, a7: A7): T; +} +export interface IFunction8 { + (a1: A1, a2: A2, a3: A3, a4: A4, a5: A5, a6: A6, a7: A7, a8: A8): T; +} +export interface IAction0 extends IFunction0 { +} +export interface IAction1 extends IFunction1 { +} +export interface IAction2 extends IFunction2 { +} +export interface IAction3 extends IFunction3 { +} +export interface IAction4 extends IFunction4 { +} +export interface IAction5 extends IFunction5 { +} +export interface IAction6 extends IFunction6 { +} +export interface IAction7 extends IFunction7 { +} +export interface IAction8 extends IFunction8 { +} +export type NumberCallback = (index: number) => void; +export declare function count(to: number, callback: NumberCallback): void; +export declare function count(from: number, to: number, callback: NumberCallback): void; +export declare function countToArray(to: number): number[]; +export declare function countToArray(from: number, to: number): number[]; diff --git a/packages/osrl/lib/primitives.js b/packages/osrl/lib/primitives.js new file mode 100644 index 00000000..4d4a4933 --- /dev/null +++ b/packages/osrl/lib/primitives.js @@ -0,0 +1,199 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +'use strict'; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.countToArray = exports.count = exports.create = exports.validateConstraint = exports.validateConstraints = exports.areFunctions = exports.isFunction = exports.isEmptyObject = exports.isUndefinedOrNull = exports.isUndefined = exports.isBoolean = exports.isNumber = exports.isObject = exports.isStringArray = exports.isString = exports.isArray = exports.traverse = void 0; +const _typeof = { + number: 'number', + string: 'string', + undefined: 'undefined', + object: 'object', + function: 'function' +}; +function traverse(o, ctx, fn) { + for (const i in o) { + fn.apply(ctx, [o, i, o[i]]); + if (o[i] !== null && typeof (o[i]) === 'object') { + traverse(o[i], ctx, fn); + } + } +} +exports.traverse = traverse; +/** + * @returns whether the provided parameter is a JavaScript Array or not. + */ +function isArray(array) { + if (Array.isArray) { + return Array.isArray(array); + } + if (array && typeof (array.length) === _typeof.number && array.constructor === Array) { + return true; + } + return false; +} +exports.isArray = isArray; +/** + * @returns whether the provided parameter is a JavaScript String or not. + */ +function isString(str) { + if (typeof (str) === _typeof.string || str instanceof String) { + return true; + } + return false; +} +exports.isString = isString; +/** + * @returns whether the provided parameter is a JavaScript Array and each element in the array is a string. + */ +function isStringArray(value) { + return isArray(value) && value.every(elem => isString(elem)); +} +exports.isStringArray = isStringArray; +/** + * + * @returns whether the provided parameter is of type `object` but **not** + * `null`, an `array`, a `regexp`, nor a `date`. + */ +function isObject(obj) { + // The method can't do a type cast since there are type (like strings) which + // are subclasses of any put not positvely matched by the function. Hence type + // narrowing results in wrong results. + return typeof obj === _typeof.object + && obj !== null + && !Array.isArray(obj) + && !(obj instanceof RegExp) + && !(obj instanceof Date); +} +exports.isObject = isObject; +/** + * In **contrast** to just checking `typeof` this will return `false` for `NaN`. + * @returns whether the provided parameter is a JavaScript Number or not. + */ +function isNumber(obj) { + if ((typeof (obj) === _typeof.number || obj instanceof Number) && !isNaN(obj)) { + return true; + } + return false; +} +exports.isNumber = isNumber; +/** + * @returns whether the provided parameter is a JavaScript Boolean or not. + */ +function isBoolean(obj) { + return obj === true || obj === false; +} +exports.isBoolean = isBoolean; +/** + * @returns whether the provided parameter is undefined. + */ +function isUndefined(obj) { + return typeof (obj) === _typeof.undefined; +} +exports.isUndefined = isUndefined; +/** + * @returns whether the provided parameter is undefined or null. + */ +function isUndefinedOrNull(obj) { + return isUndefined(obj) || obj === null; +} +exports.isUndefinedOrNull = isUndefinedOrNull; +const hasOwnProperty = Object.prototype.hasOwnProperty; +/** + * @returns whether the provided parameter is an empty JavaScript Object or not. + */ +function isEmptyObject(obj) { + if (!isObject(obj)) { + return false; + } + for (let key in obj) { + if (hasOwnProperty.call(obj, key)) { + return false; + } + } + return true; +} +exports.isEmptyObject = isEmptyObject; +/** + * @returns whether the provided parameter is a JavaScript Function or not. + */ +function isFunction(obj) { + return typeof obj === _typeof.function; +} +exports.isFunction = isFunction; +/** + * @returns whether the provided parameters is are JavaScript Function or not. + */ +function areFunctions(...objects) { + return objects && objects.length > 0 && objects.every(isFunction); +} +exports.areFunctions = areFunctions; +function validateConstraints(args, constraints) { + const len = Math.min(args.length, constraints.length); + for (let i = 0; i < len; i++) { + validateConstraint(args[i], constraints[i]); + } +} +exports.validateConstraints = validateConstraints; +function validateConstraint(arg, constraint) { + if (isString(constraint)) { + if (typeof arg !== constraint) { + throw new Error(`argument does not match constraint: typeof ${constraint}`); + } + } + else if (isFunction(constraint)) { + if (arg instanceof constraint) { + return; + } + if (arg && arg.constructor === constraint) { + return; + } + if (constraint.length === 1 && constraint.call(undefined, arg) === true) { + return; + } + throw new Error(`argument does not match one of these constraints: arg instanceof constraint, arg.constructor === constraint, nor constraint(arg) === true`); + } +} +exports.validateConstraint = validateConstraint; +/** + * Creates a new object of the provided class and will call the constructor with + * any additional argument supplied. + */ +function create(ctor, ...args) { + let obj = Object.create(ctor.prototype); + ctor.apply(obj, args); + return obj; +} +exports.create = create; +function count(fromOrTo, toOrCallback, callback) { + var from, to; + if (isNumber(toOrCallback)) { + from = fromOrTo; + to = toOrCallback; + } + else { + from = 0; + to = fromOrTo; + callback = toOrCallback; + } + var op = from <= to ? (i) => i + 1 : (i) => i - 1; + var cmp = from <= to ? (a, b) => a < b : (a, b) => a > b; + for (var i = from; cmp(i, to); i = op(i)) { + callback(i); + } +} +exports.count = count; +function countToArray(fromOrTo, to) { + var result = []; + var fn = (i) => result.push(i); + if (isUndefined(to)) { + count(fromOrTo, fn); + } + else { + count(fromOrTo, to, fn); + } + return result; +} +exports.countToArray = countToArray; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJpbWl0aXZlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9saWIvcHJpbWl0aXZlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O2dHQUdnRztBQUNoRyxZQUFZLENBQUM7OztBQUViLE1BQU0sT0FBTyxHQUFHO0lBQ2YsTUFBTSxFQUFFLFFBQVE7SUFDaEIsTUFBTSxFQUFFLFFBQVE7SUFDaEIsU0FBUyxFQUFFLFdBQVc7SUFDdEIsTUFBTSxFQUFFLFFBQVE7SUFDaEIsUUFBUSxFQUFFLFVBQVU7Q0FDcEIsQ0FBQztBQUVGLFNBQWdCLFFBQVEsQ0FBQyxDQUFNLEVBQUUsR0FBRyxFQUFFLEVBQWdEO0lBQ3JGLEtBQUssTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFO1FBQ2xCLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzVCLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssUUFBUSxFQUFFO1lBQ2hELFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1NBQ3hCO0tBQ0Q7QUFDRixDQUFDO0FBUEQsNEJBT0M7QUFFRDs7R0FFRztBQUNILFNBQWdCLE9BQU8sQ0FBQyxLQUFVO0lBQ2pDLElBQUksS0FBSyxDQUFDLE9BQU8sRUFBRTtRQUNsQixPQUFPLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7S0FDNUI7SUFFRCxJQUFJLEtBQUssSUFBSSxPQUFPLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLE9BQU8sQ0FBQyxNQUFNLElBQUksS0FBSyxDQUFDLFdBQVcsS0FBSyxLQUFLLEVBQUU7UUFDckYsT0FBTyxJQUFJLENBQUM7S0FDWjtJQUVELE9BQU8sS0FBSyxDQUFDO0FBQ2QsQ0FBQztBQVZELDBCQVVDO0FBRUQ7O0dBRUc7QUFDSCxTQUFnQixRQUFRLENBQUMsR0FBUTtJQUNoQyxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxPQUFPLENBQUMsTUFBTSxJQUFJLEdBQUcsWUFBWSxNQUFNLEVBQUU7UUFDN0QsT0FBTyxJQUFJLENBQUM7S0FDWjtJQUVELE9BQU8sS0FBSyxDQUFDO0FBQ2QsQ0FBQztBQU5ELDRCQU1DO0FBRUQ7O0dBRUc7QUFDSCxTQUFnQixhQUFhLENBQUMsS0FBVTtJQUN2QyxPQUFPLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBWSxLQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDdkUsQ0FBQztBQUZELHNDQUVDO0FBRUQ7Ozs7R0FJRztBQUNILFNBQWdCLFFBQVEsQ0FBQyxHQUFRO0lBQ2hDLDRFQUE0RTtJQUM1RSw4RUFBOEU7SUFDOUUsc0NBQXNDO0lBQ3RDLE9BQU8sT0FBTyxHQUFHLEtBQUssT0FBTyxDQUFDLE1BQU07V0FDaEMsR0FBRyxLQUFLLElBQUk7V0FDWixDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDO1dBQ25CLENBQUMsQ0FBQyxHQUFHLFlBQVksTUFBTSxDQUFDO1dBQ3hCLENBQUMsQ0FBQyxHQUFHLFlBQVksSUFBSSxDQUFDLENBQUM7QUFDNUIsQ0FBQztBQVRELDRCQVNDO0FBRUQ7OztHQUdHO0FBQ0gsU0FBZ0IsUUFBUSxDQUFDLEdBQVE7SUFDaEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxPQUFPLENBQUMsTUFBTSxJQUFJLEdBQUcsWUFBWSxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRTtRQUM5RSxPQUFPLElBQUksQ0FBQztLQUNaO0lBRUQsT0FBTyxLQUFLLENBQUM7QUFDZCxDQUFDO0FBTkQsNEJBTUM7QUFFRDs7R0FFRztBQUNILFNBQWdCLFNBQVMsQ0FBQyxHQUFRO0lBQ2pDLE9BQU8sR0FBRyxLQUFLLElBQUksSUFBSSxHQUFHLEtBQUssS0FBSyxDQUFDO0FBQ3RDLENBQUM7QUFGRCw4QkFFQztBQUVEOztHQUVHO0FBQ0gsU0FBZ0IsV0FBVyxDQUFDLEdBQVE7SUFDbkMsT0FBTyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssT0FBTyxDQUFDLFNBQVMsQ0FBQztBQUMzQyxDQUFDO0FBRkQsa0NBRUM7QUFFRDs7R0FFRztBQUNILFNBQWdCLGlCQUFpQixDQUFDLEdBQVE7SUFDekMsT0FBTyxXQUFXLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxLQUFLLElBQUksQ0FBQztBQUN6QyxDQUFDO0FBRkQsOENBRUM7QUFHRCxNQUFNLGNBQWMsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQztBQUV2RDs7R0FFRztBQUNILFNBQWdCLGFBQWEsQ0FBQyxHQUFRO0lBQ3JDLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUU7UUFDbkIsT0FBTyxLQUFLLENBQUM7S0FDYjtJQUVELEtBQUssSUFBSSxHQUFHLElBQUksR0FBRyxFQUFFO1FBQ3BCLElBQUksY0FBYyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUU7WUFDbEMsT0FBTyxLQUFLLENBQUM7U0FDYjtLQUNEO0lBRUQsT0FBTyxJQUFJLENBQUM7QUFDYixDQUFDO0FBWkQsc0NBWUM7QUFFRDs7R0FFRztBQUNILFNBQWdCLFVBQVUsQ0FBQyxHQUFRO0lBQ2xDLE9BQU8sT0FBTyxHQUFHLEtBQUssT0FBTyxDQUFDLFFBQVEsQ0FBQztBQUN4QyxDQUFDO0FBRkQsZ0NBRUM7QUFFRDs7R0FFRztBQUNILFNBQWdCLFlBQVksQ0FBQyxHQUFHLE9BQWM7SUFDN0MsT0FBTyxPQUFPLElBQUksT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksT0FBTyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUNuRSxDQUFDO0FBRkQsb0NBRUM7QUFJRCxTQUFnQixtQkFBbUIsQ0FBQyxJQUFXLEVBQUUsV0FBNkI7SUFDN0UsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN0RCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQzdCLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUM1QztBQUNGLENBQUM7QUFMRCxrREFLQztBQUVELFNBQWdCLGtCQUFrQixDQUFDLEdBQVEsRUFBRSxVQUEwQjtJQUV0RSxJQUFJLFFBQVEsQ0FBQyxVQUFVLENBQUMsRUFBRTtRQUN6QixJQUFJLE9BQU8sR0FBRyxLQUFLLFVBQVUsRUFBRTtZQUM5QixNQUFNLElBQUksS0FBSyxDQUFDLDhDQUE4QyxVQUFVLEVBQUUsQ0FBQyxDQUFDO1NBQzVFO0tBQ0Q7U0FBTSxJQUFJLFVBQVUsQ0FBQyxVQUFVLENBQUMsRUFBRTtRQUNsQyxJQUFJLEdBQUcsWUFBWSxVQUFVLEVBQUU7WUFDOUIsT0FBTztTQUNQO1FBQ0QsSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLFdBQVcsS0FBSyxVQUFVLEVBQUU7WUFDMUMsT0FBTztTQUNQO1FBQ0QsSUFBSSxVQUFVLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxHQUFHLENBQUMsS0FBSyxJQUFJLEVBQUU7WUFDeEUsT0FBTztTQUNQO1FBQ0QsTUFBTSxJQUFJLEtBQUssQ0FBQywySUFBMkksQ0FBQyxDQUFDO0tBQzdKO0FBQ0YsQ0FBQztBQWxCRCxnREFrQkM7QUFFRDs7O0dBR0c7QUFDSCxTQUFnQixNQUFNLENBQUMsSUFBYyxFQUFFLEdBQUcsSUFBVztJQUNwRCxJQUFJLEdBQUcsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUN4QyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUV0QixPQUFPLEdBQUcsQ0FBQztBQUNaLENBQUM7QUFMRCx3QkFLQztBQTRDRCxTQUFnQixLQUFLLENBQUMsUUFBZ0IsRUFBRSxZQUFzQyxFQUFFLFFBQXlCO0lBQ3hHLElBQUksSUFBWSxFQUFFLEVBQVUsQ0FBQztJQUU3QixJQUFJLFFBQVEsQ0FBQyxZQUFZLENBQUMsRUFBRTtRQUMzQixJQUFJLEdBQUcsUUFBUSxDQUFDO1FBQ2hCLEVBQUUsR0FBVyxZQUFZLENBQUM7S0FDMUI7U0FBTTtRQUNOLElBQUksR0FBRyxDQUFDLENBQUM7UUFDVCxFQUFFLEdBQUcsUUFBUSxDQUFDO1FBQ2QsUUFBUSxHQUFtQixZQUFZLENBQUM7S0FDeEM7SUFFRCxJQUFJLEVBQUUsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFTLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbEUsSUFBSSxHQUFHLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFTLEVBQUUsQ0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQVMsRUFBRSxDQUFTLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFFekYsS0FBSyxJQUFJLENBQUMsR0FBRyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFO1FBQ3pDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUNaO0FBQ0YsQ0FBQztBQWxCRCxzQkFrQkM7QUFJRCxTQUFnQixZQUFZLENBQUMsUUFBZ0IsRUFBRSxFQUFXO0lBQ3pELElBQUksTUFBTSxHQUFhLEVBQUUsQ0FBQztJQUMxQixJQUFJLEVBQUUsR0FBRyxDQUFDLENBQVMsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUV2QyxJQUFJLFdBQVcsQ0FBQyxFQUFFLENBQUMsRUFBRTtRQUNwQixLQUFLLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0tBQ3BCO1NBQU07UUFDTixLQUFLLENBQUMsUUFBUSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztLQUN4QjtJQUVELE9BQU8sTUFBTSxDQUFDO0FBQ2YsQ0FBQztBQVhELG9DQVdDIn0= \ No newline at end of file diff --git a/packages/osrl/library.d.ts b/packages/osrl/library.d.ts new file mode 100644 index 00000000..3b1dd5ae --- /dev/null +++ b/packages/osrl/library.d.ts @@ -0,0 +1,5 @@ +export * from './liquid'; +export * from './Engine'; +export * from './options'; +export { getContext } from './Engine'; +export * from './constants'; diff --git a/packages/osrl/library.js b/packages/osrl/library.js new file mode 100644 index 00000000..d1906bc6 --- /dev/null +++ b/packages/osrl/library.js @@ -0,0 +1,24 @@ +"use strict"; +var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { enumerable: true, get: function() { return m[k]; } }; + } + Object.defineProperty(o, k2, desc); +}) : (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +})); +var __exportStar = (this && this.__exportStar) || function(m, exports) { + for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.getContext = void 0; +__exportStar(require("./liquid"), exports); +__exportStar(require("./Engine"), exports); +__exportStar(require("./options"), exports); +var Engine_1 = require("./Engine"); +Object.defineProperty(exports, "getContext", { enumerable: true, get: function () { return Engine_1.getContext; } }); +__exportStar(require("./constants"), exports); +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlicmFyeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInNyYy9saWJyYXJ5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsMkNBQXdCO0FBQ3hCLDJDQUF3QjtBQUN4Qiw0Q0FBeUI7QUFDekIsbUNBQXFDO0FBQTVCLG9HQUFBLFVBQVUsT0FBQTtBQUNuQiw4Q0FBMkIifQ== \ No newline at end of file diff --git a/packages/osrl/liquid/index.d.ts b/packages/osrl/liquid/index.d.ts new file mode 100644 index 00000000..7e527322 --- /dev/null +++ b/packages/osrl/liquid/index.d.ts @@ -0,0 +1,14 @@ +import { Liquid } from '../liquidjs/liquid'; +import { IOptions } from '../types'; +export { sync as dir } from '@plastichub/fs/dir'; +export declare const engine: (options: any) => Liquid; +export declare const engineDefault: (options: any) => Liquid; +/** + * + * @param string + * @param vars + * @param options + * @see https://liquidjs.com/tags/overview.html + * @returns + */ +export declare function parseText(string: string, vars: any, iterations?: number, options?: IOptions): Promise; diff --git a/packages/osrl/liquid/index.js b/packages/osrl/liquid/index.js new file mode 100644 index 00000000..a6a65eac --- /dev/null +++ b/packages/osrl/liquid/index.js @@ -0,0 +1,54 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.parseText = exports.engineDefault = exports.engine = exports.dir = void 0; +const fs_1 = require("../fs"); +const liquid_1 = require("../liquidjs/liquid"); +var dir_1 = require("@plastichub/fs/dir"); +Object.defineProperty(exports, "dir", { enumerable: true, get: function () { return dir_1.sync; } }); +const engine = (options) => { + const engine = new liquid_1.Liquid(options); + return engine; +}; +exports.engine = engine; +const engineDefault = (options) => { + const delimitters = options.language === 'osr' ? + { + tagDelimiterLeft: '[%', + tagDelimiterRight: '%]', + outputDelimiterLeft: '[[', + outputDelimiterRight: ']]' + } : {}; + const lOptions = Object.assign(Object.assign({ keepOutputType: true, trimOutputRight: false, trimOutputLeft: false, trimTagRight: false, trimTagLeft: false, greedy: false, cache: false }, options), delimitters); + return new liquid_1.Liquid(lOptions); +}; +exports.engineDefault = engineDefault; +/** + * + * @param string + * @param vars + * @param options + * @see https://liquidjs.com/tags/overview.html + * @returns + */ +function parseText(string, vars, iterations = 5, options = null) { + return __awaiter(this, void 0, void 0, function* () { + const l = (0, exports.engine)(options); + options = Object.assign({ fs: (0, fs_1.defaultFS)(options.resolve) }, options); + let t = yield l.parseAndRender(string, vars, options); + for (let i = 0; i < iterations; i++) { + t = yield l.parseAndRender(t, vars, options); + } + return t; + }); +} +exports.parseText = parseText; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvbGlxdWlkL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQUFBLDhCQUFpQztBQUNqQywrQ0FBMkM7QUFJM0MsMENBQWdEO0FBQXZDLDBGQUFBLElBQUksT0FBTztBQUViLE1BQU0sTUFBTSxHQUFHLENBQUMsT0FBTyxFQUFFLEVBQUU7SUFDOUIsTUFBTSxNQUFNLEdBQUcsSUFBSSxlQUFNLENBQUMsT0FBTyxDQUFDLENBQUE7SUFDbEMsT0FBTyxNQUFNLENBQUE7QUFDakIsQ0FBQyxDQUFBO0FBSFksUUFBQSxNQUFNLFVBR2xCO0FBRU0sTUFBTSxhQUFhLEdBQUcsQ0FBQyxPQUFPLEVBQUUsRUFBRTtJQUNyQyxNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMsUUFBUSxLQUFLLEtBQUssQ0FBQyxDQUFDO1FBQzVDO1lBQ0ksZ0JBQWdCLEVBQUUsSUFBSTtZQUN0QixpQkFBaUIsRUFBRSxJQUFJO1lBQ3ZCLG1CQUFtQixFQUFFLElBQUk7WUFDekIsb0JBQW9CLEVBQUUsSUFBSTtTQUM3QixDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUE7SUFFVixNQUFNLFFBQVEsaUNBQ1YsY0FBYyxFQUFFLElBQUksRUFDcEIsZUFBZSxFQUFFLEtBQUssRUFDdEIsY0FBYyxFQUFFLEtBQUssRUFDckIsWUFBWSxFQUFFLEtBQUssRUFDbkIsV0FBVyxFQUFFLEtBQUssRUFDbEIsTUFBTSxFQUFFLEtBQUssRUFDYixLQUFLLEVBQUUsS0FBSyxJQUNULE9BQU8sR0FDUCxXQUFXLENBQ2pCLENBQUM7SUFDRixPQUFPLElBQUksZUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFBO0FBQy9CLENBQUMsQ0FBQTtBQXJCWSxRQUFBLGFBQWEsaUJBcUJ6QjtBQUNEOzs7Ozs7O0dBT0c7QUFDSCxTQUFzQixTQUFTLENBQUMsTUFBYyxFQUFFLElBQVMsRUFBRSxhQUFxQixDQUFDLEVBQUUsVUFBb0IsSUFBSTs7UUFDdkcsTUFBTSxDQUFDLEdBQUcsSUFBQSxjQUFNLEVBQUMsT0FBTyxDQUFDLENBQUE7UUFDekIsT0FBTyxHQUFHLGdCQUNOLEVBQUUsRUFBRSxJQUFBLGNBQVMsRUFBQyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQzNCLE9BQU8sQ0FDTixDQUFDO1FBQ1QsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsY0FBYyxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsT0FBYyxDQUFDLENBQUM7UUFDN0QsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFVBQVUsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUNqQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsY0FBYyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsT0FBYyxDQUFDLENBQUM7U0FDdkQ7UUFDRCxPQUFPLENBQUMsQ0FBQztJQUNiLENBQUM7Q0FBQTtBQVhELDhCQVdDIn0= \ No newline at end of file diff --git a/packages/osrl/liquid/parser.d.ts b/packages/osrl/liquid/parser.d.ts new file mode 100644 index 00000000..ae283bc0 --- /dev/null +++ b/packages/osrl/liquid/parser.d.ts @@ -0,0 +1,2 @@ +export declare const toValue: (val: any) => any; +export declare const toVariables: (parse: any) => any; diff --git a/packages/osrl/liquid/parser.js b/packages/osrl/liquid/parser.js new file mode 100644 index 00000000..68567dc7 --- /dev/null +++ b/packages/osrl/liquid/parser.js @@ -0,0 +1,32 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.toVariables = exports.toValue = void 0; +const toValue = (val) => { + const _float = parseFloat(val); + if (!isNaN(_float)) { + return _float; + } + if (val === 'true' || val === true) { + return true; + } + if (val === 'false' || val === false) { + return false; + } + return val; +}; +exports.toValue = toValue; +const toVariables = (parse) => { + return parse.filter((e) => e.name === 'assign').map((t) => { + return { + key: t.impl.key, + value: (0, exports.toValue)(('' + t.impl.value).trim()), + }; + }).concat(parse.filter((e) => e.name === 'capture').map((t) => { + return { + key: t.impl.variable, + value: (0, exports.toValue)(('' + t.impl.templates[0].str).trim()), + }; + })); +}; +exports.toVariables = toVariables; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyc2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2xpcXVpZC9wYXJzZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ08sTUFBTSxPQUFPLEdBQUcsQ0FBQyxHQUFHLEVBQUUsRUFBRTtJQUM5QixNQUFNLE1BQU0sR0FBRyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDL0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBRTtRQUNuQixPQUFPLE1BQU0sQ0FBQztLQUNkO0lBQ0QsSUFBSSxHQUFHLEtBQUssTUFBTSxJQUFJLEdBQUcsS0FBSyxJQUFJLEVBQUU7UUFDbkMsT0FBTyxJQUFJLENBQUM7S0FDWjtJQUNELElBQUksR0FBRyxLQUFLLE9BQU8sSUFBSSxHQUFHLEtBQUssS0FBSyxFQUFFO1FBQ3JDLE9BQU8sS0FBSyxDQUFDO0tBQ2I7SUFDRCxPQUFPLEdBQUcsQ0FBQztBQUNaLENBQUMsQ0FBQTtBQVpZLFFBQUEsT0FBTyxXQVluQjtBQUVNLE1BQU0sV0FBVyxHQUFHLENBQUMsS0FBSyxFQUFFLEVBQUU7SUFDakMsT0FBTyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLFFBQVEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO1FBQ3RELE9BQU87WUFDSCxHQUFHLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHO1lBQ2YsS0FBSyxFQUFFLElBQUEsZUFBTyxFQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7U0FDN0MsQ0FBQTtJQUNMLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLFNBQVMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO1FBQzFELE9BQU87WUFDSCxHQUFHLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRO1lBQ3BCLEtBQUssRUFBRSxJQUFBLGVBQU8sRUFBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztTQUN4RCxDQUFBO0lBQ0wsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNSLENBQUMsQ0FBQTtBQVpZLFFBQUEsV0FBVyxlQVl2QiJ9 \ No newline at end of file diff --git a/packages/osrl/liquid/underscore.d.ts b/packages/osrl/liquid/underscore.d.ts new file mode 100644 index 00000000..ea2b7abc --- /dev/null +++ b/packages/osrl/liquid/underscore.d.ts @@ -0,0 +1,27 @@ +export declare function isString(value: any): value is string; +export declare function isFunction(value: any): value is Function; +export declare function promisify(fn: (arg1: T1, cb: (err: Error | null, result: T2) => void) => void): (arg1: T1) => Promise; +export declare function promisify(fn: (arg1: T1, arg2: T2, cb: (err: Error | null, result: T3) => void) => void): (arg1: T1, arg2: T2) => Promise; +export declare function isNumber(value: any): value is number; +export declare function toLiquid(value: any): any; +export declare function isNil(value: any): boolean; +export declare function isArray(value: any): value is any[]; +export declare function forOwn(object: { + [key: string]: T; +} | undefined, iteratee: ((val: T, key: string, obj: { + [key: string]: T; +}) => boolean | void)): { + [key: string]: T; +}; +export declare function last(arr: T[]): T; +export declare function last(arr: string): string; +export declare function isObject(value: any): value is object; +export declare function range(start: number, stop: number, step?: number): number[]; +export declare function padStart(str: any, length: number, ch?: string): any; +export declare function padEnd(str: any, length: number, ch?: string): any; +export declare function pad(str: any, length: number, ch: string, add: (str: string, ch: string) => string): any; +export declare function identify(val: T): T; +export declare function snakeCase(str: string): string; +export declare function changeCase(str: string): string; +export declare function ellipsis(str: string, N: number): string; +export declare function caseInsensitiveCompare(a: any, b: any): 0 | 1 | -1; diff --git a/packages/osrl/liquid/underscore.js b/packages/osrl/liquid/underscore.js new file mode 100644 index 00000000..f9119f3d --- /dev/null +++ b/packages/osrl/liquid/underscore.js @@ -0,0 +1,140 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.caseInsensitiveCompare = exports.ellipsis = exports.changeCase = exports.snakeCase = exports.identify = exports.pad = exports.padEnd = exports.padStart = exports.range = exports.isObject = exports.last = exports.forOwn = exports.isArray = exports.isNil = exports.toLiquid = exports.isNumber = exports.promisify = exports.isFunction = exports.isString = void 0; +const toStr = Object.prototype.toString; +const toLowerCase = String.prototype.toLowerCase; +/* + * Checks if value is classified as a String primitive or object. + * @param {any} value The value to check. + * @return {Boolean} Returns true if value is a string, else false. + */ +function isString(value) { + return toStr.call(value) === '[object String]'; +} +exports.isString = isString; +function isFunction(value) { + return typeof value === 'function'; +} +exports.isFunction = isFunction; +function promisify(fn) { + return function (...args) { + return new Promise((resolve, reject) => { + fn(...args, (err, result) => { + err ? reject(err) : resolve(result); + }); + }); + }; +} +exports.promisify = promisify; +function isNumber(value) { + return typeof value === 'number'; +} +exports.isNumber = isNumber; +function toLiquid(value) { + if (value && isFunction(value.toLiquid)) + return toLiquid(value.toLiquid()); + return value; +} +exports.toLiquid = toLiquid; +function isNil(value) { + return value === null || value === undefined; +} +exports.isNil = isNil; +function isArray(value) { + // be compatible with IE 8 + return toStr.call(value) === '[object Array]'; +} +exports.isArray = isArray; +/* + * Iterates over own enumerable string keyed properties of an object and invokes iteratee for each property. + * The iteratee is invoked with three arguments: (value, key, object). + * Iteratee functions may exit iteration early by explicitly returning false. + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @return {Object} Returns object. + */ +function forOwn(object, iteratee) { + object = object || {}; + for (const k in object) { + if (object.hasOwnProperty(k)) { + if (iteratee(object[k], k, object) === false) + break; + } + } + return object; +} +exports.forOwn = forOwn; +function last(arr) { + return arr[arr.length - 1]; +} +exports.last = last; +/* + * Checks if value is the language type of Object. + * (e.g. arrays, functions, objects, regexes, new Number(0), and new String('')) + * @param {any} value The value to check. + * @return {Boolean} Returns true if value is an object, else false. + */ +function isObject(value) { + const type = typeof value; + return value !== null && (type === 'object' || type === 'function'); +} +exports.isObject = isObject; +function range(start, stop, step = 1) { + const arr = []; + for (let i = start; i < stop; i += step) { + arr.push(i); + } + return arr; +} +exports.range = range; +function padStart(str, length, ch = ' ') { + return pad(str, length, ch, (str, ch) => ch + str); +} +exports.padStart = padStart; +function padEnd(str, length, ch = ' ') { + return pad(str, length, ch, (str, ch) => str + ch); +} +exports.padEnd = padEnd; +function pad(str, length, ch, add) { + str = String(str); + let n = length - str.length; + while (n-- > 0) + str = add(str, ch); + return str; +} +exports.pad = pad; +function identify(val) { + return val; +} +exports.identify = identify; +function snakeCase(str) { + return str.replace(/(\w?)([A-Z])/g, (_, a, b) => (a ? a + '_' : '') + b.toLowerCase()); +} +exports.snakeCase = snakeCase; +function changeCase(str) { + const hasLowerCase = [...str].some(ch => ch >= 'a' && ch <= 'z'); + return hasLowerCase ? str.toUpperCase() : str.toLowerCase(); +} +exports.changeCase = changeCase; +function ellipsis(str, N) { + return str.length > N ? str.substr(0, N - 3) + '...' : str; +} +exports.ellipsis = ellipsis; +// compare string in case-insensitive way, undefined values to the tail +function caseInsensitiveCompare(a, b) { + if (a == null && b == null) + return 0; + if (a == null) + return 1; + if (b == null) + return -1; + a = toLowerCase.call(a); + b = toLowerCase.call(b); + if (a < b) + return -1; + if (a > b) + return 1; + return 0; +} +exports.caseInsensitiveCompare = caseInsensitiveCompare; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW5kZXJzY29yZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9saXF1aWQvdW5kZXJzY29yZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQTtBQUN2QyxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQTtBQUVoRDs7OztHQUlHO0FBQ0gsU0FBZ0IsUUFBUSxDQUFFLEtBQVU7SUFDbEMsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLGlCQUFpQixDQUFBO0FBQ2hELENBQUM7QUFGRCw0QkFFQztBQUVELFNBQWdCLFVBQVUsQ0FBRSxLQUFVO0lBQ3BDLE9BQU8sT0FBTyxLQUFLLEtBQUssVUFBVSxDQUFBO0FBQ3BDLENBQUM7QUFGRCxnQ0FFQztBQUlELFNBQWdCLFNBQVMsQ0FBRSxFQUFPO0lBQ2hDLE9BQU8sVUFBVSxHQUFHLElBQVc7UUFDN0IsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtZQUNyQyxFQUFFLENBQUMsR0FBRyxJQUFJLEVBQUUsQ0FBQyxHQUFVLEVBQUUsTUFBVyxFQUFFLEVBQUU7Z0JBQ3RDLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUE7WUFDckMsQ0FBQyxDQUFDLENBQUE7UUFDSixDQUFDLENBQUMsQ0FBQTtJQUNKLENBQUMsQ0FBQTtBQUNILENBQUM7QUFSRCw4QkFRQztBQUVELFNBQWdCLFFBQVEsQ0FBRSxLQUFVO0lBQ2xDLE9BQU8sT0FBTyxLQUFLLEtBQUssUUFBUSxDQUFBO0FBQ2xDLENBQUM7QUFGRCw0QkFFQztBQUVELFNBQWdCLFFBQVEsQ0FBRSxLQUFVO0lBQ2xDLElBQUksS0FBSyxJQUFJLFVBQVUsQ0FBQyxL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 \ No newline at end of file diff --git a/packages/osrl/liquidjs/builtin/filters/array.d.ts b/packages/osrl/liquidjs/builtin/filters/array.d.ts new file mode 100644 index 00000000..05bbe64a --- /dev/null +++ b/packages/osrl/liquidjs/builtin/filters/array.d.ts @@ -0,0 +1,15 @@ +import { FilterImpl } from '../../template/filter/filter-impl'; +import { Scope } from '../../context/scope'; +export declare const join: (v: any[], arg: string) => any; +export declare const last: (v: any) => any; +export declare const first: (v: any) => any; +export declare const reverse: (v: any[]) => any; +export declare function sort(this: FilterImpl, arr: T[], property?: string): any[]; +export declare function sortNatural(input: T[], property?: string): any[]; +export declare const size: (v: string | any[]) => number; +export declare function map(this: FilterImpl, arr: Scope[], property: string): object[]; +export declare function compact(this: FilterImpl, arr: T[]): any[]; +export declare function concat(v: T1[], arg?: T2[]): (T1 | T2)[]; +export declare function slice(v: T[] | string, begin: number, length?: number): T[] | string; +export declare function where(this: FilterImpl, arr: T[], property: string, expected?: any): T[]; +export declare function uniq(arr: T[]): T[]; diff --git a/packages/osrl/liquidjs/builtin/filters/array.js b/packages/osrl/liquidjs/builtin/filters/array.js new file mode 100644 index 00000000..c55bcc63 --- /dev/null +++ b/packages/osrl/liquidjs/builtin/filters/array.js @@ -0,0 +1,82 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.uniq = exports.where = exports.slice = exports.concat = exports.compact = exports.map = exports.size = exports.sortNatural = exports.sort = exports.reverse = exports.first = exports.last = exports.join = void 0; +const underscore_1 = require("../../util/underscore"); +const collection_1 = require("../../util/collection"); +const boolean_1 = require("../../render/boolean"); +const comparable_1 = require("../../drop/comparable"); +exports.join = (0, underscore_1.argumentsToValue)((v, arg) => (0, collection_1.toArray)(v).join(arg === undefined ? ' ' : arg)); +exports.last = (0, underscore_1.argumentsToValue)((v) => (0, underscore_1.isArray)(v) ? (0, underscore_1.last)(v) : ''); +exports.first = (0, underscore_1.argumentsToValue)((v) => (0, underscore_1.isArray)(v) ? v[0] : ''); +exports.reverse = (0, underscore_1.argumentsToValue)((v) => [...(0, collection_1.toArray)(v)].reverse()); +function sort(arr, property) { + arr = (0, underscore_1.toValue)(arr); + const getValue = (obj) => property ? this.context.getFromScope(obj, (0, underscore_1.stringify)(property).split('.')) : obj; + return [...(0, collection_1.toArray)(arr)].sort((lhs, rhs) => { + lhs = getValue(lhs); + rhs = getValue(rhs); + return lhs < rhs ? -1 : (lhs > rhs ? 1 : 0); + }); +} +exports.sort = sort; +function sortNatural(input, property) { + input = (0, underscore_1.toValue)(input); + const propertyString = (0, underscore_1.stringify)(property); + const compare = property === undefined + ? underscore_1.caseInsensitiveCompare + : (lhs, rhs) => (0, underscore_1.caseInsensitiveCompare)(lhs[propertyString], rhs[propertyString]); + return [...(0, collection_1.toArray)(input)].sort(compare); +} +exports.sortNatural = sortNatural; +const size = (v) => (v && v.length) || 0; +exports.size = size; +function map(arr, property) { + arr = (0, underscore_1.toValue)(arr); + return (0, collection_1.toArray)(arr).map(obj => this.context.getFromScope(obj, (0, underscore_1.stringify)(property).split('.'))); +} +exports.map = map; +function compact(arr) { + arr = (0, underscore_1.toValue)(arr); + return (0, collection_1.toArray)(arr).filter(x => !(0, underscore_1.isNil)((0, underscore_1.toValue)(x))); +} +exports.compact = compact; +function concat(v, arg = []) { + v = (0, underscore_1.toValue)(v); + arg = (0, collection_1.toArray)(arg).map(v => (0, underscore_1.toValue)(v)); + return (0, collection_1.toArray)(v).concat(arg); +} +exports.concat = concat; +function slice(v, begin, length = 1) { + v = (0, underscore_1.toValue)(v); + if ((0, underscore_1.isNil)(v)) + return []; + if (!(0, underscore_1.isArray)(v)) + v = (0, underscore_1.stringify)(v); + begin = begin < 0 ? v.length + begin : begin; + return v.slice(begin, begin + length); +} +exports.slice = slice; +function where(arr, property, expected) { + arr = (0, underscore_1.toValue)(arr); + return (0, collection_1.toArray)(arr).filter(obj => { + const value = this.context.getFromScope(obj, (0, underscore_1.stringify)(property).split('.')); + if (expected === undefined) + return (0, boolean_1.isTruthy)(value, this.context); + if ((0, comparable_1.isComparable)(expected)) + return expected.equals(value); + return value === expected; + }); +} +exports.where = where; +function uniq(arr) { + arr = (0, underscore_1.toValue)(arr); + const u = {}; + return (arr || []).filter(val => { + if (underscore_1.hasOwnProperty.call(u, String(val))) + return false; + u[String(val)] = true; + return true; + }); +} +exports.uniq = uniq; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJyYXkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGlxdWlkanMvYnVpbHRpbi9maWx0ZXJzL2FycmF5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHNEQUF1SjtBQUN2SixzREFBK0M7QUFDL0Msa0RBQStDO0FBRy9DLHNEQUFvRDtBQUV2QyxRQUFBLElBQUksR0FBRyxJQUFBLDZCQUFnQixFQUFDLENBQUMsQ0FBUSxFQUFFLEdBQVcsRUFBRSxFQUFFLENBQUMsSUFBQSxvQkFBTyxFQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUE7QUFDbEcsUUFBQSxJQUFJLEdBQUcsSUFBQSw2QkFBZ0IsRUFBQyxDQUFDLENBQU0sRUFBRSxFQUFFLENBQUMsSUFBQSxvQkFBTyxFQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFBLGlCQUFTLEVBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFBO0FBQ25FLFFBQUEsS0FBSyxHQUFHLElBQUEsNkJBQWdCLEVBQUMsQ0FBQyxDQUFNLEVBQUUsRUFBRSxDQUFDLElBQUEsb0JBQU8sRUFBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQTtBQUM1RCxRQUFBLE9BQU8sR0FBRyxJQUFBLDZCQUFnQixFQUFDLENBQUMsQ0FBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBQSxvQkFBTyxFQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQTtBQUVoRixTQUFnQixJQUFJLENBQXVCLEdBQVEsRUFBRSxRQUFpQjtJQUNwRSxHQUFHLEdBQUcsSUFBQSxvQkFBTyxFQUFDLEdBQUcsQ0FBQyxDQUFBO0lB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 \ No newline at end of file diff --git a/packages/osrl/liquidjs/builtin/filters/date.d.ts b/packages/osrl/liquidjs/builtin/filters/date.d.ts new file mode 100644 index 00000000..35f4155b --- /dev/null +++ b/packages/osrl/liquidjs/builtin/filters/date.d.ts @@ -0,0 +1,2 @@ +import { FilterImpl } from '../../template/filter/filter-impl'; +export declare function date(this: FilterImpl, v: string | Date, arg: string): string | Date; diff --git a/packages/osrl/liquidjs/builtin/filters/date.js b/packages/osrl/liquidjs/builtin/filters/date.js new file mode 100644 index 00000000..051cbf19 --- /dev/null +++ b/packages/osrl/liquidjs/builtin/filters/date.js @@ -0,0 +1,43 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.date = void 0; +const strftime_1 = require("../../util/strftime"); +const underscore_1 = require("../../util/underscore"); +const timezone_date_1 = require("../../util/timezone-date"); +function date(v, arg) { + const opts = this.context.opts; + let date; + v = (0, underscore_1.toValue)(v); + arg = (0, underscore_1.stringify)(arg); + if (v === 'now' || v === 'today') { + date = new Date(); + } + else if ((0, underscore_1.isNumber)(v)) { + date = new Date(v * 1000); + } + else if ((0, underscore_1.isString)(v)) { + if (/^\d+$/.test(v)) { + date = new Date(+v * 1000); + } + else if (opts.preserveTimezones) { + date = timezone_date_1.TimezoneDate.createDateFixedToTimezone(v); + } + else { + date = new Date(v); + } + } + else { + date = v; + } + if (!isValidDate(date)) + return v; + if (opts.hasOwnProperty('timezoneOffset')) { + date = new timezone_date_1.TimezoneDate(date, opts.timezoneOffset); + } + return (0, strftime_1.default)(date, arg); +} +exports.date = date; +function isValidDate(date) { + return (date instanceof Date || date instanceof timezone_date_1.TimezoneDate) && !isNaN(date.getTime()); +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saXF1aWRqcy9idWlsdGluL2ZpbHRlcnMvZGF0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxrREFBMEM7QUFFMUMsc0RBQThFO0FBRTlFLDREQUF1RDtBQUV2RCxTQUFnQixJQUFJLENBQW9CLENBQWdCLEVBQUUsR0FBVztJQUNuRSxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQTtJQUM5QixJQUFJLElBQWdCLENBQUE7SUFDcEIsQ0FBQyxHQUFHLElBQUEsb0JBQU8sRUFBQyxDQUFDLENBQUMsQ0FBQTtJQUNkLEdBQUcsR0FBRyxJQUFBLHNCQUFTLEVBQUMsR0FBRyxDQUFDLENBQUE7SUFDcEIsSUFBSSxDQUFDLEtBQUssS0FBSyxJQUFJLENBQUMsS0FBSyxPQUFPLEVBQUU7UUFDaEMsSUFBSSxHQUFHLElBQUksSUFBSSxFQUFFLENBQUE7S0FDbEI7U0FBTSxJQUFJLElBQUEscUJBQVEsRUFBQyxDQUFDLENBQUMsRUFBRTtRQUN0QixJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFBO0tBQzFCO1NBQU0sSUFBSSxJQUFBLHFCQUFRLEVBQUMsQ0FBQyxDQUFDLEVBQUU7UUFDdEIsSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ25CLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQTtTQUMzQjthQUFNLElBQUksSUFBSSxDQUFDLGlCQUFpQixFQUFFO1lBQ2pDLElBQUksR0FBRyw0QkFBWSxDQUFDLHlCQUF5QixDQUFDLENBQUMsQ0FBQyxDQUFBO1NBQ2pEO2FBQU07WUFDTCxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUE7U0FDbkI7S0FDRjtTQUFNO1FBQ0wsSUFBSSxHQUFHLENBQUMsQ0FBQTtLQUNUO0lBQ0QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUM7UUFBRSxPQUFPLENBQUMsQ0FBQTtJQUNoQyxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsZ0JBQWdCLENBQUMsRUFBRTtRQUN6QyxJQUFJLEdBQUcsSUFBSSw0QkFBWSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsY0FBZSxDQUFDLENBQUE7S0FDcEQ7SUFDRCxPQUFPLElBQUEsa0JBQVEsRUFBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUE7QUFDNUIsQ0FBQztBQXpCRCxvQkF5QkM7QUFFRCxTQUFTLFdBQVcsQ0FBRSxJQUFTO0lBQzdCLE9BQU8sQ0FBQyxJQUFJLFlBQVksSUFBSSxJQUFJLElBQUksWUFBWSw0QkFBWSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUE7QUFDekYsQ0FBQyJ9 \ No newline at end of file diff --git a/packages/osrl/liquidjs/builtin/filters/html.d.ts b/packages/osrl/liquidjs/builtin/filters/html.d.ts new file mode 100644 index 00000000..0b1874a8 --- /dev/null +++ b/packages/osrl/liquidjs/builtin/filters/html.d.ts @@ -0,0 +1,4 @@ +export declare function escape(str: string): string; +export declare function escapeOnce(str: string): string; +export declare function newlineToBr(v: string): string; +export declare function stripHtml(v: string): string; diff --git a/packages/osrl/liquidjs/builtin/filters/html.js b/packages/osrl/liquidjs/builtin/filters/html.js new file mode 100644 index 00000000..f2219367 --- /dev/null +++ b/packages/osrl/liquidjs/builtin/filters/html.js @@ -0,0 +1,38 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.stripHtml = exports.newlineToBr = exports.escapeOnce = exports.escape = void 0; +const underscore_1 = require("../../util/underscore"); +const escapeMap = { + '&': '&', + '<': '<', + '>': '>', + '"': '"', + "'": ''' +}; +const unescapeMap = { + '&': '&', + '<': '<', + '>': '>', + '"': '"', + ''': "'" +}; +function escape(str) { + return (0, underscore_1.stringify)(str).replace(/&|<|>|"|'/g, m => escapeMap[m]); +} +exports.escape = escape; +function unescape(str) { + return (0, underscore_1.stringify)(str).replace(/&(amp|lt|gt|#34|#39);/g, m => unescapeMap[m]); +} +function escapeOnce(str) { + return escape(unescape((0, underscore_1.stringify)(str))); +} +exports.escapeOnce = escapeOnce; +function newlineToBr(v) { + return (0, underscore_1.stringify)(v).replace(/\n/g, '
    \n'); +} +exports.newlineToBr = newlineToBr; +function stripHtml(v) { + return (0, underscore_1.stringify)(v).replace(/|||<.*?>/g, ''); +} +exports.stripHtml = stripHtml; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHRtbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saXF1aWRqcy9idWlsdGluL2ZpbHRlcnMvaHRtbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxzREFBaUQ7QUFFakQsTUFBTSxTQUFTLEdBQUc7SUFDaEIsR0FBRyxFQUFFLE9BQU87SUFDWixHQUFHLEVBQUUsTUFBTTtJQUNYLEdBQUcsRUFBRSxNQUFNO0lBQ1gsR0FBRyxFQUFFLE9BQU87SUFDWixHQUFHLEVBQUUsT0FBTztDQUNiLENBQUE7QUFDRCxNQUFNLFdBQVcsR0FBRztJQUNsQixPQUFPLEVBQUUsR0FBRztJQUNaLE1BQU0sRUFBRSxHQUFHO0lBQ1gsTUFBTSxFQUFFLEdBQUc7SUFDWCxPQUFPLEVBQUUsR0FBRztJQUNaLE9BQU8sRUFBRSxHQUFHO0NBQ2IsQ0FBQTtBQUVELFNBQWdCLE1BQU0sQ0FBRSxHQUFXO0lBQ2pDLE9BQU8sSUFBQSxzQkFBUyxFQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtBQUNoRSxDQUFDO0FBRkQsd0JBRUM7QUFFRCxTQUFTLFFBQVEsQ0FBRSxHQUFXO0lBQzVCLE9BQU8sSUFBQSxzQkFBUyxFQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyx3QkFBd0IsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO0FBQzlFLENBQUM7QUFFRCxTQUFnQixVQUFVLENBQUUsR0FBVztJQUNyQyxPQUFPLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBQSxzQkFBUyxFQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQTtBQUN6QyxDQUFDO0FBRkQsZ0NBRUM7QUFFRCxTQUFnQixXQUFXLENBQUUsQ0FBUztJQUNwQyxPQUFPLElBQUEsc0JBQVMsRUFBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLFVBQVUsQ0FBQyxDQUFBO0FBQ2hELENBQUM7QUFGRCxrQ0FFQztBQUVELFNBQWdCLFNBQVMsQ0FBRSxDQUFTO0lBQ2xDLE9BQU8sSUFBQSxzQkFBUyxFQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQywyREFBMkQsRUFBRSxFQUFFLENBQUMsQ0FBQTtBQUM5RixDQUFDO0FBRkQsOEJBRUMifQ== \ No newline at end of file diff --git a/packages/osrl/liquidjs/builtin/filters/index.d.ts b/packages/osrl/liquidjs/builtin/filters/index.d.ts new file mode 100644 index 00000000..7c1883d7 --- /dev/null +++ b/packages/osrl/liquidjs/builtin/filters/index.d.ts @@ -0,0 +1,7 @@ +export * from './html'; +export * from './math'; +export * from './url'; +export * from './array'; +export * from './date'; +export * from './misc'; +export * from './string'; diff --git a/packages/osrl/liquidjs/builtin/filters/index.js b/packages/osrl/liquidjs/builtin/filters/index.js new file mode 100644 index 00000000..ce798d26 --- /dev/null +++ b/packages/osrl/liquidjs/builtin/filters/index.js @@ -0,0 +1,24 @@ +"use strict"; +var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { enumerable: true, get: function() { return m[k]; } }; + } + Object.defineProperty(o, k2, desc); +}) : (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +})); +var __exportStar = (this && this.__exportStar) || function(m, exports) { + for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); +}; +Object.defineProperty(exports, "__esModule", { value: true }); +__exportStar(require("./html"), exports); +__exportStar(require("./math"), exports); +__exportStar(require("./url"), exports); +__exportStar(require("./array"), exports); +__exportStar(require("./date"), exports); +__exportStar(require("./misc"), exports); +__exportStar(require("./string"), exports); +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGlxdWlkanMvYnVpbHRpbi9maWx0ZXJzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSx5Q0FBc0I7QUFDdEIseUNBQXNCO0FBQ3RCLHdDQUFxQjtBQUNyQiwwQ0FBdUI7QUFDdkIseUNBQXNCO0FBQ3RCLHlDQUFzQjtBQUN0QiwyQ0FBd0IifQ== \ No newline at end of file diff --git a/packages/osrl/liquidjs/builtin/filters/math.d.ts b/packages/osrl/liquidjs/builtin/filters/math.d.ts new file mode 100644 index 00000000..eadc4849 --- /dev/null +++ b/packages/osrl/liquidjs/builtin/filters/math.d.ts @@ -0,0 +1,11 @@ +export declare const abs: (x: number) => any; +export declare const atLeast: (...args: number[]) => any; +export declare const atMost: (...args: number[]) => any; +export declare const ceil: (x: number) => any; +export declare const dividedBy: (dividend: number, divisor: number, integerArithmetic?: any) => any; +export declare const floor: (x: number) => any; +export declare const minus: (v: number, arg: number) => any; +export declare const modulo: (v: number, arg: number) => any; +export declare const times: (v: number, arg: number) => any; +export declare function round(v: number, arg?: number): number; +export declare function plus(v: number, arg: number): number; diff --git a/packages/osrl/liquidjs/builtin/filters/math.js b/packages/osrl/liquidjs/builtin/filters/math.js new file mode 100644 index 00000000..1b99e38f --- /dev/null +++ b/packages/osrl/liquidjs/builtin/filters/math.js @@ -0,0 +1,27 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.plus = exports.round = exports.times = exports.modulo = exports.minus = exports.floor = exports.dividedBy = exports.ceil = exports.atMost = exports.atLeast = exports.abs = void 0; +const underscore_1 = require("../../util/underscore"); +exports.abs = (0, underscore_1.argumentsToValue)(Math.abs); +exports.atLeast = (0, underscore_1.argumentsToValue)(Math.max); +exports.atMost = (0, underscore_1.argumentsToValue)(Math.min); +exports.ceil = (0, underscore_1.argumentsToValue)(Math.ceil); +exports.dividedBy = (0, underscore_1.argumentsToValue)((dividend, divisor, integerArithmetic = false) => integerArithmetic ? Math.floor(dividend / divisor) : dividend / divisor); +exports.floor = (0, underscore_1.argumentsToValue)(Math.floor); +exports.minus = (0, underscore_1.argumentsToValue)((v, arg) => v - arg); +exports.modulo = (0, underscore_1.argumentsToValue)((v, arg) => v % arg); +exports.times = (0, underscore_1.argumentsToValue)((v, arg) => v * arg); +function round(v, arg = 0) { + v = (0, underscore_1.toValue)(v); + arg = (0, underscore_1.toValue)(arg); + const amp = Math.pow(10, arg); + return Math.round(v * amp) / amp; +} +exports.round = round; +function plus(v, arg) { + v = (0, underscore_1.toValue)(v); + arg = (0, underscore_1.toValue)(arg); + return Number(v) + Number(arg); +} +exports.plus = plus; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0aC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saXF1aWRqcy9idWlsdGluL2ZpbHRlcnMvbWF0aC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxzREFBaUU7QUFFcEQsUUFBQSxHQUFHLEdBQUcsSUFBQSw2QkFBZ0IsRUFBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUE7QUFDaEMsUUFBQSxPQUFPLEdBQUcsSUFBQSw2QkFBZ0IsRUFBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUE7QUFDcEMsUUFBQSxNQUFNLEdBQUcsSUFBQSw2QkFBZ0IsRUFBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUE7QUFDbkMsUUFBQSxJQUFJLEdBQUcsSUFBQSw2QkFBZ0IsRUFBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUE7QUFDbEMsUUFBQSxTQUFTLEdBQUcsSUFBQSw2QkFBZ0IsRUFBQyxDQUFDLFFBQWdCLEVBQUUsT0FBZSxFQUFFLGlCQUFpQixHQUFHLEtBQUssRUFBRSxFQUFFLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDLENBQUE7QUFDdkssUUFBQSxLQUFLLEdBQUcsSUFBQSw2QkFBZ0IsRUFBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUE7QUFDcEMsUUFBQSxLQUFLLEdBQUcsSUFBQSw2QkFBZ0IsRUFBQyxDQUFDLENBQVMsRUFBRSxHQUFXLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQTtBQUM3RCxRQUFBLE1BQU0sR0FBRyxJQUFBLDZCQUFnQixFQUFDLENBQUMsQ0FBUyxFQUFFLEdBQVcsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFBO0FBQzlELFFBQUEsS0FBSyxHQUFHLElBQUEsNkJBQWdCLEVBQUMsQ0FBQyxDQUFTLEVBQUUsR0FBVyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUE7QUFFMUUsU0FBZ0IsS0FBSyxDQUFFLENBQVMsRUFBRSxHQUFHLEdBQUcsQ0FBQztJQUN2QyxDQUFDLEdBQUcsSUFBQSxvQkFBTyxFQUFDLENBQUMsQ0FBQyxDQUFBO0lBQ2QsR0FBRyxHQUFHLElBQUEsb0JBQU8sRUFBQyxHQUFHLENBQUMsQ0FBQTtJQUNsQixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQTtJQUM3QixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQTtBQUNsQyxDQUFDO0FBTEQsc0JBS0M7QUFFRCxTQUFnQixJQUFJLENBQUUsQ0FBUyxFQUFFLEdBQVc7SUFDMUMsQ0FBQyxHQUFHLElBQUEsb0JBQU8sRUFBQyxDQUFDLENBQUMsQ0FBQTtJQUNkLEdBQUcsR0FBRyxJQUFBLG9CQUFPLEVBQUMsR0FBRyxDQUFDLENBQUE7SUFDbEIsT0FBTyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFBO0FBQ2hDLENBQUM7QUFKRCxvQkFJQyJ9 \ No newline at end of file diff --git a/packages/osrl/liquidjs/builtin/filters/misc.d.ts b/packages/osrl/liquidjs/builtin/filters/misc.d.ts new file mode 100644 index 00000000..4e5171ef --- /dev/null +++ b/packages/osrl/liquidjs/builtin/filters/misc.d.ts @@ -0,0 +1,5 @@ +import { identify } from '../../util/underscore'; +import { FilterImpl } from '../../template/filter/filter-impl'; +export declare function Default(this: FilterImpl, value: T1, defaultValue: T2, ...args: Array<[string, any]>): T1 | T2; +export declare function json(value: any): string; +export declare const raw: typeof identify; diff --git a/packages/osrl/liquidjs/builtin/filters/misc.js b/packages/osrl/liquidjs/builtin/filters/misc.js new file mode 100644 index 00000000..9fd5e0d3 --- /dev/null +++ b/packages/osrl/liquidjs/builtin/filters/misc.js @@ -0,0 +1,20 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.raw = exports.json = exports.Default = void 0; +const boolean_1 = require("../../render/boolean"); +const underscore_1 = require("../../util/underscore"); +function Default(value, defaultValue, ...args) { + value = (0, underscore_1.toValue)(value); + if ((0, underscore_1.isArray)(value) || (0, underscore_1.isString)(value)) + return value.length ? value : defaultValue; + if (value === false && (new Map(args)).get('allow_false')) + return false; + return (0, boolean_1.isFalsy)(value, this.context) ? defaultValue : value; +} +exports.Default = Default; +function json(value) { + return JSON.stringify(value); +} +exports.json = json; +exports.raw = underscore_1.identify; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWlzYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saXF1aWRqcy9idWlsdGluL2ZpbHRlcnMvbWlzYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxrREFBOEM7QUFDOUMsc0RBQTRFO0FBRzVFLFNBQWdCLE9BQU8sQ0FBNEMsS0FBUyxFQUFFLFlBQWdCLEVBQUUsR0FBRyxJQUEwQjtJQUMzSCxLQUFLLEdBQUcsSUFBQSxvQkFBTyxFQUFDLEtBQUssQ0FBQyxDQUFBO0lBQ3RCLElBQUksSUFBQSxvQkFBTyxFQUFDLEtBQUssQ0FBQyxJQUFJLElBQUEscUJBQVEsRUFBQyxLQUFLLENBQUM7UUFBRSxPQUFPLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFBO0lBQ2pGLElBQUksS0FBSyxLQUFLLEtBQUssSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQztRQUFFLE9BQU8sS0FBVyxDQUFBO0lBQzdFLE9BQU8sSUFBQSxpQkFBTyxFQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFBO0FBQzVELENBQUM7QUFMRCwwQkFLQztBQUVELFNBQWdCLElBQUksQ0FBRSxLQUFVO0lBQzlCLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQTtBQUM5QixDQUFDO0FBRkQsb0JBRUM7QUFFWSxRQUFBLEdBQUcsR0FBRyxxQkFBUSxDQUFBIn0= \ No newline at end of file diff --git a/packages/osrl/liquidjs/builtin/filters/string.d.ts b/packages/osrl/liquidjs/builtin/filters/string.d.ts new file mode 100644 index 00000000..76ac53df --- /dev/null +++ b/packages/osrl/liquidjs/builtin/filters/string.d.ts @@ -0,0 +1,16 @@ +export declare function append(v: string, arg: string): string; +export declare function prepend(v: string, arg: string): string; +export declare function lstrip(v: string, chars?: string): string; +export declare function downcase(v: string): string; +export declare function upcase(str: string): string; +export declare function remove(v: string, arg: string): string; +export declare function removeFirst(v: string, l: string): string; +export declare function rstrip(str: string, chars?: string): string; +export declare function split(v: string, arg: string): string[]; +export declare function strip(v: string, chars?: string): string; +export declare function stripNewlines(v: string): string; +export declare function capitalize(str: string): string; +export declare function replace(v: string, pattern: string, replacement: string): string; +export declare function replaceFirst(v: string, arg1: string, arg2: string): string; +export declare function truncate(v: string, l?: number, o?: string): string; +export declare function truncatewords(v: string, l?: number, o?: string): string; diff --git a/packages/osrl/liquidjs/builtin/filters/string.js b/packages/osrl/liquidjs/builtin/filters/string.js new file mode 100644 index 00000000..3baeddfb --- /dev/null +++ b/packages/osrl/liquidjs/builtin/filters/string.js @@ -0,0 +1,104 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.truncatewords = exports.truncate = exports.replaceFirst = exports.replace = exports.capitalize = exports.stripNewlines = exports.strip = exports.split = exports.rstrip = exports.removeFirst = exports.remove = exports.upcase = exports.downcase = exports.lstrip = exports.prepend = exports.append = void 0; +/** + * String related filters + * + * * prefer stringify() to String() since `undefined`, `null` should eval '' + */ +const underscore_1 = require("../../util/underscore"); +const assert_1 = require("../../util/assert"); +function append(v, arg) { + (0, assert_1.assert)(arguments.length === 2, 'append expect 2 arguments'); + return (0, underscore_1.stringify)(v) + (0, underscore_1.stringify)(arg); +} +exports.append = append; +function prepend(v, arg) { + (0, assert_1.assert)(arguments.length === 2, 'prepend expect 2 arguments'); + return (0, underscore_1.stringify)(arg) + (0, underscore_1.stringify)(v); +} +exports.prepend = prepend; +function lstrip(v, chars) { + if (chars) { + chars = (0, underscore_1.escapeRegExp)((0, underscore_1.stringify)(chars)); + return (0, underscore_1.stringify)(v).replace(new RegExp(`^[${chars}]+`, 'g'), ''); + } + return (0, underscore_1.stringify)(v).replace(/^\s+/, ''); +} +exports.lstrip = lstrip; +function downcase(v) { + return (0, underscore_1.stringify)(v).toLowerCase(); +} +exports.downcase = downcase; +function upcase(str) { + return (0, underscore_1.stringify)(str).toUpperCase(); +} +exports.upcase = upcase; +function remove(v, arg) { + return (0, underscore_1.stringify)(v).split(String(arg)).join(''); +} +exports.remove = remove; +function removeFirst(v, l) { + return (0, underscore_1.stringify)(v).replace(String(l), ''); +} +exports.removeFirst = removeFirst; +function rstrip(str, chars) { + if (chars) { + chars = (0, underscore_1.escapeRegExp)((0, underscore_1.stringify)(chars)); + return (0, underscore_1.stringify)(str).replace(new RegExp(`[${chars}]+$`, 'g'), ''); + } + return (0, underscore_1.stringify)(str).replace(/\s+$/, ''); +} +exports.rstrip = rstrip; +function split(v, arg) { + const arr = (0, underscore_1.stringify)(v).split(String(arg)); + // align to ruby split, which is the behavior of shopify/liquid + // see: https://ruby-doc.org/core-2.4.0/String.html#method-i-split + while (arr.length && arr[arr.length - 1] === '') + arr.pop(); + return arr; +} +exports.split = split; +function strip(v, chars) { + if (chars) { + chars = (0, underscore_1.escapeRegExp)((0, underscore_1.stringify)(chars)); + return (0, underscore_1.stringify)(v) + .replace(new RegExp(`^[${chars}]+`, 'g'), '') + .replace(new RegExp(`[${chars}]+$`, 'g'), ''); + } + return (0, underscore_1.stringify)(v).trim(); +} +exports.strip = strip; +function stripNewlines(v) { + return (0, underscore_1.stringify)(v).replace(/\n/g, ''); +} +exports.stripNewlines = stripNewlines; +function capitalize(str) { + str = (0, underscore_1.stringify)(str); + return str.charAt(0).toUpperCase() + str.slice(1).toLowerCase(); +} +exports.capitalize = capitalize; +function replace(v, pattern, replacement) { + return (0, underscore_1.stringify)(v).split(String(pattern)).join(replacement); +} +exports.replace = replace; +function replaceFirst(v, arg1, arg2) { + return (0, underscore_1.stringify)(v).replace(String(arg1), arg2); +} +exports.replaceFirst = replaceFirst; +function truncate(v, l = 50, o = '...') { + v = (0, underscore_1.stringify)(v); + if (v.length <= l) + return v; + return v.substring(0, l - o.length) + o; +} +exports.truncate = truncate; +function truncatewords(v, l = 15, o = '...') { + const arr = (0, underscore_1.stringify)(v).split(/\s+/); + let ret = arr.slice(0, l).join(' '); + if (arr.length >= l) + ret += o; + return ret; +} +exports.truncatewords = truncatewords; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RyaW5nLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpcXVpZGpzL2J1aWx0aW4vZmlsdGVycy9zdHJpbmcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUE7Ozs7R0FJRztBQUNILHNEQUErRDtBQUMvRCw4Q0FBMEM7QUFFMUMsU0FBZ0IsTUFBTSxDQUFFLENBQVMsRUFBRSxHQUFXO0lBQzVDLElBQUEsZUFBTSxFQUFDLFNBQVMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLDJCQUEyQixDQUFDLENBQUE7SUFDM0QsT0FBTyxJQUFBLHNCQUFTLEVBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBQSxzQkFBUyxFQUFDLEdBQUcsQ0FBQyxDQUFBO0FBQ3RDLENBQUM7QUFIRCx3QkFHQztBQUVELFNBQWdCLE9BQU8sQ0FBRSxDQUFTLEVBQUUsR0FBVztJQUM3QyxJQUFBLGVBQU0sRUFBQyxTQUFTLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSw0QkFBNEIsQ0FBQyxDQUFBO0lBQzVELE9BQU8sSUFBQSxzQkFBUyxFQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUEsc0JBQVMsRUFBQyxDQUFDLENBQUMsQ0FBQTtBQUN0QyxDQUFDO0FBSEQsMEJBR0M7QUFFRCxTQUFnQixNQUFNLENBQUUsQ0FBUyxFQUFFLEtBQWM7SUFDL0MsSUFBSSxLQUFLLEVBQUU7UUFDVCxLQUFLLEdBQUcsSUFBQSx5QkFBWSxFQUFDLElBQUEsc0JBQVMsRUFBQyxLQUFLLENBQUMsQ0FBQyxDQUFBO1FBQ3RDLE9BQU8sSUFBQSxzQkFBUyxFQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLE1BQU0sQ0FBQyxLQUFLLEtBQUssSUFBSSxFQUFFLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFBO0tBQ2pFO0lBQ0QsT0FBTyxJQUFBLHNCQUFTLEVBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQTtBQUN6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 \ No newline at end of file diff --git a/packages/osrl/liquidjs/builtin/filters/url.d.ts b/packages/osrl/liquidjs/builtin/filters/url.d.ts new file mode 100644 index 00000000..3bdabfd7 --- /dev/null +++ b/packages/osrl/liquidjs/builtin/filters/url.d.ts @@ -0,0 +1,2 @@ +export declare const urlDecode: (x: string) => string; +export declare const urlEncode: (x: string) => string; diff --git a/packages/osrl/liquidjs/builtin/filters/url.js b/packages/osrl/liquidjs/builtin/filters/url.js new file mode 100644 index 00000000..a4b74e00 --- /dev/null +++ b/packages/osrl/liquidjs/builtin/filters/url.js @@ -0,0 +1,9 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.urlEncode = exports.urlDecode = void 0; +const underscore_1 = require("../../util/underscore"); +const urlDecode = (x) => (0, underscore_1.stringify)(x).split('+').map(decodeURIComponent).join(' '); +exports.urlDecode = urlDecode; +const urlEncode = (x) => (0, underscore_1.stringify)(x).split(' ').map(encodeURIComponent).join('+'); +exports.urlEncode = urlEncode; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXJsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpcXVpZGpzL2J1aWx0aW4vZmlsdGVycy91cmwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsc0RBQWlEO0FBRTFDLE1BQU0sU0FBUyxHQUFHLENBQUMsQ0FBUyxFQUFFLEVBQUUsQ0FBQyxJQUFBLHNCQUFTLEVBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQTtBQUFwRixRQUFBLFNBQVMsYUFBMkU7QUFDMUYsTUFBTSxTQUFTLEdBQUcsQ0FBQyxDQUFTLEVBQUUsRUFBRSxDQUFDLElBQUEsc0JBQVMsRUFBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLGtCQUFrQixDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFBO0FBQXBGLFFBQUEsU0FBUyxhQUEyRSJ9 \ No newline at end of file diff --git a/packages/osrl/liquidjs/builtin/tags/assign.d.ts b/packages/osrl/liquidjs/builtin/tags/assign.d.ts new file mode 100644 index 00000000..48b3e2c6 --- /dev/null +++ b/packages/osrl/liquidjs/builtin/tags/assign.d.ts @@ -0,0 +1,3 @@ +import { TagImplOptions } from '../../types'; +declare const _default: TagImplOptions; +export default _default; diff --git a/packages/osrl/liquidjs/builtin/tags/assign.js b/packages/osrl/liquidjs/builtin/tags/assign.js new file mode 100644 index 00000000..55907f7b --- /dev/null +++ b/packages/osrl/liquidjs/builtin/tags/assign.js @@ -0,0 +1,17 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const types_1 = require("../../types"); +exports.default = { + parse: function (token) { + const tokenizer = new types_1.Tokenizer(token.args, this.liquid.options.operatorsTrie); + this.key = tokenizer.readIdentifier().content; + tokenizer.skipBlank(); + (0, types_1.assert)(tokenizer.peek() === '=', () => `illegal token ${token.getText()}`); + tokenizer.advance(); + this.value = new types_1.Value(tokenizer.remaining(), this.liquid); + }, + render: function* (ctx) { + ctx.bottom()[this.key] = yield this.value.value(ctx, this.liquid.options.lenientIf); + } +}; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzaWduLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpcXVpZGpzL2J1aWx0aW4vdGFncy9hc3NpZ24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSx1Q0FBeUY7QUFFekYsa0JBQWU7SUFDYixLQUFLLEVBQUUsVUFBVSxLQUFlO1FBQzlCLE1BQU0sU0FBUyxHQUFHLElBQUksaUJBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFBO1FBQzlFLElBQUksQ0FBQyxHQUFHLEdBQUcsU0FBUyxDQUFDLGNBQWMsRUFBRSxDQUFDLE9BQU8sQ0FBQTtRQUM3QyxTQUFTLENBQUMsU0FBUyxFQUFFLENBQUE7UUFDckIsSUFBQSxjQUFNLEVBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxLQUFLLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxpQkFBaUIsS0FBSyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQTtRQUMxRSxTQUFTLENBQUMsT0FBTyxFQUFFLENBQUE7UUFDbkIsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLGFBQUssQ0FBQyxTQUFTLENBQUMsU0FBUyxFQUFFLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFBO0lBQzVELENBQUM7SUFDRCxNQUFNLEVBQUUsUUFBUyxDQUFDLEVBQUUsR0FBWTtRQUM5QixHQUFHLENBQUMsTUFBTSxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFBO0lBQ3JGLENBQUM7Q0FDZ0IsQ0FBQSJ9 \ No newline at end of file diff --git a/packages/osrl/liquidjs/builtin/tags/block.d.ts b/packages/osrl/liquidjs/builtin/tags/block.d.ts new file mode 100644 index 00000000..655737a2 --- /dev/null +++ b/packages/osrl/liquidjs/builtin/tags/block.d.ts @@ -0,0 +1,8 @@ +import { BlockDrop } from '../../drop/block-drop'; +import { TagToken, TopLevelToken, Context, TagImpl, Emitter } from '../../types'; +declare const _default: { + parse(this: TagImpl, token: TagToken, remainTokens: TopLevelToken[]): void; + render(this: TagImpl, ctx: Context, emitter: Emitter): Generator; + getBlockRender(this: TagImpl, ctx: Context): (superBlock: BlockDrop, emitter: Emitter) => any; +}; +export default _default; diff --git a/packages/osrl/liquidjs/builtin/tags/block.js b/packages/osrl/liquidjs/builtin/tags/block.js new file mode 100644 index 00000000..880c148e --- /dev/null +++ b/packages/osrl/liquidjs/builtin/tags/block.js @@ -0,0 +1,39 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const block_mode_1 = require("../../context/block-mode"); +const block_drop_1 = require("../../drop/block-drop"); +exports.default = { + parse(token, remainTokens) { + const match = /\w+/.exec(token.args); + this.block = match ? match[0] : ' '; + this.tpls = []; + this.liquid.parser.parseStream(remainTokens) + .on('tag:endblock', function () { this.stop(); }) + .on('template', (tpl) => this.tpls.push(tpl)) + .on('end', () => { throw new Error(`tag ${token.getText()} not closed`); }) + .start(); + }, + *render(ctx, emitter) { + const blockRender = this.getBlockRender(ctx); + if (ctx.getRegister('blockMode') === block_mode_1.default.STORE) { + ctx.getRegister('blocks')[this.block] = blockRender; + } + else { + yield blockRender(new block_drop_1.BlockDrop(), emitter); + } + }, + getBlockRender(ctx) { + const { liquid, tpls } = this; + const renderChild = ctx.getRegister('blocks')[this.block]; + const renderCurrent = function* (superBlock, emitter) { + // add {{ block.super }} support when rendering + ctx.push({ block: superBlock }); + yield liquid.renderer.renderTemplates(tpls, ctx, emitter); + ctx.pop(); + }; + return renderChild + ? (superBlock, emitter) => renderChild(new block_drop_1.BlockDrop(() => renderCurrent(superBlock, emitter)), emitter) + : renderCurrent; + } +}; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmxvY2suanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGlxdWlkanMvYnVpbHRpbi90YWdzL2Jsb2NrLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEseURBQWdEO0FBQ2hELHNEQUFpRDtBQUdqRCxrQkFBZTtJQUNiLEtBQUssQ0FBaUIsS0FBZSxFQUFFLFlBQTZCO1FBQ2xFLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFBO1FBQ3BDLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQTtRQUNuQyxJQUFJLENBQUMsSUFBSSxHQUFHLEVBQWdCLENBQUE7UUFDNUIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQzthQUN6QyxFQUFFLENBQUMsY0FBYyxFQUFFLGNBQWMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFBLENBQUMsQ0FBQyxDQUFDO2FBQy9DLEVBQUUsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxHQUFhLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2FBQ3RELEVBQUUsQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLEdBQUcsTUFBTSxJQUFJLEtBQUssQ0FBQyxPQUFPLEtBQUssQ0FBQyxPQUFPLEVBQUUsYUFBYSxDQUFDLENBQUEsQ0FBQyxDQUFDLENBQUM7YUFDekUsS0FBSyxFQUFFLENBQUE7SUFDWixDQUFDO0lBRUQsQ0FBRSxNQUFNLENBQWlCLEdBQVksRUFBRSxPQUFnQjtRQUNyRCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFBO1FBQzVDLElBQUksR0FBRyxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsS0FBSyxvQkFBUyxDQUFDLEtBQUssRUFBRTtZQUNwRCxHQUFHLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxXQUFXLENBQUE7U0FDcEQ7YUFBTTtZQUNMLE1BQU0sV0FBVyxDQUFDLElBQUksc0JBQVMsRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFBO1NBQzVDO0lBQ0gsQ0FBQztJQUVELGNBQWMsQ0FBaUIsR0FBWTtRQUN6QyxNQUFNLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQTtRQUM3QixNQUFNLFdBQVcsR0FBRyxHQUFHLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQTtRQUN6RCxNQUFNLGFBQWEsR0FBRyxRQUFTLENBQUMsRUFBRSxVQUFxQixFQUFFLE9BQWdCO1lBQ3ZFLCtDQUErQztZQUMvQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUE7WUFDL0IsTUFBTSxNQUFNLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLE9BQU8sQ0FBQyxDQUFBO1lBQ3pELEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQTtRQUNYLENBQUMsQ0FBQTtRQUNELE9BQU8sV0FBVztZQUNoQixDQUFDLENBQUMsQ0FBQyxVQUFxQixFQUFFLE9BQWdCLEVBQUUsRUFBRSxDQUFDLFdBQVcsQ0FBQyxJQUFJLHNCQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsYUFBYSxDQUFDLFVBQVUsRUFBRSxPQUFPLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQztZQUM1SCxDQUFDLENBQUMsYUFBYSxDQUFBO0lBQ25CLENBQUM7Q0FDRixDQUFBIn0= \ No newline at end of file diff --git a/packages/osrl/liquidjs/builtin/tags/break.d.ts b/packages/osrl/liquidjs/builtin/tags/break.d.ts new file mode 100644 index 00000000..9c1d5cbb --- /dev/null +++ b/packages/osrl/liquidjs/builtin/tags/break.d.ts @@ -0,0 +1,5 @@ +import { Emitter, Context } from '../../types'; +declare const _default: { + render: (ctx: Context, emitter: Emitter) => void; +}; +export default _default; diff --git a/packages/osrl/liquidjs/builtin/tags/break.js b/packages/osrl/liquidjs/builtin/tags/break.js new file mode 100644 index 00000000..ea3dbc7b --- /dev/null +++ b/packages/osrl/liquidjs/builtin/tags/break.js @@ -0,0 +1,8 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.default = { + render: function (ctx, emitter) { + emitter['break'] = true; + } +}; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJlYWsuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGlxdWlkanMvYnVpbHRpbi90YWdzL2JyZWFrLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBRUEsa0JBQWU7SUFDYixNQUFNLEVBQUUsVUFBVSxHQUFZLEVBQUUsT0FBZ0I7UUFDOUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQTtJQUN6QixDQUFDO0NBQ0YsQ0FBQSJ9 \ No newline at end of file diff --git a/packages/osrl/liquidjs/builtin/tags/capture.d.ts b/packages/osrl/liquidjs/builtin/tags/capture.d.ts new file mode 100644 index 00000000..48b3e2c6 --- /dev/null +++ b/packages/osrl/liquidjs/builtin/tags/capture.d.ts @@ -0,0 +1,3 @@ +import { TagImplOptions } from '../../types'; +declare const _default: TagImplOptions; +export default _default; diff --git a/packages/osrl/liquidjs/builtin/tags/capture.js b/packages/osrl/liquidjs/builtin/tags/capture.js new file mode 100644 index 00000000..d283d880 --- /dev/null +++ b/packages/osrl/liquidjs/builtin/tags/capture.js @@ -0,0 +1,33 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const types_1 = require("../../types"); +const expression_1 = require("../../render/expression"); +exports.default = { + parse: function (tagToken, remainTokens) { + const tokenizer = new types_1.Tokenizer(tagToken.args, this.liquid.options.operatorsTrie); + this.variable = readVariableName(tokenizer); + (0, types_1.assert)(this.variable, () => `${tagToken.args} not valid identifier`); + this.templates = []; + const stream = this.liquid.parser.parseStream(remainTokens); + stream.on('tag:endcapture', () => stream.stop()) + .on('template', (tpl) => this.templates.push(tpl)) + .on('end', () => { + throw new Error(`tag ${tagToken.getText()} not closed`); + }); + stream.start(); + }, + render: function* (ctx) { + const r = this.liquid.renderer; + const html = yield r.renderTemplates(this.templates, ctx); + ctx.bottom()[this.variable] = html; + } +}; +function readVariableName(tokenizer) { + const word = tokenizer.readIdentifier().content; + if (word) + return word; + const quoted = tokenizer.readQuoted(); + if (quoted) + return (0, expression_1.evalQuotedToken)(quoted); +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FwdHVyZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saXF1aWRqcy9idWlsdGluL3RhZ3MvY2FwdHVyZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLHVDQUEyRztBQUMzRyx3REFBeUQ7QUFFekQsa0JBQWU7SUFDYixLQUFLLEVBQUUsVUFBVSxRQUFrQixFQUFFLFlBQTZCO1FBQ2hFLE1BQU0sU0FBUyxHQUFHLElBQUksaUJBQVMsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFBO1FBQ2pGLElBQUksQ0FBQyxRQUFRLEdBQUcsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLENBQUE7UUFDM0MsSUFBQSxjQUFNLEVBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxJQUFJLHVCQUF1QixDQUFDLENBQUE7UUFFcEUsSUFBSSxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUE7UUFFbkIsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxDQUFBO1FBQzNELE1BQU0sQ0FBQyxFQUFFLENBQUMsZ0JBQWdCLEVBQUUsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDO2FBQzdDLEVBQUUsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxHQUFhLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2FBQzNELEVBQUUsQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFO1lBQ2QsTUFBTSxJQUFJLEtBQUssQ0FBQyxPQUFPLFFBQVEsQ0FBQyxPQUFPLEVBQUUsYUFBYSxDQUFDLENBQUE7UUFDekQsQ0FBQyxDQUFDLENBQUE7UUFDSixNQUFNLENBQUMsS0FBSyxFQUFFLENBQUE7SUFDaEIsQ0FBQztJQUNELE1BQU0sRUFBRSxRQUFTLENBQUMsRUFBRSxHQUFZO1FBQzlCLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFBO1FBQzlCLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxDQUFBO1FBQ3pELEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsSUFBSSxDQUFBO0lBQ3BDLENBQUM7Q0FDZ0IsQ0FBQTtBQUVuQixTQUFTLGdCQUFnQixDQUFFLFNBQW9CO0lBQzdDLE1BQU0sSUFBSSxHQUFHLFNBQVMsQ0FBQyxjQUFjLEVBQUUsQ0FBQyxPQUFPLENBQUE7SUFDL0MsSUFBSSxJQUFJO1FBQUUsT0FBTyxJQUFJLENBQUE7SUFDckIsTUFBTSxNQUFNLEdBQUcsU0FBUyxDQUFDLFVBQVUsRUFBRSxDQUFBO0lBQ3JDLElBQUksTUFBTTtRQUFFLE9BQU8sSUFBQSw0QkFBZSxFQUFDLE1BQU0sQ0FBQyxDQUFBO0FBQzVDLENBQUMifQ== \ No newline at end of file diff --git a/packages/osrl/liquidjs/builtin/tags/case.d.ts b/packages/osrl/liquidjs/builtin/tags/case.d.ts new file mode 100644 index 00000000..48b3e2c6 --- /dev/null +++ b/packages/osrl/liquidjs/builtin/tags/case.d.ts @@ -0,0 +1,3 @@ +import { TagImplOptions } from '../../types'; +declare const _default: TagImplOptions; +export default _default; diff --git a/packages/osrl/liquidjs/builtin/tags/case.js b/packages/osrl/liquidjs/builtin/tags/case.js new file mode 100644 index 00000000..e27f1eb9 --- /dev/null +++ b/packages/osrl/liquidjs/builtin/tags/case.js @@ -0,0 +1,45 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const types_1 = require("../../types"); +const tokenizer_1 = require("../../parser/tokenizer"); +exports.default = { + parse: function (tagToken, remainTokens) { + this.cond = new types_1.Value(tagToken.args, this.liquid); + this.cases = []; + this.elseTemplates = []; + let p = []; + const stream = this.liquid.parser.parseStream(remainTokens) + .on('tag:when', (token) => { + p = []; + const tokenizer = new tokenizer_1.Tokenizer(token.args, this.liquid.options.operatorsTrie); + while (!tokenizer.end()) { + const value = tokenizer.readValue(); + this.cases.push({ + val: value, + templates: p + }); + tokenizer.readTo(','); + } + }) + .on('tag:else', () => (p = this.elseTemplates)) + .on('tag:endcase', () => stream.stop()) + .on('template', (tpl) => p.push(tpl)) + .on('end', () => { + throw new Error(`tag ${tagToken.getText()} not closed`); + }); + stream.start(); + }, + render: function* (ctx, emitter) { + const r = this.liquid.renderer; + const cond = (0, types_1.toValue)(yield this.cond.value(ctx, ctx.opts.lenientIf)); + for (const branch of this.cases) { + const val = (0, types_1.evalToken)(branch.val, ctx, ctx.opts.lenientIf); + if (val === cond) { + yield r.renderTemplates(branch.templates, ctx, emitter); + return; + } + } + yield r.renderTemplates(this.elseTemplates, ctx, emitter); + } +}; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saXF1aWRqcy9idWlsdGluL3RhZ3MvY2FzZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLHVDQUF5STtBQUN6SSxzREFBa0Q7QUFFbEQsa0JBQWU7SUFDYixLQUFLLEVBQUUsVUFBVSxRQUFrQixFQUFFLFlBQTZCO1FBQ2hFLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxhQUFLLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUE7UUFDakQsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUE7UUFDZixJQUFJLENBQUMsYUFBYSxHQUFHLEVBQUUsQ0FBQTtRQUV2QixJQUFJLENBQUMsR0FBZSxFQUFFLENBQUE7UUFDdEIsTUFBTSxNQUFNLEdBQWdCLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUM7YUFDckUsRUFBRSxDQUFDLFVBQVUsRUFBRSxDQUFDLEtBQWUsRUFBRSxFQUFFO1lBQ2xDLENBQUMsR0FBRyxFQUFFLENBQUE7WUFFTixNQUFNLFNBQVMsR0FBRyxJQUFJLHFCQUFTLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQTtZQUU5RSxPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxFQUFFO2dCQUN2QixNQUFNLEtBQUssR0FBRyxTQUFTLENBQUMsU0FBUyxFQUFFLENBQUE7Z0JBQ25DLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDO29CQUNkLEdBQUcsRUFBRSxLQUFLO29CQUNWLFNBQVMsRUFBRSxDQUFDO2lCQUNiLENBQUMsQ0FBQTtnQkFDRixTQUFTLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFBO2FBQ3RCO1FBQ0gsQ0FBQyxDQUFDO2FBQ0QsRUFBRSxDQUFDLFVBQVUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7YUFDOUMsRUFBRSxDQUFDLGFBQWEsRUFBRSxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7YUFDdEMsRUFBRSxDQUFDLFVBQVUsRUFBRSxDQUFDLEdBQWEsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQzthQUM5QyxFQUFFLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRTtZQUNkLE1BQU0sSUFBSSxLQUFLLENBQUMsT0FBTyxRQUFRLENBQUMsT0FBTyxFQUFFLGFBQWEsQ0FBQyxDQUFBO1FBQ3pELENBQUMsQ0FBQyxDQUFBO1FBRUosTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFBO0lBQ2hCLENBQUM7SUFFRCxNQUFNLEVBQUUsUUFBUyxDQUFDLEVBQUUsR0FBWSxFQUFFLE9BQWdCO1FBQ2hELE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFBO1FBQzlCLE1BQU0sSUFBSSxHQUFHLElBQUEsZUFBTyxFQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQTtRQUNwRSxLQUFLLE1BQU0sTUFBTSxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDL0IsTUFBTSxHQUFHLEdBQUcsSUFBQSxpQkFBUyxFQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUE7WUFDMUQsSUFBSSxHQUFHLEtBQUssSUFBSSxFQUFFO2dCQUNoQixNQUFNLENBQUMsQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxHQUFHLEVBQUUsT0FBTyxDQUFDLENBQUE7Z0JBQ3ZELE9BQU07YUFDUDtTQUNGO1FBQ0QsTUFBTSxDQUFDLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsR0FBRyxFQUFFLE9BQU8sQ0FBQyxDQUFBO0lBQzNELENBQUM7Q0FDZ0IsQ0FBQSJ9 \ No newline at end of file diff --git a/packages/osrl/liquidjs/builtin/tags/comment.d.ts b/packages/osrl/liquidjs/builtin/tags/comment.d.ts new file mode 100644 index 00000000..20db9c83 --- /dev/null +++ b/packages/osrl/liquidjs/builtin/tags/comment.d.ts @@ -0,0 +1,3 @@ +import { TagImplOptions } from '../../template/tag/tag-impl-options'; +declare const _default: TagImplOptions; +export default _default; diff --git a/packages/osrl/liquidjs/builtin/tags/comment.js b/packages/osrl/liquidjs/builtin/tags/comment.js new file mode 100644 index 00000000..f53f6cc2 --- /dev/null +++ b/packages/osrl/liquidjs/builtin/tags/comment.js @@ -0,0 +1,17 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.default = { + parse: function (tagToken, remainTokens) { + const stream = this.liquid.parser.parseStream(remainTokens); + stream + .on('token', (token) => { + if (token.name === 'endcomment') + stream.stop(); + }) + .on('end', () => { + throw new Error(`tag ${tagToken.getText()} not closed`); + }); + stream.start(); + } +}; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saXF1aWRqcy9idWlsdGluL3RhZ3MvY29tbWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUlBLGtCQUFlO0lBQ2IsS0FBSyxFQUFFLFVBQVUsUUFBa0IsRUFBRSxZQUE2QjtRQUNoRSxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLENBQUE7UUFDM0QsTUFBTTthQUNILEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxLQUFlLEVBQUUsRUFBRTtZQUMvQixJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssWUFBWTtnQkFBRSxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUE7UUFDaEQsQ0FBQyxDQUFDO2FBQ0QsRUFBRSxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUU7WUFDZCxNQUFNLElBQUksS0FBSyxDQUFDLE9BQU8sUUFBUSxDQUFDLE9BQU8sRUFBRSxhQUFhLENBQUMsQ0FBQTtRQUN6RCxDQUFDLENBQUMsQ0FBQTtRQUNKLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQTtJQUNoQixDQUFDO0NBQ2dCLENBQUEifQ== \ No newline at end of file diff --git a/packages/osrl/liquidjs/builtin/tags/continue.d.ts b/packages/osrl/liquidjs/builtin/tags/continue.d.ts new file mode 100644 index 00000000..9c1d5cbb --- /dev/null +++ b/packages/osrl/liquidjs/builtin/tags/continue.d.ts @@ -0,0 +1,5 @@ +import { Emitter, Context } from '../../types'; +declare const _default: { + render: (ctx: Context, emitter: Emitter) => void; +}; +export default _default; diff --git a/packages/osrl/liquidjs/builtin/tags/continue.js b/packages/osrl/liquidjs/builtin/tags/continue.js new file mode 100644 index 00000000..a9e3dd6b --- /dev/null +++ b/packages/osrl/liquidjs/builtin/tags/continue.js @@ -0,0 +1,8 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.default = { + render: function (ctx, emitter) { + emitter['continue'] = true; + } +}; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGludWUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGlxdWlkanMvYnVpbHRpbi90YWdzL2NvbnRpbnVlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBRUEsa0JBQWU7SUFDYixNQUFNLEVBQUUsVUFBVSxHQUFZLEVBQUUsT0FBZ0I7UUFDOUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxHQUFHLElBQUksQ0FBQTtJQUM1QixDQUFDO0NBQ0YsQ0FBQSJ9 \ No newline at end of file diff --git a/packages/osrl/liquidjs/builtin/tags/cycle.d.ts b/packages/osrl/liquidjs/builtin/tags/cycle.d.ts new file mode 100644 index 00000000..48b3e2c6 --- /dev/null +++ b/packages/osrl/liquidjs/builtin/tags/cycle.d.ts @@ -0,0 +1,3 @@ +import { TagImplOptions } from '../../types'; +declare const _default: TagImplOptions; +export default _default; diff --git a/packages/osrl/liquidjs/builtin/tags/cycle.js b/packages/osrl/liquidjs/builtin/tags/cycle.js new file mode 100644 index 00000000..08c638dd --- /dev/null +++ b/packages/osrl/liquidjs/builtin/tags/cycle.js @@ -0,0 +1,43 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const assert_1 = require("../../util/assert"); +const types_1 = require("../../types"); +const tokenizer_1 = require("../../parser/tokenizer"); +exports.default = { + parse: function (tagToken) { + const tokenizer = new tokenizer_1.Tokenizer(tagToken.args, this.liquid.options.operatorsTrie); + const group = tokenizer.readValue(); + tokenizer.skipBlank(); + this.candidates = []; + if (group) { + if (tokenizer.peek() === ':') { + this.group = group; + tokenizer.advance(); + } + else + this.candidates.push(group); + } + while (!tokenizer.end()) { + const value = tokenizer.readValue(); + if (value) + this.candidates.push(value); + tokenizer.readTo(','); + } + (0, assert_1.assert)(this.candidates.length, () => `empty candidates: ${tagToken.getText()}`); + }, + render: function (ctx, emitter) { + const group = (0, types_1.evalToken)(this.group, ctx); + const fingerprint = `cycle:${group}:` + this.candidates.join(','); + const groups = ctx.getRegister('cycle'); + let idx = groups[fingerprint]; + if (idx === undefined) { + idx = groups[fingerprint] = 0; + } + const candidate = this.candidates[idx]; + idx = (idx + 1) % this.candidates.length; + groups[fingerprint] = idx; + const html = (0, types_1.evalToken)(candidate, ctx); + emitter.write(html); + } +}; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3ljbGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGlxdWlkanMvYnVpbHRpbi90YWdzL2N5Y2xlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsOENBQTBDO0FBQzFDLHVDQUFtRjtBQUNuRixzREFBa0Q7QUFFbEQsa0JBQWU7SUFDYixLQUFLLEVBQUUsVUFBVSxRQUFrQjtRQUNqQyxNQUFNLFNBQVMsR0FBRyxJQUFJLHFCQUFTLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQTtRQUNqRixNQUFNLEtBQUssR0FBRyxTQUFTLENBQUMsU0FBUyxFQUFFLENBQUE7UUFDbkMsU0FBUyxDQUFDLFNBQVMsRUFBRSxDQUFBO1FBRXJCLElBQUksQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFBO1FBRXBCLElBQUksS0FBSyxFQUFFO1lBQ1QsSUFBSSxTQUFTLENBQUMsSUFBSSxFQUFFLEtBQUssR0FBRyxFQUFFO2dCQUM1QixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQTtnQkFDbEIsU0FBUyxDQUFDLE9BQU8sRUFBRSxDQUFBO2FBQ3BCOztnQkFBTSxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQTtTQUNuQztRQUVELE9BQU8sQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDdkIsTUFBTSxLQUFLLEdBQUcsU0FBUyxDQUFDLFNBQVMsRUFBRSxDQUFBO1lBQ25DLElBQUksS0FBSztnQkFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQTtZQUN0QyxTQUFTLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFBO1NBQ3RCO1FBQ0QsSUFBQSxlQUFNLEVBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUMscUJBQXFCLFFBQVEsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUE7SUFDakYsQ0FBQztJQUVELE1BQU0sRUFBRSxVQUFVLEdBQVksRUFBRSxPQUFnQjtRQUM5QyxNQUFNLEtBQUssR0FBRyxJQUFBLGlCQUFTLEVBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQTtRQUN4QyxNQUFNLFdBQVcsR0FBRyxTQUFTLEtBQUssR0FBRyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFBO1FBQ2pFLE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUE7UUFDdkMsSUFBSSxHQUFHLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFBO1FBRTdCLElBQUksR0FBRyxLQUFLLFNBQVMsRUFBRTtZQUNyQixHQUFHLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQTtTQUM5QjtRQUVELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUE7UUFDdEMsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFBO1FBQ3hDLE1BQU0sQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLENBQUE7UUFDekIsTUFBTSxJQUFJLEdBQUcsSUFBQSxpQkFBUyxFQUFDLFNBQVMsRUFBRSxHQUFHLENBQUMsQ0FBQTtRQUN0QyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFBO0lBQ3JCLENBQUM7Q0FDZ0IsQ0FBQSJ9 \ No newline at end of file diff --git a/packages/osrl/liquidjs/builtin/tags/decrement.d.ts b/packages/osrl/liquidjs/builtin/tags/decrement.d.ts new file mode 100644 index 00000000..48b3e2c6 --- /dev/null +++ b/packages/osrl/liquidjs/builtin/tags/decrement.d.ts @@ -0,0 +1,3 @@ +import { TagImplOptions } from '../../types'; +declare const _default: TagImplOptions; +export default _default; diff --git a/packages/osrl/liquidjs/builtin/tags/decrement.js b/packages/osrl/liquidjs/builtin/tags/decrement.js new file mode 100644 index 00000000..4ce1e58b --- /dev/null +++ b/packages/osrl/liquidjs/builtin/tags/decrement.js @@ -0,0 +1,18 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const types_1 = require("../../types"); +const underscore_1 = require("../../util/underscore"); +exports.default = { + parse: function (token) { + const tokenizer = new types_1.Tokenizer(token.args, this.liquid.options.operatorsTrie); + this.variable = tokenizer.readIdentifier().content; + }, + render: function (context, emitter) { + const scope = context.environments; + if (!(0, underscore_1.isNumber)(scope[this.variable])) { + scope[this.variable] = 0; + } + emitter.write((0, underscore_1.stringify)(--scope[this.variable])); + } +}; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVjcmVtZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpcXVpZGpzL2J1aWx0aW4vdGFncy9kZWNyZW1lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSx1Q0FBbUY7QUFDbkYsc0RBQTJEO0FBRTNELGtCQUFlO0lBQ2IsS0FBSyxFQUFFLFVBQVUsS0FBZTtRQUM5QixNQUFNLFNBQVMsR0FBRyxJQUFJLGlCQUFTLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQTtRQUM5RSxJQUFJLENBQUMsUUFBUSxHQUFHLFNBQVMsQ0FBQyxjQUFjLEVBQUUsQ0FBQyxPQUFPLENBQUE7SUFDcEQsQ0FBQztJQUNELE1BQU0sRUFBRSxVQUFVLE9BQWdCLEVBQUUsT0FBZ0I7UUFDbEQsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLFlBQVksQ0FBQTtRQUNsQyxJQUFJLENBQUMsSUFBQSxxQkFBUSxFQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRTtZQUNuQyxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQTtTQUN6QjtRQUNELE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBQSxzQkFBUyxFQUFDLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDbEQsQ0FBQztDQUNnQixDQUFBIn0= \ No newline at end of file diff --git a/packages/osrl/liquidjs/builtin/tags/echo.d.ts b/packages/osrl/liquidjs/builtin/tags/echo.d.ts new file mode 100644 index 00000000..48b3e2c6 --- /dev/null +++ b/packages/osrl/liquidjs/builtin/tags/echo.d.ts @@ -0,0 +1,3 @@ +import { TagImplOptions } from '../../types'; +declare const _default: TagImplOptions; +export default _default; diff --git a/packages/osrl/liquidjs/builtin/tags/echo.js b/packages/osrl/liquidjs/builtin/tags/echo.js new file mode 100644 index 00000000..7e2bd491 --- /dev/null +++ b/packages/osrl/liquidjs/builtin/tags/echo.js @@ -0,0 +1,13 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const value_1 = require("../../template/value"); +exports.default = { + parse: function (token) { + this.value = new value_1.Value(token.args, this.liquid); + }, + render: function* (ctx, emitter) { + const val = yield this.value.value(ctx, false); + emitter.write(val); + } +}; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWNoby5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saXF1aWRqcy9idWlsdGluL3RhZ3MvZWNoby50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLGdEQUE0QztBQUk1QyxrQkFBZTtJQUNiLEtBQUssRUFBRSxVQUFVLEtBQWU7UUFDOUIsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLGFBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQTtJQUNqRCxDQUFDO0lBQ0QsTUFBTSxFQUFFLFFBQVMsQ0FBQyxFQUFFLEdBQVksRUFBRSxPQUFnQjtRQUNoRCxNQUFNLEdBQUcsR0FBRyxNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQTtRQUM5QyxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFBO0lBQ3BCLENBQUM7Q0FDZ0IsQ0FBQSJ9 \ No newline at end of file diff --git a/packages/osrl/liquidjs/builtin/tags/for.d.ts b/packages/osrl/liquidjs/builtin/tags/for.d.ts new file mode 100644 index 00000000..48b3e2c6 --- /dev/null +++ b/packages/osrl/liquidjs/builtin/tags/for.d.ts @@ -0,0 +1,3 @@ +import { TagImplOptions } from '../../types'; +declare const _default: TagImplOptions; +export default _default; diff --git a/packages/osrl/liquidjs/builtin/tags/for.js b/packages/osrl/liquidjs/builtin/tags/for.js new file mode 100644 index 00000000..6bec6a34 --- /dev/null +++ b/packages/osrl/liquidjs/builtin/tags/for.js @@ -0,0 +1,78 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const types_1 = require("../../types"); +const collection_1 = require("../../util/collection"); +const forloop_drop_1 = require("../../drop/forloop-drop"); +const hash_1 = require("../../template/tag/hash"); +const MODIFIERS = ['offset', 'limit', 'reversed']; +exports.default = { + type: 'block', + parse: function (token, remainTokens) { + const tokenizer = new types_1.Tokenizer(token.args, this.liquid.options.operatorsTrie); + const variable = tokenizer.readIdentifier(); + const inStr = tokenizer.readIdentifier(); + const collection = tokenizer.readValue(); + (0, types_1.assert)(variable.size() && inStr.content === 'in' && collection, () => `illegal tag: ${token.getText()}`); + this.variable = variable.content; + this.collection = collection; + this.hash = new hash_1.Hash(tokenizer.remaining()); + this.templates = []; + this.elseTemplates = []; + let p; + const stream = this.liquid.parser.parseStream(remainTokens) + .on('start', () => (p = this.templates)) + .on('tag:else', () => (p = this.elseTemplates)) + .on('tag:endfor', () => stream.stop()) + .on('template', (tpl) => p.push(tpl)) + .on('end', () => { + throw new Error(`tag ${token.getText()} not closed`); + }); + stream.start(); + }, + render: function* (ctx, emitter) { + const r = this.liquid.renderer; + let collection = (0, collection_1.toEnumerable)(yield (0, types_1.evalToken)(this.collection, ctx)); + if (!collection.length) { + yield r.renderTemplates(this.elseTemplates, ctx, emitter); + return; + } + const continueKey = 'continue-' + this.variable + '-' + this.collection.getText(); + ctx.push({ continue: ctx.getRegister(continueKey) }); + const hash = yield this.hash.render(ctx); + ctx.pop(); + const modifiers = this.liquid.options.orderedFilterParameters + ? Object.keys(hash).filter(x => MODIFIERS.includes(x)) + : MODIFIERS.filter(x => hash[x] !== undefined); + collection = modifiers.reduce((collection, modifier) => { + if (modifier === 'offset') + return offset(collection, hash['offset']); + if (modifier === 'limit') + return limit(collection, hash['limit']); + return reversed(collection); + }, collection); + ctx.setRegister(continueKey, (hash['offset'] || 0) + collection.length); + const scope = { forloop: new forloop_drop_1.ForloopDrop(collection.length, this.collection.getText(), this.variable) }; + ctx.push(scope); + for (const item of collection) { + scope[this.variable] = item; + yield r.renderTemplates(this.templates, ctx, emitter); + if (emitter['break']) { + emitter['break'] = false; + break; + } + emitter['continue'] = false; + scope.forloop.next(); + } + ctx.pop(); + } +}; +function reversed(arr) { + return [...arr].reverse(); +} +function offset(arr, count) { + return arr.slice(count); +} +function limit(arr, count) { + return arr.slice(0, count); +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpcXVpZGpzL2J1aWx0aW4vdGFncy9mb3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSx1Q0FBNEk7QUFDNUksc0RBQW9EO0FBQ3BELDBEQUFxRDtBQUNyRCxrREFBeUQ7QUFFekQsTUFBTSxTQUFTLEdBQUcsQ0FBQyxRQUFRLEVBQUUsT0FBTyxFQUFFLFVBQVUsQ0FBQyxDQUFBO0FBSWpELGtCQUFlO0lBQ2IsSUFBSSxFQUFFLE9BQU87SUFDYixLQUFLLEVBQUUsVUFBVSxLQUFlLEVBQUUsWUFBNkI7UUFDN0QsTUFBTSxTQUFTLEdBQUcsSUFBSSxpQkFBUyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLENBQUE7UUFFOUUsTUFBTSxRQUFRLEdBQUcsU0FBUyxDQUFDLGNBQWMsRUFBRSxDQUFBO1FBQzNDLE1BQU0sS0FBSyxHQUFHLFNBQVMsQ0FBQyxjQUFjLEVBQUUsQ0FBQTtRQUN4QyxNQUFNLFVBQVUsR0FBRyxTQUFTLENBQUMsU0FBUyxFQUFFLENBQUE7UUFDeEMsSUFBQSxjQUFNLEVBQ0osUUFBUSxDQUFDLElBQUksRUFBRSxJQUFJLEtBQUssQ0FBQyxPQUFPLEtBQUssSUFBSSxJQUFJLFVBQVUsRUFDdkQsR0FBRyxFQUFFLENBQUMsZ0JBQWdCLEtBQUssQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUN4QyxDQUFBO1FBRUQsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFBO1FBQ2hDLElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFBO1FBQzVCLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxXQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUE7UUFDM0MsSUFBSSxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUE7UUFDbkIsSUFBSSxDQUFDLGFBQWEs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 \ No newline at end of file diff --git a/packages/osrl/liquidjs/builtin/tags/if.d.ts b/packages/osrl/liquidjs/builtin/tags/if.d.ts new file mode 100644 index 00000000..48b3e2c6 --- /dev/null +++ b/packages/osrl/liquidjs/builtin/tags/if.d.ts @@ -0,0 +1,3 @@ +import { TagImplOptions } from '../../types'; +declare const _default: TagImplOptions; +export default _default; diff --git a/packages/osrl/liquidjs/builtin/tags/if.js b/packages/osrl/liquidjs/builtin/tags/if.js new file mode 100644 index 00000000..9490bf0a --- /dev/null +++ b/packages/osrl/liquidjs/builtin/tags/if.js @@ -0,0 +1,36 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const types_1 = require("../../types"); +exports.default = { + parse: function (tagToken, remainTokens) { + this.branches = []; + this.elseTemplates = []; + let p; + this.liquid.parser.parseStream(remainTokens) + .on('start', () => this.branches.push({ + predicate: new types_1.Value(tagToken.args, this.liquid), + templates: (p = []) + })) + .on('tag:elsif', (token) => this.branches.push({ + predicate: new types_1.Value(token.args, this.liquid), + templates: (p = []) + })) + .on('tag:else', () => (p = this.elseTemplates)) + .on('tag:endif', function () { this.stop(); }) + .on('template', (tpl) => p.push(tpl)) + .on('end', () => { throw new Error(`tag ${tagToken.getText()} not closed`); }) + .start(); + }, + render: function* (ctx, emitter) { + const r = this.liquid.renderer; + for (const { predicate, templates } of this.branches) { + const value = yield predicate.value(ctx, ctx.opts.lenientIf); + if ((0, types_1.isTruthy)(value, ctx)) { + yield r.renderTemplates(templates, ctx, emitter); + return; + } + } + yield r.renderTemplates(this.elseTemplates, ctx, emitter); + } +}; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWYuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGlxdWlkanMvYnVpbHRpbi90YWdzL2lmLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsdUNBQWtIO0FBRWxILGtCQUFlO0lBQ2IsS0FBSyxFQUFFLFVBQVUsUUFBa0IsRUFBRSxZQUE2QjtRQUNoRSxJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQTtRQUNsQixJQUFJLENBQUMsYUFBYSxHQUFHLEVBQUUsQ0FBQTtRQUV2QixJQUFJLENBQUMsQ0FBQTtRQUNMLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUM7YUFDekMsRUFBRSxDQUFDLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQztZQUNwQyxTQUFTLEVBQUUsSUFBSSxhQUFLLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDO1lBQ2hELFNBQVMsRUFBRSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7U0FDcEIsQ0FBQyxDQUFDO2FBQ0YsRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFDLEtBQWUsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUM7WUFDdkQsU0FBUyxFQUFFLElBQUksYUFBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQztZQUM3QyxTQUFTLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO1NBQ3BCLENBQUMsQ0FBQzthQUNGLEVBQUUsQ0FBQyxVQUFVLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO2FBQzlDLEVBQUUsQ0FBQyxXQUFXLEVBQUUsY0FBYyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUEsQ0FBQyxDQUFDLENBQUM7YUFDNUMsRUFBRSxDQUFDLFVBQVUsRUFBRSxDQUFDLEdBQWEsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQzthQUM5QyxFQUFFLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxHQUFHLE1BQU0sSUFBSSxLQUFLLENBQUMsT0FBTyxRQUFRLENBQUMsT0FBTyxFQUFFLGFBQWEsQ0FBQyxDQUFBLENBQUMsQ0FBQyxDQUFDO2FBQzVFLEtBQUssRUFBRSxDQUFBO0lBQ1osQ0FBQztJQUVELE1BQU0sRUFBRSxRQUFTLENBQUMsRUFBRSxHQUFZLEVBQUUsT0FBZ0I7UUFDaEQsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUE7UUFFOUIsS0FBSyxNQUFNLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDcEQsTUFBTSxLQUFLLEdBQUcsTUFBTSxTQUFTLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFBO1lBQzVELElBQUksSUFBQSxnQkFBUSxFQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsRUFBRTtnQkFDeEIsTUFBTSxDQUFDLENBQUMsZUFBZSxDQUFDLFNBQVMsRUFBRSxHQUFHLEVBQUUsT0FBTyxDQUFDLENBQUE7Z0JBQ2hELE9BQU07YUFDUDtTQUNGO1FBQ0QsTUFBTSxDQUFDLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsR0FBRyxFQUFFLE9BQU8sQ0FBQyxDQUFBO0lBQzNELENBQUM7Q0FDZ0IsQ0FBQSJ9 \ No newline at end of file diff --git a/packages/osrl/liquidjs/builtin/tags/include.d.ts b/packages/osrl/liquidjs/builtin/tags/include.d.ts new file mode 100644 index 00000000..48b3e2c6 --- /dev/null +++ b/packages/osrl/liquidjs/builtin/tags/include.d.ts @@ -0,0 +1,3 @@ +import { TagImplOptions } from '../../types'; +declare const _default: TagImplOptions; +export default _default; diff --git a/packages/osrl/liquidjs/builtin/tags/include.js b/packages/osrl/liquidjs/builtin/tags/include.js new file mode 100644 index 00000000..e5dd38ae --- /dev/null +++ b/packages/osrl/liquidjs/builtin/tags/include.js @@ -0,0 +1,46 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const types_1 = require("../../types"); +const block_mode_1 = require("../../context/block-mode"); +const render_1 = require("./render"); +exports.default = { + parseFilePath: render_1.parseFilePath, + renderFilePath: render_1.renderFilePath, + parse: function (token) { + const args = token.args; + const tokenizer = new types_1.Tokenizer(args, this.liquid.options.operatorsTrie); + this['file'] = this.parseFilePath(tokenizer, this.liquid); + this['currentFile'] = token.file; + const begin = tokenizer.p; + const withStr = tokenizer.readIdentifier(); + if (withStr.content === 'with') { + tokenizer.skipBlank(); + if (tokenizer.peek() !== ':') { + this.withVar = tokenizer.readValue(); + } + else + tokenizer.p = begin; + } + else + tokenizer.p = begin; + this.hash = new types_1.Hash(tokenizer.remaining(), this.liquid.options.jekyllInclude); + }, + render: function* (ctx, emitter) { + const { liquid, hash, withVar } = this; + const { renderer } = liquid; + const filepath = yield this.renderFilePath(this['file'], ctx, liquid); + (0, types_1.assert)(filepath, () => `illegal filename "${filepath}"`); + const saved = ctx.saveRegister('blocks', 'blockMode'); + ctx.setRegister('blocks', {}); + ctx.setRegister('blockMode', block_mode_1.default.OUTPUT); + const scope = yield hash.render(ctx); + if (withVar) + scope[filepath] = (0, types_1.evalToken)(withVar, ctx); + const templates = yield liquid._parsePartialFile(filepath, ctx.sync, this['currentFile']); + ctx.push(ctx.opts.jekyllInclude ? { include: scope } : scope); + yield renderer.renderTemplates(templates, ctx, emitter); + ctx.pop(); + ctx.restoreRegister(saved); + } +}; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5jbHVkZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saXF1aWRqcy9idWlsdGluL3RhZ3MvaW5jbHVkZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLHVDQUE0RztBQUM1Ryx5REFBZ0Q7QUFDaEQscUNBQXdEO0FBRXhELGtCQUFlO0lBQ2IsYUFBYSxFQUFiLHNCQUFhO0lBQ2IsY0FBYyxFQUFkLHVCQUFjO0lBQ2QsS0FBSyxFQUFFLFVBQVUsS0FBZTtRQUM5QixNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFBO1FBQ3ZCLE1BQU0sU0FBUyxHQUFHLElBQUksaUJBQVMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLENBQUE7UUFDeEUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQTtRQUN6RCxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQTtRQUVoQyxNQUFNLEtBQUssR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFBO1FBQ3pCLE1BQU0sT0FBTyxHQUFHLFNBQVMsQ0FBQyxjQUFjLEVBQUUsQ0FBQTtRQUMxQyxJQUFJLE9BQU8sQ0FBQyxPQUFPLEtBQUssTUFBTSxFQUFFO1lBQzlCLFNBQVMsQ0FBQyxTQUFTLEVBQUUsQ0FBQTtZQUNyQixJQUFJLFNBQVMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxHQUFHLEVBQUU7Z0JBQzVCLElBQUksQ0FBQyxPQUFPLEdBQUcsU0FBUyxDQUFDLFNBQVMsRUFBRSxDQUFBO2FBQ3JDOztnQkFBTSxTQUFTLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQTtTQUMzQjs7WUFBTSxTQUFTLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQTtRQUUxQixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksWUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLEVBQUUsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQTtJQUNoRixDQUFDO0lBQ0QsTUFBTSxFQUFFLFFBQVMsQ0FBQyxFQUFFLEdBQVksRUFBRSxPQUFnQjtRQUNoRCxNQUFNLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsR0FBRyxJQUFJLENBQUE7UUFDdEMsTUFBTSxFQUFFLFFBQVEsRUFBRSxHQUFHLE1BQU0sQ0FBQTtRQUMzQixNQUFNLFFBQVEsR0FBRyxNQUFNLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEdBQUcsRUFBRSxNQUFNLENBQUMsQ0FBQTtRQUNyRSxJQUFBLGNBQU0sRUFBQyxRQUFRLEVBQUUsR0FBRyxFQUFFLENBQUMscUJBQXFCLFFBQVEsR0FBRyxDQUFDLENBQUE7UUFFeEQsTUFBTSxLQUFLLEdBQUcsR0FBRyxDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUUsV0FBVyxDQUFDLENBQUE7UUFDckQsR0FBRyxDQUFDLFdBQVcsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLENBQUE7UUFDN0IsR0FBRyxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUUsb0JBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQTtRQUM5QyxNQUFNLEtBQUssR0FBRyxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUE7UUFDcEMsSUFBSSxPQUFPO1lBQUUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxHQUFHLElBQUEsaUJBQVMsRUFBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUE7UUFDdEQsTUFBTSxTQUFTLEdBQUcsTUFBTSxNQUFNLENBQUMsaUJBQWlCLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUE7UUFDekYsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBQzdELE1BQU0sUUFBUSxDQUFDLGVBQWUsQ0FBQyxTQUFTLEVBQUUsR0FBRyxFQUFFLE9BQU8sQ0FBQyxDQUFBO1FBQ3ZELEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQTtRQUNULEdBQUcsQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUE7SUFDNUIsQ0FBQztDQUNnQixDQUFBIn0= \ No newline at end of file diff --git a/packages/osrl/liquidjs/builtin/tags/increment.d.ts b/packages/osrl/liquidjs/builtin/tags/increment.d.ts new file mode 100644 index 00000000..48b3e2c6 --- /dev/null +++ b/packages/osrl/liquidjs/builtin/tags/increment.d.ts @@ -0,0 +1,3 @@ +import { TagImplOptions } from '../../types'; +declare const _default: TagImplOptions; +export default _default; diff --git a/packages/osrl/liquidjs/builtin/tags/increment.js b/packages/osrl/liquidjs/builtin/tags/increment.js new file mode 100644 index 00000000..47f8cdc0 --- /dev/null +++ b/packages/osrl/liquidjs/builtin/tags/increment.js @@ -0,0 +1,20 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const underscore_1 = require("../../util/underscore"); +const types_1 = require("../../types"); +exports.default = { + parse: function (token) { + const tokenizer = new types_1.Tokenizer(token.args, this.liquid.options.operatorsTrie); + this.variable = tokenizer.readIdentifier().content; + }, + render: function (context, emitter) { + const scope = context.environments; + if (!(0, underscore_1.isNumber)(scope[this.variable])) { + scope[this.variable] = 0; + } + const val = scope[this.variable]; + scope[this.variable]++; + emitter.write((0, underscore_1.stringify)(val)); + } +}; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5jcmVtZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpcXVpZGpzL2J1aWx0aW4vdGFncy9pbmNyZW1lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxzREFBMkQ7QUFDM0QsdUNBQW1GO0FBRW5GLGtCQUFlO0lBQ2IsS0FBSyxFQUFFLFVBQVUsS0FBZTtRQUM5QixNQUFNLFNBQVMsR0FBRyxJQUFJLGlCQUFTLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQTtRQUM5RSxJQUFJLENBQUMsUUFBUSxHQUFHLFNBQVMsQ0FBQyxjQUFjLEVBQUUsQ0FBQyxPQUFPLENBQUE7SUFDcEQsQ0FBQztJQUNELE1BQU0sRUFBRSxVQUFVLE9BQWdCLEVBQUUsT0FBZ0I7UUFDbEQsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLFlBQVksQ0FBQTtRQUNsQyxJQUFJLENBQUMsSUFBQSxxQkFBUSxFQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRTtZQUNuQyxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQTtTQUN6QjtRQUNELE1BQU0sR0FBRyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUE7UUFDaEMsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFBO1FBQ3RCLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBQSxzQkFBUyxFQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUE7SUFDL0IsQ0FBQztDQUNnQixDQUFBIn0= \ No newline at end of file diff --git a/packages/osrl/liquidjs/builtin/tags/index.d.ts b/packages/osrl/liquidjs/builtin/tags/index.d.ts new file mode 100644 index 00000000..0ebddcd1 --- /dev/null +++ b/packages/osrl/liquidjs/builtin/tags/index.d.ts @@ -0,0 +1,5 @@ +import { TagImplOptions } from '../../template/tag/tag-impl-options'; +declare const tags: { + [key: string]: TagImplOptions; +}; +export default tags; diff --git a/packages/osrl/liquidjs/builtin/tags/index.js b/packages/osrl/liquidjs/builtin/tags/index.js new file mode 100644 index 00000000..a6a6ecca --- /dev/null +++ b/packages/osrl/liquidjs/builtin/tags/index.js @@ -0,0 +1,28 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const assign_1 = require("./assign"); +const for_1 = require("./for"); +const capture_1 = require("./capture"); +const case_1 = require("./case"); +const comment_1 = require("./comment"); +const include_1 = require("./include"); +const render_1 = require("./render"); +const decrement_1 = require("./decrement"); +const cycle_1 = require("./cycle"); +const if_1 = require("./if"); +const increment_1 = require("./increment"); +const layout_1 = require("./layout"); +const block_1 = require("./block"); +const raw_1 = require("./raw"); +const tablerow_1 = require("./tablerow"); +const unless_1 = require("./unless"); +const break_1 = require("./break"); +const continue_1 = require("./continue"); +const echo_1 = require("./echo"); +const liquid_1 = require("./liquid"); +const inline_comment_1 = require("./inline-comment"); +const tags = { + assign: assign_1.default, 'for': for_1.default, capture: capture_1.default, 'case': case_1.default, comment: comment_1.default, include: include_1.default, render: render_1.default, decrement: decrement_1.default, increment: increment_1.default, cycle: cycle_1.default, 'if': if_1.default, layout: layout_1.default, block: block_1.default, raw: raw_1.default, tablerow: tablerow_1.default, unless: unless_1.default, 'break': break_1.default, 'continue': continue_1.default, echo: echo_1.default, liquid: liquid_1.default, '#': inline_comment_1.default +}; +exports.default = tags; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGlxdWlkanMvYnVpbHRpbi90YWdzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEscUNBQTZCO0FBQzdCLCtCQUF1QjtBQUN2Qix1Q0FBK0I7QUFDL0IsaUNBQXlCO0FBQ3pCLHVDQUErQjtBQUMvQix1Q0FBK0I7QUFDL0IscUNBQTZCO0FBQzdCLDJDQUFtQztBQUNuQyxtQ0FBMkI7QUFDM0IsNkJBQXFCO0FBQ3JCLDJDQUFtQztBQUNuQyxxQ0FBNkI7QUFDN0IsbUNBQTJCO0FBQzNCLCtCQUF1QjtBQUN2Qix5Q0FBaUM7QUFDakMscUNBQTZCO0FBQzdCLG1DQUEyQjtBQUMzQix5Q0FBaUM7QUFDakMsaUNBQXlCO0FBQ3pCLHFDQUE2QjtBQUM3QixxREFBNEM7QUFHNUMsTUFBTSxJQUFJLEdBQXNDO0lBQzlDLE1BQU0sRUFBTixnQkFBTSxFQUFFLEtBQUssRUFBRSxhQUFHLEVBQUUsT0FBTyxFQUFQLGlCQUFPLEVBQUUsTUFBTSxFQUFFLGNBQUksRUFBRSxPQUFPLEVBQVAsaUJBQU8sRUFBRSxPQUFPLEVBQVAsaUJBQU8sRUFBRSxNQUFNLEVBQU4sZ0JBQU0sRUFBRSxTQUFTLEVBQVQsbUJBQVMsRUFBRSxTQUFTLEVBQVQsbUJBQVMsRUFBRSxLQUFLLEVBQUwsZUFBSyxFQUFFLElBQUksRUFBRSxZQUFFLEVBQUUsTUFBTSxFQUFOLGdCQUFNLEVBQUUsS0FBSyxFQUFMLGVBQUssRUFBRSxHQUFHLEVBQUgsYUFBRyxFQUFFLFFBQVEsRUFBUixrQkFBUSxFQUFFLE1BQU0sRUFBTixnQkFBTSxFQUFFLE9BQU8sRUFBRSxlQUFLLEVBQUUsVUFBVSxFQUFFLGtCQUFRLEVBQUUsSUFBSSxFQUFKLGNBQUksRUFBRSxNQUFNLEVBQU4sZ0JBQU0sRUFBRSxHQUFHLEVBQUUsd0JBQWE7Q0FDek4sQ0FBQTtBQUVELGtCQUFlLElBQUksQ0FBQSJ9 \ No newline at end of file diff --git a/packages/osrl/liquidjs/builtin/tags/inline-comment.d.ts b/packages/osrl/liquidjs/builtin/tags/inline-comment.d.ts new file mode 100644 index 00000000..20db9c83 --- /dev/null +++ b/packages/osrl/liquidjs/builtin/tags/inline-comment.d.ts @@ -0,0 +1,3 @@ +import { TagImplOptions } from '../../template/tag/tag-impl-options'; +declare const _default: TagImplOptions; +export default _default; diff --git a/packages/osrl/liquidjs/builtin/tags/inline-comment.js b/packages/osrl/liquidjs/builtin/tags/inline-comment.js new file mode 100644 index 00000000..a107b7f8 --- /dev/null +++ b/packages/osrl/liquidjs/builtin/tags/inline-comment.js @@ -0,0 +1,10 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.default = { + parse: function (tagToken, remainTokens) { + if (tagToken.args.search(/\n\s*[^#\s]/g) !== -1) { + throw new Error('every line of an inline comment must start with a \'#\' character'); + } + } +}; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5saW5lLWNvbW1lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGlxdWlkanMvYnVpbHRpbi90YWdzL2lubGluZS1jb21tZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBSUEsa0JBQWU7SUFDYixLQUFLLEVBQUUsVUFBVSxRQUFrQixFQUFFLFlBQTZCO1FBQ2hFLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUU7WUFDL0MsTUFBTSxJQUFJLEtBQUssQ0FBQyxtRUFBbUUsQ0FBQyxDQUFBO1NBQ3JGO0lBQ0gsQ0FBQztDQUNnQixDQUFBIn0= \ No newline at end of file diff --git a/packages/osrl/liquidjs/builtin/tags/layout.d.ts b/packages/osrl/liquidjs/builtin/tags/layout.d.ts new file mode 100644 index 00000000..48b3e2c6 --- /dev/null +++ b/packages/osrl/liquidjs/builtin/tags/layout.d.ts @@ -0,0 +1,3 @@ +import { TagImplOptions } from '../../types'; +declare const _default: TagImplOptions; +export default _default; diff --git a/packages/osrl/liquidjs/builtin/tags/layout.js b/packages/osrl/liquidjs/builtin/tags/layout.js new file mode 100644 index 00000000..d7180d38 --- /dev/null +++ b/packages/osrl/liquidjs/builtin/tags/layout.js @@ -0,0 +1,41 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const types_1 = require("../../types"); +const block_mode_1 = require("../../context/block-mode"); +const render_1 = require("./render"); +exports.default = { + parseFilePath: render_1.parseFilePath, + renderFilePath: render_1.renderFilePath, + parse: function (token, remainTokens) { + const tokenizer = new types_1.Tokenizer(token.args, this.liquid.options.operatorsTrie); + this['file'] = this.parseFilePath(tokenizer, this.liquid); + this['currentFile'] = token.file; + this.hash = new types_1.Hash(tokenizer.remaining()); + this.tpls = this.liquid.parser.parseTokens(remainTokens); + }, + render: function* (ctx, emitter) { + const { liquid, hash, file } = this; + const { renderer } = liquid; + if (file === null) { + ctx.setRegister('blockMode', block_mode_1.default.OUTPUT); + yield renderer.renderTemplates(this.tpls, ctx, emitter); + return; + } + const filepath = yield this.renderFilePath(this['file'], ctx, liquid); + (0, types_1.assert)(filepath, () => `illegal filename "${filepath}"`); + const templates = yield liquid._parseLayoutFile(filepath, ctx.sync, this['currentFile']); + // render remaining contents and store rendered results + ctx.setRegister('blockMode', block_mode_1.default.STORE); + const html = yield renderer.renderTemplates(this.tpls, ctx); + const blocks = ctx.getRegister('blocks'); + // set whole content to anonymous block if anonymous doesn't specified + if (blocks[''] === undefined) + blocks[''] = (parent, emitter) => emitter.write(html); + ctx.setRegister('blockMode', block_mode_1.default.OUTPUT); + // render the layout file use stored blocks + ctx.push(yield hash.render(ctx)); + yield renderer.renderTemplates(templates, ctx, emitter); + ctx.pop(); + } +}; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGF5b3V0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpcXVpZGpzL2J1aWx0aW4vdGFncy9sYXlvdXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSx1Q0FBZ0g7QUFDaEgseURBQWdEO0FBQ2hELHFDQUF3RDtBQUd4RCxrQkFBZTtJQUNiLGFBQWEsRUFBYixzQkFBYTtJQUNiLGNBQWMsRUFBZCx1QkFBYztJQUNkLEtBQUssRUFBRSxVQUFVLEtBQWUsRUFBRSxZQUE2QjtRQUM3RCxNQUFNLFNBQVMsR0FBRyxJQUFJLGlCQUFTLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQTtRQUM5RSxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFBO1FBQ3pELElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFBO1FBQ2hDLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxZQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUE7UUFDM0MsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLENBQUE7SUFDMUQsQ0FBQztJQUNELE1BQU0sRUFBRSxRQUFTLENBQUMsRUFBRSxHQUFZLEVBQUUsT0FBZ0I7UUFDaEQsTUFBTSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFBO1FBQ25DLE1BQU0sRUFBRSxRQUFRLEVBQUUsR0FBRyxNQUFNLENBQUE7UUFDM0IsSUFBSSxJQUFJLEtBQUssSUFBSSxFQUFFO1lBQ2pCLEdBQUcsQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFLG9CQUFTLENBQUMsTUFBTSxDQUFDLENBQUE7WUFDOUMsTUFBTSxRQUFRLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLE9BQU8sQ0FBQyxDQUFBO1lBQ3ZELE9BQU07U0FDUDtRQUNELE1BQU0sUUFBUSxHQUFHLE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFBO1FBQ3JFLElBQUEsY0FBTSxFQUFDLFFBQVEsRUFBRSxHQUFHLEVBQUUsQ0FBQyxxQkFBcUIsUUFBUSxHQUFHLENBQUMsQ0FBQTtRQUN4RCxNQUFNLFNBQVMsR0FBRyxNQUFNLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQTtRQUV4Rix1REFBdUQ7UUFDdkQsR0FBRyxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUUsb0JBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQTtRQUM3QyxNQUFNLElBQUksR0FBRyxNQUFNLFFBQVEsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQTtRQUMzRCxNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFBO1FBRXhDLHNFQUFzRTtRQUN0RSxJQUFJLE1BQU0sQ0FBQyxFQUFFLENBQUMsS0FBSyxTQUFTO1lBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsTUFBaUIsRUFBRSxPQUFnQixFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFBO1FBQ3ZHLEdBQUcsQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFLG9CQUFTLENBQUMsTUFBTSxDQUFDLENBQUE7UUFFOUMsMkNBQTJDO1FBQzNDLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUE7UUFDaEMsTUFBTSxRQUFRLENBQUMsZUFBZSxDQUFDLFNBQVMsRUFBRSxHQUFHLEVBQUUsT0FBTyxDQUFDLENBQUE7UUFDdkQsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFBO0lBQ1gsQ0FBQztDQUNnQixDQUFBIn0= \ No newline at end of file diff --git a/packages/osrl/liquidjs/builtin/tags/liquid.d.ts b/packages/osrl/liquidjs/builtin/tags/liquid.d.ts new file mode 100644 index 00000000..48b3e2c6 --- /dev/null +++ b/packages/osrl/liquidjs/builtin/tags/liquid.d.ts @@ -0,0 +1,3 @@ +import { TagImplOptions } from '../../types'; +declare const _default: TagImplOptions; +export default _default; diff --git a/packages/osrl/liquidjs/builtin/tags/liquid.js b/packages/osrl/liquidjs/builtin/tags/liquid.js new file mode 100644 index 00000000..81ae9349 --- /dev/null +++ b/packages/osrl/liquidjs/builtin/tags/liquid.js @@ -0,0 +1,14 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const tokenizer_1 = require("../../parser/tokenizer"); +exports.default = { + parse: function (token) { + const tokenizer = new tokenizer_1.Tokenizer(token.args, this.liquid.options.operatorsTrie); + const tokens = tokenizer.readLiquidTagTokens(this.liquid.options); + this.tpls = this.liquid.parser.parseTokens(tokens); + }, + render: function* (ctx, emitter) { + yield this.liquid.renderer.renderTemplates(this.tpls, ctx, emitter); + } +}; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlxdWlkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpcXVpZGpzL2J1aWx0aW4vdGFncy9saXF1aWQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFFQSxzREFBa0Q7QUFFbEQsa0JBQWU7SUFDYixLQUFLLEVBQUUsVUFBVSxLQUFlO1FBQzlCLE1BQU0sU0FBUyxHQUFHLElBQUkscUJBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFBO1FBQzlFLE1BQU0sTUFBTSxHQUFHLFNBQVMsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFBO1FBQ2pFLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFBO0lBQ3BELENBQUM7SUFDRCxNQUFNLEVBQUUsUUFBUyxDQUFDLEVBQUUsR0FBWSxFQUFFLE9BQWdCO1FBQ2hELE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLE9BQU8sQ0FBQyxDQUFBO0lBQ3JFLENBQUM7Q0FDZ0IsQ0FBQSJ9 \ No newline at end of file diff --git a/packages/osrl/liquidjs/builtin/tags/raw.d.ts b/packages/osrl/liquidjs/builtin/tags/raw.d.ts new file mode 100644 index 00000000..48b3e2c6 --- /dev/null +++ b/packages/osrl/liquidjs/builtin/tags/raw.d.ts @@ -0,0 +1,3 @@ +import { TagImplOptions } from '../../types'; +declare const _default: TagImplOptions; +export default _default; diff --git a/packages/osrl/liquidjs/builtin/tags/raw.js b/packages/osrl/liquidjs/builtin/tags/raw.js new file mode 100644 index 00000000..b026127f --- /dev/null +++ b/packages/osrl/liquidjs/builtin/tags/raw.js @@ -0,0 +1,23 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.default = { + parse: function (tagToken, remainTokens) { + this.tokens = []; + const stream = this.liquid.parser.parseStream(remainTokens); + stream + .on('token', (token) => { + if (token.name === 'endraw') + stream.stop(); + else + this.tokens.push(token); + }) + .on('end', () => { + throw new Error(`tag ${tagToken.getText()} not closed`); + }); + stream.start(); + }, + render: function () { + return this.tokens.map((token) => token.getText()).join(''); + } +}; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmF3LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpcXVpZGpzL2J1aWx0aW4vdGFncy9yYXcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFFQSxrQkFBZTtJQUNiLEtBQUssRUFBRSxVQUFVLFFBQWtCLEVBQUUsWUFBNkI7UUFDaEUsSUFBSSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUE7UUFFaEIsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxDQUFBO1FBQzNELE1BQU07YUFDSCxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUMsS0FBZSxFQUFFLEVBQUU7WUFDL0IsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLFFBQVE7Z0JBQUUsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFBOztnQkFDckMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUE7UUFDOUIsQ0FBQyxDQUFDO2FBQ0QsRUFBRSxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUU7WUFDZCxNQUFNLElBQUksS0FBSyxDQUFDLE9BQU8sUUFBUSxDQUFDLE9BQU8sRUFBRSxhQUFhLENBQUMsQ0FBQTtRQUN6RCxDQUFDLENBQUMsQ0FBQTtRQUNKLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQTtJQUNoQixDQUFDO0lBQ0QsTUFBTSxFQUFFO1FBQ04sT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQW9CLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQTtJQUM1RSxDQUFDO0NBQ2dCLENBQUEifQ== \ No newline at end of file diff --git a/packages/osrl/liquidjs/builtin/tags/render.d.ts b/packages/osrl/liquidjs/builtin/tags/render.d.ts new file mode 100644 index 00000000..65b7bee8 --- /dev/null +++ b/packages/osrl/liquidjs/builtin/tags/render.d.ts @@ -0,0 +1,13 @@ +import { Liquid } from '../../liquid'; +import { Token, Template, Tokenizer, Context, TagImplOptions } from '../../types'; +declare const _default: TagImplOptions; +export default _default; +type ParsedFileName = Template[] | Token | string | undefined; +/** + * @return null for "none", + * @return Template[] for quoted with tags and/or filters + * @return Token for expression (not quoted) + * @throws TypeError if cannot read next token + */ +export declare function parseFilePath(tokenizer: Tokenizer, liquid: Liquid): ParsedFileName | null; +export declare function renderFilePath(file: ParsedFileName, ctx: Context, liquid: Liquid): any; diff --git a/packages/osrl/liquidjs/builtin/tags/render.js b/packages/osrl/liquidjs/builtin/tags/render.js new file mode 100644 index 00000000..deb08b9e --- /dev/null +++ b/packages/osrl/liquidjs/builtin/tags/render.js @@ -0,0 +1,120 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.renderFilePath = exports.parseFilePath = void 0; +const tslib_1 = require("tslib"); +const assert_1 = require("../../util/assert"); +const forloop_drop_1 = require("../../drop/forloop-drop"); +const collection_1 = require("../../util/collection"); +const types_1 = require("../../types"); +exports.default = { + parseFilePath, + renderFilePath, + parse: function (token) { + const args = token.args; + const tokenizer = new types_1.Tokenizer(args, this.liquid.options.operatorsTrie); + this['file'] = this.parseFilePath(tokenizer, this.liquid); + this['currentFile'] = token.file; + while (!tokenizer.end()) { + tokenizer.skipBlank(); + const begin = tokenizer.p; + const keyword = tokenizer.readIdentifier(); + if (keyword.content === 'with' || keyword.content === 'for') { + tokenizer.skipBlank(); + // can be normal key/value pair, like "with: true" + if (tokenizer.peek() !== ':') { + const value = tokenizer.readValue(); + // can be normal key, like "with," + if (value) { + const beforeAs = tokenizer.p; + const asStr = tokenizer.readIdentifier(); + let alias; + if (asStr.content === 'as') + alias = tokenizer.readIdentifier(); + else + tokenizer.p = beforeAs; + this[keyword.content] = { value, alias: alias && alias.content }; + tokenizer.skipBlank(); + if (tokenizer.peek() === ',') + tokenizer.advance(); + // matched! + continue; + } + } + } + /** + * restore cursor if with/for not matched + */ + tokenizer.p = begin; + break; + } + this.hash = new types_1.Hash(tokenizer.remaining()); + }, + render: function* (ctx, emitter) { + const { liquid, hash } = this; + const filepath = yield this.renderFilePath(this['file'], ctx, liquid); + (0, assert_1.assert)(filepath, () => `illegal filename "${filepath}"`); + const childCtx = new types_1.Context({}, ctx.opts, { sync: ctx.sync, globals: ctx.globals, strictVariables: ctx.strictVariables }); + const scope = childCtx.bottom(); + (0, tslib_1.__assign)(scope, yield hash.render(ctx)); + if (this['with']) { + const { value, alias } = this['with']; + scope[alias || filepath] = (0, types_1.evalToken)(value, ctx); + } + if (this['for']) { + const { value, alias } = this['for']; + let collection = (0, types_1.evalToken)(value, ctx); + collection = (0, collection_1.toEnumerable)(collection); + scope['forloop'] = new forloop_drop_1.ForloopDrop(collection.length, value.getText(), alias); + for (const item of collection) { + scope[alias] = item; + const templates = yield liquid._parsePartialFile(filepath, childCtx.sync, this['currentFile']); + yield liquid.renderer.renderTemplates(templates, childCtx, emitter); + scope['forloop'].next(); + } + } + else { + const templates = yield liquid._parsePartialFile(filepath, childCtx.sync, this['currentFile']); + yield liquid.renderer.renderTemplates(templates, childCtx, emitter); + } + } +}; +/** + * @return null for "none", + * @return Template[] for quoted with tags and/or filters + * @return Token for expression (not quoted) + * @throws TypeError if cannot read next token + */ +function parseFilePath(tokenizer, liquid) { + if (liquid.options.dynamicPartials) { + const file = tokenizer.readValue(); + if (file === undefined) + throw new TypeError(`illegal argument "${tokenizer.input}"`); + if (file.getText() === 'none') + return null; + if (types_1.TypeGuards.isQuotedToken(file)) { + // for filenames like "files/{{file}}", eval as liquid template + const templates = liquid.parse((0, types_1.evalQuotedToken)(file)); + return optimize(templates); + } + return file; + } + const tokens = [...tokenizer.readFileNameTemplate(liquid.options)]; + const templates = optimize(liquid.parser.parseTokens(tokens)); + return templates === 'none' ? null : templates; +} +exports.parseFilePath = parseFilePath; +function optimize(templates) { + // for filenames like "files/file.liquid", extract the string directly + if (templates.length === 1 && types_1.TypeGuards.isHTMLToken(templates[0].token)) + return templates[0].token.getContent(); + return templates; +} +function renderFilePath(file, ctx, liquid) { + if (typeof file === 'string') + return file; + if (Array.isArray(file)) + return liquid.renderer.renderTemplates(file, ctx); + return (0, types_1.evalToken)(file, ctx); +} +exports.renderFilePath = renderFilePath; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVuZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpcXVpZGpzL2J1aWx0aW4vdGFncy9yZW5kZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsaUNBQWdDO0FBQ2hDLDhDQUEwQztBQUMxQywwREFBcUQ7QUFDckQsc0RBQW9EO0FBRXBELHVDQUFrSjtBQUVsSixrQkFBZTtJQUNiLGFBQWE7SUFDYixjQUFjO0lBQ2QsS0FBSyxFQUFFLFVBQVUsS0FBZTtRQUM5QixNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFBO1FBQ3ZCLE1BQU0sU0FBUyxHQUFHLElBQUksaUJBQVMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLENBQUE7UUFDeEUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQTtRQUN6RCxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQTtRQUNoQyxPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxFQUFFO1lBQ3ZCLFNBQVMsQ0FBQyxTQUFTLEVBQUUsQ0FBQTtZQUNyQixNQUFNLEtBQUssR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFBO1lBQ3pCLE1BQU0sT0FBTyxHQUFHLFNBQVMsQ0FBQyxjQUFjLEVBQUUsQ0FBQTtZQUMxQyxJQUFJLE9BQU8sQ0FBQyxPQUFPLEtBQUssTUFBTSxJQUFJLE9BQU8sQ0FBQyxPQUFPLEtBQUssS0FBSyxFQUFFO2dCQUMzRCxTQUFTLENBQUMsU0FBUyxFQUFFLENBQUE7Z0JBQ3JCLGtEQUFrRDtnQkFDbEQsSUFBSSxTQUFTLENBQUMsSUFBSSxFQUFFLEtBQUssR0FBRyxFQUFFO29CQUM1QixNQUFNLEtBQUssR0FBRyxTQUFTLENBQUMsU0FBUyxFQUFFLENBQUE7b0JBQ25D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 \ No newline at end of file diff --git a/packages/osrl/liquidjs/builtin/tags/tablerow.d.ts b/packages/osrl/liquidjs/builtin/tags/tablerow.d.ts new file mode 100644 index 00000000..48b3e2c6 --- /dev/null +++ b/packages/osrl/liquidjs/builtin/tags/tablerow.d.ts @@ -0,0 +1,3 @@ +import { TagImplOptions } from '../../types'; +declare const _default: TagImplOptions; +export default _default; diff --git a/packages/osrl/liquidjs/builtin/tags/tablerow.js b/packages/osrl/liquidjs/builtin/tags/tablerow.js new file mode 100644 index 00000000..e31f9d60 --- /dev/null +++ b/packages/osrl/liquidjs/builtin/tags/tablerow.js @@ -0,0 +1,55 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const collection_1 = require("../../util/collection"); +const types_1 = require("../../types"); +const tablerowloop_drop_1 = require("../../drop/tablerowloop-drop"); +const tokenizer_1 = require("../../parser/tokenizer"); +exports.default = { + parse: function (tagToken, remainTokens) { + const tokenizer = new tokenizer_1.Tokenizer(tagToken.args, this.liquid.options.operatorsTrie); + const variable = tokenizer.readIdentifier(); + tokenizer.skipBlank(); + const tmp = tokenizer.readIdentifier(); + (0, types_1.assert)(tmp && tmp.content === 'in', () => `illegal tag: ${tagToken.getText()}`); + this.variable = variable.content; + this.collection = tokenizer.readValue(); + this.hash = new types_1.Hash(tokenizer.remaining()); + this.templates = []; + let p; + const stream = this.liquid.parser.parseStream(remainTokens) + .on('start', () => (p = this.templates)) + .on('tag:endtablerow', () => stream.stop()) + .on('template', (tpl) => p.push(tpl)) + .on('end', () => { + throw new Error(`tag ${tagToken.getText()} not closed`); + }); + stream.start(); + }, + render: function* (ctx, emitter) { + let collection = (0, collection_1.toEnumerable)(yield (0, types_1.evalToken)(this.collection, ctx)); + const hash = yield this.hash.render(ctx); + const offset = hash.offset || 0; + const limit = (hash.limit === undefined) ? collection.length : hash.limit; + collection = collection.slice(offset, offset + limit); + const cols = hash.cols || collection.length; + const r = this.liquid.renderer; + const tablerowloop = new tablerowloop_drop_1.TablerowloopDrop(collection.length, cols, this.collection.getText(), this.variable); + const scope = { tablerowloop }; + ctx.push(scope); + for (let idx = 0; idx < collection.length; idx++, tablerowloop.next()) { + scope[this.variable] = collection[idx]; + if (tablerowloop.col0() === 0) { + if (tablerowloop.row() !== 1) + emitter.write(''); + emitter.write(``); + } + emitter.write(``); + yield r.renderTemplates(this.templates, ctx, emitter); + emitter.write(''); + } + if (collection.length) + emitter.write(''); + ctx.pop(); + } +}; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGVyb3cuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGlxdWlkanMvYnVpbHRpbi90YWdzL3RhYmxlcm93LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsc0RBQW9EO0FBQ3BELHVDQUF1STtBQUN2SSxvRUFBK0Q7QUFDL0Qsc0RBQWtEO0FBRWxELGtCQUFlO0lBQ2IsS0FBSyxFQUFFLFVBQVUsUUFBa0IsRUFBRSxZQUE2QjtRQUNoRSxNQUFNLFNBQVMsR0FBRyxJQUFJLHFCQUFTLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQTtRQUVqRixNQUFNLFFBQVEsR0FBRyxTQUFTLENBQUMsY0FBYyxFQUFFLENBQUE7UUFDM0MsU0FBUyxDQUFDLFNBQVMsRUFBRSxDQUFBO1FBRXJCLE1BQU0sR0FBRyxHQUFHLFNBQVMsQ0FBQyxjQUFjLEVBQUUsQ0FBQTtRQUN0QyxJQUFBLGNBQU0sRUFBQyxHQUFHLElBQUksR0FBRyxDQUFDLE9BQU8sS0FBSyxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUMsZ0JBQWdCLFFBQVEsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUE7UUFFL0UsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFBO1FBQ2hDLElBQUksQ0FBQyxVQUFVLEdBQUcsU0FBUyxDQUFDLFNBQVMsRUFBRSxDQUFBO1FBQ3ZDLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxZQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUE7UUFDM0MsSUFBSSxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUE7UUFFbkIsSUFBSSxDQUFDLENBQUE7UUFDTCxNQUFNLE1BQU0sR0FBZ0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQzthQUNyRSxFQUFFLENBQUMsT0FBTyxFQUFF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 \ No newline at end of file diff --git a/packages/osrl/liquidjs/builtin/tags/unless.d.ts b/packages/osrl/liquidjs/builtin/tags/unless.d.ts new file mode 100644 index 00000000..48b3e2c6 --- /dev/null +++ b/packages/osrl/liquidjs/builtin/tags/unless.d.ts @@ -0,0 +1,3 @@ +import { TagImplOptions } from '../../types'; +declare const _default: TagImplOptions; +export default _default; diff --git a/packages/osrl/liquidjs/builtin/tags/unless.js b/packages/osrl/liquidjs/builtin/tags/unless.js new file mode 100644 index 00000000..346f33b1 --- /dev/null +++ b/packages/osrl/liquidjs/builtin/tags/unless.js @@ -0,0 +1,38 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const types_1 = require("../../types"); +exports.default = { + parse: function (tagToken, remainTokens) { + this.branches = []; + this.elseTemplates = []; + let p; + this.liquid.parser.parseStream(remainTokens) + .on('start', () => this.branches.push({ + predicate: new types_1.Value(tagToken.args, this.liquid), + test: types_1.isFalsy, + templates: (p = []) + })) + .on('tag:elsif', (token) => this.branches.push({ + predicate: new types_1.Value(token.args, this.liquid), + test: types_1.isTruthy, + templates: (p = []) + })) + .on('tag:else', () => (p = this.elseTemplates)) + .on('tag:endunless', function () { this.stop(); }) + .on('template', (tpl) => p.push(tpl)) + .on('end', () => { throw new Error(`tag ${tagToken.getText()} not closed`); }) + .start(); + }, + render: function* (ctx, emitter) { + const r = this.liquid.renderer; + for (const { predicate, test, templates } of this.branches) { + const value = yield predicate.value(ctx, ctx.opts.lenientIf); + if (test(value, ctx)) { + yield r.renderTemplates(templates, ctx, emitter); + return; + } + } + yield r.renderTemplates(this.elseTemplates, ctx, emitter); + } +}; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW5sZXNzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpcXVpZGpzL2J1aWx0aW4vdGFncy91bmxlc3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSx1Q0FBMkg7QUFFM0gsa0JBQWU7SUFDYixLQUFLLEVBQUUsVUFBVSxRQUFrQixFQUFFLFlBQTZCO1FBQ2hFLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFBO1FBQ2xCLElBQUksQ0FBQyxhQUFhLEdBQUcsRUFBRSxDQUFBO1FBQ3ZCLElBQUksQ0FBQyxDQUFBO1FBQ0wsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQzthQUN6QyxFQUFFLENBQUMsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDO1lBQ3BDLFNBQVMsRUFBRSxJQUFJLGFBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUM7WUFDaEQsSUFBSSxFQUFFLGVBQU87WUFDYixTQUFTLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO1NBQ3BCLENBQUMsQ0FBQzthQUNGLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxLQUFlLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDO1lBQ3ZELFNBQVMsRUFBRSxJQUFJLGFBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUM7WUFDN0MsSUFBSSxFQUFFLGdCQUFRO1lBQ2QsU0FBUyxFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztTQUNwQixDQUFDLENBQUM7YUFDRixFQUFFLENBQUMsVUFBVSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQzthQUM5QyxFQUFFLENBQUMsZUFBZSxFQUFFLGNBQWMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFBLENBQUMsQ0FBQyxDQUFDO2FBQ2hELEVBQUUsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxHQUFhLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7YUFDOUMsRUFBRSxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsR0FBRyxNQUFNLElBQUksS0FBSyxDQUFDLE9BQU8sUUFBUSxDQUFDLE9BQU8sRUFBRSxhQUFhLENBQUMsQ0FBQSxDQUFDLENBQUMsQ0FBQzthQUM1RSxLQUFLLEVBQUUsQ0FBQTtJQUNaLENBQUM7SUFFRCxNQUFNLEVBQUUsUUFBUyxDQUFDLEVBQUUsR0FBWSxFQUFFLE9BQWdCO1FBQ2hELE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFBO1FBRTlCLEtBQUssTUFBTSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUMxRCxNQUFNLEtBQUssR0FBRyxNQUFNLFNBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUE7WUFDNUQsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxFQUFFO2dCQUNwQixNQUFNLENBQUMsQ0FBQyxlQUFlLENBQUMsU0FBUyxFQUFFLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQTtnQkFDaEQsT0FBTTthQUNQO1NBQ0Y7UUFFRCxNQUFNLENBQUMsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxHQUFHLEVBQUUsT0FBTyxDQUFDLENBQUE7SUFDM0QsQ0FBQztDQUNnQixDQUFBIn0= \ No newline at end of file diff --git a/packages/osrl/liquidjs/cache/cache.d.ts b/packages/osrl/liquidjs/cache/cache.d.ts new file mode 100644 index 00000000..57debad0 --- /dev/null +++ b/packages/osrl/liquidjs/cache/cache.d.ts @@ -0,0 +1,7 @@ +import type { Template } from '../template/template'; +export interface Cache { + write(key: string, value: T): void | Promise; + read(key: string): T | undefined | Promise; + remove(key: string): void | Promise; +} +export type LiquidCache = Cache>; diff --git a/packages/osrl/liquidjs/cache/cache.js b/packages/osrl/liquidjs/cache/cache.js new file mode 100644 index 00000000..72e8be9f --- /dev/null +++ b/packages/osrl/liquidjs/cache/cache.js @@ -0,0 +1,3 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FjaGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbGlxdWlkanMvY2FjaGUvY2FjaGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiJ9 \ No newline at end of file diff --git a/packages/osrl/liquidjs/cache/lru.d.ts b/packages/osrl/liquidjs/cache/lru.d.ts new file mode 100644 index 00000000..9532ed14 --- /dev/null +++ b/packages/osrl/liquidjs/cache/lru.d.ts @@ -0,0 +1,14 @@ +import { Cache } from './cache'; +export declare class LRU implements Cache { + limit: number; + size: number; + private cache; + private head; + private tail; + constructor(limit: number, size?: number); + write(key: string, value: T): void; + read(key: string): T | undefined; + remove(key: string): void; + clear(): void; + private ensureLimit; +} diff --git a/packages/osrl/liquidjs/cache/lru.js b/packages/osrl/liquidjs/cache/lru.js new file mode 100644 index 00000000..986684a8 --- /dev/null +++ b/packages/osrl/liquidjs/cache/lru.js @@ -0,0 +1,62 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.LRU = void 0; +class Node { + constructor(key, value, next, prev) { + this.key = key; + this.value = value; + this.next = next; + this.prev = prev; + } +} +class LRU { + constructor(limit, size = 0) { + this.limit = limit; + this.size = size; + this.cache = {}; + this.head = new Node('HEAD', null, null, null); + this.tail = new Node('TAIL', null, null, null); + this.head.next = this.tail; + this.tail.prev = this.head; + } + write(key, value) { + if (this.cache[key]) { + this.cache[key].value = value; + } + else { + const node = new Node(key, value, this.head.next, this.head); + this.head.next.prev = node; + this.head.next = node; + this.cache[key] = node; + this.size++; + this.ensureLimit(); + } + } + read(key) { + if (!this.cache[key]) + return; + const { value } = this.cache[key]; + this.remove(key); + this.write(key, value); + return value; + } + remove(key) { + const node = this.cache[key]; + node.prev.next = node.next; + node.next.prev = node.prev; + delete this.cache[key]; + this.size--; + } + clear() { + this.head.next = this.tail; + this.tail.prev = this.head; + this.size = 0; + this.cache = {}; + } + ensureLimit() { + if (this.size > this.limit) + this.remove(this.tail.prev.key); + } +} +exports.LRU = LRU; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibHJ1LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xpcXVpZGpzL2NhY2hlL2xydS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFFQSxNQUFNLElBQUk7SUFDUixZQUNTLEdBQVcsRUFDWCxLQUFRLEVBQ1IsSUFBYSxFQUNiLElBQWE7UUFIYixRQUFHLEdBQUgsR0FBRyxDQUFRO1FBQ1gsVUFBSyxHQUFMLEtBQUssQ0FBRztRQUNSLFNBQUksR0FBSixJQUFJLENBQVM7UUFDYixTQUFJLEdBQUosSUFBSSxDQUFTO0lBQ25CLENBQUM7Q0FDTDtBQUVELE1BQWEsR0FBRztJQUtkLFlBQ1MsS0FBYSxFQUNiLE9BQU8sQ0FBQztRQURSLFVBQUssR0FBTCxLQUFLLENBQVE7UUFDYixTQUFJLEdBQUosSUFBSSxDQUFJO1FBTlQsVUFBSyxHQUErQixFQUFFLENBQUE7UUFRNUMsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLElBQUksQ0FBSSxNQUFNLEVBQUUsSUFBVyxFQUFFLElBQVcsRUFBRSxJQUFXLENBQUMsQ0FBQTtRQUN0RSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksSUFBSSxDQUFJLE1BQU0sRUFBRSxJQUFXLEVBQUUsSUFBVyxFQUFFLElBQVcsQ0FBQyxDQUFBO1FBQ3RFLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUE7UUFDMUIsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQTtJQUM1QixDQUFDO0lBRUQsS0FBSyxDQUFFLEdBQVcsRUFBRSxLQUFRO1FBQzFCLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUNuQixJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUE7U0FDOUI7YUFBTTtZQUNMLE1BQU0sSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFBO1lBQzVELElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUE7WUFDMUIsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFBO1lBRXJCLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFBO1lBQ3RCLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQTtZQUNYLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQTtTQUNuQjtJQUNILENBQUM7SUFFRCxJQUFJLENBQUUsR0FBVztRQUNmLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQztZQUFFLE9BQU07UUFDNUIsTUFBTSxFQUFFLEtBQUssRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUE7UUFDakMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQTtRQUNoQixJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQTtRQUN0QixPQUFPLEtBQUssQ0FBQTtJQUNkLENBQUM7SUFFRCxNQUFNLENBQUUsR0FBVztRQUNqQixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFBO1FBQzVCLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUE7UUFDMUIsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQTtRQUMxQixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUE7UUFDdEIsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFBO0lBQ2IsQ0FBQztJQUVELEtBQUs7UUFDSCxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFBO1FBQzFCLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUE7UUFDMUIsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUE7UUFDYixJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQTtJQUNqQixDQUFDO0lBRU8sV0FBVztRQUNqQixJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUs7WUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFBO0lBQzdELENBQUM7Q0FDRjtBQXZERCxrQkF1REMifQ== \ No newline at end of file diff --git a/packages/osrl/liquidjs/context/block-mode.d.ts b/packages/osrl/liquidjs/context/block-mode.d.ts new file mode 100644 index 00000000..3f0bc6c8 --- /dev/null +++ b/packages/osrl/liquidjs/context/block-mode.d.ts @@ -0,0 +1,5 @@ +declare enum BlockMode { + OUTPUT = 0, + STORE = 1 +} +export default BlockMode; diff --git a/packages/osrl/liquidjs/context/block-mode.js b/packages/osrl/liquidjs/context/block-mode.js new file mode 100644 index 00000000..b51ba283 --- /dev/null +++ b/packages/osrl/liquidjs/context/block-mode.js @@ -0,0 +1,11 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +var BlockMode; +(function (BlockMode) { + /* store rendered html into blocks */ + BlockMode[BlockMode["OUTPUT"] = 0] = "OUTPUT"; + /* output rendered html directly */ + BlockMode[BlockMode["STORE"] = 1] = "STORE"; +})(BlockMode || (BlockMode = {})); +exports.default = BlockMode; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmxvY2stbW9kZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saXF1aWRqcy9jb250ZXh0L2Jsb2NrLW1vZGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxJQUFLLFNBS0o7QUFMRCxXQUFLLFNBQVM7SUFDWixxQ0FBcUM7SUFDckMsNkNBQU0sQ0FBQTtJQUNOLG1DQUFtQztJQUNuQywyQ0FBSyxDQUFBO0FBQ1AsQ0FBQyxFQUxJLFNBQVMsS0FBVCxTQUFTLFFBS2I7QUFFRCxrQkFBZSxTQUFTLENBQUEifQ== \ No newline at end of file diff --git a/packages/osrl/liquidjs/context/context.d.ts b/packages/osrl/liquidjs/context/context.d.ts new file mode 100644 index 00000000..744ce2e3 --- /dev/null +++ b/packages/osrl/liquidjs/context/context.d.ts @@ -0,0 +1,45 @@ +import { NormalizedFullOptions, RenderOptions } from '../liquid-options'; +import { Scope } from './scope'; +type PropertyKey = string | number; +export declare class Context { + /** + * insert a Context-level empty scope, + * for tags like `{% capture %}` `{% assign %}` to operate + */ + private scopes; + private registers; + /** + * user passed in scope + * `{% increment %}`, `{% decrement %}` changes this scope, + * whereas `{% capture %}`, `{% assign %}` only hide this scope + */ + environments: Scope; + /** + * global scope used as fallback for missing variables + */ + globals: Scope; + sync: boolean; + /** + * The normalized liquid options object + */ + opts: NormalizedFullOptions; + /** + * Throw when accessing undefined variable? + */ + strictVariables: boolean; + constructor(env?: object, opts?: NormalizedFullOptions, renderOptions?: RenderOptions); + getRegister(key: string): any; + setRegister(key: string, value: any): any; + saveRegister(...keys: string[]): [string, any][]; + restoreRegister(keyValues: [string, any][]): void; + getAll(): any; + get(paths: PropertyKey[]): object; + getFromScope(scope: object, paths: PropertyKey[] | string): object; + push(ctx: object): number; + pop(): Scope; + bottom(): Scope; + private findScope; +} +export declare function readProperty(obj: Scope, key: PropertyKey, ownPropertyOnly: boolean): any; +export declare function readJSProperty(obj: Scope, key: PropertyKey, ownPropertyOnly: boolean): any; +export {}; diff --git a/packages/osrl/liquidjs/context/context.js b/packages/osrl/liquidjs/context/context.js new file mode 100644 index 00000000..a6ef50b0 --- /dev/null +++ b/packages/osrl/liquidjs/context/context.js @@ -0,0 +1,120 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.readJSProperty = exports.readProperty = exports.Context = void 0; +const drop_1 = require("../drop/drop"); +const tslib_1 = require("tslib"); +const liquid_options_1 = require("../liquid-options"); +const underscore_1 = require("../util/underscore"); +const error_1 = require("../util/error"); +class Context { + constructor(env = {}, opts = liquid_options_1.defaultOptions, renderOptions = {}) { + var _a, _b; + /** + * insert a Context-level empty scope, + * for tags like `{% capture %}` `{% assign %}` to operate + */ + this.scopes = [{}]; + this.registers = {}; + this.sync = !!renderOptions.sync; + this.opts = opts; + this.globals = (_a = renderOptions.globals) !== null && _a !== void 0 ? _a : opts.globals; + this.environments = env; + this.strictVariables = (_b = renderOptions.strictVariables) !== null && _b !== void 0 ? _b : this.opts.strictVariables; + } + getRegister(key) { + return (this.registers[key] = this.registers[key] || {}); + } + setRegister(key, value) { + return (this.registers[key] = value); + } + saveRegister(...keys) { + return keys.map(key => [key, this.getRegister(key)]); + } + restoreRegister(keyValues) { + return keyValues.forEach(([key, value]) => this.setRegister(key, value)); + } + getAll() { + return [this.globals, this.environments, ...this.scopes] + .reduce((ctx, val) => (0, tslib_1.__assign)(ctx, val), {}); + } + get(paths) { + const scope = this.findScope(paths[0]); + return this.getFromScope(scope, paths); + } + getFromScope(scope, paths) { + if ((0, underscore_1.isString)(paths)) + paths = paths.split('.'); + return paths.reduce((scope, path, i) => { + scope = readProperty(scope, path, this.opts.ownPropertyOnly); + if ((0, underscore_1.isNil)(scope) && this.strictVariables) { + throw new error_1.InternalUndefinedVariableError(paths.slice(0, i + 1).join('.')); + } + return scope; + }, scope); + } + push(ctx) { + return this.scopes.push(ctx); + } + pop() { + return this.scopes.pop(); + } + bottom() { + return this.scopes[0]; + } + findScope(key) { + for (let i = this.scopes.length - 1; i >= 0; i--) { + const candidate = this.scopes[i]; + if (key in candidate) + return candidate; + } + if (key in this.environments) + return this.environments; + return this.globals; + } +} +exports.Context = Context; +function readProperty(obj, key, ownPropertyOnly) { + if ((0, underscore_1.isNil)(obj)) + return obj; + obj = (0, underscore_1.toLiquid)(obj); + if ((0, underscore_1.isArray)(obj) && key < 0) + return obj[obj.length + +key]; + const jsProperty = readJSProperty(obj, key, ownPropertyOnly); + if (jsProperty === undefined && obj instanceof drop_1.Drop) + return obj.liquidMethodMissing(key); + if ((0, underscore_1.isFunction)(jsProperty)) + return jsProperty.call(obj); + if (key === 'size') + return readSize(obj); + else if (key === 'first') + return readFirst(obj); + else if (key === 'last') + return readLast(obj); + return jsProperty; +} +exports.readProperty = readProperty; +function readJSProperty(obj, key, ownPropertyOnly) { + if (ownPropertyOnly && !Object.hasOwnProperty.call(obj, key)) + return undefined; + return obj[key]; +} +exports.readJSProperty = readJSProperty; +function readFirst(obj) { + if ((0, underscore_1.isArray)(obj)) + return obj[0]; + return obj['first']; +} +function readLast(obj) { + if ((0, underscore_1.isArray)(obj)) + return obj[obj.length - 1]; + return obj['last']; +} +function readSize(obj) { + if (obj.hasOwnProperty('size') || obj['size'] !== undefined) + return obj['size']; + if ((0, underscore_1.isArray)(obj) || (0, underscore_1.isString)(obj)) + return obj.length; + if (typeof obj === 'object') + return Object.keys(obj).length; +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saXF1aWRqcy9jb250ZXh0L2NvbnRleHQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsdUNBQW1DO0FBQ25DLGlDQUFnQztBQUNoQyxzREFBd0Y7QUFFeEYsbURBQW1GO0FBQ25GLHlDQUE4RDtBQUk5RCxNQUFhLE9BQU87SUEwQmxCLFlBQW9CLE1BQWMsRUFBRSxFQUFFLE9BQThCLCtCQUFjLEVBQUUsZ0JBQStCLEVBQUU7O1FBekJySDs7O1dBR0c7UUFDSyxXQUFNLEdBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQTtRQUN0QixjQUFTLEdBQUcsRUFBRSxDQUFBO1FBcUJwQixJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFBO1FBQ2hDLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFBO1FBQ2hCLElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBQSxhQUFhLENBQUMsT0FBTyxtQ0FBSSxJQUFJLENBQUMsT0FBTyxDQUFBO1FBQ3BELElBQUksQ0FBQyxZQUFZLEdBQUcsR0FBRyxDQUFBO1FBQ3ZCLElBQUksQ0FBQyxlQUFlLEdBQUcsTUFBQSxhQUFhLENBQUMsZUFBZSxtQ0FBSSxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQTtJQUNuRixDQUFDO0lBQ00sV0FBVyxDQUFFLEdBQVc7UUFDN0IsT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQTtJQUMxRCxDQUFDO0lBQ00sV0FBVyxDQUFFLEdBQVcsRUFBRSxLQUFVO1FBQ3pDLE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFBO0lBQ3RDLENBQUM7SUFDTSxZQUFZLENBQUUsR0FBRyxJQUFjO1FB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 \ No newline at end of file diff --git a/packages/osrl/liquidjs/context/scope.d.ts b/packages/osrl/liquidjs/context/scope.d.ts new file mode 100644 index 00000000..438fb059 --- /dev/null +++ b/packages/osrl/liquidjs/context/scope.d.ts @@ -0,0 +1,6 @@ +import { Drop } from '../drop/drop'; +export interface PlainObject { + [key: string]: any; + toLiquid?: () => any; +} +export type Scope = PlainObject | Drop; diff --git a/packages/osrl/liquidjs/context/scope.js b/packages/osrl/liquidjs/context/scope.js new file mode 100644 index 00000000..a5e7a3f2 --- /dev/null +++ b/packages/osrl/liquidjs/context/scope.js @@ -0,0 +1,3 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NvcGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbGlxdWlkanMvY29udGV4dC9zY29wZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIn0= \ No newline at end of file diff --git a/packages/osrl/liquidjs/drop/blank-drop.d.ts b/packages/osrl/liquidjs/drop/blank-drop.d.ts new file mode 100644 index 00000000..a98555b8 --- /dev/null +++ b/packages/osrl/liquidjs/drop/blank-drop.d.ts @@ -0,0 +1,4 @@ +import { EmptyDrop } from '../drop/empty-drop'; +export declare class BlankDrop extends EmptyDrop { + equals(value: any): boolean; +} diff --git a/packages/osrl/liquidjs/drop/blank-drop.js b/packages/osrl/liquidjs/drop/blank-drop.js new file mode 100644 index 00000000..314f15dc --- /dev/null +++ b/packages/osrl/liquidjs/drop/blank-drop.js @@ -0,0 +1,18 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.BlankDrop = void 0; +const underscore_1 = require("../util/underscore"); +const empty_drop_1 = require("../drop/empty-drop"); +class BlankDrop extends empty_drop_1.EmptyDrop { + equals(value) { + if (value === false) + return true; + if ((0, underscore_1.isNil)((0, underscore_1.toValue)(value))) + return true; + if ((0, underscore_1.isString)(value)) + return /^\s*$/.test(value); + return super.equals(value); + } +} +exports.BlankDrop = BlankDrop; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmxhbmstZHJvcC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saXF1aWRqcy9kcm9wL2JsYW5rLWRyb3AudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsbURBQTZEO0FBQzdELG1EQUE4QztBQUU5QyxNQUFhLFNBQVUsU0FBUSxzQkFBUztJQUMvQixNQUFNLENBQUUsS0FBVTtRQUN2QixJQUFJLEtBQUssS0FBSyxLQUFLO1lBQUUsT0FBTyxJQUFJLENBQUE7UUFDaEMsSUFBSSxJQUFBLGtCQUFLLEVBQUMsSUFBQSxvQkFBTyxFQUFDLEtBQUssQ0FBQyxDQUFDO1lBQUUsT0FBTyxJQUFJLENBQUE7UUFDdEMsSUFBSSxJQUFBLHFCQUFRLEVBQUMsS0FBSyxDQUFDO1lBQUUsT0FBTyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBQy9DLE9BQU8sS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUM1QixDQUFDO0NBQ0Y7QUFQRCw4QkFPQyJ9 \ No newline at end of file diff --git a/packages/osrl/liquidjs/drop/block-drop.d.ts b/packages/osrl/liquidjs/drop/block-drop.d.ts new file mode 100644 index 00000000..d46eb6ff --- /dev/null +++ b/packages/osrl/liquidjs/drop/block-drop.d.ts @@ -0,0 +1,10 @@ +import { Drop } from './drop'; +export declare class BlockDrop extends Drop { + private superBlockRender; + constructor(superBlockRender?: () => Iterable); + /** + * Provide parent access in child block by + * {{ block.super }} + */ + super(): Iterable; +} diff --git a/packages/osrl/liquidjs/drop/block-drop.js b/packages/osrl/liquidjs/drop/block-drop.js new file mode 100644 index 00000000..c5f215ee --- /dev/null +++ b/packages/osrl/liquidjs/drop/block-drop.js @@ -0,0 +1,21 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.BlockDrop = void 0; +const drop_1 = require("./drop"); +class BlockDrop extends drop_1.Drop { + constructor( + // the block render from layout template + superBlockRender = () => '') { + super(); + this.superBlockRender = superBlockRender; + } + /** + * Provide parent access in child block by + * {{ block.super }} + */ + super() { + return this.superBlockRender(); + } +} +exports.BlockDrop = BlockDrop; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmxvY2stZHJvcC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saXF1aWRqcy9kcm9wL2Jsb2NrLWRyb3AudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsaUNBQTZCO0FBRTdCLE1BQWEsU0FBVSxTQUFRLFdBQUk7SUFDakM7SUFDRSx3Q0FBd0M7SUFDaEMsbUJBQXdDLEdBQUcsRUFBRSxDQUFDLEVBQUU7UUFFeEQsS0FBSyxFQUFFLENBQUE7UUFGQyxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWdDO0lBRzFELENBQUM7SUFDRDs7O09BR0c7SUFDSSxLQUFLO1FBQ1YsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQTtJQUNoQyxDQUFDO0NBQ0Y7QUFkRCw4QkFjQyJ9 \ No newline at end of file diff --git a/packages/osrl/liquidjs/drop/comparable.d.ts b/packages/osrl/liquidjs/drop/comparable.d.ts new file mode 100644 index 00000000..fc0e1e01 --- /dev/null +++ b/packages/osrl/liquidjs/drop/comparable.d.ts @@ -0,0 +1,8 @@ +export interface Comparable { + equals: (rhs: any) => boolean; + gt: (rhs: any) => boolean; + geq: (rhs: any) => boolean; + lt: (rhs: any) => boolean; + leq: (rhs: any) => boolean; +} +export declare function isComparable(arg: any): arg is Comparable; diff --git a/packages/osrl/liquidjs/drop/comparable.js b/packages/osrl/liquidjs/drop/comparable.js new file mode 100644 index 00000000..93c08b2a --- /dev/null +++ b/packages/osrl/liquidjs/drop/comparable.js @@ -0,0 +1,9 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.isComparable = void 0; +const underscore_1 = require("../util/underscore"); +function isComparable(arg) { + return arg && (0, underscore_1.isFunction)(arg.equals); +} +exports.isComparable = isComparable; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcGFyYWJsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saXF1aWRqcy9kcm9wL2NvbXBhcmFibGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsbURBQStDO0FBVS9DLFNBQWdCLFlBQVksQ0FBRSxHQUFRO0lBQ3BDLE9BQU8sR0FBRyxJQUFJLElBQUEsdUJBQVUsRUFBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUE7QUFDdEMsQ0FBQztBQUZELG9DQUVDIn0= \ No newline at end of file diff --git a/packages/osrl/liquidjs/drop/drop.d.ts b/packages/osrl/liquidjs/drop/drop.d.ts new file mode 100644 index 00000000..39c838c9 --- /dev/null +++ b/packages/osrl/liquidjs/drop/drop.d.ts @@ -0,0 +1,3 @@ +export declare abstract class Drop { + liquidMethodMissing(key: string | number): Promise | string | undefined; +} diff --git a/packages/osrl/liquidjs/drop/drop.js b/packages/osrl/liquidjs/drop/drop.js new file mode 100644 index 00000000..04c67527 --- /dev/null +++ b/packages/osrl/liquidjs/drop/drop.js @@ -0,0 +1,10 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.Drop = void 0; +class Drop { + liquidMethodMissing(key) { + return undefined; + } +} +exports.Drop = Drop; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saXF1aWRqcy9kcm9wL2Ryb3AudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsTUFBc0IsSUFBSTtJQUNqQixtQkFBbUIsQ0FBRSxHQUFvQjtRQUM5QyxPQUFPLFNBQVMsQ0FBQTtJQUNsQixDQUFDO0NBQ0Y7QUFKRCxvQkFJQyJ9 \ No newline at end of file diff --git a/packages/osrl/liquidjs/drop/empty-drop.d.ts b/packages/osrl/liquidjs/drop/empty-drop.d.ts new file mode 100644 index 00000000..08e86222 --- /dev/null +++ b/packages/osrl/liquidjs/drop/empty-drop.d.ts @@ -0,0 +1,10 @@ +import { Drop } from './drop'; +import { Comparable } from './comparable'; +export declare class EmptyDrop extends Drop implements Comparable { + equals(value: any): boolean; + gt(): boolean; + geq(): boolean; + lt(): boolean; + leq(): boolean; + valueOf(): string; +} diff --git a/packages/osrl/liquidjs/drop/empty-drop.js b/packages/osrl/liquidjs/drop/empty-drop.js new file mode 100644 index 00000000..36a16447 --- /dev/null +++ b/packages/osrl/liquidjs/drop/empty-drop.js @@ -0,0 +1,34 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.EmptyDrop = void 0; +const drop_1 = require("./drop"); +const underscore_1 = require("../util/underscore"); +class EmptyDrop extends drop_1.Drop { + equals(value) { + if (value instanceof EmptyDrop) + return false; + value = (0, underscore_1.toValue)(value); + if ((0, underscore_1.isString)(value) || (0, underscore_1.isArray)(value)) + return value.length === 0; + if ((0, underscore_1.isObject)(value)) + return Object.keys(value).length === 0; + return false; + } + gt() { + return false; + } + geq() { + return false; + } + lt() { + return false; + } + leq() { + return false; + } + valueOf() { + return ''; + } +} +exports.EmptyDrop = EmptyDrop; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW1wdHktZHJvcC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saXF1aWRqcy9kcm9wL2VtcHR5LWRyb3AudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsaUNBQTZCO0FBRTdCLG1EQUF5RTtBQUV6RSxNQUFhLFNBQVUsU0FBUSxXQUFJO0lBQzFCLE1BQU0sQ0FBRSxLQUFVO1FBQ3ZCLElBQUksS0FBSyxZQUFZLFNBQVM7WUFBRSxPQUFPLEtBQUssQ0FBQTtRQUM1QyxLQUFLLEdBQUcsSUFBQSxvQkFBTyxFQUFDLEtBQUssQ0FBQyxDQUFBO1FBQ3RCLElBQUksSUFBQSxxQkFBUSxFQUFDLEtBQUssQ0FBQyxJQUFJLElBQUEsb0JBQU8sRUFBQyxLQUFLLENBQUM7WUFBRSxPQUFPLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFBO1FBQ2hFLElBQUksSUFBQSxxQkFBUSxFQUFDLEtBQUssQ0FBQztZQUFFLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFBO1FBQzNELE9BQU8sS0FBSyxDQUFBO0lBQ2QsQ0FBQztJQUNNLEVBQUU7UUFDUCxPQUFPLEtBQUssQ0FBQTtJQUNkLENBQUM7SUFDTSxHQUFHO1FBQ1IsT0FBTyxLQUFLLENBQUE7SUFDZCxDQUFDO0lBQ00sRUFBRTtRQUNQLE9BQU8sS0FBSyxDQUFBO0lBQ2QsQ0FBQztJQUNNLEdBQUc7UUFDUixPQUFPLEtBQUssQ0FBQTtJQUNkLENBQUM7SUFDTSxPQUFPO1FBQ1osT0FBTyxFQUFFLENBQUE7SUFDWCxDQUFDO0NBQ0Y7QUF2QkQsOEJBdUJDIn0= \ No newline at end of file diff --git a/packages/osrl/liquidjs/drop/forloop-drop.d.ts b/packages/osrl/liquidjs/drop/forloop-drop.d.ts new file mode 100644 index 00000000..517c014b --- /dev/null +++ b/packages/osrl/liquidjs/drop/forloop-drop.d.ts @@ -0,0 +1,15 @@ +import { Drop } from './drop'; +export declare class ForloopDrop extends Drop { + protected i: number; + name: string; + length: number; + constructor(length: number, collection: string, variable: string); + next(): void; + index0(): number; + index(): number; + first(): boolean; + last(): boolean; + rindex(): number; + rindex0(): number; + valueOf(): string; +} diff --git a/packages/osrl/liquidjs/drop/forloop-drop.js b/packages/osrl/liquidjs/drop/forloop-drop.js new file mode 100644 index 00000000..57bc3685 --- /dev/null +++ b/packages/osrl/liquidjs/drop/forloop-drop.js @@ -0,0 +1,38 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.ForloopDrop = void 0; +const drop_1 = require("./drop"); +class ForloopDrop extends drop_1.Drop { + constructor(length, collection, variable) { + super(); + this.i = 0; + this.length = length; + this.name = `${variable}-${collection}`; + } + next() { + this.i++; + } + index0() { + return this.i; + } + index() { + return this.i + 1; + } + first() { + return this.i === 0; + } + last() { + return this.i === this.length - 1; + } + rindex() { + return this.length - this.i; + } + rindex0() { + return this.length - this.i - 1; + } + valueOf() { + return JSON.stringify(this); + } +} +exports.ForloopDrop = ForloopDrop; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybG9vcC1kcm9wLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xpcXVpZGpzL2Ryb3AvZm9ybG9vcC1kcm9wLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLGlDQUE2QjtBQUU3QixNQUFhLFdBQVksU0FBUSxXQUFJO0lBSW5DLFlBQW9CLE1BQWMsRUFBRSxVQUFrQixFQUFFLFFBQWdCO1FBQ3RFLEtBQUssRUFBRSxDQUFBO1FBSkMsTUFBQyxHQUFHLENBQUMsQ0FBQTtRQUtiLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFBO1FBQ3BCLElBQUksQ0FBQyxJQUFJLEdBQUcsR0FBRyxRQUFRLElBQUksVUFBVSxFQUFFLENBQUE7SUFDekMsQ0FBQztJQUNNLElBQUk7UUFDVCxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUE7SUFDVixDQUFDO0lBQ00sTUFBTTtRQUNYLE9BQU8sSUFBSSxDQUFDLENBQUMsQ0FBQTtJQUNmLENBQUM7SUFDTSxLQUFLO1FBQ1YsT0FBTyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQTtJQUNuQixDQUFDO0lBQ00sS0FBSztRQUNWLE9BQU8sSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUE7SUFDckIsQ0FBQztJQUNNLElBQUk7UUFDVCxPQUFPLElBQUksQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUE7SUFDbkMsQ0FBQztJQUNNLE1BQU07UUFDWCxPQUFPLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQTtJQUM3QixDQUFDO0lBQ00sT0FBTztRQUNaLE9BQU8sSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQTtJQUNqQyxDQUFDO0lBQ00sT0FBTztRQUNaLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQTtJQUM3QixDQUFDO0NBQ0Y7QUFqQ0Qsa0NBaUNDIn0= \ No newline at end of file diff --git a/packages/osrl/liquidjs/drop/null-drop.d.ts b/packages/osrl/liquidjs/drop/null-drop.d.ts new file mode 100644 index 00000000..5ad60690 --- /dev/null +++ b/packages/osrl/liquidjs/drop/null-drop.d.ts @@ -0,0 +1,10 @@ +import { Drop } from './drop'; +import { Comparable } from './comparable'; +export declare class NullDrop extends Drop implements Comparable { + equals(value: any): boolean; + gt(): boolean; + geq(): boolean; + lt(): boolean; + leq(): boolean; + valueOf(): any; +} diff --git a/packages/osrl/liquidjs/drop/null-drop.js b/packages/osrl/liquidjs/drop/null-drop.js new file mode 100644 index 00000000..eda51a90 --- /dev/null +++ b/packages/osrl/liquidjs/drop/null-drop.js @@ -0,0 +1,27 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.NullDrop = void 0; +const drop_1 = require("./drop"); +const underscore_1 = require("../util/underscore"); +class NullDrop extends drop_1.Drop { + equals(value) { + return (0, underscore_1.isNil)((0, underscore_1.toValue)(value)); + } + gt() { + return false; + } + geq() { + return false; + } + lt() { + return false; + } + leq() { + return false; + } + valueOf() { + return null; + } +} +exports.NullDrop = NullDrop; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnVsbC1kcm9wLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xpcXVpZGpzL2Ryb3AvbnVsbC1kcm9wLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLGlDQUE2QjtBQUU3QixtREFBbUQ7QUFFbkQsTUFBYSxRQUFTLFNBQVEsV0FBSTtJQUN6QixNQUFNLENBQUUsS0FBVTtRQUN2QixPQUFPLElBQUEsa0JBQUssRUFBQyxJQUFBLG9CQUFPLEVBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQTtJQUM5QixDQUFDO0lBQ00sRUFBRTtRQUNQLE9BQU8sS0FBSyxDQUFBO0lBQ2QsQ0FBQztJQUNNLEdBQUc7UUFDUixPQUFPLEtBQUssQ0FBQTtJQUNkLENBQUM7SUFDTSxFQUFFO1FBQ1AsT0FBTyxLQUFLLENBQUE7SUFDZCxDQUFDO0lBQ00sR0FBRztRQUNSLE9BQU8sS0FBSyxDQUFBO0lBQ2QsQ0FBQztJQUNNLE9BQU87UUFDWixPQUFPLElBQUksQ0FBQTtJQUNiLENBQUM7Q0FDRjtBQW5CRCw0QkFtQkMifQ== \ No newline at end of file diff --git a/packages/osrl/liquidjs/drop/tablerowloop-drop.d.ts b/packages/osrl/liquidjs/drop/tablerowloop-drop.d.ts new file mode 100644 index 00000000..e04c807d --- /dev/null +++ b/packages/osrl/liquidjs/drop/tablerowloop-drop.d.ts @@ -0,0 +1,10 @@ +import { ForloopDrop } from './forloop-drop'; +export declare class TablerowloopDrop extends ForloopDrop { + private cols; + constructor(length: number, cols: number, collection: string, variable: string); + row(): number; + col0(): number; + col(): number; + col_first(): boolean; + col_last(): boolean; +} diff --git a/packages/osrl/liquidjs/drop/tablerowloop-drop.js b/packages/osrl/liquidjs/drop/tablerowloop-drop.js new file mode 100644 index 00000000..542a2e9f --- /dev/null +++ b/packages/osrl/liquidjs/drop/tablerowloop-drop.js @@ -0,0 +1,28 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.TablerowloopDrop = void 0; +const forloop_drop_1 = require("./forloop-drop"); +class TablerowloopDrop extends forloop_drop_1.ForloopDrop { + constructor(length, cols, collection, variable) { + super(length, collection, variable); + this.length = length; + this.cols = cols; + } + row() { + return Math.floor(this.i / this.cols) + 1; + } + col0() { + return (this.i % this.cols); + } + col() { + return this.col0() + 1; + } + col_first() { + return this.col0() === 0; + } + col_last() { + return this.col() === this.cols; + } +} +exports.TablerowloopDrop = TablerowloopDrop; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGVyb3dsb29wLWRyb3AuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbGlxdWlkanMvZHJvcC90YWJsZXJvd2xvb3AtZHJvcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxpREFBNEM7QUFFNUMsTUFBYSxnQkFBaUIsU0FBUSwwQkFBVztJQUUvQyxZQUFvQixNQUFjLEVBQUUsSUFBWSxFQUFFLFVBQWtCLEVBQUUsUUFBZ0I7UUFDcEYsS0FBSyxDQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUUsUUFBUSxDQUFDLENBQUE7UUFDbkMsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUE7UUFDcEIsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUE7SUFDbEIsQ0FBQztJQUNNLEdBQUc7UUFDUixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFBO0lBQzNDLENBQUM7SUFDTSxJQUFJO1FBQ1QsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFBO0lBQzdCLENBQUM7SUFDTSxHQUFHO1FBQ1IsT0FBTyxJQUFJLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFBO0lBQ3hCLENBQUM7SUFDTSxTQUFTO1FBQ2QsT0FBTyxJQUFJLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFBO0lBQzFCLENBQUM7SUFDTSxRQUFRO1FBQ2IsT0FBTyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssSUFBSSxDQUFDLElBQUksQ0FBQTtJQUNqQyxDQUFDO0NBQ0Y7QUF0QkQsNENBc0JDIn0= \ No newline at end of file diff --git a/packages/osrl/liquidjs/emitters/emitter.d.ts b/packages/osrl/liquidjs/emitters/emitter.d.ts new file mode 100644 index 00000000..6f6fd00e --- /dev/null +++ b/packages/osrl/liquidjs/emitters/emitter.d.ts @@ -0,0 +1,11 @@ +export interface Emitter { + /** + * Write a html value into emitter + * @param html string, Drop or other primitive value + */ + write(html: any): void; + /** + * Buffered string + */ + buffer: string; +} diff --git a/packages/osrl/liquidjs/emitters/emitter.js b/packages/osrl/liquidjs/emitters/emitter.js new file mode 100644 index 00000000..a13c72c2 --- /dev/null +++ b/packages/osrl/liquidjs/emitters/emitter.js @@ -0,0 +1,3 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW1pdHRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saXF1aWRqcy9lbWl0dGVycy9lbWl0dGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIifQ== \ No newline at end of file diff --git a/packages/osrl/liquidjs/emitters/keeping-type-emitter.d.ts b/packages/osrl/liquidjs/emitters/keeping-type-emitter.d.ts new file mode 100644 index 00000000..adf4432d --- /dev/null +++ b/packages/osrl/liquidjs/emitters/keeping-type-emitter.d.ts @@ -0,0 +1,5 @@ +import { Emitter } from '../types'; +export declare class KeepingTypeEmitter implements Emitter { + buffer: any; + write(html: any): void; +} diff --git a/packages/osrl/liquidjs/emitters/keeping-type-emitter.js b/packages/osrl/liquidjs/emitters/keeping-type-emitter.js new file mode 100644 index 00000000..f29b5d48 --- /dev/null +++ b/packages/osrl/liquidjs/emitters/keeping-type-emitter.js @@ -0,0 +1,24 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.KeepingTypeEmitter = void 0; +const underscore_1 = require("../util/underscore"); +class KeepingTypeEmitter { + constructor() { + this.buffer = ''; + } + write(html) { + html = (0, underscore_1.toValue)(html); + // This will only preserve the type if the value is isolated. + // I.E: + // {{ my-port }} -> 42 + // {{ my-host }}:{{ my-port }} -> 'host:42' + if (typeof html !== 'string' && this.buffer === '') { + this.buffer = html; + } + else { + this.buffer = (0, underscore_1.stringify)(this.buffer) + (0, underscore_1.stringify)(html); + } + } +} +exports.KeepingTypeEmitter = KeepingTypeEmitter; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2VlcGluZy10eXBlLWVtaXR0ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbGlxdWlkanMvZW1pdHRlcnMva2VlcGluZy10eXBlLWVtaXR0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsbURBQXVEO0FBR3ZELE1BQWEsa0JBQWtCO0lBQS9CO1FBQ1MsV0FBTSxHQUFRLEVBQUUsQ0FBQztJQWMxQixDQUFDO0lBWlEsS0FBSyxDQUFFLElBQVM7UUFDckIsSUFBSSxHQUFHLElBQUEsb0JBQU8sRUFBQyxJQUFJLENBQUMsQ0FBQTtRQUNwQiw2REFBNkQ7UUFDN0QsT0FBTztRQUNQLHNCQUFzQjtRQUN0QiwyQ0FBMkM7UUFDM0MsSUFBSSxPQUFPLElBQUksS0FBSyxRQUFRLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxFQUFFLEVBQUU7WUFDbEQsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUE7U0FDbkI7YUFBTTtZQUNMLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBQSxzQkFBUyxFQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxJQUFBLHNCQUFTLEVBQUMsSUFBSSxDQUFDLENBQUE7U0FDdkQ7SUFDSCxDQUFDO0NBQ0Y7QUFmRCxnREFlQyJ9 \ No newline at end of file diff --git a/packages/osrl/liquidjs/emitters/simple-emitter.d.ts b/packages/osrl/liquidjs/emitters/simple-emitter.d.ts new file mode 100644 index 00000000..c1c07885 --- /dev/null +++ b/packages/osrl/liquidjs/emitters/simple-emitter.d.ts @@ -0,0 +1,5 @@ +import { Emitter } from './emitter'; +export declare class SimpleEmitter implements Emitter { + buffer: string; + write(html: any): void; +} diff --git a/packages/osrl/liquidjs/emitters/simple-emitter.js b/packages/osrl/liquidjs/emitters/simple-emitter.js new file mode 100644 index 00000000..473b5672 --- /dev/null +++ b/packages/osrl/liquidjs/emitters/simple-emitter.js @@ -0,0 +1,14 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.SimpleEmitter = void 0; +const underscore_1 = require("../util/underscore"); +class SimpleEmitter { + constructor() { + this.buffer = ''; + } + write(html) { + this.buffer += (0, underscore_1.stringify)(html); + } +} +exports.SimpleEmitter = SimpleEmitter; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2ltcGxlLWVtaXR0ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbGlxdWlkanMvZW1pdHRlcnMvc2ltcGxlLWVtaXR0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsbURBQThDO0FBRzlDLE1BQWEsYUFBYTtJQUExQjtRQUNTLFdBQU0sR0FBRyxFQUFFLENBQUM7SUFLckIsQ0FBQztJQUhRLEtBQUssQ0FBRSxJQUFTO1FBQ3JCLElBQUksQ0FBQyxNQUFNLElBQUksSUFBQSxzQkFBUyxFQUFDLElBQUksQ0FBQyxDQUFBO0lBQ2hDLENBQUM7Q0FDRjtBQU5ELHNDQU1DIn0= \ No newline at end of file diff --git a/packages/osrl/liquidjs/emitters/streamed-emitter.d.ts b/packages/osrl/liquidjs/emitters/streamed-emitter.d.ts new file mode 100644 index 00000000..31ab2ce7 --- /dev/null +++ b/packages/osrl/liquidjs/emitters/streamed-emitter.d.ts @@ -0,0 +1,9 @@ +/// +import { Emitter } from './emitter'; +export declare class StreamedEmitter implements Emitter { + buffer: string; + stream: NodeJS.ReadWriteStream; + write(html: any): void; + error(err: Error): void; + end(): void; +} diff --git a/packages/osrl/liquidjs/emitters/streamed-emitter.js b/packages/osrl/liquidjs/emitters/streamed-emitter.js new file mode 100644 index 00000000..da0e678e --- /dev/null +++ b/packages/osrl/liquidjs/emitters/streamed-emitter.js @@ -0,0 +1,22 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.StreamedEmitter = void 0; +const underscore_1 = require("../util/underscore"); +const stream_1 = require("stream"); +class StreamedEmitter { + constructor() { + this.buffer = ''; + this.stream = new stream_1.PassThrough(); + } + write(html) { + this.stream.write((0, underscore_1.stringify)(html)); + } + error(err) { + this.stream.emit('error', err); + } + end() { + this.stream.end(); + } +} +exports.StreamedEmitter = StreamedEmitter; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RyZWFtZWQtZW1pdHRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saXF1aWRqcy9lbWl0dGVycy9zdHJlYW1lZC1lbWl0dGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLG1EQUE4QztBQUU5QyxtQ0FBb0M7QUFFcEMsTUFBYSxlQUFlO0lBQTVCO1FBQ1MsV0FBTSxHQUFHLEVBQUUsQ0FBQztRQUNaLFdBQU0sR0FBMkIsSUFBSSxvQkFBVyxFQUFFLENBQUE7SUFVM0QsQ0FBQztJQVRRLEtBQUssQ0FBRSxJQUFTO1FBQ3JCLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUEsc0JBQVMsRUFBQyxJQUFJLENBQUMsQ0FBQyxDQUFBO0lBQ3BDLENBQUM7SUFDTSxLQUFLLENBQUUsR0FBVTtRQUN0QixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUE7SUFDaEMsQ0FBQztJQUNNLEdBQUc7UUFDUixJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFBO0lBQ25CLENBQUM7Q0FDRjtBQVpELDBDQVlDIn0= \ No newline at end of file diff --git a/packages/osrl/liquidjs/fs/fs.d.ts b/packages/osrl/liquidjs/fs/fs.d.ts new file mode 100644 index 00000000..86cf1e18 --- /dev/null +++ b/packages/osrl/liquidjs/fs/fs.d.ts @@ -0,0 +1,20 @@ +export interface FS { + /** check if a file exists asynchronously */ + exists: (filepath: string) => Promise; + /** check if a file exists synchronously */ + existsSync: (filepath: string) => boolean; + /** read a file asynchronously */ + readFile: (filepath: string) => Promise; + /** read a file synchronously */ + readFileSync: (filepath: string) => string; + /** resolve a file against directory, for given `ext` option */ + resolve: (dir: string, file: string, ext: string) => string; + /** check if file is contained in `root`, always return `true` by default. Warning: not setting this could expose path traversal vulnerabilities. */ + contains?: (root: string, file: string) => boolean; + /** defaults to "/" */ + sep?: string; + /** required for relative path resolving */ + dirname?: (file: string) => string; + /** fallback file for lookup failure */ + fallback?: (file: string) => string | undefined; +} diff --git a/packages/osrl/liquidjs/fs/fs.js b/packages/osrl/liquidjs/fs/fs.js new file mode 100644 index 00000000..96e63edb --- /dev/null +++ b/packages/osrl/liquidjs/fs/fs.js @@ -0,0 +1,3 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbGlxdWlkanMvZnMvZnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiJ9 \ No newline at end of file diff --git a/packages/osrl/liquidjs/fs/loader.d.ts b/packages/osrl/liquidjs/fs/loader.d.ts new file mode 100644 index 00000000..6d590b71 --- /dev/null +++ b/packages/osrl/liquidjs/fs/loader.d.ts @@ -0,0 +1,24 @@ +import { FS } from './fs'; +export interface LoaderOptions { + fs: FS; + extname: string; + root: string[]; + partials: string[]; + layouts: string[]; + relativeReference: boolean; +} +export declare enum LookupType { + Partials = "partials", + Layouts = "layouts", + Root = "root" +} +export declare class Loader { + shouldLoadRelative: (referencedFile: string) => boolean; + private options; + private contains; + constructor(options: LoaderOptions); + lookup(file: string, type: LookupType, sync?: boolean, currentFile?: string): Generator; + candidates(file: string, dirs: string[], currentFile?: string, enforceRoot?: boolean): Generator; + private dirname; + private lookupError; +} diff --git a/packages/osrl/liquidjs/fs/loader.js b/packages/osrl/liquidjs/fs/loader.js new file mode 100644 index 00000000..682618f7 --- /dev/null +++ b/packages/osrl/liquidjs/fs/loader.js @@ -0,0 +1,72 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.Loader = exports.LookupType = void 0; +const underscore_1 = require("../util/underscore"); +const assert_1 = require("../util/assert"); +var LookupType; +(function (LookupType) { + LookupType["Partials"] = "partials"; + LookupType["Layouts"] = "layouts"; + LookupType["Root"] = "root"; +})(LookupType = exports.LookupType || (exports.LookupType = {})); +class Loader { + constructor(options) { + this.options = options; + if (options.relativeReference) { + const sep = options.fs.sep; + (0, assert_1.assert)(sep, '`fs.sep` is required for relative reference'); + const rRelativePath = new RegExp(['.' + sep, '..' + sep, './', '../'].map(prefix => (0, underscore_1.escapeRegex)(prefix)).join('|')); + this.shouldLoadRelative = (referencedFile) => rRelativePath.test(referencedFile); + } + else { + this.shouldLoadRelative = (referencedFile) => false; + } + this.contains = this.options.fs.contains || (() => true); + } + *lookup(file, type, sync, currentFile) { + const { fs } = this.options; + const dirs = this.options[type]; + for (const filepath of this.candidates(file, dirs, currentFile, type !== LookupType.Root)) { + if (sync ? fs.existsSync(filepath) : yield fs.exists(filepath)) + return filepath; + } + throw this.lookupError(file, dirs); + } + *candidates(file, dirs, currentFile, enforceRoot) { + const { fs, extname } = this.options; + if (this.shouldLoadRelative(file) && currentFile) { + const referenced = fs.resolve(this.dirname(currentFile), file, extname); + for (const dir of dirs) { + if (!enforceRoot || this.contains(dir, referenced)) { + // the relatively referenced file is within one of root dirs + yield referenced; + break; + } + } + } + for (const dir of dirs) { + const referenced = fs.resolve(dir, file, extname); + if (!enforceRoot || this.contains(dir, referenced)) { + yield referenced; + } + } + if (fs.fallback !== undefined) { + const filepath = fs.fallback(file); + if (filepath !== undefined) + yield filepath; + } + } + dirname(path) { + const fs = this.options.fs; + (0, assert_1.assert)(fs.dirname, '`fs.dirname` is required for relative reference'); + return fs.dirname(path); + } + lookupError(file, roots) { + const err = new Error('ENOENT'); + err.message = `ENOENT: Failed to lookup "${file}" in "${roots.join('\t\n')}"`; + err.code = 'ENOENT'; + return err; + } +} +exports.Loader = Loader; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9hZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xpcXVpZGpzL2ZzL2xvYWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFDQSxtREFBZ0Q7QUFDaEQsMkNBQXVDO0FBVXZDLElBQVksVUFJWDtBQUpELFdBQVksVUFBVTtJQUNwQixtQ0FBcUIsQ0FBQTtJQUNyQixpQ0FBbUIsQ0FBQTtJQUNuQiwyQkFBYSxDQUFBO0FBQ2YsQ0FBQyxFQUpXLFVBQVUsR0FBVixrQkFBVSxLQUFWLGtCQUFVLFFBSXJCO0FBQ0QsTUFBYSxNQUFNO0lBS2pCLFlBQWEsT0FBc0I7UUFDakMsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUE7UUFDdEIsSUFBSSxPQUFPLENBQUMsaUJBQWlCLEVBQUU7WUFDN0IsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUE7WUFDMUIsSUFBQSxlQUFNLEVBQUMsR0FBRyxFQUFFLDZDQUE2QyxDQUFDLENBQUE7WUFDMUQsTUFBTSxhQUFhLEdBQUcsSUFBSSxNQUFNLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxFQUFFLElBQUksR0FBRyxHQUFHLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUEsd0JBQVcsRUFBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFBO1lBQ25ILElBQUksQ0FBQyxrQkFBa0IsR0FBRyxDQUFDLGNBQXNCLEVBQUUsRUFBRSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUE7U0FDekY7YUFBTTtZQUNMLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxDQUFDLGNBQXNCLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQTtTQUM1RDtRQUNELElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENB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 \ No newline at end of file diff --git a/packages/osrl/liquidjs/fs/node-require.d.ts b/packages/osrl/liquidjs/fs/node-require.d.ts new file mode 100644 index 00000000..76b93995 --- /dev/null +++ b/packages/osrl/liquidjs/fs/node-require.d.ts @@ -0,0 +1,2 @@ +/// +export declare const requireResolve: NodeJS.RequireResolve; diff --git a/packages/osrl/liquidjs/fs/node-require.js b/packages/osrl/liquidjs/fs/node-require.js new file mode 100644 index 00000000..67610fea --- /dev/null +++ b/packages/osrl/liquidjs/fs/node-require.js @@ -0,0 +1,5 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.requireResolve = void 0; +exports.requireResolve = require.resolve; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS1yZXF1aXJlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xpcXVpZGpzL2ZzL25vZGUtcmVxdWlyZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBYSxRQUFBLGNBQWMsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFBIn0= \ No newline at end of file diff --git a/packages/osrl/liquidjs/fs/node.d.ts b/packages/osrl/liquidjs/fs/node.d.ts new file mode 100644 index 00000000..2fa03a7a --- /dev/null +++ b/packages/osrl/liquidjs/fs/node.d.ts @@ -0,0 +1,9 @@ +export declare function exists(filepath: string): Promise; +export declare function readFile(filepath: string): any; +export declare function existsSync(filepath: string): boolean; +export declare function readFileSync(filepath: string): string; +export declare function resolve(root: string, file: string, ext: string): string; +export declare function fallback(file: string): string; +export declare function dirname(filepath: string): string; +export declare function contains(root: string, file: string): boolean; +export { sep } from 'path'; diff --git a/packages/osrl/liquidjs/fs/node.js b/packages/osrl/liquidjs/fs/node.js new file mode 100644 index 00000000..6b9450bc --- /dev/null +++ b/packages/osrl/liquidjs/fs/node.js @@ -0,0 +1,74 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.sep = exports.contains = exports.dirname = exports.fallback = exports.resolve = exports.readFileSync = exports.existsSync = exports.readFile = exports.exists = void 0; +const _ = require("../util/underscore"); +const path_1 = require("path"); +const fs_1 = require("fs"); +const node_require_1 = require("./node-require"); +const statAsync = _.promisify(fs_1.stat); +const readFileAsync = _.promisify(fs_1.readFile); +function exists(filepath) { + return __awaiter(this, void 0, void 0, function* () { + try { + yield statAsync(filepath); + return true; + } + catch (err) { + return false; + } + }); +} +exports.exists = exists; +function readFile(filepath) { + return readFileAsync(filepath, 'utf8'); +} +exports.readFile = readFile; +function existsSync(filepath) { + try { + (0, fs_1.statSync)(filepath); + return true; + } + catch (err) { + return false; + } +} +exports.existsSync = existsSync; +function readFileSync(filepath) { + return (0, fs_1.readFileSync)(filepath, 'utf8'); +} +exports.readFileSync = readFileSync; +function resolve(root, file, ext) { + if (!(0, path_1.extname)(file)) + file += ext; + return (0, path_1.resolve)(root, file); +} +exports.resolve = resolve; +function fallback(file) { + try { + return (0, node_require_1.requireResolve)(file); + } + catch (e) { } +} +exports.fallback = fallback; +function dirname(filepath) { + return (0, path_1.dirname)(filepath); +} +exports.dirname = dirname; +function contains(root, file) { + root = (0, path_1.resolve)(root); + root = root.endsWith(path_1.sep) ? root : root + path_1.sep; + return file.startsWith(root); +} +exports.contains = contains; +var path_2 = require("path"); +Object.defineProperty(exports, "sep", { enumerable: true, get: function () { return path_2.sep; } }); +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saXF1aWRqcy9mcy9ub2RlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQUFBLHdDQUF1QztBQUN2QywrQkFBbUY7QUFDbkYsMkJBQStGO0FBQy9GLGlEQUErQztBQUUvQyxNQUFNLFNBQVMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLFNBQUksQ0FBQyxDQUFBO0FBQ25DLE1BQU0sYUFBYSxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQXlCLGFBQW1CLENBQUMsQ0FBQTtBQUU5RSxTQUFzQixNQUFNLENBQUUsUUFBZ0I7O1FBQzVDLElBQUk7WUFDRixNQUFNLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQTtZQUN6QixPQUFPLElBQUksQ0FBQTtTQUNaO1FBQUMsT0FBTyxHQUFHLEVBQUU7WUFDWixPQUFPLEtBQUssQ0FBQTtTQUNiO0lBQ0gsQ0FBQztDQUFBO0FBUEQsd0JBT0M7QUFDRCxTQUFnQixRQUFRLENBQUUsUUFBZ0I7SUFDeEMsT0FBUSxhQUFxQixDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQTtBQUNqRCxDQUFDO0FBRkQsNEJBRUM7QUFDRCxTQUFnQixVQUFVLENBQUUsUUFBZ0I7SUFDMUMsSUFBSTtRQUNGLElBQUEsYUFBUSxFQUFDLFFBQVEsQ0FBQyxDQUFBO1FBQ2xCLE9BQU8sSUFBSSxDQUFBO0tBQ1o7SUFBQyxPQUFPLEdBQUcsRUFBRTtRQUNaLE9BQU8sS0FBSyxDQUFBO0tBQ2I7QUFDSCxDQUFDO0FBUEQsZ0NBT0M7QUFDRCxTQUFnQixZQUFZLENBQUUsUUFBZ0I7SUFDNUMsT0FBTyxJQUFBLGlCQUFnQixFQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQTtBQUMzQyxDQUFDO0FBRkQsb0NBRUM7QUFDRCxTQUFnQixPQUFPLENBQUUsSUFBWSxFQUFFLElBQVksRUFBRSxHQUFXO0lBQzlELElBQUksQ0FBQyxJQUFBLGNBQU8sRUFBQyxJQUFJLENBQUM7UUFBRSxJQUFJLElBQUksR0FBRyxDQUFBO0lBQy9CLE9BQU8sSUFBQSxjQUFXLEVBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFBO0FBQ2hDLENBQUM7QUFIRCwwQkFHQztBQUNELFNBQWdCLFFBQVEsQ0FBRSxJQUFZO0lBQ3BDLElBQUk7UUFDRixPQUFPLElBQUEsNkJBQWMsRUFBQyxJQUFJLENBQUMsQ0FBQTtLQUM1QjtJQUFDLE9BQU8sQ0FBQyxFQUFFLEdBQUU7QUFDaEIsQ0FBQztBQUpELDRCQUlDO0FBQ0QsU0FBZ0IsT0FBTyxDQUFFLFFBQWdCO0lBQ3ZDLE9BQU8sSUFBQSxjQUFXLEVBQUMsUUFBUSxDQUFDLENBQUE7QUFDOUIsQ0FBQztBQUZELDBCQUVDO0FBQ0QsU0FBZ0IsUUFBUSxDQUFFLElBQVksRUFBRSxJQUFZO0lBQ2xELElBQUksR0FBRyxJQUFBLGNBQVcsRUFBQyxJQUFJLENBQUMsQ0FBQTtJQUN4QixJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsVUFBRyxDQUFBO0lBQzdDLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQTtBQUM5QixDQUFDO0FBSkQsNEJBSUM7QUFFRCw2QkFBMEI7QUFBakIsMkZBQUEsR0FBRyxPQUFBIn0= \ No newline at end of file diff --git a/packages/osrl/liquidjs/liquid-options.d.ts b/packages/osrl/liquidjs/liquid-options.d.ts new file mode 100644 index 00000000..d0ff1287 --- /dev/null +++ b/packages/osrl/liquidjs/liquid-options.d.ts @@ -0,0 +1,128 @@ +import { LiquidCache } from './cache/cache'; +import { FS } from './fs/fs'; +import { Operators } from './render/operator'; +import { Trie } from './util/operator-trie'; +type OutputEscape = (value: any) => string; +type OutputEscapeOption = 'escape' | 'json' | OutputEscape; +export interface LiquidOptions { + /** A directory or an array of directories from where to resolve layout and include templates, and the filename passed to `.renderFile()`. If it's an array, the files are looked up in the order they occur in the array. Defaults to `["."]` */ + root?: string | string[]; + /** A directory or an array of directories from where to resolve included templates. If it's an array, the files are looked up in the order they occur in the array. Defaults to `root` */ + partials?: string | string[]; + /** A directory or an array of directories from where to resolve layout templates. If it's an array, the files are looked up in the order they occur in the array. Defaults to `root` */ + layouts?: string | string[]; + /** Allow refer to layouts/partials by relative pathname. To avoid arbitrary filesystem read, paths been referenced also need to be within corresponding root, partials, layouts. Defaults to `true`. */ + relativeReference?: boolean; + /** Use jekyll style include, pass parameters to `include` variable of current scope. Defaults to `false`. */ + jekyllInclude?: boolean; + /** Add a extname (if filepath doesn't include one) before template file lookup. Eg: setting to `".html"` will allow including file by basename. Defaults to `""`. */ + extname?: string; + /** Whether or not to cache resolved templates. Defaults to `false`. */ + cache?: boolean | number | LiquidCache; + /** Use Javascript Truthiness. Defaults to `false`. */ + jsTruthy?: boolean; + /** If set, treat the `filepath` parameter in `{%include filepath %}` and `{%layout filepath%}` as a variable, otherwise as a literal value. Defaults to `true`. */ + dynamicPartials?: boolean; + /** Whether or not to assert filter existence. If set to `false`, undefined filters will be skipped. Otherwise, undefined filters will cause an exception. Defaults to `false`. */ + strictFilters?: boolean; + /** Whether or not to assert variable existence. If set to `false`, undefined variables will be rendered as empty string. Otherwise, undefined variables will cause an exception. Defaults to `false`. */ + strictVariables?: boolean; + /** Hide scope variables from prototypes, useful when you're passing a not sanitized object into LiquidJS or need to hide prototypes from templates. */ + ownPropertyOnly?: boolean; + /** Modifies the behavior of `strictVariables`. If set, a single undefined variable will *not* cause an exception in the context of the `if`/`elsif`/`unless` tag and the `default` filter. Instead, it will evaluate to `false` and `null`, respectively. Irrelevant if `strictVariables` is not set. Defaults to `false`. **/ + lenientIf?: boolean; + /** JavaScript timezoneOffset for `date` filter, default to local time. That means if you're in Australia (UTC+10), it'll default to -600 */ + timezoneOffset?: number; + /** Strip blank characters (including ` `, `\t`, and `\r`) from the right of tags (`{% %}`) until `\n` (inclusive). Defaults to `false`. */ + trimTagRight?: boolean; + /** Similar to `trimTagRight`, whereas the `\n` is exclusive. Defaults to `false`. See Whitespace Control for details. */ + trimTagLeft?: boolean; + /** Strip blank characters (including ` `, `\t`, and `\r`) from the right of values (`{{ }}`) until `\n` (inclusive). Defaults to `false`. */ + trimOutputRight?: boolean; + /** Similar to `trimOutputRight`, whereas the `\n` is exclusive. Defaults to `false`. See Whitespace Control for details. */ + trimOutputLeft?: boolean; + /** The left delimiter for liquid tags. **/ + tagDelimiterLeft?: string; + /** The right delimiter for liquid tags. **/ + tagDelimiterRight?: string; + /** The left delimiter for liquid outputs. **/ + outputDelimiterLeft?: string; + /** The right delimiter for liquid outputs. **/ + outputDelimiterRight?: string; + /** Whether input strings to date filter preserve the given timezone **/ + preserveTimezones?: boolean; + /** Whether `trim*Left`/`trim*Right` is greedy. When set to `true`, all consecutive blank characters including `\n` will be trimed regardless of line breaks. Defaults to `true`. */ + greedy?: boolean; + /** `fs` is used to override the default file-system module with a custom implementation. */ + fs?: FS; + /** the global scope passed down to all partial and layout templates, i.e. templates included by `include`, `layout` and `render` tags. */ + globals?: object; + /** Whether or not to keep value type when writing the Output, not working for streamed rendering. Defaults to `false`. */ + keepOutputType?: boolean; + /** Default escape filter applied to output values, when set, you'll have to add `| raw` for values don't need to be escaped. Defaults to `undefined`. */ + outputEscape?: OutputEscapeOption; + /** An object of operators for conditional statements. Defaults to the regular Liquid operators. */ + operators?: Operators; + /** Respect parameter order when using filters like "for ... reversed limit", Defaults to `false`. */ + orderedFilterParameters?: boolean; +} +export interface RenderOptions { + /** + * This call is sync or async? It's used by Liquid internal methods, you'll not need this. + */ + sync?: boolean; + /** + * Same as `globals` on LiquidOptions, but only for current render() call + */ + globals?: object; + /** + * Same as `strictVariables` on LiquidOptions, but only for current render() call + */ + strictVariables?: boolean; + /** + * Same as `ownPropertyOnly` on LiquidOptions, but only for current render() call + */ + ownPropertyOnly?: boolean; +} +interface NormalizedOptions extends LiquidOptions { + root?: string[]; + partials?: string[]; + layouts?: string[]; + cache?: LiquidCache; + outputEscape?: OutputEscape; + operatorsTrie?: Trie; +} +export interface NormalizedFullOptions extends NormalizedOptions { + root: string[]; + partials: string[]; + layouts: string[]; + relativeReference: boolean; + jekyllInclude: boolean; + extname: string; + cache?: LiquidCache; + jsTruthy: boolean; + dynamicPartials: boolean; + fs: FS; + strictFilters: boolean; + strictVariables: boolean; + ownPropertyOnly: boolean; + lenientIf: boolean; + trimTagRight: boolean; + trimTagLeft: boolean; + trimOutputRight: boolean; + trimOutputLeft: boolean; + tagDelimiterLeft: string; + tagDelimiterRight: string; + outputDelimiterLeft: string; + outputDelimiterRight: string; + preserveTimezones: boolean; + greedy: boolean; + globals: object; + keepOutputType: boolean; + operators: Operators; + operatorsTrie: Trie; +} +export declare const defaultOptions: NormalizedFullOptions; +export declare function normalize(options: LiquidOptions): NormalizedFullOptions; +export declare function normalizeDirectoryList(value: any): string[]; +export {}; diff --git a/packages/osrl/liquidjs/liquid-options.js b/packages/osrl/liquidjs/liquid-options.js new file mode 100644 index 00000000..10d8c00a --- /dev/null +++ b/packages/osrl/liquidjs/liquid-options.js @@ -0,0 +1,97 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.normalizeDirectoryList = exports.normalize = exports.defaultOptions = void 0; +const underscore_1 = require("./util/underscore"); +const lru_1 = require("./cache/lru"); +const fs = require("./fs/node"); +const operator_1 = require("./render/operator"); +const operator_trie_1 = require("./util/operator-trie"); +const builtinFilters = require("./builtin/filters"); +const types_1 = require("./types"); +const filters = new Map(); +(0, underscore_1.forOwn)(builtinFilters, (conf, name) => { + filters.set((0, underscore_1.snakeCase)(name), conf); +}); +exports.defaultOptions = { + root: ['.'], + layouts: ['.'], + partials: ['.'], + relativeReference: true, + jekyllInclude: false, + cache: undefined, + extname: '', + fs: fs, + dynamicPartials: true, + jsTruthy: false, + trimTagRight: false, + trimTagLeft: false, + trimOutputRight: false, + trimOutputLeft: false, + greedy: true, + tagDelimiterLeft: '{%', + tagDelimiterRight: '%}', + outputDelimiterLeft: '{{', + outputDelimiterRight: '}}', + preserveTimezones: false, + strictFilters: false, + strictVariables: false, + ownPropertyOnly: false, + lenientIf: false, + globals: {}, + keepOutputType: false, + operators: operator_1.defaultOperators, + operatorsTrie: (0, operator_trie_1.createTrie)(operator_1.defaultOperators) +}; +function normalize(options) { + if (options.hasOwnProperty('operators')) { + options.operatorsTrie = (0, operator_trie_1.createTrie)(options.operators); + } + if (options.hasOwnProperty('root')) { + if (!options.hasOwnProperty('partials')) + options.partials = options.root; + if (!options.hasOwnProperty('layouts')) + options.layouts = options.root; + } + if (options.hasOwnProperty('cache')) { + let cache; + if (typeof options.cache === 'number') + cache = options.cache > 0 ? new lru_1.LRU(options.cache) : undefined; + else if (typeof options.cache === 'object') + cache = options.cache; + else + cache = options.cache ? new lru_1.LRU(1024) : undefined; + options.cache = cache; + } + options = Object.assign(Object.assign(Object.assign({}, exports.defaultOptions), (options.jekyllInclude ? { dynamicPartials: false } : {})), options); + if (!options.fs.dirname && options.relativeReference) { + console.warn('[LiquidJS] `fs.dirname` is required for relativeReference, set relativeReference to `false` to suppress this warning, or provide implementation for `fs.dirname`'); + options.relativeReference = false; + } + options.root = normalizeDirectoryList(options.root); + options.partials = normalizeDirectoryList(options.partials); + options.layouts = normalizeDirectoryList(options.layouts); + options.outputEscape = options.outputEscape && getOutputEscapeFunction(options.outputEscape); + return options; +} +exports.normalize = normalize; +function getOutputEscapeFunction(nameOrFunction) { + if ((0, underscore_1.isString)(nameOrFunction)) { + const filterImpl = filters.get(nameOrFunction); + (0, types_1.assert)((0, underscore_1.isFunction)(filterImpl), `filter "${nameOrFunction}" not found`); + return filterImpl; + } + else { + (0, types_1.assert)((0, underscore_1.isFunction)(nameOrFunction), '`outputEscape` need to be of type string or function'); + return nameOrFunction; + } +} +function normalizeDirectoryList(value) { + let list = []; + if ((0, underscore_1.isArray)(value)) + list = value; + if ((0, underscore_1.isString)(value)) + list = [value]; + return list; +} +exports.normalizeDirectoryList = normalizeDirectoryList; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlxdWlkLW9wdGlvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvbGlxdWlkanMvbGlxdWlkLW9wdGlvbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsa0RBQW9GO0FBRXBGLHFDQUFpQztBQUVqQyxnQ0FBK0I7QUFDL0IsZ0RBQStEO0FBQy9ELHdEQUF1RDtBQUN2RCxvREFBbUQ7QUFDbkQsbUNBQW1EO0FBRW5ELE1BQU0sT0FBTyxHQUFHLElBQUksR0FBRyxFQUFFLENBQUE7QUFDekIsSUFBQSxtQkFBTSxFQUFDLGNBQWMsRUFBRSxDQUFDLElBQXVCLEVBQUUsSUFBWSxFQUFFLEVBQUU7SUFDL0QsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFBLHNCQUFTLEVBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUE7QUFDcEMsQ0FBQyxDQUFDLENBQUE7QUErSFcsUUFBQSxjQUFjLEdBQTBCO0lBQ25ELElBQUksRUFBRSxDQUFDLEdBQUcsQ0FBQztJQUNYLE9BQU8sRUFBRSxDQUFDLEdBQUcsQ0FBQztJQUNkLFFBQVEsRUFBRSxDQUFDLEdBQUcsQ0FBQztJQUNmLGlCQUFpQixFQUFFLElBQUk7SUFDdkIsYUFBYSxFQUFFLEtBQUs7SUFDcEIsS0FBSyxFQUFFLFNBQVM7SUFDaEIsT0FBTyxFQUFFLEVBQUU7SUFDWCxFQUFFLEVBQUUsRUFBRTtJQUNOLGVBQWUsRUFBRSxJQUFJO0lBQ3JCLFFBQVEsRUFBRSxLQUFLO0lBQ2YsWUFBWSxFQUFFLEtBQUs7SUFDbkIsV0FBVyxFQUFFLEtBQUs7SUFDbEIsZUFBZSxFQUFFLEtBQUs7SUFDdEIsY0FBYyxFQUFFLEtBQUs7SUFDckIsTUFBTSxFQUFFLElBQUk7SUFDWixnQkFBZ0IsRUFBRSxJQUFJO0lBQ3RCLGlCQUFpQixFQUFFLElBQUk7SUFDdkIsbUJBQW1CLEVBQUUsSUFBSTtJQUN6QixvQkFBb0IsRUFBRSxJQUFJO0lBQzFCLGlCQUFpQixFQUFFLEtBQUs7SUFDeEIs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 \ No newline at end of file diff --git a/packages/osrl/liquidjs/liquid.d.ts b/packages/osrl/liquidjs/liquid.d.ts new file mode 100644 index 00000000..a3956f81 --- /dev/null +++ b/packages/osrl/liquidjs/liquid.d.ts @@ -0,0 +1,43 @@ +/// +import { Context } from './context/context'; +import { Template } from './template/template'; +import { Render } from './render/render'; +import Parser from './parser/parser'; +import { TagImplOptions } from './template/tag/tag-impl-options'; +import { TagMap } from './template/tag/tag-map'; +import { FilterMap } from './template/filter/filter-map'; +import { LiquidOptions, NormalizedFullOptions, RenderOptions } from './liquid-options'; +import { FilterImplOptions } from './template/filter/filter-impl-options'; +export * from './util/error'; +export * from './types'; +export declare const version = "[VI]{version}[/VI]"; +export declare class Liquid { + readonly options: NormalizedFullOptions; + readonly renderer: Render; + readonly parser: Parser; + readonly filters: FilterMap; + readonly tags: TagMap; + constructor(opts?: LiquidOptions); + parse(html: string, filepath?: string): Template[]; + _render(tpl: Template[], scope: object | undefined, renderOptions: RenderOptions): IterableIterator; + render(tpl: Template[], scope?: object, renderOptions?: RenderOptions): Promise; + renderSync(tpl: Template[], scope?: object, renderOptions?: RenderOptions): any; + renderToNodeStream(tpl: Template[], scope?: object, renderOptions?: RenderOptions): NodeJS.ReadableStream; + _parseAndRender(html: string, scope: object | undefined, renderOptions: RenderOptions): IterableIterator; + parseAndRender(html: string, scope?: object, renderOptions?: RenderOptions): Promise; + parseAndRenderSync(html: string, scope?: object, renderOptions?: RenderOptions): any; + _parsePartialFile(file: string, sync?: boolean, currentFile?: string): Generator; + _parseLayoutFile(file: string, sync?: boolean, currentFile?: string): Generator; + parseFile(file: string): Promise; + parseFileSync(file: string): Template[]; + renderFile(file: string, ctx?: object, renderOptions?: RenderOptions): Promise; + renderFileSync(file: string, ctx?: object, renderOptions?: RenderOptions): any; + renderFileToNodeStream(file: string, scope?: object, renderOptions?: RenderOptions): Promise; + _evalValue(str: string, ctx: Context): IterableIterator; + evalValue(str: string, ctx: Context): Promise; + evalValueSync(str: string, ctx: Context): any; + registerFilter(name: string, filter: FilterImplOptions): void; + registerTag(name: string, tag: TagImplOptions): void; + plugin(plugin: (this: Liquid, L: typeof Liquid) => void): any; + express(): (this: any, filePath: string, ctx: object, callback: (err: Error | null, rendered: string) => void) => void; +} diff --git a/packages/osrl/liquidjs/liquid.js b/packages/osrl/liquidjs/liquid.js new file mode 100644 index 00000000..63904a5f --- /dev/null +++ b/packages/osrl/liquidjs/liquid.js @@ -0,0 +1,150 @@ +"use strict"; +var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { enumerable: true, get: function() { return m[k]; } }; + } + Object.defineProperty(o, k2, desc); +}) : (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +})); +var __exportStar = (this && this.__exportStar) || function(m, exports) { + for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); +}; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.Liquid = exports.version = void 0; +const context_1 = require("./context/context"); +const underscore_1 = require("./util/underscore"); +const loader_1 = require("./fs/loader"); +const render_1 = require("./render/render"); +const parser_1 = require("./parser/parser"); +const value_1 = require("./template/value"); +const tags_1 = require("./builtin/tags"); +const builtinFilters = require("./builtin/filters"); +const tag_map_1 = require("./template/tag/tag-map"); +const filter_map_1 = require("./template/filter/filter-map"); +const liquid_options_1 = require("./liquid-options"); +const async_1 = require("./util/async"); +__exportStar(require("./util/error"), exports); +__exportStar(require("./types"), exports); +exports.version = '[VI]{version}[/VI]'; +class Liquid { + constructor(opts = {}) { + this.options = (0, liquid_options_1.normalize)(opts); + this.parser = new parser_1.default(this); + this.renderer = new render_1.Render(); + this.filters = new filter_map_1.FilterMap(this.options.strictFilters, this); + this.tags = new tag_map_1.TagMap(); + (0, underscore_1.forOwn)(tags_1.default, (conf, name) => this.registerTag((0, underscore_1.snakeCase)(name), conf)); + (0, underscore_1.forOwn)(builtinFilters, (handler, name) => this.registerFilter((0, underscore_1.snakeCase)(name), handler)); + } + parse(html, filepath) { + return this.parser.parse(html, filepath); + } + _render(tpl, scope, renderOptions) { + const ctx = new context_1.Context(scope, this.options, renderOptions); + return this.renderer.renderTemplates(tpl, ctx); + } + render(tpl, scope, renderOptions) { + return __awaiter(this, void 0, void 0, function* () { + return (0, async_1.toPromise)(this._render(tpl, scope, Object.assign(Object.assign({}, renderOptions), { sync: false }))); + }); + } + renderSync(tpl, scope, renderOptions) { + return (0, async_1.toValueSync)(this._render(tpl, scope, Object.assign(Object.assign({}, renderOptions), { sync: true }))); + } + renderToNodeStream(tpl, scope, renderOptions = {}) { + const ctx = new context_1.Context(scope, this.options, renderOptions); + return this.renderer.renderTemplatesToNodeStream(tpl, ctx); + } + _parseAndRender(html, scope, renderOptions) { + const tpl = this.parse(html); + return this._render(tpl, scope, renderOptions); + } + parseAndRender(html, scope, renderOptions) { + return __awaiter(this, void 0, void 0, function* () { + return (0, async_1.toPromise)(this._parseAndRender(html, scope, Object.assign(Object.assign({}, renderOptions), { sync: false }))); + }); + } + parseAndRenderSync(html, scope, renderOptions) { + return (0, async_1.toValueSync)(this._parseAndRender(html, scope, Object.assign(Object.assign({}, renderOptions), { sync: true }))); + } + _parsePartialFile(file, sync, currentFile) { + return this.parser.parseFile(file, sync, loader_1.LookupType.Partials, currentFile); + } + _parseLayoutFile(file, sync, currentFile) { + return this.parser.parseFile(file, sync, loader_1.LookupType.Layouts, currentFile); + } + parseFile(file) { + return __awaiter(this, void 0, void 0, function* () { + return (0, async_1.toPromise)(this.parser.parseFile(file, false)); + }); + } + parseFileSync(file) { + return (0, async_1.toValueSync)(this.parser.parseFile(file, true)); + } + renderFile(file, ctx, renderOptions) { + return __awaiter(this, void 0, void 0, function* () { + const templates = yield this.parseFile(file); + return this.render(templates, ctx, renderOptions); + }); + } + renderFileSync(file, ctx, renderOptions) { + const templates = this.parseFileSync(file); + return this.renderSync(templates, ctx, renderOptions); + } + renderFileToNodeStream(file, scope, renderOptions) { + return __awaiter(this, void 0, void 0, function* () { + const templates = yield this.parseFile(file); + return this.renderToNodeStream(templates, scope, renderOptions); + }); + } + _evalValue(str, ctx) { + const value = new value_1.Value(str, this); + return value.value(ctx, false); + } + evalValue(str, ctx) { + return __awaiter(this, void 0, void 0, function* () { + return (0, async_1.toPromise)(this._evalValue(str, ctx)); + }); + } + evalValueSync(str, ctx) { + return (0, async_1.toValueSync)(this._evalValue(str, ctx)); + } + registerFilter(name, filter) { + this.filters.set(name, filter); + } + registerTag(name, tag) { + this.tags.set(name, tag); + } + plugin(plugin) { + return plugin.call(this, Liquid); + } + express() { + const self = this; // eslint-disable-line + let firstCall = true; + return function (filePath, ctx, callback) { + if (firstCall) { + firstCall = false; + const dirs = (0, liquid_options_1.normalizeDirectoryList)(this.root); + self.options.root.unshift(...dirs); + self.options.layouts.unshift(...dirs); + self.options.partials.unshift(...dirs); + } + self.renderFile(filePath, ctx).then(html => callback(null, html), callback); + }; + } +} +exports.Liquid = Liquid; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlxdWlkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2xpcXVpZGpzL2xpcXVpZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLCtDQUEyQztBQUMzQyxrREFBcUQ7QUFFckQsd0NBQXdDO0FBQ3hDLDRDQUF3QztBQUN4Qyw0Q0FBb0M7QUFFcEMsNENBQXdDO0FBQ3hDLHlDQUF3QztBQUN4QyxvREFBbUQ7QUFDbkQsb0RBQStDO0FBQy9DLDZEQUF3RDtBQUN4RCxxREFBeUg7QUFFekgsd0NBQXFEO0FBRXJELCtDQUE0QjtBQUM1QiwwQ0FBdUI7QUFDVixRQUFBLE9BQU8sR0FBRyxvQkFBb0IsQ0FBQTtBQUUzQyxNQUFhLE1BQU07SUFPakIsWUFBb0IsT0FBc0IsRUFBRTtRQUMxQyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUEsMEJBQVMsRUFBQyxJQUFJLENBQUMsQ0FBQTtRQUM5QixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksZ0JBQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUM5QixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksZUFBTSxFQUFFLENBQUE7UUFDNUIsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLHNCQUFTLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLENBQUE7UUFDOUQsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLGdCQUFNLEVBQUUsQ0FBQTtRQUV4QixJQUFBLG1CQUFNLEVBQUMsY0FBVyxFQUFFLENBQUMsSUFBb0IsRUFBRSxJQUFZLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBQSxzQkFBUyxFQUFDLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUE7UUFDcEcsSUFBQSxtQkFBTSxFQUFDLGNBQWMsRUFBRSxDQUFDLE9BQTBCLEVBQUUsSUFBWSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMs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 \ No newline at end of file diff --git a/packages/osrl/liquidjs/parser/filter-arg.d.ts b/packages/osrl/liquidjs/parser/filter-arg.d.ts new file mode 100644 index 00000000..dfe7996b --- /dev/null +++ b/packages/osrl/liquidjs/parser/filter-arg.d.ts @@ -0,0 +1,5 @@ +import { ValueToken } from '../tokens/value-token'; +type KeyValuePair = [string?, ValueToken?]; +export type FilterArg = ValueToken | KeyValuePair; +export declare function isKeyValuePair(arr: FilterArg): arr is KeyValuePair; +export {}; diff --git a/packages/osrl/liquidjs/parser/filter-arg.js b/packages/osrl/liquidjs/parser/filter-arg.js new file mode 100644 index 00000000..78da1287 --- /dev/null +++ b/packages/osrl/liquidjs/parser/filter-arg.js @@ -0,0 +1,9 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.isKeyValuePair = void 0; +const underscore_1 = require("../util/underscore"); +function isKeyValuePair(arr) { + return (0, underscore_1.isArray)(arr); +} +exports.isKeyValuePair = isKeyValuePair; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLWFyZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saXF1aWRqcy9wYXJzZXIvZmlsdGVyLWFyZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxtREFBNEM7QUFPNUMsU0FBZ0IsY0FBYyxDQUFFLEdBQWM7SUFDNUMsT0FBTyxJQUFBLG9CQUFPLEVBQUMsR0FBRyxDQUFDLENBQUE7QUFDckIsQ0FBQztBQUZELHdDQUVDIn0= \ No newline at end of file diff --git a/packages/osrl/liquidjs/parser/match-operator.d.ts b/packages/osrl/liquidjs/parser/match-operator.d.ts new file mode 100644 index 00000000..fbb91bea --- /dev/null +++ b/packages/osrl/liquidjs/parser/match-operator.d.ts @@ -0,0 +1,2 @@ +import { Trie } from '../util/operator-trie'; +export declare function matchOperator(str: string, begin: number, trie: Trie, end?: number): number; diff --git a/packages/osrl/liquidjs/parser/match-operator.js b/packages/osrl/liquidjs/parser/match-operator.js new file mode 100644 index 00000000..d000cd30 --- /dev/null +++ b/packages/osrl/liquidjs/parser/match-operator.js @@ -0,0 +1,21 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.matchOperator = void 0; +const character_1 = require("../util/character"); +function matchOperator(str, begin, trie, end = str.length) { + let node = trie; + let i = begin; + let info; + while (node[str[i]] && i < end) { + node = node[str[i++]]; + if (node['end']) + info = node; + } + if (!info) + return -1; + if (info['needBoundary'] && (character_1.TYPES[str.charCodeAt(i)] & character_1.IDENTIFIER)) + return -1; + return i; +} +exports.matchOperator = matchOperator; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0Y2gtb3BlcmF0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbGlxdWlkanMvcGFyc2VyL21hdGNoLW9wZXJhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLGlEQUFxRDtBQUdyRCxTQUFnQixhQUFhLENBQUUsR0FBVyxFQUFFLEtBQWEsRUFBRSxJQUFVLEVBQUUsR0FBRyxHQUFHLEdBQUcsQ0FBQyxNQUFNO0lBQ3JGLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQTtJQUNmLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQTtJQUNiLElBQUksSUFBSSxDQUFBO0lBQ1IsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsRUFBRTtRQUM5QixJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUE7UUFDckIsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDO1lBQUUsSUFBSSxHQUFHLElBQUksQ0FBQTtLQUM3QjtJQUNELElBQUksQ0FBQyxJQUFJO1FBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQTtJQUNwQixJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLGlCQUFLLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLHNCQUFVLENBQUM7UUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFBO0lBQzlFLE9BQU8sQ0FBQyxDQUFBO0FBQ1YsQ0FBQztBQVhELHNDQVdDIn0= \ No newline at end of file diff --git a/packages/osrl/liquidjs/parser/parse-stream.d.ts b/packages/osrl/liquidjs/parser/parse-stream.d.ts new file mode 100644 index 00000000..4f370c5d --- /dev/null +++ b/packages/osrl/liquidjs/parser/parse-stream.d.ts @@ -0,0 +1,16 @@ +import { Token } from '../tokens/token'; +import { Template } from '../template/template'; +import { TopLevelToken } from '../tokens/toplevel-token'; +type ParseToken = ((token: T, remainTokens: T[]) => Template); +export declare class ParseStream { + private tokens; + private handlers; + private stopRequested; + private parseToken; + constructor(tokens: T[], parseToken: ParseToken); + on(name: string, cb: (this: ParseStream, arg: T2) => void): ParseStream; + private trigger; + start(): this; + stop(): this; +} +export {}; diff --git a/packages/osrl/liquidjs/parser/parse-stream.js b/packages/osrl/liquidjs/parser/parse-stream.js new file mode 100644 index 00000000..f9d6e5fb --- /dev/null +++ b/packages/osrl/liquidjs/parser/parse-stream.js @@ -0,0 +1,42 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.ParseStream = void 0; +const type_guards_1 = require("../util/type-guards"); +class ParseStream { + constructor(tokens, parseToken) { + this.handlers = {}; + this.stopRequested = false; + this.tokens = tokens; + this.parseToken = parseToken; + } + on(name, cb) { + this.handlers[name] = cb; + return this; + } + trigger(event, arg) { + const h = this.handlers[event]; + return h ? (h.call(this, arg), true) : false; + } + start() { + this.trigger('start'); + let token; + while (!this.stopRequested && (token = this.tokens.shift())) { + if (this.trigger('token', token)) + continue; + if ((0, type_guards_1.isTagToken)(token) && this.trigger(`tag:${token.name}`, token)) { + continue; + } + const template = this.parseToken(token, this.tokens); + this.trigger('template', template); + } + if (!this.stopRequested) + this.trigger('end'); + return this; + } + stop() { + this.stopRequested = true; + return this; + } +} +exports.ParseStream = ParseStream; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyc2Utc3RyZWFtLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xpcXVpZGpzL3BhcnNlci9wYXJzZS1zdHJlYW0udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBRUEscURBQWdEO0FBS2hELE1BQWEsV0FBVztJQU10QixZQUFvQixNQUFXLEVBQUUsVUFBeUI7UUFKbEQsYUFBUSxHQUF3QyxFQUFFLENBQUE7UUFDbEQsa0JBQWEsR0FBRyxLQUFLLENBQUE7UUFJM0IsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUE7UUFDcEIsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUE7SUFDOUIsQ0FBQztJQUNNLEVBQUUsQ0FBdUMsSUFBWSxFQUFFLEVBQXdDO1FBQ3BHLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFBO1FBQ3hCLE9BQU8sSUFBSSxDQUFBO0lBQ2IsQ0FBQztJQUNPLE9BQU8sQ0FBK0IsS0FBYSxFQUFFLEdBQU87UUFDbEUsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQTtRQUM5QixPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFBO0lBQzlDLENBQUM7SUFDTSxLQUFLO1FBQ1YsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQTtRQUNyQixJQUFJLEtBQW9CLENBQUE7UUFDeEIsT0FBTyxDQUFDLElBQUksQ0FBQyxhQUFhLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFO1lBQzNELElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDO2dCQUFFLFNBQVE7WUFDMUMsSUFBSSxJQUFBLHdCQUFVLEVBQUMsS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEtBQUssQ0FBQyxJQUFJLEVBQUUsRUFBRSxLQUFLLENBQUMsRUFBRTtnQkFDakUsU0FBUTthQUNUO1lBQ0QsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFBO1lBQ3BELElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLFFBQVEsQ0FBQyxDQUFBO1NBQ25DO1FBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhO1lBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQTtRQUM1QyxPQUFPLElBQUksQ0FBQTtJQUNiLENBQUM7SUFDTSxJQUFJO1FBQ1QsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUE7UUFDekIsT0FBTyxJQUFJLENBQUE7SUFDYixDQUFDO0NBQ0Y7QUFwQ0Qsa0NBb0NDIn0= \ No newline at end of file diff --git a/packages/osrl/liquidjs/parser/parse-string-literal.d.ts b/packages/osrl/liquidjs/parser/parse-string-literal.d.ts new file mode 100644 index 00000000..ed1794bb --- /dev/null +++ b/packages/osrl/liquidjs/parser/parse-string-literal.d.ts @@ -0,0 +1 @@ +export declare function parseStringLiteral(str: string): string; diff --git a/packages/osrl/liquidjs/parser/parse-string-literal.js b/packages/osrl/liquidjs/parser/parse-string-literal.js new file mode 100644 index 00000000..54d797c8 --- /dev/null +++ b/packages/osrl/liquidjs/parser/parse-string-literal.js @@ -0,0 +1,57 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.parseStringLiteral = void 0; +const rHex = /[\da-fA-F]/; +const rOct = /[0-7]/; +const escapeChar = { + b: '\b', + f: '\f', + n: '\n', + r: '\r', + t: '\t', + v: '\x0B' +}; +function hexVal(c) { + const code = c.charCodeAt(0); + if (code >= 97) + return code - 87; + if (code >= 65) + return code - 55; + return code - 48; +} +function parseStringLiteral(str) { + let ret = ''; + for (let i = 1; i < str.length - 1; i++) { + if (str[i] !== '\\') { + ret += str[i]; + continue; + } + if (escapeChar[str[i + 1]] !== undefined) { + ret += escapeChar[str[++i]]; + } + else if (str[i + 1] === 'u') { + let val = 0; + let j = i + 2; + while (j <= i + 5 && rHex.test(str[j])) { + val = val * 16 + hexVal(str[j++]); + } + i = j - 1; + ret += String.fromCharCode(val); + } + else if (!rOct.test(str[i + 1])) { + ret += str[++i]; + } + else { + let j = i + 1; + let val = 0; + while (j <= i + 3 && rOct.test(str[j])) { + val = val * 8 + hexVal(str[j++]); + } + i = j - 1; + ret += String.fromCharCode(val); + } + } + return ret; +} +exports.parseStringLiteral = parseStringLiteral; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyc2Utc3RyaW5nLWxpdGVyYWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbGlxdWlkanMvcGFyc2VyL3BhcnNlLXN0cmluZy1saXRlcmFsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLE1BQU0sSUFBSSxHQUFHLFlBQVksQ0FBQTtBQUN6QixNQUFNLElBQUksR0FBRyxPQUFPLENBQUE7QUFDcEIsTUFBTSxVQUFVLEdBQUc7SUFDakIsQ0FBQyxFQUFFLElBQUk7SUFDUCxDQUFDLEVBQUUsSUFBSTtJQUNQLENBQUMsRUFBRSxJQUFJO0lBQ1AsQ0FBQyxFQUFFLElBQUk7SUFDUCxDQUFDLEVBQUUsSUFBSTtJQUNQLENBQUMsRUFBRSxNQUFNO0NBQ1YsQ0FBQTtBQUVELFNBQVMsTUFBTSxDQUFFLENBQVM7SUFDeEIsTUFBTSxJQUFJLEdBQUcsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUM1QixJQUFJLElBQUksSUFBSSxFQUFFO1FBQUUsT0FBTyxJQUFJLEdBQUcsRUFBRSxDQUFBO0lBQ2hDLElBQUksSUFBSSxJQUFJLEVBQUU7UUFBRSxPQUFPLElBQUksR0FBRyxFQUFFLENBQUE7SUFDaEMsT0FBTyxJQUFJLEdBQUcsRUFBRSxDQUFBO0FBQ2xCLENBQUM7QUFFRCxTQUFnQixrQkFBa0IsQ0FBRSxHQUFXO0lBQzdDLElBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQTtJQUNaLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUN2QyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLEVBQUU7WUFDbkIsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQTtZQUNiLFNBQVE7U0FDVDtRQUNELElBQUksVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEVBQUU7WUFDeEMsR0FBRyxJQUFJLFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFBO1NBQzVCO2FBQU0sSUFBSSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRTtZQUM3QixJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUE7WUFDWCxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFBO1lBQ2IsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO2dCQUN0QyxHQUFHLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQTthQUNsQztZQUNELENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFBO1lBQ1QsR0FBRyxJQUFJLE1BQU0sQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUE7U0FDaEM7YUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDakMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFBO1NBQ2hCO2FBQU07WUFDTCxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFBO1lBQ2IsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFBO1lBQ1gsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO2dCQUN0QyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQTthQUNqQztZQUNELENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFBO1lBQ1QsR0FBRyxJQUFJLE1BQU0sQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUE7U0FDaEM7S0FDRjtJQUNELE9BQU8sR0FBRyxDQUFBO0FBQ1osQ0FBQztBQTlCRCxnREE4QkMifQ== \ No newline at end of file diff --git a/packages/osrl/liquidjs/parser/parser.d.ts b/packages/osrl/liquidjs/parser/parser.d.ts new file mode 100644 index 00000000..58c3ce83 --- /dev/null +++ b/packages/osrl/liquidjs/parser/parser.d.ts @@ -0,0 +1,22 @@ +import { Liquid } from '../liquid'; +import { ParseStream } from './parse-stream'; +import { Tag } from '../template/tag/tag'; +import { Output } from '../template/output'; +import { HTML } from '../template/html'; +import { Template } from '../template/template'; +import { TopLevelToken } from '../tokens/toplevel-token'; +import { LookupType } from '../fs/loader'; +export default class Parser { + parseFile: (file: string, sync?: boolean, type?: LookupType, currentFile?: string) => Generator; + private liquid; + private fs; + private cache?; + private loader; + constructor(liquid: Liquid); + parse(html: string, filepath?: string): Template[]; + parseTokens(tokens: TopLevelToken[]): Template[]; + parseToken(token: TopLevelToken, remainTokens: TopLevelToken[]): Tag | Output | HTML; + parseStream(tokens: TopLevelToken[]): ParseStream; + private _parseFileCached; + private _parseFile; +} diff --git a/packages/osrl/liquidjs/parser/parser.js b/packages/osrl/liquidjs/parser/parser.js new file mode 100644 index 00000000..767e0b33 --- /dev/null +++ b/packages/osrl/liquidjs/parser/parser.js @@ -0,0 +1,76 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const error_1 = require("../util/error"); +const liquid_1 = require("../liquid"); +const parse_stream_1 = require("./parse-stream"); +const type_guards_1 = require("../util/type-guards"); +const tag_1 = require("../template/tag/tag"); +const output_1 = require("../template/output"); +const html_1 = require("../template/html"); +const loader_1 = require("../fs/loader"); +const async_1 = require("../util/async"); +class Parser { + constructor(liquid) { + this.liquid = liquid; + this.cache = this.liquid.options.cache; + this.fs = this.liquid.options.fs; + this.parseFile = this.cache ? this._parseFileCached : this._parseFile; + this.loader = new loader_1.Loader(this.liquid.options); + } + parse(html, filepath) { + const tokenizer = new liquid_1.Tokenizer(html, this.liquid.options.operatorsTrie, filepath); + const tokens = tokenizer.readTopLevelTokens(this.liquid.options); + return this.parseTokens(tokens); + } + parseTokens(tokens) { + let token; + const templates = []; + while ((token = tokens.shift())) { + templates.push(this.parseToken(token, tokens)); + } + return templates; + } + parseToken(token, remainTokens) { + try { + if ((0, type_guards_1.isTagToken)(token)) { + return new tag_1.Tag(token, remainTokens, this.liquid); + } + if ((0, type_guards_1.isOutputToken)(token)) { + return new output_1.Output(token, this.liquid); + } + return new html_1.HTML(token); + } + catch (e) { + throw new error_1.ParseError(e, token); + } + } + parseStream(tokens) { + return new parse_stream_1.ParseStream(tokens, (token, tokens) => this.parseToken(token, tokens)); + } + *_parseFileCached(file, sync, type = loader_1.LookupType.Root, currentFile) { + const cache = this.cache; + const key = this.loader.shouldLoadRelative(file) ? currentFile + ',' + file : type + ':' + file; + const tpls = yield cache.read(key); + if (tpls) + return tpls; + const task = this._parseFile(file, sync, type, currentFile); + // sync mode: exec the task and cache the result + // async mode: cache the task before exec + const taskOrTpl = sync ? yield task : (0, async_1.toPromise)(task); + cache.write(key, taskOrTpl); + // note: concurrent tasks will be reused, cache for failed task is removed until its end + try { + return yield taskOrTpl; + } + catch (err) { + cache.remove(key); + throw err; + } + } + *_parseFile(file, sync, type = loader_1.LookupType.Root, currentFile) { + const filepath = yield this.loader.lookup(file, type, sync, currentFile); + return this.liquid.parse(sync ? this.fs.readFileSync(filepath) : yield this.fs.readFile(filepath), filepath); + } +} +exports.default = Parser; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyc2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xpcXVpZGpzL3BhcnNlci9wYXJzZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSx5Q0FBMEM7QUFDMUMsc0NBQTZDO0FBQzdDLGlEQUE0QztBQUM1QyxxREFBK0Q7QUFFL0QsNkNBQXlDO0FBQ3pDLCtDQUEyQztBQUMzQywyQ0FBdUM7QUFJdkMseUNBQWlEO0FBQ2pELHlDQUF5QztBQUd6QyxNQUFxQixNQUFNO0lBUXpCLFlBQW9CLE1BQWM7UUFDaEMsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUE7UUFDcEIsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUE7UUFDdEMsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUE7UUFDaEMsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUE7UUFDckUsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLGVBQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFBO0lBQy9DLENBQUM7SUFDTSxLQUFLLENBQUUsSUFBWSxFQUFFLFFBQWlCO1FBQzNDLE1BQU0sU0FBUyxHQUFHLElBQUksa0JBQVMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFFLFFBQVEsQ0FBQyxDQUFBO1FBQ2xGLE1BQU0sTUFBTSxHQUFHLFNBQVMsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFBO1FBQ2hFLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQTtJQUNqQyxD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 \ No newline at end of file diff --git a/packages/osrl/liquidjs/parser/token-kind.d.ts b/packages/osrl/liquidjs/parser/token-kind.d.ts new file mode 100644 index 00000000..f158ddae --- /dev/null +++ b/packages/osrl/liquidjs/parser/token-kind.d.ts @@ -0,0 +1,15 @@ +export declare enum TokenKind { + Number = 1, + Literal = 2, + Tag = 4, + Output = 8, + HTML = 16, + Filter = 32, + Hash = 64, + PropertyAccess = 128, + Word = 256, + Range = 512, + Quoted = 1024, + Operator = 2048, + Delimited = 12 +} diff --git a/packages/osrl/liquidjs/parser/token-kind.js b/packages/osrl/liquidjs/parser/token-kind.js new file mode 100644 index 00000000..33ae2301 --- /dev/null +++ b/packages/osrl/liquidjs/parser/token-kind.js @@ -0,0 +1,20 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.TokenKind = void 0; +var TokenKind; +(function (TokenKind) { + TokenKind[TokenKind["Number"] = 1] = "Number"; + TokenKind[TokenKind["Literal"] = 2] = "Literal"; + TokenKind[TokenKind["Tag"] = 4] = "Tag"; + TokenKind[TokenKind["Output"] = 8] = "Output"; + TokenKind[TokenKind["HTML"] = 16] = "HTML"; + TokenKind[TokenKind["Filter"] = 32] = "Filter"; + TokenKind[TokenKind["Hash"] = 64] = "Hash"; + TokenKind[TokenKind["PropertyAccess"] = 128] = "PropertyAccess"; + TokenKind[TokenKind["Word"] = 256] = "Word"; + TokenKind[TokenKind["Range"] = 512] = "Range"; + TokenKind[TokenKind["Quoted"] = 1024] = "Quoted"; + TokenKind[TokenKind["Operator"] = 2048] = "Operator"; + TokenKind[TokenKind["Delimited"] = 12] = "Delimited"; +})(TokenKind = exports.TokenKind || (exports.TokenKind = {})); +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW4ta2luZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saXF1aWRqcy9wYXJzZXIvdG9rZW4ta2luZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxJQUFZLFNBY1g7QUFkRCxXQUFZLFNBQVM7SUFDbkIsNkNBQVUsQ0FBQTtJQUNWLCtDQUFXLENBQUE7SUFDWCx1Q0FBTyxDQUFBO0lBQ1AsNkNBQVUsQ0FBQTtJQUNWLDBDQUFTLENBQUE7SUFDVCw4Q0FBVyxDQUFBO0lBQ1gsMENBQVMsQ0FBQTtJQUNULCtEQUFvQixDQUFBO0lBQ3BCLDJDQUFVLENBQUE7SUFDViw2Q0FBVyxDQUFBO0lBQ1gsZ0RBQWEsQ0FBQTtJQUNiLG9EQUFlLENBQUE7SUFDZixvREFBd0IsQ0FBQTtBQUMxQixDQUFDLEVBZFcsU0FBUyxHQUFULGlCQUFTLEtBQVQsaUJBQVMsUUFjcEIifQ== \ No newline at end of file diff --git a/packages/osrl/liquidjs/parser/tokenizer.d.ts b/packages/osrl/liquidjs/parser/tokenizer.d.ts new file mode 100644 index 00000000..6fe0fa92 --- /dev/null +++ b/packages/osrl/liquidjs/parser/tokenizer.d.ts @@ -0,0 +1,66 @@ +import { IdentifierToken } from '../tokens/identifier-token'; +import { OperatorToken } from '../tokens/operator-token'; +import { TopLevelToken } from '../tokens/toplevel-token'; +import { FilterArg } from './filter-arg'; +import { FilterToken } from '../tokens/filter-token'; +import { HashToken } from '../tokens/hash-token'; +import { QuotedToken } from '../tokens/quoted-token'; +import { HTMLToken } from '../tokens/html-token'; +import { TagToken } from '../tokens/tag-token'; +import { Token } from '../tokens/token'; +import { RangeToken } from '../tokens/range-token'; +import { ValueToken } from '../tokens/value-token'; +import { OutputToken } from '../tokens/output-token'; +import { TokenizationError } from '../util/error'; +import { NormalizedFullOptions } from '../liquid-options'; +import { Trie } from '../util/operator-trie'; +import { Expression } from '../render/expression'; +import { LiquidTagToken } from '../tokens/liquid-tag-token'; +export declare class Tokenizer { + input: string; + private trie; + file: string; + p: number; + N: number; + private rawBeginAt; + constructor(input: string, trie: Trie, file?: string); + readExpression(): Expression; + readExpressionTokens(): IterableIterator; + readOperator(): OperatorToken | undefined; + readFilters(): FilterToken[]; + readFilter(): FilterToken | null; + readFilterArg(): FilterArg | undefined; + readTopLevelTokens(options?: NormalizedFullOptions): TopLevelToken[]; + readTopLevelToken(options: NormalizedFullOptions): TopLevelToken; + readHTMLToken(stopStrings: string[]): HTMLToken; + readTagToken(options?: NormalizedFullOptions): TagToken; + readToDelimiter(delimiter: string): number; + readOutputToken(options?: NormalizedFullOptions): OutputToken; + readEndrawOrRawContent(options: NormalizedFullOptions): HTMLToken | TagToken; + readLiquidTagTokens(options?: NormalizedFullOptions): LiquidTagToken[]; + readLiquidTagToken(options: NormalizedFullOptions): LiquidTagToken; + mkError(msg: string, begin: number): TokenizationError; + snapshot(begin?: number): string; + /** + * @deprecated + */ + readWord(): IdentifierToken; + readIdentifier(): IdentifierToken; + readTagName(): string; + readHashes(jekyllStyle?: boolean): any[]; + readHash(jekyllStyle?: boolean): HashToken | undefined; + remaining(): string; + advance(i?: number): void; + end(): boolean; + readTo(end: string): number; + readValue(): ValueToken | undefined; + readRange(): RangeToken | undefined; + readValueOrThrow(): ValueToken; + readQuoted(): QuotedToken | undefined; + readFileNameTemplate(options: NormalizedFullOptions): IterableIterator; + match(word: string): boolean; + rmatch(pattern: string): boolean; + peekType(n?: number): number; + peek(n?: number): string; + skipBlank(): void; +} diff --git a/packages/osrl/liquidjs/parser/tokenizer.js b/packages/osrl/liquidjs/parser/tokenizer.js new file mode 100644 index 00000000..57550d34 --- /dev/null +++ b/packages/osrl/liquidjs/parser/tokenizer.js @@ -0,0 +1,397 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.Tokenizer = void 0; +const whitespace_ctrl_1 = require("./whitespace-ctrl"); +const number_token_1 = require("../tokens/number-token"); +const identifier_token_1 = require("../tokens/identifier-token"); +const literal_1 = require("../util/literal"); +const literal_token_1 = require("../tokens/literal-token"); +const operator_token_1 = require("../tokens/operator-token"); +const property_access_token_1 = require("../tokens/property-access-token"); +const assert_1 = require("../util/assert"); +const filter_token_1 = require("../tokens/filter-token"); +const hash_token_1 = require("../tokens/hash-token"); +const quoted_token_1 = require("../tokens/quoted-token"); +const underscore_1 = require("../util/underscore"); +const html_token_1 = require("../tokens/html-token"); +const tag_token_1 = require("../tokens/tag-token"); +const range_token_1 = require("../tokens/range-token"); +const output_token_1 = require("../tokens/output-token"); +const error_1 = require("../util/error"); +const liquid_options_1 = require("../liquid-options"); +const character_1 = require("../util/character"); +const match_operator_1 = require("./match-operator"); +const expression_1 = require("../render/expression"); +const liquid_tag_token_1 = require("../tokens/liquid-tag-token"); +class Tokenizer { + constructor(input, trie, file = '') { + this.input = input; + this.trie = trie; + this.file = file; + this.p = 0; + this.rawBeginAt = -1; + this.N = input.length; + } + readExpression() { + return new expression_1.Expression(this.readExpressionTokens()); + } + *readExpressionTokens() { + const operand = this.readValue(); + if (!operand) + return; + yield operand; + while (this.p < this.N) { + const operator = this.readOperator(); + if (!operator) + return; + const operand = this.readValue(); + if (!operand) + return; + yield operator; + yield operand; + } + } + readOperator() { + this.skipBlank(); + const end = (0, match_operator_1.matchOperator)(this.input, this.p, this.trie); + if (end === -1) + return; + return new operator_token_1.OperatorToken(this.input, this.p, (this.p = end), this.file); + } + readFilters() { + const filters = []; + while (true) { + const filter = this.readFilter(); + if (!filter) + return filters; + filters.push(filter); + } + } + readFilter() { + this.skipBlank(); + if (this.end()) + return null; + (0, assert_1.assert)(this.peek() === '|', () => `unexpected token at ${this.snapshot()}`); + this.p++; + const begin = this.p; + const name = this.readIdentifier(); + if (!name.size()) + return null; + const args = []; + this.skipBlank(); + if (this.peek() === ':') { + do { + ++this.p; + const arg = this.readFilterArg(); + arg && args.push(arg); + this.skipBlank(); + (0, assert_1.assert)(this.end() || this.peek() === ',' || this.peek() === '|', () => `unexpected character ${this.snapshot()}`); + } while (this.peek() === ','); + } + return new filter_token_1.FilterToken(name.getText(), args, this.input, begin, this.p, this.file); + } + readFilterArg() { + const key = this.readValue(); + if (!key) + return; + this.skipBlank(); + if (this.peek() !== ':') + return key; + ++this.p; + const value = this.readValue(); + return [key.getText(), value]; + } + readTopLevelTokens(options = liquid_options_1.defaultOptions) { + const tokens = []; + while (this.p < this.N) { + const token = this.readTopLevelToken(options); + tokens.push(token); + } + (0, whitespace_ctrl_1.whiteSpaceCtrl)(tokens, options); + return tokens; + } + readTopLevelToken(options) { + const { tagDelimiterLeft, outputDelimiterLeft } = options; + if (this.rawBeginAt > -1) + return this.readEndrawOrRawContent(options); + if (this.match(tagDelimiterLeft)) + return this.readTagToken(options); + if (this.match(outputDelimiterLeft)) + return this.readOutputToken(options); + return this.readHTMLToken([tagDelimiterLeft, outputDelimiterLeft]); + } + readHTMLToken(stopStrings) { + const begin = this.p; + while (this.p < this.N) { + if (stopStrings.some(str => this.match(str))) + break; + ++this.p; + } + return new html_token_1.HTMLToken(this.input, begin, this.p, this.file); + } + readTagToken(options = liquid_options_1.defaultOptions) { + const { file, input } = this; + const begin = this.p; + if (this.readToDelimiter(options.tagDelimiterRight) === -1) { + throw this.mkError(`tag ${this.snapshot(begin)} not closed`, begin); + } + const token = new tag_token_1.TagToken(input, begin, this.p, options, file); + if (token.name === 'raw') + this.rawBeginAt = begin; + return token; + } + readToDelimiter(delimiter) { + while (this.p < this.N) { + if ((this.peekType() & character_1.QUOTE)) { + this.readQuoted(); + continue; + } + ++this.p; + if (this.rmatch(delimiter)) + return this.p; + } + return -1; + } + readOutputToken(options = liquid_options_1.defaultOptions) { + const { file, input } = this; + const { outputDelimiterRight } = options; + const begin = this.p; + if (this.readToDelimiter(outputDelimiterRight) === -1) { + throw this.mkError(`output ${this.snapshot(begin)} not closed`, begin); + } + return new output_token_1.OutputToken(input, begin, this.p, options, file); + } + readEndrawOrRawContent(options) { + const { tagDelimiterLeft, tagDelimiterRight } = options; + const begin = this.p; + let leftPos = this.readTo(tagDelimiterLeft) - tagDelimiterLeft.length; + while (this.p < this.N) { + if (this.readIdentifier().getText() !== 'endraw') { + leftPos = this.readTo(tagDelimiterLeft) - tagDelimiterLeft.length; + continue; + } + while (this.p <= this.N) { + if (this.rmatch(tagDelimiterRight)) { + const end = this.p; + if (begin === leftPos) { + this.rawBeginAt = -1; + return new tag_token_1.TagToken(this.input, begin, end, options, this.file); + } + else { + this.p = leftPos; + return new html_token_1.HTMLToken(this.input, begin, leftPos, this.file); + } + } + if (this.rmatch(tagDelimiterLeft)) + break; + this.p++; + } + } + throw this.mkError(`raw ${this.snapshot(this.rawBeginAt)} not closed`, begin); + } + readLiquidTagTokens(options = liquid_options_1.defaultOptions) { + const tokens = []; + while (this.p < this.N) { + const token = this.readLiquidTagToken(options); + if (token.name) + tokens.push(token); + } + return tokens; + } + readLiquidTagToken(options) { + const { file, input } = this; + const begin = this.p; + let end = this.N; + if (this.readToDelimiter('\n') !== -1) + end = this.p; + return new liquid_tag_token_1.LiquidTagToken(input, begin, end, options, file); + } + mkError(msg, begin) { + return new error_1.TokenizationError(msg, new identifier_token_1.IdentifierToken(this.input, begin, this.N, this.file)); + } + snapshot(begin = this.p) { + return JSON.stringify((0, underscore_1.ellipsis)(this.input.slice(begin), 16)); + } + /** + * @deprecated + */ + readWord() { + console.warn('Tokenizer#readWord() will be removed, use #readIdentifier instead'); + return this.readIdentifier(); + } + readIdentifier() { + this.skipBlank(); + const begin = this.p; + while (this.peekType() & character_1.IDENTIFIER) + ++this.p; + return new identifier_token_1.IdentifierToken(this.input, begin, this.p, this.file); + } + readTagName() { + this.skipBlank(); + // Handle inline comment tags + if (this.input[this.p] === '#') + return this.input.slice(this.p, ++this.p); + return this.readIdentifier().getText(); + } + readHashes(jekyllStyle) { + const hashes = []; + while (true) { + const hash = this.readHash(jekyllStyle); + if (!hash) + return hashes; + hashes.push(hash); + } + } + readHash(jekyllStyle) { + this.skipBlank(); + if (this.peek() === ',') + ++this.p; + const begin = this.p; + const name = this.readIdentifier(); + if (!name.size()) + return; + let value; + this.skipBlank(); + const sep = jekyllStyle ? '=' : ':'; + if (this.peek() === sep) { + ++this.p; + value = this.readValue(); + } + return new hash_token_1.HashToken(this.input, begin, this.p, name, value, this.file); + } + remaining() { + return this.input.slice(this.p); + } + advance(i = 1) { + this.p += i; + } + end() { + return this.p >= this.N; + } + readTo(end) { + while (this.p < this.N) { + ++this.p; + if (this.rmatch(end)) + return this.p; + } + return -1; + } + readValue() { + const value = this.readQuoted() || this.readRange(); + if (value) + return value; + if (this.peek() === '[') { + this.p++; + const prop = this.readQuoted(); + if (!prop) + return; + if (this.peek() !== ']') + return; + this.p++; + return new property_access_token_1.PropertyAccessToken(prop, [], this.p); + } + const variable = this.readIdentifier(); + if (!variable.size()) + return; + let isNumber = variable.isNumber(true); + const props = []; + while (true) { + if (this.peek() === '[') { + isNumber = false; + this.p++; + const prop = this.readValue() || new identifier_token_1.IdentifierToken(this.input, this.p, this.p, this.file); + this.readTo(']'); + props.push(prop); + } + else if (this.peek() === '.' && this.peek(1) !== '.') { // skip range syntax + this.p++; + const prop = this.readIdentifier(); + if (!prop.size()) + break; + if (!prop.isNumber()) + isNumber = false; + props.push(prop); + } + else + break; + } + if (!props.length && literal_1.literalValues.hasOwnProperty(variable.content)) { + return new literal_token_1.LiteralToken(this.input, variable.begin, variable.end, this.file); + } + if (isNumber) + return new number_token_1.NumberToken(variable, props[0]); + return new property_access_token_1.PropertyAccessToken(variable, props, this.p); + } + readRange() { + this.skipBlank(); + const begin = this.p; + if (this.peek() !== '(') + return; + ++this.p; + const lhs = this.readValueOrThrow(); + this.p += 2; + const rhs = this.readValueOrThrow(); + ++this.p; + return new range_token_1.RangeToken(this.input, begin, this.p, lhs, rhs, this.file); + } + readValueOrThrow() { + const value = this.readValue(); + (0, assert_1.assert)(value, () => `unexpected token ${this.snapshot()}, value expected`); + return value; + } + readQuoted() { + this.skipBlank(); + const begin = this.p; + if (!(this.peekType() & character_1.QUOTE)) + return; + ++this.p; + let escaped = false; + while (this.p < this.N) { + ++this.p; + if (this.input[this.p - 1] === this.input[begin] && !escaped) + break; + if (escaped) + escaped = false; + else if (this.input[this.p - 1] === '\\') + escaped = true; + } + return new quoted_token_1.QuotedToken(this.input, begin, this.p, this.file); + } + *readFileNameTemplate(options) { + const { outputDelimiterLeft } = options; + const htmlStopStrings = [',', ' ', outputDelimiterLeft]; + const htmlStopStringSet = new Set(htmlStopStrings); + // break on ',' and ' ', outputDelimiterLeft only stops HTML token + while (this.p < this.N && !htmlStopStringSet.has(this.peek())) { + yield this.match(outputDelimiterLeft) + ? this.readOutputToken(options) + : this.readHTMLToken(htmlStopStrings); + } + } + match(word) { + for (let i = 0; i < word.length; i++) { + if (word[i] !== this.input[this.p + i]) + return false; + } + return true; + } + rmatch(pattern) { + for (let i = 0; i < pattern.length; i++) { + if (pattern[pattern.length - 1 - i] !== this.input[this.p - 1 - i]) + return false; + } + return true; + } + peekType(n = 0) { + return character_1.TYPES[this.input.charCodeAt(this.p + n)]; + } + peek(n = 0) { + return this.input[this.p + n]; + } + skipBlank() { + while (this.peekType() & character_1.BLANK) + ++this.p; + } +} +exports.Tokenizer = Tokenizer; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW5pemVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xpcXVpZGpzL3BhcnNlci90b2tlbml6ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsdURBQWtEO0FBQ2xELHlEQUFvRDtBQUNwRCxpRUFBNEQ7QUFDNUQsNkNBQStDO0FBQy9DLDJEQUFzRDtBQUN0RCw2REFBd0Q7QUFDeEQsMkVBQXFFO0FBQ3JFLDJDQUF1QztBQUd2Qyx5REFBb0Q7QUFDcEQscURBQWdEO0FBQ2hELHlEQUFvRDtBQUNwRCxtREFBNkM7QUFDN0MscURBQWdEO0FBQ2hELG1EQUE4QztBQUU5Qyx1REFBa0Q7QUFFbEQseURBQW9EO0FBQ3BELHlDQUFpRDtBQUNqRCxzREFBeUU7QUFDekUsaURBQW1FO0FBQ25FLHFEQUFnRDtBQUVoRCxxREFBaUQ7QUFDakQsaUVBQTJEO0FBRTNELE1BQWEsU0FBUztJQUtwQixZQUNTLEtBQWEsRUFDWixJQUFVLEVBQ1gsT0FBZSxFQUFFO1FBRmpCLFVBQUssR0FBTCxLQUFLLENBQVE7UUFDWixTQUFJLEdBQUosSUFBSSxDQUFNO1FBQ1gsU0FBSSxHQUFKLElBQUksQ0FBYTtRQVAxQixNQUFDLEdBQUcsQ0FBQyxDQUFBO1FBRUcsZUFBVSxHQUFHLENBQUMsQ0FBQyxDQUFBO1FBT3JCLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQTtJQUN2QixDQUFDO0lBRUQsY0FBYztRQUNaLE9BQU8sSUFBSSx1QkFBVSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDLENBQUE7SUFDcEQsQ0FBQztJQUVELENBQUUsb0JBQW9CO1FBQ3BCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQTtRQUNoQyxJQUFJLENBQUMsT0FBTztZQUFFLE9BQU07UUFFcEIsTUFBTSxPQUFPLENBQUE7UUFFYixPQUFPLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMs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 \ No newline at end of file diff --git a/packages/osrl/liquidjs/parser/whitespace-ctrl.d.ts b/packages/osrl/liquidjs/parser/whitespace-ctrl.d.ts new file mode 100644 index 00000000..80cccff8 --- /dev/null +++ b/packages/osrl/liquidjs/parser/whitespace-ctrl.d.ts @@ -0,0 +1,3 @@ +import { Token } from '../tokens/token'; +import { NormalizedFullOptions } from '../liquid-options'; +export declare function whiteSpaceCtrl(tokens: Token[], options: NormalizedFullOptions): void; diff --git a/packages/osrl/liquidjs/parser/whitespace-ctrl.js b/packages/osrl/liquidjs/parser/whitespace-ctrl.js new file mode 100644 index 00000000..854772dd --- /dev/null +++ b/packages/osrl/liquidjs/parser/whitespace-ctrl.js @@ -0,0 +1,43 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.whiteSpaceCtrl = void 0; +const type_guards_1 = require("../util/type-guards"); +const character_1 = require("../util/character"); +function whiteSpaceCtrl(tokens, options) { + let inRaw = false; + for (let i = 0; i < tokens.length; i++) { + const token = tokens[i]; + if (!(0, type_guards_1.isDelimitedToken)(token)) + continue; + if (!inRaw && token.trimLeft) { + trimLeft(tokens[i - 1], options.greedy); + } + if ((0, type_guards_1.isTagToken)(token)) { + if (token.name === 'raw') + inRaw = true; + else if (token.name === 'endraw') + inRaw = false; + } + if (!inRaw && token.trimRight) { + trimRight(tokens[i + 1], options.greedy); + } + } +} +exports.whiteSpaceCtrl = whiteSpaceCtrl; +function trimLeft(token, greedy) { + if (!token || !(0, type_guards_1.isHTMLToken)(token)) + return; + const mask = greedy ? character_1.BLANK : character_1.INLINE_BLANK; + while (character_1.TYPES[token.input.charCodeAt(token.end - 1 - token.trimRight)] & mask) + token.trimRight++; +} +function trimRight(token, greedy) { + if (!token || !(0, type_guards_1.isHTMLToken)(token)) + return; + const mask = greedy ? character_1.BLANK : character_1.INLINE_BLANK; + while (character_1.TYPES[token.input.charCodeAt(token.begin + token.trimLeft)] & mask) + token.trimLeft++; + if (token.input.charAt(token.begin + token.trimLeft) === '\n') + token.trimLeft++; +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2hpdGVzcGFjZS1jdHJsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xpcXVpZGpzL3BhcnNlci93aGl0ZXNwYWNlLWN0cmwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EscURBQStFO0FBRS9FLGlEQUE4RDtBQUU5RCxTQUFnQixjQUFjLENBQUUsTUFBZSxFQUFFLE9BQThCO0lBQzdFLElBQUksS0FBSyxHQUFHLEtBQUssQ0FBQTtJQUVqQixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUN0QyxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFDdkIsSUFBSSxDQUFDLElBQUEsOEJBQWdCLEVBQUMsS0FBSyxDQUFDO1lBQUUsU0FBUTtRQUN0QyxJQUFJLENBQUMsS0FBSyxJQUFJLEtBQUssQ0FBQyxRQUFRLEVBQUU7WUFDNUIsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFBO1NBQ3hDO1FBRUQsSUFBSSxJQUFBLHdCQUFVLEVBQUMsS0FBSyxDQUFDLEVBQUU7WUFDckIsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLEtBQUs7Z0JBQUUsS0FBSyxHQUFHLElBQUksQ0FBQTtpQkFDakMsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLFFBQVE7Z0JBQUUsS0FBSyxHQUFHLEtBQUssQ0FBQTtTQUNoRDtRQUVELElBQUksQ0FBQyxLQUFLLElBQUksS0FBSyxDQUFDLFNBQVMsRUFBRTtZQUM3QixTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUE7U0FDekM7S0FDRjtBQUNILENBQUM7QUFuQkQsd0NBbUJDO0FBRUQsU0FBUyxRQUFRLENBQUUsS0FBWSxFQUFFLE1BQWU7SUFDOUMsSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLElBQUEseUJBQVcsRUFBQyxLQUFLLENBQUM7UUFBRSxPQUFNO0lBRXpDLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsaUJBQUssQ0FBQyxDQUFDLENBQUMsd0JBQVksQ0FBQTtJQUMxQyxPQUFPLGlCQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsSUFBSTtRQUFFLEtBQUssQ0FBQyxTQUFTLEVBQUUsQ0FBQTtBQUNqRyxDQUFDO0FBRUQsU0FBUyxTQUFTLENBQUUsS0FBWSxFQUFFLE1BQWU7SUFDL0MsSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLElBQUEseUJBQVcsRUFBQyxLQUFLLENBQUM7UUFBRSxPQUFNO0lBRXpDLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsaUJBQUssQ0FBQyxDQUFDLENBQUMsd0JBQVksQ0FBQTtJQUMxQyxPQUFPLGlCQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxJQUFJO1FBQUUsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFBO0lBQzNGLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDLEtBQUssSUFBSTtRQUFFLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQTtBQUNqRixDQUFDIn0= \ No newline at end of file diff --git a/packages/osrl/liquidjs/render/boolean.d.ts b/packages/osrl/liquidjs/render/boolean.d.ts new file mode 100644 index 00000000..63540759 --- /dev/null +++ b/packages/osrl/liquidjs/render/boolean.d.ts @@ -0,0 +1,3 @@ +import { Context } from '../context/context'; +export declare function isTruthy(val: any, ctx: Context): boolean; +export declare function isFalsy(val: any, ctx: Context): boolean; diff --git a/packages/osrl/liquidjs/render/boolean.js b/packages/osrl/liquidjs/render/boolean.js new file mode 100644 index 00000000..e67b5cdf --- /dev/null +++ b/packages/osrl/liquidjs/render/boolean.js @@ -0,0 +1,17 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.isFalsy = exports.isTruthy = void 0; +function isTruthy(val, ctx) { + return !isFalsy(val, ctx); +} +exports.isTruthy = isTruthy; +function isFalsy(val, ctx) { + if (ctx.opts.jsTruthy) { + return !val; + } + else { + return val === false || undefined === val || val === null; + } +} +exports.isFalsy = isFalsy; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9vbGVhbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saXF1aWRqcy9yZW5kZXIvYm9vbGVhbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFFQSxTQUFnQixRQUFRLENBQUUsR0FBUSxFQUFFLEdBQVk7SUFDOUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUE7QUFDM0IsQ0FBQztBQUZELDRCQUVDO0FBRUQsU0FBZ0IsT0FBTyxDQUFFLEdBQVEsRUFBRSxHQUFZO0lBQzdDLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUU7UUFDckIsT0FBTyxDQUFDLEdBQUcsQ0FBQTtLQUNaO1NBQU07UUFDTCxPQUFPLEdBQUcsS0FBSyxLQUFLLElBQUksU0FBUyxLQUFLLEdBQUcsSUFBSSxHQUFHLEtBQUssSUFBSSxDQUFBO0tBQzFEO0FBQ0gsQ0FBQztBQU5ELDBCQU1DIn0= \ No newline at end of file diff --git a/packages/osrl/liquidjs/render/expression.d.ts b/packages/osrl/liquidjs/render/expression.d.ts new file mode 100644 index 00000000..f8a4db64 --- /dev/null +++ b/packages/osrl/liquidjs/render/expression.d.ts @@ -0,0 +1,10 @@ +import { QuotedToken } from '../tokens/quoted-token'; +import { Token } from '../tokens/token'; +import { Context } from '../context/context'; +export declare class Expression { + private postfix; + constructor(tokens: IterableIterator); + evaluate(ctx: Context, lenient: boolean): Generator; +} +export declare function evalToken(token: Token | undefined, ctx: Context, lenient?: boolean): any; +export declare function evalQuotedToken(token: QuotedToken): string; diff --git a/packages/osrl/liquidjs/render/expression.js b/packages/osrl/liquidjs/render/expression.js new file mode 100644 index 00000000..c4fe0df7 --- /dev/null +++ b/packages/osrl/liquidjs/render/expression.js @@ -0,0 +1,94 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.evalQuotedToken = exports.evalToken = exports.Expression = void 0; +const assert_1 = require("../util/assert"); +const literal_1 = require("../util/literal"); +const TypeGuards = require("../util/type-guards"); +const parse_string_literal_1 = require("../parser/parse-string-literal"); +const underscore_1 = require("../util/underscore"); +const error_1 = require("../util/error"); +class Expression { + constructor(tokens) { + this.postfix = [...toPostfix(tokens)]; + } + *evaluate(ctx, lenient) { + (0, assert_1.assert)(ctx, 'unable to evaluate: context not defined'); + const operands = []; + for (const token of this.postfix) { + if (TypeGuards.isOperatorToken(token)) { + const r = operands.pop(); + const l = operands.pop(); + const result = yield evalOperatorToken(ctx.opts.operators, token, l, r, ctx); + operands.push(result); + } + else { + operands.push(yield evalToken(token, ctx, lenient && this.postfix.length === 1)); + } + } + return operands[0]; + } +} +exports.Expression = Expression; +function evalToken(token, ctx, lenient = false) { + if (TypeGuards.isPropertyAccessToken(token)) + return evalPropertyAccessToken(token, ctx, lenient); + if (TypeGuards.isRangeToken(token)) + return evalRangeToken(token, ctx); + if (TypeGuards.isLiteralToken(token)) + return evalLiteralToken(token); + if (TypeGuards.isNumberToken(token)) + return evalNumberToken(token); + if (TypeGuards.isWordToken(token)) + return token.getText(); + if (TypeGuards.isQuotedToken(token)) + return evalQuotedToken(token); +} +exports.evalToken = evalToken; +function evalPropertyAccessToken(token, ctx, lenient) { + const props = token.props.map(prop => evalToken(prop, ctx, false)); + try { + return ctx.get([token.propertyName, ...props]); + } + catch (e) { + if (lenient && e.name === 'InternalUndefinedVariableError') + return null; + throw (new error_1.UndefinedVariableError(e, token)); + } +} +function evalNumberToken(token) { + const str = token.whole.content + '.' + (token.decimal ? token.decimal.content : ''); + return Number(str); +} +function evalQuotedToken(token) { + return (0, parse_string_literal_1.parseStringLiteral)(token.getText()); +} +exports.evalQuotedToken = evalQuotedToken; +function evalOperatorToken(operators, token, lhs, rhs, ctx) { + const impl = operators[token.operator]; + return impl(lhs, rhs, ctx); +} +function evalLiteralToken(token) { + return literal_1.literalValues[token.literal]; +} +function evalRangeToken(token, ctx) { + const low = evalToken(token.lhs, ctx); + const high = evalToken(token.rhs, ctx); + return (0, underscore_1.range)(+low, +high + 1); +} +function* toPostfix(tokens) { + const ops = []; + for (const token of tokens) { + if (TypeGuards.isOperatorToken(token)) { + while (ops.length && ops[ops.length - 1].getPrecedence() > token.getPrecedence()) { + yield ops.pop(); + } + ops.push(token); + } + else + yield token; + } + while (ops.length) { + yield ops.pop(); + } +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwcmVzc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saXF1aWRqcy9yZW5kZXIvZXhwcmVzc2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFHQSwyQ0FBdUM7QUFDdkMsNkNBQStDO0FBRS9DLGtEQUFpRDtBQUlqRCx5RUFBbUU7QUFFbkUsbURBQTBDO0FBRTFDLHlDQUFzRDtBQUV0RCxNQUFhLFVBQVU7SUFHckIsWUFBb0IsTUFBK0I7UUFDakQsSUFBSSxDQUFDLE9BQU8sR0FBRyxDQUFDLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUE7SUFDdkMsQ0FBQztJQUNNLENBQUUsUUFBUSxDQUFFLEdBQVksRUFBRSxPQUFnQjtRQUMvQyxJQUFBLGVBQU0sRUFBQyxHQUFHLEVBQUUseUNBQXlDLENBQUMsQ0FBQTtRQUN0RCxNQUFNLFFBQVEsR0FBVSxFQUFFLENBQUE7UUFDMUIsS0FBSyxNQUFNLEtBQUssSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ2hDLElBQUksVUFBVSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsRUFBRTtnQkFDckMsTUFBTSxDQUFDLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFBO2dCQUN4QixNQUFNLENBQUMsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUE7Z0JBQ3hCLE1BQU0sTUFBTSxHQUFHLE1BQU0saUJBQWlCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUE7Z0JBQzVFLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUE7YUFDdEI7aUJBQU07Z0JBQ0wsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLFNBQVMsQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLE9BQU8sSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUMs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 \ No newline at end of file diff --git a/packages/osrl/liquidjs/render/operator.d.ts b/packages/osrl/liquidjs/render/operator.d.ts new file mode 100644 index 00000000..5997117c --- /dev/null +++ b/packages/osrl/liquidjs/render/operator.d.ts @@ -0,0 +1,5 @@ +import { Context } from '../context/context'; +export interface Operators { + [key: string]: (lhs: any, rhs: any, ctx: Context) => boolean; +} +export declare const defaultOperators: Operators; diff --git a/packages/osrl/liquidjs/render/operator.js b/packages/osrl/liquidjs/render/operator.js new file mode 100644 index 00000000..3e962c15 --- /dev/null +++ b/packages/osrl/liquidjs/render/operator.js @@ -0,0 +1,58 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.defaultOperators = void 0; +const comparable_1 = require("../drop/comparable"); +const underscore_1 = require("../util/underscore"); +const boolean_1 = require("../render/boolean"); +exports.defaultOperators = { + '==': (l, r) => { + if ((0, comparable_1.isComparable)(l)) + return l.equals(r); + if ((0, comparable_1.isComparable)(r)) + return r.equals(l); + return (0, underscore_1.toValue)(l) === (0, underscore_1.toValue)(r); + }, + '!=': (l, r) => { + if ((0, comparable_1.isComparable)(l)) + return !l.equals(r); + if ((0, comparable_1.isComparable)(r)) + return !r.equals(l); + return (0, underscore_1.toValue)(l) !== (0, underscore_1.toValue)(r); + }, + '>': (l, r) => { + if ((0, comparable_1.isComparable)(l)) + return l.gt(r); + if ((0, comparable_1.isComparable)(r)) + return r.lt(l); + return (0, underscore_1.toValue)(l) > (0, underscore_1.toValue)(r); + }, + '<': (l, r) => { + if ((0, comparable_1.isComparable)(l)) + return l.lt(r); + if ((0, comparable_1.isComparable)(r)) + return r.gt(l); + return (0, underscore_1.toValue)(l) < (0, underscore_1.toValue)(r); + }, + '>=': (l, r) => { + if ((0, comparable_1.isComparable)(l)) + return l.geq(r); + if ((0, comparable_1.isComparable)(r)) + return r.leq(l); + return (0, underscore_1.toValue)(l) >= (0, underscore_1.toValue)(r); + }, + '<=': (l, r) => { + if ((0, comparable_1.isComparable)(l)) + return l.leq(r); + if ((0, comparable_1.isComparable)(r)) + return r.geq(l); + return (0, underscore_1.toValue)(l) <= (0, underscore_1.toValue)(r); + }, + 'contains': (l, r) => { + l = (0, underscore_1.toValue)(l); + r = (0, underscore_1.toValue)(r); + return l && (0, underscore_1.isFunction)(l.indexOf) ? l.indexOf(r) > -1 : false; + }, + 'and': (l, r, ctx) => (0, boolean_1.isTruthy)((0, underscore_1.toValue)(l), ctx) && (0, boolean_1.isTruthy)((0, underscore_1.toValue)(r), ctx), + 'or': (l, r, ctx) => (0, boolean_1.isTruthy)((0, underscore_1.toValue)(l), ctx) || (0, boolean_1.isTruthy)((0, underscore_1.toValue)(r), ctx) +}; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3BlcmF0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbGlxdWlkanMvcmVuZGVyL29wZXJhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLG1EQUFpRDtBQUVqRCxtREFBd0Q7QUFDeEQsK0NBQTRDO0FBTS9CLFFBQUEsZ0JBQWdCLEdBQWM7SUFDekMsSUFBSSxFQUFFLENBQUMsQ0FBTSxFQUFFLENBQU0sRUFBRSxFQUFFO1FBQ3ZCLElBQUksSUFBQSx5QkFBWSxFQUFDLENBQUMsQ0FBQztZQUFFLE9BQU8sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQTtRQUN2QyxJQUFJLElBQUEseUJBQVksRUFBQyxDQUFDLENBQUM7WUFBRSxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFDdkMsT0FBTyxJQUFBLG9CQUFPLEVBQUMsQ0FBQyxDQUFDLEtBQUssSUFBQSxvQkFBTyxFQUFDLENBQUMsQ0FBQyxDQUFBO0lBQ2xDLENBQUM7SUFDRCxJQUFJLEVBQUUsQ0FBQyxDQUFNLEVBQUUsQ0FBTSxFQUFFLEVBQUU7UUFDdkIsSUFBSSxJQUFBLHlCQUFZLEVBQUMsQ0FBQyxDQUFDO1lBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFDeEMsSUFBSSxJQUFBLHlCQUFZLEVBQUMsQ0FBQyxDQUFDO1lBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFDeEMsT0FBTyxJQUFBLG9CQUFPLEVBQUMsQ0FBQyxDQUFDLEtBQUssSUFBQSxvQkFBTyxFQUFDLENBQUMsQ0FBQyxDQUFBO0lBQ2xDLENBQUM7SUFDRCxHQUFHLEVBQUUsQ0FBQyxDQUFNLEVBQUUsQ0FBTSxFQUFFLEVBQUU7UUFDdEIsSUFBSSxJQUFBLHlCQUFZLEVBQUMsQ0FBQyxDQUFDO1lBQUUsT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDLENB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 \ No newline at end of file diff --git a/packages/osrl/liquidjs/render/render.d.ts b/packages/osrl/liquidjs/render/render.d.ts new file mode 100644 index 00000000..ad78296a --- /dev/null +++ b/packages/osrl/liquidjs/render/render.d.ts @@ -0,0 +1,8 @@ +/// +import { Context } from '../context/context'; +import { Template } from '../template/template'; +import { Emitter } from '../emitters/emitter'; +export declare class Render { + renderTemplatesToNodeStream(templates: Template[], ctx: Context): NodeJS.ReadableStream; + renderTemplates(templates: Template[], ctx: Context, emitter?: Emitter): IterableIterator; +} diff --git a/packages/osrl/liquidjs/render/render.js b/packages/osrl/liquidjs/render/render.js new file mode 100644 index 00000000..dee82b46 --- /dev/null +++ b/packages/osrl/liquidjs/render/render.js @@ -0,0 +1,38 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.Render = void 0; +const error_1 = require("../util/error"); +const simple_emitter_1 = require("../emitters/simple-emitter"); +const streamed_emitter_1 = require("../emitters/streamed-emitter"); +const async_1 = require("../util/async"); +const keeping_type_emitter_1 = require("../emitters/keeping-type-emitter"); +class Render { + renderTemplatesToNodeStream(templates, ctx) { + const emitter = new streamed_emitter_1.StreamedEmitter(); + Promise.resolve().then(() => (0, async_1.toPromise)(this.renderTemplates(templates, ctx, emitter))) + .then(() => emitter.end(), err => emitter.error(err)); + return emitter.stream; + } + *renderTemplates(templates, ctx, emitter) { + if (!emitter) { + emitter = ctx.opts.keepOutputType ? new keeping_type_emitter_1.KeepingTypeEmitter() : new simple_emitter_1.SimpleEmitter(); + } + for (const tpl of templates) { + try { + // if tpl.render supports emitter, it'll return empty `html` + const html = yield tpl.render(ctx, emitter); + // if not, it'll return an `html`, write to the emitter for it + html && emitter.write(html); + if (emitter['break'] || emitter['continue']) + break; + } + catch (e) { + const err = error_1.RenderError.is(e) ? e : new error_1.RenderError(e, tpl); + throw err; + } + } + return emitter.buffer; + } +} +exports.Render = Render; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVuZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xpcXVpZGpzL3JlbmRlci9yZW5kZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEseUNBQTJDO0FBSTNDLCtEQUEwRDtBQUMxRCxtRUFBOEQ7QUFDOUQseUNBQXlDO0FBQ3pDLDJFQUFxRTtBQUVyRSxNQUFhLE1BQU07SUFDViwyQkFBMkIsQ0FBRSxTQUFxQixFQUFFLEdBQVk7UUFDckUsTUFBTSxPQUFPLEdBQUcsSUFBSSxrQ0FBZSxFQUFFLENBQUE7UUFDckMsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFBLGlCQUFTLEVBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxTQUFTLEVBQUUsR0FBRyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7YUFDbkYsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQTtRQUN2RCxPQUFPLE9BQU8sQ0FBQyxNQUFNLENBQUE7SUFDdkIsQ0FBQztJQUNNLENBQUUsZUFBZSxDQUFFLFNBQXFCLEVBQUUsR0FBWSxFQUFFLE9BQWlCO1FBQzlFLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDWixPQUFPLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLElBQUkseUNBQWtCLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSw4QkFBYSxFQUFFLENBQUE7U0FDbkY7UUFDRCxLQUFLLE1BQU0sR0FBRyxJQUFJLFNBQVMsRUFBRTtZQUMzQixJQUFJO2dCQUNGLDREQUE0RDtnQkFDNUQsTUFBTSxJQUFJLEdBQUcsTUFBTSxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQTtnQkFDM0MsOERBQThEO2dCQUM5RCxJQUFJLElBQUksT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQTtnQkFDM0IsSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksT0FBTyxDQUFDLFVBQVUsQ0FBQztvQkFBRSxNQUFLO2FBQ25EO1lBQUMsT0FBTyxDQUFDLEVBQUU7Z0JBQ1YsTUFBTSxHQUFHLEdBQUcsbUJBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxtQkFBVyxDQUFDLENBQVUsRUFBRSxHQUFHLENBQUMsQ0FBQTtnQkFDcEUsTUFBTSxHQUFHLENBQUE7YUFDVjtTQUNGO1FBQ0QsT0FBTyxPQUFPLENBQUMsTUFBTSxDQUFBO0lBQ3ZCLENBQUM7Q0FDRjtBQXpCRCx3QkF5QkMifQ== \ No newline at end of file diff --git a/packages/osrl/liquidjs/template/filter/filter-impl-options.d.ts b/packages/osrl/liquidjs/template/filter/filter-impl-options.d.ts new file mode 100644 index 00000000..5079d2e5 --- /dev/null +++ b/packages/osrl/liquidjs/template/filter/filter-impl-options.d.ts @@ -0,0 +1,4 @@ +import { FilterImpl } from './filter-impl'; +export interface FilterImplOptions { + (this: FilterImpl, value: any, ...args: any[]): any; +} diff --git a/packages/osrl/liquidjs/template/filter/filter-impl-options.js b/packages/osrl/liquidjs/template/filter/filter-impl-options.js new file mode 100644 index 00000000..b47789b1 --- /dev/null +++ b/packages/osrl/liquidjs/template/filter/filter-impl-options.js @@ -0,0 +1,3 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLWltcGwtb3B0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saXF1aWRqcy90ZW1wbGF0ZS9maWx0ZXIvZmlsdGVyLWltcGwtb3B0aW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIn0= \ No newline at end of file diff --git a/packages/osrl/liquidjs/template/filter/filter-impl.d.ts b/packages/osrl/liquidjs/template/filter/filter-impl.d.ts new file mode 100644 index 00000000..d5f2d058 --- /dev/null +++ b/packages/osrl/liquidjs/template/filter/filter-impl.d.ts @@ -0,0 +1,6 @@ +import { Context } from '../../context/context'; +import { Liquid } from '../../liquid'; +export interface FilterImpl { + context: Context; + liquid: Liquid; +} diff --git a/packages/osrl/liquidjs/template/filter/filter-impl.js b/packages/osrl/liquidjs/template/filter/filter-impl.js new file mode 100644 index 00000000..59343866 --- /dev/null +++ b/packages/osrl/liquidjs/template/filter/filter-impl.js @@ -0,0 +1,3 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLWltcGwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGlxdWlkanMvdGVtcGxhdGUvZmlsdGVyL2ZpbHRlci1pbXBsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIifQ== \ No newline at end of file diff --git a/packages/osrl/liquidjs/template/filter/filter-map.d.ts b/packages/osrl/liquidjs/template/filter/filter-map.d.ts new file mode 100644 index 00000000..de89f6e0 --- /dev/null +++ b/packages/osrl/liquidjs/template/filter/filter-map.d.ts @@ -0,0 +1,13 @@ +import { FilterImplOptions } from './filter-impl-options'; +import { Filter } from './filter'; +import { FilterArg } from '../../parser/filter-arg'; +import { Liquid } from '../../liquid'; +export declare class FilterMap { + private readonly strictFilters; + private readonly liquid; + private impls; + constructor(strictFilters: boolean, liquid: Liquid); + get(name: string): FilterImplOptions; + set(name: string, impl: FilterImplOptions): void; + create(name: string, args: FilterArg[]): Filter; +} diff --git a/packages/osrl/liquidjs/template/filter/filter-map.js b/packages/osrl/liquidjs/template/filter/filter-map.js new file mode 100644 index 00000000..5cb2e896 --- /dev/null +++ b/packages/osrl/liquidjs/template/filter/filter-map.js @@ -0,0 +1,25 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.FilterMap = void 0; +const filter_1 = require("./filter"); +const assert_1 = require("../../util/assert"); +class FilterMap { + constructor(strictFilters, liquid) { + this.strictFilters = strictFilters; + this.liquid = liquid; + this.impls = {}; + } + get(name) { + const impl = this.impls[name]; + (0, assert_1.assert)(impl || !this.strictFilters, () => `undefined filter: ${name}`); + return impl; + } + set(name, impl) { + this.impls[name] = impl; + } + create(name, args) { + return new filter_1.Filter(name, this.get(name), args, this.liquid); + } +} +exports.FilterMap = FilterMap; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLW1hcC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saXF1aWRqcy90ZW1wbGF0ZS9maWx0ZXIvZmlsdGVyLW1hcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFDQSxxQ0FBaUM7QUFFakMsOENBQTBDO0FBRzFDLE1BQWEsU0FBUztJQUdwQixZQUNtQixhQUFzQixFQUN0QixNQUFjO1FBRGQsa0JBQWEsR0FBYixhQUFhLENBQVM7UUFDdEIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUp6QixVQUFLLEdBQXVDLEVBQUUsQ0FBQTtJQUtuRCxDQUFDO0lBRUosR0FBRyxDQUFFLElBQVk7UUFDZixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFBO1FBQzdCLElBQUEsZUFBTSxFQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsR0FBRyxFQUFFLENBQUMscUJBQXFCLElBQUksRUFBRSxDQUFDLENBQUE7UUFDdEUsT0FBTyxJQUFJLENBQUE7SUFDYixDQUFDO0lBRUQsR0FBRyxDQUFFLElBQVksRUFBRSxJQUF1QjtRQUN4QyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQTtJQUN6QixDQUFDO0lBRUQsTUFBTSxDQUFFLElBQVksRUFBRSxJQUFpQjtRQUNyQyxPQUFPLElBQUksZUFBTSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUE7SUFDNUQsQ0FBQztDQUNGO0FBckJELDhCQXFCQyJ9 \ No newline at end of file diff --git a/packages/osrl/liquidjs/template/filter/filter.d.ts b/packages/osrl/liquidjs/template/filter/filter.d.ts new file mode 100644 index 00000000..15111895 --- /dev/null +++ b/packages/osrl/liquidjs/template/filter/filter.d.ts @@ -0,0 +1,12 @@ +import { Context } from '../../context/context'; +import { FilterImplOptions } from './filter-impl-options'; +import { FilterArg } from '../../parser/filter-arg'; +import { Liquid } from '../../liquid'; +export declare class Filter { + name: string; + args: FilterArg[]; + private impl; + private liquid; + constructor(name: string, impl: FilterImplOptions, args: FilterArg[], liquid: Liquid); + render(value: any, context: Context): any; +} diff --git a/packages/osrl/liquidjs/template/filter/filter.js b/packages/osrl/liquidjs/template/filter/filter.js new file mode 100644 index 00000000..19f3291c --- /dev/null +++ b/packages/osrl/liquidjs/template/filter/filter.js @@ -0,0 +1,26 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.Filter = void 0; +const expression_1 = require("../../render/expression"); +const underscore_1 = require("../../util/underscore"); +const filter_arg_1 = require("../../parser/filter-arg"); +class Filter { + constructor(name, impl, args, liquid) { + this.name = name; + this.impl = impl || underscore_1.identify; + this.args = args; + this.liquid = liquid; + } + render(value, context) { + const argv = []; + for (const arg of this.args) { + if ((0, filter_arg_1.isKeyValuePair)(arg)) + argv.push([arg[0], (0, expression_1.evalToken)(arg[1], context)]); + else + argv.push((0, expression_1.evalToken)(arg, context)); + } + return this.impl.apply({ context, liquid: this.liquid }, [value, ...argv]); + } +} +exports.Filter = Filter; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpcXVpZGpzL3RlbXBsYXRlL2ZpbHRlci9maWx0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsd0RBQW1EO0FBRW5ELHNEQUFnRDtBQUVoRCx3REFBbUU7QUFHbkUsTUFBYSxNQUFNO0lBTWpCLFlBQW9CLElBQVksRUFBRSxJQUF1QixFQUFFLElBQWlCLEVBQUUsTUFBYztRQUMxRixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQTtRQUNoQixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksSUFBSSxxQkFBUSxDQUFBO1FBQzVCLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFBO1FBQ2hCLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFBO0lBQ3RCLENBQUM7SUFDTSxNQUFNLENBQUUsS0FBVSxFQUFFLE9BQWdCO1FBQ3pDLE1BQU0sSUFBSSxHQUFVLEVBQUUsQ0FBQTtRQUN0QixLQUFLLE1BQU0sR0FBRyxJQUFJLElBQUksQ0FBQyxJQUFtQixFQUFFO1lBQzFDLElBQUksSUFBQSwyQkFBYyxFQUFDLEdBQUcsQ0FBQztnQkFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUEsc0JBQVMsRUFBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFBOztnQkFDbkUsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFBLHNCQUFTLEVBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUE7U0FDeEM7UUFDRCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFBO0lBQzVFLENBQUM7Q0FDRjtBQXBCRCx3QkFvQkMifQ== \ No newline at end of file diff --git a/packages/osrl/liquidjs/template/html.d.ts b/packages/osrl/liquidjs/template/html.d.ts new file mode 100644 index 00000000..735b23f9 --- /dev/null +++ b/packages/osrl/liquidjs/template/html.d.ts @@ -0,0 +1,10 @@ +import { TemplateImpl } from '../template/template-impl'; +import { Template } from '../template/template'; +import { HTMLToken } from '../tokens/html-token'; +import { Context } from '../context/context'; +import { Emitter } from '../emitters/emitter'; +export declare class HTML extends TemplateImpl implements Template { + private str; + constructor(token: HTMLToken); + render(ctx: Context, emitter: Emitter): IterableIterator; +} diff --git a/packages/osrl/liquidjs/template/html.js b/packages/osrl/liquidjs/template/html.js new file mode 100644 index 00000000..29684894 --- /dev/null +++ b/packages/osrl/liquidjs/template/html.js @@ -0,0 +1,15 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.HTML = void 0; +const template_impl_1 = require("../template/template-impl"); +class HTML extends template_impl_1.TemplateImpl { + constructor(token) { + super(token); + this.str = token.getContent(); + } + *render(ctx, emitter) { + emitter.write(this.str); + } +} +exports.HTML = HTML; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHRtbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saXF1aWRqcy90ZW1wbGF0ZS9odG1sLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDZEQUF3RDtBQU14RCxNQUFhLElBQUssU0FBUSw0QkFBdUI7SUFFL0MsWUFBb0IsS0FBZ0I7UUFDbEMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBQ1osSUFBSSxDQUFDLEdBQUcsR0FBRyxLQUFLLENBQUMsVUFBVSxFQUFFLENBQUE7SUFDL0IsQ0FBQztJQUNNLENBQUUsTUFBTSxDQUFFLEdBQVksRUFBRSxPQUFnQjtRQUM3QyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQTtJQUN6QixDQUFDO0NBQ0Y7QUFURCxvQkFTQyJ9 \ No newline at end of file diff --git a/packages/osrl/liquidjs/template/output.d.ts b/packages/osrl/liquidjs/template/output.d.ts new file mode 100644 index 00000000..d1f6fc74 --- /dev/null +++ b/packages/osrl/liquidjs/template/output.d.ts @@ -0,0 +1,11 @@ +import { TemplateImpl } from '../template/template-impl'; +import { Template } from '../template/template'; +import { Context } from '../context/context'; +import { Emitter } from '../emitters/emitter'; +import { OutputToken } from '../tokens/output-token'; +import { Liquid } from '../liquid'; +export declare class Output extends TemplateImpl implements Template { + private value; + constructor(token: OutputToken, liquid: Liquid); + render(ctx: Context, emitter: Emitter): IterableIterator; +} diff --git a/packages/osrl/liquidjs/template/output.js b/packages/osrl/liquidjs/template/output.js new file mode 100644 index 00000000..2f851b9b --- /dev/null +++ b/packages/osrl/liquidjs/template/output.js @@ -0,0 +1,26 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.Output = void 0; +const value_1 = require("./value"); +const template_impl_1 = require("../template/template-impl"); +const filter_1 = require("./filter/filter"); +class Output extends template_impl_1.TemplateImpl { + constructor(token, liquid) { + super(token); + this.value = new value_1.Value(token.content, liquid); + const filters = this.value.filters; + const outputEscape = liquid.options.outputEscape; + if (filters.length && filters[filters.length - 1].name === 'raw') { + filters.pop(); + } + else if (outputEscape) { + filters.push(new filter_1.Filter(toString.call(outputEscape), outputEscape, [], liquid)); + } + } + *render(ctx, emitter) { + const val = yield this.value.value(ctx, false); + emitter.write(val); + } +} +exports.Output = Output; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3V0cHV0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xpcXVpZGpzL3RlbXBsYXRlL291dHB1dC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxtQ0FBK0I7QUFDL0IsNkRBQXdEO0FBTXhELDRDQUF3QztBQUV4QyxNQUFhLE1BQU8sU0FBUSw0QkFBeUI7SUFFbkQsWUFBb0IsS0FBa0IsRUFBRSxNQUFjO1FBQ3BELEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQTtRQUNaLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxhQUFLLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQTtRQUM3QyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQTtRQUNsQyxNQUFNLFlBQVksR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQTtRQUNoRCxJQUFJLE9BQU8sQ0FBQyxNQUFNLElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLEtBQUssRUFBRTtZQUNoRSxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUE7U0FDZDthQUFNLElBQUksWUFBWSxFQUFFO1lBQ3ZCLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxlQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsRUFBRSxZQUFZLEVBQUUsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUE7U0FDaEY7SUFDSCxDQUFDO0lBQ00sQ0FBRSxNQUFNLENBQUUsR0FBWSxFQUFFLE9BQWdCO1FBQzdDLE1BQU0sR0FBRyxHQUFHLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFBO1FBQzlDLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUE7SUFDcEIsQ0FBQztDQUNGO0FBakJELHdCQWlCQyJ9 \ No newline at end of file diff --git a/packages/osrl/liquidjs/template/tag/hash.d.ts b/packages/osrl/liquidjs/template/tag/hash.d.ts new file mode 100644 index 00000000..e88ae12b --- /dev/null +++ b/packages/osrl/liquidjs/template/tag/hash.d.ts @@ -0,0 +1,17 @@ +import { Context } from '../../context/context'; +export interface HashValue { + [key: string]: any; +} +/** + * Key-Value Pairs Representing Tag Arguments + * Example: + * For the markup `, foo:'bar', coo:2 reversed %}`, + * hash['foo'] === 'bar' + * hash['coo'] === 2 + * hash['reversed'] === undefined + */ +export declare class Hash { + hash: HashValue; + constructor(markup: string, jekyllStyle?: boolean); + render(ctx: Context): Generator; +} diff --git a/packages/osrl/liquidjs/template/tag/hash.js b/packages/osrl/liquidjs/template/tag/hash.js new file mode 100644 index 00000000..3636b470 --- /dev/null +++ b/packages/osrl/liquidjs/template/tag/hash.js @@ -0,0 +1,31 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.Hash = void 0; +const expression_1 = require("../../render/expression"); +const tokenizer_1 = require("../../parser/tokenizer"); +/** + * Key-Value Pairs Representing Tag Arguments + * Example: + * For the markup `, foo:'bar', coo:2 reversed %}`, + * hash['foo'] === 'bar' + * hash['coo'] === 2 + * hash['reversed'] === undefined + */ +class Hash { + constructor(markup, jekyllStyle) { + this.hash = {}; + const tokenizer = new tokenizer_1.Tokenizer(markup, {}); + for (const hash of tokenizer.readHashes(jekyllStyle)) { + this.hash[hash.name.content] = hash.value; + } + } + *render(ctx) { + const hash = {}; + for (const key of Object.keys(this.hash)) { + hash[key] = this.hash[key] === undefined ? true : yield (0, expression_1.evalToken)(this.hash[key], ctx); + } + return hash; + } +} +exports.Hash = Hash; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGFzaC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saXF1aWRqcy90ZW1wbGF0ZS90YWcvaGFzaC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSx3REFBbUQ7QUFFbkQsc0RBQWtEO0FBTWxEOzs7Ozs7O0dBT0c7QUFDSCxNQUFhLElBQUk7SUFFZixZQUFhLE1BQWMsRUFBRSxXQUFxQjtRQURsRCxTQUFJLEdBQWMsRUFBRSxDQUFBO1FBRWxCLE1BQU0sU0FBUyxHQUFHLElBQUkscUJBQVMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUE7UUFDM0MsS0FBSyxNQUFNLElBQUksSUFBSSxTQUFTLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxFQUFFO1lBQ3BELElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFBO1NBQzFDO0lBQ0gsQ0FBQztJQUNELENBQUUsTUFBTSxDQUFFLEdBQVk7UUFDcEIsTUFBTSxJQUFJLEdBQUcsRUFBRSxDQUFBO1FBQ2YsS0FBSyxNQUFNLEdBQUcsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUN4QyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxJQUFBLHNCQUFTLEVBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQTtTQUN2RjtRQUNELE9BQU8sSUFBSSxDQUFBO0lBQ2IsQ0FBQztDQUNGO0FBZkQsb0JBZUMifQ== \ No newline at end of file diff --git a/packages/osrl/liquidjs/template/tag/tag-impl-options.d.ts b/packages/osrl/liquidjs/template/tag/tag-impl-options.d.ts new file mode 100644 index 00000000..858357b0 --- /dev/null +++ b/packages/osrl/liquidjs/template/tag/tag-impl-options.d.ts @@ -0,0 +1,10 @@ +import { Context } from '../../context/context'; +import { TagToken } from '../../tokens/tag-token'; +import { TopLevelToken } from '../../tokens/toplevel-token'; +import { TagImpl } from './tag-impl'; +import { HashValue } from '../../template/tag/hash'; +import { Emitter } from '../../emitters/emitter'; +export interface TagImplOptions { + parse?: (this: TagImpl, token: TagToken, remainingTokens: TopLevelToken[]) => void; + render: (this: TagImpl, ctx: Context, emitter: Emitter, hash: HashValue) => void | string | Promise | Generator; +} diff --git a/packages/osrl/liquidjs/template/tag/tag-impl-options.js b/packages/osrl/liquidjs/template/tag/tag-impl-options.js new file mode 100644 index 00000000..6b2d9a7a --- /dev/null +++ b/packages/osrl/liquidjs/template/tag/tag-impl-options.js @@ -0,0 +1,3 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFnLWltcGwtb3B0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saXF1aWRqcy90ZW1wbGF0ZS90YWcvdGFnLWltcGwtb3B0aW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIn0= \ No newline at end of file diff --git a/packages/osrl/liquidjs/template/tag/tag-impl.d.ts b/packages/osrl/liquidjs/template/tag/tag-impl.d.ts new file mode 100644 index 00000000..589f1fb6 --- /dev/null +++ b/packages/osrl/liquidjs/template/tag/tag-impl.d.ts @@ -0,0 +1,6 @@ +import { Liquid } from '../../liquid'; +import { TagImplOptions } from './tag-impl-options'; +export interface TagImpl extends TagImplOptions { + liquid: Liquid; + [key: string]: any; +} diff --git a/packages/osrl/liquidjs/template/tag/tag-impl.js b/packages/osrl/liquidjs/template/tag/tag-impl.js new file mode 100644 index 00000000..d5e11415 --- /dev/null +++ b/packages/osrl/liquidjs/template/tag/tag-impl.js @@ -0,0 +1,3 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFnLWltcGwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGlxdWlkanMvdGVtcGxhdGUvdGFnL3RhZy1pbXBsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIifQ== \ No newline at end of file diff --git a/packages/osrl/liquidjs/template/tag/tag-map.d.ts b/packages/osrl/liquidjs/template/tag/tag-map.d.ts new file mode 100644 index 00000000..01a42514 --- /dev/null +++ b/packages/osrl/liquidjs/template/tag/tag-map.d.ts @@ -0,0 +1,6 @@ +import { TagImplOptions } from './tag-impl-options'; +export declare class TagMap { + private impls; + get(name: string): TagImplOptions; + set(name: string, impl: TagImplOptions): void; +} diff --git a/packages/osrl/liquidjs/template/tag/tag-map.js b/packages/osrl/liquidjs/template/tag/tag-map.js new file mode 100644 index 00000000..95a57e89 --- /dev/null +++ b/packages/osrl/liquidjs/template/tag/tag-map.js @@ -0,0 +1,19 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.TagMap = void 0; +const assert_1 = require("../../util/assert"); +class TagMap { + constructor() { + this.impls = {}; + } + get(name) { + const impl = this.impls[name]; + (0, assert_1.assert)(impl, () => `tag "${name}" not found`); + return impl; + } + set(name, impl) { + this.impls[name] = impl; + } +} +exports.TagMap = TagMap; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFnLW1hcC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saXF1aWRqcy90ZW1wbGF0ZS90YWcvdGFnLW1hcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFDQSw4Q0FBMEM7QUFFMUMsTUFBYSxNQUFNO0lBQW5CO1FBQ1UsVUFBSyxHQUFvQyxFQUFFLENBQUE7SUFXckQsQ0FBQztJQVRDLEdBQUcsQ0FBRSxJQUFZO1FBQ2YsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUM3QixJQUFBLGVBQU0sRUFBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUMsUUFBUSxJQUFJLGFBQWEsQ0FBQyxDQUFBO1FBQzdDLE9BQU8sSUFBSSxDQUFBO0lBQ2IsQ0FBQztJQUVELEdBQUcsQ0FBRSxJQUFZLEVBQUUsSUFBb0I7UUFDckMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUE7SUFDekIsQ0FBQztDQUNGO0FBWkQsd0JBWUMifQ== \ No newline at end of file diff --git a/packages/osrl/liquidjs/template/tag/tag.d.ts b/packages/osrl/liquidjs/template/tag/tag.d.ts new file mode 100644 index 00000000..e4fcc993 --- /dev/null +++ b/packages/osrl/liquidjs/template/tag/tag.d.ts @@ -0,0 +1,10 @@ +import { Liquid } from '../../liquid'; +import { TemplateImpl } from '../../template/template-impl'; +import { Emitter, Context, TagToken, Template, TopLevelToken } from '../../types'; +import { HashValue } from './hash'; +export declare class Tag extends TemplateImpl implements Template { + name: string; + private impl; + constructor(token: TagToken, tokens: TopLevelToken[], liquid: Liquid); + render(ctx: Context, emitter: Emitter): Generator; +} diff --git a/packages/osrl/liquidjs/template/tag/tag.js b/packages/osrl/liquidjs/template/tag/tag.js new file mode 100644 index 00000000..ce9aaf77 --- /dev/null +++ b/packages/osrl/liquidjs/template/tag/tag.js @@ -0,0 +1,26 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.Tag = void 0; +const underscore_1 = require("../../util/underscore"); +const template_impl_1 = require("../../template/template-impl"); +const types_1 = require("../../types"); +class Tag extends template_impl_1.TemplateImpl { + constructor(token, tokens, liquid) { + super(token); + this.name = token.name; + const impl = liquid.tags.get(token.name); + this.impl = Object.create(impl); + this.impl.liquid = liquid; + if (this.impl.parse) { + this.impl.parse(token, tokens); + } + } + *render(ctx, emitter) { + const hash = (yield new types_1.Hash(this.token.args).render(ctx)); + const impl = this.impl; + if ((0, underscore_1.isFunction)(impl.render)) + return yield impl.render(ctx, emitter, hash); + } +} +exports.Tag = Tag; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpcXVpZGpzL3RlbXBsYXRlL3RhZy90YWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsc0RBQWtEO0FBRWxELGdFQUEyRDtBQUMzRCx1Q0FBdUY7QUFJdkYsTUFBYSxHQUFJLFNBQVEsNEJBQXNCO0lBSTdDLFlBQW9CLEtBQWUsRUFBRSxNQUF1QixFQUFFLE1BQWM7UUFDMUUsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBQ1osSUFBSSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFBO1FBRXRCLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUV4QyxJQUFJLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUE7UUFDL0IsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFBO1FBQ3pCLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDbkIsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFBO1NBQy9CO0lBQ0gsQ0FBQztJQUNNLENBQUUsTUFBTSxDQUFFLEdBQVksRUFBRSxPQUFnQjtRQUM3QyxNQUFNLElBQUksR0FBRyxDQUFDLE1BQU0sSUFBSSxZQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQWMsQ0FBQTtRQUN2RSxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFBO1FBQ3RCLElBQUksSUFBQSx1QkFBVSxFQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7WUFBRSxPQUFPLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFBO0lBQzNFLENBQUM7Q0FDRjtBQXJCRCxrQkFxQkMifQ== \ No newline at end of file diff --git a/packages/osrl/liquidjs/template/template-impl.d.ts b/packages/osrl/liquidjs/template/template-impl.d.ts new file mode 100644 index 00000000..99edd248 --- /dev/null +++ b/packages/osrl/liquidjs/template/template-impl.d.ts @@ -0,0 +1,4 @@ +export declare abstract class TemplateImpl { + token: T; + constructor(token: T); +} diff --git a/packages/osrl/liquidjs/template/template-impl.js b/packages/osrl/liquidjs/template/template-impl.js new file mode 100644 index 00000000..03062667 --- /dev/null +++ b/packages/osrl/liquidjs/template/template-impl.js @@ -0,0 +1,10 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.TemplateImpl = void 0; +class TemplateImpl { + constructor(token) { + this.token = token; + } +} +exports.TemplateImpl = TemplateImpl; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcGxhdGUtaW1wbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saXF1aWRqcy90ZW1wbGF0ZS90ZW1wbGF0ZS1pbXBsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLE1BQXNCLFlBQVk7SUFFaEMsWUFBb0IsS0FBUTtRQUMxQixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQTtJQUNwQixDQUFDO0NBQ0Y7QUFMRCxvQ0FLQyJ9 \ No newline at end of file diff --git a/packages/osrl/liquidjs/template/template.d.ts b/packages/osrl/liquidjs/template/template.d.ts new file mode 100644 index 00000000..ae07c662 --- /dev/null +++ b/packages/osrl/liquidjs/template/template.d.ts @@ -0,0 +1,7 @@ +import { Context } from '../context/context'; +import { Token } from '../tokens/token'; +import { Emitter } from '../emitters/emitter'; +export interface Template { + token: Token; + render(ctx: Context, emitter: Emitter): any; +} diff --git a/packages/osrl/liquidjs/template/template.js b/packages/osrl/liquidjs/template/template.js new file mode 100644 index 00000000..98db9fc6 --- /dev/null +++ b/packages/osrl/liquidjs/template/template.js @@ -0,0 +1,3 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcGxhdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbGlxdWlkanMvdGVtcGxhdGUvdGVtcGxhdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiJ9 \ No newline at end of file diff --git a/packages/osrl/liquidjs/template/value.d.ts b/packages/osrl/liquidjs/template/value.d.ts new file mode 100644 index 00000000..ee585b03 --- /dev/null +++ b/packages/osrl/liquidjs/template/value.d.ts @@ -0,0 +1,13 @@ +import { Expression } from '../render/expression'; +import { Filter } from './filter/filter'; +import { Context } from '../context/context'; +import { Liquid } from '../liquid'; +export declare class Value { + readonly filters: Filter[]; + readonly initial: Expression; + /** + * @param str the value to be valuated, eg.: "foobar" | truncate: 3 + */ + constructor(str: string, liquid: Liquid); + value(ctx: Context, lenient: boolean): Generator; +} diff --git a/packages/osrl/liquidjs/template/value.js b/packages/osrl/liquidjs/template/value.js new file mode 100644 index 00000000..1e854475 --- /dev/null +++ b/packages/osrl/liquidjs/template/value.js @@ -0,0 +1,26 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.Value = void 0; +const tokenizer_1 = require("../parser/tokenizer"); +const filter_1 = require("./filter/filter"); +class Value { + /** + * @param str the value to be valuated, eg.: "foobar" | truncate: 3 + */ + constructor(str, liquid) { + this.filters = []; + const tokenizer = new tokenizer_1.Tokenizer(str, liquid.options.operatorsTrie); + this.initial = tokenizer.readExpression(); + this.filters = tokenizer.readFilters().map(({ name, args }) => new filter_1.Filter(name, liquid.filters.get(name), args, liquid)); + } + *value(ctx, lenient) { + lenient = lenient || (ctx.opts.lenientIf && this.filters.length > 0 && this.filters[0].name === 'default'); + let val = yield this.initial.evaluate(ctx, lenient); + for (const filter of this.filters) { + val = yield filter.render(val, ctx); + } + return val; + } +} +exports.Value = Value; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsdWUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbGlxdWlkanMvdGVtcGxhdGUvdmFsdWUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EsbURBQStDO0FBQy9DLDRDQUF3QztBQUl4QyxNQUFhLEtBQUs7SUFJaEI7O09BRUc7SUFDSCxZQUFvQixHQUFXLEVBQUUsTUFBYztRQU4vQixZQUFPLEdBQWEsRUFBRSxDQUFBO1FBT3BDLE1BQU0sU0FBUyxHQUFHLElBQUkscUJBQVMsQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQTtRQUNsRSxJQUFJLENBQUMsT0FBTyxHQUFHLFNBQVMsQ0FBQyxjQUFjLEVBQUUsQ0FBQTtRQUN6QyxJQUFJLENBQUMsT0FBTyxHQUFHLFNBQVMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLENBQUMsSUFBSSxlQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFBO0lBQzFILENBQUM7SUFDTSxDQUFFLEtBQUssQ0FBRSxHQUFZLEVBQUUsT0FBZ0I7UUFDNUMsT0FBTyxHQUFHLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxTQUFTLENBQUMsQ0FBQTtRQUMxRyxJQUFJLEdBQUcsR0FBRyxNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQTtRQUVuRCxLQUFLLE1BQU0sTUFBTSxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDakMsR0FBRyxHQUFHLE1BQU0sTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUE7U0FDcEM7UUFDRCxPQUFPLEdBQUcsQ0FBQTtJQUNaLENBQUM7Q0FDRjtBQXJCRCxzQkFxQkMifQ== \ No newline at end of file diff --git a/packages/osrl/liquidjs/tokens/delimited-token.d.ts b/packages/osrl/liquidjs/tokens/delimited-token.d.ts new file mode 100644 index 00000000..2cac55c5 --- /dev/null +++ b/packages/osrl/liquidjs/tokens/delimited-token.d.ts @@ -0,0 +1,8 @@ +import { Token } from './token'; +import { TokenKind } from '../parser/token-kind'; +export declare abstract class DelimitedToken extends Token { + trimLeft: boolean; + trimRight: boolean; + content: string; + constructor(kind: TokenKind, content: string, input: string, begin: number, end: number, trimLeft: boolean, trimRight: boolean, file?: string); +} diff --git a/packages/osrl/liquidjs/tokens/delimited-token.js b/packages/osrl/liquidjs/tokens/delimited-token.js new file mode 100644 index 00000000..4a57d4a5 --- /dev/null +++ b/packages/osrl/liquidjs/tokens/delimited-token.js @@ -0,0 +1,22 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.DelimitedToken = void 0; +const token_1 = require("./token"); +const underscore_1 = require("../util/underscore"); +class DelimitedToken extends token_1.Token { + constructor(kind, content, input, begin, end, trimLeft, trimRight, file) { + super(kind, input, begin, end, file); + this.trimLeft = false; + this.trimRight = false; + this.content = this.getText(); + const tl = content[0] === '-'; + const tr = (0, underscore_1.last)(content) === '-'; + this.content = content + .slice(tl ? 1 : 0, tr ? -1 : content.length) + .trim(); + this.trimLeft = tl || trimLeft; + this.trimRight = tr || trimRight; + } +} +exports.DelimitedToken = DelimitedToken; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVsaW1pdGVkLXRva2VuLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xpcXVpZGpzL3Rva2Vucy9kZWxpbWl0ZWQtdG9rZW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsbUNBQStCO0FBRS9CLG1EQUF5QztBQUV6QyxNQUFzQixjQUFlLFNBQVEsYUFBSztJQUloRCxZQUNFLElBQWUsRUFDZixPQUFlLEVBQ2YsS0FBYSxFQUNiLEtBQWEsRUFDYixHQUFXLEVBQ1gsUUFBaUIsRUFDakIsU0FBa0IsRUFDbEIsSUFBYTtRQUViLEtBQUssQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUE7UUFiL0IsYUFBUSxHQUFHLEtBQUssQ0FBQTtRQUNoQixjQUFTLEdBQUcsS0FBSyxDQUFBO1FBYXRCLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFBO1FBQzdCLE1BQU0sRUFBRSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUE7UUFDN0IsTUFBTSxFQUFFLEdBQUcsSUFBQSxpQkFBSSxFQUFDLE9BQU8sQ0FBQyxLQUFLLEdBQUcsQ0FBQTtRQUNoQyxJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU87YUFDbkIsS0FBSyxDQUNKLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQ1YsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FDekI7YUFDQSxJQUFJLEVBQUUsQ0FBQTtRQUNULElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxJQUFJLFFBQVEsQ0FBQTtRQUM5QixJQUFJLENBQUMsU0FBUyxHQUFHLEVBQUUsSUFBSSxTQUFTLENBQUE7SUFDbEMsQ0FBQztDQUNGO0FBM0JELHdDQTJCQyJ9 \ No newline at end of file diff --git a/packages/osrl/liquidjs/tokens/filter-token.d.ts b/packages/osrl/liquidjs/tokens/filter-token.d.ts new file mode 100644 index 00000000..f298cc1a --- /dev/null +++ b/packages/osrl/liquidjs/tokens/filter-token.d.ts @@ -0,0 +1,7 @@ +import { Token } from './token'; +import { FilterArg } from '../parser/filter-arg'; +export declare class FilterToken extends Token { + name: string; + args: FilterArg[]; + constructor(name: string, args: FilterArg[], input: string, begin: number, end: number, file?: string); +} diff --git a/packages/osrl/liquidjs/tokens/filter-token.js b/packages/osrl/liquidjs/tokens/filter-token.js new file mode 100644 index 00000000..14725cb0 --- /dev/null +++ b/packages/osrl/liquidjs/tokens/filter-token.js @@ -0,0 +1,14 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.FilterToken = void 0; +const token_1 = require("./token"); +const token_kind_1 = require("../parser/token-kind"); +class FilterToken extends token_1.Token { + constructor(name, args, input, begin, end, file) { + super(token_kind_1.TokenKind.Filter, input, begin, end, file); + this.name = name; + this.args = args; + } +} +exports.FilterToken = FilterToken; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLXRva2VuLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xpcXVpZGpzL3Rva2Vucy9maWx0ZXItdG9rZW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsbUNBQStCO0FBRS9CLHFEQUFnRDtBQUVoRCxNQUFhLFdBQVksU0FBUSxhQUFLO0lBQ3BDLFlBQ1MsSUFBWSxFQUNaLElBQWlCLEVBQ3hCLEtBQWEsRUFDYixLQUFhLEVBQ2IsR0FBVyxFQUNYLElBQWE7UUFFYixLQUFLLENBQUMsc0JBQVMsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUE7UUFQekMsU0FBSSxHQUFKLElBQUksQ0FBUTtRQUNaLFNBQUksR0FBSixJQUFJLENBQWE7SUFPMUIsQ0FBQztDQUNGO0FBWEQsa0NBV0MifQ== \ No newline at end of file diff --git a/packages/osrl/liquidjs/tokens/hash-token.d.ts b/packages/osrl/liquidjs/tokens/hash-token.d.ts new file mode 100644 index 00000000..74668c7a --- /dev/null +++ b/packages/osrl/liquidjs/tokens/hash-token.d.ts @@ -0,0 +1,12 @@ +import { Token } from './token'; +import { ValueToken } from './value-token'; +import { IdentifierToken } from './identifier-token'; +export declare class HashToken extends Token { + input: string; + begin: number; + end: number; + name: IdentifierToken; + value?: ValueToken; + file?: string; + constructor(input: string, begin: number, end: number, name: IdentifierToken, value?: ValueToken, file?: string); +} diff --git a/packages/osrl/liquidjs/tokens/hash-token.js b/packages/osrl/liquidjs/tokens/hash-token.js new file mode 100644 index 00000000..5d62a9ed --- /dev/null +++ b/packages/osrl/liquidjs/tokens/hash-token.js @@ -0,0 +1,18 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.HashToken = void 0; +const token_1 = require("./token"); +const token_kind_1 = require("../parser/token-kind"); +class HashToken extends token_1.Token { + constructor(input, begin, end, name, value, file) { + super(token_kind_1.TokenKind.Hash, input, begin, end, file); + this.input = input; + this.begin = begin; + this.end = end; + this.name = name; + this.value = value; + this.file = file; + } +} +exports.HashToken = HashToken; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGFzaC10b2tlbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saXF1aWRqcy90b2tlbnMvaGFzaC10b2tlbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxtQ0FBK0I7QUFHL0IscURBQWdEO0FBRWhELE1BQWEsU0FBVSxTQUFRLGFBQUs7SUFDbEMsWUFDUyxLQUFhLEVBQ2IsS0FBYSxFQUNiLEdBQVcsRUFDWCxJQUFxQixFQUNyQixLQUFrQixFQUNsQixJQUFhO1FBRXBCLEtBQUssQ0FBQyxzQkFBUyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQTtRQVB2QyxVQUFLLEdBQUwsS0FBSyxDQUFRO1FBQ2IsVUFBSyxHQUFMLEtBQUssQ0FBUTtRQUNiLFFBQUcsR0FBSCxHQUFHLENBQVE7UUFDWCxTQUFJLEdBQUosSUFBSSxDQUFpQjtRQUNyQixVQUFLLEdBQUwsS0FBSyxDQUFhO1FBQ2xCLFNBQUksR0FBSixJQUFJLENBQVM7SUFHdEIsQ0FBQztDQUNGO0FBWEQsOEJBV0MifQ== \ No newline at end of file diff --git a/packages/osrl/liquidjs/tokens/html-token.d.ts b/packages/osrl/liquidjs/tokens/html-token.d.ts new file mode 100644 index 00000000..9fc61577 --- /dev/null +++ b/packages/osrl/liquidjs/tokens/html-token.d.ts @@ -0,0 +1,11 @@ +import { Token } from './token'; +export declare class HTMLToken extends Token { + input: string; + begin: number; + end: number; + file?: string; + trimLeft: number; + trimRight: number; + constructor(input: string, begin: number, end: number, file?: string); + getContent(): string; +} diff --git a/packages/osrl/liquidjs/tokens/html-token.js b/packages/osrl/liquidjs/tokens/html-token.js new file mode 100644 index 00000000..6d0b67ce --- /dev/null +++ b/packages/osrl/liquidjs/tokens/html-token.js @@ -0,0 +1,21 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.HTMLToken = void 0; +const token_1 = require("./token"); +const token_kind_1 = require("../parser/token-kind"); +class HTMLToken extends token_1.Token { + constructor(input, begin, end, file) { + super(token_kind_1.TokenKind.HTML, input, begin, end, file); + this.input = input; + this.begin = begin; + this.end = end; + this.file = file; + this.trimLeft = 0; + this.trimRight = 0; + } + getContent() { + return this.input.slice(this.begin + this.trimLeft, this.end - this.trimRight); + } +} +exports.HTMLToken = HTMLToken; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHRtbC10b2tlbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saXF1aWRqcy90b2tlbnMvaHRtbC10b2tlbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxtQ0FBK0I7QUFDL0IscURBQWdEO0FBRWhELE1BQWEsU0FBVSxTQUFRLGFBQUs7SUFHbEMsWUFDUyxLQUFhLEVBQ2IsS0FBYSxFQUNiLEdBQVcsRUFDWCxJQUFhO1FBRXBCLEtBQUssQ0FBQyxzQkFBUyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQTtRQUx2QyxVQUFLLEdBQUwsS0FBSyxDQUFRO1FBQ2IsVUFBSyxHQUFMLEtBQUssQ0FBUTtRQUNiLFFBQUcsR0FBSCxHQUFHLENBQVE7UUFDWCxTQUFJLEdBQUosSUFBSSxDQUFTO1FBTnRCLGFBQVEsR0FBRyxDQUFDLENBQUE7UUFDWixjQUFTLEdBQUcsQ0FBQyxDQUFBO0lBUWIsQ0FBQztJQUNNLFVBQVU7UUFDZixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQTtJQUNoRixDQUFDO0NBQ0Y7QUFkRCw4QkFjQyJ9 \ No newline at end of file diff --git a/packages/osrl/liquidjs/tokens/identifier-token.d.ts b/packages/osrl/liquidjs/tokens/identifier-token.d.ts new file mode 100644 index 00000000..35fc3a6e --- /dev/null +++ b/packages/osrl/liquidjs/tokens/identifier-token.d.ts @@ -0,0 +1,10 @@ +import { Token } from './token'; +export declare class IdentifierToken extends Token { + input: string; + begin: number; + end: number; + file?: string; + content: string; + constructor(input: string, begin: number, end: number, file?: string); + isNumber(allowSign?: boolean): boolean; +} diff --git a/packages/osrl/liquidjs/tokens/identifier-token.js b/packages/osrl/liquidjs/tokens/identifier-token.js new file mode 100644 index 00000000..16619e28 --- /dev/null +++ b/packages/osrl/liquidjs/tokens/identifier-token.js @@ -0,0 +1,28 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.IdentifierToken = void 0; +const token_1 = require("./token"); +const character_1 = require("../util/character"); +const token_kind_1 = require("../parser/token-kind"); +class IdentifierToken extends token_1.Token { + constructor(input, begin, end, file) { + super(token_kind_1.TokenKind.Word, input, begin, end, file); + this.input = input; + this.begin = begin; + this.end = end; + this.file = file; + this.content = this.getText(); + } + isNumber(allowSign = false) { + const begin = allowSign && character_1.TYPES[this.input.charCodeAt(this.begin)] & character_1.SIGN + ? this.begin + 1 + : this.begin; + for (let i = begin; i < this.end; i++) { + if (!(character_1.TYPES[this.input.charCodeAt(i)] & character_1.NUMBER)) + return false; + } + return true; + } +} +exports.IdentifierToken = IdentifierToken; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWRlbnRpZmllci10b2tlbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saXF1aWRqcy90b2tlbnMvaWRlbnRpZmllci10b2tlbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxtQ0FBK0I7QUFDL0IsaURBQXVEO0FBQ3ZELHFEQUFnRDtBQUVoRCxNQUFhLGVBQWdCLFNBQVEsYUFBSztJQUV4QyxZQUNTLEtBQWEsRUFDYixLQUFhLEVBQ2IsR0FBVyxFQUNYLElBQWE7UUFFcEIsS0FBSyxDQUFDLHNCQUFTLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFBO1FBTHZDLFVBQUssR0FBTCxLQUFLLENBQVE7UUFDYixVQUFLLEdBQUwsS0FBSyxDQUFRO1FBQ2IsUUFBRyxHQUFILEdBQUcsQ0FBUTtRQUNYLFNBQUksR0FBSixJQUFJLENBQVM7UUFHcEIsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUE7SUFDL0IsQ0FBQztJQUNELFFBQVEsQ0FBRSxTQUFTLEdBQUcsS0FBSztRQUN6QixNQUFNLEtBQUssR0FBRyxTQUFTLElBQUksaUJBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxnQkFBSTtZQUN4RSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDO1lBQ2hCLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFBO1FBQ2QsS0FBSyxJQUFJLENBQUMsR0FBRyxLQUFLLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDckMsSUFBSSxDQUFDLENBQUMsaUJBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLGtCQUFNLENBQUM7Z0JBQUUsT0FBTyxLQUFLLENBQUE7U0FDOUQ7UUFDRCxPQUFPLElBQUksQ0FBQTtJQUNiLENBQUM7Q0FDRjtBQXBCRCwwQ0FvQkMifQ== \ No newline at end of file diff --git a/packages/osrl/liquidjs/tokens/liquid-tag-token.d.ts b/packages/osrl/liquidjs/tokens/liquid-tag-token.d.ts new file mode 100644 index 00000000..0de5d5b0 --- /dev/null +++ b/packages/osrl/liquidjs/tokens/liquid-tag-token.d.ts @@ -0,0 +1,7 @@ +import { DelimitedToken } from './delimited-token'; +import { NormalizedFullOptions } from '../liquid-options'; +export declare class LiquidTagToken extends DelimitedToken { + name: string; + args: string; + constructor(input: string, begin: number, end: number, options: NormalizedFullOptions, file?: string); +} diff --git a/packages/osrl/liquidjs/tokens/liquid-tag-token.js b/packages/osrl/liquidjs/tokens/liquid-tag-token.js new file mode 100644 index 00000000..651c8a09 --- /dev/null +++ b/packages/osrl/liquidjs/tokens/liquid-tag-token.js @@ -0,0 +1,28 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.LiquidTagToken = void 0; +const delimited_token_1 = require("./delimited-token"); +const error_1 = require("../util/error"); +const token_kind_1 = require("../parser/token-kind"); +const tokenizer_1 = require("../parser/tokenizer"); +class LiquidTagToken extends delimited_token_1.DelimitedToken { + constructor(input, begin, end, options, file) { + const value = input.slice(begin, end); + super(token_kind_1.TokenKind.Tag, value, input, begin, end, false, false, file); + if (!/\S/.test(value)) { + // A line that contains only whitespace. + this.name = ''; + this.args = ''; + } + else { + const tokenizer = new tokenizer_1.Tokenizer(this.content, options.operatorsTrie); + this.name = tokenizer.readTagName(); + if (!this.name) + throw new error_1.TokenizationError(`illegal liquid tag syntax`, this); + tokenizer.skipBlank(); + this.args = tokenizer.remaining(); + } + } +} +exports.LiquidTagToken = LiquidTagToken; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlxdWlkLXRhZy10b2tlbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saXF1aWRqcy90b2tlbnMvbGlxdWlkLXRhZy10b2tlbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSx1REFBa0Q7QUFDbEQseUNBQWlEO0FBRWpELHFEQUFnRDtBQUNoRCxtREFBK0M7QUFFL0MsTUFBYSxjQUFlLFNBQVEsZ0NBQWM7SUFHaEQsWUFDRSxLQUFhLEVBQ2IsS0FBYSxFQUNiLEdBQVcsRUFDWCxPQUE4QixFQUM5QixJQUFhO1FBRWIsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUE7UUFDckMsS0FBSyxDQUFDLHNCQUFTLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFBO1FBRWxFLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ3JCLHdDQUF3QztZQUN4QyxJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQTtZQUNkLElBQUksQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFBO1NBQ2Y7YUFBTTtZQUNMLE1BQU0sU0FBUyxHQUFHLElBQUkscUJBQVMsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQTtZQUNwRSxJQUFJLENBQUMsSUFBSSxHQUFHLFNBQVMsQ0FBQyxXQUFXLEVBQUUsQ0FBQTtZQUNuQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUk7Z0JBQUUsTUFBTSxJQUFJLHlCQUFpQixDQUFDLDJCQUEyQixFQUFFLElBQUksQ0FBQyxDQUFBO1lBRTlFLFNBQVMsQ0FBQyxTQUFTLEVBQUUsQ0FBQTtZQUNyQixJQUFJLENBQUMsSUFBSSxHQUFHLFNBQVMsQ0FBQyxTQUFTLEVBQUUsQ0FBQTtTQUNsQztJQUNILENBQUM7Q0FDRjtBQTFCRCx3Q0EwQkMifQ== \ No newline at end of file diff --git a/packages/osrl/liquidjs/tokens/literal-token.d.ts b/packages/osrl/liquidjs/tokens/literal-token.d.ts new file mode 100644 index 00000000..9e835483 --- /dev/null +++ b/packages/osrl/liquidjs/tokens/literal-token.d.ts @@ -0,0 +1,9 @@ +import { Token } from './token'; +export declare class LiteralToken extends Token { + input: string; + begin: number; + end: number; + file?: string; + literal: string; + constructor(input: string, begin: number, end: number, file?: string); +} diff --git a/packages/osrl/liquidjs/tokens/literal-token.js b/packages/osrl/liquidjs/tokens/literal-token.js new file mode 100644 index 00000000..e6450c4e --- /dev/null +++ b/packages/osrl/liquidjs/tokens/literal-token.js @@ -0,0 +1,17 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.LiteralToken = void 0; +const token_1 = require("./token"); +const token_kind_1 = require("../parser/token-kind"); +class LiteralToken extends token_1.Token { + constructor(input, begin, end, file) { + super(token_kind_1.TokenKind.Literal, input, begin, end, file); + this.input = input; + this.begin = begin; + this.end = end; + this.file = file; + this.literal = this.getText(); + } +} +exports.LiteralToken = LiteralToken; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGl0ZXJhbC10b2tlbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saXF1aWRqcy90b2tlbnMvbGl0ZXJhbC10b2tlbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxtQ0FBK0I7QUFDL0IscURBQWdEO0FBRWhELE1BQWEsWUFBYSxTQUFRLGFBQUs7SUFFckMsWUFDUyxLQUFhLEVBQ2IsS0FBYSxFQUNiLEdBQVcsRUFDWCxJQUFhO1FBRXBCLEtBQUssQ0FBQyxzQkFBUyxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQTtRQUwxQyxVQUFLLEdBQUwsS0FBSyxDQUFRO1FBQ2IsVUFBSyxHQUFMLEtBQUssQ0FBUTtRQUNiLFFBQUcsR0FBSCxHQUFHLENBQVE7UUFDWCxTQUFJLEdBQUosSUFBSSxDQUFTO1FBR3BCLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFBO0lBQy9CLENBQUM7Q0FDRjtBQVhELG9DQVdDIn0= \ No newline at end of file diff --git a/packages/osrl/liquidjs/tokens/number-token.d.ts b/packages/osrl/liquidjs/tokens/number-token.d.ts new file mode 100644 index 00000000..29c7b736 --- /dev/null +++ b/packages/osrl/liquidjs/tokens/number-token.d.ts @@ -0,0 +1,7 @@ +import { Token } from './token'; +import { IdentifierToken } from './identifier-token'; +export declare class NumberToken extends Token { + whole: IdentifierToken; + decimal?: IdentifierToken; + constructor(whole: IdentifierToken, decimal?: IdentifierToken); +} diff --git a/packages/osrl/liquidjs/tokens/number-token.js b/packages/osrl/liquidjs/tokens/number-token.js new file mode 100644 index 00000000..3d5fb37a --- /dev/null +++ b/packages/osrl/liquidjs/tokens/number-token.js @@ -0,0 +1,14 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.NumberToken = void 0; +const token_1 = require("./token"); +const token_kind_1 = require("../parser/token-kind"); +class NumberToken extends token_1.Token { + constructor(whole, decimal) { + super(token_kind_1.TokenKind.Number, whole.input, whole.begin, decimal ? decimal.end : whole.end, whole.file); + this.whole = whole; + this.decimal = decimal; + } +} +exports.NumberToken = NumberToken; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnVtYmVyLXRva2VuLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xpcXVpZGpzL3Rva2Vucy9udW1iZXItdG9rZW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsbUNBQStCO0FBRS9CLHFEQUFnRDtBQUVoRCxNQUFhLFdBQVksU0FBUSxhQUFLO0lBQ3BDLFlBQ1MsS0FBc0IsRUFDdEIsT0FBeUI7UUFFaEMsS0FBSyxDQUFDLHNCQUFTLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFBO1FBSHpGLFVBQUssR0FBTCxLQUFLLENBQWlCO1FBQ3RCLFlBQU8sR0FBUCxPQUFPLENBQWtCO0lBR2xDLENBQUM7Q0FDRjtBQVBELGtDQU9DIn0= \ No newline at end of file diff --git a/packages/osrl/liquidjs/tokens/operator-token.d.ts b/packages/osrl/liquidjs/tokens/operator-token.d.ts new file mode 100644 index 00000000..e7a3b780 --- /dev/null +++ b/packages/osrl/liquidjs/tokens/operator-token.d.ts @@ -0,0 +1,21 @@ +import { Token } from './token'; +export declare const precedence: { + '==': number; + '!=': number; + '>': number; + '<': number; + '>=': number; + '<=': number; + contains: number; + and: number; + or: number; +}; +export declare class OperatorToken extends Token { + input: string; + begin: number; + end: number; + file?: string; + operator: string; + constructor(input: string, begin: number, end: number, file?: string); + getPrecedence(): any; +} diff --git a/packages/osrl/liquidjs/tokens/operator-token.js b/packages/osrl/liquidjs/tokens/operator-token.js new file mode 100644 index 00000000..8a2ad7c9 --- /dev/null +++ b/packages/osrl/liquidjs/tokens/operator-token.js @@ -0,0 +1,32 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.OperatorToken = exports.precedence = void 0; +const token_1 = require("./token"); +const token_kind_1 = require("../parser/token-kind"); +exports.precedence = { + '==': 1, + '!=': 1, + '>': 1, + '<': 1, + '>=': 1, + '<=': 1, + 'contains': 1, + 'and': 0, + 'or': 0 +}; +class OperatorToken extends token_1.Token { + constructor(input, begin, end, file) { + super(token_kind_1.TokenKind.Operator, input, begin, end, file); + this.input = input; + this.begin = begin; + this.end = end; + this.file = file; + this.operator = this.getText(); + } + getPrecedence() { + const key = this.getText(); + return key in exports.precedence ? exports.precedence[key] : 1; + } +} +exports.OperatorToken = OperatorToken; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3BlcmF0b3ItdG9rZW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbGlxdWlkanMvdG9rZW5zL29wZXJhdG9yLXRva2VuLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLG1DQUErQjtBQUMvQixxREFBZ0Q7QUFFbkMsUUFBQSxVQUFVLEdBQUc7SUFDeEIsSUFBSSxFQUFFLENBQUM7SUFDUCxJQUFJLEVBQUUsQ0FBQztJQUNQLEdBQUcsRUFBRSxDQUFDO0lBQ04sR0FBRyxFQUFFLENBQUM7SUFDTixJQUFJLEVBQUUsQ0FBQztJQUNQLElBQUksRUFBRSxDQUFDO0lBQ1AsVUFBVSxFQUFFLENBQUM7SUFDYixLQUFLLEVBQUUsQ0FBQztJQUNSLElBQUksRUFBRSxDQUFDO0NBQ1IsQ0FBQTtBQUVELE1BQWEsYUFBYyxTQUFRLGFBQUs7SUFFdEMsWUFDUyxLQUFhLEVBQ2IsS0FBYSxFQUNiLEdBQVcsRUFDWCxJQUFhO1FBRXBCLEtBQUssQ0FBQyxzQkFBUyxDQUFDLFFBQVEsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQTtRQUwzQyxVQUFLLEdBQUwsS0FBSyxDQUFRO1FBQ2IsVUFBSyxHQUFMLEtBQUssQ0FBUTtRQUNiLFFBQUcsR0FBSCxHQUFHLENBQVE7UUFDWCxTQUFJLEdBQUosSUFBSSxDQUFTO1FBR3BCLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFBO0lBQ2hDLENBQUM7SUFDRCxhQUFhO1FBQ1gsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFBO1FBQzFCLE9BQU8sR0FBRyxJQUFJLGtCQUFVLENBQUMsQ0FBQyxDQUFDLGtCQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUNoRCxDQUFDO0NBQ0Y7QUFmRCxzQ0FlQyJ9 \ No newline at end of file diff --git a/packages/osrl/liquidjs/tokens/output-token.d.ts b/packages/osrl/liquidjs/tokens/output-token.d.ts new file mode 100644 index 00000000..33a7cb33 --- /dev/null +++ b/packages/osrl/liquidjs/tokens/output-token.d.ts @@ -0,0 +1,5 @@ +import { DelimitedToken } from './delimited-token'; +import { NormalizedFullOptions } from '../liquid-options'; +export declare class OutputToken extends DelimitedToken { + constructor(input: string, begin: number, end: number, options: NormalizedFullOptions, file?: string); +} diff --git a/packages/osrl/liquidjs/tokens/output-token.js b/packages/osrl/liquidjs/tokens/output-token.js new file mode 100644 index 00000000..8b65e9c0 --- /dev/null +++ b/packages/osrl/liquidjs/tokens/output-token.js @@ -0,0 +1,14 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.OutputToken = void 0; +const delimited_token_1 = require("./delimited-token"); +const token_kind_1 = require("../parser/token-kind"); +class OutputToken extends delimited_token_1.DelimitedToken { + constructor(input, begin, end, options, file) { + const { trimOutputLeft, trimOutputRight, outputDelimiterLeft, outputDelimiterRight } = options; + const value = input.slice(begin + outputDelimiterLeft.length, end - outputDelimiterRight.length); + super(token_kind_1.TokenKind.Output, value, input, begin, end, trimOutputLeft, trimOutputRight, file); + } +} +exports.OutputToken = OutputToken; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3V0cHV0LXRva2VuLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xpcXVpZGpzL3Rva2Vucy9vdXRwdXQtdG9rZW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsdURBQWtEO0FBRWxELHFEQUFnRDtBQUVoRCxNQUFhLFdBQVksU0FBUSxnQ0FBYztJQUM3QyxZQUNFLEtBQWEsRUFDYixLQUFhLEVBQ2IsR0FBVyxFQUNYLE9BQThCLEVBQzlCLElBQWE7UUFFYixNQUFNLEVBQUUsY0FBYyxFQUFFLGVBQWUsRUFBRSxtQkFBbUIsRUFBRSxvQkFBb0IsRUFBRSxHQUFHLE9BQU8sQ0FBQTtRQUM5RixNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxtQkFBbUIsQ0FBQyxNQUFNLEVBQUUsR0FBRyxHQUFHLG9CQUFvQixDQUFDLE1BQU0sQ0FBQyxDQUFBO1FBQ2hHLEtBQUssQ0FBQyxzQkFBUyxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsY0FBYyxFQUFFLGVBQWUsRUFBRSxJQUFJLENBQUMsQ0FBQTtJQUMxRixDQUFDO0NBQ0Y7QUFaRCxrQ0FZQyJ9 \ No newline at end of file diff --git a/packages/osrl/liquidjs/tokens/property-access-token.d.ts b/packages/osrl/liquidjs/tokens/property-access-token.d.ts new file mode 100644 index 00000000..db02d9cb --- /dev/null +++ b/packages/osrl/liquidjs/tokens/property-access-token.d.ts @@ -0,0 +1,9 @@ +import { Token } from './token'; +import { IdentifierToken } from './identifier-token'; +import { QuotedToken } from './quoted-token'; +export declare class PropertyAccessToken extends Token { + variable: IdentifierToken | QuotedToken; + props: (IdentifierToken | QuotedToken | PropertyAccessToken)[]; + propertyName: string; + constructor(variable: IdentifierToken | QuotedToken, props: (IdentifierToken | QuotedToken | PropertyAccessToken)[], end: number); +} diff --git a/packages/osrl/liquidjs/tokens/property-access-token.js b/packages/osrl/liquidjs/tokens/property-access-token.js new file mode 100644 index 00000000..2b6efce9 --- /dev/null +++ b/packages/osrl/liquidjs/tokens/property-access-token.js @@ -0,0 +1,19 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.PropertyAccessToken = void 0; +const token_1 = require("./token"); +const identifier_token_1 = require("./identifier-token"); +const token_kind_1 = require("../parser/token-kind"); +const parse_string_literal_1 = require("../parser/parse-string-literal"); +class PropertyAccessToken extends token_1.Token { + constructor(variable, props, end) { + super(token_kind_1.TokenKind.PropertyAccess, variable.input, variable.begin, end, variable.file); + this.variable = variable; + this.props = props; + this.propertyName = this.variable instanceof identifier_token_1.IdentifierToken + ? this.variable.getText() + : (0, parse_string_literal_1.parseStringLiteral)(this.variable.getText()); + } +} +exports.PropertyAccessToken = PropertyAccessToken; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvcGVydHktYWNjZXNzLXRva2VuLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xpcXVpZGpzL3Rva2Vucy9wcm9wZXJ0eS1hY2Nlc3MtdG9rZW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsbUNBQStCO0FBQy9CLHlEQUFvRDtBQUVwRCxxREFBZ0Q7QUFDaEQseUVBQW1FO0FBRW5FLE1BQWEsbUJBQW9CLFNBQVEsYUFBSztJQUU1QyxZQUNTLFFBQXVDLEVBQ3ZDLEtBQThELEVBQ3JFLEdBQVc7UUFFWCxLQUFLLENBQUMsc0JBQVMsQ0FBQyxjQUFjLEVBQUUsUUFBUSxDQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUE7UUFKNUUsYUFBUSxHQUFSLFFBQVEsQ0FBK0I7UUFDdkMsVUFBSyxHQUFMLEtBQUssQ0FBeUQ7UUFJckUsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsUUFBUSxZQUFZLGtDQUFlO1lBQzFELENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRTtZQUN6QixDQUFDLENBQUMsSUFBQSx5Q0FBa0IsRUFBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUE7SUFDakQsQ0FBQztDQUNGO0FBWkQsa0RBWUMifQ== \ No newline at end of file diff --git a/packages/osrl/liquidjs/tokens/quoted-token.d.ts b/packages/osrl/liquidjs/tokens/quoted-token.d.ts new file mode 100644 index 00000000..879265a3 --- /dev/null +++ b/packages/osrl/liquidjs/tokens/quoted-token.d.ts @@ -0,0 +1,8 @@ +import { Token } from './token'; +export declare class QuotedToken extends Token { + input: string; + begin: number; + end: number; + file?: string; + constructor(input: string, begin: number, end: number, file?: string); +} diff --git a/packages/osrl/liquidjs/tokens/quoted-token.js b/packages/osrl/liquidjs/tokens/quoted-token.js new file mode 100644 index 00000000..23d09914 --- /dev/null +++ b/packages/osrl/liquidjs/tokens/quoted-token.js @@ -0,0 +1,16 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.QuotedToken = void 0; +const token_1 = require("./token"); +const token_kind_1 = require("../parser/token-kind"); +class QuotedToken extends token_1.Token { + constructor(input, begin, end, file) { + super(token_kind_1.TokenKind.Quoted, input, begin, end, file); + this.input = input; + this.begin = begin; + this.end = end; + this.file = file; + } +} +exports.QuotedToken = QuotedToken; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVvdGVkLXRva2VuLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xpcXVpZGpzL3Rva2Vucy9xdW90ZWQtdG9rZW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsbUNBQStCO0FBQy9CLHFEQUFnRDtBQUVoRCxNQUFhLFdBQVksU0FBUSxhQUFLO0lBQ3BDLFlBQ1MsS0FBYSxFQUNiLEtBQWEsRUFDYixHQUFXLEVBQ1gsSUFBYTtRQUVwQixLQUFLLENBQUMsc0JBQVMsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUE7UUFMekMsVUFBSyxHQUFMLEtBQUssQ0FBUTtRQUNiLFVBQUssR0FBTCxLQUFLLENBQVE7UUFDYixRQUFHLEdBQUgsR0FBRyxDQUFRO1FBQ1gsU0FBSSxHQUFKLElBQUksQ0FBUztJQUd0QixDQUFDO0NBQ0Y7QUFURCxrQ0FTQyJ9 \ No newline at end of file diff --git a/packages/osrl/liquidjs/tokens/range-token.d.ts b/packages/osrl/liquidjs/tokens/range-token.d.ts new file mode 100644 index 00000000..b9a0d71f --- /dev/null +++ b/packages/osrl/liquidjs/tokens/range-token.d.ts @@ -0,0 +1,11 @@ +import { Token } from './token'; +import { ValueToken } from './value-token'; +export declare class RangeToken extends Token { + input: string; + begin: number; + end: number; + lhs: ValueToken; + rhs: ValueToken; + file?: string; + constructor(input: string, begin: number, end: number, lhs: ValueToken, rhs: ValueToken, file?: string); +} diff --git a/packages/osrl/liquidjs/tokens/range-token.js b/packages/osrl/liquidjs/tokens/range-token.js new file mode 100644 index 00000000..92732e23 --- /dev/null +++ b/packages/osrl/liquidjs/tokens/range-token.js @@ -0,0 +1,18 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.RangeToken = void 0; +const token_1 = require("./token"); +const token_kind_1 = require("../parser/token-kind"); +class RangeToken extends token_1.Token { + constructor(input, begin, end, lhs, rhs, file) { + super(token_kind_1.TokenKind.Range, input, begin, end, file); + this.input = input; + this.begin = begin; + this.end = end; + this.lhs = lhs; + this.rhs = rhs; + this.file = file; + } +} +exports.RangeToken = RangeToken; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFuZ2UtdG9rZW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbGlxdWlkanMvdG9rZW5zL3JhbmdlLXRva2VuLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLG1DQUErQjtBQUUvQixxREFBZ0Q7QUFFaEQsTUFBYSxVQUFXLFNBQVEsYUFBSztJQUNuQyxZQUNTLEtBQWEsRUFDYixLQUFhLEVBQ2IsR0FBVyxFQUNYLEdBQWUsRUFDZixHQUFlLEVBQ2YsSUFBYTtRQUVwQixLQUFLLENBQUMsc0JBQVMsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUE7UUFQeEMsVUFBSyxHQUFMLEtBQUssQ0FBUTtRQUNiLFVBQUssR0FBTCxLQUFLLENBQVE7UUFDYixRQUFHLEdBQUgsR0FBRyxDQUFRO1FBQ1gsUUFBRyxHQUFILEdBQUcsQ0FBWTtRQUNmLFFBQUcsR0FBSCxHQUFHLENBQVk7UUFDZixTQUFJLEdBQUosSUFBSSxDQUFTO0lBR3RCLENBQUM7Q0FDRjtBQVhELGdDQVdDIn0= \ No newline at end of file diff --git a/packages/osrl/liquidjs/tokens/tag-token.d.ts b/packages/osrl/liquidjs/tokens/tag-token.d.ts new file mode 100644 index 00000000..17987967 --- /dev/null +++ b/packages/osrl/liquidjs/tokens/tag-token.d.ts @@ -0,0 +1,7 @@ +import { DelimitedToken } from './delimited-token'; +import { NormalizedFullOptions } from '../liquid-options'; +export declare class TagToken extends DelimitedToken { + name: string; + args: string; + constructor(input: string, begin: number, end: number, options: NormalizedFullOptions, file?: string); +} diff --git a/packages/osrl/liquidjs/tokens/tag-token.js b/packages/osrl/liquidjs/tokens/tag-token.js new file mode 100644 index 00000000..cf4d1f93 --- /dev/null +++ b/packages/osrl/liquidjs/tokens/tag-token.js @@ -0,0 +1,22 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.TagToken = void 0; +const delimited_token_1 = require("./delimited-token"); +const error_1 = require("../util/error"); +const token_kind_1 = require("../parser/token-kind"); +const tokenizer_1 = require("../parser/tokenizer"); +class TagToken extends delimited_token_1.DelimitedToken { + constructor(input, begin, end, options, file) { + const { trimTagLeft, trimTagRight, tagDelimiterLeft, tagDelimiterRight } = options; + const value = input.slice(begin + tagDelimiterLeft.length, end - tagDelimiterRight.length); + super(token_kind_1.TokenKind.Tag, value, input, begin, end, trimTagLeft, trimTagRight, file); + const tokenizer = new tokenizer_1.Tokenizer(this.content, options.operatorsTrie); + this.name = tokenizer.readTagName(); + if (!this.name) + throw new error_1.TokenizationError(`illegal tag syntax`, this); + tokenizer.skipBlank(); + this.args = tokenizer.remaining(); + } +} +exports.TagToken = TagToken; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFnLXRva2VuLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xpcXVpZGpzL3Rva2Vucy90YWctdG9rZW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsdURBQWtEO0FBQ2xELHlDQUFpRDtBQUVqRCxxREFBZ0Q7QUFDaEQsbURBQStDO0FBRS9DLE1BQWEsUUFBUyxTQUFRLGdDQUFjO0lBRzFDLFlBQ0UsS0FBYSxFQUNiLEtBQWEsRUFDYixHQUFXLEVBQ1gsT0FBOEIsRUFDOUIsSUFBYTtRQUViLE1BQU0sRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLGdCQUFnQixFQUFFLGlCQUFpQixFQUFFLEdBQUcsT0FBTyxDQUFBO1FBQ2xGLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxHQUFHLEdBQUcsaUJBQWlCLENBQUMsTUFBTSxDQUFDLENBQUE7UUFDMUYsS0FBSyxDQUFDLHNCQUFTLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLElBQUksQ0FBQyxDQUFBO1FBRS9FLE1BQU0sU0FBUyxHQUFHLElBQUkscUJBQVMsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQTtRQUNwRSxJQUFJLENBQUMsSUFBSSxHQUFHLFNBQVMsQ0FBQyxXQUFXLEVBQUUsQ0FBQTtRQUNuQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUk7WUFBRSxNQUFNLElBQUkseUJBQWlCLENBQUMsb0JBQW9CLEVBQUUsSUFBSSxDQUFDLENBQUE7UUFFdkUsU0FBUyxDQUFDLFNBQVMsRUFBRSxDQUFBO1FBQ3JCLElBQUksQ0FBQyxJQUFJLEdBQUcsU0FBUyxDQUFDLFNBQVMsRUFBRSxDQUFBO0lBQ25DLENBQUM7Q0FDRjtBQXJCRCw0QkFxQkMifQ== \ No newline at end of file diff --git a/packages/osrl/liquidjs/tokens/token.d.ts b/packages/osrl/liquidjs/tokens/token.d.ts new file mode 100644 index 00000000..7f302f7b --- /dev/null +++ b/packages/osrl/liquidjs/tokens/token.d.ts @@ -0,0 +1,12 @@ +import { TokenKind } from '../parser/token-kind'; +export declare abstract class Token { + kind: TokenKind; + input: string; + begin: number; + end: number; + file?: string; + constructor(kind: TokenKind, input: string, begin: number, end: number, file?: string); + getText(): string; + getPosition(): number[]; + size(): number; +} diff --git a/packages/osrl/liquidjs/tokens/token.js b/packages/osrl/liquidjs/tokens/token.js new file mode 100644 index 00000000..51cd777d --- /dev/null +++ b/packages/osrl/liquidjs/tokens/token.js @@ -0,0 +1,32 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.Token = void 0; +class Token { + constructor(kind, input, begin, end, file) { + this.kind = kind; + this.input = input; + this.begin = begin; + this.end = end; + this.file = file; + } + getText() { + return this.input.slice(this.begin, this.end); + } + getPosition() { + let [row, col] = [1, 1]; + for (let i = 0; i < this.begin; i++) { + if (this.input[i] === '\n') { + row++; + col = 1; + } + else + col++; + } + return [row, col]; + } + size() { + return this.end - this.begin; + } +} +exports.Token = Token; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbGlxdWlkanMvdG9rZW5zL3Rva2VuLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUVBLE1BQXNCLEtBQUs7SUFDekIsWUFDUyxJQUFlLEVBQ2YsS0FBYSxFQUNiLEtBQWEsRUFDYixHQUFXLEVBQ1gsSUFBYTtRQUpiLFNBQUksR0FBSixJQUFJLENBQVc7UUFDZixVQUFLLEdBQUwsS0FBSyxDQUFRO1FBQ2IsVUFBSyxHQUFMLEtBQUssQ0FBUTtRQUNiLFFBQUcsR0FBSCxHQUFHLENBQVE7UUFDWCxTQUFJLEdBQUosSUFBSSxDQUFTO0lBQ25CLENBQUM7SUFDRyxPQUFPO1FBQ1osT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQTtJQUMvQyxDQUFDO0lBQ00sV0FBVztRQUNoQixJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFBO1FBQ3ZCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ25DLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLEVBQUU7Z0JBQzFCLEdBQUcsRUFBRSxDQUFBO2dCQUNMLEdBQUcsR0FBRyxDQUFDLENBQUE7YUFDUjs7Z0JBQU0sR0FBRyxFQUFFLENBQUE7U0FDYjtRQUNELE9BQU8sQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUE7SUFDbkIsQ0FBQztJQUNNLElBQUk7UUFDVCxPQUFPLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQTtJQUM5QixDQUFDO0NBQ0Y7QUF4QkQsc0JBd0JDIn0= \ No newline at end of file diff --git a/packages/osrl/liquidjs/tokens/toplevel-token.d.ts b/packages/osrl/liquidjs/tokens/toplevel-token.d.ts new file mode 100644 index 00000000..420f0e17 --- /dev/null +++ b/packages/osrl/liquidjs/tokens/toplevel-token.d.ts @@ -0,0 +1,4 @@ +import { TagToken } from './tag-token'; +import { HTMLToken } from './html-token'; +import { OutputToken } from './output-token'; +export type TopLevelToken = TagToken | OutputToken | HTMLToken; diff --git a/packages/osrl/liquidjs/tokens/toplevel-token.js b/packages/osrl/liquidjs/tokens/toplevel-token.js new file mode 100644 index 00000000..a48e222a --- /dev/null +++ b/packages/osrl/liquidjs/tokens/toplevel-token.js @@ -0,0 +1,3 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9wbGV2ZWwtdG9rZW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbGlxdWlkanMvdG9rZW5zL3RvcGxldmVsLXRva2VuLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIifQ== \ No newline at end of file diff --git a/packages/osrl/liquidjs/tokens/value-token.d.ts b/packages/osrl/liquidjs/tokens/value-token.d.ts new file mode 100644 index 00000000..5edd3a8f --- /dev/null +++ b/packages/osrl/liquidjs/tokens/value-token.d.ts @@ -0,0 +1,5 @@ +import { RangeToken } from './range-token'; +import { LiteralToken } from './literal-token'; +import { QuotedToken } from './quoted-token'; +import { PropertyAccessToken } from './property-access-token'; +export type ValueToken = RangeToken | LiteralToken | QuotedToken | PropertyAccessToken; diff --git a/packages/osrl/liquidjs/tokens/value-token.js b/packages/osrl/liquidjs/tokens/value-token.js new file mode 100644 index 00000000..617e9f0c --- /dev/null +++ b/packages/osrl/liquidjs/tokens/value-token.js @@ -0,0 +1,3 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsdWUtdG9rZW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbGlxdWlkanMvdG9rZW5zL3ZhbHVlLXRva2VuLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIifQ== \ No newline at end of file diff --git a/packages/osrl/liquidjs/types.d.ts b/packages/osrl/liquidjs/types.d.ts new file mode 100644 index 00000000..07a413b6 --- /dev/null +++ b/packages/osrl/liquidjs/types.d.ts @@ -0,0 +1,29 @@ +import * as TypeGuards from './util/type-guards'; +export { TypeGuards }; +export { ParseError, TokenizationError, AssertionError } from './util/error'; +export { assert } from './util/assert'; +export { Drop } from './drop/drop'; +export { Emitter } from './emitters/emitter'; +export { Expression } from './render/expression'; +export { isFalsy, isTruthy } from './render/boolean'; +export { TagToken } from './tokens/tag-token'; +export { Context } from './context/context'; +export { Template } from './template/template'; +export { FilterImplOptions } from './template/filter/filter-impl-options'; +export { TagImplOptions } from './template/tag/tag-impl-options'; +export { TagImpl } from './template/tag/tag-impl'; +export { ParseStream } from './parser/parse-stream'; +export { Token } from './tokens/token'; +export { TokenKind } from './parser/token-kind'; +export { TopLevelToken } from './tokens/toplevel-token'; +export { Tokenizer } from './parser/tokenizer'; +export { Hash } from './template/tag/hash'; +export { Value } from './template/value'; +export { evalToken, evalQuotedToken } from './render/expression'; +export { toPromise, toThenable } from './util/async'; +export { defaultOperators, Operators } from './render/operator'; +export { createTrie, Trie } from './util/operator-trie'; +export { toValue } from './util/underscore'; +export { TimezoneDate } from './util/timezone-date'; +export * as filters from './builtin/filters'; +export * as tags from './builtin/tags'; diff --git a/packages/osrl/liquidjs/types.js b/packages/osrl/liquidjs/types.js new file mode 100644 index 00000000..469284ce --- /dev/null +++ b/packages/osrl/liquidjs/types.js @@ -0,0 +1,52 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.tags = exports.filters = exports.TimezoneDate = exports.toValue = exports.createTrie = exports.defaultOperators = exports.toThenable = exports.toPromise = exports.evalQuotedToken = exports.evalToken = exports.Value = exports.Hash = exports.Tokenizer = exports.TokenKind = exports.Token = exports.ParseStream = exports.Context = exports.TagToken = exports.isTruthy = exports.isFalsy = exports.Expression = exports.Drop = exports.assert = exports.AssertionError = exports.TokenizationError = exports.ParseError = exports.TypeGuards = void 0; +/* istanbul ignore file */ +const TypeGuards = require("./util/type-guards"); +exports.TypeGuards = TypeGuards; +var error_1 = require("./util/error"); +Object.defineProperty(exports, "ParseError", { enumerable: true, get: function () { return error_1.ParseError; } }); +Object.defineProperty(exports, "TokenizationError", { enumerable: true, get: function () { return error_1.TokenizationError; } }); +Object.defineProperty(exports, "AssertionError", { enumerable: true, get: function () { return error_1.AssertionError; } }); +var assert_1 = require("./util/assert"); +Object.defineProperty(exports, "assert", { enumerable: true, get: function () { return assert_1.assert; } }); +var drop_1 = require("./drop/drop"); +Object.defineProperty(exports, "Drop", { enumerable: true, get: function () { return drop_1.Drop; } }); +var expression_1 = require("./render/expression"); +Object.defineProperty(exports, "Expression", { enumerable: true, get: function () { return expression_1.Expression; } }); +var boolean_1 = require("./render/boolean"); +Object.defineProperty(exports, "isFalsy", { enumerable: true, get: function () { return boolean_1.isFalsy; } }); +Object.defineProperty(exports, "isTruthy", { enumerable: true, get: function () { return boolean_1.isTruthy; } }); +var tag_token_1 = require("./tokens/tag-token"); +Object.defineProperty(exports, "TagToken", { enumerable: true, get: function () { return tag_token_1.TagToken; } }); +var context_1 = require("./context/context"); +Object.defineProperty(exports, "Context", { enumerable: true, get: function () { return context_1.Context; } }); +var parse_stream_1 = require("./parser/parse-stream"); +Object.defineProperty(exports, "ParseStream", { enumerable: true, get: function () { return parse_stream_1.ParseStream; } }); +var token_1 = require("./tokens/token"); +Object.defineProperty(exports, "Token", { enumerable: true, get: function () { return token_1.Token; } }); +var token_kind_1 = require("./parser/token-kind"); +Object.defineProperty(exports, "TokenKind", { enumerable: true, get: function () { return token_kind_1.TokenKind; } }); +var tokenizer_1 = require("./parser/tokenizer"); +Object.defineProperty(exports, "Tokenizer", { enumerable: true, get: function () { return tokenizer_1.Tokenizer; } }); +var hash_1 = require("./template/tag/hash"); +Object.defineProperty(exports, "Hash", { enumerable: true, get: function () { return hash_1.Hash; } }); +var value_1 = require("./template/value"); +Object.defineProperty(exports, "Value", { enumerable: true, get: function () { return value_1.Value; } }); +var expression_2 = require("./render/expression"); +Object.defineProperty(exports, "evalToken", { enumerable: true, get: function () { return expression_2.evalToken; } }); +Object.defineProperty(exports, "evalQuotedToken", { enumerable: true, get: function () { return expression_2.evalQuotedToken; } }); +var async_1 = require("./util/async"); +Object.defineProperty(exports, "toPromise", { enumerable: true, get: function () { return async_1.toPromise; } }); +Object.defineProperty(exports, "toThenable", { enumerable: true, get: function () { return async_1.toThenable; } }); +var operator_1 = require("./render/operator"); +Object.defineProperty(exports, "defaultOperators", { enumerable: true, get: function () { return operator_1.defaultOperators; } }); +var operator_trie_1 = require("./util/operator-trie"); +Object.defineProperty(exports, "createTrie", { enumerable: true, get: function () { return operator_trie_1.createTrie; } }); +var underscore_1 = require("./util/underscore"); +Object.defineProperty(exports, "toValue", { enumerable: true, get: function () { return underscore_1.toValue; } }); +var timezone_date_1 = require("./util/timezone-date"); +Object.defineProperty(exports, "TimezoneDate", { enumerable: true, get: function () { return timezone_date_1.TimezoneDate; } }); +exports.filters = require("./builtin/filters"); +exports.tags = require("./builtin/tags"); +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvbGlxdWlkanMvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsMEJBQTBCO0FBQzFCLGlEQUFnRDtBQUN2QyxnQ0FBVTtBQUNuQixzQ0FBNEU7QUFBbkUsbUdBQUEsVUFBVSxPQUFBO0FBQUUsMEdBQUEsaUJBQWlCLE9BQUE7QUFBRSx1R0FBQSxjQUFjLE9BQUE7QUFDdEQsd0NBQXNDO0FBQTdCLGdHQUFBLE1BQU0sT0FBQTtBQUNmLG9DQUFrQztBQUF6Qiw0RkFBQSxJQUFJLE9BQUE7QUFFYixrREFBZ0Q7QUFBdkMsd0dBQUEsVUFBVSxPQUFBO0FBQ25CLDRDQUFvRDtBQUEzQyxrR0FBQSxPQUFPLE9BQUE7QUFBRSxtR0FBQSxRQUFRLE9BQUE7QUFDMUIsZ0RBQTZDO0FBQXBDLHFHQUFBLFFBQVEsT0FBQTtBQUNqQiw2Q0FBMkM7QUFBbEMsa0dBQUEsT0FBTyxPQUFBO0FBS2hCLHNEQUFtRDtBQUExQywyR0FBQSxXQUFXLE9BQUE7QUFDcEIsd0NBQXNDO0FBQTdCLDhGQUFBLEtBQUssT0FBQTtBQUNkLGtEQUErQztBQUF0Qyx1R0FBQSxTQUFTLE9BQUE7QUFFbEIsZ0RBQThDO0FBQXJDLHNHQUFBLFNBQVMsT0FBQTtBQUNsQiw0Q0FBMEM7QUFBakMsNEZBQUEsSUFBSSxPQUFBO0FBQ2IsMENBQXdDO0FBQS9CLDhGQUFBLEtBQUssT0FBQTtBQUNkLGtEQUFnRTtBQUF2RCx1R0FBQSxTQUFTLE9BQUE7QUFBRSw2R0FBQSxlQUFlLE9BQUE7QUFDbkMsc0NBQW9EO0FBQTNDLGtHQUFBLFNBQVMsT0FBQTtBQUFFLG1HQUFBLFVBQVUsT0FBQTtBQUM5Qiw4Q0FBK0Q7QUFBdEQsNEdBQUEsZ0JBQWdCLE9BQUE7QUFDekIsc0RBQXVEO0FBQTlDLDJHQUFBLFVBQVUsT0FBQTtBQUNuQixnREFBMkM7QUFBbEMscUdBQUEsT0FBTyxPQUFBO0FBQ2hCLHNEQUFtRDtBQUExQyw2R0FBQSxZQUFZLE9BQUE7QUFDckIsK0NBQTRDO0FBQzVDLHlDQUFzQyJ9 \ No newline at end of file diff --git a/packages/osrl/liquidjs/util/assert.d.ts b/packages/osrl/liquidjs/util/assert.d.ts new file mode 100644 index 00000000..72a2fcac --- /dev/null +++ b/packages/osrl/liquidjs/util/assert.d.ts @@ -0,0 +1 @@ +export declare function assert(predicate: T | null | undefined, message?: string | (() => string)): void; diff --git a/packages/osrl/liquidjs/util/assert.js b/packages/osrl/liquidjs/util/assert.js new file mode 100644 index 00000000..b6356b48 --- /dev/null +++ b/packages/osrl/liquidjs/util/assert.js @@ -0,0 +1,14 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.assert = void 0; +const error_1 = require("./error"); +function assert(predicate, message) { + if (!predicate) { + const msg = typeof message === 'function' + ? message() + : (message || `expect ${predicate} to be true`); + throw new error_1.AssertionError(msg); + } +} +exports.assert = assert; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZXJ0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xpcXVpZGpzL3V0aWwvYXNzZXJ0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLG1DQUF3QztBQUV4QyxTQUFnQixNQUFNLENBQU0sU0FBK0IsRUFBRSxPQUFpQztJQUM1RixJQUFJLENBQUMsU0FBUyxFQUFFO1FBQ2QsTUFBTSxHQUFHLEdBQUcsT0FBTyxPQUFPLEtBQUssVUFBVTtZQUN2QyxDQUFDLENBQUMsT0FBTyxFQUFFO1lBQ1gsQ0FBQyxDQUFDLENBQUMsT0FBTyxJQUFJLFVBQVUsU0FBUyxhQUFhLENBQUMsQ0FBQTtRQUNqRCxNQUFNLElBQUksc0JBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQTtLQUM5QjtBQUNILENBQUM7QUFQRCx3QkFPQyJ9 \ No newline at end of file diff --git a/packages/osrl/liquidjs/util/async.d.ts b/packages/osrl/liquidjs/util/async.d.ts new file mode 100644 index 00000000..83011c82 --- /dev/null +++ b/packages/osrl/liquidjs/util/async.d.ts @@ -0,0 +1,3 @@ +export declare function toPromise(val: Generator | Promise | T): Promise; +export declare function toValueSync(val: Generator | T): T; +export declare const toThenable: typeof toPromise; diff --git a/packages/osrl/liquidjs/util/async.js b/packages/osrl/liquidjs/util/async.js new file mode 100644 index 00000000..56862eef --- /dev/null +++ b/packages/osrl/liquidjs/util/async.js @@ -0,0 +1,68 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.toThenable = exports.toValueSync = exports.toPromise = void 0; +const underscore_1 = require("./underscore"); +// convert an async iterator to a Promise +function toPromise(val) { + return __awaiter(this, void 0, void 0, function* () { + if (!(0, underscore_1.isIterator)(val)) + return val; + let value; + let done = false; + let next = 'next'; + do { + const state = val[next](value); + done = state.done; + value = state.value; + next = 'next'; + try { + if ((0, underscore_1.isIterator)(value)) + value = toPromise(value); + if ((0, underscore_1.isPromise)(value)) + value = yield value; + } + catch (err) { + next = 'throw'; + value = err; + } + } while (!done); + return value; + }); +} +exports.toPromise = toPromise; +// convert an async iterator to a value in a synchronous manner +function toValueSync(val) { + if (!(0, underscore_1.isIterator)(val)) + return val; + let value; + let done = false; + let next = 'next'; + do { + const state = val[next](value); + done = state.done; + value = state.value; + next = 'next'; + if ((0, underscore_1.isIterator)(value)) { + try { + value = toValueSync(value); + } + catch (err) { + next = 'throw'; + value = err; + } + } + } while (!done); + return value; +} +exports.toValueSync = toValueSync; +exports.toThenable = toPromise; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXN5bmMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbGlxdWlkanMvdXRpbC9hc3luYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFBQSw2Q0FBb0Q7QUFFcEQseUNBQXlDO0FBQ3pDLFNBQXNCLFNBQVMsQ0FBSyxHQUFvRDs7UUFDdEYsSUFBSSxDQUFDLElBQUEsdUJBQVUsRUFBQyxHQUFHLENBQUM7WUFBRSxPQUFPLEdBQUcsQ0FBQTtRQUNoQyxJQUFJLEtBQWMsQ0FBQTtRQUNsQixJQUFJLElBQUksR0FBRyxLQUFLLENBQUE7UUFDaEIsSUFBSSxJQUFJLEdBQUcsTUFBTSxDQUFBO1FBQ2pCLEdBQUc7WUFDRCxNQUFNLEtBQUssR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUE7WUFDOUIsSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUE7WUFDakIsS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUE7WUFDbkIsSUFBSSxHQUFHLE1BQU0sQ0FBQTtZQUNiLElBQUk7Z0JBQ0YsSUFBSSxJQUFBLHVCQUFVLEVBQUMsS0FBSyxDQUFDO29CQUFFLEtBQUssR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUE7Z0JBQy9DLElBQUksSUFBQSxzQkFBUyxFQUFDLEtBQUssQ0FBQztvQkFBRSxLQUFLLEdBQUcsTUFBTSxLQUFLLENBQUE7YUFDMUM7WUFBQyxPQUFPLEdBQUcsRUFBRTtnQkFDWixJQUFJLEdBQUcsT0FBTyxDQUFBO2dCQUNkLEtBQUssR0FBRyxHQUFHLENBQUE7YUFDWjtTQUNGLFFBQVEsQ0FBQyxJQUFJLEVBQUM7UUFDZixPQUFPLEtBQVUsQ0FBQTtJQUNuQixDQUFDO0NBQUE7QUFuQkQsOEJBbUJDO0FBRUQsK0RBQStEO0FBQy9ELFNBQWdCLFdBQVcsQ0FBSyxHQUF1QztJQUNyRSxJQUFJLENBQUMsSUFBQSx1QkFBVSxFQUFDLEdBQUcsQ0FBQztRQUFFLE9BQU8sR0FBRyxDQUFBO0lBQ2hDLElBQUksS0FBVSxDQUFBO0lBQ2QsSUFBSSxJQUFJLEdBQUcsS0FBSyxDQUFBO0lBQ2hCLElBQUksSUFBSSxHQUFHLE1BQU0sQ0FBQTtJQUNqQixHQUFHO1FBQ0QsTUFBTSxLQUFLLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBQzlCLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFBO1FBQ2pCLEtBQUssR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFBO1FBQ25CLElBQUksR0FBRyxNQUFNLENBQUE7UUFDYixJQUFJLElBQUEsdUJBQVUsRUFBQyxLQUFLLENBQUMsRUFBRTtZQUNyQixJQUFJO2dCQUNGLEtBQUssR0FBRyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUE7YUFDM0I7WUFBQyxPQUFPLEdBQUcsRUFBRTtnQkFDWixJQUFJLEdBQUcsT0FBTyxDQUFBO2dCQUNkLEtBQUssR0FBRyxHQUFHLENBQUE7YUFDWjtTQUNGO0tBQ0YsUUFBUSxDQUFDLElBQUksRUFBQztJQUNmLE9BQU8sS0FBSyxDQUFBO0FBQ2QsQ0FBQztBQXBCRCxrQ0FvQkM7QUFFWSxRQUFBLFVBQVUsR0FBRyxTQUFTLENBQUEifQ== \ No newline at end of file diff --git a/packages/osrl/liquidjs/util/character.d.ts b/packages/osrl/liquidjs/util/character.d.ts new file mode 100644 index 00000000..8796ffa3 --- /dev/null +++ b/packages/osrl/liquidjs/util/character.d.ts @@ -0,0 +1,8 @@ +export declare const TYPES: number[]; +export declare const IDENTIFIER = 1; +export declare const OPERATOR = 2; +export declare const BLANK = 4; +export declare const QUOTE = 8; +export declare const INLINE_BLANK = 16; +export declare const NUMBER = 32; +export declare const SIGN = 64; diff --git a/packages/osrl/liquidjs/util/character.js b/packages/osrl/liquidjs/util/character.js new file mode 100644 index 00000000..4b97c30e --- /dev/null +++ b/packages/osrl/liquidjs/util/character.js @@ -0,0 +1,17 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.SIGN = exports.NUMBER = exports.INLINE_BLANK = exports.QUOTE = exports.BLANK = exports.OPERATOR = exports.IDENTIFIER = exports.TYPES = void 0; +// **DO NOT CHANGE THIS FILE** +// +// This file is generated by bin/character-gen.js +// bitmask character types to boost performance +exports.TYPES = [0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 4, 4, 4, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 2, 8, 0, 0, 0, 0, 8, 0, 0, 0, 64, 0, 65, 0, 0, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 0, 0, 2, 2, 2, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0]; +exports.IDENTIFIER = 1; +exports.OPERATOR = 2; +exports.BLANK = 4; +exports.QUOTE = 8; +exports.INLINE_BLANK = 16; +exports.NUMBER = 32; +exports.SIGN = 64; +exports.TYPES[160] = exports.TYPES[5760] = exports.TYPES[6158] = exports.TYPES[8192] = exports.TYPES[8193] = exports.TYPES[8194] = exports.TYPES[8195] = exports.TYPES[8196] = exports.TYPES[8197] = exports.TYPES[8198] = exports.TYPES[8199] = exports.TYPES[8200] = exports.TYPES[8201] = exports.TYPES[8202] = exports.TYPES[8232] = exports.TYPES[8233] = exports.TYPES[8239] = exports.TYPES[8287] = exports.TYPES[12288] = exports.BLANK; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhcmFjdGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xpcXVpZGpzL3V0aWwvY2hhcmFjdGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDhCQUE4QjtBQUM5QixFQUFFO0FBQ0YsaURBQWlEO0FBQ2pELCtDQUErQztBQUNsQyxRQUFBLEtBQUssR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQTtBQUN2WixRQUFBLFVBQVUsR0FBRyxDQUFDLENBQUE7QUFDZCxRQUFBLFFBQVEsR0FBRyxDQUFDLENBQUE7QUFDWixRQUFBLEtBQUssR0FBRyxDQUFDLENBQUE7QUFDVCxRQUFBLEtBQUssR0FBRyxDQUFDLENBQUE7QUFDVCxRQUFBLFlBQVksR0FBRyxFQUFFLENBQUE7QUFDakIsUUFBQSxNQUFNLEdBQUcsRUFBRSxDQUFBO0FBQ1gsUUFBQSxJQUFJLEdBQUcsRUFBRSxDQUFBO0FBQ3RCLGFBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxhQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsYUFBSyxDQUFDLElBQUksQ0FBQyxHQUFHLGFBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxhQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsYUFBSyxDQUFDLElBQUksQ0FBQyxHQUFHLGFBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxhQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsYUFBSyxDQUFDLElBQUksQ0FBQyxHQUFHLGFBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxhQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsYUFBSyxDQUFDLElBQUksQ0FBQyxHQUFHLGFBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxhQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsYUFBSyxDQUFDLElBQUksQ0FBQyxHQUFHLGFBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxhQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsYUFBSyxDQUFDLElBQUksQ0FBQyxHQUFHLGFBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxhQUFLLENBQUEifQ== \ No newline at end of file diff --git a/packages/osrl/liquidjs/util/collection.d.ts b/packages/osrl/liquidjs/util/collection.d.ts new file mode 100644 index 00000000..42db5cd5 --- /dev/null +++ b/packages/osrl/liquidjs/util/collection.d.ts @@ -0,0 +1,2 @@ +export declare function toEnumerable(val: any): any[]; +export declare function toArray(val: any): any[]; diff --git a/packages/osrl/liquidjs/util/collection.js b/packages/osrl/liquidjs/util/collection.js new file mode 100644 index 00000000..c0b1d848 --- /dev/null +++ b/packages/osrl/liquidjs/util/collection.js @@ -0,0 +1,26 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.toArray = exports.toEnumerable = void 0; +const underscore_1 = require("./underscore"); +function toEnumerable(val) { + val = (0, underscore_1.toValue)(val); + if ((0, underscore_1.isArray)(val)) + return val; + if ((0, underscore_1.isString)(val) && val.length > 0) + return [val]; + if ((0, underscore_1.isIterable)(val)) + return Array.from(val); + if ((0, underscore_1.isObject)(val)) + return Object.keys(val).map((key) => [key, val[key]]); + return []; +} +exports.toEnumerable = toEnumerable; +function toArray(val) { + if ((0, underscore_1.isNil)(val)) + return []; + if ((0, underscore_1.isArray)(val)) + return val; + return [val]; +} +exports.toArray = toArray; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sbGVjdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saXF1aWRqcy91dGlsL2NvbGxlY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkNBQXNGO0FBRXRGLFNBQWdCLFlBQVksQ0FBRSxHQUFRO0lBQ3BDLEdBQUcsR0FBRyxJQUFBLG9CQUFPLEVBQUMsR0FBRyxDQUFDLENBQUE7SUFDbEIsSUFBSSxJQUFBLG9CQUFPLEVBQUMsR0FBRyxDQUFDO1FBQUUsT0FBTyxHQUFHLENBQUE7SUFDNUIsSUFBSSxJQUFBLHFCQUFRLEVBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxDQUFDLE1BQU0sR0FBRyxDQUFDO1FBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFBO0lBQ2pELElBQUksSUFBQSx1QkFBVSxFQUFDLEdBQUcsQ0FBQztRQUFFLE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQTtJQUMzQyxJQUFJLElBQUEscUJBQVEsRUFBQyxHQUFHLENBQUM7UUFBRSxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQ3hFLE9BQU8sRUFBRSxDQUFBO0FBQ1gsQ0FBQztBQVBELG9DQU9DO0FBRUQsU0FBZ0IsT0FBTyxDQUFFLEdBQVE7SUFDL0IsSUFBSSxJQUFBLGtCQUFLLEVBQUMsR0FBRyxDQUFDO1FBQUUsT0FBTyxFQUFFLENBQUE7SUFDekIsSUFBSSxJQUFBLG9CQUFPLEVBQUMsR0FBRyxDQUFDO1FBQUUsT0FBTyxHQUFHLENBQUE7SUFDNUIsT0FBTyxDQUFFLEdBQUcsQ0FBRSxDQUFBO0FBQ2hCLENBQUM7QUFKRCwwQkFJQyJ9 \ No newline at end of file diff --git a/packages/osrl/liquidjs/util/error.d.ts b/packages/osrl/liquidjs/util/error.d.ts new file mode 100644 index 00000000..d1bf41f3 --- /dev/null +++ b/packages/osrl/liquidjs/util/error.d.ts @@ -0,0 +1,29 @@ +import { Token } from '../tokens/token'; +import { Template } from '../template/template'; +export declare abstract class LiquidError extends Error { + private token; + context: string; + private originalError; + constructor(err: Error, token: Token); + protected update(): void; +} +export declare class TokenizationError extends LiquidError { + constructor(message: string, token: Token); +} +export declare class ParseError extends LiquidError { + constructor(err: Error, token: Token); +} +export declare class RenderError extends LiquidError { + constructor(err: Error, tpl: Template); + static is(obj: any): obj is RenderError; +} +export declare class UndefinedVariableError extends LiquidError { + constructor(err: Error, token: Token); +} +export declare class InternalUndefinedVariableError extends Error { + variableName: string; + constructor(variableName: string); +} +export declare class AssertionError extends Error { + constructor(message: string); +} diff --git a/packages/osrl/liquidjs/util/error.js b/packages/osrl/liquidjs/util/error.js new file mode 100644 index 00000000..5400ac98 --- /dev/null +++ b/packages/osrl/liquidjs/util/error.js @@ -0,0 +1,100 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.AssertionError = exports.InternalUndefinedVariableError = exports.UndefinedVariableError = exports.RenderError = exports.ParseError = exports.TokenizationError = exports.LiquidError = void 0; +const _ = require("./underscore"); +class LiquidError extends Error { + constructor(err, token) { + super(err.message); + this.originalError = err; + this.token = token; + this.context = ''; + } + update() { + const err = this.originalError; + this.context = mkContext(this.token); + this.message = mkMessage(err.message, this.token); + this.stack = this.message + '\n' + this.context + + '\n' + this.stack + '\nFrom ' + err.stack; + } +} +exports.LiquidError = LiquidError; +class TokenizationError extends LiquidError { + constructor(message, token) { + super(new Error(message), token); + this.name = 'TokenizationError'; + super.update(); + } +} +exports.TokenizationError = TokenizationError; +class ParseError extends LiquidError { + constructor(err, token) { + super(err, token); + this.name = 'ParseError'; + this.message = err.message; + super.update(); + } +} +exports.ParseError = ParseError; +class RenderError extends LiquidError { + constructor(err, tpl) { + super(err, tpl.token); + this.name = 'RenderError'; + this.message = err.message; + super.update(); + } + static is(obj) { + return obj.name === 'RenderError'; + } +} +exports.RenderError = RenderError; +class UndefinedVariableError extends LiquidError { + constructor(err, token) { + super(err, token); + this.name = 'UndefinedVariableError'; + this.message = err.message; + super.update(); + } +} +exports.UndefinedVariableError = UndefinedVariableError; +// only used internally; raised where we don't have token information, +// so it can't be an UndefinedVariableError. +class InternalUndefinedVariableError extends Error { + constructor(variableName) { + super(`undefined variable: ${variableName}`); + this.name = 'InternalUndefinedVariableError'; + this.variableName = variableName; + } +} +exports.InternalUndefinedVariableError = InternalUndefinedVariableError; +class AssertionError extends Error { + constructor(message) { + super(message); + this.name = 'AssertionError'; + this.message = message + ''; + } +} +exports.AssertionError = AssertionError; +function mkContext(token) { + const [line] = token.getPosition(); + const lines = token.input.split('\n'); + const begin = Math.max(line - 2, 1); + const end = Math.min(line + 3, lines.length); + const context = _ + .range(begin, end + 1) + .map(lineNumber => { + const indicator = (lineNumber === line) ? '>> ' : ' '; + const num = _.padStart(String(lineNumber), String(end).length); + const text = lines[lineNumber - 1]; + return `${indicator}${num}| ${text}`; + }) + .join('\n'); + return context; +} +function mkMessage(msg, token) { + if (token.file) + msg += `, file:${token.file}`; + const [line, col] = token.getPosition(); + msg += `, line:${line}, col:${col}`; + return msg; +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbGlxdWlkanMvdXRpbC9lcnJvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxrQ0FBaUM7QUFJakMsTUFBc0IsV0FBWSxTQUFRLEtBQUs7SUFJN0MsWUFBb0IsR0FBVSxFQUFFLEtBQVk7UUFDMUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQTtRQUNsQixJQUFJLENBQUMsYUFBYSxHQUFHLEdBQUcsQ0FBQTtRQUN4QixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQTtRQUNsQixJQUFJLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQTtJQUNuQixDQUFDO0lBQ1MsTUFBTTtRQUNkLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUE7UUFDOUIsSUFBSSxDQUFDLE9BQU8sR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBQ3BDLElBQUksQ0FBQyxPQUFPLEdBQUcsU0FBUyxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBQ2pELElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDLE9BQU87WUFDN0MsSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsU0FBUyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUE7SUFDN0MsQ0FBQztDQUNGO0FBakJELGtDQWlCQztBQUVELE1BQWEsaUJBQWtCLFNBQVEsV0FBVztJQUNoRCxZQUFvQixPQUFlLEVBQUUsS0FBWTtRQUMvQyxLQUFLLENBQUMsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUE7UUFDaEMsSUFBSSxDQUFDLElBQUksR0FBRyxtQkFBbUIsQ0FBQTtRQUMvQixLQUFLLENBQUMsTUFBTSxFQUFFLENBQUE7SUFDaEIsQ0FBQztD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LE1BQU0sQ0FBQyxDQUFBO1FBQzlELE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLENBQUE7UUFDbEMsT0FBTyxHQUFHLFNBQVMsR0FBRyxHQUFHLEtBQUssSUFBSSxFQUFFLENBQUE7SUFDdEMsQ0FBQyxDQUFDO1NBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFBO0lBRWIsT0FBTyxPQUFPLENBQUE7QUFDaEIsQ0FBQztBQUVELFNBQVMsU0FBUyxDQUFFLEdBQVcsRUFBRSxLQUFZO0lBQzNDLElBQUksS0FBSyxDQUFDLElBQUk7UUFBRSxHQUFHLElBQUksVUFBVSxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUE7SUFDN0MsTUFBTSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUE7SUFDdkMsR0FBRyxJQUFJLFVBQVUsSUFBSSxTQUFTLEdBQUcsRUFBRSxDQUFBO0lBQ25DLE9BQU8sR0FBRyxDQUFBO0FBQ1osQ0FBQyJ9 \ No newline at end of file diff --git a/packages/osrl/liquidjs/util/liquid-date.d.ts b/packages/osrl/liquidjs/util/liquid-date.d.ts new file mode 100644 index 00000000..68707be3 --- /dev/null +++ b/packages/osrl/liquidjs/util/liquid-date.d.ts @@ -0,0 +1,19 @@ +/** + * The date interface LiquidJS uses. + * Basically a subset of JavaScript Date, + * it's defined abstractly here to allow different implementation + */ +export interface LiquidDate { + getTime(): number; + getMilliseconds(): number; + getSeconds(): number; + getMinutes(): number; + getHours(): number; + getDay(): number; + getDate(): number; + getMonth(): number; + getFullYear(): number; + getTimezoneOffset(): number; + toLocaleTimeString(): string; + toLocaleDateString(): string; +} diff --git a/packages/osrl/liquidjs/util/liquid-date.js b/packages/osrl/liquidjs/util/liquid-date.js new file mode 100644 index 00000000..adf82248 --- /dev/null +++ b/packages/osrl/liquidjs/util/liquid-date.js @@ -0,0 +1,3 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlxdWlkLWRhdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbGlxdWlkanMvdXRpbC9saXF1aWQtZGF0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIn0= \ No newline at end of file diff --git a/packages/osrl/liquidjs/util/literal.d.ts b/packages/osrl/liquidjs/util/literal.d.ts new file mode 100644 index 00000000..6352b741 --- /dev/null +++ b/packages/osrl/liquidjs/util/literal.d.ts @@ -0,0 +1,11 @@ +import { NullDrop } from '../drop/null-drop'; +import { EmptyDrop } from '../drop/empty-drop'; +import { BlankDrop } from '../drop/blank-drop'; +export declare const literalValues: { + true: boolean; + false: boolean; + nil: NullDrop; + null: NullDrop; + empty: EmptyDrop; + blank: BlankDrop; +}; diff --git a/packages/osrl/liquidjs/util/literal.js b/packages/osrl/liquidjs/util/literal.js new file mode 100644 index 00000000..f7d27c33 --- /dev/null +++ b/packages/osrl/liquidjs/util/literal.js @@ -0,0 +1,16 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.literalValues = void 0; +const null_drop_1 = require("../drop/null-drop"); +const empty_drop_1 = require("../drop/empty-drop"); +const blank_drop_1 = require("../drop/blank-drop"); +const nil = new null_drop_1.NullDrop(); +exports.literalValues = { + 'true': true, + 'false': false, + 'nil': nil, + 'null': nil, + 'empty': new empty_drop_1.EmptyDrop(), + 'blank': new blank_drop_1.BlankDrop() +}; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGl0ZXJhbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saXF1aWRqcy91dGlsL2xpdGVyYWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsaURBQTRDO0FBQzVDLG1EQUE4QztBQUM5QyxtREFBOEM7QUFFOUMsTUFBTSxHQUFHLEdBQUcsSUFBSSxvQkFBUSxFQUFFLENBQUE7QUFDYixRQUFBLGFBQWEsR0FBRztJQUMzQixNQUFNLEVBQUUsSUFBSTtJQUNaLE9BQU8sRUFBRSxLQUFLO0lBQ2QsS0FBSyxFQUFFLEdBQUc7SUFDVixNQUFNLEVBQUUsR0FBRztJQUNYLE9BQU8sRUFBRSxJQUFJLHNCQUFTLEVBQUU7SUFDeEIsT0FBTyxFQUFFLElBQUksc0JBQVMsRUFBRTtDQUN6QixDQUFBIn0= \ No newline at end of file diff --git a/packages/osrl/liquidjs/util/operator-trie.d.ts b/packages/osrl/liquidjs/util/operator-trie.d.ts new file mode 100644 index 00000000..fbe00872 --- /dev/null +++ b/packages/osrl/liquidjs/util/operator-trie.d.ts @@ -0,0 +1,5 @@ +import { Operators } from '../render/operator'; +export interface Trie { + [key: string]: any; +} +export declare function createTrie(operators: Operators): Trie; diff --git a/packages/osrl/liquidjs/util/operator-trie.js b/packages/osrl/liquidjs/util/operator-trie.js new file mode 100644 index 00000000..214c5b2a --- /dev/null +++ b/packages/osrl/liquidjs/util/operator-trie.js @@ -0,0 +1,23 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.createTrie = void 0; +const character_1 = require("../util/character"); +function createTrie(operators) { + const trie = {}; + for (const [name, handler] of Object.entries(operators)) { + let node = trie; + for (let i = 0; i < name.length; i++) { + const c = name[i]; + node[c] = node[c] || {}; + if (i === name.length - 1 && (character_1.TYPES[name.charCodeAt(i)] & character_1.IDENTIFIER)) { + node[c].needBoundary = true; + } + node = node[c]; + } + node.handler = handler; + node.end = true; + } + return trie; +} +exports.createTrie = createTrie; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3BlcmF0b3ItdHJpZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saXF1aWRqcy91dGlsL29wZXJhdG9yLXRyaWUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EsaURBQXFEO0FBTXJELFNBQWdCLFVBQVUsQ0FBRSxTQUFvQjtJQUM5QyxNQUFNLElBQUksR0FBUyxFQUFFLENBQUE7SUFDckIsS0FBSyxNQUFNLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEVBQUU7UUFDdkQsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFBO1FBRWYsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDcEMsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFBO1lBQ2pCLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFBO1lBRXZCLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLENBQUMsaUJBQUssQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsc0JBQVUsQ0FBQyxFQUFFO2dCQUNyRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQTthQUM1QjtZQUVELElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUE7U0FDZjtRQUVELElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFBO1FBQ3RCLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFBO0tBQ2hCO0lBQ0QsT0FBTyxJQUFJLENBQUE7QUFDYixDQUFDO0FBcEJELGdDQW9CQyJ9 \ No newline at end of file diff --git a/packages/osrl/liquidjs/util/strftime.d.ts b/packages/osrl/liquidjs/util/strftime.d.ts new file mode 100644 index 00000000..7a7ea177 --- /dev/null +++ b/packages/osrl/liquidjs/util/strftime.d.ts @@ -0,0 +1,2 @@ +import { LiquidDate } from './liquid-date'; +export default function (d: LiquidDate, formatStr: string): string; diff --git a/packages/osrl/liquidjs/util/strftime.js b/packages/osrl/liquidjs/util/strftime.js new file mode 100644 index 00000000..0510a64d --- /dev/null +++ b/packages/osrl/liquidjs/util/strftime.js @@ -0,0 +1,168 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const underscore_1 = require("./underscore"); +const rFormat = /%([-_0^#:]+)?(\d+)?([EO])?(.)/; +const monthNames = [ + 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', + 'September', 'October', 'November', 'December' +]; +const dayNames = [ + 'Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday' +]; +const monthNamesShort = monthNames.map(abbr); +const dayNamesShort = dayNames.map(abbr); +const suffixes = { + 1: 'st', + 2: 'nd', + 3: 'rd', + 'default': 'th' +}; +function abbr(str) { + return str.slice(0, 3); +} +// prototype extensions +function daysInMonth(d) { + const feb = isLeapYear(d) ? 29 : 28; + return [31, feb, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; +} +function getDayOfYear(d) { + let num = 0; + for (let i = 0; i < d.getMonth(); ++i) { + num += daysInMonth(d)[i]; + } + return num + d.getDate(); +} +function getWeekOfYear(d, startDay) { + // Skip to startDay of this week + const now = getDayOfYear(d) + (startDay - d.getDay()); + // Find the first startDay of the year + const jan1 = new Date(d.getFullYear(), 0, 1); + const then = (7 - jan1.getDay() + startDay); + return String(Math.floor((now - then) / 7) + 1); +} +function isLeapYear(d) { + const year = d.getFullYear(); + return !!((year & 3) === 0 && (year % 100 || (year % 400 === 0 && year))); +} +function getSuffix(d) { + const str = d.getDate().toString(); + const index = parseInt(str.slice(-1)); + return suffixes[index] || suffixes['default']; +} +function century(d) { + return parseInt(d.getFullYear().toString().substring(0, 2), 10); +} +// default to 0 +const padWidths = { + d: 2, + e: 2, + H: 2, + I: 2, + j: 3, + k: 2, + l: 2, + L: 3, + m: 2, + M: 2, + S: 2, + U: 2, + W: 2 +}; +// default to '0' +const padChars = { + a: ' ', + A: ' ', + b: ' ', + B: ' ', + c: ' ', + e: ' ', + k: ' ', + l: ' ', + p: ' ', + P: ' ' +}; +const formatCodes = { + a: (d) => dayNamesShort[d.getDay()], + A: (d) => dayNames[d.getDay()], + b: (d) => monthNamesShort[d.getMonth()], + B: (d) => monthNames[d.getMonth()], + c: (d) => d.toLocaleString(), + C: (d) => century(d), + d: (d) => d.getDate(), + e: (d) => d.getDate(), + H: (d) => d.getHours(), + I: (d) => String(d.getHours() % 12 || 12), + j: (d) => getDayOfYear(d), + k: (d) => d.getHours(), + l: (d) => String(d.getHours() % 12 || 12), + L: (d) => d.getMilliseconds(), + m: (d) => d.getMonth() + 1, + M: (d) => d.getMinutes(), + N: (d, opts) => { + const width = Number(opts.width) || 9; + const str = String(d.getMilliseconds()).substr(0, width); + return (0, underscore_1.padEnd)(str, width, '0'); + }, + p: (d) => (d.getHours() < 12 ? 'AM' : 'PM'), + P: (d) => (d.getHours() < 12 ? 'am' : 'pm'), + q: (d) => getSuffix(d), + s: (d) => Math.round(d.getTime() / 1000), + S: (d) => d.getSeconds(), + u: (d) => d.getDay() || 7, + U: (d) => getWeekOfYear(d, 0), + w: (d) => d.getDay(), + W: (d) => getWeekOfYear(d, 1), + x: (d) => d.toLocaleDateString(), + X: (d) => d.toLocaleTimeString(), + y: (d) => d.getFullYear().toString().substring(2, 4), + Y: (d) => d.getFullYear(), + z: (d, opts) => { + const nOffset = Math.abs(d.getTimezoneOffset()); + const h = Math.floor(nOffset / 60); + const m = nOffset % 60; + return (d.getTimezoneOffset() > 0 ? '-' : '+') + + (0, underscore_1.padStart)(h, 2, '0') + + (opts.flags[':'] ? ':' : '') + + (0, underscore_1.padStart)(m, 2, '0'); + }, + 't': () => '\t', + 'n': () => '\n', + '%': () => '%' +}; +formatCodes.h = formatCodes.b; +function default_1(d, formatStr) { + let output = ''; + let remaining = formatStr; + let match; + while ((match = rFormat.exec(remaining))) { + output += remaining.slice(0, match.index); + remaining = remaining.slice(match.index + match[0].length); + output += format(d, match); + } + return output + remaining; +} +exports.default = default_1; +function format(d, match) { + const [input, flagStr = '', width, modifier, conversion] = match; + const convert = formatCodes[conversion]; + if (!convert) + return input; + const flags = {}; + for (const flag of flagStr) + flags[flag] = true; + let ret = String(convert(d, { flags, width, modifier })); + let padChar = padChars[conversion] || '0'; + let padWidth = width || padWidths[conversion] || 0; + if (flags['^']) + ret = ret.toUpperCase(); + else if (flags['#']) + ret = (0, underscore_1.changeCase)(ret); + if (flags['_']) + padChar = ' '; + else if (flags['0']) + padChar = '0'; + if (flags['-']) + padWidth = 0; + return (0, underscore_1.padStart)(ret, padWidth, padChar); +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RyZnRpbWUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbGlxdWlkanMvdXRpbC9zdHJmdGltZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLDZDQUEyRDtBQUczRCxNQUFNLE9BQU8sR0FBRywrQkFBK0IsQ0FBQTtBQUMvQyxNQUFNLFVBQVUsR0FBRztJQUNqQixTQUFTLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsUUFBUTtJQUN4RSxXQUFXLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxVQUFVO0NBQy9DLENBQUE7QUFDRCxNQUFNLFFBQVEsR0FBRztJQUNmLFFBQVEsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLFVBQVU7Q0FDN0UsQ0FBQTtBQUNELE1BQU0sZUFBZSxHQUFHLFVBQVUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUE7QUFDNUMsTUFBTSxhQUFhLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQTtBQUN4QyxNQUFNLFFBQVEsR0FBRztJQUNmLENBQUMsRUFBRSxJQUFJO0lBQ1AsQ0FBQyxFQUFFLElBQUk7SUFDUCxDQUFDLEVBQUUsSUFBSTtJQUNQLFNBQVMsRUFBRSxJQUFJO0NBQ2hCLENBQUE7QUFPRCxTQUFTLElBQUksQ0FBRSxHQUFXO0lBQ3hCLE9BQU8sR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUE7QUFDeEIsQ0FBQztBQUVELHVCQUF1QjtBQUN2QixTQUFTLFdBQVcsQ0FBRSxDQUFhO0lBQ2pDLE1BQU0sR0FBRyxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUE7SUFDbkMsT0FBTyxDQUFDLEVBQUUsRUFBRSxHQUFHLEVBQUUs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 \ No newline at end of file diff --git a/packages/osrl/liquidjs/util/timezone-date.d.ts b/packages/osrl/liquidjs/util/timezone-date.d.ts new file mode 100644 index 00000000..9f5634c8 --- /dev/null +++ b/packages/osrl/liquidjs/util/timezone-date.d.ts @@ -0,0 +1,39 @@ +import { LiquidDate } from './liquid-date'; +/** + * A date implementation with timezone info, just like Ruby date + * + * Implementation: + * - create a Date offset by it's timezone difference, avoiding overriding a bunch of methods + * - rewrite getTimezoneOffset() to trick strftime + */ +export declare class TimezoneDate implements LiquidDate { + private timezoneOffset; + private date; + constructor(init: string | number | Date | TimezoneDate, timezoneOffset: number); + getTime(): number; + getMilliseconds(): number; + getSeconds(): number; + getMinutes(): number; + getHours(): number; + getDay(): number; + getDate(): number; + getMonth(): number; + getFullYear(): number; + toLocaleTimeString(locale?: string): string; + toLocaleDateString(locale?: string): string; + getTimezoneOffset(): number; + /** + * Create a Date object fixed to it's declared Timezone. Both + * - 2021-08-06T02:29:00.000Z and + * - 2021-08-06T02:29:00.000+08:00 + * will always be displayed as + * - 2021-08-06 02:29:00 + * regardless timezoneOffset in JavaScript realm + * + * The implementation hack: + * Instead of calling `.getMonth()`/`.getUTCMonth()` respect to `preserveTimezones`, + * we create a different Date to trick strftime, it's both simpler and more performant. + * Given that a template is expected to be parsed fewer times than rendered. + */ + static createDateFixedToTimezone(dateString: string): LiquidDate; +} diff --git a/packages/osrl/liquidjs/util/timezone-date.js b/packages/osrl/liquidjs/util/timezone-date.js new file mode 100644 index 00000000..99b1ead0 --- /dev/null +++ b/packages/osrl/liquidjs/util/timezone-date.js @@ -0,0 +1,93 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.TimezoneDate = void 0; +// one minute in milliseconds +const OneMinute = 60000; +const hostTimezoneOffset = new Date().getTimezoneOffset(); +const ISO8601_TIMEZONE_PATTERN = /([zZ]|([+-])(\d{2}):(\d{2}))$/; +/** + * A date implementation with timezone info, just like Ruby date + * + * Implementation: + * - create a Date offset by it's timezone difference, avoiding overriding a bunch of methods + * - rewrite getTimezoneOffset() to trick strftime + */ +class TimezoneDate { + constructor(init, timezoneOffset) { + if (init instanceof TimezoneDate) { + this.date = init.date; + timezoneOffset = init.timezoneOffset; + } + else { + const diff = (hostTimezoneOffset - timezoneOffset) * OneMinute; + const time = new Date(init).getTime() + diff; + this.date = new Date(time); + } + this.timezoneOffset = timezoneOffset; + } + getTime() { + return this.date.getTime(); + } + getMilliseconds() { + return this.date.getMilliseconds(); + } + getSeconds() { + return this.date.getSeconds(); + } + getMinutes() { + return this.date.getMinutes(); + } + getHours() { + return this.date.getHours(); + } + getDay() { + return this.date.getDay(); + } + getDate() { + return this.date.getDate(); + } + getMonth() { + return this.date.getMonth(); + } + getFullYear() { + return this.date.getFullYear(); + } + toLocaleTimeString(locale) { + return this.date.toLocaleTimeString(locale); + } + toLocaleDateString(locale) { + return this.date.toLocaleDateString(locale); + } + getTimezoneOffset() { + return this.timezoneOffset; + } + /** + * Create a Date object fixed to it's declared Timezone. Both + * - 2021-08-06T02:29:00.000Z and + * - 2021-08-06T02:29:00.000+08:00 + * will always be displayed as + * - 2021-08-06 02:29:00 + * regardless timezoneOffset in JavaScript realm + * + * The implementation hack: + * Instead of calling `.getMonth()`/`.getUTCMonth()` respect to `preserveTimezones`, + * we create a different Date to trick strftime, it's both simpler and more performant. + * Given that a template is expected to be parsed fewer times than rendered. + */ + static createDateFixedToTimezone(dateString) { + const m = dateString.match(ISO8601_TIMEZONE_PATTERN); + // representing a UTC timestamp + if (m && m[1] === 'Z') { + return new TimezoneDate(+new Date(dateString), 0); + } + // has a timezone specified + if (m && m[2] && m[3] && m[4]) { + const [, , sign, hours, minutes] = m; + const delta = (sign === '+' ? -1 : 1) * (parseInt(hours, 10) * 60 + parseInt(minutes, 10)); + return new TimezoneDate(+new Date(dateString), delta); + } + return new Date(dateString); + } +} +exports.TimezoneDate = TimezoneDate; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZXpvbmUtZGF0ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saXF1aWRqcy91dGlsL3RpbWV6b25lLWRhdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBRUEsNkJBQTZCO0FBQzdCLE1BQU0sU0FBUyxHQUFHLEtBQUssQ0FBQTtBQUN2QixNQUFNLGtCQUFrQixHQUFHLElBQUksSUFBSSxFQUFFLENBQUMsaUJBQWlCLEVBQUUsQ0FBQTtBQUN6RCxNQUFNLHdCQUF3QixHQUFHLCtCQUErQixDQUFBO0FBRWhFOzs7Ozs7R0FNRztBQUNILE1BQWEsWUFBWTtJQUd2QixZQUFhLElBQTJDLEVBQUUsY0FBc0I7UUFDOUUsSUFBSSxJQUFJLFlBQVksWUFBWSxFQUFFO1lBQ2hDLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQTtZQUNyQixjQUFjLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQTtTQUNyQzthQUFNO1lBQ0wsTUFBTSxJQUFJLEdBQUcsQ0FBQyxrQkFBa0IsR0FBRyxjQUFjLENBQUMsR0FBRyxTQUFTLENBQUE7WUFDOUQsTUFBTSxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxFQUFFLEdBQUcsSUFBSSxDQUFBO1lBQzVDLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUE7U0FDM0I7UUFDRCxJQUFJLENBQUMsY0FBYyxHQUFHLGNBQWMsQ0FBQTtJQUN0QyxDQUFDO0lBRUQsT0FBTztRQUNMLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQTtJQUM1QixDQUFDO0lBRUQsZUFBZTtRQUNiLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQTtJQUNwQyxDQUFDO0lBQ0QsVUFBVTtRQUNSLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQTtJQUMvQixDQUFDO0lBQ0QsVUFBVTtRQUNSLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQTtJQUMvQixDQUFDO0lBQ0QsUUFBUTtRQUNOLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQTtJQUM3QixDQUFDO0lBQ0QsTUFBTTtRQUNKLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQTtJQUMzQixDQUFDO0lBQ0QsT0FBTztRQUNMLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQTtJQUM1QixDQUFDO0lBQ0QsUUFBUTtRQUNOLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQTtJQUM3QixDQUFDO0lBQ0QsV0FBVztRQUNULE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQTtJQUNoQyxDQUFDO0lBQ0Qsa0JBQWtCLENBQUUsTUFBZTtRQUNqQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLENBQUE7SUFDN0MsQ0FBQztJQUNELGtCQUFrQixDQUFFLE1BQWU7UUFDakMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxDQUFBO0lBQzdDLENBQUM7SUFDRCxpQkFBaUI7UUFDZixPQUFPLElBQUksQ0FBQyxjQUFlLENBQUE7SUFDN0IsQ0FBQztJQUVEOzs7Ozs7Ozs7Ozs7T0FZRztJQUNILE1BQU0sQ0FBQyx5QkFBeUIsQ0FBRSxVQUFrQjtRQUNsRCxNQUFNLENBQUMsR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLHdCQUF3QixDQUFDLENBQUE7UUFDcEQsK0JBQStCO1FBQy9CLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUU7WUFDckIsT0FBTyxJQUFJLFlBQVksQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFBO1NBQ2xEO1FBQ0QsMkJBQTJCO1FBQzNCLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQzdCLE1BQU0sQ0FBQyxFQUFFLEFBQUQsRUFBRyxJQUFJLEVBQUUsS0FBSyxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQTtZQUNwQyxNQUFNLEtBQUssR0FBRyxDQUFDLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLFFBQVEsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQTtZQUMxRixPQUFPLElBQUksWUFBWSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUE7U0FDdEQ7UUFDRCxPQUFPLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFBO0lBQzdCLENBQUM7Q0FDRjtBQWhGRCxvQ0FnRkMifQ== \ No newline at end of file diff --git a/packages/osrl/liquidjs/util/type-guards.d.ts b/packages/osrl/liquidjs/util/type-guards.d.ts new file mode 100644 index 00000000..cfb63cf8 --- /dev/null +++ b/packages/osrl/liquidjs/util/type-guards.d.ts @@ -0,0 +1,22 @@ +import { OperatorToken } from '../tokens/operator-token'; +import { DelimitedToken } from '../tokens/delimited-token'; +import { IdentifierToken } from '../tokens/identifier-token'; +import { TagToken } from '../tokens/tag-token'; +import { HTMLToken } from '../tokens/html-token'; +import { OutputToken } from '../tokens/output-token'; +import { PropertyAccessToken } from '../tokens/property-access-token'; +import { LiteralToken } from '../tokens/literal-token'; +import { QuotedToken } from '../tokens/quoted-token'; +import { NumberToken } from '../tokens/number-token'; +import { RangeToken } from '../tokens/range-token'; +export declare function isDelimitedToken(val: any): val is DelimitedToken; +export declare function isOperatorToken(val: any): val is OperatorToken; +export declare function isHTMLToken(val: any): val is HTMLToken; +export declare function isOutputToken(val: any): val is OutputToken; +export declare function isTagToken(val: any): val is TagToken; +export declare function isQuotedToken(val: any): val is QuotedToken; +export declare function isLiteralToken(val: any): val is LiteralToken; +export declare function isNumberToken(val: any): val is NumberToken; +export declare function isPropertyAccessToken(val: any): val is PropertyAccessToken; +export declare function isWordToken(val: any): val is IdentifierToken; +export declare function isRangeToken(val: any): val is RangeToken; diff --git a/packages/osrl/liquidjs/util/type-guards.js b/packages/osrl/liquidjs/util/type-guards.js new file mode 100644 index 00000000..d5948c12 --- /dev/null +++ b/packages/osrl/liquidjs/util/type-guards.js @@ -0,0 +1,52 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.isRangeToken = exports.isWordToken = exports.isPropertyAccessToken = exports.isNumberToken = exports.isLiteralToken = exports.isQuotedToken = exports.isTagToken = exports.isOutputToken = exports.isHTMLToken = exports.isOperatorToken = exports.isDelimitedToken = void 0; +const token_kind_1 = require("../parser/token-kind"); +function isDelimitedToken(val) { + return !!(getKind(val) & token_kind_1.TokenKind.Delimited); +} +exports.isDelimitedToken = isDelimitedToken; +function isOperatorToken(val) { + return getKind(val) === token_kind_1.TokenKind.Operator; +} +exports.isOperatorToken = isOperatorToken; +function isHTMLToken(val) { + return getKind(val) === token_kind_1.TokenKind.HTML; +} +exports.isHTMLToken = isHTMLToken; +function isOutputToken(val) { + return getKind(val) === token_kind_1.TokenKind.Output; +} +exports.isOutputToken = isOutputToken; +function isTagToken(val) { + return getKind(val) === token_kind_1.TokenKind.Tag; +} +exports.isTagToken = isTagToken; +function isQuotedToken(val) { + return getKind(val) === token_kind_1.TokenKind.Quoted; +} +exports.isQuotedToken = isQuotedToken; +function isLiteralToken(val) { + return getKind(val) === token_kind_1.TokenKind.Literal; +} +exports.isLiteralToken = isLiteralToken; +function isNumberToken(val) { + return getKind(val) === token_kind_1.TokenKind.Number; +} +exports.isNumberToken = isNumberToken; +function isPropertyAccessToken(val) { + return getKind(val) === token_kind_1.TokenKind.PropertyAccess; +} +exports.isPropertyAccessToken = isPropertyAccessToken; +function isWordToken(val) { + return getKind(val) === token_kind_1.TokenKind.Word; +} +exports.isWordToken = isWordToken; +function isRangeToken(val) { + return getKind(val) === token_kind_1.TokenKind.Range; +} +exports.isRangeToken = isRangeToken; +function getKind(val) { + return val ? val.kind : -1; +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZS1ndWFyZHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbGlxdWlkanMvdXRpbC90eXBlLWd1YXJkcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFXQSxxREFBZ0Q7QUFFaEQsU0FBZ0IsZ0JBQWdCLENBQUUsR0FBUTtJQUN4QyxPQUFPLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxzQkFBUyxDQUFDLFNBQVMsQ0FBQyxDQUFBO0FBQy9DLENBQUM7QUFGRCw0Q0FFQztBQUVELFNBQWdCLGVBQWUsQ0FBRSxHQUFRO0lBQ3ZDLE9BQU8sT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLHNCQUFTLENBQUMsUUFBUSxDQUFBO0FBQzVDLENBQUM7QUFGRCwwQ0FFQztBQUVELFNBQWdCLFdBQVcsQ0FBRSxHQUFRO0lBQ25DLE9BQU8sT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLHNCQUFTLENBQUMsSUFBSSxDQUFBO0FBQ3hDLENBQUM7QUFGRCxrQ0FFQztBQUVELFNBQWdCLGFBQWEsQ0FBRSxHQUFRO0lBQ3JDLE9BQU8sT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLHNCQUFTLENBQUMsTUFBTSxDQUFBO0FBQzFDLENBQUM7QUFGRCxzQ0FFQztBQUVELFNBQWdCLFVBQVUsQ0FBRSxHQUFRO0lBQ2xDLE9BQU8sT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLHNCQUFTLENBQUMsR0FBRyxDQUFBO0FBQ3ZDLENBQUM7QUFGRCxnQ0FFQztBQUVELFNBQWdCLGFBQWEsQ0FBRSxHQUFRO0lBQ3JDLE9BQU8sT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLHNCQUFTLENBQUMsTUFBTSxDQUFBO0FBQzFDLENBQUM7QUFGRCxzQ0FFQztBQUVELFNBQWdCLGNBQWMsQ0FBRSxHQUFRO0lBQ3RDLE9BQU8sT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLHNCQUFTLENBQUMsT0FBTyxDQUFBO0FBQzNDLENBQUM7QUFGRCx3Q0FFQztBQUVELFNBQWdCLGFBQWEsQ0FBRSxHQUFRO0lBQ3JDLE9BQU8sT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLHNCQUFTLENBQUMsTUFBTSxDQUFBO0FBQzFDLENBQUM7QUFGRCxzQ0FFQztBQUVELFNBQWdCLHFCQUFxQixDQUFFLEdBQVE7SUFDN0MsT0FBTyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssc0JBQVMsQ0FBQyxjQUFjLENBQUE7QUFDbEQsQ0FBQztBQUZELHNEQUVDO0FBRUQsU0FBZ0IsV0FBVyxDQUFFLEdBQVE7SUFDbkMsT0FBTyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssc0JBQVMsQ0FBQyxJQUFJLENBQUE7QUFDeEMsQ0FBQztBQUZELGtDQUVDO0FBRUQsU0FBZ0IsWUFBWSxDQUFFLEdBQVE7SUFDcEMsT0FBTyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssc0JBQVMsQ0FBQyxLQUFLLENBQUE7QUFDekMsQ0FBQztBQUZELG9DQUVDO0FBRUQsU0FBUyxPQUFPLENBQUUsR0FBUTtJQUN4QixPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7QUFDNUIsQ0FBQyJ9 \ No newline at end of file diff --git a/packages/osrl/liquidjs/util/underscore.d.ts b/packages/osrl/liquidjs/util/underscore.d.ts new file mode 100644 index 00000000..74b96a1a --- /dev/null +++ b/packages/osrl/liquidjs/util/underscore.d.ts @@ -0,0 +1,37 @@ +export declare const toString: () => string; +export declare const hasOwnProperty: (v: PropertyKey) => boolean; +export declare function isString(value: any): value is string; +export declare function isFunction(value: any): value is Function; +export declare function isPromise(val: any): val is Promise; +export declare function isIterator(val: any): val is IterableIterator; +export declare function escapeRegex(str: string): string; +export declare function promisify(fn: (arg1: T1, cb: (err: Error | null, result: T2) => void) => void): (arg1: T1) => Promise; +export declare function promisify(fn: (arg1: T1, arg2: T2, cb: (err: Error | null, result: T3) => void) => void): (arg1: T1, arg2: T2) => Promise; +export declare function stringify(value: any): string; +export declare function toValue(value: any): any; +export declare function isNumber(value: any): value is number; +export declare function toLiquid(value: any): any; +export declare function isNil(value: any): boolean; +export declare function isArray(value: any): value is any[]; +export declare function isIterable(value: any): value is Iterable; +export declare function forOwn(obj: { + [key: string]: T; +} | undefined, iteratee: ((val: T, key: string, obj: { + [key: string]: T; +}) => boolean | void)): { + [key: string]: T; +}; +export declare function last(arr: T[]): T; +export declare function last(arr: string): string; +export declare function isObject(value: any): value is object; +export declare function range(start: number, stop: number, step?: number): number[]; +export declare function padStart(str: any, length: number, ch?: string): any; +export declare function padEnd(str: any, length: number, ch?: string): any; +export declare function pad(str: any, length: number, ch: string, add: (str: string, ch: string) => string): any; +export declare function identify(val: T): T; +export declare function snakeCase(str: string): string; +export declare function changeCase(str: string): string; +export declare function ellipsis(str: string, N: number): string; +export declare function caseInsensitiveCompare(a: any, b: any): 0 | 1 | -1; +export declare function argumentsToValue any>(fn: F): (...args: Parameters) => any; +export declare function escapeRegExp(text: string): string; diff --git a/packages/osrl/liquidjs/util/underscore.js b/packages/osrl/liquidjs/util/underscore.js new file mode 100644 index 00000000..7c7a8f6a --- /dev/null +++ b/packages/osrl/liquidjs/util/underscore.js @@ -0,0 +1,177 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.escapeRegExp = exports.argumentsToValue = exports.caseInsensitiveCompare = exports.ellipsis = exports.changeCase = exports.snakeCase = exports.identify = exports.pad = exports.padEnd = exports.padStart = exports.range = exports.isObject = exports.last = exports.forOwn = exports.isIterable = exports.isArray = exports.isNil = exports.toLiquid = exports.isNumber = exports.toValue = exports.stringify = exports.promisify = exports.escapeRegex = exports.isIterator = exports.isPromise = exports.isFunction = exports.isString = exports.hasOwnProperty = exports.toString = void 0; +const drop_1 = require("../drop/drop"); +exports.toString = Object.prototype.toString; +const toLowerCase = String.prototype.toLowerCase; +exports.hasOwnProperty = Object.hasOwnProperty; +function isString(value) { + return typeof value === 'string'; +} +exports.isString = isString; +// eslint-disable-next-line @typescript-eslint/ban-types +function isFunction(value) { + return typeof value === 'function'; +} +exports.isFunction = isFunction; +function isPromise(val) { + return val && isFunction(val.then); +} +exports.isPromise = isPromise; +function isIterator(val) { + return val && isFunction(val.next) && isFunction(val.throw) && isFunction(val.return); +} +exports.isIterator = isIterator; +function escapeRegex(str) { + return str.replace(/[-/\\^$*+?.()|[\]{}]/g, '\\$&'); +} +exports.escapeRegex = escapeRegex; +function promisify(fn) { + return function (...args) { + return new Promise((resolve, reject) => { + fn(...args, (err, result) => { + err ? reject(err) : resolve(result); + }); + }); + }; +} +exports.promisify = promisify; +function stringify(value) { + value = toValue(value); + if (isString(value)) + return value; + if (isNil(value)) + return ''; + if (isArray(value)) + return value.map(x => stringify(x)).join(''); + return String(value); +} +exports.stringify = stringify; +function toValue(value) { + return (value instanceof drop_1.Drop && isFunction(value.valueOf)) ? value.valueOf() : value; +} +exports.toValue = toValue; +function isNumber(value) { + return typeof value === 'number'; +} +exports.isNumber = isNumber; +function toLiquid(value) { + if (value && isFunction(value.toLiquid)) + return toLiquid(value.toLiquid()); + return value; +} +exports.toLiquid = toLiquid; +function isNil(value) { + return value == null; +} +exports.isNil = isNil; +function isArray(value) { + // be compatible with IE 8 + return exports.toString.call(value) === '[object Array]'; +} +exports.isArray = isArray; +function isIterable(value) { + return isObject(value) && Symbol.iterator in value; +} +exports.isIterable = isIterable; +/* + * Iterates over own enumerable string keyed properties of an object and invokes iteratee for each property. + * The iteratee is invoked with three arguments: (value, key, object). + * Iteratee functions may exit iteration early by explicitly returning false. + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @return {Object} Returns object. + */ +function forOwn(obj, iteratee) { + obj = obj || {}; + for (const k in obj) { + if (exports.hasOwnProperty.call(obj, k)) { + if (iteratee(obj[k], k, obj) === false) + break; + } + } + return obj; +} +exports.forOwn = forOwn; +function last(arr) { + return arr[arr.length - 1]; +} +exports.last = last; +/* + * Checks if value is the language type of Object. + * (e.g. arrays, functions, objects, regexes, new Number(0), and new String('')) + * @param {any} value The value to check. + * @return {Boolean} Returns true if value is an object, else false. + */ +function isObject(value) { + const type = typeof value; + return value !== null && (type === 'object' || type === 'function'); +} +exports.isObject = isObject; +function range(start, stop, step = 1) { + const arr = []; + for (let i = start; i < stop; i += step) { + arr.push(i); + } + return arr; +} +exports.range = range; +function padStart(str, length, ch = ' ') { + return pad(str, length, ch, (str, ch) => ch + str); +} +exports.padStart = padStart; +function padEnd(str, length, ch = ' ') { + return pad(str, length, ch, (str, ch) => str + ch); +} +exports.padEnd = padEnd; +function pad(str, length, ch, add) { + str = String(str); + let n = length - str.length; + while (n-- > 0) + str = add(str, ch); + return str; +} +exports.pad = pad; +function identify(val) { + return val; +} +exports.identify = identify; +function snakeCase(str) { + return str.replace(/(\w?)([A-Z])/g, (_, a, b) => (a ? a + '_' : '') + b.toLowerCase()); +} +exports.snakeCase = snakeCase; +function changeCase(str) { + const hasLowerCase = [...str].some(ch => ch >= 'a' && ch <= 'z'); + return hasLowerCase ? str.toUpperCase() : str.toLowerCase(); +} +exports.changeCase = changeCase; +function ellipsis(str, N) { + return str.length > N ? str.substr(0, N - 3) + '...' : str; +} +exports.ellipsis = ellipsis; +// compare string in case-insensitive way, undefined values to the tail +function caseInsensitiveCompare(a, b) { + if (a == null && b == null) + return 0; + if (a == null) + return 1; + if (b == null) + return -1; + a = toLowerCase.call(a); + b = toLowerCase.call(b); + if (a < b) + return -1; + if (a > b) + return 1; + return 0; +} +exports.caseInsensitiveCompare = caseInsensitiveCompare; +function argumentsToValue(fn) { + return (...args) => fn(...args.map(toValue)); +} +exports.argumentsToValue = argumentsToValue; +function escapeRegExp(text) { + return text.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, '\\$&'); +} +exports.escapeRegExp = escapeRegExp; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW5kZXJzY29yZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saXF1aWRqcy91dGlsL3VuZGVyc2NvcmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsdUNBQW1DO0FBRXRCLFFBQUEsUUFBUSxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFBO0FBQ2pELE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFBO0FBRW5DLFFBQUEsY0FBYyxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUE7QUFFbkQsU0FBZ0IsUUFBUSxDQUFFLEtBQVU7SUFDbEMsT0FBTyxPQUFPLEtBQUssS0FBSyxRQUFRLENBQUE7QUFDbEMsQ0FBQztBQUZELDRCQUVDO0FBRUQsd0RBQXdEO0FBQ3hELFNBQWdCLFVBQVUsQ0FBRSxLQUFVO0lBQ3BDLE9BQU8sT0FBTyxLQUFLLEtBQUssVUFBVSxDQUFBO0FBQ3BDLENBQUM7QUFGRCxnQ0FFQztBQUVELFNBQWdCLFNBQVMsQ0FBSyxHQUFRO0lBQ3BDLE9BQU8sR0FBRyxJQUFJLFVBQVUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUE7QUFDcEMsQ0FBQztBQUZELDhCQUVDO0FBRUQsU0FBZ0IsVUFBVSxDQUFFLEdBQVE7SUFDbEMsT0FBTyxHQUFHLElBQUksVUFBVSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxVQUFVLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLFVBQVUsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUE7QUFDdkYsQ0FBQztBQUZELGdDQUVDO0FBRUQsU0FBZ0IsV0FBVyxDQUFFLEdBQVc7SUFDdEMsT0FBTyxHQUFHLENBQUMsT0FBTyxDQUFDLHVCQUF1QixFQUFFLE1BQU0sQ0FBQyxDQUFBO0FBQ3JELENBQUM7QUFGRCxrQ0FFQztBQUlELFNBQWdCLFNBQVMsQ0FBRSxFQUFPO0lBQ2hDLE9BQU8sVUFBVSxHQUFHLElB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 \ No newline at end of file diff --git a/packages/osrl/main.d.ts b/packages/osrl/main.d.ts new file mode 100644 index 00000000..682e8577 --- /dev/null +++ b/packages/osrl/main.d.ts @@ -0,0 +1,3 @@ +#!/usr/bin/env node +import * as CLI from 'yargs'; +export declare const register: (cli: CLI.Argv) => CLI.Argv<{}>; diff --git a/packages/osrl/main.js b/packages/osrl/main.js new file mode 100644 index 00000000..2e928829 --- /dev/null +++ b/packages/osrl/main.js @@ -0,0 +1,47 @@ +#!/usr/bin/env node +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.register = void 0; +const _cli_1 = require("./_cli"); +(0, _cli_1.defaults)(); +const CLI = require("yargs"); +const compile_1 = require("./commands/compile"); +(0, compile_1.register)(CLI); +const init_1 = require("./commands/init"); +(0, init_1.register)(CLI); +const zod_schema_1 = require("./zod_schema"); +const defaultOptions = (yargs) => { + return yargs.option('logLevel', { + default: 'info', + describe: 'Log level : error, warn, info, debug, trace' + }); +}; +let options = (yargs) => defaultOptions(yargs); +const register = (cli) => { + return cli.command('types', 'generate types', options, (argv) => __awaiter(void 0, void 0, void 0, function* () { + if (argv.help) { + return; + } + (0, zod_schema_1.types)(); + })); +}; +exports.register = register; +(0, exports.register)(CLI); +const argv = CLI.argv; +if (argv.h || argv.help) { + CLI.showHelp(); + process.exit(); +} +else if (argv.v || argv.version) { + process.exit(); +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFpbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInNyYy9tYWluLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7QUFDQSxpQ0FBa0M7QUFBQyxJQUFBLGVBQVEsR0FBRSxDQUFBO0FBQzdDLDZCQUE0QjtBQUM1QixnREFBaUU7QUFBQyxJQUFBLGtCQUFlLEVBQUMsR0FBRyxDQUFDLENBQUE7QUFDdEYsMENBQTJEO0FBQUMsSUFBQSxlQUFZLEVBQUMsR0FBRyxDQUFDLENBQUE7QUFDN0UsNkNBQW9DO0FBRXBDLE1BQU0sY0FBYyxHQUFHLENBQUMsS0FBZSxFQUFFLEVBQUU7SUFDdkMsT0FBTyxLQUFLLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRTtRQUM1QixPQUFPLEVBQUUsTUFBTTtRQUNmLFFBQVEsRUFBRSw2Q0FBNkM7S0FDMUQsQ0FBQyxDQUFBO0FBQ04sQ0FBQyxDQUFBO0FBRUQsSUFBSSxPQUFPLEdBQUcsQ0FBQyxLQUFlLEVBQUUsRUFBRSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQTtBQUVqRCxNQUFNLFFBQVEsR0FBRyxDQUFDLEdBQWEsRUFBRSxFQUFFO0lBQ3RDLE9BQU8sR0FBRyxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsT0FBTyxFQUFHLENBQU8sSUFBbUIsRUFBRSxFQUFFO1FBQ2xGLElBQUksSUFBSSxDQUFDLElBQUksRUFBRTtZQUFFLE9BQU07U0FBRTtRQUN6QixJQUFBLGtCQUFLLEdBQUUsQ0FBQTtJQUNYLENBQUMsQ0FBQSxDQUFDLENBQUE7QUFDTixDQUFDLENBQUE7QUFMWSxRQUFBLFFBQVEsWUFLcEI7QUFDRCxJQUFBLGdCQUFRLEVBQUMsR0FBRyxDQUFDLENBQUE7QUFFYixNQUFNLElBQUksR0FBUSxHQUFHLENBQUMsSUFBSSxDQUFBO0FBRTFCLElBQUksSUFBSSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFO0lBQ3JCLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNmLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQztDQUNsQjtLQUFNLElBQUksSUFBSSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO0lBQy9CLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQztDQUNsQiJ9 \ No newline at end of file diff --git a/packages/osrl/options.d.ts b/packages/osrl/options.d.ts new file mode 100644 index 00000000..d3f1ba78 --- /dev/null +++ b/packages/osrl/options.d.ts @@ -0,0 +1,4 @@ +import { IProfile } from '@plastichub/osr-commons'; +import { IOptions } from './types'; +export declare const parseProfile: (profilePath: string, profile: IProfile, options: IOptions, rel?: string) => IProfile; +export declare const parse: (options: IOptions, argv: any) => IOptions; diff --git a/packages/osrl/options.js b/packages/osrl/options.js new file mode 100644 index 00000000..0016d4dd --- /dev/null +++ b/packages/osrl/options.js @@ -0,0 +1,173 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.parse = exports.parseProfile = void 0; +const path = require("path"); +const constants_1 = require("@plastichub/core/constants"); +const read_1 = require("@plastichub/fs/read"); +const exists_1 = require("@plastichub/fs/exists"); +const primitives_1 = require("@plastichub/core/primitives"); +const osr_commons_1 = require("@plastichub/osr-commons"); +const _1 = require("./"); +const lib_1 = require("./lib/"); +const constants_2 = require("./constants"); +const parseProfile = (profilePath, profile, options, rel) => { + var _a; + profilePath = path.resolve((0, osr_commons_1.resolve)(profilePath, false, profile.variables)); + if (!(0, exists_1.sync)(profilePath)) { + _1.logger.warn(`Profile file not found: ${profilePath}`); + return; + } + const _profile = (0, read_1.sync)(profilePath, 'json') || { includes: [], variables: {} }; + _profile.includes = _profile.includes || []; + _profile.variables = _profile.variables || {}; + if (options.env && _profile.env && _profile.env[options.env] && _profile.env[options.env].includes) { + profile.includes = [ + ...profile.includes, + ..._profile.includes, + ..._profile.env[options.env].includes + ]; + } + else { + profile.includes = [ + ...profile.includes, + ..._profile.includes + ]; + } + if (options.env && _profile.env && _profile.env[options.env] && _profile.env[options.env].variables) { + profile.variables = Object.assign(Object.assign(Object.assign({}, profile.variables), _profile.variables), _profile.env[options.env].variables); + } + for (const k in _profile.variables) { + if ((0, primitives_1.isString)(_profile.variables[k])) { + _profile.variables[k] = (0, _1.substitute)(false, _profile.variables[k], profile.variables); + } + } + profile.variables = Object.assign(Object.assign(Object.assign({}, profile.variables), _profile.variables), ((_a = _profile.env[options.env]) === null || _a === void 0 ? void 0 : _a.variables) || {}); + for (const k in profile.variables) { + if ((0, primitives_1.isString)(profile.variables[k])) { + profile.variables[k] = (0, _1.substitute)(false, profile.variables[k], profile.variables); + } + } + profile.includes = Array.from(new Set(profile.includes)); + profile.includes = [ + ...profile.includes.map((i) => { + if (!path.isAbsolute(i) && rel && !i.match(constants_1.REGEX_VAR)) { + return path.resolve(`${rel}/${i}`); + } + let ret = (0, osr_commons_1.resolve)(i, false, profile.variables); + ret = path.resolve((0, _1.substitute)(false, ret, profile.variables)); + return ret; + }) + ]; + profile.includes = profile.includes.filter((include) => include !== null && + include !== ''); + profile.includes = Array.from(new Set(profile.includes)); + return profile; +}; +exports.parseProfile = parseProfile; +const parse = (options, argv) => { + var _a; + for (const k in argv) { + if (!(k in options.variables) + && k !== '_' + && k !== '$0' + && k !== 'variables' + && k !== 'source' + && k !== 'language' + && k !== 'envVariables' + && k !== 'env-variables' + && k !== 'format' + && k !== 'profile' + && k !== 'output' + && k !== 'plugins' + && k !== 'dry' + && k !== 'stdout' + && k !== 'alt' + && k !== 'template' + && k !== 'trace' + && k !== 'string' + && k !== 'bootstrap') { + options.variables[k] = argv[k]; + } + } + const variables = Object.assign(Object.assign(Object.assign({}, osr_commons_1.DEFAULT_ROOTS), options.variables), { sourceLanguage: argv.sourceLanguage, targetLanguage: argv.targetLanguage, cwd: ((_a = options.variables) === null || _a === void 0 ? void 0 : _a.cwd) || options.cwd, trace: argv.trace }); + (0, lib_1.resolveConfig)(variables); + const profile = { variables: Object.assign({}, variables), includes: [] }; + const srcInfo = (0, osr_commons_1.pathInfo)(options.source); + if (argv.profile) { + if (typeof argv.profile === 'string') { + argv.profile = [argv.profile]; + } + else if ((0, primitives_1.isArray)(argv.profile)) { + argv.profile = argv.profile; + } + else { + argv.profile = []; + } + } + if (options.source) { + if (srcInfo && srcInfo.FILES && srcInfo.FILES.length) { + options.srcInfo = srcInfo; + for (const key in srcInfo) { + if (Object.prototype.hasOwnProperty.call(srcInfo, key)) { + options.variables['SRC_' + key] = srcInfo[key]; + } + } + } + else { + options.source = path.resolve((0, _1.substitute)(options.alt, options.source, profile.variables)); + } + } + if (argv.profile) { + argv.profile.forEach((p) => (0, exports.parseProfile)(p, profile, options)); + } + if (srcInfo && srcInfo.FILES && srcInfo.FILES.length) { + options.srcInfo = srcInfo; + for (const key in srcInfo) { + if (Object.prototype.hasOwnProperty.call(srcInfo, key)) { + options.variables['SRC_' + key] = srcInfo[key]; + } + } + srcInfo.FILES.forEach((f) => { + const srcParts = path.parse(f); + const profilePath = path.resolve(`${srcParts.dir}/${constants_2.PROFILE_FILE_NAME}`); + if ((0, exists_1.sync)(profilePath)) { + (0, exports.parseProfile)(profilePath, profile, options, srcParts.dir); + } + }); + } + options.profile = profile; + if (options.plugins) { + options.plugins = options.plugins.map((p) => { + let dir = path.resolve((0, _1.substitute)(false, p, options.variables)); + if ((0, exists_1.sync)(dir)) { + return dir; + } + }); + } + if (options.output) { + const out = (0, _1.substitute)(options.alt, options.output, options.variables); + let targetInfo = (0, osr_commons_1.pathInfo)(out); + if (options.srcInfo && targetInfo) { + targetInfo.PATH = options.output; + for (const key in targetInfo) { + if (Object.prototype.hasOwnProperty.call(targetInfo, key)) { + options.variables['DST_' + key] = targetInfo[key]; + } + } + options.targetInfo = targetInfo; + } + else { + options.output = path.resolve((0, _1.substitute)(options.alt, options.output || '', options.variables)); + } + } + else { + options.stdout = true; + } + options.pathVariables = options.variables; + options.sourceLanguage = argv.sourceLanguage || 'en'; + options.targetLanguage = argv.targetLanguage || 'en'; + options.logLevel = argv.logLevel || 'warn'; + return options; +}; +exports.parse = parse; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3B0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInNyYy9vcHRpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDZCQUE0QjtBQUU1QiwwREFBc0Q7QUFDdEQsOENBQWtEO0FBQ2xELGtEQUFzRDtBQUN0RCw0REFBK0Q7QUFDL0QseURBQW1GO0FBR25GLHlCQUF1QztBQUN2QyxnQ0FBc0M7QUFDdEMsMkNBQStDO0FBRXhDLE1BQU0sWUFBWSxHQUFHLENBQUMsV0FBbUIsRUFBRSxPQUFpQixFQUFFLE9BQWlCLEVBQUUsR0FBWSxFQUFFLEVBQUU7O0lBQ3ZHLFdBQVcsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUEscUJBQU8sRUFBQyxXQUFXLEVBQUUsS0FBSyxFQUFFLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFBO0lBQzFFLElBQUksQ0FBQyxJQUFBLGFBQU0sRUFBQyxXQUFxQixDQUFDLEVBQUU7UUFDbkMsU0FBTSxDQUFDLElBQUksQ0FBQywyQkFBMkIsV0FBVyxFQUFFLENBQUMsQ0FBQTtRQUNyRCxPQUFNO0tBQ047SUFDRCxNQUFNLFFBQVEsR0FBRyxJQUFBLFdBQUksRUFBQyxXQUFxQixFQUFFLE1BQU0sQ0FBUSxJQUFJLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFjLENBQUE7SUFFMUcsUUFBUSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUMsUUFBUSxJQUFJLEVBQUUsQ0FBQTtJQUMzQyxRQUFRLENBQUMsU0FBUyxHQUFHLFFBQVEsQ0FBQyxTQUFTLElBQUksRUFBRSxDQUFBO0lBRTdDLElBQUksT0FBTyxDQUFDLEdBQUcsSUFBSSxRQUFRLENBQUMsR0FBRyxJQUFJLFFBQVEsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLFFBQVEsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRTtRQUNuRyxPQUFPLENB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 \ No newline at end of file diff --git a/packages/osrl/package-lock.json b/packages/osrl/package-lock.json new file mode 100644 index 00000000..8dbf96ab --- /dev/null +++ b/packages/osrl/package-lock.json @@ -0,0 +1,30281 @@ +{ + "name": "@plastichub/osrl", + "version": "0.5.5", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "@plastichub/osrl", + "version": "0.5.5", + "license": "BSD-3-Clause", + "dependencies": { + "@google-cloud/local-auth": "^2.1.1", + "@iarna/toml": "^2.2.5", + "@plastichub/core": "^0.2.6", + "@plastichub/fs": "^0.13.39", + "@plastichub/osr-ai": "file:../osr-ai", + "@plastichub/osr-cache": "^0.3.9", + "@plastichub/osr-commons": "file:../osr-commons", + "@plastichub/osr-i18n": "file:../osr-i18n", + "@plastichub/osr-log": "file:../osr-log", + "@types/cacache": "^15.0.1", + "@types/download": "^8.0.1", + "@types/get-stdin": "^7.0.0", + "@types/html-minifier-terser": "^7.0.2", + "@types/is-glob": "^4.0.2", + "@types/js-beautify": "^1.13.2", + "@types/jsonpath": "^0.2.0", + "@types/minify": "^9.1.4", + "@types/moment": "^2.13.0", + "@types/node": "^20.14.2", + "@types/yargs": "^17.0.2", + "axios": "^0.21.1", + "bluebird": "^3.7.2", + "cacache": "^15.2.0", + "cheerio": "^1.0.0-rc.10", + "convert-units": "^2.3.4", + "env-var": "^7.3.0", + "errlop": "^4.5.0", + "exception-formatter": "^2.1.2", + "fast-glob": "^3.2.7", + "find-up": "4.0", + "front-matter": "^4.0.2", + "get-stdin": "^9.0.0", + "gitea-js": "^1.20.1", + "glob-base": "^0.3.0", + "googleapis": "^105.0.0", + "highlight.js": "^11.1.0", + "html-minifier-terser": "^7.2.0", + "is-glob": "^4.0.1", + "is-url": "^1.2.4", + "js-base64": "^3.7.2", + "js-beautify": "^1.14.0", + "jsdom": "^16.7.0", + "jsome": "^2.3.24", + "json-format-highlight": "^1.0.4", + "json-pretty-html": "^1.1.6", + "json-to-pretty-yaml": "^1.2.2", + "jsonpath": "^1.1.1", + "jsonpath-plus": "^10.0.0", + "keyv": "^4.5.4", + "keyv-file": "^0.3.1", + "lodash": "^4.17.21", + "markdown-table": "^3.0.3", + "minify": "^11.4.1", + "moment": "^2.30.1", + "node-xlsx": "^0.24.0", + "parse-glob": "^3.0.4", + "pretty": "^2.0.0", + "query-string": "^7.1.3", + "require-like": "^0.1.2", + "rotating-file-stream": "^3.2.3", + "sharp": "^0.33.4", + "showdown": "^2.1.0", + "turndown": "^7.2.0", + "typescript": "^4.9.4", + "uri-js": "^4.4.1", + "yaml": "^2.4.2", + "yargs": "^14.2.3", + "yargs-parser": "^15.0.3", + "zod": "^3.24.1" + }, + "bin": { + "osrl": "main.js" + }, + "devDependencies": { + "parcel-bundler": "^1.12.5" + }, + "engines": { + "node": ">= 8.0.0" + }, + "optionalDependencies": { + "@img/sharp-win32-x64": "^0.33.4" + } + }, + "../../ph3/temp/liquidjs": { + "version": "9.39.2", + "extraneous": true, + "license": "MIT", + "bin": { + "liquid": "bin/liquid.js", + "liquidjs": "bin/liquid.js" + }, + "devDependencies": { + "@commitlint/cli": "^12.1.4", + "@commitlint/config-conventional": "^8.2.0", + "@semantic-release/changelog": "^3.0.2", + "@semantic-release/commit-analyzer": "^6.1.0", + "@semantic-release/git": "^7.0.8", + "@semantic-release/npm": "^5.1.8", + "@semantic-release/release-notes-generator": "^7.1.4", + "@types/benchmark": "^1.0.31", + "@types/chai": "^4.1.7", + "@types/chai-as-promised": "^7.1.0", + "@types/express": "^4.17.2", + "@types/jsdom": "^12.2.2", + "@types/mocha": "^5.2.6", + "@types/sinon": "^7.0.6", + "@types/sinon-chai": "^3.2.2", + "@types/supertest": "^2.0.7", + "@typescript-eslint/eslint-plugin": "^5.6.0", + "@typescript-eslint/parser": "^5.6.0", + "all-contributors-cli": "^6.20.0", + "benchmark": "^2.1.4", + "chai": "^4.2.0", + "chai-as-promised": "^7.1.1", + "coveralls": "^3.0.2", + "cross-env": "^5.2.0", + "eslint": "^7.32.0", + "eslint-config-standard": "^12.0.0", + "eslint-plugin-import": "^2.15.0", + "eslint-plugin-mocha": "^5.3.0", + "eslint-plugin-node": "^8.0.1", + "eslint-plugin-promise": "^4.0.1", + "eslint-plugin-standard": "^4.0.0", + "express": "^4.16.4", + "husky": "^4.2.5", + "jsdom": "^16.5.0", + "mocha": "^9.0.1", + "nyc": "^15.1.0", + "regenerator-runtime": "^0.12.1", + "rollup": "^2.61.0", + "rollup-plugin-replace": "^2.1.0", + "rollup-plugin-typescript2": "^0.31.1", + "rollup-plugin-uglify": "^6.0.4", + "rollup-plugin-version-injector": "^1.3.3", + "semantic-release": "^19.0.3", + "sinon": "^7.5.0", + "sinon-chai": "^3.3.0", + "supertest": "^3.4.2", + "ts-node": "^8.0.2", + "tslib": "^2.3.1", + "typedoc": "^0.19.2", + "typedoc-plugin-markdown": "^2.2.17", + "typescript": "^4.5.3" + }, + "engines": { + "node": ">=4.8.7" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/liquidjs" + } + }, + "../osr-ai": { + "name": "@plastichub/osr-ai", + "version": "0.1.7", + "license": "BSD-3-Clause", + "dependencies": { + "@asteasolutions/zod-to-openapi": "^7.2.0", + "@plastichub/core": "^0.1.9", + "@plastichub/fs": "^0.13.41", + "@plastichub/osr-ai-templates": "file:../osr-ai-templates", + "@plastichub/osr-cache": "^0.4.7", + "@plastichub/osr-cli-commons": "file:../osr-cli-commons", + "@plastichub/osr-commons": "file:../osr-commons", + "@plastichub/osr-log": "file:../osr-log", + "@plastichub/osr-templates": "file:../osr-templates", + "@rjsf/bootstrap-4": "^5.18.4", + "@types/cacache": "^15.0.1", + "@types/mime-types": "^2.1.4", + "@types/node": "^14.18.63", + "axios": "^1.7.7", + "cacache": "^17.0.3", + "chalk": "^2.4.1", + "cheerio": "^1.0.0-rc.12", + "convert-units": "^2.3.4", + "csv-generate": "^4.3.1", + "deepmerge-ts": "^7.1.3", + "electron": "^30.0.9", + "env-var": "^7.0.1", + "glob-base": "^0.3.0", + "html-to-text": "^9.0.5", + "md5": "^2.3.0", + "mime-types": "^2.1.35", + "openai": "^4.84.0", + "tslog": "^3.3.3", + "typescript": "^5.3.3", + "yargs": "^17.7.2", + "yauzl": "^3.0.0", + "zod": "^3.24.1", + "zod-to-json-schema": "^3.23.3" + }, + "bin": { + "osr-ai": "main.js" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "../osr-cli-commons": { + "name": "@plastichub/osr-cli-commons", + "version": "0.5.7", + "extraneous": true, + "license": "BSD-3-Clause", + "dependencies": { + "@plastichub/core": "^0.2.6", + "@plastichub/fs": "^0.13.40", + "@plastichub/osr-commons": "^0.4.6", + "@plastichub/osr-log": "^0.1.2", + "ansi-regex": "^5.0.0", + "cryptr": "^6.0.3", + "env-var": "^7.1.1", + "fast-glob": "^3.2.11", + "glob": "^10.4.1", + "glob-base": "github:justin-caribou/glob-base", + "is-glob": "^4.0.3", + "p-map": "^4.0.0", + "parse-glob": "^3.0.4", + "tslog": "^4.9.3", + "typescript": "^5.6.3", + "yaml": "^2.6.0", + "yargs": "^17.7.2", + "zod": "^3.23.8", + "zod-to-json-schema": "^3.23.5", + "zod-to-ts": "^1.2.0" + }, + "bin": { + "osr-cli": "main.js" + }, + "devDependencies": { + "@types/jest": "^29.5.14", + "@types/node": "^20.17.16", + "@types/yargs": "^17.0.33", + "jest": "^29.7.0", + "ts-jest": "^29.2.5" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "../osr-commons": { + "name": "@plastichub/osr-commons", + "version": "0.5.3", + "license": "BSD-3-Clause", + "dependencies": { + "@plastichub/core": "^0.2.6", + "@plastichub/fs": "^0.13.41", + "cryptr": "^6.0.3", + "env-var": "^7.5.0", + "fast-glob": "^3.3.2", + "filenamify": "^4.3.0", + "glob": "^11.0.0", + "glob-base": "^0.3.0", + "is-glob": "^4.0.3", + "parse-glob": "^3.0.4", + "sanitize-filename": "^1.6.3", + "tslog": "^4.9.3", + "typescript": "^5.6.3", + "yargs": "^17.7.2", + "zod": "^3.24.1", + "zod-to-json-schema": "^3.23.5", + "zod-to-ts": "^1.2.0" + }, + "devDependencies": { + "@types/node": "^22.12.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "../osr-discourse": { + "name": "@plastichub/osr-discourse", + "version": "0.1.9", + "extraneous": true, + "license": "BSD-3-Clause", + "dependencies": { + "@iarna/toml": "^2.2.5", + "@plastichub/core": "^0.2.5", + "@plastichub/fs": "^0.13.32", + "@plastichub/osr-cache": "^0.4.1", + "@plastichub/osr-cli-commons": "^0.4.9", + "@plastichub/osr-commons": "^0.3.3", + "@plastichub/osr-fs-utils": "^0.1.4", + "@plastichub/osrl": "file:../osrl", + "@types/markdown-it": "^12.2.3", + "@types/node": "^14.17.5", + "@types/yargs": "^17.0.11", + "axios": "^0.27.2", + "bluebird": "^3.7.2", + "chalk": "^2.4.1", + "cheerio": "^1.0.0-rc.12", + "chokidar": "^3.5.3", + "download": "^8.0.0", + "env-var": "^7.1.1", + "escape-html": "^1.0.3", + "fast-glob": "^3.3.0", + "filenamify": "^4.3.0", + "find-up": "^5.0.0", + "front-matter": "^4.0.2", + "generate-password": "^1.7.0", + "glob-base": "^0.3.0", + "isomorphic-unfetch": "^4.0.2", + "js-base64": "^3.7.2", + "js-beautify": "^1.14.9", + "json-to-pretty-yaml": "^1.2.2", + "markdown-it": "^13.0.1", + "md5": "^2.3.0", + "moment": "^2.29.4", + "native-promise-pool": "^3.19.0", + "pretty": "^2.0.0", + "querystring": "^0.2.1", + "request": "^2.88.2", + "sanitize-filename": "^1.6.3", + "showdown": "^2.1.0", + "simple-git": "^3.19.1", + "slugify": "^1.6.6", + "tslog": "^3.3.4", + "turndown": "^7.1.2", + "typescript": "^4.3.5", + "uri-js": "^4.4.1", + "yargs": "^17.5.1" + }, + "bin": { + "osr-discourse": "main.js" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "../osr-i18n": { + "name": "@plastichub/osr-i18n", + "version": "0.2.5", + "license": "BSD-3-Clause", + "dependencies": { + "@iarna/toml": "^2.2.5", + "@plastichub/core": "file:../core", + "@plastichub/fs": "^0.13.39", + "@plastichub/osr-cache": "file:../osr-cache", + "@plastichub/osr-cli-commons": "file:../osr-cli-commons", + "@plastichub/osr-commons": "file:../osr-commons", + "@plastichub/osr-log": "file:../osr-log", + "@plastichub/osr-sync": "^0.3.8", + "@types/html-minifier-terser": "^7.0.2", + "@types/node": "^20.14.9", + "axios": "^0.27.2", + "convert-units": "^2.3.4", + "cryptr": "^6.0.3", + "deepl-node": "^1.8.0", + "env-var": "^7.1.1", + "front-matter": "^4.0.2", + "glob-base": "^0.3.0", + "html-minifier-terser": "^7.2.0", + "json-to-pretty-yaml": "^1.2.2", + "jsonpath-plus": "^8.1.0", + "keyv": "^4.5.4", + "keyv-file": "^0.3.1", + "link-dev": "^1.0.4", + "p-map": "^4.0.0", + "p-throttle": "^v4.1.1", + "querystring": "^0.2.1", + "ssri": "^10.0.1", + "tslog": "^4.9.3", + "typesafe-i18n": "^5.11.0", + "typescript": "^4.9.5", + "xlsx": "^0.18.5", + "yaml": "^2.4.1", + "yargs": "^17.7.2", + "zod": "^3.24.1" + }, + "bin": { + "osr-i18n": "main.js" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "../osr-log": { + "name": "@plastichub/osr-log", + "version": "0.1.6", + "dependencies": { + "@datalust/winston-seq": "^2.0.0", + "@plastichub/core": "^0.1.9", + "@plastichub/fs": "^0.13.40", + "@plastichub/osr-commons": "^0.5.0", + "p-map": "^4.0.0", + "rotating-file-stream": "^3.2.5", + "tslog": "^4.9.3", + "winston": "^3.17.0", + "winston-transport": "^4.9.0", + "zod": "^3.24.1" + }, + "devDependencies": { + "@types/node": "^22.12.0" + } + }, + "../osr-tasks": { + "name": "@plastichub/osr-tasks", + "version": "0.5.4", + "extraneous": true, + "license": "BSD-3-Clause", + "dependencies": { + "@plastichub/core": "^0.2.6", + "@plastichub/osr-cache": "^0.4.7", + "@plastichub/osr-cad": "^0.8.7", + "@plastichub/osr-cli-commons": "^0.5.1", + "@plastichub/osr-i18n": "file:../osr-i18n", + "@plastichub/osr-media": "file:../osr-media", + "@plastichub/osr-sync": "file:../osr-sync", + "@plastichub/osrl": "file:../osrl", + "axios": "^0.27.2", + "bluebird": "^3.7.2", + "chalk": "^2.4.1", + "chokidar": "^3.6.0", + "convert-units": "^2.3.4", + "env-var": "^7.1.1", + "fix": "^0.0.6", + "front-matter": "^4.0.2", + "grunt": "^1.6.1", + "grunt-cli": "^1.4.3", + "grunt-extend-config": "^0.9.7", + "md5": "^2.3.0", + "npm": "^10.8.1", + "p-map": "^4.0.0", + "querystring": "^0.2.1", + "sanitize-filename": "^1.6.3", + "semver": "^7.5.1", + "sharp": "^0.33.4", + "simple-git": "^3.18.0", + "ssh2": "^1.13.0", + "tslog": "^3.3.3", + "typescript": "^4.9.5", + "vinyl-fs": "^3.0.3", + "yargs": "^17.7.2" + }, + "bin": { + "osr-task": "main.js" + }, + "devDependencies": { + "@types/chokidar": "^2.1.3", + "@types/grunt": "^0.4.27", + "@types/lodash": "^4.14.148", + "@types/node": "^14.17.5", + "@types/ssh2": "^1.11.11", + "@types/vinyl-fs": "^3.0.2", + "@types/yargs": "^17.0.11" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "../osr-vcs": { + "name": "@plastichub/osr-vcs", + "version": "0.0.3", + "extraneous": true, + "license": "BSD-3-Clause", + "dependencies": { + "@plastichub/core": "^0.2.6", + "@plastichub/fs": "^0.13.32", + "@plastichub/osr-cache": "^0.3.9", + "@plastichub/osr-cli-commons": "^0.4.1", + "bluebird": "^3.7.2", + "cross-fetch": "^4.0.0", + "gitea-js": "^1.19.1", + "js-beautify": "^1.14.6", + "typescript": "^4.3.5", + "yargs": "^17.7.2", + "yargs-parser": "^15.0.3" + }, + "bin": { + "osr-vcs": "main.js" + }, + "devDependencies": { + "@types/node": "^14.17.5", + "@types/yargs": "^17.0.24" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.0.tgz", + "integrity": "sha512-INCKxTtbXtcNbUZ3YXutwMpEleqttcswhAdee7dhuoVrD2cnuc3PqtERBtxkX5nziX9vnBL8WXmSGwv8CuPV6g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.25.9", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.0.tgz", + "integrity": "sha512-qETICbZSLe7uXv9VE8T/RWOdIE5qqyTucOt4zLYMafj2MRO271VGgLd4RACJMeBO37UPWhXiKMBk7YlJ0fOzQA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.0.tgz", + "integrity": "sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.26.0", + "@babel/generator": "^7.26.0", + "@babel/helper-compilation-targets": "^7.25.9", + "@babel/helper-module-transforms": "^7.26.0", + "@babel/helpers": "^7.26.0", + "@babel/parser": "^7.26.0", + "@babel/template": "^7.25.9", + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.26.0", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/core/node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@babel/core/node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@babel/core/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/generator": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.0.tgz", + "integrity": "sha512-/AIkAmInnWwgEAJGQr9vY0c66Mj6kjkE2ZPB1PurTRaRAh3U+J45sAQMjQDJdh4WbR3l0x5xkimXBKyBXXAu2w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.26.0", + "@babel/types": "^7.26.0", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.25.9.tgz", + "integrity": "sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.25.9.tgz", + "integrity": "sha512-C47lC7LIDCnz0h4vai/tpNOI95tCd5ZT3iBt/DBH5lXKHZsyNQv18yf1wIIg2ntiQNgmAvA+DgZ82iW8Qdym8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.9.tgz", + "integrity": "sha512-j9Db8Suy6yV/VHa4qzrj9yZfZxhLWQdVnRlXxmKLYlhWUVB1sB2G5sxuWYXk/whHD9iW76PmNzxZ4UCnTQTVEQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.25.9", + "@babel/helper-validator-option": "^7.25.9", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true, + "license": "ISC" + }, + "node_modules/@babel/helper-create-class-features-plugin": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.9.tgz", + "integrity": "sha512-UTZQMvt0d/rSz6KI+qdu7GQze5TIajwTS++GUozlw8VBJDEOAqSXwm1WvmYEZwqdqSGQshRocPDqrt4HBZB3fQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-member-expression-to-functions": "^7.25.9", + "@babel/helper-optimise-call-expression": "^7.25.9", + "@babel/helper-replace-supers": "^7.25.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9", + "@babel/traverse": "^7.25.9", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-class-features-plugin/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.25.9.tgz", + "integrity": "sha512-ORPNZ3h6ZRkOyAa/SaHU+XsLZr0UQzRwuDQ0cczIA17nAzZ+85G5cVkOJIj7QavLZGSe8QXUmNFxSZzjcZF9bw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.25.9", + "regexpu-core": "^6.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-define-polyfill-provider": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.2.tgz", + "integrity": "sha512-LV76g+C502biUK6AyZ3LK10vDpDyCzZnhZFXkH1L75zHPj68+qc8Zfpx2th+gzwA2MzyK+1g/3EPl62yFnVttQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-compilation-targets": "^7.22.6", + "@babel/helper-plugin-utils": "^7.22.5", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/@babel/helper-define-polyfill-provider/node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@babel/helper-define-polyfill-provider/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.25.9.tgz", + "integrity": "sha512-wbfdZ9w5vk0C0oyHqAJbc62+vet5prjj01jjJ8sKn3j9h3MQQlflEdXYvuqRWjHnM12coDEqiC1IRCi0U/EKwQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz", + "integrity": "sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz", + "integrity": "sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9", + "@babel/traverse": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.25.9.tgz", + "integrity": "sha512-FIpuNaz5ow8VyrYcnXQTDRGvV6tTjkNtCK/RYNDXGSLlUD6cBuQTSw43CShGxjvfBTfcUA/r6UhUCbtYqkhcuQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.25.9.tgz", + "integrity": "sha512-kSMlyUVdWe25rEsRGviIgOWnoT/nfABVWlqt9N19/dIPWViAOW2s9wznP5tURbs/IDuNk4gPy3YdYRgH3uxhBw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-remap-async-to-generator": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.25.9.tgz", + "integrity": "sha512-IZtukuUeBbhgOcaW2s06OXTzVNJR0ybm4W5xC1opWFFJMZbwRj5LCk+ByYH7WdZPZTt8KnFwA8pvjN2yqcPlgw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-wrap-function": "^7.25.9", + "@babel/traverse": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-replace-supers": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.25.9.tgz", + "integrity": "sha512-IiDqTOTBQy0sWyeXyGSC5TBJpGFXBkRynjBeXsvbhQFKj2viwJC76Epz35YLU1fpe/Am6Vppb7W7zM4fPQzLsQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-member-expression-to-functions": "^7.25.9", + "@babel/helper-optimise-call-expression": "^7.25.9", + "@babel/traverse": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.25.9.tgz", + "integrity": "sha512-c6WHXuiaRsJTyHYLJV75t9IqsmTbItYfdj99PnzYGQZkYKvan5/2jKJ7gu31J3/BJ/A18grImSPModuyG/Eo0Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.25.9.tgz", + "integrity": "sha512-K4Du3BFa3gvyhzgPcntrkDgZzQaq6uozzcpGbOO1OEJaI+EJdqWIMTLgFgQf6lrfiDFo5FU+BxKepI9RmZqahA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz", + "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", + "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz", + "integrity": "sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-wrap-function": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.25.9.tgz", + "integrity": "sha512-ETzz9UTjQSTmw39GboatdymDq4XIQbR8ySgVrylRhPOFpsd+JrKHIuF0de7GCWmem+T4uC5z7EZguod7Wj4A4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.25.9", + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.26.0.tgz", + "integrity": "sha512-tbhNuIxNcVb21pInl3ZSjksLCvgdZy9KwJ8brv993QtIVKJBBkYXz4q4ZbAv31GdnC+R90np23L5FbEBlthAEw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.25.9", + "@babel/types": "^7.26.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.26.1", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.1.tgz", + "integrity": "sha512-reoQYNiAJreZNsJzyrDNzFQ+IQ5JFiIzAHJg9bn94S3l+4++J7RsIhNMoB+lgP/9tpmiAQqspv+xfdxTSzREOw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.26.0" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.25.9.tgz", + "integrity": "sha512-ZkRyVkThtxQ/J6nv3JFYv1RYY+JT5BvU0y3k5bWrmuG4woXypRa4PXmm9RhOwodRkYFWqC0C0cqcJ4OqR7kW+g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/traverse": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-safari-class-field-initializer-scope": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.25.9.tgz", + "integrity": "sha512-MrGRLZxLD/Zjj0gdU15dfs+HH/OXvnw/U4jJD8vpcP2CJQapPEv1IWwjc/qMg7ItBlPwSv1hRBbb7LeuANdcnw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.25.9.tgz", + "integrity": "sha512-2qUwwfAFpJLZqxd02YW9btUCZHl+RFvdDkNfZwaIJrvB8Tesjsk8pEQkTvGwZXLqXUx/2oyY3ySRhm6HOXuCug==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.25.9.tgz", + "integrity": "sha512-6xWgLZTJXwilVjlnV7ospI3xi+sl8lN8rXXbBD6vYn3UYDlGsag8wrZkKcSI8G6KgqKP7vNFaDgeDnfAABq61g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9", + "@babel/plugin-transform-optional-chaining": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.13.0" + } + }, + "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.25.9.tgz", + "integrity": "sha512-aLnMXYPnzwwqhYSCyXfKkIkYgJ8zv9RK+roo9DkTXz38ynIhd9XCbN08s3MGvqL2MYGVUGdRQLL/JqBIeJhJBg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/traverse": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-proposal-private-property-in-object": { + "version": "7.21.0-placeholder-for-preset-env.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", + "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-flow": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.26.0.tgz", + "integrity": "sha512-B+O2DnPc0iG+YXFqOxv2WNuNU97ToWjOomUQ78DouOENWUaM5sVrmet9mcomUGQFwpJd//gvUagXBSdzO1fRKg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-assertions": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.26.0.tgz", + "integrity": "sha512-QCWT5Hh830hK5EQa7XzuqIkQU9tT/whqbDz7kuaZMHFl1inRRg7JnuAEOQ0Ur0QUl0NufCk1msK2BeY79Aj/eg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-attributes": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.26.0.tgz", + "integrity": "sha512-e2dttdsJ1ZTpi3B9UYGLw41hifAubg19AtCu/2I/F1QNVclOBr1dYpTdmdyZ84Xiz43BS/tCUkMAZNLv12Pi+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-jsx": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.25.9.tgz", + "integrity": "sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-unicode-sets-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", + "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-arrow-functions": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.25.9.tgz", + "integrity": "sha512-6jmooXYIwn9ca5/RylZADJ+EnSxVUS5sjeJ9UPk6RWRzXCmOJCy6dqItPJFpw2cuCangPK4OYr5uhGKcmrm5Qg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-generator-functions": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.25.9.tgz", + "integrity": "sha512-RXV6QAzTBbhDMO9fWwOmwwTuYaiPbggWQ9INdZqAYeSHyG7FzQ+nOZaUUjNwKv9pV3aE4WFqFm1Hnbci5tBCAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-remap-async-to-generator": "^7.25.9", + "@babel/traverse": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-to-generator": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.25.9.tgz", + "integrity": "sha512-NT7Ejn7Z/LjUH0Gv5KsBCxh7BH3fbLTV0ptHvpeMvrt3cPThHfJfst9Wrb7S8EvJ7vRTFI7z+VAvFVEQn/m5zQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-remap-async-to-generator": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoped-functions": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.25.9.tgz", + "integrity": "sha512-toHc9fzab0ZfenFpsyYinOX0J/5dgJVA2fm64xPewu7CoYHWEivIWKxkK2rMi4r3yQqLnVmheMXRdG+k239CgA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoping": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.25.9.tgz", + "integrity": "sha512-1F05O7AYjymAtqbsFETboN1NvBdcnzMerO+zlMyJBEz6WkMdejvGWw9p05iTSjC85RLlBseHHQpYaM4gzJkBGg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-class-properties": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.25.9.tgz", + "integrity": "sha512-bbMAII8GRSkcd0h0b4X+36GksxuheLFjP65ul9w6C3KgAamI3JqErNgSrosX6ZPj+Mpim5VvEbawXxJCyEUV3Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-class-static-block": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.26.0.tgz", + "integrity": "sha512-6J2APTs7BDDm+UMqP1useWqhcRAXo0WIoVj26N7kPFB6S73Lgvyka4KTZYIxtgYXiN5HTyRObA72N2iu628iTQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0" + } + }, + "node_modules/@babel/plugin-transform-classes": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.9.tgz", + "integrity": "sha512-mD8APIXmseE7oZvZgGABDyM34GUmK45Um2TXiBUt7PnuAxrgoSVf123qUzPxEr/+/BHrRn5NMZCdE2m/1F8DGg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-compilation-targets": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-replace-supers": "^7.25.9", + "@babel/traverse": "^7.25.9", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-computed-properties": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.25.9.tgz", + "integrity": "sha512-HnBegGqXZR12xbcTHlJ9HGxw1OniltT26J5YpfruGqtUHlz/xKf/G2ak9e+t0rVqrjXa9WOhvYPz1ERfMj23AA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/template": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-destructuring": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.25.9.tgz", + "integrity": "sha512-WkCGb/3ZxXepmMiX101nnGiU+1CAdut8oHyEOHxkKuS1qKpU2SMXE2uSvfz8PBuLd49V6LEsbtyPhWC7fnkgvQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-dotall-regex": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.25.9.tgz", + "integrity": "sha512-t7ZQ7g5trIgSRYhI9pIJtRl64KHotutUJsh4Eze5l7olJv+mRSg4/MmbZ0tv1eeqRbdvo/+trvJD/Oc5DmW2cA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-duplicate-keys": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.25.9.tgz", + "integrity": "sha512-LZxhJ6dvBb/f3x8xwWIuyiAHy56nrRG3PeYTpBkkzkYRRQ6tJLu68lEF5VIqMUZiAV7a8+Tb78nEoMCMcqjXBw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-duplicate-named-capturing-groups-regex": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.25.9.tgz", + "integrity": "sha512-0UfuJS0EsXbRvKnwcLjFtJy/Sxc5J5jhLHnFhy7u4zih97Hz6tJkLU+O+FMMrNZrosUPxDi6sYxJ/EA8jDiAog==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-dynamic-import": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.25.9.tgz", + "integrity": "sha512-GCggjexbmSLaFhqsojeugBpeaRIgWNTcgKVq/0qIteFEqY2A+b9QidYadrWlnbWQUrW5fn+mCvf3tr7OeBFTyg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-exponentiation-operator": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.25.9.tgz", + "integrity": "sha512-KRhdhlVk2nObA5AYa7QMgTMTVJdfHprfpAk4DjZVtllqRg9qarilstTKEhpVjyt+Npi8ThRyiV8176Am3CodPA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-export-namespace-from": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.25.9.tgz", + "integrity": "sha512-2NsEz+CxzJIVOPx2o9UsW1rXLqtChtLoVnwYHHiB04wS5sgn7mrV45fWMBX0Kk+ub9uXytVYfNP2HjbVbCB3Ww==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-flow-strip-types": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.25.9.tgz", + "integrity": "sha512-/VVukELzPDdci7UUsWQaSkhgnjIWXnIyRpM02ldxaVoFK96c41So8JcKT3m0gYjyv7j5FNPGS5vfELrWalkbDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/plugin-syntax-flow": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-for-of": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.25.9.tgz", + "integrity": "sha512-LqHxduHoaGELJl2uhImHwRQudhCM50pT46rIBNvtT/Oql3nqiS3wOwP+5ten7NpYSXrrVLgtZU3DZmPtWZo16A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-function-name": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.25.9.tgz", + "integrity": "sha512-8lP+Yxjv14Vc5MuWBpJsoUCd3hD6V9DgBon2FVYL4jJgbnVQ9fTgYmonchzZJOVNgzEgbxp4OwAf6xz6M/14XA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-compilation-targets": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/traverse": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-json-strings": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.25.9.tgz", + "integrity": "sha512-xoTMk0WXceiiIvsaquQQUaLLXSW1KJ159KP87VilruQm0LNNGxWzahxSS6T6i4Zg3ezp4vA4zuwiNUR53qmQAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-literals": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.25.9.tgz", + "integrity": "sha512-9N7+2lFziW8W9pBl2TzaNht3+pgMIRP74zizeCSrtnSKVdUl8mAjjOP2OOVQAfZ881P2cNjDj1uAMEdeD50nuQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-logical-assignment-operators": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.25.9.tgz", + "integrity": "sha512-wI4wRAzGko551Y8eVf6iOY9EouIDTtPb0ByZx+ktDGHwv6bHFimrgJM/2T021txPZ2s4c7bqvHbd+vXG6K948Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-member-expression-literals": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.25.9.tgz", + "integrity": "sha512-PYazBVfofCQkkMzh2P6IdIUaCEWni3iYEerAsRWuVd8+jlM1S9S9cz1dF9hIzyoZ8IA3+OwVYIp9v9e+GbgZhA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-amd": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.25.9.tgz", + "integrity": "sha512-g5T11tnI36jVClQlMlt4qKDLlWnG5pP9CSM4GhdRciTNMRgkfpo5cR6b4rGIOYPgRRuFAvwjPQ/Yk+ql4dyhbw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-commonjs": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.25.9.tgz", + "integrity": "sha512-dwh2Ol1jWwL2MgkCzUSOvfmKElqQcuswAZypBSUsScMXvgdT8Ekq5YA6TtqpTVWH+4903NmboMuH1o9i8Rxlyg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-simple-access": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-systemjs": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.25.9.tgz", + "integrity": "sha512-hyss7iIlH/zLHaehT+xwiymtPOpsiwIIRlCAOwBB04ta5Tt+lNItADdlXw3jAWZ96VJ2jlhl/c+PNIQPKNfvcA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9", + "@babel/traverse": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-umd": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.25.9.tgz", + "integrity": "sha512-bS9MVObUgE7ww36HEfwe6g9WakQ0KF07mQF74uuXdkoziUPfKyu/nIm663kz//e5O1nPInPFx36z7WJmJ4yNEw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.25.9.tgz", + "integrity": "sha512-oqB6WHdKTGl3q/ItQhpLSnWWOpjUJLsOCLVyeFgeTktkBSCiurvPOsyt93gibI9CmuKvTUEtWmG5VhZD+5T/KA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-new-target": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.25.9.tgz", + "integrity": "sha512-U/3p8X1yCSoKyUj2eOBIx3FOn6pElFOKvAAGf8HTtItuPyB+ZeOqfn+mvTtg9ZlOAjsPdK3ayQEjqHjU/yLeVQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.25.9.tgz", + "integrity": "sha512-ENfftpLZw5EItALAD4WsY/KUWvhUlZndm5GC7G3evUsVeSJB6p0pBeLQUnRnBCBx7zV0RKQjR9kCuwrsIrjWog==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-numeric-separator": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.25.9.tgz", + "integrity": "sha512-TlprrJ1GBZ3r6s96Yq8gEQv82s8/5HnCVHtEJScUj90thHQbwe+E5MLhi2bbNHBEJuzrvltXSru+BUxHDoog7Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-rest-spread": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.25.9.tgz", + "integrity": "sha512-fSaXafEE9CVHPweLYw4J0emp1t8zYTXyzN3UuG+lylqkvYd7RMrsOQ8TYx5RF231be0vqtFC6jnx3UmpJmKBYg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-compilation-targets": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/plugin-transform-parameters": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-super": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.25.9.tgz", + "integrity": "sha512-Kj/Gh+Rw2RNLbCK1VAWj2U48yxxqL2x0k10nPtSdRa0O2xnHXalD0s+o1A6a0W43gJ00ANo38jxkQreckOzv5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-replace-supers": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-optional-catch-binding": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.25.9.tgz", + "integrity": "sha512-qM/6m6hQZzDcZF3onzIhZeDHDO43bkNNlOX0i8n3lR6zLbu0GN2d8qfM/IERJZYauhAHSLHy39NF0Ctdvcid7g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-optional-chaining": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.25.9.tgz", + "integrity": "sha512-6AvV0FsLULbpnXeBjrY4dmWF8F7gf8QnvTEoO/wX/5xm/xE1Xo8oPuD3MPS+KS9f9XBEAWN7X1aWr4z9HdOr7A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-parameters": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.25.9.tgz", + "integrity": "sha512-wzz6MKwpnshBAiRmn4jR8LYz/g8Ksg0o80XmwZDlordjwEk9SxBzTWC7F5ef1jhbrbOW2DJ5J6ayRukrJmnr0g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-methods": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.25.9.tgz", + "integrity": "sha512-D/JUozNpQLAPUVusvqMxyvjzllRaF8/nSrP1s2YGQT/W4LHK4xxsMcHjhOGTS01mp9Hda8nswb+FblLdJornQw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-property-in-object": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.25.9.tgz", + "integrity": "sha512-Evf3kcMqzXA3xfYJmZ9Pg1OvKdtqsDMSWBDzZOPLvHiTt36E75jLDQo5w1gtRU95Q4E5PDttrTf25Fw8d/uWLw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-create-class-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-property-literals": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.25.9.tgz", + "integrity": "sha512-IvIUeV5KrS/VPavfSM/Iu+RE6llrHrYIKY1yfCzyO/lMXHQ+p7uGhonmGVisv6tSBSVgWzMBohTcvkC9vQcQFA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.25.9.tgz", + "integrity": "sha512-s5XwpQYCqGerXl+Pu6VDL3x0j2d82eiV77UJ8a2mDHAW7j9SWRqQ2y1fNo1Z74CdcYipl5Z41zvjj4Nfzq36rw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-module-imports": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/plugin-syntax-jsx": "^7.25.9", + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-regenerator": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.25.9.tgz", + "integrity": "sha512-vwDcDNsgMPDGP0nMqzahDWE5/MLcX8sv96+wfX7as7LoF/kr97Bo/7fI00lXY4wUXYfVmwIIyG80fGZ1uvt2qg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9", + "regenerator-transform": "^0.15.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-regexp-modifiers": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regexp-modifiers/-/plugin-transform-regexp-modifiers-7.26.0.tgz", + "integrity": "sha512-vN6saax7lrA2yA/Pak3sCxuD6F5InBjn9IcrIKQPjpsLvuHYLVroTxjdlVRHjjBWxKOqIwpTXDkOssYT4BFdRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-reserved-words": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.25.9.tgz", + "integrity": "sha512-7DL7DKYjn5Su++4RXu8puKZm2XBPHyjWLUidaPEkCUBbE7IPcsrkRHggAOOKydH1dASWdcUBxrkOGNxUv5P3Jg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-shorthand-properties": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.25.9.tgz", + "integrity": "sha512-MUv6t0FhO5qHnS/W8XCbHmiRWOphNufpE1IVxhK5kuN3Td9FT1x4rx4K42s3RYdMXCXpfWkGSbCSd0Z64xA7Ng==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-spread": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.25.9.tgz", + "integrity": "sha512-oNknIB0TbURU5pqJFVbOOFspVlrpVwo2H1+HUIsVDvp5VauGGDP1ZEvO8Nn5xyMEs3dakajOxlmkNW7kNgSm6A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-sticky-regex": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.25.9.tgz", + "integrity": "sha512-WqBUSgeVwucYDP9U/xNRQam7xV8W5Zf+6Eo7T2SRVUFlhRiMNFdFz58u0KZmCVVqs2i7SHgpRnAhzRNmKfi2uA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-template-literals": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.25.9.tgz", + "integrity": "sha512-o97AE4syN71M/lxrCtQByzphAdlYluKPDBzDVzMmfCobUjjhAryZV0AIpRPrxN0eAkxXO6ZLEScmt+PNhj2OTw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typeof-symbol": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.25.9.tgz", + "integrity": "sha512-v61XqUMiueJROUv66BVIOi0Fv/CUuZuZMl5NkRoCVxLAnMexZ0A3kMe7vvZ0nulxMuMp0Mk6S5hNh48yki08ZA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-escapes": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.25.9.tgz", + "integrity": "sha512-s5EDrE6bW97LtxOcGj1Khcx5AaXwiMmi4toFWRDP9/y0Woo6pXC+iyPu/KuhKtfSrNFd7jJB+/fkOtZy6aIC6Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-property-regex": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.25.9.tgz", + "integrity": "sha512-Jt2d8Ga+QwRluxRQ307Vlxa6dMrYEMZCgGxoPR8V52rxPyldHu3hdlHspxaqYmE7oID5+kB+UKUB/eWS+DkkWg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-regex": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.25.9.tgz", + "integrity": "sha512-yoxstj7Rg9dlNn9UQxzk4fcNivwv4nUYz7fYXBaKxvw/lnmPuOm/ikoELygbYq68Bls3D/D+NBPHiLwZdZZ4HA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-sets-regex": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.25.9.tgz", + "integrity": "sha512-8BYqO3GeVNHtx69fdPshN3fnzUNLrWdHhk/icSwigksJGczKSizZ+Z6SBCxTs723Fr5VSNorTIK7a+R2tISvwQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/preset-env": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.26.0.tgz", + "integrity": "sha512-H84Fxq0CQJNdPFT2DrfnylZ3cf5K43rGfWK4LJGPpjKHiZlk0/RzwEus3PDDZZg+/Er7lCA03MVacueUuXdzfw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.26.0", + "@babel/helper-compilation-targets": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-validator-option": "^7.25.9", + "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.25.9", + "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.25.9", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.25.9", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.25.9", + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.25.9", + "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", + "@babel/plugin-syntax-import-assertions": "^7.26.0", + "@babel/plugin-syntax-import-attributes": "^7.26.0", + "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", + "@babel/plugin-transform-arrow-functions": "^7.25.9", + "@babel/plugin-transform-async-generator-functions": "^7.25.9", + "@babel/plugin-transform-async-to-generator": "^7.25.9", + "@babel/plugin-transform-block-scoped-functions": "^7.25.9", + "@babel/plugin-transform-block-scoping": "^7.25.9", + "@babel/plugin-transform-class-properties": "^7.25.9", + "@babel/plugin-transform-class-static-block": "^7.26.0", + "@babel/plugin-transform-classes": "^7.25.9", + "@babel/plugin-transform-computed-properties": "^7.25.9", + "@babel/plugin-transform-destructuring": "^7.25.9", + "@babel/plugin-transform-dotall-regex": "^7.25.9", + "@babel/plugin-transform-duplicate-keys": "^7.25.9", + "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.25.9", + "@babel/plugin-transform-dynamic-import": "^7.25.9", + "@babel/plugin-transform-exponentiation-operator": "^7.25.9", + "@babel/plugin-transform-export-namespace-from": "^7.25.9", + "@babel/plugin-transform-for-of": "^7.25.9", + "@babel/plugin-transform-function-name": "^7.25.9", + "@babel/plugin-transform-json-strings": "^7.25.9", + "@babel/plugin-transform-literals": "^7.25.9", + "@babel/plugin-transform-logical-assignment-operators": "^7.25.9", + "@babel/plugin-transform-member-expression-literals": "^7.25.9", + "@babel/plugin-transform-modules-amd": "^7.25.9", + "@babel/plugin-transform-modules-commonjs": "^7.25.9", + "@babel/plugin-transform-modules-systemjs": "^7.25.9", + "@babel/plugin-transform-modules-umd": "^7.25.9", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.25.9", + "@babel/plugin-transform-new-target": "^7.25.9", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.25.9", + "@babel/plugin-transform-numeric-separator": "^7.25.9", + "@babel/plugin-transform-object-rest-spread": "^7.25.9", + "@babel/plugin-transform-object-super": "^7.25.9", + "@babel/plugin-transform-optional-catch-binding": "^7.25.9", + "@babel/plugin-transform-optional-chaining": "^7.25.9", + "@babel/plugin-transform-parameters": "^7.25.9", + "@babel/plugin-transform-private-methods": "^7.25.9", + "@babel/plugin-transform-private-property-in-object": "^7.25.9", + "@babel/plugin-transform-property-literals": "^7.25.9", + "@babel/plugin-transform-regenerator": "^7.25.9", + "@babel/plugin-transform-regexp-modifiers": "^7.26.0", + "@babel/plugin-transform-reserved-words": "^7.25.9", + "@babel/plugin-transform-shorthand-properties": "^7.25.9", + "@babel/plugin-transform-spread": "^7.25.9", + "@babel/plugin-transform-sticky-regex": "^7.25.9", + "@babel/plugin-transform-template-literals": "^7.25.9", + "@babel/plugin-transform-typeof-symbol": "^7.25.9", + "@babel/plugin-transform-unicode-escapes": "^7.25.9", + "@babel/plugin-transform-unicode-property-regex": "^7.25.9", + "@babel/plugin-transform-unicode-regex": "^7.25.9", + "@babel/plugin-transform-unicode-sets-regex": "^7.25.9", + "@babel/preset-modules": "0.1.6-no-external-plugins", + "babel-plugin-polyfill-corejs2": "^0.4.10", + "babel-plugin-polyfill-corejs3": "^0.10.6", + "babel-plugin-polyfill-regenerator": "^0.6.1", + "core-js-compat": "^3.38.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-env/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/preset-modules": { + "version": "0.1.6-no-external-plugins", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", + "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/@babel/runtime": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.26.0.tgz", + "integrity": "sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw==", + "dev": true, + "license": "MIT", + "dependencies": { + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.9.tgz", + "integrity": "sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.25.9", + "@babel/parser": "^7.25.9", + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.9.tgz", + "integrity": "sha512-ZCuvfwOwlz/bawvAuvcj8rrithP2/N55Tzz342AkTvq4qaWbGfmCk/tKhNaV2cthijKrPAA8SRJV5WWe7IBMJw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.25.9", + "@babel/generator": "^7.25.9", + "@babel/parser": "^7.25.9", + "@babel/template": "^7.25.9", + "@babel/types": "^7.25.9", + "debug": "^4.3.1", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse/node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@babel/traverse/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@babel/types": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.0.tgz", + "integrity": "sha512-Z/yiTPj+lDVnF7lWeKCIJzaIkI0vYO87dMpZ4bg4TDrFe4XXLFWL1TbXU27gBP3QccxV9mZICCrnjnYlJjXHOA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@emnapi/runtime": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.2.0.tgz", + "integrity": "sha512-bV21/9LQmcQeCPEg3BDFtvwL6cwiTMksYNWQQ4KOxCZikEGalWtenoZ0wCiukJINlGCIi2KXx01g4FoH/LxpzQ==", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/runtime/node_modules/tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", + "optional": true + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.23.1.tgz", + "integrity": "sha512-6VhYk1diRqrhBAqpJEdjASR/+WVRtfjpqKuNw11cLiaWpAT/Uu+nokB+UJnevzy/P9C/ty6AOe0dwueMrGh/iQ==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.23.1.tgz", + "integrity": "sha512-uz6/tEy2IFm9RYOyvKl88zdzZfwEfKZmnX9Cj1BHjeSGNuGLuMD1kR8y5bteYmwqKm1tj8m4cb/aKEorr6fHWQ==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.23.1.tgz", + "integrity": "sha512-xw50ipykXcLstLeWH7WRdQuysJqejuAGPd30vd1i5zSyKK3WE+ijzHmLKxdiCMtH1pHz78rOg0BKSYOSB/2Khw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.23.1.tgz", + "integrity": "sha512-nlN9B69St9BwUoB+jkyU090bru8L0NA3yFvAd7k8dNsVH8bi9a8cUAUSEcEEgTp2z3dbEDGJGfP6VUnkQnlReg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.23.1.tgz", + "integrity": "sha512-YsS2e3Wtgnw7Wq53XXBLcV6JhRsEq8hkfg91ESVadIrzr9wO6jJDMZnCQbHm1Guc5t/CdDiFSSfWP58FNuvT3Q==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.23.1.tgz", + "integrity": "sha512-aClqdgTDVPSEGgoCS8QDG37Gu8yc9lTHNAQlsztQ6ENetKEO//b8y31MMu2ZaPbn4kVsIABzVLXYLhCGekGDqw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.23.1.tgz", + "integrity": "sha512-h1k6yS8/pN/NHlMl5+v4XPfikhJulk4G+tKGFIOwURBSFzE8bixw1ebjluLOjfwtLqY0kewfjLSrO6tN2MgIhA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.23.1.tgz", + "integrity": "sha512-lK1eJeyk1ZX8UklqFd/3A60UuZ/6UVfGT2LuGo3Wp4/z7eRTRYY+0xOu2kpClP+vMTi9wKOfXi2vjUpO1Ro76g==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.23.1.tgz", + "integrity": "sha512-CXXkzgn+dXAPs3WBwE+Kvnrf4WECwBdfjfeYHpMeVxWE0EceB6vhWGShs6wi0IYEqMSIzdOF1XjQ/Mkm5d7ZdQ==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.23.1.tgz", + "integrity": "sha512-/93bf2yxencYDnItMYV/v116zff6UyTjo4EtEQjUBeGiVpMmffDNUyD9UN2zV+V3LRV3/on4xdZ26NKzn6754g==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.23.1.tgz", + "integrity": "sha512-VTN4EuOHwXEkXzX5nTvVY4s7E/Krz7COC8xkftbbKRYAl96vPiUssGkeMELQMOnLOJ8k3BY1+ZY52tttZnHcXQ==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.23.1.tgz", + "integrity": "sha512-Vx09LzEoBa5zDnieH8LSMRToj7ir/Jeq0Gu6qJ/1GcBq9GkfoEAoXvLiW1U9J1qE/Y/Oyaq33w5p2ZWrNNHNEw==", + "cpu": [ + "loong64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.23.1.tgz", + "integrity": "sha512-nrFzzMQ7W4WRLNUOU5dlWAqa6yVeI0P78WKGUo7lg2HShq/yx+UYkeNSE0SSfSure0SqgnsxPvmAUu/vu0E+3Q==", + "cpu": [ + "mips64el" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.23.1.tgz", + "integrity": "sha512-dKN8fgVqd0vUIjxuJI6P/9SSSe/mB9rvA98CSH2sJnlZ/OCZWO1DJvxj8jvKTfYUdGfcq2dDxoKaC6bHuTlgcw==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.23.1.tgz", + "integrity": "sha512-5AV4Pzp80fhHL83JM6LoA6pTQVWgB1HovMBsLQ9OZWLDqVY8MVobBXNSmAJi//Csh6tcY7e7Lny2Hg1tElMjIA==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.23.1.tgz", + "integrity": "sha512-9ygs73tuFCe6f6m/Tb+9LtYxWR4c9yg7zjt2cYkjDbDpV/xVn+68cQxMXCjUpYwEkze2RcU/rMnfIXNRFmSoDw==", + "cpu": [ + "s390x" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.23.1.tgz", + "integrity": "sha512-EV6+ovTsEXCPAp58g2dD68LxoP/wK5pRvgy0J/HxPGB009omFPv3Yet0HiaqvrIrgPTBuC6wCH1LTOY91EO5hQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.23.1.tgz", + "integrity": "sha512-aevEkCNu7KlPRpYLjwmdcuNz6bDFiE7Z8XC4CPqExjTvrHugh28QzUXVOZtiYghciKUacNktqxdpymplil1beA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.23.1.tgz", + "integrity": "sha512-3x37szhLexNA4bXhLrCC/LImN/YtWis6WXr1VESlfVtVeoFJBRINPJ3f0a/6LV8zpikqoUg4hyXw0sFBt5Cr+Q==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.23.1.tgz", + "integrity": "sha512-aY2gMmKmPhxfU+0EdnN+XNtGbjfQgwZj43k8G3fyrDM/UdZww6xrWxmDkuz2eCZchqVeABjV5BpildOrUbBTqA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.23.1.tgz", + "integrity": "sha512-RBRT2gqEl0IKQABT4XTj78tpk9v7ehp+mazn2HbUeZl1YMdaGAQqhapjGTCe7uw7y0frDi4gS0uHzhvpFuI1sA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.23.1.tgz", + "integrity": "sha512-4O+gPR5rEBe2FpKOVyiJ7wNDPA8nGzDuJ6gN4okSA1gEOYZ67N8JPk58tkWtdtPeLz7lBnY6I5L3jdsr3S+A6A==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.23.1.tgz", + "integrity": "sha512-BcaL0Vn6QwCwre3Y717nVHZbAa4UBEigzFm6VdsVdT/MbZ38xoj1X9HPkZhbmaBGUD1W8vxAfffbDe8bA6AKnQ==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.23.1.tgz", + "integrity": "sha512-BHpFFeslkWrXWyUPnbKm+xYYVYruCinGcftSBaa8zoF9hZO4BcSCFUvHVTtzpIY6YzUnYtuEhZ+C9iEXjxnasg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@gar/promisify": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", + "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==" + }, + "node_modules/@google-cloud/local-auth": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@google-cloud/local-auth/-/local-auth-2.1.1.tgz", + "integrity": "sha512-tOJ73TSyPxelUEVN2AdHVzFG857U5i3wZHMUGgm6wRtz9WN4O3D761eYORB9jXfIggA3+v5BUw+VIE5wAKHhkg==", + "license": "Apache-2.0", + "dependencies": { + "arrify": "^2.0.1", + "google-auth-library": "^8.0.2", + "open": "^7.0.3", + "server-destroy": "^1.0.1" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/@iarna/toml": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/@iarna/toml/-/toml-2.2.5.tgz", + "integrity": "sha512-trnsAYxU3xnS1gPHPyU961coFyLkh4gAD/0zQ5mymY4yOZ+CYvsPqUbOFSw0aDM4y0tV7tiFxL/1XfXPNC6IPg==" + }, + "node_modules/@img/sharp-darwin-arm64": { + "version": "0.33.4", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.33.4.tgz", + "integrity": "sha512-p0suNqXufJs9t3RqLBO6vvrgr5OhgbWp76s5gTRvdmxmuv9E1rcaqGUsl3l4mKVmXPkTkTErXediAui4x+8PSA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "glibc": ">=2.26", + "node": "^18.17.0 || ^20.3.0 || >=21.0.0", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0", + "yarn": ">=3.2.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-arm64": "1.0.2" + } + }, + "node_modules/@img/sharp-darwin-x64": { + "version": "0.33.4", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.33.4.tgz", + "integrity": "sha512-0l7yRObwtTi82Z6ebVI2PnHT8EB2NxBgpK2MiKJZJ7cz32R4lxd001ecMhzzsZig3Yv9oclvqqdV93jo9hy+Dw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "glibc": ">=2.26", + "node": "^18.17.0 || ^20.3.0 || >=21.0.0", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0", + "yarn": ">=3.2.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-x64": "1.0.2" + } + }, + "node_modules/@img/sharp-libvips-darwin-arm64": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.0.2.tgz", + "integrity": "sha512-tcK/41Rq8IKlSaKRCCAuuY3lDJjQnYIW1UXU1kxcEKrfL8WR7N6+rzNoOxoQRJWTAECuKwgAHnPvqXGN8XfkHA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "macos": ">=11", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0", + "yarn": ">=3.2.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-darwin-x64": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.0.2.tgz", + "integrity": "sha512-Ofw+7oaWa0HiiMiKWqqaZbaYV3/UGL2wAPeLuJTx+9cXpCRdvQhCLG0IH8YGwM0yGWGLpsF4Su9vM1o6aer+Fw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "macos": ">=10.13", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0", + "yarn": ">=3.2.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-arm": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.0.2.tgz", + "integrity": "sha512-iLWCvrKgeFoglQxdEwzu1eQV04o8YeYGFXtfWU26Zr2wWT3q3MTzC+QTCO3ZQfWd3doKHT4Pm2kRmLbupT+sZw==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "glibc": ">=2.28", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0", + "yarn": ">=3.2.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-arm64": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.0.2.tgz", + "integrity": "sha512-x7kCt3N00ofFmmkkdshwj3vGPCnmiDh7Gwnd4nUwZln2YjqPxV1NlTyZOvoDWdKQVDL911487HOueBvrpflagw==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "glibc": ">=2.26", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0", + "yarn": ">=3.2.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-s390x": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.0.2.tgz", + "integrity": "sha512-cmhQ1J4qVhfmS6szYW7RT+gLJq9dH2i4maq+qyXayUSn9/3iY2ZeWpbAgSpSVbV2E1JUL2Gg7pwnYQ1h8rQIog==", + "cpu": [ + "s390x" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "glibc": ">=2.28", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0", + "yarn": ">=3.2.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-x64": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.0.2.tgz", + "integrity": "sha512-E441q4Qdb+7yuyiADVi5J+44x8ctlrqn8XgkDTwr4qPJzWkaHwD489iZ4nGDgcuya4iMN3ULV6NwbhRZJ9Z7SQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "glibc": ">=2.26", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0", + "yarn": ">=3.2.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linuxmusl-arm64": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.0.2.tgz", + "integrity": "sha512-3CAkndNpYUrlDqkCM5qhksfE+qSIREVpyoeHIU6jd48SJZViAmznoQQLAv4hVXF7xyUB9zf+G++e2v1ABjCbEQ==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "musl": ">=1.2.2", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0", + "yarn": ">=3.2.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linuxmusl-x64": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.0.2.tgz", + "integrity": "sha512-VI94Q6khIHqHWNOh6LLdm9s2Ry4zdjWJwH56WoiJU7NTeDwyApdZZ8c+SADC8OH98KWNQXnE01UdJ9CSfZvwZw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "musl": ">=1.2.2", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0", + "yarn": ">=3.2.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-linux-arm": { + "version": "0.33.4", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.33.4.tgz", + "integrity": "sha512-RUgBD1c0+gCYZGCCe6mMdTiOFS0Zc/XrN0fYd6hISIKcDUbAW5NtSQW9g/powkrXYm6Vzwd6y+fqmExDuCdHNQ==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "glibc": ">=2.28", + "node": "^18.17.0 || ^20.3.0 || >=21.0.0", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0", + "yarn": ">=3.2.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm": "1.0.2" + } + }, + "node_modules/@img/sharp-linux-arm64": { + "version": "0.33.4", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.33.4.tgz", + "integrity": "sha512-2800clwVg1ZQtxwSoTlHvtm9ObgAax7V6MTAB/hDT945Tfyy3hVkmiHpeLPCKYqYR1Gcmv1uDZ3a4OFwkdBL7Q==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "glibc": ">=2.26", + "node": "^18.17.0 || ^20.3.0 || >=21.0.0", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0", + "yarn": ">=3.2.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm64": "1.0.2" + } + }, + "node_modules/@img/sharp-linux-s390x": { + "version": "0.33.4", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.33.4.tgz", + "integrity": "sha512-h3RAL3siQoyzSoH36tUeS0PDmb5wINKGYzcLB5C6DIiAn2F3udeFAum+gj8IbA/82+8RGCTn7XW8WTFnqag4tQ==", + "cpu": [ + "s390x" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "glibc": ">=2.31", + "node": "^18.17.0 || ^20.3.0 || >=21.0.0", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0", + "yarn": ">=3.2.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-s390x": "1.0.2" + } + }, + "node_modules/@img/sharp-linux-x64": { + "version": "0.33.4", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.33.4.tgz", + "integrity": "sha512-GoR++s0XW9DGVi8SUGQ/U4AeIzLdNjHka6jidVwapQ/JebGVQIpi52OdyxCNVRE++n1FCLzjDovJNozif7w/Aw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "glibc": ">=2.26", + "node": "^18.17.0 || ^20.3.0 || >=21.0.0", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0", + "yarn": ">=3.2.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-x64": "1.0.2" + } + }, + "node_modules/@img/sharp-linuxmusl-arm64": { + "version": "0.33.4", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.33.4.tgz", + "integrity": "sha512-nhr1yC3BlVrKDTl6cO12gTpXMl4ITBUZieehFvMntlCXFzH2bvKG76tBL2Y/OqhupZt81pR7R+Q5YhJxW0rGgQ==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "musl": ">=1.2.2", + "node": "^18.17.0 || ^20.3.0 || >=21.0.0", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0", + "yarn": ">=3.2.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-arm64": "1.0.2" + } + }, + "node_modules/@img/sharp-linuxmusl-x64": { + "version": "0.33.4", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.33.4.tgz", + "integrity": "sha512-uCPTku0zwqDmZEOi4ILyGdmW76tH7dm8kKlOIV1XC5cLyJ71ENAAqarOHQh0RLfpIpbV5KOpXzdU6XkJtS0daw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "musl": ">=1.2.2", + "node": "^18.17.0 || ^20.3.0 || >=21.0.0", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0", + "yarn": ">=3.2.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-x64": "1.0.2" + } + }, + "node_modules/@img/sharp-wasm32": { + "version": "0.33.4", + "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.33.4.tgz", + "integrity": "sha512-Bmmauh4sXUsUqkleQahpdNXKvo+wa1V9KhT2pDA4VJGKwnKMJXiSTGphn0gnJrlooda0QxCtXc6RX1XAU6hMnQ==", + "cpu": [ + "wasm32" + ], + "optional": true, + "dependencies": { + "@emnapi/runtime": "^1.1.1" + }, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0", + "yarn": ">=3.2.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-ia32": { + "version": "0.33.4", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.33.4.tgz", + "integrity": "sha512-99SJ91XzUhYHbx7uhK3+9Lf7+LjwMGQZMDlO/E/YVJ7Nc3lyDFZPGhjwiYdctoH2BOzW9+TnfqcaMKt0jHLdqw==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0", + "yarn": ">=3.2.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-x64": { + "version": "0.33.4", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.33.4.tgz", + "integrity": "sha512-3QLocdTRVIrFNye5YocZl+KKpYKP+fksi1QhmOArgx7GyhIbQp/WrJRu176jm8IxromS7RIkzMiMINVdBtC8Aw==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0", + "yarn": ">=3.2.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" + }, + "node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "license": "MIT", + "dependencies": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", + "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@jsep-plugin/assignment": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jsep-plugin/assignment/-/assignment-1.2.1.tgz", + "integrity": "sha512-gaHqbubTi29aZpVbBlECRpmdia+L5/lh2BwtIJTmtxdbecEyyX/ejAOg7eQDGNvGOUmPY7Z2Yxdy9ioyH/VJeA==", + "license": "MIT", + "engines": { + "node": ">= 10.16.0" + }, + "peerDependencies": { + "jsep": "^0.4.0||^1.0.0" + } + }, + "node_modules/@jsep-plugin/regex": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@jsep-plugin/regex/-/regex-1.0.3.tgz", + "integrity": "sha512-XfZgry4DwEZvSFtS/6Y+R48D7qJYJK6R9/yJFyUFHCIUMEEHuJ4X95TDgJp5QkmzfLYvapMPzskV5HpIDrREug==", + "license": "MIT", + "engines": { + "node": ">= 10.16.0" + }, + "peerDependencies": { + "jsep": "^0.4.0||^1.0.0" + } + }, + "node_modules/@mixmark-io/domino": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@mixmark-io/domino/-/domino-2.2.0.tgz", + "integrity": "sha512-Y28PR25bHXUg88kCV7nivXrP2Nj2RueZ3/l/jdx6J9f8J4nsEGcgX0Qe6lt7Pa+J79+kPiJU3LguR6O/6zrLOw==", + "license": "BSD-2-Clause" + }, + "node_modules/@mrmlnc/readdir-enhanced": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz", + "integrity": "sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-me-maybe": "^1.0.1", + "glob-to-regexp": "^0.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@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==", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@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==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@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==", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@npmcli/fs": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-3.1.1.tgz", + "integrity": "sha512-q9CRWjpHCMIh5sVyefoD1cA7PkvILqCZsnSOEUUivORLjxCO/Irmue2DprETiNgEqktDBZaM1Bi+jrarx1XdCg==", + "dependencies": { + "semver": "^7.3.5" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/fs/node_modules/semver": { + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", + "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@npmcli/move-file": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz", + "integrity": "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==", + "dependencies": { + "mkdirp": "^1.0.4", + "rimraf": "^3.0.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@npmcli/move-file/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@npmcli/move-file/node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@one-ini/wasm": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@one-ini/wasm/-/wasm-0.1.1.tgz", + "integrity": "sha512-XuySG1E38YScSJoMlqovLru4KTUNSjgVTIjyh7qMX6aNN5HY5Ct5LhRJdxO79JtTzKfzV/bnWpz+zquYrISsvw==" + }, + "node_modules/@parcel/fs": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@parcel/fs/-/fs-1.11.0.tgz", + "integrity": "sha512-86RyEqULbbVoeo8OLcv+LQ1Vq2PKBAvWTU9fCgALxuCTbbs5Ppcvll4Vr+Ko1AnmMzja/k++SzNAwJfeQXVlpA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@parcel/utils": "^1.11.0", + "mkdirp": "^0.5.1", + "rimraf": "^2.6.2" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/@parcel/logger": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@parcel/logger/-/logger-1.11.1.tgz", + "integrity": "sha512-9NF3M6UVeP2udOBDILuoEHd8VrF4vQqoWHEafymO1pfSoOMfxrSJZw1MfyAAIUN/IFp9qjcpDCUbDZB+ioVevA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@parcel/workers": "^1.11.0", + "chalk": "^2.1.0", + "grapheme-breaker": "^0.3.2", + "ora": "^2.1.0", + "strip-ansi": "^4.0.0" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/@parcel/logger/node_modules/ansi-regex": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", + "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/@parcel/logger/node_modules/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==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@parcel/utils": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@parcel/utils/-/utils-1.11.0.tgz", + "integrity": "sha512-cA3p4jTlaMeOtAKR/6AadanOPvKeg8VwgnHhOyfi0yClD0TZS/hi9xu12w4EzA/8NtHu0g6o4RDfcNjqN8l1AQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/@parcel/watcher": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-1.12.1.tgz", + "integrity": "sha512-od+uCtCxC/KoNQAIE1vWx1YTyKYY+7CTrxBJPRh3cDWw/C0tCtlBMVlrbplscGoEpt6B27KhJDCv82PBxOERNA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@parcel/utils": "^1.11.0", + "chokidar": "^2.1.5" + } + }, + "node_modules/@parcel/workers": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@parcel/workers/-/workers-1.11.0.tgz", + "integrity": "sha512-USSjRAAQYsZFlv43FUPdD+jEGML5/8oLF0rUzPQTtK4q9kvaXr49F5ZplyLz5lox78cLZ0TxN2bIDQ1xhOkulQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@parcel/utils": "^1.11.0", + "physical-cpu-count": "^2.0.0" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@plastichub/core": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/@plastichub/core/-/core-0.2.6.tgz", + "integrity": "sha512-DF2IUZu6cw8+iVnFv2BFvd+s/7DYfrfXh7o3Uhg0IjbZ/QOIXY21URarnMQoTl9NEwUKN8ZZIHJmOIulT8helg==", + "dependencies": { + "deepmerge": "^4.3.1", + "tslog": "^3.3.3" + } + }, + "node_modules/@plastichub/fs": { + "version": "0.13.39", + "resolved": "https://registry.npmjs.org/@plastichub/fs/-/fs-0.13.39.tgz", + "integrity": "sha512-Q96zN5LAlTmtj6gIbHbVM0erp2NgP+P4izRzdhqnMz/WopAvD7ZJxjQ/J44e67R6WKQuvcxt/eXPNaFBB5ehlg==", + "dependencies": { + "@plastichub/core": "^0.2.1", + "@types/denodeify": "^1.2.31", + "@types/glob": "^8.1.0", + "@types/minimatch": "^3.0.3", + "@types/node": "^14.18.63", + "denodeify": "^1.2.1", + "errno": "^0.1.4", + "glob": "^10.4.1", + "mime": "^2.0.3", + "minimatch": "^3.0.4", + "mkdirp": "^0.5.1", + "progress-stream": "^1.2.0", + "q": "^1.4.1", + "rimraf": "^2.7.1", + "throttle": "^1.0.3", + "trash": "^4.3.0", + "typescript": "^4.0.3", + "write-file-atomic": "^1.3.1", + "yargs": "^17.7.2" + }, + "engines": { + "node": ">= 8.0.0" + } + }, + "node_modules/@plastichub/fs/node_modules/@types/node": { + "version": "14.18.63", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.63.tgz", + "integrity": "sha512-fAtCfv4jJg+ExtXhvCkCqUKZ+4ok/JQk01qDKhL5BDDoS3AxKXhV5/MAVUZyQnSEd2GT92fkgZl0pz0Q0AzcIQ==" + }, + "node_modules/@plastichub/fs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/@plastichub/fs/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@plastichub/fs/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@plastichub/fs/node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@plastichub/fs/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@plastichub/fs/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/@plastichub/fs/node_modules/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==" + }, + "node_modules/@plastichub/fs/node_modules/glob": { + "version": "10.4.1", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.1.tgz", + "integrity": "sha512-2jelhlq3E4ho74ZyVLN03oKdAZVUa6UDZzFLVH1H7dnoax+y9qyaq8zBkfDIggjniU19z0wU18y16jMB2eyVIw==", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@plastichub/fs/node_modules/glob/node_modules/minimatch": { + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", + "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@plastichub/fs/node_modules/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", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/@plastichub/fs/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/@plastichub/fs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@plastichub/fs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@plastichub/fs/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/@plastichub/fs/node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "engines": { + "node": ">=10" + } + }, + "node_modules/@plastichub/fs/node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@plastichub/fs/node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "engines": { + "node": ">=12" + } + }, + "node_modules/@plastichub/osr-ai": { + "resolved": "../osr-ai", + "link": true + }, + "node_modules/@plastichub/osr-cache": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@plastichub/osr-cache/-/osr-cache-0.3.9.tgz", + "integrity": "sha512-D9YRGNIa9ffaDNCjUZs3jYk5+eESySYoBbjXyRvEVsgeJPX5O+qQaxlsHACo+BUWum9sYiNYiCpBVHPMaEihnQ==", + "dependencies": { + "@plastichub/core": "^0.2.0", + "@plastichub/fs": "^0.13.32", + "@plastichub/osr-cli-commons": "^0.2.3", + "@types/cacache": "^15.0.1", + "@types/node": "^14.17.5", + "@types/yargs": "^17.0.2", + "cacache": "^17.0.3", + "chalk": "^2.4.1", + "convert-units": "^2.3.4", + "env-var": "^7.0.1", + "md5": "^2.3.0", + "typescript": "^4.3.5", + "yargs": "^14.2.3", + "yargs-parser": "^15.0.3" + }, + "bin": { + "osr-cache": "main.js" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@plastichub/osr-cache/node_modules/@npmcli/move-file": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-2.0.1.tgz", + "integrity": "sha512-mJd2Z5TjYWq/ttPLLGqArdtnC74J6bOzg4rMDnN+p1xTacZ2yPRCk2y0oSWQtygLR9YVQXgOcONrwtnk3JupxQ==", + "deprecated": "This functionality has been moved to @npmcli/fs", + "dependencies": { + "mkdirp": "^1.0.4", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/@plastichub/osr-cache/node_modules/@plastichub/osr-cli-commons": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/@plastichub/osr-cli-commons/-/osr-cli-commons-0.2.9.tgz", + "integrity": "sha512-dAR0kYH6Y8vBrIIXkMldzSdugFfRYU/FgnyNuCY6iR2Wh8tqCGZQDJ/sZwuvk1OaLfGj9+ejAb1iHveMjKB0zQ==", + "dependencies": { + "@plastichub/core": "^0.2.0", + "@plastichub/fs": "^0.13.30", + "@plastichub/osr-commons": "^0.1.6", + "@types/cacache": "^15.0.1", + "@types/node": "^14.17.5", + "@types/yargs": "^17.0.2", + "cacache": "^16.1.2", + "chalk": "^2.4.1", + "convert-units": "^2.3.4", + "cryptr": "^6.0.3", + "env-var": "^7.1.1", + "fast-glob": "^3.2.11", + "glob-base": "^0.3.0", + "is-glob": "^4.0.3", + "parse-glob": "^3.0.4", + "rage-edit": "^1.2.0", + "typescript": "^4.3.5", + "yargs": "^17.5.1" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@plastichub/osr-cache/node_modules/@plastichub/osr-cli-commons/node_modules/@npmcli/fs": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-2.1.2.tgz", + "integrity": "sha512-yOJKRvohFOaLqipNtwYB9WugyZKhC/DZC4VYPmpaCzDBrA8YpK3qHZ8/HGscMnE4GqbkLNuVcCnxkeQEdGt6LQ==", + "dependencies": { + "@gar/promisify": "^1.1.3", + "semver": "^7.3.5" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/@plastichub/osr-cache/node_modules/@plastichub/osr-cli-commons/node_modules/cacache": { + "version": "16.1.3", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-16.1.3.tgz", + "integrity": "sha512-/+Emcj9DAXxX4cwlLmRI9c166RuL3w30zp4R7Joiv2cQTtTtA+jeuCAjH3ZlGnYS3tKENSrKhAzVVP9GVyzeYQ==", + "dependencies": { + "@npmcli/fs": "^2.1.0", + "@npmcli/move-file": "^2.0.0", + "chownr": "^2.0.0", + "fs-minipass": "^2.1.0", + "glob": "^8.0.1", + "infer-owner": "^1.0.4", + "lru-cache": "^7.7.1", + "minipass": "^3.1.6", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "mkdirp": "^1.0.4", + "p-map": "^4.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^3.0.2", + "ssri": "^9.0.0", + "tar": "^6.1.11", + "unique-filename": "^2.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/@plastichub/osr-cache/node_modules/@plastichub/osr-cli-commons/node_modules/fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@plastichub/osr-cache/node_modules/@plastichub/osr-cli-commons/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@plastichub/osr-cache/node_modules/@plastichub/osr-cli-commons/node_modules/ssri": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-9.0.1.tgz", + "integrity": "sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q==", + "dependencies": { + "minipass": "^3.1.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/@plastichub/osr-cache/node_modules/@plastichub/osr-cli-commons/node_modules/unique-filename": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-2.0.1.tgz", + "integrity": "sha512-ODWHtkkdx3IAR+veKxFV+VBkUMcN+FaqzUUd7IZzt+0zhDZFPFxhlqwPF3YQvMHx1TD0tdgYl+kuPnJ8E6ql7A==", + "dependencies": { + "unique-slug": "^3.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/@plastichub/osr-cache/node_modules/@plastichub/osr-cli-commons/node_modules/unique-slug": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-3.0.0.tgz", + "integrity": "sha512-8EyMynh679x/0gqE9fT9oilG+qEt+ibFyqjuVTsZn1+CMxH+XLlpvr2UZx4nVcCwTpx81nICr2JQFkM+HPLq4w==", + "dependencies": { + "imurmurhash": "^0.1.4" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/@plastichub/osr-cache/node_modules/@plastichub/osr-cli-commons/node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@plastichub/osr-cache/node_modules/@plastichub/osr-cli-commons/node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "engines": { + "node": ">=12" + } + }, + "node_modules/@plastichub/osr-cache/node_modules/@plastichub/osr-commons": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/@plastichub/osr-commons/-/osr-commons-0.1.8.tgz", + "integrity": "sha512-wlsol/kSOtGZYRcTPPv3WMhtH5nWckFjv7mSfLrXPTKR9yBHn/j1ZTeUEI8qe0899VKJdtobH5KkkYMpmvnZCg==", + "dependencies": { + "@plastichub/core": "^0.2.0", + "@plastichub/fs": "^0.13.32", + "axios": "^0.27.2", + "chalk": "^2.4.1", + "convert-units": "^2.3.4", + "cryptr": "^6.0.3", + "env-var": "^7.1.1", + "filenamify": "^4.3.0", + "querystring": "^0.2.1", + "sanitize-filename": "^1.6.3", + "shell-escape": "^0.2.0", + "tslog": "^3.3.3", + "typescript": "^4.3.5", + "yargs": "^17.5.1" + }, + "bin": { + "osr-commons": "main.js" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@plastichub/osr-cache/node_modules/@plastichub/osr-commons/node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@plastichub/osr-cache/node_modules/@plastichub/osr-commons/node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "engines": { + "node": ">=12" + } + }, + "node_modules/@plastichub/osr-cache/node_modules/@types/node": { + "version": "14.18.63", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.63.tgz", + "integrity": "sha512-fAtCfv4jJg+ExtXhvCkCqUKZ+4ok/JQk01qDKhL5BDDoS3AxKXhV5/MAVUZyQnSEd2GT92fkgZl0pz0Q0AzcIQ==" + }, + "node_modules/@plastichub/osr-cache/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/@plastichub/osr-cache/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@plastichub/osr-cache/node_modules/axios": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.27.2.tgz", + "integrity": "sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==", + "dependencies": { + "follow-redirects": "^1.14.9", + "form-data": "^4.0.0" + } + }, + "node_modules/@plastichub/osr-cache/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@plastichub/osr-cache/node_modules/cacache": { + "version": "17.0.4", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-17.0.4.tgz", + "integrity": "sha512-Z/nL3gU+zTUjz5pCA5vVjYM8pmaw2kxM7JEiE0fv3w77Wj+sFbi70CrBruUWH0uNcEdvLDixFpgA2JM4F4DBjA==", + "dependencies": { + "@npmcli/fs": "^3.1.0", + "fs-minipass": "^3.0.0", + "glob": "^8.0.1", + "lru-cache": "^7.7.1", + "minipass": "^4.0.0", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "p-map": "^4.0.0", + "promise-inflight": "^1.0.1", + "ssri": "^10.0.0", + "tar": "^6.1.11", + "unique-filename": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@plastichub/osr-cache/node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@plastichub/osr-cache/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@plastichub/osr-cache/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/@plastichub/osr-cache/node_modules/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==" + }, + "node_modules/@plastichub/osr-cache/node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@plastichub/osr-cache/node_modules/fs-minipass": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.0.tgz", + "integrity": "sha512-EUojgQaSPy6sxcqcZgQv6TVF6jiKvurji3AxhAivs/Ep4O1UpS8TusaxpybfFHZ2skRhLqzk6WR8nqNYIMMDeA==", + "dependencies": { + "minipass": "^4.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@plastichub/osr-cache/node_modules/glob": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz", + "integrity": "sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ==", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@plastichub/osr-cache/node_modules/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", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/@plastichub/osr-cache/node_modules/lru-cache": { + "version": "7.14.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.14.1.tgz", + "integrity": "sha512-ysxwsnTKdAx96aTRdhDOCQfDgbHnt8SK0KY8SEjO0wHinhWOFTESbjVCMPbU1uGXg/ch4lifqx0wfjOawU2+WA==", + "engines": { + "node": ">=12" + } + }, + "node_modules/@plastichub/osr-cache/node_modules/minimatch": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.2.tgz", + "integrity": "sha512-bNH9mmM9qsJ2X4r2Nat1B//1dJVcn3+iBLa3IgqJ7EbGaDNepL9QSHOxN4ng33s52VMMhhIfgCYDk3C4ZmlDAg==", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@plastichub/osr-cache/node_modules/minipass": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-4.0.0.tgz", + "integrity": "sha512-g2Uuh2jEKoht+zvO6vJqXmYpflPqzRBT+Th2h01DKh5z7wbY/AZ2gCQ78cP70YoHPyFdY30YBV5WxgLOEwOykw==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@plastichub/osr-cache/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@plastichub/osr-cache/node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@plastichub/osr-cache/node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@plastichub/osr-cache/node_modules/rimraf/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@plastichub/osr-cache/node_modules/rimraf/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@plastichub/osr-cache/node_modules/rimraf/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/@plastichub/osr-cache/node_modules/semver": { + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", + "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@plastichub/osr-cache/node_modules/ssri": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.1.tgz", + "integrity": "sha512-WVy6di9DlPOeBWEjMScpNipeSX2jIZBGEn5Uuo8Q7aIuFEuDX0pw8RxcOjlD1TWP4obi24ki7m/13+nFpcbXrw==", + "dependencies": { + "minipass": "^4.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@plastichub/osr-cache/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@plastichub/osr-cache/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@plastichub/osr-cache/node_modules/unique-filename": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-3.0.0.tgz", + "integrity": "sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==", + "dependencies": { + "unique-slug": "^4.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@plastichub/osr-cache/node_modules/unique-slug": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-4.0.0.tgz", + "integrity": "sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==", + "dependencies": { + "imurmurhash": "^0.1.4" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@plastichub/osr-cache/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/@plastichub/osr-cache/node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "engines": { + "node": ">=10" + } + }, + "node_modules/@plastichub/osr-cache/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "node_modules/@plastichub/osr-commons": { + "resolved": "../osr-commons", + "link": true + }, + "node_modules/@plastichub/osr-i18n": { + "resolved": "../osr-i18n", + "link": true + }, + "node_modules/@plastichub/osr-log": { + "resolved": "../osr-log", + "link": true + }, + "node_modules/@putout/minify": { + "version": "4.7.2", + "resolved": "https://registry.npmjs.org/@putout/minify/-/minify-4.7.2.tgz", + "integrity": "sha512-9W1a5BIbnJoCgoZ9sRywj2IkakHTzLwHZRKm2hnV1JdcIwQQaF4ZT9jxFr5LSC/SsI0k18q6gBS7UrpTLLzQtA==", + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/@sindresorhus/df": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/df/-/df-2.1.0.tgz", + "integrity": "sha1-0gjPJ+BvC7R20U197M19cm6ao4k=", + "dependencies": { + "execa": "^0.2.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@sindresorhus/df/node_modules/execa": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/execa/-/execa-0.2.2.tgz", + "integrity": "sha1-4urUcsLDGq1vc/GslW7vReEjIMs=", + "dependencies": { + "cross-spawn-async": "^2.1.1", + "npm-run-path": "^1.0.0", + "object-assign": "^4.0.1", + "path-key": "^1.0.0", + "strip-eof": "^1.0.0" + }, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/@sindresorhus/df/node_modules/npm-run-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-1.0.0.tgz", + "integrity": "sha1-9cMr9ZX+ga6Sfa7FLoL4sACsPI8=", + "dependencies": { + "path-key": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@sindresorhus/df/node_modules/path-key": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-1.0.0.tgz", + "integrity": "sha1-XVPVeAGWRsDWiADbThRua9wqx68=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@swc/core": { + "version": "1.7.26", + "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.7.26.tgz", + "integrity": "sha512-f5uYFf+TmMQyYIoxkn/evWhNGuUzC730dFwAKGwBVHHVoPyak1/GvJUm6i1SKl+2Hrj9oN0i3WSoWWZ4pgI8lw==", + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "@swc/counter": "^0.1.3", + "@swc/types": "^0.1.12" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/swc" + }, + "optionalDependencies": { + "@swc/core-darwin-arm64": "1.7.26", + "@swc/core-darwin-x64": "1.7.26", + "@swc/core-linux-arm-gnueabihf": "1.7.26", + "@swc/core-linux-arm64-gnu": "1.7.26", + "@swc/core-linux-arm64-musl": "1.7.26", + "@swc/core-linux-x64-gnu": "1.7.26", + "@swc/core-linux-x64-musl": "1.7.26", + "@swc/core-win32-arm64-msvc": "1.7.26", + "@swc/core-win32-ia32-msvc": "1.7.26", + "@swc/core-win32-x64-msvc": "1.7.26" + }, + "peerDependencies": { + "@swc/helpers": "*" + }, + "peerDependenciesMeta": { + "@swc/helpers": { + "optional": true + } + } + }, + "node_modules/@swc/core-darwin-arm64": { + "version": "1.7.26", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.7.26.tgz", + "integrity": "sha512-FF3CRYTg6a7ZVW4yT9mesxoVVZTrcSWtmZhxKCYJX9brH4CS/7PRPjAKNk6kzWgWuRoglP7hkjQcd6EpMcZEAw==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-darwin-x64": { + "version": "1.7.26", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.7.26.tgz", + "integrity": "sha512-az3cibZdsay2HNKmc4bjf62QVukuiMRh5sfM5kHR/JMTrLyS6vSw7Ihs3UTkZjUxkLTT8ro54LI6sV6sUQUbLQ==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-arm-gnueabihf": { + "version": "1.7.26", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.7.26.tgz", + "integrity": "sha512-VYPFVJDO5zT5U3RpCdHE5v1gz4mmR8BfHecUZTmD2v1JeFY6fv9KArJUpjrHEEsjK/ucXkQFmJ0jaiWXmpOV9Q==", + "cpu": [ + "arm" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-arm64-gnu": { + "version": "1.7.26", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.7.26.tgz", + "integrity": "sha512-YKevOV7abpjcAzXrhsl+W48Z9mZvgoVs2eP5nY+uoMAdP2b3GxC0Df1Co0I90o2lkzO4jYBpTMcZlmUXLdXn+Q==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-arm64-musl": { + "version": "1.7.26", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.7.26.tgz", + "integrity": "sha512-3w8iZICMkQQON0uIcvz7+Q1MPOW6hJ4O5ETjA0LSP/tuKqx30hIniCGOgPDnv3UTMruLUnQbtBwVCZTBKR3Rkg==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-x64-gnu": { + "version": "1.7.26", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.7.26.tgz", + "integrity": "sha512-c+pp9Zkk2lqb06bNGkR2Looxrs7FtGDMA4/aHjZcCqATgp348hOKH5WPvNLBl+yPrISuWjbKDVn3NgAvfvpH4w==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-x64-musl": { + "version": "1.7.26", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.7.26.tgz", + "integrity": "sha512-PgtyfHBF6xG87dUSSdTJHwZ3/8vWZfNIXQV2GlwEpslrOkGqy+WaiiyE7Of7z9AvDILfBBBcJvJ/r8u980wAfQ==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-win32-arm64-msvc": { + "version": "1.7.26", + "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.7.26.tgz", + "integrity": "sha512-9TNXPIJqFynlAOrRD6tUQjMq7KApSklK3R/tXgIxc7Qx+lWu8hlDQ/kVPLpU7PWvMMwC/3hKBW+p5f+Tms1hmA==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-win32-ia32-msvc": { + "version": "1.7.26", + "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.7.26.tgz", + "integrity": "sha512-9YngxNcG3177GYdsTum4V98Re+TlCeJEP4kEwEg9EagT5s3YejYdKwVAkAsJszzkXuyRDdnHUpYbTrPG6FiXrQ==", + "cpu": [ + "ia32" + ], + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-win32-x64-msvc": { + "version": "1.7.26", + "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.7.26.tgz", + "integrity": "sha512-VR+hzg9XqucgLjXxA13MtV5O3C0bK0ywtLIBw/+a+O+Oc6mxFWHtdUeXDbIi5AiPbn0fjgVJMqYnyjGyyX8u0w==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/counter": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@swc/counter/-/counter-0.1.3.tgz", + "integrity": "sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==", + "license": "Apache-2.0" + }, + "node_modules/@swc/types": { + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/@swc/types/-/types-0.1.12.tgz", + "integrity": "sha512-wBJA+SdtkbFhHjTMYH+dEH1y4VpfGdAc2Kw/LK09i9bXd/K6j6PkDcFCEzb6iVfZMkPRrl/q0e3toqTAJdkIVA==", + "license": "Apache-2.0", + "dependencies": { + "@swc/counter": "^0.1.3" + } + }, + "node_modules/@tootallnate/once": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", + "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/@types/cacache": { + "version": "15.0.1", + "resolved": "https://registry.npmjs.org/@types/cacache/-/cacache-15.0.1.tgz", + "integrity": "sha512-JhL2GFJuHMx4RMg4z0XfXB4ZkKdyiOaOLpjoYMXcyKfrkF3IBXNZBj6/Peo9zX/7PPHyfI63NWVD589cI2YTzg==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/clean-css": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/@types/clean-css/-/clean-css-4.2.11.tgz", + "integrity": "sha512-Y8n81lQVTAfP2TOdtJJEsCoYl1AnOkqDqMvXb9/7pfgZZ7r8YrEyurrAvAoAjHOGXKRybay+5CsExqIH6liccw==", + "license": "MIT", + "dependencies": { + "@types/node": "*", + "source-map": "^0.6.0" + } + }, + "node_modules/@types/decompress": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/@types/decompress/-/decompress-4.2.4.tgz", + "integrity": "sha512-/C8kTMRTNiNuWGl5nEyKbPiMv6HA+0RbEXzFhFBEzASM6+oa4tJro9b8nj7eRlOFfuLdzUU+DS/GPDlvvzMOhA==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/denodeify": { + "version": "1.2.31", + "resolved": "https://registry.npmjs.org/@types/denodeify/-/denodeify-1.2.31.tgz", + "integrity": "sha512-Jgy3dvCyIxhNb5RstVJkubeHZifw8KJXca13ov8OO4IqhDLPRHiJJ6VArJbZZ4HuEMJEB83yCuABodNMlYylzQ==" + }, + "node_modules/@types/download": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/@types/download/-/download-8.0.1.tgz", + "integrity": "sha512-t5DjMD6Y1DxjXtEHl7Kt+nQn9rOmVLYD8p4Swrcc5QpgyqyqR2gXTIK6RwwMnNeFJ+ZIiIW789fQKzCrK7AOFA==", + "dependencies": { + "@types/decompress": "*", + "@types/got": "^8", + "@types/node": "*" + } + }, + "node_modules/@types/get-stdin": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@types/get-stdin/-/get-stdin-7.0.0.tgz", + "integrity": "sha512-kiDwIsKQvsLRvtBOnasij+6eChbCzcUT7OyVvrC5BEOE4QSKbpnwejEp0xND/9sIdOTfiu+BBl3zsB16MJ3Fww==", + "deprecated": "This is a stub types definition. get-stdin provides its own type definitions, so you do not need this installed.", + "dependencies": { + "get-stdin": "*" + } + }, + "node_modules/@types/glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-IO+MJPVhoqz+28h1qLAcBEH2+xHMK6MTyHJc7MTnnYb6wsoLR29POVGJ7LycmVXIqyy/4/2ShP5sUwTXuOwb/w==", + "dependencies": { + "@types/minimatch": "^5.1.2", + "@types/node": "*" + } + }, + "node_modules/@types/glob/node_modules/@types/minimatch": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.2.tgz", + "integrity": "sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==" + }, + "node_modules/@types/got": { + "version": "8.3.6", + "resolved": "https://registry.npmjs.org/@types/got/-/got-8.3.6.tgz", + "integrity": "sha512-nvLlj+831dhdm4LR2Ly+HTpdLyBaMynoOr6wpIxS19d/bPeHQxFU5XQ6Gp6ohBpxvCWZM1uHQIC2+ySRH1rGrQ==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/html-minifier-terser": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-7.0.2.tgz", + "integrity": "sha512-mm2HqV22l8lFQh4r2oSsOEVea+m0qqxEmwpc9kC1p/XzmjLWrReR9D/GRs8Pex2NX/imyEH9c5IU/7tMBQCHOA==", + "license": "MIT" + }, + "node_modules/@types/is-glob": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/is-glob/-/is-glob-4.0.2.tgz", + "integrity": "sha512-4j5G9Y5jljDSICQ1R2f/Rcyoj6DZmYGneny+p/cDkjep0rkqNg0W73Ty0bVjMUTZgLXHf8oiMjg1XC3CDwCz+g==" + }, + "node_modules/@types/js-beautify": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@types/js-beautify/-/js-beautify-1.13.2.tgz", + "integrity": "sha512-crV/441NhrynLIclg94i1wV6nX/6rU9ByUyn4muCrsL0HPd3nBzrt6kpQ9MQOB+HeYgLcRARteNJcbnYkp5OwA==" + }, + "node_modules/@types/jsonpath": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@types/jsonpath/-/jsonpath-0.2.0.tgz", + "integrity": "sha512-v7qlPA0VpKUlEdhghbDqRoKMxFB3h3Ch688TApBJ6v+XLDdvWCGLJIYiPKGZnS6MAOie+IorCfNYVHOPIHSWwQ==" + }, + "node_modules/@types/minify": { + "version": "9.1.4", + "resolved": "https://registry.npmjs.org/@types/minify/-/minify-9.1.4.tgz", + "integrity": "sha512-zrlLe1E5vKMkWcyaTNpgmuRceT3gyq7arehpUg6CDHmpgO6gT0eb3YHNWgM/kT/bNJcpFh0zV6zgnjY594jFBw==", + "license": "MIT", + "dependencies": { + "@types/clean-css": "*", + "@types/html-minifier-terser": "*", + "terser": "^5.3.2" + } + }, + "node_modules/@types/minimatch": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", + "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==" + }, + "node_modules/@types/moment": { + "version": "2.13.0", + "resolved": "https://registry.npmjs.org/@types/moment/-/moment-2.13.0.tgz", + "integrity": "sha1-YE69GJvDvDShVIaJQE5hoqSqyJY=", + "deprecated": "This is a stub types definition for Moment (https://github.com/moment/moment). Moment provides its own type definitions, so you don't need @types/moment installed!", + "dependencies": { + "moment": "*" + } + }, + "node_modules/@types/node": { + "version": "20.16.5", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.16.5.tgz", + "integrity": "sha512-VwYCweNo3ERajwy0IUlqqcyZ8/A7Zwa9ZP3MnENWcB11AejO+tLy3pu850goUW2FC/IJMdZUfKpX/yxL1gymCA==", + "license": "MIT", + "dependencies": { + "undici-types": "~6.19.2" + } + }, + "node_modules/@types/q": { + "version": "1.5.8", + "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.8.tgz", + "integrity": "sha512-hroOstUScF6zhIi+5+x0dzqrHA1EJi+Irri6b1fxolMTqqHIV/Cg77EtnQcZqZCu8hR3mX2BzIxN4/GzI68Kfw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/yargs": { + "version": "17.0.33", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.33.tgz", + "integrity": "sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==", + "license": "MIT", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@types/yargs-parser": { + "version": "20.2.1", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-20.2.1.tgz", + "integrity": "sha512-7tFImggNeNBVMsn0vLrpn1H1uPrUBdnARPTpZoitY37ZrdJREzf7I16tMrlK3hen349gr1NYh8CmZQa7CTG6Aw==" + }, + "node_modules/abab": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz", + "integrity": "sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==" + }, + "node_modules/abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" + }, + "node_modules/acorn": { + "version": "8.12.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", + "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==", + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-globals": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz", + "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", + "dependencies": { + "acorn": "^7.1.1", + "acorn-walk": "^7.1.1" + } + }, + "node_modules/acorn-globals/node_modules/acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-walk": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", + "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/agent-base/node_modules/debug": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/agent-base/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/alphanum-sort": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz", + "integrity": "sha512-0FcBfdcmaumGPQ0qPn7Q5qTgz/ooXgIyp1rf8ik5bGX8mpE2YHjC0P/eyQvxu1GURYQgq9ozf2mteQ5ZD9YiyQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/ansi-regex": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", + "engines": { + "node": ">=6" + } + }, + "node_modules/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==", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/ansi-to-html": { + "version": "0.6.15", + "resolved": "https://registry.npmjs.org/ansi-to-html/-/ansi-to-html-0.6.15.tgz", + "integrity": "sha512-28ijx2aHJGdzbs+O5SNQF65r6rrKYnkuwTYm8lZlChuoJ9P1vVzIpWO20sQTqTPDXYp6NFwk326vApTtLVFXpQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "entities": "^2.0.0" + }, + "bin": { + "ansi-to-html": "bin/ansi-to-html" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/ansi-to-html/node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "dev": true, + "license": "BSD-2-Clause", + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "dev": true, + "license": "ISC", + "dependencies": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + } + }, + "node_modules/anymatch/node_modules/braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "license": "MIT", + "dependencies": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/anymatch/node_modules/fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/anymatch/node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/anymatch/node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", + "dev": true, + "license": "MIT", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/anymatch/node_modules/is-number/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/anymatch/node_modules/micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "license": "MIT", + "dependencies": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/anymatch/node_modules/micromatch/node_modules/extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/anymatch/node_modules/normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "remove-trailing-separator": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/anymatch/node_modules/to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-buffer-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz", + "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.5", + "is-array-buffer": "^3.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-equal": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-equal/-/array-equal-1.0.2.tgz", + "integrity": "sha512-gUHx76KtnhEgB3HOuFYiCm3FIdEs6ocM2asHvNTkfu/Y09qQVrrVVaOKENmS2KkSaGoxgXNqC+ZVtR/n0MOkSA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/array-union": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", + "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", + "dependencies": { + "array-uniq": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-uniq": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", + "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array.prototype.reduce": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/array.prototype.reduce/-/array.prototype.reduce-1.0.7.tgz", + "integrity": "sha512-mzmiUCVwtiD4lgxYP8g7IYy8El8p2CSMePvIbTS7gchKir/L1fgJrk0yDKmAX6mnRQFKNADYIk8nNlTris5H1Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-array-method-boxes-properly": "^1.0.0", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "is-string": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz", + "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==", + "dev": true, + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "es-abstract": "^1.22.3", + "es-errors": "^1.2.1", + "get-intrinsic": "^1.2.3", + "is-array-buffer": "^3.0.4", + "is-shared-array-buffer": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/arrify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", + "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==", + "engines": { + "node": ">=8" + } + }, + "node_modules/asn1": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", + "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "safer-buffer": "~2.1.0" + } + }, + "node_modules/asn1.js": { + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", + "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", + "dev": true, + "license": "MIT", + "dependencies": { + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + } + }, + "node_modules/asn1.js/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true, + "license": "MIT" + }, + "node_modules/assert": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.1.tgz", + "integrity": "sha512-zzw1uCAgLbsKwBfFc8CX78DDg+xZeBksSO3vwVIDDN5i94eOrPsSSyiVhmsSABFDM/OcpE2aagCat9dnWQLG1A==", + "dev": true, + "license": "MIT", + "dependencies": { + "object.assign": "^4.1.4", + "util": "^0.10.4" + } + }, + "node_modules/assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/assert/node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", + "dev": true, + "license": "ISC" + }, + "node_modules/assert/node_modules/util": { + "version": "0.10.4", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz", + "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "2.0.3" + } + }, + "node_modules/assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/async-each": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.6.tgz", + "integrity": "sha512-c646jH1avxr+aVpndVMeAfYw7wAa6idufrlN3LPA4PmKS0QEGp6PIC9nwz0WQkkvBGAMEki3pFdtxaF39J9vvg==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "license": "MIT" + }, + "node_modules/async-limiter": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", + "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" + }, + "node_modules/atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", + "dev": true, + "license": "(MIT OR Apache-2.0)", + "bin": { + "atob": "bin/atob.js" + }, + "engines": { + "node": ">= 4.5.0" + } + }, + "node_modules/available-typed-arrays": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "dev": true, + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "*" + } + }, + "node_modules/aws4": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.13.2.tgz", + "integrity": "sha512-lHe62zvbTB5eEABUVi/AwVh0ZKY9rMMDhmm+eeyuuUQbQ3+J+fONVQOZyj+DdrvD4BY33uYniyRJ4UJIaSKAfw==", + "dev": true, + "license": "MIT" + }, + "node_modules/axios": { + "version": "0.21.4", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz", + "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==", + "dependencies": { + "follow-redirects": "^1.14.0" + } + }, + "node_modules/babel-plugin-polyfill-corejs2": { + "version": "0.4.11", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.11.tgz", + "integrity": "sha512-sMEJ27L0gRHShOh5G54uAAPaiCOygY/5ratXuiyb2G46FmlSpc9eFCzYVyDiPxfNbwzA7mYahmjQc5q+CZQ09Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.22.6", + "@babel/helper-define-polyfill-provider": "^0.6.2", + "semver": "^6.3.1" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.10.6", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.6.tgz", + "integrity": "sha512-b37+KR2i/khY5sKmWNVQAnitvquQbNdWy6lJdsr0kmquCKEEUgMKK4SboVM3HtfnZilfjr4MMQ7vY58FVWDtIA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.6.2", + "core-js-compat": "^3.38.0" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-polyfill-regenerator": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.2.tgz", + "integrity": "sha512-2R25rQZWP63nGwaAswvDazbPXfrM3HwVoBXK6HcqeKrSrL/JqcC/rDcf95l4r7LXLyxDXc8uQDa064GubtCABg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.6.2" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-runtime": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", + "integrity": "sha512-ITKNuq2wKlW1fJg9sSW52eepoYgZBggvOAHC0u/CYu/qxQ9EVzThCgR69BnSXLHjy2f7SY5zaQ4yt7H9ZVxY2g==", + "dev": true, + "license": "MIT", + "dependencies": { + "core-js": "^2.4.0", + "regenerator-runtime": "^0.11.0" + } + }, + "node_modules/babel-runtime/node_modules/regenerator-runtime": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", + "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==", + "dev": true, + "license": "MIT" + }, + "node_modules/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==", + "dev": true, + "license": "MIT", + "dependencies": { + "babel-runtime": "^6.26.0", + "esutils": "^2.0.2", + "lodash": "^4.17.4", + "to-fast-properties": "^1.0.3" + } + }, + "node_modules/babylon-walk": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/babylon-walk/-/babylon-walk-1.0.2.tgz", + "integrity": "sha512-/AcxC8CZ6YzmKNfiH3+XLjJDbhED3qxSrd4uFNvJ91pcsPuwMNXxfjwHxhiYOidhpis0BiBu/gupOdv2EYyglg==", + "dev": true, + "license": "MIT", + "dependencies": { + "babel-runtime": "^6.11.6", + "babel-types": "^6.15.0", + "lodash.clone": "^4.5.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "node_modules/base": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", + "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base/node_modules/define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "tweetnacl": "^0.14.3" + } + }, + "node_modules/bignumber.js": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.1.tgz", + "integrity": "sha512-IdZR9mh6ahOBv/hYGiXyVuyCetmGJhtYkqLBpTStdhEGjegpPlUawydyaF3pbIOFynJTpllEs+NP+CS9jKFLjA==", + "engines": { + "node": "*" + } + }, + "node_modules/binary-extensions": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", + "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "file-uri-to-path": "1.0.0" + } + }, + "node_modules/bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" + }, + "node_modules/bn.js": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==" + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/brfs": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/brfs/-/brfs-1.6.1.tgz", + "integrity": "sha512-OfZpABRQQf+Xsmju8XE9bDjs+uU4vLREGolP7bDgcpsI17QREyZ4Bl+2KLxxx1kCgA0fAIhKQBaBYh+PEcCqYQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "quote-stream": "^1.0.1", + "resolve": "^1.1.5", + "static-module": "^2.2.0", + "through2": "^2.0.0" + }, + "bin": { + "brfs": "bin/cmd.js" + } + }, + "node_modules/brfs/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/brfs/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "license": "MIT", + "dependencies": { + "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" + } + }, + "node_modules/brfs/node_modules/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==", + "dev": true, + "license": "MIT" + }, + "node_modules/brfs/node_modules/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==", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/brfs/node_modules/through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, + "node_modules/brfs/node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.4" + } + }, + "node_modules/brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==", + "dev": true, + "license": "MIT" + }, + "node_modules/browser-process-hrtime": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", + "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==" + }, + "node_modules/browserify-aes": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/browserify-cipher": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", + "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", + "dev": true, + "license": "MIT", + "dependencies": { + "browserify-aes": "^1.0.4", + "browserify-des": "^1.0.0", + "evp_bytestokey": "^1.0.0" + } + }, + "node_modules/browserify-des": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", + "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "cipher-base": "^1.0.1", + "des.js": "^1.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/browserify-rsa": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.1.tgz", + "integrity": "sha512-YBjSAiTqM04ZVei6sXighu679a3SqWORA3qZTEqZImnlkDIFtKc6pNutpjyZ8RJTjQtuYfeetkxM11GwoYXMIQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "bn.js": "^5.2.1", + "randombytes": "^2.1.0", + "safe-buffer": "^5.2.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/browserify-sign": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.3.tgz", + "integrity": "sha512-JWCZW6SKhfhjJxO8Tyiiy+XYB7cqd2S5/+WeYHsKdNKFlCBhKbblba1A/HN/90YwtxKc8tCErjffZl++UNmGiw==", + "dev": true, + "license": "ISC", + "dependencies": { + "bn.js": "^5.2.1", + "browserify-rsa": "^4.1.0", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "elliptic": "^6.5.5", + "hash-base": "~3.0", + "inherits": "^2.0.4", + "parse-asn1": "^5.1.7", + "readable-stream": "^2.3.8", + "safe-buffer": "^5.2.1" + }, + "engines": { + "node": ">= 0.12" + } + }, + "node_modules/browserify-sign/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/browserify-sign/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "license": "MIT", + "dependencies": { + "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" + } + }, + "node_modules/browserify-sign/node_modules/readable-stream/node_modules/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==", + "dev": true, + "license": "MIT" + }, + "node_modules/browserify-sign/node_modules/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==", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/browserify-sign/node_modules/string_decoder/node_modules/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==", + "dev": true, + "license": "MIT" + }, + "node_modules/browserify-zlib": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", + "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", + "dev": true, + "license": "MIT", + "dependencies": { + "pako": "~1.0.5" + } + }, + "node_modules/browserslist": { + "version": "4.24.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.2.tgz", + "integrity": "sha512-ZIc+Q62revdMcqC6aChtW4jz3My3klmCO1fEmINZY/8J3EpBg5/A/D0AKmBveUh6pgoeycoMkVMko84tuYS+Gg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "caniuse-lite": "^1.0.30001669", + "electron-to-chromium": "^1.5.41", + "node-releases": "^2.0.18", + "update-browserslist-db": "^1.1.1" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/buffer-equal": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-0.0.1.tgz", + "integrity": "sha512-RgSV6InVQ9ODPdLWJ5UAqBqJBOg370Nz6ZQtRzpt6nUjc8v0St97uJ4PYC6NztqIScrAXafKM3mZPMygSe1ggA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/buffer-equal-constant-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", + "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==" + }, + "node_modules/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==" + }, + "node_modules/buffer-xor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/builtin-status-codes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", + "integrity": "sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/cacache": { + "version": "15.2.0", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.2.0.tgz", + "integrity": "sha512-uKoJSHmnrqXgthDFx/IU6ED/5xd+NNGe+Bb+kLZy7Ku4P+BaiWEUflAKPZ7eAzsYGcsAGASJZsybXp+quEcHTw==", + "dependencies": { + "@npmcli/move-file": "^1.0.1", + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "glob": "^7.1.4", + "infer-owner": "^1.0.4", + "lru-cache": "^6.0.0", + "minipass": "^3.1.1", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.2", + "mkdirp": "^1.0.3", + "p-map": "^4.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^3.0.2", + "ssri": "^8.0.1", + "tar": "^6.0.2", + "unique-filename": "^1.1.1" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/cacache/node_modules/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==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/cacache/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/cacache/node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cacache/node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/cacache/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "node_modules/cache-base": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", + "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/call-bind": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/call-me-maybe": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.2.tgz", + "integrity": "sha512-HpX65o1Hnr9HH25ojC1YGs7HCQLq0GCOibSaWER0eNpgJ/Z1MZv2mTc7+xh6WOPxbRVcmgbv4hGU+uSQ/2xFZQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/caller-callsite": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz", + "integrity": "sha512-JuG3qI4QOftFsZyOn1qq87fq5grLIyk1JYd5lJmdA+fG7aQ9pA/i3JIJGcO3q0MrRcHlOt1U+ZeHW8Dq9axALQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "callsites": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/caller-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz", + "integrity": "sha512-MCL3sf6nCSXOwCTzvPKhN18TU7AHTvdtam8DAogxcrJ8Rjfbbg7Lgng64H9Iy+vUV6VGFClN/TyxBkAebLRR4A==", + "dev": true, + "license": "MIT", + "dependencies": { + "caller-callsite": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/callsites": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", + "integrity": "sha512-ksWePWBloaWPxJYQ8TL0JHvtci6G5QTKwQ95RcWAa/lzoAKuAOflGdAK92hpHXjkwb8zLxoLNUoNYZgVsaJzvQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/camel-case": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", + "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", + "license": "MIT", + "dependencies": { + "pascal-case": "^3.1.2", + "tslib": "^2.0.3" + } + }, + "node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-api": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", + "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", + "dev": true, + "license": "MIT", + "dependencies": { + "browserslist": "^4.0.0", + "caniuse-lite": "^1.0.0", + "lodash.memoize": "^4.1.2", + "lodash.uniq": "^4.5.0" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001675", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001675.tgz", + "integrity": "sha512-/wV1bQwPrkLiQMjaJF5yUMVM/VdRPOCU8QZ+PmG6uW6DvYSrNY1bpwHI/3mOcUosLaJCzYDi5o91IQB51ft6cg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/charenc": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", + "integrity": "sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==", + "engines": { + "node": "*" + } + }, + "node_modules/cheerio": { + "version": "1.0.0-rc.12", + "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.12.tgz", + "integrity": "sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==", + "dependencies": { + "cheerio-select": "^2.1.0", + "dom-serializer": "^2.0.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1", + "htmlparser2": "^8.0.1", + "parse5": "^7.0.0", + "parse5-htmlparser2-tree-adapter": "^7.0.0" + }, + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/cheeriojs/cheerio?sponsor=1" + } + }, + "node_modules/cheerio-select": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-2.1.0.tgz", + "integrity": "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==", + "dependencies": { + "boolbase": "^1.0.0", + "css-select": "^5.1.0", + "css-what": "^6.1.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/cheerio/node_modules/parse5": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", + "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", + "dependencies": { + "entities": "^4.4.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/chokidar": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", + "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", + "dev": true, + "license": "MIT", + "dependencies": { + "anymatch": "^2.0.0", + "async-each": "^1.0.1", + "braces": "^2.3.2", + "glob-parent": "^3.1.0", + "inherits": "^2.0.3", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "normalize-path": "^3.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.2.1", + "upath": "^1.1.1" + }, + "optionalDependencies": { + "fsevents": "^1.2.7" + } + }, + "node_modules/chokidar/node_modules/braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "license": "MIT", + "dependencies": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/chokidar/node_modules/fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/chokidar/node_modules/glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + } + }, + "node_modules/chokidar/node_modules/glob-parent/node_modules/is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/chokidar/node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", + "dev": true, + "license": "MIT", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/chokidar/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/chokidar/node_modules/to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "engines": { + "node": ">=10" + } + }, + "node_modules/cipher-base": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", + "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/class-utils": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", + "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", + "dev": true, + "license": "MIT", + "dependencies": { + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/is-descriptor": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.7.tgz", + "integrity": "sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-accessor-descriptor": "^1.0.1", + "is-data-descriptor": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/clean-css": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.3.tgz", + "integrity": "sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg==", + "license": "MIT", + "dependencies": { + "source-map": "~0.6.0" + }, + "engines": { + "node": ">= 10.0" + } + }, + "node_modules/clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "engines": { + "node": ">=6" + } + }, + "node_modules/cli-cursor": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", + "integrity": "sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw==", + "dev": true, + "license": "MIT", + "dependencies": { + "restore-cursor": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/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==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/cliui": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "dependencies": { + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" + } + }, + "node_modules/clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/coa": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz", + "integrity": "sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/q": "^1.5.1", + "chalk": "^2.4.1", + "q": "^1.1.2" + }, + "engines": { + "node": ">= 4.0" + } + }, + "node_modules/code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==", + "dev": true, + "license": "MIT", + "dependencies": { + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/color": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz", + "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==", + "dependencies": { + "color-convert": "^2.0.1", + "color-string": "^1.9.0" + }, + "engines": { + "node": ">=12.5.0" + } + }, + "node_modules/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==", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "node_modules/color-string": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", + "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", + "dependencies": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, + "node_modules/color/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/colors": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", + "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/command-exists": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz", + "integrity": "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==", + "dev": true, + "license": "MIT" + }, + "node_modules/commander": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", + "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", + "license": "MIT", + "engines": { + "node": ">=14" + } + }, + "node_modules/component-emitter": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.1.tgz", + "integrity": "sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, + "node_modules/concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "dev": true, + "engines": [ + "node >= 0.8" + ], + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "node_modules/concat-stream/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/concat-stream/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "license": "MIT", + "dependencies": { + "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" + } + }, + "node_modules/concat-stream/node_modules/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==", + "dev": true, + "license": "MIT" + }, + "node_modules/concat-stream/node_modules/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==", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/condense-newlines": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/condense-newlines/-/condense-newlines-0.2.1.tgz", + "integrity": "sha512-P7X+QL9Hb9B/c8HI5BFFKmjgBu2XpQuF98WZ9XkO+dBGgk5XgwiQz7o1SmpglNWId3581UcS0SFAWfoIhMHPfg==", + "dependencies": { + "extend-shallow": "^2.0.1", + "is-whitespace": "^0.3.0", + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/condense-newlines/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/config-chain": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", + "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==", + "dependencies": { + "ini": "^1.3.4", + "proto-list": "~1.2.1" + } + }, + "node_modules/console-browserify": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", + "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==", + "dev": true + }, + "node_modules/constants-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", + "integrity": "sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, + "license": "MIT" + }, + "node_modules/convert-units": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/convert-units/-/convert-units-2.3.4.tgz", + "integrity": "sha512-ERHfdA0UhHJp1IpwE6PnFJx8LqG7B1ZjJ20UvVCmopEnVCfER68Tbe3kvN63dLbYXDA2xFWRE6zd4Wsf0w7POg==", + "dependencies": { + "lodash.foreach": "2.3.x", + "lodash.keys": "2.3.x" + } + }, + "node_modules/copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/core-js": { + "version": "2.6.12", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz", + "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==", + "deprecated": "core-js@<3.23.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Some versions have web compatibility issues. Please, upgrade your dependencies to the actual version of core-js.", + "dev": true, + "hasInstallScript": true, + "license": "MIT" + }, + "node_modules/core-js-compat": { + "version": "3.38.1", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.38.1.tgz", + "integrity": "sha512-JRH6gfXxGmrzF3tZ57lFx97YARxCXPaMzPo6jELZhv88pBH5VXpQ+y0znKGlFnzuaihqhLbefxSJxWJMPtfDzw==", + "dev": true, + "license": "MIT", + "dependencies": { + "browserslist": "^4.23.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + }, + "node_modules/cosmiconfig": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", + "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", + "dev": true, + "license": "MIT", + "dependencies": { + "import-fresh": "^2.0.0", + "is-directory": "^0.3.1", + "js-yaml": "^3.13.1", + "parse-json": "^4.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/create-ecdh": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", + "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", + "dev": true, + "license": "MIT", + "dependencies": { + "bn.js": "^4.1.0", + "elliptic": "^6.5.3" + } + }, + "node_modules/create-ecdh/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true, + "license": "MIT" + }, + "node_modules/create-hash": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" + } + }, + "node_modules/create-hmac": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "node_modules/cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dependencies": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "engines": { + "node": ">=4.8" + } + }, + "node_modules/cross-spawn-async": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/cross-spawn-async/-/cross-spawn-async-2.2.5.tgz", + "integrity": "sha1-hF/wwINKPe2dFg2sptOQkGuyiMw=", + "deprecated": "cross-spawn no longer requires a build toolchain, use it instead", + "dependencies": { + "lru-cache": "^4.0.0", + "which": "^1.2.8" + } + }, + "node_modules/crypt": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", + "integrity": "sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==", + "engines": { + "node": "*" + } + }, + "node_modules/crypto-browserify": { + "version": "3.12.1", + "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.1.tgz", + "integrity": "sha512-r4ESw/IlusD17lgQi1O20Fa3qNnsckR126TdUuBgAu7GBYSIPvdNyONd3Zrxh0xCwA4+6w/TDArBPsMvhur+KQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "browserify-cipher": "^1.0.1", + "browserify-sign": "^4.2.3", + "create-ecdh": "^4.0.4", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "diffie-hellman": "^5.0.3", + "hash-base": "~3.0.4", + "inherits": "^2.0.4", + "pbkdf2": "^3.1.2", + "public-encrypt": "^4.0.3", + "randombytes": "^2.1.0", + "randomfill": "^1.0.4" + }, + "engines": { + "node": ">= 0.10" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/cryptr": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/cryptr/-/cryptr-6.0.3.tgz", + "integrity": "sha512-Nhaxn3CYl/OoWF3JSZlF8B6FQO600RRkU3g8213OGEIq4YvMlc3od8hL9chubhY1SmTq8ienvCRq1MSFjMTpOg==" + }, + "node_modules/css-b64-images": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/css-b64-images/-/css-b64-images-0.2.5.tgz", + "integrity": "sha512-TgQBEdP07adhrDfXvI5o6bHGukKBNMzp2Ngckc/6d09zpjD2gc1Hl3Ca1CKgb8FXjHi88+Phv2Uegs2kTL4zjg==", + "bin": { + "css-b64-images": "bin/css-b64-images" + }, + "engines": { + "node": "*" + } + }, + "node_modules/css-color-names": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz", + "integrity": "sha512-zj5D7X1U2h2zsXOAM8EyUREBnnts6H+Jm+d1M2DbiQQcUtnqgQsMrdo8JW9R80YFUmIdBZeMu5wvYM7hcgWP/Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/css-declaration-sorter": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-4.0.1.tgz", + "integrity": "sha512-BcxQSKTSEEQUftYpBVnsH4SF05NTuBokb19/sBt6asXGKZ/6VP7PLG1CBCkFDYOnhXhPh0jMhO6xZ71oYHXHBA==", + "dev": true, + "license": "MIT", + "dependencies": { + "postcss": "^7.0.1", + "timsort": "^0.3.0" + }, + "engines": { + "node": ">4" + } + }, + "node_modules/css-modules-loader-core": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/css-modules-loader-core/-/css-modules-loader-core-1.1.0.tgz", + "integrity": "sha512-XWOBwgy5nwBn76aA+6ybUGL/3JBnCtBX9Ay9/OWIpzKYWlVHMazvJ+WtHumfi+xxdPF440cWK7JCYtt8xDifew==", + "dev": true, + "license": "ISC", + "dependencies": { + "icss-replace-symbols": "1.1.0", + "postcss": "6.0.1", + "postcss-modules-extract-imports": "1.1.0", + "postcss-modules-local-by-default": "1.2.0", + "postcss-modules-scope": "1.1.0", + "postcss-modules-values": "1.3.0" + } + }, + "node_modules/css-modules-loader-core/node_modules/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==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/css-modules-loader-core/node_modules/ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/css-modules-loader-core/node_modules/chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", + "dev": true, + "license": "MIT", + "dependencies": { + "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" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/css-modules-loader-core/node_modules/chalk/node_modules/supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/css-modules-loader-core/node_modules/has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha512-DyYHfIYwAJmjAjSSPKANxI8bFY9YtFrgkAfinBojQ8YJTOuOuav64tMUJv584SES4xl74PmuaevIyaLESHdTAA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/css-modules-loader-core/node_modules/postcss": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.1.tgz", + "integrity": "sha512-VbGX1LQgQbf9l3cZ3qbUuC3hGqIEOGQFHAEHQ/Diaeo0yLgpgK5Rb8J+OcamIfQ9PbAU/fzBjVtQX3AhJHUvZw==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^1.1.3", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/css-modules-loader-core/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/css-modules-loader-core/node_modules/strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/css-modules-loader-core/node_modules/supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha512-Jds2VIYDrlp5ui7t8abHN2bjAu4LV/q4N2KivFPpGH0lrka0BMq/33AmECUXlKPcHigkNaqfXRENFju+rlcy+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^1.0.0" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/css-select": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", + "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.1.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css-select-base-adapter": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz", + "integrity": "sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==", + "dev": true, + "license": "MIT" + }, + "node_modules/css-selector-tokenizer": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.7.3.tgz", + "integrity": "sha512-jWQv3oCEL5kMErj4wRnK/OPoBi0D+P1FR2cDCKYPaMeD2eW3/mttav8HT4hT1CKopiJI/psEULjkClhvJo4Lvg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "fastparse": "^1.1.2" + } + }, + "node_modules/css-tree": { + "version": "1.0.0-alpha.37", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.37.tgz", + "integrity": "sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==", + "dev": true, + "license": "MIT", + "dependencies": { + "mdn-data": "2.0.4", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/css-what": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true, + "license": "MIT", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cssnano": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-4.1.11.tgz", + "integrity": "sha512-6gZm2htn7xIPJOHY824ERgj8cNPgPxyCSnkXc4v7YvNW+TdVfzgngHcEhy/8D11kUWRUMbke+tC+AUcUsnMz2g==", + "dev": true, + "license": "MIT", + "dependencies": { + "cosmiconfig": "^5.0.0", + "cssnano-preset-default": "^4.0.8", + "is-resolvable": "^1.0.0", + "postcss": "^7.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/cssnano-preset-default": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-4.0.8.tgz", + "integrity": "sha512-LdAyHuq+VRyeVREFmuxUZR1TXjQm8QQU/ktoo/x7bz+SdOge1YKc5eMN6pRW7YWBmyq59CqYba1dJ5cUukEjLQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "css-declaration-sorter": "^4.0.1", + "cssnano-util-raw-cache": "^4.0.1", + "postcss": "^7.0.0", + "postcss-calc": "^7.0.1", + "postcss-colormin": "^4.0.3", + "postcss-convert-values": "^4.0.1", + "postcss-discard-comments": "^4.0.2", + "postcss-discard-duplicates": "^4.0.2", + "postcss-discard-empty": "^4.0.1", + "postcss-discard-overridden": "^4.0.1", + "postcss-merge-longhand": "^4.0.11", + "postcss-merge-rules": "^4.0.3", + "postcss-minify-font-values": "^4.0.2", + "postcss-minify-gradients": "^4.0.2", + "postcss-minify-params": "^4.0.2", + "postcss-minify-selectors": "^4.0.2", + "postcss-normalize-charset": "^4.0.1", + "postcss-normalize-display-values": "^4.0.2", + "postcss-normalize-positions": "^4.0.2", + "postcss-normalize-repeat-style": "^4.0.2", + "postcss-normalize-string": "^4.0.2", + "postcss-normalize-timing-functions": "^4.0.2", + "postcss-normalize-unicode": "^4.0.1", + "postcss-normalize-url": "^4.0.1", + "postcss-normalize-whitespace": "^4.0.2", + "postcss-ordered-values": "^4.1.2", + "postcss-reduce-initial": "^4.0.3", + "postcss-reduce-transforms": "^4.0.2", + "postcss-svgo": "^4.0.3", + "postcss-unique-selectors": "^4.0.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/cssnano-util-get-arguments": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cssnano-util-get-arguments/-/cssnano-util-get-arguments-4.0.0.tgz", + "integrity": "sha512-6RIcwmV3/cBMG8Aj5gucQRsJb4vv4I4rn6YjPbVWd5+Pn/fuG+YseGvXGk00XLkoZkaj31QOD7vMUpNPC4FIuw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/cssnano-util-get-match": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cssnano-util-get-match/-/cssnano-util-get-match-4.0.0.tgz", + "integrity": "sha512-JPMZ1TSMRUPVIqEalIBNoBtAYbi8okvcFns4O0YIhcdGebeYZK7dMyHJiQ6GqNBA9kE0Hym4Aqym5rPdsV/4Cw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/cssnano-util-raw-cache": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/cssnano-util-raw-cache/-/cssnano-util-raw-cache-4.0.1.tgz", + "integrity": "sha512-qLuYtWK2b2Dy55I8ZX3ky1Z16WYsx544Q0UWViebptpwn/xDBmog2TLg4f+DBMg1rJ6JDWtn96WHbOKDWt1WQA==", + "dev": true, + "license": "MIT", + "dependencies": { + "postcss": "^7.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/cssnano-util-same-parent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.1.tgz", + "integrity": "sha512-WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/csso": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", + "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", + "dev": true, + "license": "MIT", + "dependencies": { + "css-tree": "^1.1.2" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/csso/node_modules/css-tree": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", + "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "mdn-data": "2.0.14", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/csso/node_modules/mdn-data": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", + "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", + "dev": true, + "license": "CC0-1.0" + }, + "node_modules/cssom": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", + "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==" + }, + "node_modules/cssstyle": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", + "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", + "dependencies": { + "cssom": "~0.3.6" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cssstyle/node_modules/cssom": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", + "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==" + }, + "node_modules/dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", + "dev": true, + "license": "MIT", + "dependencies": { + "assert-plus": "^1.0.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/data-urls": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", + "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==", + "dependencies": { + "abab": "^2.0.3", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^8.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/data-view-buffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz", + "integrity": "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz", + "integrity": "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-offset": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz", + "integrity": "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/deasync": { + "version": "0.1.30", + "resolved": "https://registry.npmjs.org/deasync/-/deasync-0.1.30.tgz", + "integrity": "sha512-OaAjvEQuQ9tJsKG4oHO9nV1UHTwb2Qc2+fadB0VeVtD0Z9wiG1XPGLJ4W3aLhAoQSYTaLROFRbd5X20Dkzf7MQ==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "bindings": "^1.5.0", + "node-addon-api": "^1.7.1" + }, + "engines": { + "node": ">=0.11.0" + } + }, + "node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decimal.js": { + "version": "10.3.1", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.3.1.tgz", + "integrity": "sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ==" + }, + "node_modules/decode-uri-component": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz", + "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/deep-is": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=" + }, + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/defaults": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", + "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", + "dev": true, + "dependencies": { + "clone": "^1.0.2" + } + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "dev": true, + "dependencies": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/define-properties/node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/denodeify": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/denodeify/-/denodeify-1.2.1.tgz", + "integrity": "sha1-OjYof1A05pnnV3kBBSwubJQlFjE=" + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/des.js": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.1.0.tgz", + "integrity": "sha512-r17GxjhUCjSRy8aiJpr8/UadFIzMzJGexI3Nmz4ADi9LYSFx4gTBp80+NaX/YsXWWLhpZ7v/v/ubEc/bCNfKwg==", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/detect-libc": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz", + "integrity": "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==", + "engines": { + "node": ">=8" + } + }, + "node_modules/diffie-hellman": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", + "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", + "dev": true, + "license": "MIT", + "dependencies": { + "bn.js": "^4.1.0", + "miller-rabin": "^4.0.0", + "randombytes": "^2.0.0" + } + }, + "node_modules/diffie-hellman/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true, + "license": "MIT" + }, + "node_modules/dir-glob": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.2.2.tgz", + "integrity": "sha512-f9LBi5QWzIW3I6e//uxZoLBlUt9kcp66qo0sSCxL6YZKc75R1c4MFCoe/LaZiBGmgujvQdxc5Bn3QhfyvK5Hsw==", + "dependencies": { + "path-type": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/domain-browser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", + "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.4", + "npm": ">=1.2" + } + }, + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ] + }, + "node_modules/domexception": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz", + "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==", + "dependencies": { + "webidl-conversions": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/domexception/node_modules/webidl-conversions": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz", + "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==", + "engines": { + "node": ">=8" + } + }, + "node_modules/domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "dependencies": { + "domelementtype": "^2.3.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/domutils": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.0.1.tgz", + "integrity": "sha512-z08c1l761iKhDFtfXO04C7kTdPBLi41zwOZl00WS8b5eiaebNpY00HKbztwBq+e3vyqWNwWF3mP9YLUeqIrF+Q==", + "dependencies": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.1" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/dot-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", + "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", + "license": "MIT", + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/dot-prop": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", + "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-obj": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/dotenv": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-5.0.1.tgz", + "integrity": "sha512-4As8uPrjfwb7VXC+WnLCbXK7y+Ueb2B3zgNCePYfhxS1PYeaO1YTeplffTEcbfLhvFNGLAz90VvJs9yomG7bow==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.6.0" + } + }, + "node_modules/dotenv-expand": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-5.1.0.tgz", + "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==", + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/duplexer2": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", + "integrity": "sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "readable-stream": "^2.0.2" + } + }, + "node_modules/duplexer2/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/duplexer2/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "license": "MIT", + "dependencies": { + "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" + } + }, + "node_modules/duplexer2/node_modules/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==", + "dev": true, + "license": "MIT" + }, + "node_modules/duplexer2/node_modules/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==", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" + }, + "node_modules/ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", + "dev": true, + "license": "MIT", + "dependencies": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "node_modules/ecdsa-sig-formatter": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", + "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, + "node_modules/editorconfig": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/editorconfig/-/editorconfig-1.0.4.tgz", + "integrity": "sha512-L9Qe08KWTlqYMVvMcTIvMAdl1cDUubzRNYL+WfA4bLDMHe4nemKkpmYzkznE1FwLKu0EEmy6obgQKzMJrg4x9Q==", + "dependencies": { + "@one-ini/wasm": "0.1.1", + "commander": "^10.0.0", + "minimatch": "9.0.1", + "semver": "^7.5.3" + }, + "bin": { + "editorconfig": "bin/editorconfig" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/editorconfig/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/editorconfig/node_modules/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==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/editorconfig/node_modules/minimatch": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.1.tgz", + "integrity": "sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/editorconfig/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/editorconfig/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "dev": true, + "license": "MIT" + }, + "node_modules/electron-to-chromium": { + "version": "1.5.49", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.49.tgz", + "integrity": "sha512-ZXfs1Of8fDb6z7WEYZjXpgIRF6MEu8JdeGA0A40aZq6OQbS+eJpnnV49epZRna2DU/YsEjSQuGtQPPtvt6J65A==", + "dev": true, + "license": "ISC" + }, + "node_modules/elliptic": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.6.0.tgz", + "integrity": "sha512-dpwoQcLc/2WLQvJvLRHKZ+f9FgOdjnq11rurqwekGQygGPsYSK29OMMD2WalatiqQ+XGFDglTNixpPfI+lpaAA==", + "dev": true, + "license": "MIT", + "dependencies": { + "bn.js": "^4.11.9", + "brorand": "^1.1.0", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.1", + "inherits": "^2.0.4", + "minimalistic-assert": "^1.0.1", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "node_modules/elliptic/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true, + "license": "MIT" + }, + "node_modules/emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" + }, + "node_modules/encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/entities": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.4.0.tgz", + "integrity": "sha512-oYp7156SP8LkeGD0GF85ad1X9Ai79WtRsZ2gxJqtBuzH+98YUV6jkHEKlZkMbcrjJjIVJNIDP/3WL9wQkoPbWA==", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/env-var": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/env-var/-/env-var-7.3.0.tgz", + "integrity": "sha512-qwtwYJ9d3XFxXRDudPEAMszaggpDgcfb1ZGYb9/cNyMugN2/a8EtviopnRL6c+petj2vp6/gxwYd9ExL1/iPcw==", + "engines": { + "node": ">=10" + } + }, + "node_modules/envinfo": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.14.0.tgz", + "integrity": "sha512-CO40UI41xDQzhLB1hWyqUKgFhs250pNcGbyGKe1l/e4FSaI/+YE4IMG76GDt0In67WLPACIITC+sOi08x4wIvg==", + "dev": true, + "license": "MIT", + "bin": { + "envinfo": "dist/cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/errlop": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/errlop/-/errlop-4.5.0.tgz", + "integrity": "sha512-oUGLzMxSQ/wfkq2hTIJv66Y6WAqCXM+10BKdllOrQFvc6bqcSomL2pUcflazdcOtodT7agUJ8tz75XzBtL1o0w==", + "engines": { + "node": ">=4" + }, + "funding": { + "url": "https://bevry.me/fund" + } + }, + "node_modules/errno": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", + "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", + "dependencies": { + "prr": "~1.0.1" + }, + "bin": { + "errno": "cli.js" + } + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/es-abstract": { + "version": "1.23.3", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz", + "integrity": "sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==", + "dev": true, + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "arraybuffer.prototype.slice": "^1.0.3", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "data-view-buffer": "^1.0.1", + "data-view-byte-length": "^1.0.1", + "data-view-byte-offset": "^1.0.0", + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-set-tostringtag": "^2.0.3", + "es-to-primitive": "^1.2.1", + "function.prototype.name": "^1.1.6", + "get-intrinsic": "^1.2.4", + "get-symbol-description": "^1.0.2", + "globalthis": "^1.0.3", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.0.3", + "has-symbols": "^1.0.3", + "hasown": "^2.0.2", + "internal-slot": "^1.0.7", + "is-array-buffer": "^3.0.4", + "is-callable": "^1.2.7", + "is-data-view": "^1.0.1", + "is-negative-zero": "^2.0.3", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.3", + "is-string": "^1.0.7", + "is-typed-array": "^1.1.13", + "is-weakref": "^1.0.2", + "object-inspect": "^1.13.1", + "object-keys": "^1.1.1", + "object.assign": "^4.1.5", + "regexp.prototype.flags": "^1.5.2", + "safe-array-concat": "^1.1.2", + "safe-regex-test": "^1.0.3", + "string.prototype.trim": "^1.2.9", + "string.prototype.trimend": "^1.0.8", + "string.prototype.trimstart": "^1.0.8", + "typed-array-buffer": "^1.0.2", + "typed-array-byte-length": "^1.0.1", + "typed-array-byte-offset": "^1.0.2", + "typed-array-length": "^1.0.6", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.15" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-abstract/node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-array-method-boxes-properly": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz", + "integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==", + "dev": true, + "license": "MIT" + }, + "node_modules/es-define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "dependencies": { + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz", + "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==", + "dev": true, + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz", + "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.4", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "dependencies": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/esbuild": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.23.1.tgz", + "integrity": "sha512-VVNz/9Sa0bs5SELtn3f7qhJCDPCF5oMEl5cO9/SSinpE9hbPVvxbd572HH5AKiP7WD8INO53GgfDDhRjkylHEg==", + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.23.1", + "@esbuild/android-arm": "0.23.1", + "@esbuild/android-arm64": "0.23.1", + "@esbuild/android-x64": "0.23.1", + "@esbuild/darwin-arm64": "0.23.1", + "@esbuild/darwin-x64": "0.23.1", + "@esbuild/freebsd-arm64": "0.23.1", + "@esbuild/freebsd-x64": "0.23.1", + "@esbuild/linux-arm": "0.23.1", + "@esbuild/linux-arm64": "0.23.1", + "@esbuild/linux-ia32": "0.23.1", + "@esbuild/linux-loong64": "0.23.1", + "@esbuild/linux-mips64el": "0.23.1", + "@esbuild/linux-ppc64": "0.23.1", + "@esbuild/linux-riscv64": "0.23.1", + "@esbuild/linux-s390x": "0.23.1", + "@esbuild/linux-x64": "0.23.1", + "@esbuild/netbsd-x64": "0.23.1", + "@esbuild/openbsd-arm64": "0.23.1", + "@esbuild/openbsd-x64": "0.23.1", + "@esbuild/sunos-x64": "0.23.1", + "@esbuild/win32-arm64": "0.23.1", + "@esbuild/win32-ia32": "0.23.1", + "@esbuild/win32-x64": "0.23.1" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "dev": true, + "license": "MIT" + }, + "node_modules/escape-string-applescript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-applescript/-/escape-string-applescript-2.0.0.tgz", + "integrity": "sha1-dgvKg4Zo5Aj+XuUs5CyvfLRsUnM=", + "engines": { + "node": ">=4" + } + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/escodegen": { + "version": "1.14.3", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", + "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", + "dependencies": { + "esprima": "^4.0.1", + "estraverse": "^4.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=4.0" + }, + "optionalDependencies": { + "source-map": "~0.6.1" + } + }, + "node_modules/escodegen/node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/esprima": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-1.2.2.tgz", + "integrity": "sha1-dqD9Zvz+FU/SkmZ9wmQBl1CxZXs=", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/evp_bytestokey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", + "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", + "dev": true, + "license": "MIT", + "dependencies": { + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" + } + }, + "node_modules/exception-formatter": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/exception-formatter/-/exception-formatter-2.1.2.tgz", + "integrity": "sha512-LHBd3npNQZ47GeO5jPTorbCvw2/BxxFNn9JG+FjjhifwI/jC5zi2W+UX//FrlIfTXvW4nRx2jthy1ujTVHhsLw==", + "dependencies": { + "colors": "^1.0.3" + }, + "engines": { + "node": ">=0.10.1" + } + }, + "node_modules/execa": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-0.10.0.tgz", + "integrity": "sha512-7XOMnz8Ynx1gGo/3hyV9loYNPWM94jG3+3T3Y8tsfSstFmETmENCMU/A/zj8Lyaj1lkgEepKepvd6240tBRvlw==", + "dependencies": { + "cross-spawn": "^6.0.0", + "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" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/is-descriptor": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.7.tgz", + "integrity": "sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-accessor-descriptor": "^1.0.1", + "is-data-descriptor": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + }, + "node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", + "dev": true, + "engines": [ + "node >=0.6.0" + ], + "license": "MIT" + }, + "node_modules/falafel": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/falafel/-/falafel-2.2.5.tgz", + "integrity": "sha512-HuC1qF9iTnHDnML9YZAdCDQwT0yKl/U55K4XSUXqGAA2GLoafFgWRqdAbhWJxXaYD4pyoVxAJ8wH670jMpI9DQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "acorn": "^7.1.1", + "isarray": "^2.0.1" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/falafel/node_modules/acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/falafel/node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-glob": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "dependencies": { + "@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" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=" + }, + "node_modules/fast-text-encoding": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/fast-text-encoding/-/fast-text-encoding-1.0.6.tgz", + "integrity": "sha512-VhXlQgj9ioXCqGstD37E/HBeqEGV/qOD/kmbVG8h5xKBYvM1L3lR1Zn4555cQ8GkYbJa8aJSipLPndE1k6zK2w==" + }, + "node_modules/fastparse": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/fastparse/-/fastparse-1.1.2.tgz", + "integrity": "sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/fastq": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.11.1.tgz", + "integrity": "sha512-HOnr8Mc60eNYl1gzwp6r5RoUyAn5/glBolUzP/Ez6IFVPMPirxn/9phgL6zhOtaTy7ISwPvQ+wT+hfcRZh/bzw==", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", + "dev": true, + "license": "MIT" + }, + "node_modules/filename-reserved-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz", + "integrity": "sha1-q/c9+rc10EVECr/qLZHzieu/oik=", + "engines": { + "node": ">=4" + } + }, + "node_modules/filenamify": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/filenamify/-/filenamify-4.3.0.tgz", + "integrity": "sha512-hcFKyUG57yWGAzu1CMt/dPzYZuv+jAJUT85bL8mrXvNe6hWj6yEHEc4EdcgiA6Z3oi1/9wXJdZPXF2dZNgwgOg==", + "license": "MIT", + "dependencies": { + "filename-reserved-regex": "^2.0.0", + "strip-outer": "^1.0.1", + "trim-repeated": "^1.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/filesize": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/filesize/-/filesize-3.6.1.tgz", + "integrity": "sha512-7KjR1vv6qnicaPMi1iiTcI85CyYwRO/PSFCu6SvqL8jN2Wjt/NIYQTFtFs7fSDCYOstUkEWIQGFUg5YZQfjlcg==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/filter-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/filter-obj/-/filter-obj-1.1.0.tgz", + "integrity": "sha512-8rXg1ZnX7xzy2NGDVkBVaAy+lSlPNwad13BtgSlLuxfIslyt5Vg64U7tFcCt4WS1R0hvtnQybT/IyCkGZ3DpXQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/find-up": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.0.0.tgz", + "integrity": "sha512-zoH7ZWPkRdgwYCDVoQTzqjG8JSPANhtvLhh4KVUHyKnaUJJrNeFmWIkTcNuJmR3GLMEmGYEf2S2bjgx26JTF+Q==", + "dependencies": { + "locate-path": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/follow-redirects": { + "version": "1.15.6", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", + "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dev": true, + "dependencies": { + "is-callable": "^1.1.3" + } + }, + "node_modules/for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/foreground-child": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.2.0.tgz", + "integrity": "sha512-CrWQNaEl1/6WeZoarcM9LHupTo3RpZO2Pdk1vktwzPiQTsJnAKJmm3TACKeG5UZbWDfaH2AbvYxzP96y0MT7fA==", + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/foreground-child/node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/foreground-child/node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "engines": { + "node": ">=8" + } + }, + "node_modules/foreground-child/node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/foreground-child/node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "engines": { + "node": ">=8" + } + }, + "node_modules/foreground-child/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/foreground-child/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "*" + } + }, + "node_modules/form-data": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", + "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA==", + "dev": true, + "license": "MIT", + "dependencies": { + "map-cache": "^0.2.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/front-matter": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/front-matter/-/front-matter-4.0.2.tgz", + "integrity": "sha512-I8ZuJ/qG92NWX8i5x1Y8qyj3vizhXS31OxjKDu3LKP+7/qBgfIKValiZIEwoVoJKUHlhWtYrktkxV1XsX+pPlg==", + "dependencies": { + "js-yaml": "^3.13.1" + } + }, + "node_modules/fs-extra": { + "version": "0.30.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz", + "integrity": "sha1-8jP/zAjU2n1DLapEl3aYnbHfk/A=", + "dependencies": { + "graceful-fs": "^4.1.2", + "jsonfile": "^2.1.0", + "klaw": "^1.0.0", + "path-is-absolute": "^1.0.0", + "rimraf": "^2.2.8" + } + }, + "node_modules/fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + }, + "node_modules/fsevents": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", + "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", + "deprecated": "Upgrade to fsevents v2 to mitigate potential security issues", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "dependencies": { + "bindings": "^1.5.0", + "nan": "^2.12.1" + }, + "engines": { + "node": ">= 4.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/function.prototype.name": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", + "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "functions-have-names": "^1.2.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gaxios": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-5.0.2.tgz", + "integrity": "sha512-TjtV2AJOZoMQqRYoy5eM8cCQogYwazWNYLQ72QB0kwa6vHHruYkGmhhyrlzbmgNHK1dNnuP2WSH81urfzyN2Og==", + "dependencies": { + "extend": "^3.0.2", + "https-proxy-agent": "^5.0.0", + "is-stream": "^2.0.0", + "node-fetch": "^2.6.7" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/gaxios/node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/gcp-metadata": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-5.2.0.tgz", + "integrity": "sha512-aFhhvvNycky2QyhG+dcfEdHBF0FRbYcf39s6WNHUDysKSrbJ5vuFbjydxBcmewtXeV248GP8dWT3ByPNxsyHCw==", + "dependencies": { + "gaxios": "^5.0.0", + "json-bigint": "^1.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-port": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/get-port/-/get-port-3.2.0.tgz", + "integrity": "sha512-x5UJKlgeUiNT8nyo/AcnwLnZuZNcSjSw0kogRB+Whd1fjjFq4B1hySFxSFWWSn4mIBzg3sRNUDFYc4g5gjPoLg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/get-stdin": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-9.0.0.tgz", + "integrity": "sha512-dVKBjfWisLAicarI2Sf+JuBE/DghV4UzNAVe9yhEJuzeREd3JhOTE9cUaJTeSa77fsbQUK3pcOpJfM59+VKZaA==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", + "engines": { + "node": ">=4" + } + }, + "node_modules/get-symbol-description": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz", + "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", + "dev": true, + "license": "MIT", + "dependencies": { + "assert-plus": "^1.0.0" + } + }, + "node_modules/gitea-js": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/gitea-js/-/gitea-js-1.20.1.tgz", + "integrity": "sha512-g1wdNP5zYN258tTVIm2vGY8bRJTwVwCfYH0ockUpi34RAuOwJ0FavpFVVvazxXEcdo2XmXRKZcAmVhAhwMXkgg==" + }, + "node_modules/glob": { + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", + "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "dependencies": { + "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" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-base": { + "version": "0.3.0", + "resolved": "git+ssh://git@github.com/justin-caribou/glob-base.git#d4fe4313e55988a902a3940127cb946a7defbb50", + "license": "MIT", + "dependencies": { + "glob-parent": "^6.0.2", + "is-glob": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/glob-base/node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/glob-base/node_modules/glob-parent/node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/glob-base/node_modules/is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha512-a1dBeB19NXsf/E0+FHqkagizel/LQw2DjSQpvQrj3zT+jYPpaUCryPnrQajXKFLCMuf4I6FhRpaGtw4lPrG6Eg==", + "license": "MIT", + "dependencies": { + "is-extglob": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/glob-base/node_modules/is-glob/node_modules/is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha512-7Q+VbVafe6x2T+Tu6NcOf6sRklazEPmBoB3IWk3WdGZM2iGUwU/Oe3Wtq5lSEkDTTlpp8yx+5t4pzO/i9Ty1ww==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/glob-to-regexp": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz", + "integrity": "sha512-Iozmtbqv0noj0uDDqoL0zNq0VBEfK2YFoMAZoxJe4cwphvLR+JskfF30QhXHOR4m3KrE6NLRYw+U9MRXvifyig==", + "dev": true, + "license": "BSD" + }, + "node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/globalthis": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", + "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", + "dev": true, + "dependencies": { + "define-properties": "^1.2.1", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/globby": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/globby/-/globby-7.1.1.tgz", + "integrity": "sha1-+yzP+UAfhgCUXfral0QMypcrhoA=", + "dependencies": { + "array-union": "^1.0.1", + "dir-glob": "^2.0.0", + "glob": "^7.1.2", + "ignore": "^3.3.5", + "pify": "^3.0.0", + "slash": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/google-auth-library": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-8.7.0.tgz", + "integrity": "sha512-1M0NG5VDIvJZEnstHbRdckLZESoJwguinwN8Dhae0j2ZKIQFIV63zxm6Fo6nM4xkgqUr2bbMtV5Dgo+Hy6oo0Q==", + "dependencies": { + "arrify": "^2.0.0", + "base64-js": "^1.3.0", + "ecdsa-sig-formatter": "^1.0.11", + "fast-text-encoding": "^1.0.0", + "gaxios": "^5.0.0", + "gcp-metadata": "^5.0.0", + "gtoken": "^6.1.0", + "jws": "^4.0.0", + "lru-cache": "^6.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/google-auth-library/node_modules/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==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/google-auth-library/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "node_modules/google-p12-pem": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/google-p12-pem/-/google-p12-pem-4.0.1.tgz", + "integrity": "sha512-WPkN4yGtz05WZ5EhtlxNDWPhC4JIic6G8ePitwUWy4l+XPVYec+a0j0Ts47PDtW59y3RwAhUd9/h9ZZ63px6RQ==", + "dependencies": { + "node-forge": "^1.3.1" + }, + "bin": { + "gp12-pem": "build/src/bin/gp12-pem.js" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/googleapis": { + "version": "105.0.0", + "resolved": "https://registry.npmjs.org/googleapis/-/googleapis-105.0.0.tgz", + "integrity": "sha512-wH/jU/6QpqwsjTKj4vfKZz97ne7xT7BBbKwzQEwnbsG8iH9Seyw19P+AuLJcxNNrmgblwLqfr3LORg4Okat1BQ==", + "dependencies": { + "google-auth-library": "^8.0.2", + "googleapis-common": "^6.0.0" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/googleapis-common": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/googleapis-common/-/googleapis-common-6.0.4.tgz", + "integrity": "sha512-m4ErxGE8unR1z0VajT6AYk3s6a9gIMM6EkDZfkPnES8joeOlEtFEJeF8IyZkb0tjPXkktUfYrE4b3Li1DNyOwA==", + "dependencies": { + "extend": "^3.0.2", + "gaxios": "^5.0.1", + "google-auth-library": "^8.0.2", + "qs": "^6.7.0", + "url-template": "^2.0.8", + "uuid": "^9.0.0" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/googleapis-common/node_modules/uuid": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz", + "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", + "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==" + }, + "node_modules/grapheme-breaker": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/grapheme-breaker/-/grapheme-breaker-0.3.2.tgz", + "integrity": "sha512-mB6rwkw1Z7z4z2RkFFTd/+q6Ug1gnCgjKAervAKgBeNI1mSr8E5EUWoYzFNOZsLHFArLfpk+O8X8qXC7uvuawQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "brfs": "^1.2.0", + "unicode-trie": "^0.3.1" + } + }, + "node_modules/gtoken": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-6.1.2.tgz", + "integrity": "sha512-4ccGpzz7YAr7lxrT2neugmXQ3hP9ho2gcaityLVkiUecAiwiy60Ii8gRbZeOsXV19fYaRjgBSshs8kXw+NKCPQ==", + "dependencies": { + "gaxios": "^5.0.1", + "google-p12-pem": "^4.0.0", + "jws": "^4.0.0" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=4" + } + }, + "node_modules/har-validator": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", + "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", + "deprecated": "this library is no longer supported", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^6.12.3", + "har-schema": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/has": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.4.tgz", + "integrity": "sha512-qdSAmqLF6209RFj4VVItywPMbm3vWylknmB3nvNiUIs72xAimcM8nVYxYr7ncvZq5qzk9MKIZR8ijqD/1QuYjQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-ansi/node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-bigints": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "engines": { + "node": ">=4" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", + "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-values": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-number": "^3.0.0", + "kind-of": "^4.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-values/node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", + "dev": true, + "license": "MIT", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-values/node_modules/is-number/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-values/node_modules/kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/hash-base": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", + "integrity": "sha512-EeeoJKjTyt868liAlVmcv2ZsUfGHlE3Q+BICOXcZiwN3osr5Q/zFGYmTJpoIzuaSTAwndFy+GqhEwlU4L3j4Ow==", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/hex-color-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/hex-color-regex/-/hex-color-regex-1.1.0.tgz", + "integrity": "sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/highlight.js": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-11.1.0.tgz", + "integrity": "sha512-X9VVhYKHQPPuwffO8jk4bP/FVj+ibNCy3HxZZNDXFtJrq4O5FdcdCDRIkDis5MiMnjh7UwEdHgRZJcHFYdzDdA==", + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", + "dev": true, + "license": "MIT", + "dependencies": { + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "node_modules/hsl-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/hsl-regex/-/hsl-regex-1.0.0.tgz", + "integrity": "sha512-M5ezZw4LzXbBKMruP+BNANf0k+19hDQMgpzBIYnya//Al+fjNct9Wf3b1WedLqdEs2hKBvxq/jh+DsHJLj0F9A==", + "dev": true, + "license": "MIT" + }, + "node_modules/hsla-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/hsla-regex/-/hsla-regex-1.0.0.tgz", + "integrity": "sha512-7Wn5GMLuHBjZCb2bTmnDOycho0p/7UVaAeqXZGbHrBCl6Yd/xDhQJAXe6Ga9AXJH2I5zY1dEdYw2u1UptnSBJA==", + "dev": true, + "license": "MIT" + }, + "node_modules/html-encoding-sniffer": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz", + "integrity": "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==", + "dependencies": { + "whatwg-encoding": "^1.0.5" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/html-minifier-terser": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-7.2.0.tgz", + "integrity": "sha512-tXgn3QfqPIpGl9o+K5tpcj3/MN4SfLtsx2GWwBC3SSd0tXQGyF3gsSqad8loJgKZGM3ZxbYDd5yhiBIdWpmvLA==", + "license": "MIT", + "dependencies": { + "camel-case": "^4.1.2", + "clean-css": "~5.3.2", + "commander": "^10.0.0", + "entities": "^4.4.0", + "param-case": "^3.0.4", + "relateurl": "^0.2.7", + "terser": "^5.15.1" + }, + "bin": { + "html-minifier-terser": "cli.js" + }, + "engines": { + "node": "^14.13.1 || >=16.0.0" + } + }, + "node_modules/html-tags": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-1.2.0.tgz", + "integrity": "sha512-uVteDXUCs08M7QJx0eY6ue7qQztwIfknap81vAtNob2sdEPKa8PjPinx0vxbs2JONPamovZjMvKZWNW44/PBKg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/htmlnano": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/htmlnano/-/htmlnano-0.2.9.tgz", + "integrity": "sha512-jWTtP3dCd7R8x/tt9DK3pvpcQd7HDMcRPUqPxr/i9989q2k5RHIhmlRDFeyQ/LSd8IKrteG8Ce5g0Ig4eGIipg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cssnano": "^4.1.11", + "posthtml": "^0.15.1", + "purgecss": "^2.3.0", + "relateurl": "^0.2.7", + "srcset": "^3.0.0", + "svgo": "^1.3.2", + "terser": "^5.6.1", + "timsort": "^0.3.0", + "uncss": "^0.17.3" + } + }, + "node_modules/htmlnano/node_modules/dom-serializer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", + "dev": true, + "license": "MIT", + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/htmlnano/node_modules/domhandler": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "domelementtype": "^2.2.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/htmlnano/node_modules/domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/htmlnano/node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "dev": true, + "license": "BSD-2-Clause", + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/htmlnano/node_modules/htmlparser2": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", + "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", + "dev": true, + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "MIT", + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.0.0", + "domutils": "^2.5.2", + "entities": "^2.0.0" + } + }, + "node_modules/htmlnano/node_modules/posthtml": { + "version": "0.15.2", + "resolved": "https://registry.npmjs.org/posthtml/-/posthtml-0.15.2.tgz", + "integrity": "sha512-YugEJ5ze/0DLRIVBjCpDwANWL4pPj1kHJ/2llY8xuInr0nbkon3qTiMPe5LQa+cCwNjxS7nAZZTp+1M+6mT4Zg==", + "dev": true, + "license": "MIT", + "dependencies": { + "posthtml-parser": "^0.7.2", + "posthtml-render": "^1.3.1" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/htmlnano/node_modules/posthtml-parser": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/posthtml-parser/-/posthtml-parser-0.7.2.tgz", + "integrity": "sha512-LjEEG/3fNcWZtBfsOE3Gbyg1Li4CmsZRkH1UmbMR7nKdMXVMYI3B4/ZMiCpaq8aI1Aym4FRMMW9SAOLSwOnNsQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "htmlparser2": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/htmlparser2": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", + "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==", + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "MIT", + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1", + "entities": "^4.4.0" + } + }, + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/http-proxy-agent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", + "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", + "dependencies": { + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/http-proxy-agent/node_modules/debug": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/http-proxy-agent/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + }, + "engines": { + "node": ">=0.8", + "npm": ">=1.3.7" + } + }, + "node_modules/https-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", + "integrity": "sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg==", + "dev": true, + "license": "MIT" + }, + "node_modules/https-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", + "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/https-proxy-agent/node_modules/debug": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/https-proxy-agent/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/icss-replace-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz", + "integrity": "sha512-chIaY3Vh2mh2Q3RGXttaDIzeiPvaVXJ+C4DAh/w3c37SKZ/U6PGMmuicR2EQQp9bKG8zLMCl7I+PtIoOOPp8Gg==", + "dev": true, + "license": "ISC" + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/ignore": { + "version": "3.3.10", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz", + "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==" + }, + "node_modules/import-fresh": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", + "integrity": "sha512-eZ5H8rcgYazHbKC3PG4ClHNykCSxtAhxSSEM+2mb+7evD2CKF5V7c0dNum7AdpDh0ZdICwZY9sRSn8f+KH96sg==", + "dev": true, + "license": "MIT", + "dependencies": { + "caller-path": "^2.0.0", + "resolve-from": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/indexes-of": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz", + "integrity": "sha512-bup+4tap3Hympa+JBJUG7XuOsdNQ6fxt0MHyXMKuLBKn0OqsTfvUxkUrroEX1+B2VsSHvCjiIcZVxRtYa4nllA==", + "dev": true, + "license": "MIT" + }, + "node_modules/infer-owner": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", + "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==" + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" + }, + "node_modules/internal-slot": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz", + "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==", + "dev": true, + "dependencies": { + "es-errors": "^1.3.0", + "hasown": "^2.0.0", + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/invert-kv": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", + "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-absolute-url": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-2.1.0.tgz", + "integrity": "sha512-vOx7VprsKyllwjSkLV79NIhpyLfr3jAp7VaTCMXOJHu4m0Ew1CZ2fcjASwmV1jI3BWuWHB013M48eyeldk9gYg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-accessor-descriptor": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.1.tgz", + "integrity": "sha512-YBUanLI8Yoihw923YeFUS5fs0fF2f5TSFTNiYAAzhhDscDa3lEqYuz1pDOEP5KvX94I9ey3vsqjJcLVFVU+3QA==", + "dev": true, + "license": "MIT", + "dependencies": { + "hasown": "^2.0.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/is-array-buffer": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", + "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true + }, + "node_modules/is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dev": true, + "dependencies": { + "has-bigints": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", + "integrity": "sha512-9fRVlXc0uCxEDj1nQzaWONSpbTfx0FmJfzHF7pwlI8DkWGoHBBea4Pg5Ky0ojwwxQmnSifgbKkI06Qv0Ljgj+Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "binary-extensions": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + }, + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-color-stop": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-color-stop/-/is-color-stop-1.1.0.tgz", + "integrity": "sha512-H1U8Vz0cfXNujrJzEcvvwMDW9Ra+biSYA3ThdQvAnMLJkEHQXn6bWzLkxHtVYJ+Sdbx0b6finn3jZiaVe7MAHA==", + "dev": true, + "license": "MIT", + "dependencies": { + "css-color-names": "^0.0.4", + "hex-color-regex": "^1.1.0", + "hsl-regex": "^1.0.0", + "hsla-regex": "^1.0.0", + "rgb-regex": "^1.0.1", + "rgba-regex": "^1.0.0" + } + }, + "node_modules/is-core-module": { + "version": "2.14.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.14.0.tgz", + "integrity": "sha512-a5dFJih5ZLYlRtDc0dZWP7RiKr6xIKzmn/oAYCDvdLThadVgyJwlaoQPmRtMSpz+rk0OGAgIu+TcM9HUF0fk1A==", + "dev": true, + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-data-descriptor": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.1.tgz", + "integrity": "sha512-bc4NlCDiCr28U4aEsQ3Qs2491gVq4V8G7MQyws968ImqjKuYtTJXrl7Vq7jsN7Ly/C3xj5KWFrY7sHNeDkAzXw==", + "dev": true, + "license": "MIT", + "dependencies": { + "hasown": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-data-view": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz", + "integrity": "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==", + "dev": true, + "dependencies": { + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-descriptor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.3.tgz", + "integrity": "sha512-JCNNGbwWZEVaSPtS45mdtrneRWJFp07LLmykxeFV5F6oBvNF8vHSfJuJgoT472pSfk+Mf8VnlrspaFBHWM8JAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-accessor-descriptor": "^1.0.1", + "is-data-descriptor": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-directory": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", + "integrity": "sha512-yVChGzahRFvbkscn2MlwGismPO12i9+znNruC5gVEntG3qu0xQMzsGg/JFbrsqDOHtHFPci+V5aP5T9I+yeKqw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-dotfile": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz", + "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/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": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "engines": { + "node": ">=4" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-html": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-html/-/is-html-1.1.0.tgz", + "integrity": "sha512-eoGsQVAAyvLFRKnbt4jo7Il56agsH5I04pDymPoxRp/tnna5yiIpdNzvKPOy5G1Ff0zY/jfN2hClb7ju+sOrdA==", + "dev": true, + "license": "MIT", + "dependencies": { + "html-tags": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-negative-zero": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", + "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-number-object": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-potential-custom-element-name": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", + "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==" + }, + "node_modules/is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-resolvable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", + "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==", + "dev": true, + "license": "ISC" + }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz", + "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz", + "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==", + "dev": true, + "dependencies": { + "which-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", + "dev": true, + "license": "MIT" + }, + "node_modules/is-url": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/is-url/-/is-url-1.2.4.tgz", + "integrity": "sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==" + }, + "node_modules/is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-whitespace": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/is-whitespace/-/is-whitespace-0.3.0.tgz", + "integrity": "sha512-RydPhl4S6JwAyj0JJjshWJEFG6hNye3pZFBRZaTUfZFwGHxzppNaNOVgQuS/E/SlhrApuMXrpnK1EEIXfdo3Dg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" + }, + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==", + "dev": true, + "license": "MIT" + }, + "node_modules/jackspeak": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.0.tgz", + "integrity": "sha512-JVYhQnN59LVPFCEcVa2C3CrEKYacvjRfqIQl+h8oi91aLYQVWRYbxjPcv1bUiUy/kLmQaANrYfNMCO3kuEDHfw==", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/jju": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/jju/-/jju-1.4.0.tgz", + "integrity": "sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA==", + "license": "MIT" + }, + "node_modules/js-base64": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-3.7.2.tgz", + "integrity": "sha512-NnRs6dsyqUXejqk/yv2aiXlAvOs56sLkX6nUdeaNezI5LFFLlsZjOThmwnrcwh5ZZRwZlCMnVAY3CvhIhoVEKQ==" + }, + "node_modules/js-beautify": { + "version": "1.14.9", + "resolved": "https://registry.npmjs.org/js-beautify/-/js-beautify-1.14.9.tgz", + "integrity": "sha512-coM7xq1syLcMyuVGyToxcj2AlzhkDjmfklL8r0JgJ7A76wyGMpJ1oA35mr4APdYNO/o/4YY8H54NQIJzhMbhBg==", + "dependencies": { + "config-chain": "^1.1.13", + "editorconfig": "^1.0.3", + "glob": "^8.1.0", + "nopt": "^6.0.0" + }, + "bin": { + "css-beautify": "js/bin/css-beautify.js", + "html-beautify": "js/bin/html-beautify.js", + "js-beautify": "js/bin/js-beautify.js" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/js-beautify/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/js-beautify/node_modules/glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/js-beautify/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/js-yaml/node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==", + "dev": true, + "license": "MIT" + }, + "node_modules/jsdom": { + "version": "16.7.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz", + "integrity": "sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==", + "dependencies": { + "abab": "^2.0.5", + "acorn": "^8.2.4", + "acorn-globals": "^6.0.0", + "cssom": "^0.4.4", + "cssstyle": "^2.3.0", + "data-urls": "^2.0.0", + "decimal.js": "^10.2.1", + "domexception": "^2.0.1", + "escodegen": "^2.0.0", + "form-data": "^3.0.0", + "html-encoding-sniffer": "^2.0.1", + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "is-potential-custom-element-name": "^1.0.1", + "nwsapi": "^2.2.0", + "parse5": "6.0.1", + "saxes": "^5.0.1", + "symbol-tree": "^3.2.4", + "tough-cookie": "^4.0.0", + "w3c-hr-time": "^1.0.2", + "w3c-xmlserializer": "^2.0.0", + "webidl-conversions": "^6.1.0", + "whatwg-encoding": "^1.0.5", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^8.5.0", + "ws": "^7.4.6", + "xml-name-validator": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "canvas": "^2.5.0" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } + } + }, + "node_modules/jsdom/node_modules/escodegen": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz", + "integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==", + "dependencies": { + "esprima": "^4.0.1", + "estraverse": "^5.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=6.0" + }, + "optionalDependencies": { + "source-map": "~0.6.1" + } + }, + "node_modules/jsdom/node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/jsdom/node_modules/estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/jsdom/node_modules/tough-cookie": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.4.tgz", + "integrity": "sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==", + "dependencies": { + "psl": "^1.1.33", + "punycode": "^2.1.1", + "universalify": "^0.2.0", + "url-parse": "^1.5.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsdom/node_modules/universalify": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", + "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/jsep": { + "version": "1.3.9", + "resolved": "https://registry.npmjs.org/jsep/-/jsep-1.3.9.tgz", + "integrity": "sha512-i1rBX5N7VPl0eYb6+mHNp52sEuaS2Wi8CDYx1X5sn9naevL78+265XJqy1qENEk7mRKwS06NHpUqiBwR7qeodw==", + "license": "MIT", + "engines": { + "node": ">= 10.16.0" + } + }, + "node_modules/jsesc": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz", + "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==", + "dev": true, + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsome": { + "version": "2.3.24", + "resolved": "https://registry.npmjs.org/jsome/-/jsome-2.3.24.tgz", + "integrity": "sha1-p9MCi0oyNCJpN3MNRAmm4E56hBM=", + "dependencies": { + "chalk": "^1.1.1", + "json-stringify-safe": "^5.0.1", + "yargs": "^3.29.0" + }, + "bin": { + "jsome": "bin/cli.js" + } + }, + "node_modules/jsome/node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/jsome/node_modules/ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/jsome/node_modules/camelcase": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", + "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/jsome/node_modules/chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dependencies": { + "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" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/jsome/node_modules/cliui": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", + "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", + "dependencies": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wrap-ansi": "^2.0.0" + } + }, + "node_modules/jsome/node_modules/is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dependencies": { + "number-is-nan": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/jsome/node_modules/string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dependencies": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/jsome/node_modules/strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/jsome/node_modules/supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/jsome/node_modules/wrap-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", + "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "dependencies": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/jsome/node_modules/y18n": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.2.tgz", + "integrity": "sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ==" + }, + "node_modules/jsome/node_modules/yargs": { + "version": "3.32.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.32.0.tgz", + "integrity": "sha1-AwiOnr+edWtpdRYR0qXvWRSCyZU=", + "dependencies": { + "camelcase": "^2.0.1", + "cliui": "^3.0.3", + "decamelize": "^1.1.1", + "os-locale": "^1.4.0", + "string-width": "^1.0.1", + "window-size": "^0.1.4", + "y18n": "^3.2.0" + } + }, + "node_modules/json-bigint": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-1.0.0.tgz", + "integrity": "sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==", + "dependencies": { + "bignumber.js": "^9.0.0" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==" + }, + "node_modules/json-format-highlight": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/json-format-highlight/-/json-format-highlight-1.0.4.tgz", + "integrity": "sha512-RqenIjKr1I99XfXPAml9G7YlEZg/GnsH7emWyWJh2yuGXqHW8spN7qx6/ME+MoIBb35/fxrMC9Jauj6nvGe4Mg==" + }, + "node_modules/json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "dev": true + }, + "node_modules/json-pretty-html": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/json-pretty-html/-/json-pretty-html-1.1.6.tgz", + "integrity": "sha512-+bhQgNJ3ebvOIGSZ9OPWTHpv9xKaKIodekiphrUKrOCovuBfimtmn2G3vv/jzNsXg12g9SHcBYoiPO362ghDNA==", + "engines": { + "node": ">= 8.0.0" + } + }, + "node_modules/json-schema": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", + "dev": true, + "license": "(AFL-2.1 OR BSD-3-Clause)" + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" + }, + "node_modules/json-to-pretty-yaml": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/json-to-pretty-yaml/-/json-to-pretty-yaml-1.2.2.tgz", + "integrity": "sha1-9M0L0KXo/h3yWq9boRiwmf2ZLVs=", + "dependencies": { + "remedial": "^1.0.7", + "remove-trailing-spaces": "^1.0.6" + }, + "engines": { + "node": ">= 0.2.0" + } + }, + "node_modules/json5": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/jsonfile": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", + "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=", + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jsonpath": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/jsonpath/-/jsonpath-1.1.1.tgz", + "integrity": "sha512-l6Cg7jRpixfbgoWgkrl77dgEj8RPvND0wMH6TwQmi9Qs4TFfS9u5cUFnbeKTwj5ga5Y3BTGGNI28k117LJ009w==", + "dependencies": { + "esprima": "1.2.2", + "static-eval": "2.0.2", + "underscore": "1.12.1" + } + }, + "node_modules/jsonpath-plus": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/jsonpath-plus/-/jsonpath-plus-10.1.0.tgz", + "integrity": "sha512-gHfV1IYqH8uJHYVTs8BJX1XKy2/rR93+f8QQi0xhx95aCiXn1ettYAd5T+7FU6wfqyDoX/wy0pm/fL3jOKJ9Lg==", + "license": "MIT", + "dependencies": { + "@jsep-plugin/assignment": "^1.2.1", + "@jsep-plugin/regex": "^1.0.3", + "jsep": "^1.3.9" + }, + "bin": { + "jsonpath": "bin/jsonpath-cli.js", + "jsonpath-plus": "bin/jsonpath-cli.js" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/jsprim": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", + "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", + "dev": true, + "license": "MIT", + "dependencies": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.4.0", + "verror": "1.10.0" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/jwa": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.0.tgz", + "integrity": "sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA==", + "dependencies": { + "buffer-equal-constant-time": "1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/jws": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.0.tgz", + "integrity": "sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==", + "dependencies": { + "jwa": "^2.0.0", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/keyv-file": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/keyv-file/-/keyv-file-0.3.1.tgz", + "integrity": "sha512-nrIyNaGlw8nf11mu8p7ttr+Qj6V3N0/BO62Y/oDsi02aWKWYaQjGVPLo0XPfRIwgaByQabuA/IH1se7i150LnQ==", + "dependencies": { + "debug": "^4.1.1", + "fs-extra": "^4.0.1", + "tslib": "^1.9.3" + } + }, + "node_modules/keyv-file/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/keyv-file/node_modules/fs-extra": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz", + "integrity": "sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==", + "dependencies": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "node_modules/keyv-file/node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/keyv-file/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/keyv-file/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/klaw": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz", + "integrity": "sha1-QIhDO0azsbolnXh4XY6W9zugJDk=", + "optionalDependencies": { + "graceful-fs": "^4.1.9" + } + }, + "node_modules/lcid": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", + "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", + "dependencies": { + "invert-kv": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "dependencies": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "node_modules/lodash._basebind": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/lodash._basebind/-/lodash._basebind-2.3.0.tgz", + "integrity": "sha1-K1vEUqDhBhQ7IYafIzvbWHQX0kg=", + "dependencies": { + "lodash._basecreate": "~2.3.0", + "lodash._setbinddata": "~2.3.0", + "lodash.isobject": "~2.3.0" + } + }, + "node_modules/lodash._basecreate": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/lodash._basecreate/-/lodash._basecreate-2.3.0.tgz", + "integrity": "sha1-m4ioak3P97fzxh2Dovz8BnHsneA=", + "dependencies": { + "lodash._renative": "~2.3.0", + "lodash.isobject": "~2.3.0", + "lodash.noop": "~2.3.0" + } + }, + "node_modules/lodash._basecreatecallback": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/lodash._basecreatecallback/-/lodash._basecreatecallback-2.3.0.tgz", + "integrity": "sha1-N7KrF1kaM56YjbMln81GAZ16w2I=", + "dependencies": { + "lodash._setbinddata": "~2.3.0", + "lodash.bind": "~2.3.0", + "lodash.identity": "~2.3.0", + "lodash.support": "~2.3.0" + } + }, + "node_modules/lodash._basecreatewrapper": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/lodash._basecreatewrapper/-/lodash._basecreatewrapper-2.3.0.tgz", + "integrity": "sha1-qgxhrZYETDkzN2ExSDqXWcNlEkc=", + "dependencies": { + "lodash._basecreate": "~2.3.0", + "lodash._setbinddata": "~2.3.0", + "lodash._slice": "~2.3.0", + "lodash.isobject": "~2.3.0" + } + }, + "node_modules/lodash._createwrapper": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/lodash._createwrapper/-/lodash._createwrapper-2.3.0.tgz", + "integrity": "sha1-0arhEC2t9EDo4G/BM6bt1/4UYHU=", + "dependencies": { + "lodash._basebind": "~2.3.0", + "lodash._basecreatewrapper": "~2.3.0", + "lodash.isfunction": "~2.3.0" + } + }, + "node_modules/lodash._objecttypes": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/lodash._objecttypes/-/lodash._objecttypes-2.3.0.tgz", + "integrity": "sha1-aj6jmH3W7rgCGy1cnDA1Scwrrh4=" + }, + "node_modules/lodash._renative": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/lodash._renative/-/lodash._renative-2.3.0.tgz", + "integrity": "sha1-d9jt1M7SbdWXH54Vpfdy5OMX+9M=" + }, + "node_modules/lodash._setbinddata": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/lodash._setbinddata/-/lodash._setbinddata-2.3.0.tgz", + "integrity": "sha1-5WEEkKzRMnfVmFjZW18nJ/FQjwQ=", + "dependencies": { + "lodash._renative": "~2.3.0", + "lodash.noop": "~2.3.0" + } + }, + "node_modules/lodash._shimkeys": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/lodash._shimkeys/-/lodash._shimkeys-2.3.0.tgz", + "integrity": "sha1-YR+TFJ4+bHIQlrSHae8pU3rai6k=", + "dependencies": { + "lodash._objecttypes": "~2.3.0" + } + }, + "node_modules/lodash._slice": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/lodash._slice/-/lodash._slice-2.3.0.tgz", + "integrity": "sha1-FHGYEyhZly5GgMoppZkshVZpqlw=" + }, + "node_modules/lodash.bind": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/lodash.bind/-/lodash.bind-2.3.0.tgz", + "integrity": "sha1-wqjhi2jl7MFS4rFoJmEW/qWwFsw=", + "dependencies": { + "lodash._createwrapper": "~2.3.0", + "lodash._renative": "~2.3.0", + "lodash._slice": "~2.3.0" + } + }, + "node_modules/lodash.clone": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clone/-/lodash.clone-4.5.0.tgz", + "integrity": "sha512-GhrVeweiTD6uTmmn5hV/lzgCQhccwReIVRLHp7LT4SopOjqEZ5BbX8b5WWEtAKasjmy8hR7ZPwsYlxRCku5odg==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.foreach": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/lodash.foreach/-/lodash.foreach-2.3.0.tgz", + "integrity": "sha1-CDQEyR6EbudyRf3512UZxosq8Wg=", + "dependencies": { + "lodash._basecreatecallback": "~2.3.0", + "lodash.forown": "~2.3.0" + } + }, + "node_modules/lodash.forown": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/lodash.forown/-/lodash.forown-2.3.0.tgz", + "integrity": "sha1-JPtKr4ANRfwtxgv+w84EyDajrX8=", + "dependencies": { + "lodash._basecreatecallback": "~2.3.0", + "lodash._objecttypes": "~2.3.0", + "lodash.keys": "~2.3.0" + } + }, + "node_modules/lodash.identity": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/lodash.identity/-/lodash.identity-2.3.0.tgz", + "integrity": "sha1-awGiEMlIU1XCqRO0i2cRIZoXPe0=" + }, + "node_modules/lodash.isfunction": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/lodash.isfunction/-/lodash.isfunction-2.3.0.tgz", + "integrity": "sha1-aylz5HpkfPEucNZ2rqE2Q3BuUmc=" + }, + "node_modules/lodash.isobject": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/lodash.isobject/-/lodash.isobject-2.3.0.tgz", + "integrity": "sha1-LhbT/Fg9qYMZaJU/LY5tc0NPZ5k=", + "dependencies": { + "lodash._objecttypes": "~2.3.0" + } + }, + "node_modules/lodash.keys": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-2.3.0.tgz", + "integrity": "sha1-s1D0+Syqn0WkouzwGEVM8vKK4lM=", + "dependencies": { + "lodash._renative": "~2.3.0", + "lodash._shimkeys": "~2.3.0", + "lodash.isobject": "~2.3.0" + } + }, + "node_modules/lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.noop": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/lodash.noop/-/lodash.noop-2.3.0.tgz", + "integrity": "sha1-MFnWKNUbv5N80qC2/Dp/ISpmnCw=" + }, + "node_modules/lodash.sortby": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", + "integrity": "sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.support": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/lodash.support/-/lodash.support-2.3.0.tgz", + "integrity": "sha1-fq8DivTw1qq3drRKptz8gDNMm/0=", + "dependencies": { + "lodash._renative": "~2.3.0" + } + }, + "node_modules/lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/log-symbols": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", + "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^2.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/lower-case": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", + "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", + "license": "MIT", + "dependencies": { + "tslib": "^2.0.3" + } + }, + "node_modules/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==", + "dependencies": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "node_modules/magic-string": { + "version": "0.22.5", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.22.5.tgz", + "integrity": "sha512-oreip9rJZkzvA8Qzk9HFs8fZGF/u7H/gtrE8EN6RjKJ9kh2HlC+yQ2QezifqTZfGyiuAV0dRv5a+y/8gBb1m9w==", + "dev": true, + "license": "MIT", + "dependencies": { + "vlq": "^0.2.2" + } + }, + "node_modules/map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w==", + "dev": true, + "license": "MIT", + "dependencies": { + "object-visit": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/markdown-table": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-3.0.3.tgz", + "integrity": "sha512-Z1NL3Tb1M9wH4XESsCDEksWoKTdlUafKc4pt0GRwjUyXaCFZ+dc3g2erqB6zm3szA2IUSi7VnPI+o/9jnxh9hw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/md5": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz", + "integrity": "sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==", + "dependencies": { + "charenc": "0.0.2", + "crypt": "0.0.2", + "is-buffer": "~1.1.6" + } + }, + "node_modules/md5.js": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", + "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", + "dev": true, + "license": "MIT", + "dependencies": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/mdn-data": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz", + "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==", + "dev": true, + "license": "CC0-1.0" + }, + "node_modules/merge-source-map": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.0.4.tgz", + "integrity": "sha512-PGSmS0kfnTnMJCzJ16BLLCEe6oeYCamKFFdQKshi4BmM6FUwipjVOcBFGxqtQtirtAG4iZvHlqST9CpZKqlRjA==", + "dev": true, + "license": "MIT", + "dependencies": { + "source-map": "^0.5.6" + } + }, + "node_modules/merge-source-map/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "license": "MIT", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/miller-rabin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", + "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "bn.js": "^4.0.0", + "brorand": "^1.0.1" + }, + "bin": { + "miller-rabin": "bin/miller-rabin" + } + }, + "node_modules/miller-rabin/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true, + "license": "MIT" + }, + "node_modules/mime": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.5.2.tgz", + "integrity": "sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg==", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/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==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/minify": { + "version": "11.4.1", + "resolved": "https://registry.npmjs.org/minify/-/minify-11.4.1.tgz", + "integrity": "sha512-G1a1cSxR+5J4ixbfNSXU1OeXB8J6dFSlYpnS3GiPxYBSLoe51RE8UWj3sHXzZNxqWFvZkpcU/VSSCJtHyRZmdQ==", + "license": "MIT", + "dependencies": { + "@putout/minify": "^4.0.0", + "@swc/core": "^1.6.7", + "clean-css": "^5.0.1", + "css-b64-images": "~0.2.5", + "debug": "^4.1.0", + "esbuild": "^0.23.0", + "find-up": "^7.0.0", + "html-minifier-terser": "^7.1.0", + "readjson": "^2.2.2", + "simport": "^1.2.0", + "terser": "^5.28.1", + "try-catch": "^3.0.0", + "try-to-catch": "^3.0.0" + }, + "bin": { + "minify": "bin/minify.js" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/minify/node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/minify/node_modules/find-up": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-7.0.0.tgz", + "integrity": "sha512-YyZM99iHrqLKjmt4LJDj58KI+fYyufRLBSYcqycxf//KpBk9FoewoGX0450m9nB44qrZnovzC2oeP5hUibxc/g==", + "license": "MIT", + "dependencies": { + "locate-path": "^7.2.0", + "path-exists": "^5.0.0", + "unicorn-magic": "^0.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/minify/node_modules/locate-path": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz", + "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", + "license": "MIT", + "dependencies": { + "p-locate": "^6.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/minify/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/minify/node_modules/p-limit": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", + "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", + "license": "MIT", + "dependencies": { + "yocto-queue": "^1.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/minify/node_modules/p-locate": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", + "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", + "license": "MIT", + "dependencies": { + "p-limit": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/minify/node_modules/path-exists": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", + "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } + }, + "node_modules/minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", + "dev": true, + "license": "ISC" + }, + "node_modules/minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==", + "dev": true, + "license": "MIT" + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" + }, + "node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-collect": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", + "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minipass-flush": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", + "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minipass-pipeline": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", + "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "node_modules/minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "dependencies": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minizlib/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "node_modules/mixin-deep": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", + "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", + "dev": true, + "license": "MIT", + "dependencies": { + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/mixin-deep/node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "dependencies": { + "minimist": "^1.2.5" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/moment": { + "version": "2.30.1", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.30.1.tgz", + "integrity": "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==", + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/mount-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mount-point/-/mount-point-3.0.0.tgz", + "integrity": "sha1-Zly57evoDREOZY21bDHQrvUaj5c=", + "dependencies": { + "@sindresorhus/df": "^1.0.1", + "pify": "^2.3.0", + "pinkie-promise": "^2.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/mount-point/node_modules/@sindresorhus/df": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@sindresorhus/df/-/df-1.0.1.tgz", + "integrity": "sha1-xptm9S9vzdKHyAffIQMF2694UA0=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/mount-point/node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "node_modules/nan": { + "version": "2.22.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.22.0.tgz", + "integrity": "sha512-nbajikzWTMwsW+eSsNm3QwlOs7het9gGJU5dDZzRTQGk03vyBOauxgI4VakDzE0PtsGTmXPsXTbbjVhRwR5mpw==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/nanomatch": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", + "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", + "dev": true, + "license": "MIT", + "dependencies": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/nanomatch/node_modules/extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/nanomatch/node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==" + }, + "node_modules/no-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", + "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", + "license": "MIT", + "dependencies": { + "lower-case": "^2.0.2", + "tslib": "^2.0.3" + } + }, + "node_modules/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==", + "dev": true, + "license": "MIT" + }, + "node_modules/node-fetch": { + "version": "2.6.12", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.12.tgz", + "integrity": "sha512-C/fGU2E8ToujUivIO0H+tpQ6HWo4eEmchoPIoXtxCrVghxdKq+QOHqEZW7tuP3KlV3bC8FRMO5nMCC7Zm1VP6g==", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/node-fetch/node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + }, + "node_modules/node-fetch/node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + }, + "node_modules/node-fetch/node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/node-forge": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", + "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", + "engines": { + "node": ">= 6.13.0" + } + }, + "node_modules/node-libs-browser": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz", + "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "assert": "^1.1.1", + "browserify-zlib": "^0.2.0", + "buffer": "^4.3.0", + "console-browserify": "^1.1.0", + "constants-browserify": "^1.0.0", + "crypto-browserify": "^3.11.0", + "domain-browser": "^1.1.1", + "events": "^3.0.0", + "https-browserify": "^1.0.0", + "os-browserify": "^0.3.0", + "path-browserify": "0.0.1", + "process": "^0.11.10", + "punycode": "^1.2.4", + "querystring-es3": "^0.2.0", + "readable-stream": "^2.3.3", + "stream-browserify": "^2.0.1", + "stream-http": "^2.7.2", + "string_decoder": "^1.0.0", + "timers-browserify": "^2.0.4", + "tty-browserify": "0.0.0", + "url": "^0.11.0", + "util": "^0.11.0", + "vm-browserify": "^1.0.1" + } + }, + "node_modules/node-libs-browser/node_modules/buffer": { + "version": "4.9.2", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", + "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", + "dev": true, + "license": "MIT", + "dependencies": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" + } + }, + "node_modules/node-libs-browser/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/node-libs-browser/node_modules/punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/node-libs-browser/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "license": "MIT", + "dependencies": { + "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" + } + }, + "node_modules/node-libs-browser/node_modules/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==", + "dev": true, + "license": "MIT" + }, + "node_modules/node-libs-browser/node_modules/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==", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/node-releases": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz", + "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==", + "dev": true, + "license": "MIT" + }, + "node_modules/node-xlsx": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/node-xlsx/-/node-xlsx-0.24.0.tgz", + "integrity": "sha512-1olwK48XK9nXZsyH/FCltvGrQYvXXZuxVitxXXv2GIuRm51aBi1+5KwR4rWM4KeO61sFU+00913WLZTD+AcXEg==", + "license": "Apache-2.0", + "dependencies": { + "xlsx": "https://cdn.sheetjs.com/xlsx-0.20.2/xlsx-0.20.2.tgz" + }, + "bin": { + "node-xlsx": "dist/bin/cli.js" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/nopt": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-6.0.0.tgz", + "integrity": "sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g==", + "dependencies": { + "abbrev": "^1.0.0" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-url": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-3.3.0.tgz", + "integrity": "sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "dependencies": { + "path-key": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/nwsapi": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz", + "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==" + }, + "node_modules/oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "*" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/is-descriptor": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.7.tgz", + "integrity": "sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-accessor-descriptor": "^1.0.1", + "is-data-descriptor": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object-copy/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz", + "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-0.4.0.tgz", + "integrity": "sha1-KKaq50KN0sOpLz2V8hM13SBOAzY=" + }, + "node_modules/object-visit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA==", + "dev": true, + "license": "MIT", + "dependencies": { + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object.assign": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", + "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.assign/node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.getownpropertydescriptors": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.8.tgz", + "integrity": "sha512-qkHIGe4q0lSYMv0XI4SsBTJz3WaURhLvd0lKSgtVuOsJ2krg4SgMw3PIRQFMp07yi++UR3se2mkcLqsBNpBb/A==", + "dev": true, + "license": "MIT", + "dependencies": { + "array.prototype.reduce": "^1.0.6", + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0", + "gopd": "^1.0.1", + "safe-array-concat": "^1.1.2" + }, + "engines": { + "node": ">= 0.8" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==", + "dev": true, + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object.values": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.0.tgz", + "integrity": "sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dev": true, + "license": "MIT", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", + "integrity": "sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "mimic-fn": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/open": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz", + "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==", + "dependencies": { + "is-docker": "^2.0.0", + "is-wsl": "^2.1.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/opn": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/opn/-/opn-5.5.0.tgz", + "integrity": "sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-wsl": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/opn/node_modules/is-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", + "integrity": "sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "dependencies": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/ora": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ora/-/ora-2.1.0.tgz", + "integrity": "sha512-hNNlAd3gfv/iPmsNxYoAPLvxg7HuPozww7fFonMZvL84tP6Ox5igfk5j/+a9rtJJwqMgKK+JgWsAQik5o0HTLA==", + "dev": true, + "license": "MIT", + "dependencies": { + "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" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/ora/node_modules/ansi-regex": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", + "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/ora/node_modules/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==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/os-browserify": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", + "integrity": "sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A==", + "dev": true, + "license": "MIT" + }, + "node_modules/os-homedir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/os-locale": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", + "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", + "dependencies": { + "lcid": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", + "engines": { + "node": ">=4" + } + }, + "node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-limit/node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-map": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-1.2.0.tgz", + "integrity": "sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA==", + "engines": { + "node": ">=4" + } + }, + "node_modules/p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "engines": { + "node": ">=4" + } + }, + "node_modules/pako": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", + "dev": true, + "license": "(MIT AND Zlib)" + }, + "node_modules/param-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", + "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", + "license": "MIT", + "dependencies": { + "dot-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/parcel-bundler": { + "version": "1.12.5", + "resolved": "https://registry.npmjs.org/parcel-bundler/-/parcel-bundler-1.12.5.tgz", + "integrity": "sha512-hpku8mW67U6PXQIenW6NBbphBOMb8XzW6B9r093DUhYj5GN2FUB/CXCiz5hKoPYUsusZ35BpProH8AUF9bh5IQ==", + "deprecated": "Parcel v1 is no longer maintained. Please migrate to v2, which is published under the 'parcel' package. See https://v2.parceljs.org/getting-started/migration for details.", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.0.0", + "@babel/core": "^7.4.4", + "@babel/generator": "^7.4.4", + "@babel/parser": "^7.4.4", + "@babel/plugin-transform-flow-strip-types": "^7.4.4", + "@babel/plugin-transform-modules-commonjs": "^7.4.4", + "@babel/plugin-transform-react-jsx": "^7.0.0", + "@babel/preset-env": "^7.4.4", + "@babel/runtime": "^7.4.4", + "@babel/template": "^7.4.4", + "@babel/traverse": "^7.4.4", + "@babel/types": "^7.4.4", + "@iarna/toml": "^2.2.0", + "@parcel/fs": "^1.11.0", + "@parcel/logger": "^1.11.1", + "@parcel/utils": "^1.11.0", + "@parcel/watcher": "^1.12.1", + "@parcel/workers": "^1.11.0", + "ansi-to-html": "^0.6.4", + "babylon-walk": "^1.0.2", + "browserslist": "^4.1.0", + "chalk": "^2.1.0", + "clone": "^2.1.1", + "command-exists": "^1.2.6", + "commander": "^2.11.0", + "core-js": "^2.6.5", + "cross-spawn": "^6.0.4", + "css-modules-loader-core": "^1.1.0", + "cssnano": "^4.0.0", + "deasync": "^0.1.14", + "dotenv": "^5.0.0", + "dotenv-expand": "^5.1.0", + "envinfo": "^7.3.1", + "fast-glob": "^2.2.2", + "filesize": "^3.6.0", + "get-port": "^3.2.0", + "htmlnano": "^0.2.2", + "is-glob": "^4.0.0", + "is-url": "^1.2.2", + "js-yaml": "^3.10.0", + "json5": "^1.0.1", + "micromatch": "^3.0.4", + "mkdirp": "^0.5.1", + "node-forge": "^0.10.0", + "node-libs-browser": "^2.0.0", + "opn": "^5.1.0", + "postcss": "^7.0.11", + "postcss-value-parser": "^3.3.1", + "posthtml": "^0.11.2", + "posthtml-parser": "^0.4.0", + "posthtml-render": "^1.1.3", + "resolve": "^1.4.0", + "semver": "^5.4.1", + "serialize-to-js": "^3.0.0", + "serve-static": "^1.12.4", + "source-map": "0.6.1", + "terser": "^3.7.3", + "v8-compile-cache": "^2.0.0", + "ws": "^5.1.1" + }, + "bin": { + "parcel": "bin/cli.js" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/parcel-bundler/node_modules/@nodelib/fs.stat": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz", + "integrity": "sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/parcel-bundler/node_modules/braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "license": "MIT", + "dependencies": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/parcel-bundler/node_modules/clone": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", + "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/parcel-bundler/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/parcel-bundler/node_modules/fast-glob": { + "version": "2.2.7", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.7.tgz", + "integrity": "sha512-g1KuQwHOZAmOZMuBtHdxDtju+T2RT8jgCC9aANsbpdiDDTSnjgfuVsIBNKbUeJI3oKMRExcfNDtJl4OhbffMsw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@mrmlnc/readdir-enhanced": "^2.2.1", + "@nodelib/fs.stat": "^1.1.2", + "glob-parent": "^3.1.0", + "is-glob": "^4.0.0", + "merge2": "^1.2.3", + "micromatch": "^3.1.10" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/parcel-bundler/node_modules/fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/parcel-bundler/node_modules/glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + } + }, + "node_modules/parcel-bundler/node_modules/glob-parent/node_modules/is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/parcel-bundler/node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/parcel-bundler/node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", + "dev": true, + "license": "MIT", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/parcel-bundler/node_modules/is-number/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/parcel-bundler/node_modules/micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "license": "MIT", + "dependencies": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/parcel-bundler/node_modules/micromatch/node_modules/extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/parcel-bundler/node_modules/node-forge": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz", + "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==", + "dev": true, + "license": "(BSD-3-Clause OR GPL-2.0)", + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/parcel-bundler/node_modules/terser": { + "version": "3.17.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-3.17.0.tgz", + "integrity": "sha512-/FQzzPJmCpjAH9Xvk2paiWrFq+5M6aVOf+2KRbwhByISDX/EujxsK+BAvrhb6H+2rtrLCHK9N01wO014vrIwVQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "commander": "^2.19.0", + "source-map": "~0.6.1", + "source-map-support": "~0.5.10" + }, + "bin": { + "terser": "bin/uglifyjs" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/parcel-bundler/node_modules/to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/parcel-bundler/node_modules/ws": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/ws/-/ws-5.2.4.tgz", + "integrity": "sha512-fFCejsuC8f9kOSu9FYaOw8CdO68O3h5v0lg4p74o8JqWpwTf9tniOD+nOB78aWoVSS6WptVUmDrp/KPsMVBWFQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "async-limiter": "~1.0.0" + } + }, + "node_modules/parse-asn1": { + "version": "5.1.7", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.7.tgz", + "integrity": "sha512-CTM5kuWR3sx9IFamcl5ErfPl6ea/N8IYwiJ+vpeB2g+1iknv7zBl5uPwbMbRVznRVbrNY6lGuDoE5b30grmbqg==", + "dev": true, + "license": "ISC", + "dependencies": { + "asn1.js": "^4.10.1", + "browserify-aes": "^1.2.0", + "evp_bytestokey": "^1.0.3", + "hash-base": "~3.0", + "pbkdf2": "^3.1.2", + "safe-buffer": "^5.2.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/parse-glob": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", + "integrity": "sha512-FC5TeK0AwXzq3tUBFtH74naWkPQCEWs4K+xMxWZBlKDWu0bVHXGZa+KKqxKidd7xwhdZ19ZNuF2uO1M/r196HA==", + "dependencies": { + "glob-base": "^0.3.0", + "is-dotfile": "^1.0.0", + "is-extglob": "^1.0.0", + "is-glob": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/parse-glob/node_modules/is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/parse-glob/node_modules/is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "dependencies": { + "is-extglob": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", + "dev": true, + "dependencies": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==" + }, + "node_modules/parse5-htmlparser2-tree-adapter": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz", + "integrity": "sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g==", + "dependencies": { + "domhandler": "^5.0.2", + "parse5": "^7.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parse5-htmlparser2-tree-adapter/node_modules/parse5": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", + "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", + "dependencies": { + "entities": "^4.4.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/pascal-case": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", + "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", + "license": "MIT", + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-browserify": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz", + "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/path-dirname": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", + "integrity": "sha512-ALzNPpyNq9AqXMBjeymIjFDAkAFH06mHJH/cSBHAgU0s4vfpBn6b2nf8tiRLvagKD8RbTpq2FKTBg7cl9l3c7Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", + "engines": { + "node": ">=4" + } + }, + "node_modules/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=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "engines": { + "node": ">=4" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.2.tgz", + "integrity": "sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==", + "engines": { + "node": "14 || >=16.14" + } + }, + "node_modules/path-scurry/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/path-type": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "dependencies": { + "pify": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/pbkdf2": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", + "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", + "dev": true, + "license": "MIT", + "dependencies": { + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4", + "ripemd160": "^2.0.1", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + }, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", + "dev": true, + "license": "MIT" + }, + "node_modules/physical-cpu-count": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/physical-cpu-count/-/physical-cpu-count-2.0.0.tgz", + "integrity": "sha512-rxJOljMuWtYlvREBmd6TZYanfcPhNUKtGDZBjBBS8WG1dpN2iwPsRJZgQqN/OtJuiQckdRFOfzogqJClTrsi7g==", + "dev": true, + "license": "ISC" + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "engines": { + "node": ">=4" + } + }, + "node_modules/pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "dependencies": { + "pinkie": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pn": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/pn/-/pn-1.1.0.tgz", + "integrity": "sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA==", + "dev": true, + "license": "MIT" + }, + "node_modules/posix-character-classes": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", + "integrity": "sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/possible-typed-array-names": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", + "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "license": "MIT", + "dependencies": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/postcss-calc": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-7.0.5.tgz", + "integrity": "sha512-1tKHutbGtLtEZF6PT4JSihCHfIVldU72mZ8SdZHIYriIZ9fh9k9aWSppaT8rHsyI3dX+KSR+W+Ix9BMY3AODrg==", + "dev": true, + "license": "MIT", + "dependencies": { + "postcss": "^7.0.27", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.0.2" + } + }, + "node_modules/postcss-calc/node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/postcss-colormin": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-4.0.3.tgz", + "integrity": "sha512-WyQFAdDZpExQh32j0U0feWisZ0dmOtPl44qYmJKkq9xFWY3p+4qnRzCHeNrkeRhwPHz9bQ3mo0/yVkaply0MNw==", + "dev": true, + "license": "MIT", + "dependencies": { + "browserslist": "^4.0.0", + "color": "^3.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-colormin/node_modules/color": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/color/-/color-3.2.1.tgz", + "integrity": "sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^1.9.3", + "color-string": "^1.6.0" + } + }, + "node_modules/postcss-convert-values": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-4.0.1.tgz", + "integrity": "sha512-Kisdo1y77KUC0Jmn0OXU/COOJbzM8cImvw1ZFsBgBgMgb1iL23Zs/LXRe3r+EZqM3vGYKdQ2YJVQ5VkJI+zEJQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-discard-comments": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-4.0.2.tgz", + "integrity": "sha512-RJutN259iuRf3IW7GZyLM5Sw4GLTOH8FmsXBnv8Ab/Tc2k4SR4qbV4DNbyyY4+Sjo362SyDmW2DQ7lBSChrpkg==", + "dev": true, + "license": "MIT", + "dependencies": { + "postcss": "^7.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-discard-duplicates": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.2.tgz", + "integrity": "sha512-ZNQfR1gPNAiXZhgENFfEglF93pciw0WxMkJeVmw8eF+JZBbMD7jp6C67GqJAXVZP2BWbOztKfbsdmMp/k8c6oQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "postcss": "^7.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-discard-empty": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-4.0.1.tgz", + "integrity": "sha512-B9miTzbznhDjTfjvipfHoqbWKwd0Mj+/fL5s1QOz06wufguil+Xheo4XpOnc4NqKYBCNqqEzgPv2aPBIJLox0w==", + "dev": true, + "license": "MIT", + "dependencies": { + "postcss": "^7.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-discard-overridden": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-4.0.1.tgz", + "integrity": "sha512-IYY2bEDD7g1XM1IDEsUT4//iEYCxAmP5oDSFMVU/JVvT7gh+l4fmjciLqGgwjdWpQIdb0Che2VX00QObS5+cTg==", + "dev": true, + "license": "MIT", + "dependencies": { + "postcss": "^7.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-merge-longhand": { + "version": "4.0.11", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-4.0.11.tgz", + "integrity": "sha512-alx/zmoeXvJjp7L4mxEMjh8lxVlDFX1gqWHzaaQewwMZiVhLo42TEClKaeHbRf6J7j82ZOdTJ808RtN0ZOZwvw==", + "dev": true, + "license": "MIT", + "dependencies": { + "css-color-names": "0.0.4", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0", + "stylehacks": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-merge-rules": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-4.0.3.tgz", + "integrity": "sha512-U7e3r1SbvYzO0Jr3UT/zKBVgYYyhAz0aitvGIYOYK5CPmkNih+WDSsS5tvPrJ8YMQYlEMvsZIiqmn7HdFUaeEQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "browserslist": "^4.0.0", + "caniuse-api": "^3.0.0", + "cssnano-util-same-parent": "^4.0.0", + "postcss": "^7.0.0", + "postcss-selector-parser": "^3.0.0", + "vendors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-merge-rules/node_modules/postcss-selector-parser": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", + "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", + "dev": true, + "license": "MIT", + "dependencies": { + "dot-prop": "^5.2.0", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/postcss-minify-font-values": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-4.0.2.tgz", + "integrity": "sha512-j85oO6OnRU9zPf04+PZv1LYIYOprWm6IA6zkXkrJXyRveDEuQggG6tvoy8ir8ZwjLxLuGfNkCZEQG7zan+Hbtg==", + "dev": true, + "license": "MIT", + "dependencies": { + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-minify-gradients": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-4.0.2.tgz", + "integrity": "sha512-qKPfwlONdcf/AndP1U8SJ/uzIJtowHlMaSioKzebAXSG4iJthlWC9iSWznQcX4f66gIWX44RSA841HTHj3wK+Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "cssnano-util-get-arguments": "^4.0.0", + "is-color-stop": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-minify-params": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-4.0.2.tgz", + "integrity": "sha512-G7eWyzEx0xL4/wiBBJxJOz48zAKV2WG3iZOqVhPet/9geefm/Px5uo1fzlHu+DOjT+m0Mmiz3jkQzVHe6wxAWg==", + "dev": true, + "license": "MIT", + "dependencies": { + "alphanum-sort": "^1.0.0", + "browserslist": "^4.0.0", + "cssnano-util-get-arguments": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0", + "uniqs": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-minify-selectors": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-4.0.2.tgz", + "integrity": "sha512-D5S1iViljXBj9kflQo4YutWnJmwm8VvIsU1GeXJGiG9j8CIg9zs4voPMdQDUmIxetUOh60VilsNzCiAFTOqu3g==", + "dev": true, + "license": "MIT", + "dependencies": { + "alphanum-sort": "^1.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-selector-parser": "^3.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-minify-selectors/node_modules/postcss-selector-parser": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", + "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", + "dev": true, + "license": "MIT", + "dependencies": { + "dot-prop": "^5.2.0", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/postcss-modules-extract-imports": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.1.0.tgz", + "integrity": "sha512-zF9+UIEvtpeqMGxhpeT9XaIevQSrBBCz9fi7SwfkmjVacsSj8DY5eFVgn+wY8I9vvdDDwK5xC8Myq4UkoLFIkA==", + "dev": true, + "license": "ISC", + "dependencies": { + "postcss": "^6.0.1" + } + }, + "node_modules/postcss-modules-extract-imports/node_modules/postcss": { + "version": "6.0.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", + "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/postcss-modules-local-by-default": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.2.0.tgz", + "integrity": "sha512-X4cquUPIaAd86raVrBwO8fwRfkIdbwFu7CTfEOjiZQHVQwlHRSkTgH5NLDmMm5+1hQO8u6dZ+TOOJDbay1hYpA==", + "dev": true, + "license": "MIT", + "dependencies": { + "css-selector-tokenizer": "^0.7.0", + "postcss": "^6.0.1" + } + }, + "node_modules/postcss-modules-local-by-default/node_modules/postcss": { + "version": "6.0.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", + "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/postcss-modules-scope": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-1.1.0.tgz", + "integrity": "sha512-LTYwnA4C1He1BKZXIx1CYiHixdSe9LWYVKadq9lK5aCCMkoOkFyZ7aigt+srfjlRplJY3gIol6KUNefdMQJdlw==", + "dev": true, + "license": "ISC", + "dependencies": { + "css-selector-tokenizer": "^0.7.0", + "postcss": "^6.0.1" + } + }, + "node_modules/postcss-modules-scope/node_modules/postcss": { + "version": "6.0.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", + "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/postcss-modules-values": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-1.3.0.tgz", + "integrity": "sha512-i7IFaR9hlQ6/0UgFuqM6YWaCfA1Ej8WMg8A5DggnH1UGKJvTV/ugqq/KaULixzzOi3T/tF6ClBXcHGCzdd5unA==", + "dev": true, + "license": "ISC", + "dependencies": { + "icss-replace-symbols": "^1.1.0", + "postcss": "^6.0.1" + } + }, + "node_modules/postcss-modules-values/node_modules/postcss": { + "version": "6.0.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", + "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/postcss-normalize-charset": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-4.0.1.tgz", + "integrity": "sha512-gMXCrrlWh6G27U0hF3vNvR3w8I1s2wOBILvA87iNXaPvSNo5uZAMYsZG7XjCUf1eVxuPfyL4TJ7++SGZLc9A3g==", + "dev": true, + "license": "MIT", + "dependencies": { + "postcss": "^7.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-normalize-display-values": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.2.tgz", + "integrity": "sha512-3F2jcsaMW7+VtRMAqf/3m4cPFhPD3EFRgNs18u+k3lTJJlVe7d0YPO+bnwqo2xg8YiRpDXJI2u8A0wqJxMsQuQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "cssnano-util-get-match": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-normalize-positions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-4.0.2.tgz", + "integrity": "sha512-Dlf3/9AxpxE+NF1fJxYDeggi5WwV35MXGFnnoccP/9qDtFrTArZ0D0R+iKcg5WsUd8nUYMIl8yXDCtcrT8JrdA==", + "dev": true, + "license": "MIT", + "dependencies": { + "cssnano-util-get-arguments": "^4.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-normalize-repeat-style": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.2.tgz", + "integrity": "sha512-qvigdYYMpSuoFs3Is/f5nHdRLJN/ITA7huIoCyqqENJe9PvPmLhNLMu7QTjPdtnVf6OcYYO5SHonx4+fbJE1+Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "cssnano-util-get-arguments": "^4.0.0", + "cssnano-util-get-match": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-normalize-string": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-4.0.2.tgz", + "integrity": "sha512-RrERod97Dnwqq49WNz8qo66ps0swYZDSb6rM57kN2J+aoyEAJfZ6bMx0sx/F9TIEX0xthPGCmeyiam/jXif0eA==", + "dev": true, + "license": "MIT", + "dependencies": { + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-normalize-timing-functions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.2.tgz", + "integrity": "sha512-acwJY95edP762e++00Ehq9L4sZCEcOPyaHwoaFOhIwWCDfik6YvqsYNxckee65JHLKzuNSSmAdxwD2Cud1Z54A==", + "dev": true, + "license": "MIT", + "dependencies": { + "cssnano-util-get-match": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-normalize-unicode": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-4.0.1.tgz", + "integrity": "sha512-od18Uq2wCYn+vZ/qCOeutvHjB5jm57ToxRaMeNuf0nWVHaP9Hua56QyMF6fs/4FSUnVIw0CBPsU0K4LnBPwYwg==", + "dev": true, + "license": "MIT", + "dependencies": { + "browserslist": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-normalize-url": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-4.0.1.tgz", + "integrity": "sha512-p5oVaF4+IHwu7VpMan/SSpmpYxcJMtkGppYf0VbdH5B6hN8YNmVyJLuY9FmLQTzY3fag5ESUUHDqM+heid0UVA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-absolute-url": "^2.0.0", + "normalize-url": "^3.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-normalize-whitespace": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.2.tgz", + "integrity": "sha512-tO8QIgrsI3p95r8fyqKV+ufKlSHh9hMJqACqbv2XknufqEDhDvbguXGBBqxw9nsQoXWf0qOqppziKJKHMD4GtA==", + "dev": true, + "license": "MIT", + "dependencies": { + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-ordered-values": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-4.1.2.tgz", + "integrity": "sha512-2fCObh5UanxvSxeXrtLtlwVThBvHn6MQcu4ksNT2tsaV2Fg76R2CV98W7wNSlX+5/pFwEyaDwKLLoEV7uRybAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "cssnano-util-get-arguments": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-reduce-initial": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-4.0.3.tgz", + "integrity": "sha512-gKWmR5aUulSjbzOfD9AlJiHCGH6AEVLaM0AV+aSioxUDd16qXP1PCh8d1/BGVvpdWn8k/HiK7n6TjeoXN1F7DA==", + "dev": true, + "license": "MIT", + "dependencies": { + "browserslist": "^4.0.0", + "caniuse-api": "^3.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-reduce-transforms": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.2.tgz", + "integrity": "sha512-EEVig1Q2QJ4ELpJXMZR8Vt5DQx8/mo+dGWSR7vWXqcob2gQLyQGsionYcGKATXvQzMPn6DSN1vTN7yFximdIAg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cssnano-util-get-match": "^4.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", + "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-svgo": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-4.0.3.tgz", + "integrity": "sha512-NoRbrcMWTtUghzuKSoIm6XV+sJdvZ7GZSc3wdBN0W19FTtp2ko8NqLsgoh/m9CzNhU3KLPvQmjIwtaNFkaFTvw==", + "dev": true, + "license": "MIT", + "dependencies": { + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0", + "svgo": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-unique-selectors": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-4.0.1.tgz", + "integrity": "sha512-+JanVaryLo9QwZjKrmJgkI4Fn8SBgRO6WXQBJi7KiAVPlmxikB5Jzc4EvXMT2H0/m0RjrVVm9rGNhZddm/8Spg==", + "dev": true, + "license": "MIT", + "dependencies": { + "alphanum-sort": "^1.0.0", + "postcss": "^7.0.0", + "uniqs": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/postcss/node_modules/picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true, + "license": "ISC" + }, + "node_modules/posthtml": { + "version": "0.11.6", + "resolved": "https://registry.npmjs.org/posthtml/-/posthtml-0.11.6.tgz", + "integrity": "sha512-C2hrAPzmRdpuL3iH0TDdQ6XCc9M7Dcc3zEW5BLerY65G4tWWszwv6nG/ksi6ul5i2mx22ubdljgktXCtNkydkw==", + "dev": true, + "license": "MIT", + "dependencies": { + "posthtml-parser": "^0.4.1", + "posthtml-render": "^1.1.5" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/posthtml-parser": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/posthtml-parser/-/posthtml-parser-0.4.2.tgz", + "integrity": "sha512-BUIorsYJTvS9UhXxPTzupIztOMVNPa/HtAm9KHni9z6qEfiJ1bpOBL5DfUOL9XAc3XkLIEzBzpph+Zbm4AdRAg==", + "dev": true, + "license": "MIT", + "dependencies": { + "htmlparser2": "^3.9.2" + } + }, + "node_modules/posthtml-parser/node_modules/dom-serializer": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", + "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "domelementtype": "^2.0.1", + "entities": "^2.0.0" + } + }, + "node_modules/posthtml-parser/node_modules/dom-serializer/node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "BSD-2-Clause" + }, + "node_modules/posthtml-parser/node_modules/dom-serializer/node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "dev": true, + "license": "BSD-2-Clause", + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/posthtml-parser/node_modules/domelementtype": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", + "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/posthtml-parser/node_modules/domhandler": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", + "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "domelementtype": "1" + } + }, + "node_modules/posthtml-parser/node_modules/domutils": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", + "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "dom-serializer": "0", + "domelementtype": "1" + } + }, + "node_modules/posthtml-parser/node_modules/entities": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", + "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==", + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/posthtml-parser/node_modules/htmlparser2": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", + "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "domelementtype": "^1.3.1", + "domhandler": "^2.3.0", + "domutils": "^1.5.1", + "entities": "^1.1.1", + "inherits": "^2.0.1", + "readable-stream": "^3.1.1" + } + }, + "node_modules/posthtml-render": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/posthtml-render/-/posthtml-render-1.4.0.tgz", + "integrity": "sha512-W1779iVHGfq0Fvh2PROhCe2QhB8mEErgqzo1wpIt36tCgChafP+hbXIhLDOM8ePJrZcFs0vkNEtdibEWVqChqw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/pretty": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pretty/-/pretty-2.0.0.tgz", + "integrity": "sha512-G9xUchgTEiNpormdYBl+Pha50gOUovT18IvAe7EYMZ1/f9W/WWMPRn+xI68yXNMUk3QXHDwo/1wV/4NejVNe1w==", + "dependencies": { + "condense-newlines": "^0.2.1", + "extend-shallow": "^2.0.1", + "js-beautify": "^1.6.12" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/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==", + "dev": true, + "license": "MIT" + }, + "node_modules/progress-stream": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/progress-stream/-/progress-stream-1.2.0.tgz", + "integrity": "sha1-LNPP6jO6OonJwSHsM0er6asSX3c=", + "dependencies": { + "speedometer": "~0.1.2", + "through2": "~0.2.3" + } + }, + "node_modules/promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=" + }, + "node_modules/proto-list": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", + "integrity": "sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk=" + }, + "node_modules/prr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=" + }, + "node_modules/pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=" + }, + "node_modules/psl": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", + "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==" + }, + "node_modules/public-encrypt": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", + "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "bn.js": "^4.1.0", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "parse-asn1": "^5.0.0", + "randombytes": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/public-encrypt/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true, + "license": "MIT" + }, + "node_modules/punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "engines": { + "node": ">=6" + } + }, + "node_modules/purgecss": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/purgecss/-/purgecss-2.3.0.tgz", + "integrity": "sha512-BE5CROfVGsx2XIhxGuZAT7rTH9lLeQx/6M0P7DTXQH4IUc3BBzs9JUzt4yzGf3JrH9enkeq6YJBe9CTtkm1WmQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "commander": "^5.0.0", + "glob": "^7.0.0", + "postcss": "7.0.32", + "postcss-selector-parser": "^6.0.2" + }, + "bin": { + "purgecss": "bin/purgecss" + } + }, + "node_modules/purgecss/node_modules/commander": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", + "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/purgecss/node_modules/postcss": { + "version": "7.0.32", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz", + "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + }, + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + } + }, + "node_modules/purgecss/node_modules/supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/q": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", + "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=", + "engines": { + "node": ">=0.6.0", + "teleport": ">=0.2.0" + } + }, + "node_modules/qs": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", + "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.0.6" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/query-string": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-7.1.3.tgz", + "integrity": "sha512-hh2WYhq4fi8+b+/2Kg9CEge4fDPvHS534aOOvOZeQ3+Vf2mCFsaFBYj0i+iXcAq6I9Vzp5fjMFBlONvayDC1qg==", + "dependencies": { + "decode-uri-component": "^0.2.2", + "filter-obj": "^1.1.0", + "split-on-first": "^1.0.0", + "strict-uri-encode": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/query-string/node_modules/strict-uri-encode": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz", + "integrity": "sha512-QwiXZgpRcKkhTj2Scnn++4PKtWsH0kpzZ62L2R6c/LUVYv7hVnZqcg2+sMuT6R7Jusu1vviK/MFsu6kNJfWlEQ==", + "engines": { + "node": ">=4" + } + }, + "node_modules/querystring": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.1.tgz", + "integrity": "sha512-wkvS7mL/JMugcup3/rMitHmd9ecIGd2lhFhK9N3UUQ450h66d1r3Y9nvXzQAW1Lq+wyx61k/1pfKS5KuKiyEbg==", + "deprecated": "The querystring API is considered Legacy. new code should use the URLSearchParams API instead.", + "engines": { + "node": ">=0.4.x" + } + }, + "node_modules/querystring-es3": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", + "integrity": "sha512-773xhDQnZBMFobEiztv8LIl70ch5MSF/jUQVlhwFyBILqq96anmoctVIYz+ZRp0qbCKATTn6ev02M3r7Ga5vqA==", + "dev": true, + "engines": { + "node": ">=0.4.x" + } + }, + "node_modules/querystringify": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==" + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/quote-stream": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/quote-stream/-/quote-stream-1.0.2.tgz", + "integrity": "sha512-kKr2uQ2AokadPjvTyKJQad9xELbZwYzWlNfI3Uz2j/ib5u6H9lDP7fUUR//rMycd0gv4Z5P1qXMfXR8YpIxrjQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer-equal": "0.0.1", + "minimist": "^1.1.3", + "through2": "^2.0.0" + }, + "bin": { + "quote-stream": "bin/cmd.js" + } + }, + "node_modules/quote-stream/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/quote-stream/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "license": "MIT", + "dependencies": { + "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" + } + }, + "node_modules/quote-stream/node_modules/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==", + "dev": true, + "license": "MIT" + }, + "node_modules/quote-stream/node_modules/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==", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/quote-stream/node_modules/through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, + "node_modules/quote-stream/node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.4" + } + }, + "node_modules/rage-edit": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/rage-edit/-/rage-edit-1.2.0.tgz", + "integrity": "sha512-0RspBRc2s6We4g7hRCvT5mu7YPEnfjvQK8Tt354a2uUNJCMC7MKLvo/1mLvHUCQ/zbP6siQyp5VRZN7UCpMFZg==" + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/randomfill": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", + "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", + "dev": true, + "license": "MIT", + "dependencies": { + "randombytes": "^2.0.5", + "safe-buffer": "^5.1.0" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/readdirp": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", + "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/readdirp/node_modules/braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "license": "MIT", + "dependencies": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/readdirp/node_modules/fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/readdirp/node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/readdirp/node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", + "dev": true, + "license": "MIT", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/readdirp/node_modules/is-number/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/readdirp/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/readdirp/node_modules/micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "license": "MIT", + "dependencies": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/readdirp/node_modules/micromatch/node_modules/extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/readdirp/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "license": "MIT", + "dependencies": { + "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" + } + }, + "node_modules/readdirp/node_modules/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==", + "dev": true, + "license": "MIT" + }, + "node_modules/readdirp/node_modules/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==", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/readdirp/node_modules/to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/readjson": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/readjson/-/readjson-2.2.2.tgz", + "integrity": "sha512-PdeC9tsmLWBiL8vMhJvocq+OezQ3HhsH2HrN7YkhfYcTjQSa/iraB15A7Qvt7Xpr0Yd2rDNt6GbFwVQDg3HcAw==", + "license": "MIT", + "dependencies": { + "jju": "^1.4.0", + "try-catch": "^3.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/regenerate": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", + "dev": true, + "license": "MIT" + }, + "node_modules/regenerate-unicode-properties": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.0.tgz", + "integrity": "sha512-DqHn3DwbmmPVzeKj9woBadqmXxLvQoQIwu7nopMc72ztvxVmVk2SBhSnx67zuye5TP+lJsb/TBQsjLKhnDf3MA==", + "dev": true, + "license": "MIT", + "dependencies": { + "regenerate": "^1.4.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==", + "dev": true, + "license": "MIT" + }, + "node_modules/regenerator-transform": { + "version": "0.15.2", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.2.tgz", + "integrity": "sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.8.4" + } + }, + "node_modules/regex-not": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", + "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "dev": true, + "license": "MIT", + "dependencies": { + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/regex-not/node_modules/extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/regex-not/node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/regexp.prototype.flags": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz", + "integrity": "sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.6", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "set-function-name": "^2.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/regexpu-core": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-6.1.1.tgz", + "integrity": "sha512-k67Nb9jvwJcJmVpw0jPttR1/zVfnKf8Km0IPatrU/zJ5XeG3+Slx0xLXs9HByJSzXzrlz5EDvN6yLNMDc2qdnw==", + "dev": true, + "license": "MIT", + "dependencies": { + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.2.0", + "regjsgen": "^0.8.0", + "regjsparser": "^0.11.0", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regjsgen": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.8.0.tgz", + "integrity": "sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/regjsparser": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.11.2.tgz", + "integrity": "sha512-3OGZZ4HoLJkkAZx/48mTXJNlmqTGOzc0o9OWQPuWpkOlXXPbyN6OafCcoXUnBqE2D3f/T5L+pWc1kdEmnfnRsA==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "jsesc": "~3.0.2" + }, + "bin": { + "regjsparser": "bin/parser" + } + }, + "node_modules/relateurl": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", + "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==", + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/remedial": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/remedial/-/remedial-1.0.8.tgz", + "integrity": "sha512-/62tYiOe6DzS5BqVsNpH/nkGlX45C/Sp6V+NtiN6JQNS1Viay7cWkazmRkrQrdFj2eshDe96SIQNIoMxqhzBOg==", + "engines": { + "node": "*" + } + }, + "node_modules/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==", + "dev": true, + "license": "ISC" + }, + "node_modules/remove-trailing-spaces": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/remove-trailing-spaces/-/remove-trailing-spaces-1.0.8.tgz", + "integrity": "sha512-O3vsMYfWighyFbTd8hk8VaSj9UAGENxAtX+//ugIst2RMk5e03h6RoIS+0ylsFxY1gvmPuAY/PO4It+gPEeySA==" + }, + "node_modules/repeat-element": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz", + "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/request": { + "version": "2.88.2", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", + "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", + "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.3", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.5.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/request-promise-core": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.4.tgz", + "integrity": "sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw==", + "dev": true, + "license": "ISC", + "dependencies": { + "lodash": "^4.17.19" + }, + "engines": { + "node": ">=0.10.0" + }, + "peerDependencies": { + "request": "^2.34" + } + }, + "node_modules/request-promise-native": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.9.tgz", + "integrity": "sha512-wcW+sIUiWnKgNY0dqCpOZkUbF/I+YPi+f09JZIDa39Ec+q82CpSYniDp+ISgTTbKmnpJWASeJBPZmoxH84wt3g==", + "deprecated": "request-promise-native has been deprecated because it extends the now deprecated request package, see https://github.com/request/request/issues/3142", + "dev": true, + "license": "ISC", + "dependencies": { + "request-promise-core": "1.1.4", + "stealthy-require": "^1.1.1", + "tough-cookie": "^2.3.3" + }, + "engines": { + "node": ">=0.12.0" + }, + "peerDependencies": { + "request": "^2.34" + } + }, + "node_modules/request/node_modules/form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 0.12" + } + }, + "node_modules/request/node_modules/qs": { + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", + "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-like": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/require-like/-/require-like-0.1.2.tgz", + "integrity": "sha1-rW8wwTvs15cBDEaK+ndcDAprR/o=", + "engines": { + "node": "*" + } + }, + "node_modules/require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" + }, + "node_modules/requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==" + }, + "node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "dev": true, + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==", + "deprecated": "https://github.com/lydell/resolve-url#deprecated", + "dev": true, + "license": "MIT" + }, + "node_modules/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==", + "dev": true, + "license": "MIT", + "dependencies": { + "onetime": "^2.0.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/ret": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rgb-regex": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/rgb-regex/-/rgb-regex-1.0.1.tgz", + "integrity": "sha512-gDK5mkALDFER2YLqH6imYvK6g02gpNGM4ILDZ472EwWfXZnC2ZEpoB2ECXTyOVUKuk/bPJZMzwQPBYICzP+D3w==", + "dev": true, + "license": "MIT" + }, + "node_modules/rgba-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/rgba-regex/-/rgba-regex-1.0.0.tgz", + "integrity": "sha512-zgn5OjNQXLUTdq8m17KdaicF6w89TZs8ZU8y0AYENIU6wG8GG6LLm0yLSiPY8DmaYmHdgRW8rnApjoT0fQRfMg==", + "dev": true, + "license": "MIT" + }, + "node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/ripemd160": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", + "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", + "dev": true, + "license": "MIT", + "dependencies": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1" + } + }, + "node_modules/rotating-file-stream": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/rotating-file-stream/-/rotating-file-stream-3.2.3.tgz", + "integrity": "sha512-cfmm3tqdnbuYw2FBmRTPBDaohYEbMJ3211T35o6eZdr4d7v69+ZeK1Av84Br7FLj2dlzyeZSbN6qTuXXE6dawQ==", + "engines": { + "node": ">=14.0" + }, + "funding": { + "url": "https://www.blockchain.com/btc/address/12p1p5q7sK75tPyuesZmssiMYr4TKzpSCN" + } + }, + "node_modules/run-applescript": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-3.2.0.tgz", + "integrity": "sha512-Ep0RsvAjnRcBX1p5vogbaBdAGu/8j/ewpvGqnQYunnLd9SM0vWcPJewPKNnWFggf0hF0pwIgwV5XK7qQ7UZ8Qg==", + "dependencies": { + "execa": "^0.10.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/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==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/safe-array-concat": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz", + "integrity": "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "get-intrinsic": "^1.2.4", + "has-symbols": "^1.0.3", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-array-concat/node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true + }, + "node_modules/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==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/safe-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg==", + "dev": true, + "license": "MIT", + "dependencies": { + "ret": "~0.1.10" + } + }, + "node_modules/safe-regex-test": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz", + "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-regex": "^1.1.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "node_modules/sanitize-filename": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/sanitize-filename/-/sanitize-filename-1.6.3.tgz", + "integrity": "sha512-y/52Mcy7aw3gRm7IrcGDFx/bCk4AhRh2eI9luHOQM86nZsqwiRkkq2GekHXBBD+SmPidc8i2PqtYZl+pWJ8Oeg==", + "dependencies": { + "truncate-utf8-bytes": "^1.0.0" + } + }, + "node_modules/sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", + "dev": true, + "license": "ISC" + }, + "node_modules/saxes": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", + "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", + "dependencies": { + "xmlchars": "^2.2.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/send": { + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", + "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/send/node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true, + "license": "MIT", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/send/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/serialize-to-js": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/serialize-to-js/-/serialize-to-js-3.1.2.tgz", + "integrity": "sha512-owllqNuDDEimQat7EPG0tH7JjO090xKNzUtYz6X+Sk2BXDnOCilDdNLwjWeFywG9xkJul1ULvtUQa9O4pUaY0w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/serve-static": { + "version": "1.16.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", + "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", + "dev": true, + "license": "MIT", + "dependencies": { + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.19.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/server-destroy": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/server-destroy/-/server-destroy-1.0.1.tgz", + "integrity": "sha512-rb+9B5YBIEzYcD6x2VKidaa+cqYBJQKnU4oe4E3ANwRRN56yk/ua1YCJT1n21NTS8w6CcOclAKNP3PhdCXKYtQ==" + }, + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" + }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-function-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", + "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", + "dev": true, + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-value": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", + "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", + "dev": true, + "license": "MIT", + "dependencies": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", + "dev": true, + "license": "MIT" + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "dev": true, + "license": "ISC" + }, + "node_modules/sha.js": { + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "dev": true, + "license": "(MIT AND BSD-3-Clause)", + "dependencies": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + }, + "bin": { + "sha.js": "bin.js" + } + }, + "node_modules/shallow-copy": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/shallow-copy/-/shallow-copy-0.0.1.tgz", + "integrity": "sha512-b6i4ZpVuUxB9h5gfCxPiusKYkqTMOjEbBs4wMaFbkfia4yFv92UKZ6Df8WXcKbn08JNL/abvg3FnMAOfakDvUw==", + "dev": true, + "license": "MIT" + }, + "node_modules/sharp": { + "version": "0.33.4", + "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.33.4.tgz", + "integrity": "sha512-7i/dt5kGl7qR4gwPRD2biwD2/SvBn3O04J77XKFgL2OnZtQw+AG9wnuS/csmu80nPRHLYE9E41fyEiG8nhH6/Q==", + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "color": "^4.2.3", + "detect-libc": "^2.0.3", + "semver": "^7.6.0" + }, + "engines": { + "libvips": ">=8.15.2", + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-darwin-arm64": "0.33.4", + "@img/sharp-darwin-x64": "0.33.4", + "@img/sharp-libvips-darwin-arm64": "1.0.2", + "@img/sharp-libvips-darwin-x64": "1.0.2", + "@img/sharp-libvips-linux-arm": "1.0.2", + "@img/sharp-libvips-linux-arm64": "1.0.2", + "@img/sharp-libvips-linux-s390x": "1.0.2", + "@img/sharp-libvips-linux-x64": "1.0.2", + "@img/sharp-libvips-linuxmusl-arm64": "1.0.2", + "@img/sharp-libvips-linuxmusl-x64": "1.0.2", + "@img/sharp-linux-arm": "0.33.4", + "@img/sharp-linux-arm64": "0.33.4", + "@img/sharp-linux-s390x": "0.33.4", + "@img/sharp-linux-x64": "0.33.4", + "@img/sharp-linuxmusl-arm64": "0.33.4", + "@img/sharp-linuxmusl-x64": "0.33.4", + "@img/sharp-wasm32": "0.33.4", + "@img/sharp-win32-ia32": "0.33.4", + "@img/sharp-win32-x64": "0.33.4" + } + }, + "node_modules/sharp/node_modules/semver": { + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", + "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "dependencies": { + "shebang-regex": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/shell-escape": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/shell-escape/-/shell-escape-0.2.0.tgz", + "integrity": "sha512-uRRBT2MfEOyxuECseCZd28jC1AJ8hmqqneWQ4VWUTgCAFvb3wKU1jLqj6egC4Exrr88ogg3dp+zroH4wJuaXzw==" + }, + "node_modules/showdown": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/showdown/-/showdown-2.1.0.tgz", + "integrity": "sha512-/6NVYu4U819R2pUIk79n67SYgJHWCce0a5xTP979WbNp0FL9MN1I1QK662IDU1b6JzKTvmhgI7T7JYIxBi3kMQ==", + "license": "MIT", + "dependencies": { + "commander": "^9.0.0" + }, + "bin": { + "showdown": "bin/showdown.js" + }, + "funding": { + "type": "individual", + "url": "https://www.paypal.me/tiviesantos" + } + }, + "node_modules/showdown/node_modules/commander": { + "version": "9.5.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", + "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", + "license": "MIT", + "engines": { + "node": "^12.20.0 || >=14" + } + }, + "node_modules/side-channel": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", + "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", + "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==" + }, + "node_modules/simple-swizzle": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", + "dependencies": { + "is-arrayish": "^0.3.1" + } + }, + "node_modules/simple-swizzle/node_modules/is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" + }, + "node_modules/simport": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/simport/-/simport-1.2.0.tgz", + "integrity": "sha512-85Bm7pKsqiiQ8rmYCaPDdlXZjJvuW6/k/FY8MTtLFMgU7f8S00CgTHfRtWB6KwSb6ek4p9YyG2enG1+yJbl+CA==", + "license": "MIT", + "dependencies": { + "readjson": "^2.2.0", + "try-to-catch": "^3.0.0" + }, + "engines": { + "node": ">=12.2" + } + }, + "node_modules/slash": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", + "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/slide": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/slide/-/slide-1.1.6.tgz", + "integrity": "sha1-VusCfWW00tzmyy4tMsTUr8nh1wc=", + "engines": { + "node": "*" + } + }, + "node_modules/snapdragon": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", + "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "dev": true, + "license": "MIT", + "dependencies": { + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", + "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node/node_modules/define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-util": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", + "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "kind-of": "^3.2.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-util/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/is-descriptor": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.7.tgz", + "integrity": "sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-accessor-descriptor": "^1.0.1", + "is-data-descriptor": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/snapdragon/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-resolve": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", + "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", + "deprecated": "See https://github.com/lydell/source-map-resolve#deprecated", + "dev": true, + "license": "MIT", + "dependencies": { + "atob": "^2.1.2", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" + } + }, + "node_modules/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==", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/source-map-url": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", + "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==", + "deprecated": "See https://github.com/lydell/source-map-url#deprecated", + "dev": true, + "license": "MIT" + }, + "node_modules/speedometer": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/speedometer/-/speedometer-0.1.4.tgz", + "integrity": "sha1-mHbb0qFp0xFUAtSObqYynIgWpQ0=" + }, + "node_modules/split-on-first": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/split-on-first/-/split-on-first-1.1.0.tgz", + "integrity": "sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw==", + "engines": { + "node": ">=6" + } + }, + "node_modules/split-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", + "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "dev": true, + "license": "MIT", + "dependencies": { + "extend-shallow": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/split-string/node_modules/extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/split-string/node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" + }, + "node_modules/srcset": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/srcset/-/srcset-3.0.1.tgz", + "integrity": "sha512-MM8wDGg5BQJEj94tDrZDrX9wrC439/Eoeg3sgmVLPMjHgrAFeXAKk3tmFlCbKw5k+yOEhPXRpPlRcisQmqWVSQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/sshpk": { + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.18.0.tgz", + "integrity": "sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + }, + "bin": { + "sshpk-conv": "bin/sshpk-conv", + "sshpk-sign": "bin/sshpk-sign", + "sshpk-verify": "bin/sshpk-verify" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ssri": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", + "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", + "dependencies": { + "minipass": "^3.1.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/stable": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", + "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", + "deprecated": "Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility", + "dev": true, + "license": "MIT" + }, + "node_modules/static-eval": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/static-eval/-/static-eval-2.0.2.tgz", + "integrity": "sha512-N/D219Hcr2bPjLxPiV+TQE++Tsmrady7TqAJugLy7Xk1EumfDWS/f5dtBbkRCGE7wKKXuYockQoj8Rm2/pVKyg==", + "dependencies": { + "escodegen": "^1.8.1" + } + }, + "node_modules/static-extend": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", + "integrity": "sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-property": "^0.2.5", + "object-copy": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/is-descriptor": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.7.tgz", + "integrity": "sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-accessor-descriptor": "^1.0.1", + "is-data-descriptor": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/static-module": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/static-module/-/static-module-2.2.5.tgz", + "integrity": "sha512-D8vv82E/Kpmz3TXHKG8PPsCPg+RAX6cbCOyvjM6x04qZtQ47EtJFVwRsdov3n5d6/6ynrOY9XB4JkaZwB2xoRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "concat-stream": "~1.6.0", + "convert-source-map": "^1.5.1", + "duplexer2": "~0.1.4", + "escodegen": "~1.9.0", + "falafel": "^2.1.0", + "has": "^1.0.1", + "magic-string": "^0.22.4", + "merge-source-map": "1.0.4", + "object-inspect": "~1.4.0", + "quote-stream": "~1.0.2", + "readable-stream": "~2.3.3", + "shallow-copy": "~0.0.1", + "static-eval": "^2.0.0", + "through2": "~2.0.3" + } + }, + "node_modules/static-module/node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "dev": true, + "license": "MIT" + }, + "node_modules/static-module/node_modules/escodegen": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.9.1.tgz", + "integrity": "sha512-6hTjO1NAWkHnDk3OqQ4YrCuwwmGHL9S3nPlzBOUG/R44rda3wLNrfvQ5fkSGjyhHFKM7ALPKcKGrwvCLe0lC7Q==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esprima": "^3.1.3", + "estraverse": "^4.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=4.0" + }, + "optionalDependencies": { + "source-map": "~0.6.1" + } + }, + "node_modules/static-module/node_modules/esprima": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz", + "integrity": "sha512-AWwVMNxwhN8+NIPQzAQZCm7RkLC4RbM3B1OobMuyp3i+w73X57KCKaVIxaRZb+DYCojq7rspo+fmuQfAboyhFg==", + "dev": true, + "license": "BSD-2-Clause", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/static-module/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/static-module/node_modules/object-inspect": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.4.1.tgz", + "integrity": "sha512-wqdhLpfCUbEsoEwl3FXwGyv8ief1k/1aUdIPCqVnupM6e8l63BEJdiF/0swtn04/8p05tG/T0FrpTlfwvljOdw==", + "dev": true, + "license": "MIT" + }, + "node_modules/static-module/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "license": "MIT", + "dependencies": { + "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" + } + }, + "node_modules/static-module/node_modules/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==", + "dev": true, + "license": "MIT" + }, + "node_modules/static-module/node_modules/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==", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/static-module/node_modules/through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, + "node_modules/static-module/node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.4" + } + }, + "node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/stealthy-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", + "integrity": "sha512-ZnWpYnYugiOVEY5GkcuJK1io5V8QmNYChG62gSit9pQVGErXtrKuPC55ITaVSukmMta5qpMU7vqLt2Lnni4f/g==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/stream-browserify": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", + "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "~2.0.1", + "readable-stream": "^2.0.2" + } + }, + "node_modules/stream-browserify/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/stream-browserify/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "license": "MIT", + "dependencies": { + "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" + } + }, + "node_modules/stream-browserify/node_modules/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==", + "dev": true, + "license": "MIT" + }, + "node_modules/stream-browserify/node_modules/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==", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/stream-http": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz", + "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "builtin-status-codes": "^3.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.3.6", + "to-arraybuffer": "^1.0.0", + "xtend": "^4.0.0" + } + }, + "node_modules/stream-http/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/stream-http/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "license": "MIT", + "dependencies": { + "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" + } + }, + "node_modules/stream-http/node_modules/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==", + "dev": true, + "license": "MIT" + }, + "node_modules/stream-http/node_modules/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==", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/stream-http/node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.4" + } + }, + "node_modules/stream-parser": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/stream-parser/-/stream-parser-0.3.1.tgz", + "integrity": "sha1-FhhUhpRCACGhGC/wrxkRwSl2F3M=", + "dependencies": { + "debug": "2" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dependencies": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/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==" + }, + "node_modules/string-width-cjs/node_modules/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", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string.prototype.trim": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz", + "integrity": "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.0", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz", + "integrity": "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", + "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strip-outer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/strip-outer/-/strip-outer-1.0.1.tgz", + "integrity": "sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg==", + "dependencies": { + "escape-string-regexp": "^1.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/stylehacks": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-4.0.3.tgz", + "integrity": "sha512-7GlLk9JwlElY4Y6a/rmbH2MhVlTyVmiJd1PfTCqFaIBEGMYNsrO/v3SeGTdhBThLg4Z+NbOk/qFMwCa+J+3p/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "browserslist": "^4.0.0", + "postcss": "^7.0.0", + "postcss-selector-parser": "^3.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/stylehacks/node_modules/postcss-selector-parser": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", + "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", + "dev": true, + "license": "MIT", + "dependencies": { + "dot-prop": "^5.2.0", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/svgo": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.3.2.tgz", + "integrity": "sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==", + "deprecated": "This SVGO version is no longer supported. Upgrade to v2.x.x.", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^2.4.1", + "coa": "^2.0.2", + "css-select": "^2.0.0", + "css-select-base-adapter": "^0.1.1", + "css-tree": "1.0.0-alpha.37", + "csso": "^4.0.2", + "js-yaml": "^3.13.1", + "mkdirp": "~0.5.1", + "object.values": "^1.1.0", + "sax": "~1.2.4", + "stable": "^0.1.8", + "unquote": "~1.1.1", + "util.promisify": "~1.0.0" + }, + "bin": { + "svgo": "bin/svgo" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/svgo/node_modules/css-select": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz", + "integrity": "sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^3.2.1", + "domutils": "^1.7.0", + "nth-check": "^1.0.2" + } + }, + "node_modules/svgo/node_modules/css-what": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-3.4.2.tgz", + "integrity": "sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/svgo/node_modules/dom-serializer": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", + "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "domelementtype": "^2.0.1", + "entities": "^2.0.0" + } + }, + "node_modules/svgo/node_modules/domutils": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", + "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "dom-serializer": "0", + "domelementtype": "1" + } + }, + "node_modules/svgo/node_modules/domutils/node_modules/domelementtype": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", + "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/svgo/node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "dev": true, + "license": "BSD-2-Clause", + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/svgo/node_modules/nth-check": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", + "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "~1.0.0" + } + }, + "node_modules/symbol-tree": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==" + }, + "node_modules/tar": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", + "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", + "dependencies": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^5.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/tar/node_modules/minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/tar/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/tar/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "node_modules/terser": { + "version": "5.34.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.34.1.tgz", + "integrity": "sha512-FsJZ7iZLd/BXkz+4xrRTGJ26o/6VTjQytUk8b8OxkwcD2I+79VPJlz7qss1+zE7h8GNIScFqXcDyJ/KqBYZFVA==", + "license": "BSD-2-Clause", + "dependencies": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "license": "MIT" + }, + "node_modules/throttle": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/throttle/-/throttle-1.0.3.tgz", + "integrity": "sha1-ijLkoV8XY9mXlIMXxevjrYpB5Lc=", + "dependencies": { + "readable-stream": ">= 0.3.0", + "stream-parser": ">= 0.0.2" + }, + "engines": { + "node": ">= v0.8.0" + } + }, + "node_modules/through2": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/through2/-/through2-0.2.3.tgz", + "integrity": "sha1-6zKE2k6jEbbMis42U3SKUqvyWj8=", + "dependencies": { + "readable-stream": "~1.1.9", + "xtend": "~2.1.1" + } + }, + "node_modules/through2/node_modules/readable-stream": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "node_modules/through2/node_modules/string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" + }, + "node_modules/timers-browserify": { + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.12.tgz", + "integrity": "sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "setimmediate": "^1.0.4" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/timsort": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz", + "integrity": "sha512-qsdtZH+vMoCARQtyod4imc2nIJwg9Cc7lPRrw9CzF8ZKR0khdr8+2nX80PBhET3tcyTtJDxAffGh2rXH4tyU8A==", + "dev": true, + "license": "MIT" + }, + "node_modules/tiny-inflate": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tiny-inflate/-/tiny-inflate-1.0.3.tgz", + "integrity": "sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==", + "dev": true, + "license": "MIT" + }, + "node_modules/to-arraybuffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", + "integrity": "sha512-okFlQcoGTi4LQBG/PgSYblw9VOyptsz2KJZqc6qtgGdes8VktzUQkj4BI2blit072iS8VODNcMA+tvnS9dnuMA==", + "dev": true, + "license": "MIT" + }, + "node_modules/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==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-object-path": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", + "integrity": "sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg==", + "dev": true, + "license": "MIT", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-object-path/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-regex": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", + "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/to-regex/node_modules/extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-regex/node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/tough-cookie": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/tr46": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", + "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", + "dependencies": { + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/trash": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/trash/-/trash-4.3.0.tgz", + "integrity": "sha512-f36TKwIaBiXm63xSrn8OTNghg5CYHBsFVJvcObMo76LRpgariuRi2CqXQHw1VzfeximD0igdGaonOG6N760BtQ==", + "dependencies": { + "escape-string-applescript": "^2.0.0", + "fs-extra": "^0.30.0", + "globby": "^7.1.1", + "p-map": "^1.2.0", + "p-try": "^1.0.0", + "pify": "^3.0.0", + "run-applescript": "^3.0.0", + "uuid": "^3.1.0", + "xdg-trashdir": "^2.1.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/trim-repeated": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/trim-repeated/-/trim-repeated-1.0.0.tgz", + "integrity": "sha1-42RqLqTokTEr9+rObPsFOAvAHCE=", + "dependencies": { + "escape-string-regexp": "^1.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/truncate-utf8-bytes": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz", + "integrity": "sha512-95Pu1QXQvruGEhv62XCMO3Mm90GscOCClvrIUwCM0PYOXK3kaF3l3sIHxx71ThJfcbM2O5Au6SO3AWCSEfW4mQ==", + "dependencies": { + "utf8-byte-length": "^1.0.1" + } + }, + "node_modules/try-catch": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/try-catch/-/try-catch-3.0.1.tgz", + "integrity": "sha512-91yfXw1rr/P6oLpHSyHDOHm0vloVvUoo9FVdw8YwY05QjJQG9OT0LUxe2VRAzmHG+0CUOmI3nhxDUMLxDN/NEQ==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/try-to-catch": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/try-to-catch/-/try-to-catch-3.0.1.tgz", + "integrity": "sha512-hOY83V84Hx/1sCzDSaJA+Xz2IIQOHRvjxzt+F0OjbQGPZ6yLPLArMA0gw/484MlfUkQbCpKYMLX3VDCAjWKfzQ==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/tslib": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.1.0.tgz", + "integrity": "sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A==" + }, + "node_modules/tslog": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/tslog/-/tslog-3.3.4.tgz", + "integrity": "sha512-N0HHuHE0e/o75ALfkioFObknHR5dVchUad4F0XyFf3gXJYB++DewEzwGI/uIOM216E5a43ovnRNEeQIq9qgm4Q==", + "dependencies": { + "source-map-support": "^0.5.21" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/tty-browserify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", + "integrity": "sha512-JVa5ijo+j/sOoHGjw0sxw734b1LhBkQ3bvUGNdxnVXDCX81Yx7TFgnZygxrIIWn23hbfTaMYLwRmAxFyDuFmIw==", + "dev": true, + "license": "MIT" + }, + "node_modules/tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" + } + }, + "node_modules/turndown": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/turndown/-/turndown-7.2.0.tgz", + "integrity": "sha512-eCZGBN4nNNqM9Owkv9HAtWRYfLA4h909E/WGAWWBpmB275ehNhZyk87/Tpvjbp0jjNl9XwCsbe6bm6CqFsgD+A==", + "license": "MIT", + "dependencies": { + "@mixmark-io/domino": "^2.2.0" + } + }, + "node_modules/tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", + "dev": true, + "license": "Unlicense" + }, + "node_modules/type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "dependencies": { + "prelude-ls": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/typed-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz", + "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/typed-array-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz", + "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-byte-offset": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz", + "integrity": "sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-length": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.6.tgz", + "integrity": "sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13", + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/typescript": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", + "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/unbox-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/uncss": { + "version": "0.17.3", + "resolved": "https://registry.npmjs.org/uncss/-/uncss-0.17.3.tgz", + "integrity": "sha512-ksdDWl81YWvF/X14fOSw4iu8tESDHFIeyKIeDrK6GEVTQvqJc1WlOEXqostNwOCi3qAj++4EaLsdAgPmUbEyog==", + "dev": true, + "license": "MIT", + "dependencies": { + "commander": "^2.20.0", + "glob": "^7.1.4", + "is-absolute-url": "^3.0.1", + "is-html": "^1.1.0", + "jsdom": "^14.1.0", + "lodash": "^4.17.15", + "postcss": "^7.0.17", + "postcss-selector-parser": "6.0.2", + "request": "^2.88.0" + }, + "bin": { + "uncss": "bin/uncss" + }, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/uncss/node_modules/acorn": { + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz", + "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/uncss/node_modules/acorn-globals": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-4.3.4.tgz", + "integrity": "sha512-clfQEh21R+D0leSbUdWf3OcfqyaCSAQ8Ryq00bofSekfr9W8u1jyYZo6ir0xu9Gtcf7BjcHJpnbZH7JOCpP60A==", + "dev": true, + "license": "MIT", + "dependencies": { + "acorn": "^6.0.1", + "acorn-walk": "^6.0.1" + } + }, + "node_modules/uncss/node_modules/acorn-walk": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-6.2.0.tgz", + "integrity": "sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/uncss/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/uncss/node_modules/cssom": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", + "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", + "dev": true, + "license": "MIT" + }, + "node_modules/uncss/node_modules/cssstyle": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-1.4.0.tgz", + "integrity": "sha512-GBrLZYZ4X4x6/QEoBnIrqb8B/f5l4+8me2dkom/j1Gtbxy0kBv6OGzKuAsGM75bkGwGAFkt56Iwg28S3XTZgSA==", + "dev": true, + "license": "MIT", + "dependencies": { + "cssom": "0.3.x" + } + }, + "node_modules/uncss/node_modules/data-urls": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-1.1.0.tgz", + "integrity": "sha512-YTWYI9se1P55u58gL5GkQHW4P6VJBJ5iBT+B5a7i2Tjadhv52paJG0qHX4A0OR6/t52odI64KP2YvFpkDOi3eQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "abab": "^2.0.0", + "whatwg-mimetype": "^2.2.0", + "whatwg-url": "^7.0.0" + } + }, + "node_modules/uncss/node_modules/domexception": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/domexception/-/domexception-1.0.1.tgz", + "integrity": "sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug==", + "deprecated": "Use your platform's native DOMException instead", + "dev": true, + "license": "MIT", + "dependencies": { + "webidl-conversions": "^4.0.2" + } + }, + "node_modules/uncss/node_modules/html-encoding-sniffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz", + "integrity": "sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw==", + "dev": true, + "license": "MIT", + "dependencies": { + "whatwg-encoding": "^1.0.1" + } + }, + "node_modules/uncss/node_modules/is-absolute-url": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-3.0.3.tgz", + "integrity": "sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/uncss/node_modules/jsdom": { + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-14.1.0.tgz", + "integrity": "sha512-O901mfJSuTdwU2w3Sn+74T+RnDVP+FuV5fH8tcPWyqrseRAb0s5xOtPgCFiPOtLcyK7CLIJwPyD83ZqQWvA5ng==", + "dev": true, + "license": "MIT", + "dependencies": { + "abab": "^2.0.0", + "acorn": "^6.0.4", + "acorn-globals": "^4.3.0", + "array-equal": "^1.0.0", + "cssom": "^0.3.4", + "cssstyle": "^1.1.1", + "data-urls": "^1.1.0", + "domexception": "^1.0.1", + "escodegen": "^1.11.0", + "html-encoding-sniffer": "^1.0.2", + "nwsapi": "^2.1.3", + "parse5": "5.1.0", + "pn": "^1.1.0", + "request": "^2.88.0", + "request-promise-native": "^1.0.5", + "saxes": "^3.1.9", + "symbol-tree": "^3.2.2", + "tough-cookie": "^2.5.0", + "w3c-hr-time": "^1.0.1", + "w3c-xmlserializer": "^1.1.2", + "webidl-conversions": "^4.0.2", + "whatwg-encoding": "^1.0.5", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^7.0.0", + "ws": "^6.1.2", + "xml-name-validator": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/uncss/node_modules/parse5": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.0.tgz", + "integrity": "sha512-fxNG2sQjHvlVAYmzBZS9YlDp6PTSSDwa98vkD4QgVDDCAo84z5X1t5XyJQ62ImdLXx5NdIIfihey6xpum9/gRQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/uncss/node_modules/postcss-selector-parser": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.2.tgz", + "integrity": "sha512-36P2QR59jDTOAiIkqEprfJDsoNrvwFei3eCqKd1Y0tUsBimsq39BLp7RD+JWny3WgB1zGhJX8XVePwm9k4wdBg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/uncss/node_modules/saxes": { + "version": "3.1.11", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-3.1.11.tgz", + "integrity": "sha512-Ydydq3zC+WYDJK1+gRxRapLIED9PWeSuuS41wqyoRmzvhhh9nc+QQrVMKJYzJFULazeGhzSV0QleN2wD3boh2g==", + "dev": true, + "license": "ISC", + "dependencies": { + "xmlchars": "^2.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/uncss/node_modules/tr46": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", + "integrity": "sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==", + "dev": true, + "license": "MIT", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/uncss/node_modules/w3c-xmlserializer": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-1.1.2.tgz", + "integrity": "sha512-p10l/ayESzrBMYWRID6xbuCKh2Fp77+sA0doRuGn4tTIMrrZVeqfpKjXHY+oDh3K4nLdPgNwMTVP6Vp4pvqbNg==", + "dev": true, + "license": "MIT", + "dependencies": { + "domexception": "^1.0.1", + "webidl-conversions": "^4.0.2", + "xml-name-validator": "^3.0.0" + } + }, + "node_modules/uncss/node_modules/webidl-conversions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", + "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/uncss/node_modules/whatwg-url": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", + "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", + "dev": true, + "license": "MIT", + "dependencies": { + "lodash.sortby": "^4.7.0", + "tr46": "^1.0.1", + "webidl-conversions": "^4.0.2" + } + }, + "node_modules/uncss/node_modules/ws": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.3.tgz", + "integrity": "sha512-jmTjYU0j60B+vHey6TfR3Z7RD61z/hmxBS3VMSGIrroOWXQEneK1zNuotOUrGyBHQj0yrpsLHPWtigEFd13ndA==", + "dev": true, + "license": "MIT", + "dependencies": { + "async-limiter": "~1.0.0" + } + }, + "node_modules/underscore": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.12.1.tgz", + "integrity": "sha512-hEQt0+ZLDVUMhebKxL4x1BTtDY7bavVofhZ9KZ4aI26X9SRaE+Y3m83XUL1UP2jn8ynjndwCCpEHdUG+9pP1Tw==" + }, + "node_modules/undici-types": { + "version": "6.19.8", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", + "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", + "license": "MIT" + }, + "node_modules/unicode-canonical-property-names-ecmascript": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.1.tgz", + "integrity": "sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", + "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-value-ecmascript": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.2.0.tgz", + "integrity": "sha512-4IehN3V/+kkr5YeSSDDQG8QLqO26XpL2XP3GQtqwlT/QYSECAwFztxVHjlbh0+gjJ3XmNLS0zDsbgs9jWKExLg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-property-aliases-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", + "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-trie": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/unicode-trie/-/unicode-trie-0.3.1.tgz", + "integrity": "sha512-WgVuO0M2jDl7hVfbPgXv2LUrD81HM0bQj/bvLGiw6fJ4Zo8nNFnDrA0/hU2Te/wz6pjxCm5cxJwtLjo2eyV51Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "pako": "^0.2.5", + "tiny-inflate": "^1.0.0" + } + }, + "node_modules/unicode-trie/node_modules/pako": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz", + "integrity": "sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==", + "dev": true, + "license": "MIT" + }, + "node_modules/unicorn-magic": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.1.0.tgz", + "integrity": "sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/union-value": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", + "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", + "dev": true, + "license": "MIT", + "dependencies": { + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^2.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/uniq": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz", + "integrity": "sha512-Gw+zz50YNKPDKXs+9d+aKAjVwpjNwqzvNpLigIruT4HA9lMZNdMqs9x07kKHB/L9WRzqp4+DlTU5s4wG2esdoA==", + "dev": true, + "license": "MIT" + }, + "node_modules/uniqs": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/uniqs/-/uniqs-2.0.0.tgz", + "integrity": "sha512-mZdDpf3vBV5Efh29kMw5tXoup/buMgxLzOt/XKFKcVmi+15ManNQWr6HfZ2aiZTYlYixbdNJ0KFmIZIv52tHSQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/unique-filename": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", + "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", + "dependencies": { + "unique-slug": "^2.0.0" + } + }, + "node_modules/unique-slug": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", + "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", + "dependencies": { + "imurmurhash": "^0.1.4" + } + }, + "node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/unquote": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz", + "integrity": "sha512-vRCqFv6UhXpWxZPyGDh/F3ZpNv8/qo7w6iufLpQg9aKnQ71qM4B5KiI7Mia9COcjEhrO9LueHpMYjYzsWH3OIg==", + "dev": true, + "license": "MIT" + }, + "node_modules/unset-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", + "integrity": "sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-value": "^0.3.1", + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/has-value": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", + "integrity": "sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/has-value/node_modules/isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==", + "dev": true, + "license": "MIT", + "dependencies": { + "isarray": "1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/has-values": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", + "integrity": "sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/upath": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", + "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4", + "yarn": "*" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.1.tgz", + "integrity": "sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.0" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==", + "deprecated": "Please see https://github.com/lydell/urix#deprecated", + "dev": true, + "license": "MIT" + }, + "node_modules/url": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/url/-/url-0.11.4.tgz", + "integrity": "sha512-oCwdVC7mTuWiPyjLUz/COz5TLk6wgp0RCsN+wHZ2Ekneac9w8uuV0njcbbie2ME+Vs+d6duwmYuR3HgQXs1fOg==", + "dev": true, + "license": "MIT", + "dependencies": { + "punycode": "^1.4.1", + "qs": "^6.12.3" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/url-parse": { + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", + "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", + "dependencies": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + }, + "node_modules/url-template": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/url-template/-/url-template-2.0.8.tgz", + "integrity": "sha512-XdVKMF4SJ0nP/O7XIPB0JwAEuT9lDIYnNsK8yGVe43y0AWoKeJNdv3ZNWh7ksJ6KqQFjOO6ox/VEitLnaVNufw==" + }, + "node_modules/url/node_modules/punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/use": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", + "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/user-home": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/user-home/-/user-home-2.0.0.tgz", + "integrity": "sha1-nHC/2Babwdy/SGBODwS4tJzenp8=", + "dependencies": { + "os-homedir": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/utf8-byte-length": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/utf8-byte-length/-/utf8-byte-length-1.0.4.tgz", + "integrity": "sha512-4+wkEYLBbWxqTahEsWrhxepcoVOJ+1z5PGIjPZxRkytcdSUaNjIjBM7Xn8E+pdSuV7SzvWovBFA54FO0JSoqhA==" + }, + "node_modules/util": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz", + "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "2.0.3" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "node_modules/util.promisify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.1.tgz", + "integrity": "sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.2", + "has-symbols": "^1.0.1", + "object.getownpropertydescriptors": "^2.1.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/util/node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", + "dev": true, + "license": "ISC" + }, + "node_modules/uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", + "bin": { + "uuid": "bin/uuid" + } + }, + "node_modules/v8-compile-cache": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.4.0.tgz", + "integrity": "sha512-ocyWc3bAHBB/guyqJQVI5o4BZkPhznPYUG2ea80Gond/BgNWpap8TOmLSeeQG7bnh2KMISxskdADG59j7zruhw==", + "dev": true, + "license": "MIT" + }, + "node_modules/vendors": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.4.tgz", + "integrity": "sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", + "dev": true, + "engines": [ + "node >=0.6.0" + ], + "license": "MIT", + "dependencies": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "node_modules/vlq": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/vlq/-/vlq-0.2.3.tgz", + "integrity": "sha512-DRibZL6DsNhIgYQ+wNdWDL2SL3bKPlVrRiBqV5yuMm++op8W4kGFtaQfCs4KEJn0wBZcHVHJ3eoywX8983k1ow==", + "dev": true, + "license": "MIT" + }, + "node_modules/vm-browserify": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", + "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/w3c-hr-time": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", + "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", + "dependencies": { + "browser-process-hrtime": "^1.0.0" + } + }, + "node_modules/w3c-xmlserializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz", + "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==", + "dependencies": { + "xml-name-validator": "^3.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=", + "dev": true, + "dependencies": { + "defaults": "^1.0.3" + } + }, + "node_modules/webidl-conversions": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", + "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", + "engines": { + "node": ">=10.4" + } + }, + "node_modules/whatwg-encoding": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", + "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", + "dependencies": { + "iconv-lite": "0.4.24" + } + }, + "node_modules/whatwg-mimetype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", + "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==" + }, + "node_modules/whatwg-url": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz", + "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==", + "dependencies": { + "lodash": "^4.7.0", + "tr46": "^2.1.0", + "webidl-conversions": "^6.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, + "dependencies": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=" + }, + "node_modules/which-typed-array": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz", + "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/window-size": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.4.tgz", + "integrity": "sha1-+OGqHuWlPsW/FR/6CXQqatdpeHY=", + "bin": { + "window-size": "cli.js" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wrap-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "dependencies": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/wrap-ansi-cjs/node_modules/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==" + }, + "node_modules/wrap-ansi-cjs/node_modules/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", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "node_modules/write-file-atomic": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-1.3.4.tgz", + "integrity": "sha1-+Aek8LHZ6ROuekgRLmzDrxmRtF8=", + "dependencies": { + "graceful-fs": "^4.1.11", + "imurmurhash": "^0.1.4", + "slide": "^1.1.5" + } + }, + "node_modules/ws": { + "version": "7.5.10", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", + "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/xdg-basedir": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-2.0.0.tgz", + "integrity": "sha1-7byQPMOF/ARSPZZqM1UEtVBNG9I=", + "dependencies": { + "os-homedir": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/xdg-trashdir": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/xdg-trashdir/-/xdg-trashdir-2.1.1.tgz", + "integrity": "sha512-KcVhPaOu2ZurYNHSRTf1+ZHORkTZGCQ+u0JHN17QixRISJq4pXOnjt/lQcehvtHL5QAKhSzKgyjrcNnPdkPBHA==", + "dependencies": { + "@sindresorhus/df": "^2.1.0", + "mount-point": "^3.0.0", + "pify": "^2.2.0", + "user-home": "^2.0.0", + "xdg-basedir": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/xdg-trashdir/node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/xlsx": { + "version": "0.20.2", + "resolved": "https://cdn.sheetjs.com/xlsx-0.20.2/xlsx-0.20.2.tgz", + "integrity": "sha512-+nKZ39+nvK7Qq6i0PvWWRA4j/EkfWOtkP/YhMtupm+lJIiHxUrgTr1CcKv1nBk1rHtkRRQ3O2+Ih/q/sA+FXZA==", + "bin": { + "xlsx": "bin/xlsx.njs" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/xml-name-validator": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", + "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==" + }, + "node_modules/xmlchars": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==" + }, + "node_modules/xtend": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.1.2.tgz", + "integrity": "sha1-bv7MKk2tjmlixJAbM3znuoe10os=", + "dependencies": { + "object-keys": "~0.4.0" + }, + "engines": { + "node": ">=0.4" + } + }, + "node_modules/y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==" + }, + "node_modules/yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=" + }, + "node_modules/yaml": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.7.0.tgz", + "integrity": "sha512-+hSoy/QHluxmC9kCIJyL/uyFmLmc+e5CFR5Wa+bpIhIj85LVb9ZH2nVnqrHoSvKogwODv0ClqZkmiSSaIH5LTA==", + "license": "ISC", + "bin": { + "yaml": "bin.mjs" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/yargs": { + "version": "14.2.3", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-14.2.3.tgz", + "integrity": "sha512-ZbotRWhF+lkjijC/VhmOT9wSgyBQ7+zr13+YLkhfsSiTriYsMzkTUFP18pFhWwBeMa5gUc1MzbhrO6/VB7c9Xg==", + "dependencies": { + "cliui": "^5.0.0", + "decamelize": "^1.2.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^15.0.1" + } + }, + "node_modules/yargs-parser": { + "version": "15.0.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-15.0.3.tgz", + "integrity": "sha512-/MVEVjTXy/cGAjdtQf8dW3V9b97bPN7rNn8ETj6BmAQL7ibC7O1Q9SPJbGjgh3SlwoBNXMzj/ZGIj8mBgl12YA==", + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + }, + "node_modules/yargs/node_modules/find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dependencies": { + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/yargs/node_modules/locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dependencies": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/yargs/node_modules/p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dependencies": { + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/yocto-queue": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.1.1.tgz", + "integrity": "sha512-b4JR1PFR10y1mKjhHY9LaGo6tmrgjit7hxVIeAmyMw3jegXR4dhYqLaQF5zMXZxY7tLpMyJeLjr1C4rLmkVe8g==", + "license": "MIT", + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/zod": { + "version": "3.24.1", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.24.1.tgz", + "integrity": "sha512-muH7gBL9sI1nciMZV67X5fTKKBLtwpZ5VBp1vsOQzj1MhrBZ4wlVCm3gedKZWLp0Oyel8sIGfeiz54Su+OVT+A==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + } + }, + "dependencies": { + "@ampproject/remapping": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "dev": true, + "requires": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "@babel/code-frame": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.0.tgz", + "integrity": "sha512-INCKxTtbXtcNbUZ3YXutwMpEleqttcswhAdee7dhuoVrD2cnuc3PqtERBtxkX5nziX9vnBL8WXmSGwv8CuPV6g==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.25.9", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" + } + }, + "@babel/compat-data": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.0.tgz", + "integrity": "sha512-qETICbZSLe7uXv9VE8T/RWOdIE5qqyTucOt4zLYMafj2MRO271VGgLd4RACJMeBO37UPWhXiKMBk7YlJ0fOzQA==", + "dev": true + }, + "@babel/core": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.0.tgz", + "integrity": "sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg==", + "dev": true, + "requires": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.26.0", + "@babel/generator": "^7.26.0", + "@babel/helper-compilation-targets": "^7.25.9", + "@babel/helper-module-transforms": "^7.26.0", + "@babel/helpers": "^7.26.0", + "@babel/parser": "^7.26.0", + "@babel/template": "^7.25.9", + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.26.0", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "dependencies": { + "debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "dev": true, + "requires": { + "ms": "^2.1.3" + } + }, + "json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true + } + } + }, + "@babel/generator": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.0.tgz", + "integrity": "sha512-/AIkAmInnWwgEAJGQr9vY0c66Mj6kjkE2ZPB1PurTRaRAh3U+J45sAQMjQDJdh4WbR3l0x5xkimXBKyBXXAu2w==", + "dev": true, + "requires": { + "@babel/parser": "^7.26.0", + "@babel/types": "^7.26.0", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", + "jsesc": "^3.0.2" + } + }, + "@babel/helper-annotate-as-pure": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.25.9.tgz", + "integrity": "sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==", + "dev": true, + "requires": { + "@babel/types": "^7.25.9" + } + }, + "@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.25.9.tgz", + "integrity": "sha512-C47lC7LIDCnz0h4vai/tpNOI95tCd5ZT3iBt/DBH5lXKHZsyNQv18yf1wIIg2ntiQNgmAvA+DgZ82iW8Qdym8g==", + "dev": true, + "requires": { + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" + } + }, + "@babel/helper-compilation-targets": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.9.tgz", + "integrity": "sha512-j9Db8Suy6yV/VHa4qzrj9yZfZxhLWQdVnRlXxmKLYlhWUVB1sB2G5sxuWYXk/whHD9iW76PmNzxZ4UCnTQTVEQ==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.25.9", + "@babel/helper-validator-option": "^7.25.9", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "dependencies": { + "lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "requires": { + "yallist": "^3.0.2" + } + }, + "semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true + }, + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + } + } + }, + "@babel/helper-create-class-features-plugin": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.9.tgz", + "integrity": "sha512-UTZQMvt0d/rSz6KI+qdu7GQze5TIajwTS++GUozlw8VBJDEOAqSXwm1WvmYEZwqdqSGQshRocPDqrt4HBZB3fQ==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-member-expression-to-functions": "^7.25.9", + "@babel/helper-optimise-call-expression": "^7.25.9", + "@babel/helper-replace-supers": "^7.25.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9", + "@babel/traverse": "^7.25.9", + "semver": "^6.3.1" + }, + "dependencies": { + "semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true + } + } + }, + "@babel/helper-create-regexp-features-plugin": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.25.9.tgz", + "integrity": "sha512-ORPNZ3h6ZRkOyAa/SaHU+XsLZr0UQzRwuDQ0cczIA17nAzZ+85G5cVkOJIj7QavLZGSe8QXUmNFxSZzjcZF9bw==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.25.9", + "regexpu-core": "^6.1.1", + "semver": "^6.3.1" + }, + "dependencies": { + "semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true + } + } + }, + "@babel/helper-define-polyfill-provider": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.2.tgz", + "integrity": "sha512-LV76g+C502biUK6AyZ3LK10vDpDyCzZnhZFXkH1L75zHPj68+qc8Zfpx2th+gzwA2MzyK+1g/3EPl62yFnVttQ==", + "dev": true, + "requires": { + "@babel/helper-compilation-targets": "^7.22.6", + "@babel/helper-plugin-utils": "^7.22.5", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2" + }, + "dependencies": { + "debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "dev": true, + "requires": { + "ms": "^2.1.3" + } + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + } + } + }, + "@babel/helper-member-expression-to-functions": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.25.9.tgz", + "integrity": "sha512-wbfdZ9w5vk0C0oyHqAJbc62+vet5prjj01jjJ8sKn3j9h3MQQlflEdXYvuqRWjHnM12coDEqiC1IRCi0U/EKwQ==", + "dev": true, + "requires": { + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" + } + }, + "@babel/helper-module-imports": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz", + "integrity": "sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==", + "dev": true, + "requires": { + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" + } + }, + "@babel/helper-module-transforms": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz", + "integrity": "sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9", + "@babel/traverse": "^7.25.9" + } + }, + "@babel/helper-optimise-call-expression": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.25.9.tgz", + "integrity": "sha512-FIpuNaz5ow8VyrYcnXQTDRGvV6tTjkNtCK/RYNDXGSLlUD6cBuQTSw43CShGxjvfBTfcUA/r6UhUCbtYqkhcuQ==", + "dev": true, + "requires": { + "@babel/types": "^7.25.9" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.25.9.tgz", + "integrity": "sha512-kSMlyUVdWe25rEsRGviIgOWnoT/nfABVWlqt9N19/dIPWViAOW2s9wznP5tURbs/IDuNk4gPy3YdYRgH3uxhBw==", + "dev": true + }, + "@babel/helper-remap-async-to-generator": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.25.9.tgz", + "integrity": "sha512-IZtukuUeBbhgOcaW2s06OXTzVNJR0ybm4W5xC1opWFFJMZbwRj5LCk+ByYH7WdZPZTt8KnFwA8pvjN2yqcPlgw==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-wrap-function": "^7.25.9", + "@babel/traverse": "^7.25.9" + } + }, + "@babel/helper-replace-supers": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.25.9.tgz", + "integrity": "sha512-IiDqTOTBQy0sWyeXyGSC5TBJpGFXBkRynjBeXsvbhQFKj2viwJC76Epz35YLU1fpe/Am6Vppb7W7zM4fPQzLsQ==", + "dev": true, + "requires": { + "@babel/helper-member-expression-to-functions": "^7.25.9", + "@babel/helper-optimise-call-expression": "^7.25.9", + "@babel/traverse": "^7.25.9" + } + }, + "@babel/helper-simple-access": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.25.9.tgz", + "integrity": "sha512-c6WHXuiaRsJTyHYLJV75t9IqsmTbItYfdj99PnzYGQZkYKvan5/2jKJ7gu31J3/BJ/A18grImSPModuyG/Eo0Q==", + "dev": true, + "requires": { + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" + } + }, + "@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.25.9.tgz", + "integrity": "sha512-K4Du3BFa3gvyhzgPcntrkDgZzQaq6uozzcpGbOO1OEJaI+EJdqWIMTLgFgQf6lrfiDFo5FU+BxKepI9RmZqahA==", + "dev": true, + "requires": { + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" + } + }, + "@babel/helper-string-parser": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz", + "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==", + "dev": true + }, + "@babel/helper-validator-identifier": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", + "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", + "dev": true + }, + "@babel/helper-validator-option": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz", + "integrity": "sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==", + "dev": true + }, + "@babel/helper-wrap-function": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.25.9.tgz", + "integrity": "sha512-ETzz9UTjQSTmw39GboatdymDq4XIQbR8ySgVrylRhPOFpsd+JrKHIuF0de7GCWmem+T4uC5z7EZguod7Wj4A4g==", + "dev": true, + "requires": { + "@babel/template": "^7.25.9", + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" + } + }, + "@babel/helpers": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.26.0.tgz", + "integrity": "sha512-tbhNuIxNcVb21pInl3ZSjksLCvgdZy9KwJ8brv993QtIVKJBBkYXz4q4ZbAv31GdnC+R90np23L5FbEBlthAEw==", + "dev": true, + "requires": { + "@babel/template": "^7.25.9", + "@babel/types": "^7.26.0" + } + }, + "@babel/parser": { + "version": "7.26.1", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.1.tgz", + "integrity": "sha512-reoQYNiAJreZNsJzyrDNzFQ+IQ5JFiIzAHJg9bn94S3l+4++J7RsIhNMoB+lgP/9tpmiAQqspv+xfdxTSzREOw==", + "dev": true, + "requires": { + "@babel/types": "^7.26.0" + } + }, + "@babel/plugin-bugfix-firefox-class-in-computed-class-key": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.25.9.tgz", + "integrity": "sha512-ZkRyVkThtxQ/J6nv3JFYv1RYY+JT5BvU0y3k5bWrmuG4woXypRa4PXmm9RhOwodRkYFWqC0C0cqcJ4OqR7kW+g==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/traverse": "^7.25.9" + } + }, + "@babel/plugin-bugfix-safari-class-field-initializer-scope": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.25.9.tgz", + "integrity": "sha512-MrGRLZxLD/Zjj0gdU15dfs+HH/OXvnw/U4jJD8vpcP2CJQapPEv1IWwjc/qMg7ItBlPwSv1hRBbb7LeuANdcnw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.25.9.tgz", + "integrity": "sha512-2qUwwfAFpJLZqxd02YW9btUCZHl+RFvdDkNfZwaIJrvB8Tesjsk8pEQkTvGwZXLqXUx/2oyY3ySRhm6HOXuCug==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.25.9.tgz", + "integrity": "sha512-6xWgLZTJXwilVjlnV7ospI3xi+sl8lN8rXXbBD6vYn3UYDlGsag8wrZkKcSI8G6KgqKP7vNFaDgeDnfAABq61g==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9", + "@babel/plugin-transform-optional-chaining": "^7.25.9" + } + }, + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.25.9.tgz", + "integrity": "sha512-aLnMXYPnzwwqhYSCyXfKkIkYgJ8zv9RK+roo9DkTXz38ynIhd9XCbN08s3MGvqL2MYGVUGdRQLL/JqBIeJhJBg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/traverse": "^7.25.9" + } + }, + "@babel/plugin-proposal-private-property-in-object": { + "version": "7.21.0-placeholder-for-preset-env.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", + "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", + "dev": true, + "requires": {} + }, + "@babel/plugin-syntax-flow": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.26.0.tgz", + "integrity": "sha512-B+O2DnPc0iG+YXFqOxv2WNuNU97ToWjOomUQ78DouOENWUaM5sVrmet9mcomUGQFwpJd//gvUagXBSdzO1fRKg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-syntax-import-assertions": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.26.0.tgz", + "integrity": "sha512-QCWT5Hh830hK5EQa7XzuqIkQU9tT/whqbDz7kuaZMHFl1inRRg7JnuAEOQ0Ur0QUl0NufCk1msK2BeY79Aj/eg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-syntax-import-attributes": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.26.0.tgz", + "integrity": "sha512-e2dttdsJ1ZTpi3B9UYGLw41hifAubg19AtCu/2I/F1QNVclOBr1dYpTdmdyZ84Xiz43BS/tCUkMAZNLv12Pi+A==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-syntax-jsx": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.25.9.tgz", + "integrity": "sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-syntax-unicode-sets-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", + "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-arrow-functions": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.25.9.tgz", + "integrity": "sha512-6jmooXYIwn9ca5/RylZADJ+EnSxVUS5sjeJ9UPk6RWRzXCmOJCy6dqItPJFpw2cuCangPK4OYr5uhGKcmrm5Qg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-transform-async-generator-functions": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.25.9.tgz", + "integrity": "sha512-RXV6QAzTBbhDMO9fWwOmwwTuYaiPbggWQ9INdZqAYeSHyG7FzQ+nOZaUUjNwKv9pV3aE4WFqFm1Hnbci5tBCAw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-remap-async-to-generator": "^7.25.9", + "@babel/traverse": "^7.25.9" + } + }, + "@babel/plugin-transform-async-to-generator": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.25.9.tgz", + "integrity": "sha512-NT7Ejn7Z/LjUH0Gv5KsBCxh7BH3fbLTV0ptHvpeMvrt3cPThHfJfst9Wrb7S8EvJ7vRTFI7z+VAvFVEQn/m5zQ==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-remap-async-to-generator": "^7.25.9" + } + }, + "@babel/plugin-transform-block-scoped-functions": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.25.9.tgz", + "integrity": "sha512-toHc9fzab0ZfenFpsyYinOX0J/5dgJVA2fm64xPewu7CoYHWEivIWKxkK2rMi4r3yQqLnVmheMXRdG+k239CgA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-transform-block-scoping": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.25.9.tgz", + "integrity": "sha512-1F05O7AYjymAtqbsFETboN1NvBdcnzMerO+zlMyJBEz6WkMdejvGWw9p05iTSjC85RLlBseHHQpYaM4gzJkBGg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-transform-class-properties": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.25.9.tgz", + "integrity": "sha512-bbMAII8GRSkcd0h0b4X+36GksxuheLFjP65ul9w6C3KgAamI3JqErNgSrosX6ZPj+Mpim5VvEbawXxJCyEUV3Q==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-transform-class-static-block": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.26.0.tgz", + "integrity": "sha512-6J2APTs7BDDm+UMqP1useWqhcRAXo0WIoVj26N7kPFB6S73Lgvyka4KTZYIxtgYXiN5HTyRObA72N2iu628iTQ==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-transform-classes": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.9.tgz", + "integrity": "sha512-mD8APIXmseE7oZvZgGABDyM34GUmK45Um2TXiBUt7PnuAxrgoSVf123qUzPxEr/+/BHrRn5NMZCdE2m/1F8DGg==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-compilation-targets": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-replace-supers": "^7.25.9", + "@babel/traverse": "^7.25.9", + "globals": "^11.1.0" + } + }, + "@babel/plugin-transform-computed-properties": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.25.9.tgz", + "integrity": "sha512-HnBegGqXZR12xbcTHlJ9HGxw1OniltT26J5YpfruGqtUHlz/xKf/G2ak9e+t0rVqrjXa9WOhvYPz1ERfMj23AA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/template": "^7.25.9" + } + }, + "@babel/plugin-transform-destructuring": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.25.9.tgz", + "integrity": "sha512-WkCGb/3ZxXepmMiX101nnGiU+1CAdut8oHyEOHxkKuS1qKpU2SMXE2uSvfz8PBuLd49V6LEsbtyPhWC7fnkgvQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-transform-dotall-regex": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.25.9.tgz", + "integrity": "sha512-t7ZQ7g5trIgSRYhI9pIJtRl64KHotutUJsh4Eze5l7olJv+mRSg4/MmbZ0tv1eeqRbdvo/+trvJD/Oc5DmW2cA==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-transform-duplicate-keys": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.25.9.tgz", + "integrity": "sha512-LZxhJ6dvBb/f3x8xwWIuyiAHy56nrRG3PeYTpBkkzkYRRQ6tJLu68lEF5VIqMUZiAV7a8+Tb78nEoMCMcqjXBw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-transform-duplicate-named-capturing-groups-regex": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.25.9.tgz", + "integrity": "sha512-0UfuJS0EsXbRvKnwcLjFtJy/Sxc5J5jhLHnFhy7u4zih97Hz6tJkLU+O+FMMrNZrosUPxDi6sYxJ/EA8jDiAog==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-transform-dynamic-import": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.25.9.tgz", + "integrity": "sha512-GCggjexbmSLaFhqsojeugBpeaRIgWNTcgKVq/0qIteFEqY2A+b9QidYadrWlnbWQUrW5fn+mCvf3tr7OeBFTyg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-transform-exponentiation-operator": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.25.9.tgz", + "integrity": "sha512-KRhdhlVk2nObA5AYa7QMgTMTVJdfHprfpAk4DjZVtllqRg9qarilstTKEhpVjyt+Npi8ThRyiV8176Am3CodPA==", + "dev": true, + "requires": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-transform-export-namespace-from": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.25.9.tgz", + "integrity": "sha512-2NsEz+CxzJIVOPx2o9UsW1rXLqtChtLoVnwYHHiB04wS5sgn7mrV45fWMBX0Kk+ub9uXytVYfNP2HjbVbCB3Ww==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-transform-flow-strip-types": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.25.9.tgz", + "integrity": "sha512-/VVukELzPDdci7UUsWQaSkhgnjIWXnIyRpM02ldxaVoFK96c41So8JcKT3m0gYjyv7j5FNPGS5vfELrWalkbDA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/plugin-syntax-flow": "^7.25.9" + } + }, + "@babel/plugin-transform-for-of": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.25.9.tgz", + "integrity": "sha512-LqHxduHoaGELJl2uhImHwRQudhCM50pT46rIBNvtT/Oql3nqiS3wOwP+5ten7NpYSXrrVLgtZU3DZmPtWZo16A==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9" + } + }, + "@babel/plugin-transform-function-name": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.25.9.tgz", + "integrity": "sha512-8lP+Yxjv14Vc5MuWBpJsoUCd3hD6V9DgBon2FVYL4jJgbnVQ9fTgYmonchzZJOVNgzEgbxp4OwAf6xz6M/14XA==", + "dev": true, + "requires": { + "@babel/helper-compilation-targets": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/traverse": "^7.25.9" + } + }, + "@babel/plugin-transform-json-strings": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.25.9.tgz", + "integrity": "sha512-xoTMk0WXceiiIvsaquQQUaLLXSW1KJ159KP87VilruQm0LNNGxWzahxSS6T6i4Zg3ezp4vA4zuwiNUR53qmQAw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-transform-literals": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.25.9.tgz", + "integrity": "sha512-9N7+2lFziW8W9pBl2TzaNht3+pgMIRP74zizeCSrtnSKVdUl8mAjjOP2OOVQAfZ881P2cNjDj1uAMEdeD50nuQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-transform-logical-assignment-operators": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.25.9.tgz", + "integrity": "sha512-wI4wRAzGko551Y8eVf6iOY9EouIDTtPb0ByZx+ktDGHwv6bHFimrgJM/2T021txPZ2s4c7bqvHbd+vXG6K948Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-transform-member-expression-literals": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.25.9.tgz", + "integrity": "sha512-PYazBVfofCQkkMzh2P6IdIUaCEWni3iYEerAsRWuVd8+jlM1S9S9cz1dF9hIzyoZ8IA3+OwVYIp9v9e+GbgZhA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-transform-modules-amd": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.25.9.tgz", + "integrity": "sha512-g5T11tnI36jVClQlMlt4qKDLlWnG5pP9CSM4GhdRciTNMRgkfpo5cR6b4rGIOYPgRRuFAvwjPQ/Yk+ql4dyhbw==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-transform-modules-commonjs": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.25.9.tgz", + "integrity": "sha512-dwh2Ol1jWwL2MgkCzUSOvfmKElqQcuswAZypBSUsScMXvgdT8Ekq5YA6TtqpTVWH+4903NmboMuH1o9i8Rxlyg==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-simple-access": "^7.25.9" + } + }, + "@babel/plugin-transform-modules-systemjs": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.25.9.tgz", + "integrity": "sha512-hyss7iIlH/zLHaehT+xwiymtPOpsiwIIRlCAOwBB04ta5Tt+lNItADdlXw3jAWZ96VJ2jlhl/c+PNIQPKNfvcA==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9", + "@babel/traverse": "^7.25.9" + } + }, + "@babel/plugin-transform-modules-umd": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.25.9.tgz", + "integrity": "sha512-bS9MVObUgE7ww36HEfwe6g9WakQ0KF07mQF74uuXdkoziUPfKyu/nIm663kz//e5O1nPInPFx36z7WJmJ4yNEw==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.25.9.tgz", + "integrity": "sha512-oqB6WHdKTGl3q/ItQhpLSnWWOpjUJLsOCLVyeFgeTktkBSCiurvPOsyt93gibI9CmuKvTUEtWmG5VhZD+5T/KA==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-transform-new-target": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.25.9.tgz", + "integrity": "sha512-U/3p8X1yCSoKyUj2eOBIx3FOn6pElFOKvAAGf8HTtItuPyB+ZeOqfn+mvTtg9ZlOAjsPdK3ayQEjqHjU/yLeVQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-transform-nullish-coalescing-operator": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.25.9.tgz", + "integrity": "sha512-ENfftpLZw5EItALAD4WsY/KUWvhUlZndm5GC7G3evUsVeSJB6p0pBeLQUnRnBCBx7zV0RKQjR9kCuwrsIrjWog==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-transform-numeric-separator": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.25.9.tgz", + "integrity": "sha512-TlprrJ1GBZ3r6s96Yq8gEQv82s8/5HnCVHtEJScUj90thHQbwe+E5MLhi2bbNHBEJuzrvltXSru+BUxHDoog7Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-transform-object-rest-spread": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.25.9.tgz", + "integrity": "sha512-fSaXafEE9CVHPweLYw4J0emp1t8zYTXyzN3UuG+lylqkvYd7RMrsOQ8TYx5RF231be0vqtFC6jnx3UmpJmKBYg==", + "dev": true, + "requires": { + "@babel/helper-compilation-targets": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/plugin-transform-parameters": "^7.25.9" + } + }, + "@babel/plugin-transform-object-super": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.25.9.tgz", + "integrity": "sha512-Kj/Gh+Rw2RNLbCK1VAWj2U48yxxqL2x0k10nPtSdRa0O2xnHXalD0s+o1A6a0W43gJ00ANo38jxkQreckOzv5A==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-replace-supers": "^7.25.9" + } + }, + "@babel/plugin-transform-optional-catch-binding": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.25.9.tgz", + "integrity": "sha512-qM/6m6hQZzDcZF3onzIhZeDHDO43bkNNlOX0i8n3lR6zLbu0GN2d8qfM/IERJZYauhAHSLHy39NF0Ctdvcid7g==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-transform-optional-chaining": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.25.9.tgz", + "integrity": "sha512-6AvV0FsLULbpnXeBjrY4dmWF8F7gf8QnvTEoO/wX/5xm/xE1Xo8oPuD3MPS+KS9f9XBEAWN7X1aWr4z9HdOr7A==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9" + } + }, + "@babel/plugin-transform-parameters": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.25.9.tgz", + "integrity": "sha512-wzz6MKwpnshBAiRmn4jR8LYz/g8Ksg0o80XmwZDlordjwEk9SxBzTWC7F5ef1jhbrbOW2DJ5J6ayRukrJmnr0g==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-transform-private-methods": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.25.9.tgz", + "integrity": "sha512-D/JUozNpQLAPUVusvqMxyvjzllRaF8/nSrP1s2YGQT/W4LHK4xxsMcHjhOGTS01mp9Hda8nswb+FblLdJornQw==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-transform-private-property-in-object": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.25.9.tgz", + "integrity": "sha512-Evf3kcMqzXA3xfYJmZ9Pg1OvKdtqsDMSWBDzZOPLvHiTt36E75jLDQo5w1gtRU95Q4E5PDttrTf25Fw8d/uWLw==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-create-class-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-transform-property-literals": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.25.9.tgz", + "integrity": "sha512-IvIUeV5KrS/VPavfSM/Iu+RE6llrHrYIKY1yfCzyO/lMXHQ+p7uGhonmGVisv6tSBSVgWzMBohTcvkC9vQcQFA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-transform-react-jsx": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.25.9.tgz", + "integrity": "sha512-s5XwpQYCqGerXl+Pu6VDL3x0j2d82eiV77UJ8a2mDHAW7j9SWRqQ2y1fNo1Z74CdcYipl5Z41zvjj4Nfzq36rw==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-module-imports": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/plugin-syntax-jsx": "^7.25.9", + "@babel/types": "^7.25.9" + } + }, + "@babel/plugin-transform-regenerator": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.25.9.tgz", + "integrity": "sha512-vwDcDNsgMPDGP0nMqzahDWE5/MLcX8sv96+wfX7as7LoF/kr97Bo/7fI00lXY4wUXYfVmwIIyG80fGZ1uvt2qg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.25.9", + "regenerator-transform": "^0.15.2" + } + }, + "@babel/plugin-transform-regexp-modifiers": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regexp-modifiers/-/plugin-transform-regexp-modifiers-7.26.0.tgz", + "integrity": "sha512-vN6saax7lrA2yA/Pak3sCxuD6F5InBjn9IcrIKQPjpsLvuHYLVroTxjdlVRHjjBWxKOqIwpTXDkOssYT4BFdRw==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-transform-reserved-words": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.25.9.tgz", + "integrity": "sha512-7DL7DKYjn5Su++4RXu8puKZm2XBPHyjWLUidaPEkCUBbE7IPcsrkRHggAOOKydH1dASWdcUBxrkOGNxUv5P3Jg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-transform-shorthand-properties": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.25.9.tgz", + "integrity": "sha512-MUv6t0FhO5qHnS/W8XCbHmiRWOphNufpE1IVxhK5kuN3Td9FT1x4rx4K42s3RYdMXCXpfWkGSbCSd0Z64xA7Ng==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-transform-spread": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.25.9.tgz", + "integrity": "sha512-oNknIB0TbURU5pqJFVbOOFspVlrpVwo2H1+HUIsVDvp5VauGGDP1ZEvO8Nn5xyMEs3dakajOxlmkNW7kNgSm6A==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9" + } + }, + "@babel/plugin-transform-sticky-regex": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.25.9.tgz", + "integrity": "sha512-WqBUSgeVwucYDP9U/xNRQam7xV8W5Zf+6Eo7T2SRVUFlhRiMNFdFz58u0KZmCVVqs2i7SHgpRnAhzRNmKfi2uA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-transform-template-literals": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.25.9.tgz", + "integrity": "sha512-o97AE4syN71M/lxrCtQByzphAdlYluKPDBzDVzMmfCobUjjhAryZV0AIpRPrxN0eAkxXO6ZLEScmt+PNhj2OTw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-transform-typeof-symbol": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.25.9.tgz", + "integrity": "sha512-v61XqUMiueJROUv66BVIOi0Fv/CUuZuZMl5NkRoCVxLAnMexZ0A3kMe7vvZ0nulxMuMp0Mk6S5hNh48yki08ZA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-transform-unicode-escapes": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.25.9.tgz", + "integrity": "sha512-s5EDrE6bW97LtxOcGj1Khcx5AaXwiMmi4toFWRDP9/y0Woo6pXC+iyPu/KuhKtfSrNFd7jJB+/fkOtZy6aIC6Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-transform-unicode-property-regex": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.25.9.tgz", + "integrity": "sha512-Jt2d8Ga+QwRluxRQ307Vlxa6dMrYEMZCgGxoPR8V52rxPyldHu3hdlHspxaqYmE7oID5+kB+UKUB/eWS+DkkWg==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-transform-unicode-regex": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.25.9.tgz", + "integrity": "sha512-yoxstj7Rg9dlNn9UQxzk4fcNivwv4nUYz7fYXBaKxvw/lnmPuOm/ikoELygbYq68Bls3D/D+NBPHiLwZdZZ4HA==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/plugin-transform-unicode-sets-regex": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.25.9.tgz", + "integrity": "sha512-8BYqO3GeVNHtx69fdPshN3fnzUNLrWdHhk/icSwigksJGczKSizZ+Z6SBCxTs723Fr5VSNorTIK7a+R2tISvwQ==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + } + }, + "@babel/preset-env": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.26.0.tgz", + "integrity": "sha512-H84Fxq0CQJNdPFT2DrfnylZ3cf5K43rGfWK4LJGPpjKHiZlk0/RzwEus3PDDZZg+/Er7lCA03MVacueUuXdzfw==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.26.0", + "@babel/helper-compilation-targets": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-validator-option": "^7.25.9", + "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.25.9", + "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.25.9", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.25.9", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.25.9", + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.25.9", + "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", + "@babel/plugin-syntax-import-assertions": "^7.26.0", + "@babel/plugin-syntax-import-attributes": "^7.26.0", + "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", + "@babel/plugin-transform-arrow-functions": "^7.25.9", + "@babel/plugin-transform-async-generator-functions": "^7.25.9", + "@babel/plugin-transform-async-to-generator": "^7.25.9", + "@babel/plugin-transform-block-scoped-functions": "^7.25.9", + "@babel/plugin-transform-block-scoping": "^7.25.9", + "@babel/plugin-transform-class-properties": "^7.25.9", + "@babel/plugin-transform-class-static-block": "^7.26.0", + "@babel/plugin-transform-classes": "^7.25.9", + "@babel/plugin-transform-computed-properties": "^7.25.9", + "@babel/plugin-transform-destructuring": "^7.25.9", + "@babel/plugin-transform-dotall-regex": "^7.25.9", + "@babel/plugin-transform-duplicate-keys": "^7.25.9", + "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.25.9", + "@babel/plugin-transform-dynamic-import": "^7.25.9", + "@babel/plugin-transform-exponentiation-operator": "^7.25.9", + "@babel/plugin-transform-export-namespace-from": "^7.25.9", + "@babel/plugin-transform-for-of": "^7.25.9", + "@babel/plugin-transform-function-name": "^7.25.9", + "@babel/plugin-transform-json-strings": "^7.25.9", + "@babel/plugin-transform-literals": "^7.25.9", + "@babel/plugin-transform-logical-assignment-operators": "^7.25.9", + "@babel/plugin-transform-member-expression-literals": "^7.25.9", + "@babel/plugin-transform-modules-amd": "^7.25.9", + "@babel/plugin-transform-modules-commonjs": "^7.25.9", + "@babel/plugin-transform-modules-systemjs": "^7.25.9", + "@babel/plugin-transform-modules-umd": "^7.25.9", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.25.9", + "@babel/plugin-transform-new-target": "^7.25.9", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.25.9", + "@babel/plugin-transform-numeric-separator": "^7.25.9", + "@babel/plugin-transform-object-rest-spread": "^7.25.9", + "@babel/plugin-transform-object-super": "^7.25.9", + "@babel/plugin-transform-optional-catch-binding": "^7.25.9", + "@babel/plugin-transform-optional-chaining": "^7.25.9", + "@babel/plugin-transform-parameters": "^7.25.9", + "@babel/plugin-transform-private-methods": "^7.25.9", + "@babel/plugin-transform-private-property-in-object": "^7.25.9", + "@babel/plugin-transform-property-literals": "^7.25.9", + "@babel/plugin-transform-regenerator": "^7.25.9", + "@babel/plugin-transform-regexp-modifiers": "^7.26.0", + "@babel/plugin-transform-reserved-words": "^7.25.9", + "@babel/plugin-transform-shorthand-properties": "^7.25.9", + "@babel/plugin-transform-spread": "^7.25.9", + "@babel/plugin-transform-sticky-regex": "^7.25.9", + "@babel/plugin-transform-template-literals": "^7.25.9", + "@babel/plugin-transform-typeof-symbol": "^7.25.9", + "@babel/plugin-transform-unicode-escapes": "^7.25.9", + "@babel/plugin-transform-unicode-property-regex": "^7.25.9", + "@babel/plugin-transform-unicode-regex": "^7.25.9", + "@babel/plugin-transform-unicode-sets-regex": "^7.25.9", + "@babel/preset-modules": "0.1.6-no-external-plugins", + "babel-plugin-polyfill-corejs2": "^0.4.10", + "babel-plugin-polyfill-corejs3": "^0.10.6", + "babel-plugin-polyfill-regenerator": "^0.6.1", + "core-js-compat": "^3.38.1", + "semver": "^6.3.1" + }, + "dependencies": { + "semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true + } + } + }, + "@babel/preset-modules": { + "version": "0.1.6-no-external-plugins", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", + "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + } + }, + "@babel/runtime": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.26.0.tgz", + "integrity": "sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw==", + "dev": true, + "requires": { + "regenerator-runtime": "^0.14.0" + } + }, + "@babel/template": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.9.tgz", + "integrity": "sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.25.9", + "@babel/parser": "^7.25.9", + "@babel/types": "^7.25.9" + } + }, + "@babel/traverse": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.9.tgz", + "integrity": "sha512-ZCuvfwOwlz/bawvAuvcj8rrithP2/N55Tzz342AkTvq4qaWbGfmCk/tKhNaV2cthijKrPAA8SRJV5WWe7IBMJw==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.25.9", + "@babel/generator": "^7.25.9", + "@babel/parser": "^7.25.9", + "@babel/template": "^7.25.9", + "@babel/types": "^7.25.9", + "debug": "^4.3.1", + "globals": "^11.1.0" + }, + "dependencies": { + "debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "dev": true, + "requires": { + "ms": "^2.1.3" + } + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + } + } + }, + "@babel/types": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.0.tgz", + "integrity": "sha512-Z/yiTPj+lDVnF7lWeKCIJzaIkI0vYO87dMpZ4bg4TDrFe4XXLFWL1TbXU27gBP3QccxV9mZICCrnjnYlJjXHOA==", + "dev": true, + "requires": { + "@babel/helper-string-parser": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9" + } + }, + "@emnapi/runtime": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.2.0.tgz", + "integrity": "sha512-bV21/9LQmcQeCPEg3BDFtvwL6cwiTMksYNWQQ4KOxCZikEGalWtenoZ0wCiukJINlGCIi2KXx01g4FoH/LxpzQ==", + "optional": true, + "requires": { + "tslib": "^2.4.0" + }, + "dependencies": { + "tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", + "optional": true + } + } + }, + "@esbuild/aix-ppc64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.23.1.tgz", + "integrity": "sha512-6VhYk1diRqrhBAqpJEdjASR/+WVRtfjpqKuNw11cLiaWpAT/Uu+nokB+UJnevzy/P9C/ty6AOe0dwueMrGh/iQ==", + "optional": true + }, + "@esbuild/android-arm": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.23.1.tgz", + "integrity": "sha512-uz6/tEy2IFm9RYOyvKl88zdzZfwEfKZmnX9Cj1BHjeSGNuGLuMD1kR8y5bteYmwqKm1tj8m4cb/aKEorr6fHWQ==", + "optional": true + }, + "@esbuild/android-arm64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.23.1.tgz", + "integrity": "sha512-xw50ipykXcLstLeWH7WRdQuysJqejuAGPd30vd1i5zSyKK3WE+ijzHmLKxdiCMtH1pHz78rOg0BKSYOSB/2Khw==", + "optional": true + }, + "@esbuild/android-x64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.23.1.tgz", + "integrity": "sha512-nlN9B69St9BwUoB+jkyU090bru8L0NA3yFvAd7k8dNsVH8bi9a8cUAUSEcEEgTp2z3dbEDGJGfP6VUnkQnlReg==", + "optional": true + }, + "@esbuild/darwin-arm64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.23.1.tgz", + "integrity": "sha512-YsS2e3Wtgnw7Wq53XXBLcV6JhRsEq8hkfg91ESVadIrzr9wO6jJDMZnCQbHm1Guc5t/CdDiFSSfWP58FNuvT3Q==", + "optional": true + }, + "@esbuild/darwin-x64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.23.1.tgz", + "integrity": "sha512-aClqdgTDVPSEGgoCS8QDG37Gu8yc9lTHNAQlsztQ6ENetKEO//b8y31MMu2ZaPbn4kVsIABzVLXYLhCGekGDqw==", + "optional": true + }, + "@esbuild/freebsd-arm64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.23.1.tgz", + "integrity": "sha512-h1k6yS8/pN/NHlMl5+v4XPfikhJulk4G+tKGFIOwURBSFzE8bixw1ebjluLOjfwtLqY0kewfjLSrO6tN2MgIhA==", + "optional": true + }, + "@esbuild/freebsd-x64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.23.1.tgz", + "integrity": "sha512-lK1eJeyk1ZX8UklqFd/3A60UuZ/6UVfGT2LuGo3Wp4/z7eRTRYY+0xOu2kpClP+vMTi9wKOfXi2vjUpO1Ro76g==", + "optional": true + }, + "@esbuild/linux-arm": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.23.1.tgz", + "integrity": "sha512-CXXkzgn+dXAPs3WBwE+Kvnrf4WECwBdfjfeYHpMeVxWE0EceB6vhWGShs6wi0IYEqMSIzdOF1XjQ/Mkm5d7ZdQ==", + "optional": true + }, + "@esbuild/linux-arm64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.23.1.tgz", + "integrity": "sha512-/93bf2yxencYDnItMYV/v116zff6UyTjo4EtEQjUBeGiVpMmffDNUyD9UN2zV+V3LRV3/on4xdZ26NKzn6754g==", + "optional": true + }, + "@esbuild/linux-ia32": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.23.1.tgz", + "integrity": "sha512-VTN4EuOHwXEkXzX5nTvVY4s7E/Krz7COC8xkftbbKRYAl96vPiUssGkeMELQMOnLOJ8k3BY1+ZY52tttZnHcXQ==", + "optional": true + }, + "@esbuild/linux-loong64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.23.1.tgz", + "integrity": "sha512-Vx09LzEoBa5zDnieH8LSMRToj7ir/Jeq0Gu6qJ/1GcBq9GkfoEAoXvLiW1U9J1qE/Y/Oyaq33w5p2ZWrNNHNEw==", + "optional": true + }, + "@esbuild/linux-mips64el": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.23.1.tgz", + "integrity": "sha512-nrFzzMQ7W4WRLNUOU5dlWAqa6yVeI0P78WKGUo7lg2HShq/yx+UYkeNSE0SSfSure0SqgnsxPvmAUu/vu0E+3Q==", + "optional": true + }, + "@esbuild/linux-ppc64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.23.1.tgz", + "integrity": "sha512-dKN8fgVqd0vUIjxuJI6P/9SSSe/mB9rvA98CSH2sJnlZ/OCZWO1DJvxj8jvKTfYUdGfcq2dDxoKaC6bHuTlgcw==", + "optional": true + }, + "@esbuild/linux-riscv64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.23.1.tgz", + "integrity": "sha512-5AV4Pzp80fhHL83JM6LoA6pTQVWgB1HovMBsLQ9OZWLDqVY8MVobBXNSmAJi//Csh6tcY7e7Lny2Hg1tElMjIA==", + "optional": true + }, + "@esbuild/linux-s390x": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.23.1.tgz", + "integrity": "sha512-9ygs73tuFCe6f6m/Tb+9LtYxWR4c9yg7zjt2cYkjDbDpV/xVn+68cQxMXCjUpYwEkze2RcU/rMnfIXNRFmSoDw==", + "optional": true + }, + "@esbuild/linux-x64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.23.1.tgz", + "integrity": "sha512-EV6+ovTsEXCPAp58g2dD68LxoP/wK5pRvgy0J/HxPGB009omFPv3Yet0HiaqvrIrgPTBuC6wCH1LTOY91EO5hQ==", + "optional": true + }, + "@esbuild/netbsd-x64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.23.1.tgz", + "integrity": "sha512-aevEkCNu7KlPRpYLjwmdcuNz6bDFiE7Z8XC4CPqExjTvrHugh28QzUXVOZtiYghciKUacNktqxdpymplil1beA==", + "optional": true + }, + "@esbuild/openbsd-arm64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.23.1.tgz", + "integrity": "sha512-3x37szhLexNA4bXhLrCC/LImN/YtWis6WXr1VESlfVtVeoFJBRINPJ3f0a/6LV8zpikqoUg4hyXw0sFBt5Cr+Q==", + "optional": true + }, + "@esbuild/openbsd-x64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.23.1.tgz", + "integrity": "sha512-aY2gMmKmPhxfU+0EdnN+XNtGbjfQgwZj43k8G3fyrDM/UdZww6xrWxmDkuz2eCZchqVeABjV5BpildOrUbBTqA==", + "optional": true + }, + "@esbuild/sunos-x64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.23.1.tgz", + "integrity": "sha512-RBRT2gqEl0IKQABT4XTj78tpk9v7ehp+mazn2HbUeZl1YMdaGAQqhapjGTCe7uw7y0frDi4gS0uHzhvpFuI1sA==", + "optional": true + }, + "@esbuild/win32-arm64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.23.1.tgz", + "integrity": "sha512-4O+gPR5rEBe2FpKOVyiJ7wNDPA8nGzDuJ6gN4okSA1gEOYZ67N8JPk58tkWtdtPeLz7lBnY6I5L3jdsr3S+A6A==", + "optional": true + }, + "@esbuild/win32-ia32": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.23.1.tgz", + "integrity": "sha512-BcaL0Vn6QwCwre3Y717nVHZbAa4UBEigzFm6VdsVdT/MbZ38xoj1X9HPkZhbmaBGUD1W8vxAfffbDe8bA6AKnQ==", + "optional": true + }, + "@esbuild/win32-x64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.23.1.tgz", + "integrity": "sha512-BHpFFeslkWrXWyUPnbKm+xYYVYruCinGcftSBaa8zoF9hZO4BcSCFUvHVTtzpIY6YzUnYtuEhZ+C9iEXjxnasg==", + "optional": true + }, + "@gar/promisify": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", + "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==" + }, + "@google-cloud/local-auth": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@google-cloud/local-auth/-/local-auth-2.1.1.tgz", + "integrity": "sha512-tOJ73TSyPxelUEVN2AdHVzFG857U5i3wZHMUGgm6wRtz9WN4O3D761eYORB9jXfIggA3+v5BUw+VIE5wAKHhkg==", + "requires": { + "arrify": "^2.0.1", + "google-auth-library": "^8.0.2", + "open": "^7.0.3", + "server-destroy": "^1.0.1" + } + }, + "@iarna/toml": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/@iarna/toml/-/toml-2.2.5.tgz", + "integrity": "sha512-trnsAYxU3xnS1gPHPyU961coFyLkh4gAD/0zQ5mymY4yOZ+CYvsPqUbOFSw0aDM4y0tV7tiFxL/1XfXPNC6IPg==" + }, + "@img/sharp-darwin-arm64": { + "version": "0.33.4", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.33.4.tgz", + "integrity": "sha512-p0suNqXufJs9t3RqLBO6vvrgr5OhgbWp76s5gTRvdmxmuv9E1rcaqGUsl3l4mKVmXPkTkTErXediAui4x+8PSA==", + "optional": true, + "requires": { + "@img/sharp-libvips-darwin-arm64": "1.0.2" + } + }, + "@img/sharp-darwin-x64": { + "version": "0.33.4", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.33.4.tgz", + "integrity": "sha512-0l7yRObwtTi82Z6ebVI2PnHT8EB2NxBgpK2MiKJZJ7cz32R4lxd001ecMhzzsZig3Yv9oclvqqdV93jo9hy+Dw==", + "optional": true, + "requires": { + "@img/sharp-libvips-darwin-x64": "1.0.2" + } + }, + "@img/sharp-libvips-darwin-arm64": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.0.2.tgz", + "integrity": "sha512-tcK/41Rq8IKlSaKRCCAuuY3lDJjQnYIW1UXU1kxcEKrfL8WR7N6+rzNoOxoQRJWTAECuKwgAHnPvqXGN8XfkHA==", + "optional": true + }, + "@img/sharp-libvips-darwin-x64": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.0.2.tgz", + "integrity": "sha512-Ofw+7oaWa0HiiMiKWqqaZbaYV3/UGL2wAPeLuJTx+9cXpCRdvQhCLG0IH8YGwM0yGWGLpsF4Su9vM1o6aer+Fw==", + "optional": true + }, + "@img/sharp-libvips-linux-arm": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.0.2.tgz", + "integrity": "sha512-iLWCvrKgeFoglQxdEwzu1eQV04o8YeYGFXtfWU26Zr2wWT3q3MTzC+QTCO3ZQfWd3doKHT4Pm2kRmLbupT+sZw==", + "optional": true + }, + "@img/sharp-libvips-linux-arm64": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.0.2.tgz", + "integrity": "sha512-x7kCt3N00ofFmmkkdshwj3vGPCnmiDh7Gwnd4nUwZln2YjqPxV1NlTyZOvoDWdKQVDL911487HOueBvrpflagw==", + "optional": true + }, + "@img/sharp-libvips-linux-s390x": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.0.2.tgz", + "integrity": "sha512-cmhQ1J4qVhfmS6szYW7RT+gLJq9dH2i4maq+qyXayUSn9/3iY2ZeWpbAgSpSVbV2E1JUL2Gg7pwnYQ1h8rQIog==", + "optional": true + }, + "@img/sharp-libvips-linux-x64": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.0.2.tgz", + "integrity": "sha512-E441q4Qdb+7yuyiADVi5J+44x8ctlrqn8XgkDTwr4qPJzWkaHwD489iZ4nGDgcuya4iMN3ULV6NwbhRZJ9Z7SQ==", + "optional": true + }, + "@img/sharp-libvips-linuxmusl-arm64": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.0.2.tgz", + "integrity": "sha512-3CAkndNpYUrlDqkCM5qhksfE+qSIREVpyoeHIU6jd48SJZViAmznoQQLAv4hVXF7xyUB9zf+G++e2v1ABjCbEQ==", + "optional": true + }, + "@img/sharp-libvips-linuxmusl-x64": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.0.2.tgz", + "integrity": "sha512-VI94Q6khIHqHWNOh6LLdm9s2Ry4zdjWJwH56WoiJU7NTeDwyApdZZ8c+SADC8OH98KWNQXnE01UdJ9CSfZvwZw==", + "optional": true + }, + "@img/sharp-linux-arm": { + "version": "0.33.4", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.33.4.tgz", + "integrity": "sha512-RUgBD1c0+gCYZGCCe6mMdTiOFS0Zc/XrN0fYd6hISIKcDUbAW5NtSQW9g/powkrXYm6Vzwd6y+fqmExDuCdHNQ==", + "optional": true, + "requires": { + "@img/sharp-libvips-linux-arm": "1.0.2" + } + }, + "@img/sharp-linux-arm64": { + "version": "0.33.4", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.33.4.tgz", + "integrity": "sha512-2800clwVg1ZQtxwSoTlHvtm9ObgAax7V6MTAB/hDT945Tfyy3hVkmiHpeLPCKYqYR1Gcmv1uDZ3a4OFwkdBL7Q==", + "optional": true, + "requires": { + "@img/sharp-libvips-linux-arm64": "1.0.2" + } + }, + "@img/sharp-linux-s390x": { + "version": "0.33.4", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.33.4.tgz", + "integrity": "sha512-h3RAL3siQoyzSoH36tUeS0PDmb5wINKGYzcLB5C6DIiAn2F3udeFAum+gj8IbA/82+8RGCTn7XW8WTFnqag4tQ==", + "optional": true, + "requires": { + "@img/sharp-libvips-linux-s390x": "1.0.2" + } + }, + "@img/sharp-linux-x64": { + "version": "0.33.4", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.33.4.tgz", + "integrity": "sha512-GoR++s0XW9DGVi8SUGQ/U4AeIzLdNjHka6jidVwapQ/JebGVQIpi52OdyxCNVRE++n1FCLzjDovJNozif7w/Aw==", + "optional": true, + "requires": { + "@img/sharp-libvips-linux-x64": "1.0.2" + } + }, + "@img/sharp-linuxmusl-arm64": { + "version": "0.33.4", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.33.4.tgz", + "integrity": "sha512-nhr1yC3BlVrKDTl6cO12gTpXMl4ITBUZieehFvMntlCXFzH2bvKG76tBL2Y/OqhupZt81pR7R+Q5YhJxW0rGgQ==", + "optional": true, + "requires": { + "@img/sharp-libvips-linuxmusl-arm64": "1.0.2" + } + }, + "@img/sharp-linuxmusl-x64": { + "version": "0.33.4", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.33.4.tgz", + "integrity": "sha512-uCPTku0zwqDmZEOi4ILyGdmW76tH7dm8kKlOIV1XC5cLyJ71ENAAqarOHQh0RLfpIpbV5KOpXzdU6XkJtS0daw==", + "optional": true, + "requires": { + "@img/sharp-libvips-linuxmusl-x64": "1.0.2" + } + }, + "@img/sharp-wasm32": { + "version": "0.33.4", + "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.33.4.tgz", + "integrity": "sha512-Bmmauh4sXUsUqkleQahpdNXKvo+wa1V9KhT2pDA4VJGKwnKMJXiSTGphn0gnJrlooda0QxCtXc6RX1XAU6hMnQ==", + "optional": true, + "requires": { + "@emnapi/runtime": "^1.1.1" + } + }, + "@img/sharp-win32-ia32": { + "version": "0.33.4", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.33.4.tgz", + "integrity": "sha512-99SJ91XzUhYHbx7uhK3+9Lf7+LjwMGQZMDlO/E/YVJ7Nc3lyDFZPGhjwiYdctoH2BOzW9+TnfqcaMKt0jHLdqw==", + "optional": true + }, + "@img/sharp-win32-x64": { + "version": "0.33.4", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.33.4.tgz", + "integrity": "sha512-3QLocdTRVIrFNye5YocZl+KKpYKP+fksi1QhmOArgx7GyhIbQp/WrJRu176jm8IxromS7RIkzMiMINVdBtC8Aw==", + "optional": true + }, + "@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "requires": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==" + }, + "ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==" + }, + "emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" + }, + "string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "requires": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + } + }, + "strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "requires": { + "ansi-regex": "^6.0.1" + } + }, + "wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "requires": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + } + } + } + }, + "@jridgewell/gen-mapping": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "requires": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==" + }, + "@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==" + }, + "@jridgewell/source-map": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", + "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", + "requires": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25" + } + }, + "@jridgewell/sourcemap-codec": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==" + }, + "@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "requires": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "@jsep-plugin/assignment": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jsep-plugin/assignment/-/assignment-1.2.1.tgz", + "integrity": "sha512-gaHqbubTi29aZpVbBlECRpmdia+L5/lh2BwtIJTmtxdbecEyyX/ejAOg7eQDGNvGOUmPY7Z2Yxdy9ioyH/VJeA==", + "requires": {} + }, + "@jsep-plugin/regex": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@jsep-plugin/regex/-/regex-1.0.3.tgz", + "integrity": "sha512-XfZgry4DwEZvSFtS/6Y+R48D7qJYJK6R9/yJFyUFHCIUMEEHuJ4X95TDgJp5QkmzfLYvapMPzskV5HpIDrREug==", + "requires": {} + }, + "@mixmark-io/domino": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@mixmark-io/domino/-/domino-2.2.0.tgz", + "integrity": "sha512-Y28PR25bHXUg88kCV7nivXrP2Nj2RueZ3/l/jdx6J9f8J4nsEGcgX0Qe6lt7Pa+J79+kPiJU3LguR6O/6zrLOw==" + }, + "@mrmlnc/readdir-enhanced": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz", + "integrity": "sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g==", + "dev": true, + "requires": { + "call-me-maybe": "^1.0.1", + "glob-to-regexp": "^0.3.0" + } + }, + "@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": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + } + }, + "@npmcli/fs": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-3.1.1.tgz", + "integrity": "sha512-q9CRWjpHCMIh5sVyefoD1cA7PkvILqCZsnSOEUUivORLjxCO/Irmue2DprETiNgEqktDBZaM1Bi+jrarx1XdCg==", + "requires": { + "semver": "^7.3.5" + }, + "dependencies": { + "semver": { + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", + "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==" + } + } + }, + "@npmcli/move-file": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz", + "integrity": "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==", + "requires": { + "mkdirp": "^1.0.4", + "rimraf": "^3.0.2" + }, + "dependencies": { + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" + }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "requires": { + "glob": "^7.1.3" + } + } + } + }, + "@one-ini/wasm": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@one-ini/wasm/-/wasm-0.1.1.tgz", + "integrity": "sha512-XuySG1E38YScSJoMlqovLru4KTUNSjgVTIjyh7qMX6aNN5HY5Ct5LhRJdxO79JtTzKfzV/bnWpz+zquYrISsvw==" + }, + "@parcel/fs": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@parcel/fs/-/fs-1.11.0.tgz", + "integrity": "sha512-86RyEqULbbVoeo8OLcv+LQ1Vq2PKBAvWTU9fCgALxuCTbbs5Ppcvll4Vr+Ko1AnmMzja/k++SzNAwJfeQXVlpA==", + "dev": true, + "requires": { + "@parcel/utils": "^1.11.0", + "mkdirp": "^0.5.1", + "rimraf": "^2.6.2" + } + }, + "@parcel/logger": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@parcel/logger/-/logger-1.11.1.tgz", + "integrity": "sha512-9NF3M6UVeP2udOBDILuoEHd8VrF4vQqoWHEafymO1pfSoOMfxrSJZw1MfyAAIUN/IFp9qjcpDCUbDZB+ioVevA==", + "dev": true, + "requires": { + "@parcel/workers": "^1.11.0", + "chalk": "^2.1.0", + "grapheme-breaker": "^0.3.2", + "ora": "^2.1.0", + "strip-ansi": "^4.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", + "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", + "dev": true + }, + "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==", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, + "@parcel/utils": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@parcel/utils/-/utils-1.11.0.tgz", + "integrity": "sha512-cA3p4jTlaMeOtAKR/6AadanOPvKeg8VwgnHhOyfi0yClD0TZS/hi9xu12w4EzA/8NtHu0g6o4RDfcNjqN8l1AQ==", + "dev": true + }, + "@parcel/watcher": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-1.12.1.tgz", + "integrity": "sha512-od+uCtCxC/KoNQAIE1vWx1YTyKYY+7CTrxBJPRh3cDWw/C0tCtlBMVlrbplscGoEpt6B27KhJDCv82PBxOERNA==", + "dev": true, + "requires": { + "@parcel/utils": "^1.11.0", + "chokidar": "^2.1.5" + } + }, + "@parcel/workers": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@parcel/workers/-/workers-1.11.0.tgz", + "integrity": "sha512-USSjRAAQYsZFlv43FUPdD+jEGML5/8oLF0rUzPQTtK4q9kvaXr49F5ZplyLz5lox78cLZ0TxN2bIDQ1xhOkulQ==", + "dev": true, + "requires": { + "@parcel/utils": "^1.11.0", + "physical-cpu-count": "^2.0.0" + } + }, + "@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "optional": true + }, + "@plastichub/core": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/@plastichub/core/-/core-0.2.6.tgz", + "integrity": "sha512-DF2IUZu6cw8+iVnFv2BFvd+s/7DYfrfXh7o3Uhg0IjbZ/QOIXY21URarnMQoTl9NEwUKN8ZZIHJmOIulT8helg==", + "requires": { + "deepmerge": "^4.3.1", + "tslog": "^3.3.3" + } + }, + "@plastichub/fs": { + "version": "0.13.39", + "resolved": "https://registry.npmjs.org/@plastichub/fs/-/fs-0.13.39.tgz", + "integrity": "sha512-Q96zN5LAlTmtj6gIbHbVM0erp2NgP+P4izRzdhqnMz/WopAvD7ZJxjQ/J44e67R6WKQuvcxt/eXPNaFBB5ehlg==", + "requires": { + "@plastichub/core": "^0.2.1", + "@types/denodeify": "^1.2.31", + "@types/glob": "^8.1.0", + "@types/minimatch": "^3.0.3", + "@types/node": "^14.18.63", + "denodeify": "^1.2.1", + "errno": "^0.1.4", + "glob": "^10.4.1", + "mime": "^2.0.3", + "minimatch": "^3.0.4", + "mkdirp": "^0.5.1", + "progress-stream": "^1.2.0", + "q": "^1.4.1", + "rimraf": "^2.7.1", + "throttle": "^1.0.3", + "trash": "^4.3.0", + "typescript": "^4.0.3", + "write-file-atomic": "^1.3.1", + "yargs": "^17.7.2" + }, + "dependencies": { + "@types/node": { + "version": "14.18.63", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.63.tgz", + "integrity": "sha512-fAtCfv4jJg+ExtXhvCkCqUKZ+4ok/JQk01qDKhL5BDDoS3AxKXhV5/MAVUZyQnSEd2GT92fkgZl0pz0Q0AzcIQ==" + }, + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "requires": { + "balanced-match": "^1.0.0" + } + }, + "cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "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==" + }, + "glob": { + "version": "10.4.1", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.1.tgz", + "integrity": "sha512-2jelhlq3E4ho74ZyVLN03oKdAZVUa6UDZzFLVH1H7dnoax+y9qyaq8zBkfDIggjniU19z0wU18y16jMB2eyVIw==", + "requires": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "path-scurry": "^1.11.1" + }, + "dependencies": { + "minimatch": { + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", + "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", + "requires": { + "brace-expansion": "^2.0.1" + } + } + } + }, + "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", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + }, + "minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==" + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, + "y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==" + }, + "yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "requires": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + } + }, + "yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==" + } + } + }, + "@plastichub/osr-ai": { + "version": "file:../osr-ai", + "requires": { + "@asteasolutions/zod-to-openapi": "^7.2.0", + "@plastichub/core": "^0.1.9", + "@plastichub/fs": "^0.13.41", + "@plastichub/osr-ai-templates": "file:../osr-ai-templates", + "@plastichub/osr-cache": "^0.4.7", + "@plastichub/osr-cli-commons": "file:../osr-cli-commons", + "@plastichub/osr-commons": "file:../osr-commons", + "@plastichub/osr-log": "file:../osr-log", + "@plastichub/osr-templates": "file:../osr-templates", + "@rjsf/bootstrap-4": "^5.18.4", + "@types/cacache": "^15.0.1", + "@types/mime-types": "^2.1.4", + "@types/node": "^14.18.63", + "axios": "^1.7.7", + "cacache": "^17.0.3", + "chalk": "^2.4.1", + "cheerio": "^1.0.0-rc.12", + "convert-units": "^2.3.4", + "csv-generate": "^4.3.1", + "deepmerge-ts": "^7.1.3", + "electron": "^30.0.9", + "env-var": "^7.0.1", + "glob-base": "^0.3.0", + "html-to-text": "^9.0.5", + "md5": "^2.3.0", + "mime-types": "^2.1.35", + "openai": "^4.84.0", + "tslog": "^3.3.3", + "typescript": "^5.3.3", + "yargs": "^17.7.2", + "yauzl": "^3.0.0", + "zod": "^3.24.1", + "zod-to-json-schema": "^3.23.3" + } + }, + "@plastichub/osr-cache": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@plastichub/osr-cache/-/osr-cache-0.3.9.tgz", + "integrity": "sha512-D9YRGNIa9ffaDNCjUZs3jYk5+eESySYoBbjXyRvEVsgeJPX5O+qQaxlsHACo+BUWum9sYiNYiCpBVHPMaEihnQ==", + "requires": { + "@plastichub/core": "^0.2.0", + "@plastichub/fs": "^0.13.32", + "@plastichub/osr-cli-commons": "^0.2.3", + "@types/cacache": "^15.0.1", + "@types/node": "^14.17.5", + "@types/yargs": "^17.0.2", + "cacache": "^17.0.3", + "chalk": "^2.4.1", + "convert-units": "^2.3.4", + "env-var": "^7.0.1", + "md5": "^2.3.0", + "typescript": "^4.3.5", + "yargs": "^14.2.3", + "yargs-parser": "^15.0.3" + }, + "dependencies": { + "@npmcli/move-file": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-2.0.1.tgz", + "integrity": "sha512-mJd2Z5TjYWq/ttPLLGqArdtnC74J6bOzg4rMDnN+p1xTacZ2yPRCk2y0oSWQtygLR9YVQXgOcONrwtnk3JupxQ==", + "requires": { + "mkdirp": "^1.0.4", + "rimraf": "^3.0.2" + } + }, + "@plastichub/osr-cli-commons": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/@plastichub/osr-cli-commons/-/osr-cli-commons-0.2.9.tgz", + "integrity": "sha512-dAR0kYH6Y8vBrIIXkMldzSdugFfRYU/FgnyNuCY6iR2Wh8tqCGZQDJ/sZwuvk1OaLfGj9+ejAb1iHveMjKB0zQ==", + "requires": { + "@plastichub/core": "^0.2.0", + "@plastichub/fs": "^0.13.30", + "@plastichub/osr-commons": "^0.1.6", + "@types/cacache": "^15.0.1", + "@types/node": "^14.17.5", + "@types/yargs": "^17.0.2", + "cacache": "^16.1.2", + "chalk": "^2.4.1", + "convert-units": "^2.3.4", + "cryptr": "^6.0.3", + "env-var": "^7.1.1", + "fast-glob": "^3.2.11", + "glob-base": "^0.3.0", + "is-glob": "^4.0.3", + "parse-glob": "^3.0.4", + "rage-edit": "^1.2.0", + "typescript": "^4.3.5", + "yargs": "^17.5.1" + }, + "dependencies": { + "@npmcli/fs": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-2.1.2.tgz", + "integrity": "sha512-yOJKRvohFOaLqipNtwYB9WugyZKhC/DZC4VYPmpaCzDBrA8YpK3qHZ8/HGscMnE4GqbkLNuVcCnxkeQEdGt6LQ==", + "requires": { + "@gar/promisify": "^1.1.3", + "semver": "^7.3.5" + } + }, + "cacache": { + "version": "16.1.3", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-16.1.3.tgz", + "integrity": "sha512-/+Emcj9DAXxX4cwlLmRI9c166RuL3w30zp4R7Joiv2cQTtTtA+jeuCAjH3ZlGnYS3tKENSrKhAzVVP9GVyzeYQ==", + "requires": { + "@npmcli/fs": "^2.1.0", + "@npmcli/move-file": "^2.0.0", + "chownr": "^2.0.0", + "fs-minipass": "^2.1.0", + "glob": "^8.0.1", + "infer-owner": "^1.0.4", + "lru-cache": "^7.7.1", + "minipass": "^3.1.6", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "mkdirp": "^1.0.4", + "p-map": "^4.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^3.0.2", + "ssri": "^9.0.0", + "tar": "^6.1.11", + "unique-filename": "^2.0.0" + } + }, + "fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "requires": { + "minipass": "^3.0.0" + } + }, + "minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "requires": { + "yallist": "^4.0.0" + } + }, + "ssri": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-9.0.1.tgz", + "integrity": "sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q==", + "requires": { + "minipass": "^3.1.1" + } + }, + "unique-filename": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-2.0.1.tgz", + "integrity": "sha512-ODWHtkkdx3IAR+veKxFV+VBkUMcN+FaqzUUd7IZzt+0zhDZFPFxhlqwPF3YQvMHx1TD0tdgYl+kuPnJ8E6ql7A==", + "requires": { + "unique-slug": "^3.0.0" + } + }, + "unique-slug": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-3.0.0.tgz", + "integrity": "sha512-8EyMynh679x/0gqE9fT9oilG+qEt+ibFyqjuVTsZn1+CMxH+XLlpvr2UZx4nVcCwTpx81nICr2JQFkM+HPLq4w==", + "requires": { + "imurmurhash": "^0.1.4" + } + }, + "yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "requires": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + } + }, + "yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==" + } + } + }, + "@plastichub/osr-commons": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/@plastichub/osr-commons/-/osr-commons-0.1.8.tgz", + "integrity": "sha512-wlsol/kSOtGZYRcTPPv3WMhtH5nWckFjv7mSfLrXPTKR9yBHn/j1ZTeUEI8qe0899VKJdtobH5KkkYMpmvnZCg==", + "requires": { + "@plastichub/core": "^0.2.0", + "@plastichub/fs": "^0.13.32", + "axios": "^0.27.2", + "chalk": "^2.4.1", + "convert-units": "^2.3.4", + "cryptr": "^6.0.3", + "env-var": "^7.1.1", + "filenamify": "^4.3.0", + "querystring": "^0.2.1", + "sanitize-filename": "^1.6.3", + "shell-escape": "^0.2.0", + "tslog": "^3.3.3", + "typescript": "^4.3.5", + "yargs": "^17.5.1" + }, + "dependencies": { + "yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "requires": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + } + }, + "yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==" + } + } + }, + "@types/node": { + "version": "14.18.63", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.63.tgz", + "integrity": "sha512-fAtCfv4jJg+ExtXhvCkCqUKZ+4ok/JQk01qDKhL5BDDoS3AxKXhV5/MAVUZyQnSEd2GT92fkgZl0pz0Q0AzcIQ==" + }, + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "axios": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.27.2.tgz", + "integrity": "sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==", + "requires": { + "follow-redirects": "^1.14.9", + "form-data": "^4.0.0" + } + }, + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "requires": { + "balanced-match": "^1.0.0" + } + }, + "cacache": { + "version": "17.0.4", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-17.0.4.tgz", + "integrity": "sha512-Z/nL3gU+zTUjz5pCA5vVjYM8pmaw2kxM7JEiE0fv3w77Wj+sFbi70CrBruUWH0uNcEdvLDixFpgA2JM4F4DBjA==", + "requires": { + "@npmcli/fs": "^3.1.0", + "fs-minipass": "^3.0.0", + "glob": "^8.0.1", + "lru-cache": "^7.7.1", + "minipass": "^4.0.0", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "p-map": "^4.0.0", + "promise-inflight": "^1.0.1", + "ssri": "^10.0.0", + "tar": "^6.1.11", + "unique-filename": "^3.0.0" + } + }, + "cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "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==" + }, + "form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + } + }, + "fs-minipass": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.0.tgz", + "integrity": "sha512-EUojgQaSPy6sxcqcZgQv6TVF6jiKvurji3AxhAivs/Ep4O1UpS8TusaxpybfFHZ2skRhLqzk6WR8nqNYIMMDeA==", + "requires": { + "minipass": "^4.0.0" + } + }, + "glob": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz", + "integrity": "sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + } + }, + "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", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + }, + "lru-cache": { + "version": "7.14.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.14.1.tgz", + "integrity": "sha512-ysxwsnTKdAx96aTRdhDOCQfDgbHnt8SK0KY8SEjO0wHinhWOFTESbjVCMPbU1uGXg/ch4lifqx0wfjOawU2+WA==" + }, + "minimatch": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.2.tgz", + "integrity": "sha512-bNH9mmM9qsJ2X4r2Nat1B//1dJVcn3+iBLa3IgqJ7EbGaDNepL9QSHOxN4ng33s52VMMhhIfgCYDk3C4ZmlDAg==", + "requires": { + "brace-expansion": "^2.0.1" + } + }, + "minipass": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-4.0.0.tgz", + "integrity": "sha512-g2Uuh2jEKoht+zvO6vJqXmYpflPqzRBT+Th2h01DKh5z7wbY/AZ2gCQ78cP70YoHPyFdY30YBV5WxgLOEwOykw==", + "requires": { + "yallist": "^4.0.0" + } + }, + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" + }, + "p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "requires": { + "aggregate-error": "^3.0.0" + } + }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "requires": { + "glob": "^7.1.3" + }, + "dependencies": { + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "requires": { + "brace-expansion": "^1.1.7" + } + } + } + }, + "semver": { + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", + "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==" + }, + "ssri": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.1.tgz", + "integrity": "sha512-WVy6di9DlPOeBWEjMScpNipeSX2jIZBGEn5Uuo8Q7aIuFEuDX0pw8RxcOjlD1TWP4obi24ki7m/13+nFpcbXrw==", + "requires": { + "minipass": "^4.0.0" + } + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "unique-filename": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-3.0.0.tgz", + "integrity": "sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==", + "requires": { + "unique-slug": "^4.0.0" + } + }, + "unique-slug": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-4.0.0.tgz", + "integrity": "sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==", + "requires": { + "imurmurhash": "^0.1.4" + } + }, + "wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, + "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==" + } + } + }, + "@plastichub/osr-commons": { + "version": "file:../osr-commons", + "requires": { + "@plastichub/core": "^0.2.6", + "@plastichub/fs": "^0.13.41", + "@types/node": "^22.12.0", + "cryptr": "^6.0.3", + "env-var": "^7.5.0", + "fast-glob": "^3.3.2", + "filenamify": "^4.3.0", + "glob": "^11.0.0", + "glob-base": "^0.3.0", + "is-glob": "^4.0.3", + "parse-glob": "^3.0.4", + "sanitize-filename": "^1.6.3", + "tslog": "^4.9.3", + "typescript": "^5.6.3", + "yargs": "^17.7.2", + "zod": "^3.24.1", + "zod-to-json-schema": "^3.23.5", + "zod-to-ts": "^1.2.0" + } + }, + "@plastichub/osr-i18n": { + "version": "file:../osr-i18n", + "requires": { + "@iarna/toml": "^2.2.5", + "@plastichub/core": "file:../core", + "@plastichub/fs": "^0.13.39", + "@plastichub/osr-cache": "file:../osr-cache", + "@plastichub/osr-cli-commons": "file:../osr-cli-commons", + "@plastichub/osr-commons": "file:../osr-commons", + "@plastichub/osr-log": "file:../osr-log", + "@plastichub/osr-sync": "^0.3.8", + "@types/html-minifier-terser": "^7.0.2", + "@types/node": "^20.14.9", + "axios": "^0.27.2", + "convert-units": "^2.3.4", + "cryptr": "^6.0.3", + "deepl-node": "^1.8.0", + "env-var": "^7.1.1", + "front-matter": "^4.0.2", + "glob-base": "^0.3.0", + "html-minifier-terser": "^7.2.0", + "json-to-pretty-yaml": "^1.2.2", + "jsonpath-plus": "^8.1.0", + "keyv": "^4.5.4", + "keyv-file": "^0.3.1", + "link-dev": "^1.0.4", + "p-map": "^4.0.0", + "p-throttle": "^v4.1.1", + "querystring": "^0.2.1", + "ssri": "^10.0.1", + "tslog": "^4.9.3", + "typesafe-i18n": "^5.11.0", + "typescript": "^4.9.5", + "xlsx": "^0.18.5", + "yaml": "^2.4.1", + "yargs": "^17.7.2", + "zod": "^3.24.1" + } + }, + "@plastichub/osr-log": { + "version": "file:../osr-log", + "requires": { + "@datalust/winston-seq": "^2.0.0", + "@plastichub/core": "^0.1.9", + "@plastichub/fs": "^0.13.40", + "@plastichub/osr-commons": "^0.5.0", + "@types/node": "^22.12.0", + "p-map": "^4.0.0", + "rotating-file-stream": "^3.2.5", + "tslog": "^4.9.3", + "winston": "^3.17.0", + "winston-transport": "^4.9.0", + "zod": "^3.24.1" + } + }, + "@putout/minify": { + "version": "4.7.2", + "resolved": "https://registry.npmjs.org/@putout/minify/-/minify-4.7.2.tgz", + "integrity": "sha512-9W1a5BIbnJoCgoZ9sRywj2IkakHTzLwHZRKm2hnV1JdcIwQQaF4ZT9jxFr5LSC/SsI0k18q6gBS7UrpTLLzQtA==" + }, + "@sindresorhus/df": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/df/-/df-2.1.0.tgz", + "integrity": "sha1-0gjPJ+BvC7R20U197M19cm6ao4k=", + "requires": { + "execa": "^0.2.2" + }, + "dependencies": { + "execa": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/execa/-/execa-0.2.2.tgz", + "integrity": "sha1-4urUcsLDGq1vc/GslW7vReEjIMs=", + "requires": { + "cross-spawn-async": "^2.1.1", + "npm-run-path": "^1.0.0", + "object-assign": "^4.0.1", + "path-key": "^1.0.0", + "strip-eof": "^1.0.0" + } + }, + "npm-run-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-1.0.0.tgz", + "integrity": "sha1-9cMr9ZX+ga6Sfa7FLoL4sACsPI8=", + "requires": { + "path-key": "^1.0.0" + } + }, + "path-key": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-1.0.0.tgz", + "integrity": "sha1-XVPVeAGWRsDWiADbThRua9wqx68=" + } + } + }, + "@swc/core": { + "version": "1.7.26", + "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.7.26.tgz", + "integrity": "sha512-f5uYFf+TmMQyYIoxkn/evWhNGuUzC730dFwAKGwBVHHVoPyak1/GvJUm6i1SKl+2Hrj9oN0i3WSoWWZ4pgI8lw==", + "requires": { + "@swc/core-darwin-arm64": "1.7.26", + "@swc/core-darwin-x64": "1.7.26", + "@swc/core-linux-arm-gnueabihf": "1.7.26", + "@swc/core-linux-arm64-gnu": "1.7.26", + "@swc/core-linux-arm64-musl": "1.7.26", + "@swc/core-linux-x64-gnu": "1.7.26", + "@swc/core-linux-x64-musl": "1.7.26", + "@swc/core-win32-arm64-msvc": "1.7.26", + "@swc/core-win32-ia32-msvc": "1.7.26", + "@swc/core-win32-x64-msvc": "1.7.26", + "@swc/counter": "^0.1.3", + "@swc/types": "^0.1.12" + } + }, + "@swc/core-darwin-arm64": { + "version": "1.7.26", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.7.26.tgz", + "integrity": "sha512-FF3CRYTg6a7ZVW4yT9mesxoVVZTrcSWtmZhxKCYJX9brH4CS/7PRPjAKNk6kzWgWuRoglP7hkjQcd6EpMcZEAw==", + "optional": true + }, + "@swc/core-darwin-x64": { + "version": "1.7.26", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.7.26.tgz", + "integrity": "sha512-az3cibZdsay2HNKmc4bjf62QVukuiMRh5sfM5kHR/JMTrLyS6vSw7Ihs3UTkZjUxkLTT8ro54LI6sV6sUQUbLQ==", + "optional": true + }, + "@swc/core-linux-arm-gnueabihf": { + "version": "1.7.26", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.7.26.tgz", + "integrity": "sha512-VYPFVJDO5zT5U3RpCdHE5v1gz4mmR8BfHecUZTmD2v1JeFY6fv9KArJUpjrHEEsjK/ucXkQFmJ0jaiWXmpOV9Q==", + "optional": true + }, + "@swc/core-linux-arm64-gnu": { + "version": "1.7.26", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.7.26.tgz", + "integrity": "sha512-YKevOV7abpjcAzXrhsl+W48Z9mZvgoVs2eP5nY+uoMAdP2b3GxC0Df1Co0I90o2lkzO4jYBpTMcZlmUXLdXn+Q==", + "optional": true + }, + "@swc/core-linux-arm64-musl": { + "version": "1.7.26", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.7.26.tgz", + "integrity": "sha512-3w8iZICMkQQON0uIcvz7+Q1MPOW6hJ4O5ETjA0LSP/tuKqx30hIniCGOgPDnv3UTMruLUnQbtBwVCZTBKR3Rkg==", + "optional": true + }, + "@swc/core-linux-x64-gnu": { + "version": "1.7.26", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.7.26.tgz", + "integrity": "sha512-c+pp9Zkk2lqb06bNGkR2Looxrs7FtGDMA4/aHjZcCqATgp348hOKH5WPvNLBl+yPrISuWjbKDVn3NgAvfvpH4w==", + "optional": true + }, + "@swc/core-linux-x64-musl": { + "version": "1.7.26", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.7.26.tgz", + "integrity": "sha512-PgtyfHBF6xG87dUSSdTJHwZ3/8vWZfNIXQV2GlwEpslrOkGqy+WaiiyE7Of7z9AvDILfBBBcJvJ/r8u980wAfQ==", + "optional": true + }, + "@swc/core-win32-arm64-msvc": { + "version": "1.7.26", + "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.7.26.tgz", + "integrity": "sha512-9TNXPIJqFynlAOrRD6tUQjMq7KApSklK3R/tXgIxc7Qx+lWu8hlDQ/kVPLpU7PWvMMwC/3hKBW+p5f+Tms1hmA==", + "optional": true + }, + "@swc/core-win32-ia32-msvc": { + "version": "1.7.26", + "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.7.26.tgz", + "integrity": "sha512-9YngxNcG3177GYdsTum4V98Re+TlCeJEP4kEwEg9EagT5s3YejYdKwVAkAsJszzkXuyRDdnHUpYbTrPG6FiXrQ==", + "optional": true + }, + "@swc/core-win32-x64-msvc": { + "version": "1.7.26", + "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.7.26.tgz", + "integrity": "sha512-VR+hzg9XqucgLjXxA13MtV5O3C0bK0ywtLIBw/+a+O+Oc6mxFWHtdUeXDbIi5AiPbn0fjgVJMqYnyjGyyX8u0w==", + "optional": true + }, + "@swc/counter": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@swc/counter/-/counter-0.1.3.tgz", + "integrity": "sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==" + }, + "@swc/types": { + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/@swc/types/-/types-0.1.12.tgz", + "integrity": "sha512-wBJA+SdtkbFhHjTMYH+dEH1y4VpfGdAc2Kw/LK09i9bXd/K6j6PkDcFCEzb6iVfZMkPRrl/q0e3toqTAJdkIVA==", + "requires": { + "@swc/counter": "^0.1.3" + } + }, + "@tootallnate/once": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", + "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==" + }, + "@types/cacache": { + "version": "15.0.1", + "resolved": "https://registry.npmjs.org/@types/cacache/-/cacache-15.0.1.tgz", + "integrity": "sha512-JhL2GFJuHMx4RMg4z0XfXB4ZkKdyiOaOLpjoYMXcyKfrkF3IBXNZBj6/Peo9zX/7PPHyfI63NWVD589cI2YTzg==", + "requires": { + "@types/node": "*" + } + }, + "@types/clean-css": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/@types/clean-css/-/clean-css-4.2.11.tgz", + "integrity": "sha512-Y8n81lQVTAfP2TOdtJJEsCoYl1AnOkqDqMvXb9/7pfgZZ7r8YrEyurrAvAoAjHOGXKRybay+5CsExqIH6liccw==", + "requires": { + "@types/node": "*", + "source-map": "^0.6.0" + } + }, + "@types/decompress": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/@types/decompress/-/decompress-4.2.4.tgz", + "integrity": "sha512-/C8kTMRTNiNuWGl5nEyKbPiMv6HA+0RbEXzFhFBEzASM6+oa4tJro9b8nj7eRlOFfuLdzUU+DS/GPDlvvzMOhA==", + "requires": { + "@types/node": "*" + } + }, + "@types/denodeify": { + "version": "1.2.31", + "resolved": "https://registry.npmjs.org/@types/denodeify/-/denodeify-1.2.31.tgz", + "integrity": "sha512-Jgy3dvCyIxhNb5RstVJkubeHZifw8KJXca13ov8OO4IqhDLPRHiJJ6VArJbZZ4HuEMJEB83yCuABodNMlYylzQ==" + }, + "@types/download": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/@types/download/-/download-8.0.1.tgz", + "integrity": "sha512-t5DjMD6Y1DxjXtEHl7Kt+nQn9rOmVLYD8p4Swrcc5QpgyqyqR2gXTIK6RwwMnNeFJ+ZIiIW789fQKzCrK7AOFA==", + "requires": { + "@types/decompress": "*", + "@types/got": "^8", + "@types/node": "*" + } + }, + "@types/get-stdin": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@types/get-stdin/-/get-stdin-7.0.0.tgz", + "integrity": "sha512-kiDwIsKQvsLRvtBOnasij+6eChbCzcUT7OyVvrC5BEOE4QSKbpnwejEp0xND/9sIdOTfiu+BBl3zsB16MJ3Fww==", + "requires": { + "get-stdin": "*" + } + }, + "@types/glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-IO+MJPVhoqz+28h1qLAcBEH2+xHMK6MTyHJc7MTnnYb6wsoLR29POVGJ7LycmVXIqyy/4/2ShP5sUwTXuOwb/w==", + "requires": { + "@types/minimatch": "^5.1.2", + "@types/node": "*" + }, + "dependencies": { + "@types/minimatch": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.2.tgz", + "integrity": "sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==" + } + } + }, + "@types/got": { + "version": "8.3.6", + "resolved": "https://registry.npmjs.org/@types/got/-/got-8.3.6.tgz", + "integrity": "sha512-nvLlj+831dhdm4LR2Ly+HTpdLyBaMynoOr6wpIxS19d/bPeHQxFU5XQ6Gp6ohBpxvCWZM1uHQIC2+ySRH1rGrQ==", + "requires": { + "@types/node": "*" + } + }, + "@types/html-minifier-terser": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-7.0.2.tgz", + "integrity": "sha512-mm2HqV22l8lFQh4r2oSsOEVea+m0qqxEmwpc9kC1p/XzmjLWrReR9D/GRs8Pex2NX/imyEH9c5IU/7tMBQCHOA==" + }, + "@types/is-glob": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/is-glob/-/is-glob-4.0.2.tgz", + "integrity": "sha512-4j5G9Y5jljDSICQ1R2f/Rcyoj6DZmYGneny+p/cDkjep0rkqNg0W73Ty0bVjMUTZgLXHf8oiMjg1XC3CDwCz+g==" + }, + "@types/js-beautify": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@types/js-beautify/-/js-beautify-1.13.2.tgz", + "integrity": "sha512-crV/441NhrynLIclg94i1wV6nX/6rU9ByUyn4muCrsL0HPd3nBzrt6kpQ9MQOB+HeYgLcRARteNJcbnYkp5OwA==" + }, + "@types/jsonpath": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@types/jsonpath/-/jsonpath-0.2.0.tgz", + "integrity": "sha512-v7qlPA0VpKUlEdhghbDqRoKMxFB3h3Ch688TApBJ6v+XLDdvWCGLJIYiPKGZnS6MAOie+IorCfNYVHOPIHSWwQ==" + }, + "@types/minify": { + "version": "9.1.4", + "resolved": "https://registry.npmjs.org/@types/minify/-/minify-9.1.4.tgz", + "integrity": "sha512-zrlLe1E5vKMkWcyaTNpgmuRceT3gyq7arehpUg6CDHmpgO6gT0eb3YHNWgM/kT/bNJcpFh0zV6zgnjY594jFBw==", + "requires": { + "@types/clean-css": "*", + "@types/html-minifier-terser": "*", + "terser": "^5.3.2" + } + }, + "@types/minimatch": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", + "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==" + }, + "@types/moment": { + "version": "2.13.0", + "resolved": "https://registry.npmjs.org/@types/moment/-/moment-2.13.0.tgz", + "integrity": "sha1-YE69GJvDvDShVIaJQE5hoqSqyJY=", + "requires": { + "moment": "*" + } + }, + "@types/node": { + "version": "20.16.5", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.16.5.tgz", + "integrity": "sha512-VwYCweNo3ERajwy0IUlqqcyZ8/A7Zwa9ZP3MnENWcB11AejO+tLy3pu850goUW2FC/IJMdZUfKpX/yxL1gymCA==", + "requires": { + "undici-types": "~6.19.2" + } + }, + "@types/q": { + "version": "1.5.8", + "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.8.tgz", + "integrity": "sha512-hroOstUScF6zhIi+5+x0dzqrHA1EJi+Irri6b1fxolMTqqHIV/Cg77EtnQcZqZCu8hR3mX2BzIxN4/GzI68Kfw==", + "dev": true + }, + "@types/yargs": { + "version": "17.0.33", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.33.tgz", + "integrity": "sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==", + "requires": { + "@types/yargs-parser": "*" + } + }, + "@types/yargs-parser": { + "version": "20.2.1", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-20.2.1.tgz", + "integrity": "sha512-7tFImggNeNBVMsn0vLrpn1H1uPrUBdnARPTpZoitY37ZrdJREzf7I16tMrlK3hen349gr1NYh8CmZQa7CTG6Aw==" + }, + "abab": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz", + "integrity": "sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==" + }, + "abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" + }, + "acorn": { + "version": "8.12.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", + "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==" + }, + "acorn-globals": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz", + "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", + "requires": { + "acorn": "^7.1.1", + "acorn-walk": "^7.1.1" + }, + "dependencies": { + "acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==" + } + } + }, + "acorn-walk": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", + "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==" + }, + "agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "requires": { + "debug": "4" + }, + "dependencies": { + "debug": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } + }, + "aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "requires": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + } + }, + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "alphanum-sort": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz", + "integrity": "sha512-0FcBfdcmaumGPQ0qPn7Q5qTgz/ooXgIyp1rf8ik5bGX8mpE2YHjC0P/eyQvxu1GURYQgq9ozf2mteQ5ZD9YiyQ==", + "dev": true + }, + "ansi-regex": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==" + }, + "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" + } + }, + "ansi-to-html": { + "version": "0.6.15", + "resolved": "https://registry.npmjs.org/ansi-to-html/-/ansi-to-html-0.6.15.tgz", + "integrity": "sha512-28ijx2aHJGdzbs+O5SNQF65r6rrKYnkuwTYm8lZlChuoJ9P1vVzIpWO20sQTqTPDXYp6NFwk326vApTtLVFXpQ==", + "dev": true, + "requires": { + "entities": "^2.0.0" + }, + "dependencies": { + "entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "dev": true + } + } + }, + "anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "dev": true, + "requires": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + }, + "dependencies": { + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + } + }, + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + }, + "dependencies": { + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", + "dev": true, + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + } + } + } + }, + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==", + "dev": true, + "requires": { + "remove-trailing-separator": "^1.0.1" + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + } + } + }, + "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" + } + }, + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==", + "dev": true + }, + "arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", + "dev": true + }, + "arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==", + "dev": true + }, + "array-buffer-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz", + "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==", + "dev": true, + "requires": { + "call-bind": "^1.0.5", + "is-array-buffer": "^3.0.4" + } + }, + "array-equal": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-equal/-/array-equal-1.0.2.tgz", + "integrity": "sha512-gUHx76KtnhEgB3HOuFYiCm3FIdEs6ocM2asHvNTkfu/Y09qQVrrVVaOKENmS2KkSaGoxgXNqC+ZVtR/n0MOkSA==", + "dev": true + }, + "array-union": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", + "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", + "requires": { + "array-uniq": "^1.0.1" + } + }, + "array-uniq": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", + "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=" + }, + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==", + "dev": true + }, + "array.prototype.reduce": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/array.prototype.reduce/-/array.prototype.reduce-1.0.7.tgz", + "integrity": "sha512-mzmiUCVwtiD4lgxYP8g7IYy8El8p2CSMePvIbTS7gchKir/L1fgJrk0yDKmAX6mnRQFKNADYIk8nNlTris5H1Q==", + "dev": true, + "requires": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-array-method-boxes-properly": "^1.0.0", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "is-string": "^1.0.7" + } + }, + "arraybuffer.prototype.slice": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz", + "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==", + "dev": true, + "requires": { + "array-buffer-byte-length": "^1.0.1", + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "es-abstract": "^1.22.3", + "es-errors": "^1.2.1", + "get-intrinsic": "^1.2.3", + "is-array-buffer": "^3.0.4", + "is-shared-array-buffer": "^1.0.2" + } + }, + "arrify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", + "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==" + }, + "asn1": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", + "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", + "dev": true, + "requires": { + "safer-buffer": "~2.1.0" + } + }, + "asn1.js": { + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", + "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", + "dev": true, + "requires": { + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + } + } + }, + "assert": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.1.tgz", + "integrity": "sha512-zzw1uCAgLbsKwBfFc8CX78DDg+xZeBksSO3vwVIDDN5i94eOrPsSSyiVhmsSABFDM/OcpE2aagCat9dnWQLG1A==", + "dev": true, + "requires": { + "object.assign": "^4.1.4", + "util": "^0.10.4" + }, + "dependencies": { + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", + "dev": true + }, + "util": { + "version": "0.10.4", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz", + "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==", + "dev": true, + "requires": { + "inherits": "2.0.3" + } + } + } + }, + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", + "dev": true + }, + "assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==", + "dev": true + }, + "async-each": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.6.tgz", + "integrity": "sha512-c646jH1avxr+aVpndVMeAfYw7wAa6idufrlN3LPA4PmKS0QEGp6PIC9nwz0WQkkvBGAMEki3pFdtxaF39J9vvg==", + "dev": true + }, + "async-limiter": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", + "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==", + "dev": true + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" + }, + "atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", + "dev": true + }, + "available-typed-arrays": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "dev": true, + "requires": { + "possible-typed-array-names": "^1.0.0" + } + }, + "aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==", + "dev": true + }, + "aws4": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.13.2.tgz", + "integrity": "sha512-lHe62zvbTB5eEABUVi/AwVh0ZKY9rMMDhmm+eeyuuUQbQ3+J+fONVQOZyj+DdrvD4BY33uYniyRJ4UJIaSKAfw==", + "dev": true + }, + "axios": { + "version": "0.21.4", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz", + "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==", + "requires": { + "follow-redirects": "^1.14.0" + } + }, + "babel-plugin-polyfill-corejs2": { + "version": "0.4.11", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.11.tgz", + "integrity": "sha512-sMEJ27L0gRHShOh5G54uAAPaiCOygY/5ratXuiyb2G46FmlSpc9eFCzYVyDiPxfNbwzA7mYahmjQc5q+CZQ09Q==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.22.6", + "@babel/helper-define-polyfill-provider": "^0.6.2", + "semver": "^6.3.1" + }, + "dependencies": { + "semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true + } + } + }, + "babel-plugin-polyfill-corejs3": { + "version": "0.10.6", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.6.tgz", + "integrity": "sha512-b37+KR2i/khY5sKmWNVQAnitvquQbNdWy6lJdsr0kmquCKEEUgMKK4SboVM3HtfnZilfjr4MMQ7vY58FVWDtIA==", + "dev": true, + "requires": { + "@babel/helper-define-polyfill-provider": "^0.6.2", + "core-js-compat": "^3.38.0" + } + }, + "babel-plugin-polyfill-regenerator": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.2.tgz", + "integrity": "sha512-2R25rQZWP63nGwaAswvDazbPXfrM3HwVoBXK6HcqeKrSrL/JqcC/rDcf95l4r7LXLyxDXc8uQDa064GubtCABg==", + "dev": true, + "requires": { + "@babel/helper-define-polyfill-provider": "^0.6.2" + } + }, + "babel-runtime": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", + "integrity": "sha512-ITKNuq2wKlW1fJg9sSW52eepoYgZBggvOAHC0u/CYu/qxQ9EVzThCgR69BnSXLHjy2f7SY5zaQ4yt7H9ZVxY2g==", + "dev": true, + "requires": { + "core-js": "^2.4.0", + "regenerator-runtime": "^0.11.0" + }, + "dependencies": { + "regenerator-runtime": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", + "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==", + "dev": true + } + } + }, + "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==", + "dev": true, + "requires": { + "babel-runtime": "^6.26.0", + "esutils": "^2.0.2", + "lodash": "^4.17.4", + "to-fast-properties": "^1.0.3" + } + }, + "babylon-walk": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/babylon-walk/-/babylon-walk-1.0.2.tgz", + "integrity": "sha512-/AcxC8CZ6YzmKNfiH3+XLjJDbhED3qxSrd4uFNvJ91pcsPuwMNXxfjwHxhiYOidhpis0BiBu/gupOdv2EYyglg==", + "dev": true, + "requires": { + "babel-runtime": "^6.11.6", + "babel-types": "^6.15.0", + "lodash.clone": "^4.5.0" + } + }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "base": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", + "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "dev": true, + "requires": { + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + } + } + }, + "base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" + }, + "bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", + "dev": true, + "requires": { + "tweetnacl": "^0.14.3" + } + }, + "bignumber.js": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.1.tgz", + "integrity": "sha512-IdZR9mh6ahOBv/hYGiXyVuyCetmGJhtYkqLBpTStdhEGjegpPlUawydyaF3pbIOFynJTpllEs+NP+CS9jKFLjA==" + }, + "binary-extensions": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", + "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", + "dev": true + }, + "bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "dev": true, + "requires": { + "file-uri-to-path": "1.0.0" + } + }, + "bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" + }, + "bn.js": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==", + "dev": true + }, + "boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==" + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "requires": { + "fill-range": "^7.1.1" + } + }, + "brfs": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/brfs/-/brfs-1.6.1.tgz", + "integrity": "sha512-OfZpABRQQf+Xsmju8XE9bDjs+uU4vLREGolP7bDgcpsI17QREyZ4Bl+2KLxxx1kCgA0fAIhKQBaBYh+PEcCqYQ==", + "dev": true, + "requires": { + "quote-stream": "^1.0.1", + "resolve": "^1.1.5", + "static-module": "^2.2.0", + "through2": "^2.0.0" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "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==", + "dev": true + }, + "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==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "dev": true, + "requires": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, + "xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true + } + } + }, + "brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==", + "dev": true + }, + "browser-process-hrtime": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", + "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==" + }, + "browserify-aes": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", + "dev": true, + "requires": { + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "browserify-cipher": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", + "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", + "dev": true, + "requires": { + "browserify-aes": "^1.0.4", + "browserify-des": "^1.0.0", + "evp_bytestokey": "^1.0.0" + } + }, + "browserify-des": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", + "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", + "dev": true, + "requires": { + "cipher-base": "^1.0.1", + "des.js": "^1.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "browserify-rsa": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.1.tgz", + "integrity": "sha512-YBjSAiTqM04ZVei6sXighu679a3SqWORA3qZTEqZImnlkDIFtKc6pNutpjyZ8RJTjQtuYfeetkxM11GwoYXMIQ==", + "dev": true, + "requires": { + "bn.js": "^5.2.1", + "randombytes": "^2.1.0", + "safe-buffer": "^5.2.1" + } + }, + "browserify-sign": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.3.tgz", + "integrity": "sha512-JWCZW6SKhfhjJxO8Tyiiy+XYB7cqd2S5/+WeYHsKdNKFlCBhKbblba1A/HN/90YwtxKc8tCErjffZl++UNmGiw==", + "dev": true, + "requires": { + "bn.js": "^5.2.1", + "browserify-rsa": "^4.1.0", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "elliptic": "^6.5.5", + "hash-base": "~3.0", + "inherits": "^2.0.4", + "parse-asn1": "^5.1.7", + "readable-stream": "^2.3.8", + "safe-buffer": "^5.2.1" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "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" + }, + "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==", + "dev": true + } + } + }, + "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==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + }, + "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==", + "dev": true + } + } + } + } + }, + "browserify-zlib": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", + "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", + "dev": true, + "requires": { + "pako": "~1.0.5" + } + }, + "browserslist": { + "version": "4.24.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.2.tgz", + "integrity": "sha512-ZIc+Q62revdMcqC6aChtW4jz3My3klmCO1fEmINZY/8J3EpBg5/A/D0AKmBveUh6pgoeycoMkVMko84tuYS+Gg==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30001669", + "electron-to-chromium": "^1.5.41", + "node-releases": "^2.0.18", + "update-browserslist-db": "^1.1.1" + } + }, + "buffer-equal": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-0.0.1.tgz", + "integrity": "sha512-RgSV6InVQ9ODPdLWJ5UAqBqJBOg370Nz6ZQtRzpt6nUjc8v0St97uJ4PYC6NztqIScrAXafKM3mZPMygSe1ggA==", + "dev": true + }, + "buffer-equal-constant-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", + "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==" + }, + "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==" + }, + "buffer-xor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==", + "dev": true + }, + "builtin-status-codes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", + "integrity": "sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==", + "dev": true + }, + "cacache": { + "version": "15.2.0", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.2.0.tgz", + "integrity": "sha512-uKoJSHmnrqXgthDFx/IU6ED/5xd+NNGe+Bb+kLZy7Ku4P+BaiWEUflAKPZ7eAzsYGcsAGASJZsybXp+quEcHTw==", + "requires": { + "@npmcli/move-file": "^1.0.1", + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "glob": "^7.1.4", + "infer-owner": "^1.0.4", + "lru-cache": "^6.0.0", + "minipass": "^3.1.1", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.2", + "mkdirp": "^1.0.3", + "p-map": "^4.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^3.0.2", + "ssri": "^8.0.1", + "tar": "^6.0.2", + "unique-filename": "^1.1.1" + }, + "dependencies": { + "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==", + "requires": { + "yallist": "^4.0.0" + } + }, + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" + }, + "p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "requires": { + "aggregate-error": "^3.0.0" + } + }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "requires": { + "glob": "^7.1.3" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + } + } + }, + "cache-base": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", + "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "dev": true, + "requires": { + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" + } + }, + "call-bind": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "requires": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + } + }, + "call-me-maybe": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.2.tgz", + "integrity": "sha512-HpX65o1Hnr9HH25ojC1YGs7HCQLq0GCOibSaWER0eNpgJ/Z1MZv2mTc7+xh6WOPxbRVcmgbv4hGU+uSQ/2xFZQ==", + "dev": true + }, + "caller-callsite": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz", + "integrity": "sha512-JuG3qI4QOftFsZyOn1qq87fq5grLIyk1JYd5lJmdA+fG7aQ9pA/i3JIJGcO3q0MrRcHlOt1U+ZeHW8Dq9axALQ==", + "dev": true, + "requires": { + "callsites": "^2.0.0" + } + }, + "caller-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz", + "integrity": "sha512-MCL3sf6nCSXOwCTzvPKhN18TU7AHTvdtam8DAogxcrJ8Rjfbbg7Lgng64H9Iy+vUV6VGFClN/TyxBkAebLRR4A==", + "dev": true, + "requires": { + "caller-callsite": "^2.0.0" + } + }, + "callsites": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", + "integrity": "sha512-ksWePWBloaWPxJYQ8TL0JHvtci6G5QTKwQ95RcWAa/lzoAKuAOflGdAK92hpHXjkwb8zLxoLNUoNYZgVsaJzvQ==", + "dev": true + }, + "camel-case": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", + "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", + "requires": { + "pascal-case": "^3.1.2", + "tslib": "^2.0.3" + } + }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" + }, + "caniuse-api": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", + "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", + "dev": true, + "requires": { + "browserslist": "^4.0.0", + "caniuse-lite": "^1.0.0", + "lodash.memoize": "^4.1.2", + "lodash.uniq": "^4.5.0" + } + }, + "caniuse-lite": { + "version": "1.0.30001675", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001675.tgz", + "integrity": "sha512-/wV1bQwPrkLiQMjaJF5yUMVM/VdRPOCU8QZ+PmG6uW6DvYSrNY1bpwHI/3mOcUosLaJCzYDi5o91IQB51ft6cg==", + "dev": true + }, + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==", + "dev": true + }, + "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" + } + }, + "charenc": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", + "integrity": "sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==" + }, + "cheerio": { + "version": "1.0.0-rc.12", + "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.12.tgz", + "integrity": "sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==", + "requires": { + "cheerio-select": "^2.1.0", + "dom-serializer": "^2.0.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1", + "htmlparser2": "^8.0.1", + "parse5": "^7.0.0", + "parse5-htmlparser2-tree-adapter": "^7.0.0" + }, + "dependencies": { + "parse5": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", + "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", + "requires": { + "entities": "^4.4.0" + } + } + } + }, + "cheerio-select": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-2.1.0.tgz", + "integrity": "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==", + "requires": { + "boolbase": "^1.0.0", + "css-select": "^5.1.0", + "css-what": "^6.1.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1" + } + }, + "chokidar": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", + "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", + "dev": true, + "requires": { + "anymatch": "^2.0.0", + "async-each": "^1.0.1", + "braces": "^2.3.2", + "fsevents": "^1.2.7", + "glob-parent": "^3.1.0", + "inherits": "^2.0.3", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "normalize-path": "^3.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.2.1", + "upath": "^1.1.1" + }, + "dependencies": { + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + } + }, + "glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA==", + "dev": true, + "requires": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + }, + "dependencies": { + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==", + "dev": true, + "requires": { + "is-extglob": "^2.1.0" + } + } + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + } + } + }, + "chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==" + }, + "cipher-base": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", + "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "class-utils": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", + "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", + "dev": true, + "requires": { + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "is-descriptor": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.7.tgz", + "integrity": "sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.1", + "is-data-descriptor": "^1.0.1" + } + } + } + }, + "clean-css": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.3.tgz", + "integrity": "sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg==", + "requires": { + "source-map": "~0.6.0" + } + }, + "clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==" + }, + "cli-cursor": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", + "integrity": "sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw==", + "dev": true, + "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==", + "dev": true + }, + "cliui": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "requires": { + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" + } + }, + "clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", + "dev": true + }, + "coa": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz", + "integrity": "sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==", + "dev": true, + "requires": { + "@types/q": "^1.5.1", + "chalk": "^2.4.1", + "q": "^1.1.2" + } + }, + "code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" + }, + "collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==", + "dev": true, + "requires": { + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" + } + }, + "color": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz", + "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==", + "requires": { + "color-convert": "^2.0.1", + "color-string": "^1.9.0" + }, + "dependencies": { + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + } + } + }, + "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": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "color-string": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", + "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", + "requires": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, + "colors": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", + "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==" + }, + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "command-exists": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz", + "integrity": "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==", + "dev": true + }, + "commander": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", + "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==" + }, + "component-emitter": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.1.tgz", + "integrity": "sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ==", + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, + "concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "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==", + "dev": true + }, + "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==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "condense-newlines": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/condense-newlines/-/condense-newlines-0.2.1.tgz", + "integrity": "sha512-P7X+QL9Hb9B/c8HI5BFFKmjgBu2XpQuF98WZ9XkO+dBGgk5XgwiQz7o1SmpglNWId3581UcS0SFAWfoIhMHPfg==", + "requires": { + "extend-shallow": "^2.0.1", + "is-whitespace": "^0.3.0", + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "config-chain": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", + "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==", + "requires": { + "ini": "^1.3.4", + "proto-list": "~1.2.1" + } + }, + "console-browserify": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", + "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==", + "dev": true + }, + "constants-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", + "integrity": "sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ==", + "dev": true + }, + "convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true + }, + "convert-units": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/convert-units/-/convert-units-2.3.4.tgz", + "integrity": "sha512-ERHfdA0UhHJp1IpwE6PnFJx8LqG7B1ZjJ20UvVCmopEnVCfER68Tbe3kvN63dLbYXDA2xFWRE6zd4Wsf0w7POg==", + "requires": { + "lodash.foreach": "2.3.x", + "lodash.keys": "2.3.x" + } + }, + "copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==", + "dev": true + }, + "core-js": { + "version": "2.6.12", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz", + "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==", + "dev": true + }, + "core-js-compat": { + "version": "3.38.1", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.38.1.tgz", + "integrity": "sha512-JRH6gfXxGmrzF3tZ57lFx97YARxCXPaMzPo6jELZhv88pBH5VXpQ+y0znKGlFnzuaihqhLbefxSJxWJMPtfDzw==", + "dev": true, + "requires": { + "browserslist": "^4.23.3" + } + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + }, + "cosmiconfig": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", + "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", + "dev": true, + "requires": { + "import-fresh": "^2.0.0", + "is-directory": "^0.3.1", + "js-yaml": "^3.13.1", + "parse-json": "^4.0.0" + } + }, + "create-ecdh": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", + "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", + "dev": true, + "requires": { + "bn.js": "^4.1.0", + "elliptic": "^6.5.3" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + } + } + }, + "create-hash": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", + "dev": true, + "requires": { + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" + } + }, + "create-hmac": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", + "dev": true, + "requires": { + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "cross-spawn-async": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/cross-spawn-async/-/cross-spawn-async-2.2.5.tgz", + "integrity": "sha1-hF/wwINKPe2dFg2sptOQkGuyiMw=", + "requires": { + "lru-cache": "^4.0.0", + "which": "^1.2.8" + } + }, + "crypt": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", + "integrity": "sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==" + }, + "crypto-browserify": { + "version": "3.12.1", + "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.1.tgz", + "integrity": "sha512-r4ESw/IlusD17lgQi1O20Fa3qNnsckR126TdUuBgAu7GBYSIPvdNyONd3Zrxh0xCwA4+6w/TDArBPsMvhur+KQ==", + "dev": true, + "requires": { + "browserify-cipher": "^1.0.1", + "browserify-sign": "^4.2.3", + "create-ecdh": "^4.0.4", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "diffie-hellman": "^5.0.3", + "hash-base": "~3.0.4", + "inherits": "^2.0.4", + "pbkdf2": "^3.1.2", + "public-encrypt": "^4.0.3", + "randombytes": "^2.1.0", + "randomfill": "^1.0.4" + } + }, + "cryptr": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/cryptr/-/cryptr-6.0.3.tgz", + "integrity": "sha512-Nhaxn3CYl/OoWF3JSZlF8B6FQO600RRkU3g8213OGEIq4YvMlc3od8hL9chubhY1SmTq8ienvCRq1MSFjMTpOg==" + }, + "css-b64-images": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/css-b64-images/-/css-b64-images-0.2.5.tgz", + "integrity": "sha512-TgQBEdP07adhrDfXvI5o6bHGukKBNMzp2Ngckc/6d09zpjD2gc1Hl3Ca1CKgb8FXjHi88+Phv2Uegs2kTL4zjg==" + }, + "css-color-names": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz", + "integrity": "sha512-zj5D7X1U2h2zsXOAM8EyUREBnnts6H+Jm+d1M2DbiQQcUtnqgQsMrdo8JW9R80YFUmIdBZeMu5wvYM7hcgWP/Q==", + "dev": true + }, + "css-declaration-sorter": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-4.0.1.tgz", + "integrity": "sha512-BcxQSKTSEEQUftYpBVnsH4SF05NTuBokb19/sBt6asXGKZ/6VP7PLG1CBCkFDYOnhXhPh0jMhO6xZ71oYHXHBA==", + "dev": true, + "requires": { + "postcss": "^7.0.1", + "timsort": "^0.3.0" + } + }, + "css-modules-loader-core": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/css-modules-loader-core/-/css-modules-loader-core-1.1.0.tgz", + "integrity": "sha512-XWOBwgy5nwBn76aA+6ybUGL/3JBnCtBX9Ay9/OWIpzKYWlVHMazvJ+WtHumfi+xxdPF440cWK7JCYtt8xDifew==", + "dev": true, + "requires": { + "icss-replace-symbols": "1.1.0", + "postcss": "6.0.1", + "postcss-modules-extract-imports": "1.1.0", + "postcss-modules-local-by-default": "1.2.0", + "postcss-modules-scope": "1.1.0", + "postcss-modules-values": "1.3.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==", + "dev": true + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", + "dev": true, + "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" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==", + "dev": true + } + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha512-DyYHfIYwAJmjAjSSPKANxI8bFY9YtFrgkAfinBojQ8YJTOuOuav64tMUJv584SES4xl74PmuaevIyaLESHdTAA==", + "dev": true + }, + "postcss": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.1.tgz", + "integrity": "sha512-VbGX1LQgQbf9l3cZ3qbUuC3hGqIEOGQFHAEHQ/Diaeo0yLgpgK5Rb8J+OcamIfQ9PbAU/fzBjVtQX3AhJHUvZw==", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "dev": true + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha512-Jds2VIYDrlp5ui7t8abHN2bjAu4LV/q4N2KivFPpGH0lrka0BMq/33AmECUXlKPcHigkNaqfXRENFju+rlcy+A==", + "dev": true, + "requires": { + "has-flag": "^1.0.0" + } + } + } + }, + "css-select": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", + "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", + "requires": { + "boolbase": "^1.0.0", + "css-what": "^6.1.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "nth-check": "^2.0.1" + } + }, + "css-select-base-adapter": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz", + "integrity": "sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==", + "dev": true + }, + "css-selector-tokenizer": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.7.3.tgz", + "integrity": "sha512-jWQv3oCEL5kMErj4wRnK/OPoBi0D+P1FR2cDCKYPaMeD2eW3/mttav8HT4hT1CKopiJI/psEULjkClhvJo4Lvg==", + "dev": true, + "requires": { + "cssesc": "^3.0.0", + "fastparse": "^1.1.2" + } + }, + "css-tree": { + "version": "1.0.0-alpha.37", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.37.tgz", + "integrity": "sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==", + "dev": true, + "requires": { + "mdn-data": "2.0.4", + "source-map": "^0.6.1" + } + }, + "css-what": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==" + }, + "cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true + }, + "cssnano": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-4.1.11.tgz", + "integrity": "sha512-6gZm2htn7xIPJOHY824ERgj8cNPgPxyCSnkXc4v7YvNW+TdVfzgngHcEhy/8D11kUWRUMbke+tC+AUcUsnMz2g==", + "dev": true, + "requires": { + "cosmiconfig": "^5.0.0", + "cssnano-preset-default": "^4.0.8", + "is-resolvable": "^1.0.0", + "postcss": "^7.0.0" + } + }, + "cssnano-preset-default": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-4.0.8.tgz", + "integrity": "sha512-LdAyHuq+VRyeVREFmuxUZR1TXjQm8QQU/ktoo/x7bz+SdOge1YKc5eMN6pRW7YWBmyq59CqYba1dJ5cUukEjLQ==", + "dev": true, + "requires": { + "css-declaration-sorter": "^4.0.1", + "cssnano-util-raw-cache": "^4.0.1", + "postcss": "^7.0.0", + "postcss-calc": "^7.0.1", + "postcss-colormin": "^4.0.3", + "postcss-convert-values": "^4.0.1", + "postcss-discard-comments": "^4.0.2", + "postcss-discard-duplicates": "^4.0.2", + "postcss-discard-empty": "^4.0.1", + "postcss-discard-overridden": "^4.0.1", + "postcss-merge-longhand": "^4.0.11", + "postcss-merge-rules": "^4.0.3", + "postcss-minify-font-values": "^4.0.2", + "postcss-minify-gradients": "^4.0.2", + "postcss-minify-params": "^4.0.2", + "postcss-minify-selectors": "^4.0.2", + "postcss-normalize-charset": "^4.0.1", + "postcss-normalize-display-values": "^4.0.2", + "postcss-normalize-positions": "^4.0.2", + "postcss-normalize-repeat-style": "^4.0.2", + "postcss-normalize-string": "^4.0.2", + "postcss-normalize-timing-functions": "^4.0.2", + "postcss-normalize-unicode": "^4.0.1", + "postcss-normalize-url": "^4.0.1", + "postcss-normalize-whitespace": "^4.0.2", + "postcss-ordered-values": "^4.1.2", + "postcss-reduce-initial": "^4.0.3", + "postcss-reduce-transforms": "^4.0.2", + "postcss-svgo": "^4.0.3", + "postcss-unique-selectors": "^4.0.1" + } + }, + "cssnano-util-get-arguments": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cssnano-util-get-arguments/-/cssnano-util-get-arguments-4.0.0.tgz", + "integrity": "sha512-6RIcwmV3/cBMG8Aj5gucQRsJb4vv4I4rn6YjPbVWd5+Pn/fuG+YseGvXGk00XLkoZkaj31QOD7vMUpNPC4FIuw==", + "dev": true + }, + "cssnano-util-get-match": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cssnano-util-get-match/-/cssnano-util-get-match-4.0.0.tgz", + "integrity": "sha512-JPMZ1TSMRUPVIqEalIBNoBtAYbi8okvcFns4O0YIhcdGebeYZK7dMyHJiQ6GqNBA9kE0Hym4Aqym5rPdsV/4Cw==", + "dev": true + }, + "cssnano-util-raw-cache": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/cssnano-util-raw-cache/-/cssnano-util-raw-cache-4.0.1.tgz", + "integrity": "sha512-qLuYtWK2b2Dy55I8ZX3ky1Z16WYsx544Q0UWViebptpwn/xDBmog2TLg4f+DBMg1rJ6JDWtn96WHbOKDWt1WQA==", + "dev": true, + "requires": { + "postcss": "^7.0.0" + } + }, + "cssnano-util-same-parent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.1.tgz", + "integrity": "sha512-WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q==", + "dev": true + }, + "csso": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", + "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", + "dev": true, + "requires": { + "css-tree": "^1.1.2" + }, + "dependencies": { + "css-tree": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", + "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", + "dev": true, + "requires": { + "mdn-data": "2.0.14", + "source-map": "^0.6.1" + } + }, + "mdn-data": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", + "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", + "dev": true + } + } + }, + "cssom": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", + "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==" + }, + "cssstyle": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", + "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", + "requires": { + "cssom": "~0.3.6" + }, + "dependencies": { + "cssom": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", + "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==" + } + } + }, + "dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", + "dev": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, + "data-urls": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", + "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==", + "requires": { + "abab": "^2.0.3", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^8.0.0" + } + }, + "data-view-buffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz", + "integrity": "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==", + "dev": true, + "requires": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + } + }, + "data-view-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz", + "integrity": "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + } + }, + "data-view-byte-offset": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz", + "integrity": "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==", + "dev": true, + "requires": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + } + }, + "deasync": { + "version": "0.1.30", + "resolved": "https://registry.npmjs.org/deasync/-/deasync-0.1.30.tgz", + "integrity": "sha512-OaAjvEQuQ9tJsKG4oHO9nV1UHTwb2Qc2+fadB0VeVtD0Z9wiG1XPGLJ4W3aLhAoQSYTaLROFRbd5X20Dkzf7MQ==", + "dev": true, + "requires": { + "bindings": "^1.5.0", + "node-addon-api": "^1.7.1" + } + }, + "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" + } + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" + }, + "decimal.js": { + "version": "10.3.1", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.3.1.tgz", + "integrity": "sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ==" + }, + "decode-uri-component": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz", + "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==" + }, + "deep-is": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=" + }, + "deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==" + }, + "defaults": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", + "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", + "dev": true, + "requires": { + "clone": "^1.0.2" + } + }, + "define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "requires": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + } + }, + "define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "dev": true, + "requires": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "dependencies": { + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true + } + } + }, + "define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "dev": true, + "requires": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + } + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" + }, + "denodeify": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/denodeify/-/denodeify-1.2.1.tgz", + "integrity": "sha1-OjYof1A05pnnV3kBBSwubJQlFjE=" + }, + "depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "dev": true + }, + "des.js": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.1.0.tgz", + "integrity": "sha512-r17GxjhUCjSRy8aiJpr8/UadFIzMzJGexI3Nmz4ADi9LYSFx4gTBp80+NaX/YsXWWLhpZ7v/v/ubEc/bCNfKwg==", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + } + }, + "destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "dev": true + }, + "detect-libc": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz", + "integrity": "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==" + }, + "diffie-hellman": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", + "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", + "dev": true, + "requires": { + "bn.js": "^4.1.0", + "miller-rabin": "^4.0.0", + "randombytes": "^2.0.0" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + } + } + }, + "dir-glob": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.2.2.tgz", + "integrity": "sha512-f9LBi5QWzIW3I6e//uxZoLBlUt9kcp66qo0sSCxL6YZKc75R1c4MFCoe/LaZiBGmgujvQdxc5Bn3QhfyvK5Hsw==", + "requires": { + "path-type": "^3.0.0" + } + }, + "dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "requires": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + } + }, + "domain-browser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", + "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", + "dev": true + }, + "domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==" + }, + "domexception": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz", + "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==", + "requires": { + "webidl-conversions": "^5.0.0" + }, + "dependencies": { + "webidl-conversions": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz", + "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==" + } + } + }, + "domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "requires": { + "domelementtype": "^2.3.0" + } + }, + "domutils": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.0.1.tgz", + "integrity": "sha512-z08c1l761iKhDFtfXO04C7kTdPBLi41zwOZl00WS8b5eiaebNpY00HKbztwBq+e3vyqWNwWF3mP9YLUeqIrF+Q==", + "requires": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.1" + } + }, + "dot-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", + "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", + "requires": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "dot-prop": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", + "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", + "dev": true, + "requires": { + "is-obj": "^2.0.0" + } + }, + "dotenv": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-5.0.1.tgz", + "integrity": "sha512-4As8uPrjfwb7VXC+WnLCbXK7y+Ueb2B3zgNCePYfhxS1PYeaO1YTeplffTEcbfLhvFNGLAz90VvJs9yomG7bow==", + "dev": true + }, + "dotenv-expand": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-5.1.0.tgz", + "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==", + "dev": true + }, + "duplexer2": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", + "integrity": "sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==", + "dev": true, + "requires": { + "readable-stream": "^2.0.2" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "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==", + "dev": true + }, + "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==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" + }, + "ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", + "dev": true, + "requires": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "ecdsa-sig-formatter": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", + "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "editorconfig": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/editorconfig/-/editorconfig-1.0.4.tgz", + "integrity": "sha512-L9Qe08KWTlqYMVvMcTIvMAdl1cDUubzRNYL+WfA4bLDMHe4nemKkpmYzkznE1FwLKu0EEmy6obgQKzMJrg4x9Q==", + "requires": { + "@one-ini/wasm": "0.1.1", + "commander": "^10.0.0", + "minimatch": "9.0.1", + "semver": "^7.5.3" + }, + "dependencies": { + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "requires": { + "balanced-match": "^1.0.0" + } + }, + "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==", + "requires": { + "yallist": "^4.0.0" + } + }, + "minimatch": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.1.tgz", + "integrity": "sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==", + "requires": { + "brace-expansion": "^2.0.1" + } + }, + "semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "requires": { + "lru-cache": "^6.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + } + } + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "dev": true + }, + "electron-to-chromium": { + "version": "1.5.49", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.49.tgz", + "integrity": "sha512-ZXfs1Of8fDb6z7WEYZjXpgIRF6MEu8JdeGA0A40aZq6OQbS+eJpnnV49epZRna2DU/YsEjSQuGtQPPtvt6J65A==", + "dev": true + }, + "elliptic": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.6.0.tgz", + "integrity": "sha512-dpwoQcLc/2WLQvJvLRHKZ+f9FgOdjnq11rurqwekGQygGPsYSK29OMMD2WalatiqQ+XGFDglTNixpPfI+lpaAA==", + "dev": true, + "requires": { + "bn.js": "^4.11.9", + "brorand": "^1.1.0", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.1", + "inherits": "^2.0.4", + "minimalistic-assert": "^1.0.1", + "minimalistic-crypto-utils": "^1.0.1" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + } + } + }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" + }, + "encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "dev": true + }, + "entities": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.4.0.tgz", + "integrity": "sha512-oYp7156SP8LkeGD0GF85ad1X9Ai79WtRsZ2gxJqtBuzH+98YUV6jkHEKlZkMbcrjJjIVJNIDP/3WL9wQkoPbWA==" + }, + "env-var": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/env-var/-/env-var-7.3.0.tgz", + "integrity": "sha512-qwtwYJ9d3XFxXRDudPEAMszaggpDgcfb1ZGYb9/cNyMugN2/a8EtviopnRL6c+petj2vp6/gxwYd9ExL1/iPcw==" + }, + "envinfo": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.14.0.tgz", + "integrity": "sha512-CO40UI41xDQzhLB1hWyqUKgFhs250pNcGbyGKe1l/e4FSaI/+YE4IMG76GDt0In67WLPACIITC+sOi08x4wIvg==", + "dev": true + }, + "errlop": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/errlop/-/errlop-4.5.0.tgz", + "integrity": "sha512-oUGLzMxSQ/wfkq2hTIJv66Y6WAqCXM+10BKdllOrQFvc6bqcSomL2pUcflazdcOtodT7agUJ8tz75XzBtL1o0w==" + }, + "errno": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", + "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", + "requires": { + "prr": "~1.0.1" + } + }, + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "es-abstract": { + "version": "1.23.3", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz", + "integrity": "sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==", + "dev": true, + "requires": { + "array-buffer-byte-length": "^1.0.1", + "arraybuffer.prototype.slice": "^1.0.3", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "data-view-buffer": "^1.0.1", + "data-view-byte-length": "^1.0.1", + "data-view-byte-offset": "^1.0.0", + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-set-tostringtag": "^2.0.3", + "es-to-primitive": "^1.2.1", + "function.prototype.name": "^1.1.6", + "get-intrinsic": "^1.2.4", + "get-symbol-description": "^1.0.2", + "globalthis": "^1.0.3", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.0.3", + "has-symbols": "^1.0.3", + "hasown": "^2.0.2", + "internal-slot": "^1.0.7", + "is-array-buffer": "^3.0.4", + "is-callable": "^1.2.7", + "is-data-view": "^1.0.1", + "is-negative-zero": "^2.0.3", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.3", + "is-string": "^1.0.7", + "is-typed-array": "^1.1.13", + "is-weakref": "^1.0.2", + "object-inspect": "^1.13.1", + "object-keys": "^1.1.1", + "object.assign": "^4.1.5", + "regexp.prototype.flags": "^1.5.2", + "safe-array-concat": "^1.1.2", + "safe-regex-test": "^1.0.3", + "string.prototype.trim": "^1.2.9", + "string.prototype.trimend": "^1.0.8", + "string.prototype.trimstart": "^1.0.8", + "typed-array-buffer": "^1.0.2", + "typed-array-byte-length": "^1.0.1", + "typed-array-byte-offset": "^1.0.2", + "typed-array-length": "^1.0.6", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.15" + }, + "dependencies": { + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true + } + } + }, + "es-array-method-boxes-properly": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz", + "integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==", + "dev": true + }, + "es-define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "requires": { + "get-intrinsic": "^1.2.4" + } + }, + "es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==" + }, + "es-object-atoms": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz", + "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==", + "dev": true, + "requires": { + "es-errors": "^1.3.0" + } + }, + "es-set-tostringtag": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz", + "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==", + "dev": true, + "requires": { + "get-intrinsic": "^1.2.4", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.1" + } + }, + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "esbuild": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.23.1.tgz", + "integrity": "sha512-VVNz/9Sa0bs5SELtn3f7qhJCDPCF5oMEl5cO9/SSinpE9hbPVvxbd572HH5AKiP7WD8INO53GgfDDhRjkylHEg==", + "requires": { + "@esbuild/aix-ppc64": "0.23.1", + "@esbuild/android-arm": "0.23.1", + "@esbuild/android-arm64": "0.23.1", + "@esbuild/android-x64": "0.23.1", + "@esbuild/darwin-arm64": "0.23.1", + "@esbuild/darwin-x64": "0.23.1", + "@esbuild/freebsd-arm64": "0.23.1", + "@esbuild/freebsd-x64": "0.23.1", + "@esbuild/linux-arm": "0.23.1", + "@esbuild/linux-arm64": "0.23.1", + "@esbuild/linux-ia32": "0.23.1", + "@esbuild/linux-loong64": "0.23.1", + "@esbuild/linux-mips64el": "0.23.1", + "@esbuild/linux-ppc64": "0.23.1", + "@esbuild/linux-riscv64": "0.23.1", + "@esbuild/linux-s390x": "0.23.1", + "@esbuild/linux-x64": "0.23.1", + "@esbuild/netbsd-x64": "0.23.1", + "@esbuild/openbsd-arm64": "0.23.1", + "@esbuild/openbsd-x64": "0.23.1", + "@esbuild/sunos-x64": "0.23.1", + "@esbuild/win32-arm64": "0.23.1", + "@esbuild/win32-ia32": "0.23.1", + "@esbuild/win32-x64": "0.23.1" + } + }, + "escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==" + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "dev": true + }, + "escape-string-applescript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-applescript/-/escape-string-applescript-2.0.0.tgz", + "integrity": "sha1-dgvKg4Zo5Aj+XuUs5CyvfLRsUnM=" + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + }, + "escodegen": { + "version": "1.14.3", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", + "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", + "requires": { + "esprima": "^4.0.1", + "estraverse": "^4.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1", + "source-map": "~0.6.1" + }, + "dependencies": { + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" + } + } + }, + "esprima": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-1.2.2.tgz", + "integrity": "sha1-dqD9Zvz+FU/SkmZ9wmQBl1CxZXs=" + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==" + }, + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" + }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "dev": true + }, + "events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "dev": true + }, + "evp_bytestokey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", + "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", + "dev": true, + "requires": { + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" + } + }, + "exception-formatter": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/exception-formatter/-/exception-formatter-2.1.2.tgz", + "integrity": "sha512-LHBd3npNQZ47GeO5jPTorbCvw2/BxxFNn9JG+FjjhifwI/jC5zi2W+UX//FrlIfTXvW4nRx2jthy1ujTVHhsLw==", + "requires": { + "colors": "^1.0.3" + } + }, + "execa": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-0.10.0.tgz", + "integrity": "sha512-7XOMnz8Ynx1gGo/3hyV9loYNPWM94jG3+3T3Y8tsfSstFmETmENCMU/A/zj8Lyaj1lkgEepKepvd6240tBRvlw==", + "requires": { + "cross-spawn": "^6.0.0", + "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" + } + }, + "expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA==", + "dev": true, + "requires": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "is-descriptor": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.7.tgz", + "integrity": "sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.1", + "is-data-descriptor": "^1.0.1" + } + } + } + }, + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "requires": { + "is-extendable": "^0.1.0" + } + }, + "extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "dev": true, + "requires": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + } + } + }, + "extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", + "dev": true + }, + "falafel": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/falafel/-/falafel-2.2.5.tgz", + "integrity": "sha512-HuC1qF9iTnHDnML9YZAdCDQwT0yKl/U55K4XSUXqGAA2GLoafFgWRqdAbhWJxXaYD4pyoVxAJ8wH670jMpI9DQ==", + "dev": true, + "requires": { + "acorn": "^7.1.1", + "isarray": "^2.0.1" + }, + "dependencies": { + "acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true + }, + "isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true + } + } + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "fast-glob": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "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" + } + }, + "fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=" + }, + "fast-text-encoding": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/fast-text-encoding/-/fast-text-encoding-1.0.6.tgz", + "integrity": "sha512-VhXlQgj9ioXCqGstD37E/HBeqEGV/qOD/kmbVG8h5xKBYvM1L3lR1Zn4555cQ8GkYbJa8aJSipLPndE1k6zK2w==" + }, + "fastparse": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/fastparse/-/fastparse-1.1.2.tgz", + "integrity": "sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ==", + "dev": true + }, + "fastq": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.11.1.tgz", + "integrity": "sha512-HOnr8Mc60eNYl1gzwp6r5RoUyAn5/glBolUzP/Ez6IFVPMPirxn/9phgL6zhOtaTy7ISwPvQ+wT+hfcRZh/bzw==", + "requires": { + "reusify": "^1.0.4" + } + }, + "file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", + "dev": true + }, + "filename-reserved-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz", + "integrity": "sha1-q/c9+rc10EVECr/qLZHzieu/oik=" + }, + "filenamify": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/filenamify/-/filenamify-4.3.0.tgz", + "integrity": "sha512-hcFKyUG57yWGAzu1CMt/dPzYZuv+jAJUT85bL8mrXvNe6hWj6yEHEc4EdcgiA6Z3oi1/9wXJdZPXF2dZNgwgOg==", + "requires": { + "filename-reserved-regex": "^2.0.0", + "strip-outer": "^1.0.1", + "trim-repeated": "^1.0.0" + } + }, + "filesize": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/filesize/-/filesize-3.6.1.tgz", + "integrity": "sha512-7KjR1vv6qnicaPMi1iiTcI85CyYwRO/PSFCu6SvqL8jN2Wjt/NIYQTFtFs7fSDCYOstUkEWIQGFUg5YZQfjlcg==", + "dev": true + }, + "fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "filter-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/filter-obj/-/filter-obj-1.1.0.tgz", + "integrity": "sha512-8rXg1ZnX7xzy2NGDVkBVaAy+lSlPNwad13BtgSlLuxfIslyt5Vg64U7tFcCt4WS1R0hvtnQybT/IyCkGZ3DpXQ==" + }, + "find-up": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.0.0.tgz", + "integrity": "sha512-zoH7ZWPkRdgwYCDVoQTzqjG8JSPANhtvLhh4KVUHyKnaUJJrNeFmWIkTcNuJmR3GLMEmGYEf2S2bjgx26JTF+Q==", + "requires": { + "locate-path": "^5.0.0" + } + }, + "follow-redirects": { + "version": "1.15.6", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", + "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==" + }, + "for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dev": true, + "requires": { + "is-callable": "^1.1.3" + } + }, + "for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==", + "dev": true + }, + "foreground-child": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.2.0.tgz", + "integrity": "sha512-CrWQNaEl1/6WeZoarcM9LHupTo3RpZO2Pdk1vktwzPiQTsJnAKJmm3TACKeG5UZbWDfaH2AbvYxzP96y0MT7fA==", + "requires": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "dependencies": { + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" + }, + "signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==" + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", + "dev": true + }, + "form-data": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", + "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + } + }, + "fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA==", + "dev": true, + "requires": { + "map-cache": "^0.2.2" + } + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "dev": true + }, + "front-matter": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/front-matter/-/front-matter-4.0.2.tgz", + "integrity": "sha512-I8ZuJ/qG92NWX8i5x1Y8qyj3vizhXS31OxjKDu3LKP+7/qBgfIKValiZIEwoVoJKUHlhWtYrktkxV1XsX+pPlg==", + "requires": { + "js-yaml": "^3.13.1" + } + }, + "fs-extra": { + "version": "0.30.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz", + "integrity": "sha1-8jP/zAjU2n1DLapEl3aYnbHfk/A=", + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^2.1.0", + "klaw": "^1.0.0", + "path-is-absolute": "^1.0.0", + "rimraf": "^2.2.8" + } + }, + "fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "requires": { + "minipass": "^3.0.0" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + }, + "fsevents": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", + "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", + "dev": true, + "optional": true, + "requires": { + "bindings": "^1.5.0", + "nan": "^2.12.1" + } + }, + "function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==" + }, + "function.prototype.name": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", + "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "functions-have-names": "^1.2.3" + } + }, + "functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "dev": true + }, + "gaxios": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-5.0.2.tgz", + "integrity": "sha512-TjtV2AJOZoMQqRYoy5eM8cCQogYwazWNYLQ72QB0kwa6vHHruYkGmhhyrlzbmgNHK1dNnuP2WSH81urfzyN2Og==", + "requires": { + "extend": "^3.0.2", + "https-proxy-agent": "^5.0.0", + "is-stream": "^2.0.0", + "node-fetch": "^2.6.7" + }, + "dependencies": { + "is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==" + } + } + }, + "gcp-metadata": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-5.2.0.tgz", + "integrity": "sha512-aFhhvvNycky2QyhG+dcfEdHBF0FRbYcf39s6WNHUDysKSrbJ5vuFbjydxBcmewtXeV248GP8dWT3ByPNxsyHCw==", + "requires": { + "gaxios": "^5.0.0", + "json-bigint": "^1.0.0" + } + }, + "gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" + }, + "get-intrinsic": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "requires": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + } + }, + "get-port": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/get-port/-/get-port-3.2.0.tgz", + "integrity": "sha512-x5UJKlgeUiNT8nyo/AcnwLnZuZNcSjSw0kogRB+Whd1fjjFq4B1hySFxSFWWSn4mIBzg3sRNUDFYc4g5gjPoLg==", + "dev": true + }, + "get-stdin": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-9.0.0.tgz", + "integrity": "sha512-dVKBjfWisLAicarI2Sf+JuBE/DghV4UzNAVe9yhEJuzeREd3JhOTE9cUaJTeSa77fsbQUK3pcOpJfM59+VKZaA==" + }, + "get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=" + }, + "get-symbol-description": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz", + "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==", + "dev": true, + "requires": { + "call-bind": "^1.0.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4" + } + }, + "get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==", + "dev": true + }, + "getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", + "dev": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, + "gitea-js": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/gitea-js/-/gitea-js-1.20.1.tgz", + "integrity": "sha512-g1wdNP5zYN258tTVIm2vGY8bRJTwVwCfYH0ockUpi34RAuOwJ0FavpFVVvazxXEcdo2XmXRKZcAmVhAhwMXkgg==" + }, + "glob": { + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", + "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "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" + } + }, + "glob-base": { + "version": "git+ssh://git@github.com/justin-caribou/glob-base.git#d4fe4313e55988a902a3940127cb946a7defbb50", + "from": "glob-base@^0.3.0", + "requires": { + "glob-parent": "^6.0.2", + "is-glob": "^2.0.0" + }, + "dependencies": { + "glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "requires": { + "is-glob": "^4.0.3" + }, + "dependencies": { + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "requires": { + "is-extglob": "^2.1.1" + } + } + } + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha512-a1dBeB19NXsf/E0+FHqkagizel/LQw2DjSQpvQrj3zT+jYPpaUCryPnrQajXKFLCMuf4I6FhRpaGtw4lPrG6Eg==", + "requires": { + "is-extglob": "^1.0.0" + }, + "dependencies": { + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha512-7Q+VbVafe6x2T+Tu6NcOf6sRklazEPmBoB3IWk3WdGZM2iGUwU/Oe3Wtq5lSEkDTTlpp8yx+5t4pzO/i9Ty1ww==" + } + } + } + } + }, + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "requires": { + "is-glob": "^4.0.1" + } + }, + "glob-to-regexp": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz", + "integrity": "sha512-Iozmtbqv0noj0uDDqoL0zNq0VBEfK2YFoMAZoxJe4cwphvLR+JskfF30QhXHOR4m3KrE6NLRYw+U9MRXvifyig==", + "dev": true + }, + "globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true + }, + "globalthis": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", + "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", + "dev": true, + "requires": { + "define-properties": "^1.2.1", + "gopd": "^1.0.1" + } + }, + "globby": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/globby/-/globby-7.1.1.tgz", + "integrity": "sha1-+yzP+UAfhgCUXfral0QMypcrhoA=", + "requires": { + "array-union": "^1.0.1", + "dir-glob": "^2.0.0", + "glob": "^7.1.2", + "ignore": "^3.3.5", + "pify": "^3.0.0", + "slash": "^1.0.0" + } + }, + "google-auth-library": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-8.7.0.tgz", + "integrity": "sha512-1M0NG5VDIvJZEnstHbRdckLZESoJwguinwN8Dhae0j2ZKIQFIV63zxm6Fo6nM4xkgqUr2bbMtV5Dgo+Hy6oo0Q==", + "requires": { + "arrify": "^2.0.0", + "base64-js": "^1.3.0", + "ecdsa-sig-formatter": "^1.0.11", + "fast-text-encoding": "^1.0.0", + "gaxios": "^5.0.0", + "gcp-metadata": "^5.0.0", + "gtoken": "^6.1.0", + "jws": "^4.0.0", + "lru-cache": "^6.0.0" + }, + "dependencies": { + "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==", + "requires": { + "yallist": "^4.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + } + } + }, + "google-p12-pem": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/google-p12-pem/-/google-p12-pem-4.0.1.tgz", + "integrity": "sha512-WPkN4yGtz05WZ5EhtlxNDWPhC4JIic6G8ePitwUWy4l+XPVYec+a0j0Ts47PDtW59y3RwAhUd9/h9ZZ63px6RQ==", + "requires": { + "node-forge": "^1.3.1" + } + }, + "googleapis": { + "version": "105.0.0", + "resolved": "https://registry.npmjs.org/googleapis/-/googleapis-105.0.0.tgz", + "integrity": "sha512-wH/jU/6QpqwsjTKj4vfKZz97ne7xT7BBbKwzQEwnbsG8iH9Seyw19P+AuLJcxNNrmgblwLqfr3LORg4Okat1BQ==", + "requires": { + "google-auth-library": "^8.0.2", + "googleapis-common": "^6.0.0" + } + }, + "googleapis-common": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/googleapis-common/-/googleapis-common-6.0.4.tgz", + "integrity": "sha512-m4ErxGE8unR1z0VajT6AYk3s6a9gIMM6EkDZfkPnES8joeOlEtFEJeF8IyZkb0tjPXkktUfYrE4b3Li1DNyOwA==", + "requires": { + "extend": "^3.0.2", + "gaxios": "^5.0.1", + "google-auth-library": "^8.0.2", + "qs": "^6.7.0", + "url-template": "^2.0.8", + "uuid": "^9.0.0" + }, + "dependencies": { + "uuid": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz", + "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==" + } + } + }, + "gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "requires": { + "get-intrinsic": "^1.1.3" + } + }, + "graceful-fs": { + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", + "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==" + }, + "grapheme-breaker": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/grapheme-breaker/-/grapheme-breaker-0.3.2.tgz", + "integrity": "sha512-mB6rwkw1Z7z4z2RkFFTd/+q6Ug1gnCgjKAervAKgBeNI1mSr8E5EUWoYzFNOZsLHFArLfpk+O8X8qXC7uvuawQ==", + "dev": true, + "requires": { + "brfs": "^1.2.0", + "unicode-trie": "^0.3.1" + } + }, + "gtoken": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-6.1.2.tgz", + "integrity": "sha512-4ccGpzz7YAr7lxrT2neugmXQ3hP9ho2gcaityLVkiUecAiwiy60Ii8gRbZeOsXV19fYaRjgBSshs8kXw+NKCPQ==", + "requires": { + "gaxios": "^5.0.1", + "google-p12-pem": "^4.0.0", + "jws": "^4.0.0" + } + }, + "har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==", + "dev": true + }, + "har-validator": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", + "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", + "dev": true, + "requires": { + "ajv": "^6.12.3", + "har-schema": "^2.0.0" + } + }, + "has": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.4.tgz", + "integrity": "sha512-qdSAmqLF6209RFj4VVItywPMbm3vWylknmB3nvNiUIs72xAimcM8nVYxYr7ncvZq5qzk9MKIZR8ijqD/1QuYjQ==", + "dev": true + }, + "has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "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": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + } + } + }, + "has-bigints": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "requires": { + "es-define-property": "^1.0.0" + } + }, + "has-proto": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", + "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==" + }, + "has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" + }, + "has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "dev": true, + "requires": { + "has-symbols": "^1.0.3" + } + }, + "has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw==", + "dev": true, + "requires": { + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" + } + }, + "has-values": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ==", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "kind-of": "^4.0.0" + }, + "dependencies": { + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw==", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "hash-base": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", + "integrity": "sha512-EeeoJKjTyt868liAlVmcv2ZsUfGHlE3Q+BICOXcZiwN3osr5Q/zFGYmTJpoIzuaSTAwndFy+GqhEwlU4L3j4Ow==", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } + }, + "hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "requires": { + "function-bind": "^1.1.2" + } + }, + "hex-color-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/hex-color-regex/-/hex-color-regex-1.1.0.tgz", + "integrity": "sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==", + "dev": true + }, + "highlight.js": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-11.1.0.tgz", + "integrity": "sha512-X9VVhYKHQPPuwffO8jk4bP/FVj+ibNCy3HxZZNDXFtJrq4O5FdcdCDRIkDis5MiMnjh7UwEdHgRZJcHFYdzDdA==" + }, + "hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", + "dev": true, + "requires": { + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "hsl-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/hsl-regex/-/hsl-regex-1.0.0.tgz", + "integrity": "sha512-M5ezZw4LzXbBKMruP+BNANf0k+19hDQMgpzBIYnya//Al+fjNct9Wf3b1WedLqdEs2hKBvxq/jh+DsHJLj0F9A==", + "dev": true + }, + "hsla-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/hsla-regex/-/hsla-regex-1.0.0.tgz", + "integrity": "sha512-7Wn5GMLuHBjZCb2bTmnDOycho0p/7UVaAeqXZGbHrBCl6Yd/xDhQJAXe6Ga9AXJH2I5zY1dEdYw2u1UptnSBJA==", + "dev": true + }, + "html-encoding-sniffer": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz", + "integrity": "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==", + "requires": { + "whatwg-encoding": "^1.0.5" + } + }, + "html-minifier-terser": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-7.2.0.tgz", + "integrity": "sha512-tXgn3QfqPIpGl9o+K5tpcj3/MN4SfLtsx2GWwBC3SSd0tXQGyF3gsSqad8loJgKZGM3ZxbYDd5yhiBIdWpmvLA==", + "requires": { + "camel-case": "^4.1.2", + "clean-css": "~5.3.2", + "commander": "^10.0.0", + "entities": "^4.4.0", + "param-case": "^3.0.4", + "relateurl": "^0.2.7", + "terser": "^5.15.1" + } + }, + "html-tags": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-1.2.0.tgz", + "integrity": "sha512-uVteDXUCs08M7QJx0eY6ue7qQztwIfknap81vAtNob2sdEPKa8PjPinx0vxbs2JONPamovZjMvKZWNW44/PBKg==", + "dev": true + }, + "htmlnano": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/htmlnano/-/htmlnano-0.2.9.tgz", + "integrity": "sha512-jWTtP3dCd7R8x/tt9DK3pvpcQd7HDMcRPUqPxr/i9989q2k5RHIhmlRDFeyQ/LSd8IKrteG8Ce5g0Ig4eGIipg==", + "dev": true, + "requires": { + "cssnano": "^4.1.11", + "posthtml": "^0.15.1", + "purgecss": "^2.3.0", + "relateurl": "^0.2.7", + "srcset": "^3.0.0", + "svgo": "^1.3.2", + "terser": "^5.6.1", + "timsort": "^0.3.0", + "uncss": "^0.17.3" + }, + "dependencies": { + "dom-serializer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", + "dev": true, + "requires": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + } + }, + "domhandler": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", + "dev": true, + "requires": { + "domelementtype": "^2.2.0" + } + }, + "domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "dev": true, + "requires": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + } + }, + "entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "dev": true + }, + "htmlparser2": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", + "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", + "dev": true, + "requires": { + "domelementtype": "^2.0.1", + "domhandler": "^4.0.0", + "domutils": "^2.5.2", + "entities": "^2.0.0" + } + }, + "posthtml": { + "version": "0.15.2", + "resolved": "https://registry.npmjs.org/posthtml/-/posthtml-0.15.2.tgz", + "integrity": "sha512-YugEJ5ze/0DLRIVBjCpDwANWL4pPj1kHJ/2llY8xuInr0nbkon3qTiMPe5LQa+cCwNjxS7nAZZTp+1M+6mT4Zg==", + "dev": true, + "requires": { + "posthtml-parser": "^0.7.2", + "posthtml-render": "^1.3.1" + } + }, + "posthtml-parser": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/posthtml-parser/-/posthtml-parser-0.7.2.tgz", + "integrity": "sha512-LjEEG/3fNcWZtBfsOE3Gbyg1Li4CmsZRkH1UmbMR7nKdMXVMYI3B4/ZMiCpaq8aI1Aym4FRMMW9SAOLSwOnNsQ==", + "dev": true, + "requires": { + "htmlparser2": "^6.0.0" + } + } + } + }, + "htmlparser2": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", + "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==", + "requires": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1", + "entities": "^4.4.0" + } + }, + "http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dev": true, + "requires": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + } + }, + "http-proxy-agent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", + "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", + "requires": { + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4" + }, + "dependencies": { + "debug": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } + }, + "http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==", + "dev": true, + "requires": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + } + }, + "https-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", + "integrity": "sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg==", + "dev": true + }, + "https-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", + "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", + "requires": { + "agent-base": "6", + "debug": "4" + }, + "dependencies": { + "debug": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "icss-replace-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz", + "integrity": "sha512-chIaY3Vh2mh2Q3RGXttaDIzeiPvaVXJ+C4DAh/w3c37SKZ/U6PGMmuicR2EQQp9bKG8zLMCl7I+PtIoOOPp8Gg==", + "dev": true + }, + "ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true + }, + "ignore": { + "version": "3.3.10", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz", + "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==" + }, + "import-fresh": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", + "integrity": "sha512-eZ5H8rcgYazHbKC3PG4ClHNykCSxtAhxSSEM+2mb+7evD2CKF5V7c0dNum7AdpDh0ZdICwZY9sRSn8f+KH96sg==", + "dev": true, + "requires": { + "caller-path": "^2.0.0", + "resolve-from": "^3.0.0" + } + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=" + }, + "indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==" + }, + "indexes-of": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz", + "integrity": "sha512-bup+4tap3Hympa+JBJUG7XuOsdNQ6fxt0MHyXMKuLBKn0OqsTfvUxkUrroEX1+B2VsSHvCjiIcZVxRtYa4nllA==", + "dev": true + }, + "infer-owner": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", + "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==" + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" + }, + "internal-slot": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz", + "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==", + "dev": true, + "requires": { + "es-errors": "^1.3.0", + "hasown": "^2.0.0", + "side-channel": "^1.0.4" + } + }, + "invert-kv": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", + "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=" + }, + "is-absolute-url": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-2.1.0.tgz", + "integrity": "sha512-vOx7VprsKyllwjSkLV79NIhpyLfr3jAp7VaTCMXOJHu4m0Ew1CZ2fcjASwmV1jI3BWuWHB013M48eyeldk9gYg==", + "dev": true + }, + "is-accessor-descriptor": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.1.tgz", + "integrity": "sha512-YBUanLI8Yoihw923YeFUS5fs0fF2f5TSFTNiYAAzhhDscDa3lEqYuz1pDOEP5KvX94I9ey3vsqjJcLVFVU+3QA==", + "dev": true, + "requires": { + "hasown": "^2.0.0" + } + }, + "is-array-buffer": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", + "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1" + } + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true + }, + "is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dev": true, + "requires": { + "has-bigints": "^1.0.1" + } + }, + "is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", + "integrity": "sha512-9fRVlXc0uCxEDj1nQzaWONSpbTfx0FmJfzHF7pwlI8DkWGoHBBea4Pg5Ky0ojwwxQmnSifgbKkI06Qv0Ljgj+Q==", + "dev": true, + "requires": { + "binary-extensions": "^1.0.0" + } + }, + "is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + }, + "is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "dev": true + }, + "is-color-stop": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-color-stop/-/is-color-stop-1.1.0.tgz", + "integrity": "sha512-H1U8Vz0cfXNujrJzEcvvwMDW9Ra+biSYA3ThdQvAnMLJkEHQXn6bWzLkxHtVYJ+Sdbx0b6finn3jZiaVe7MAHA==", + "dev": true, + "requires": { + "css-color-names": "^0.0.4", + "hex-color-regex": "^1.1.0", + "hsl-regex": "^1.0.0", + "hsla-regex": "^1.0.0", + "rgb-regex": "^1.0.1", + "rgba-regex": "^1.0.0" + } + }, + "is-core-module": { + "version": "2.14.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.14.0.tgz", + "integrity": "sha512-a5dFJih5ZLYlRtDc0dZWP7RiKr6xIKzmn/oAYCDvdLThadVgyJwlaoQPmRtMSpz+rk0OGAgIu+TcM9HUF0fk1A==", + "dev": true, + "requires": { + "hasown": "^2.0.2" + } + }, + "is-data-descriptor": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.1.tgz", + "integrity": "sha512-bc4NlCDiCr28U4aEsQ3Qs2491gVq4V8G7MQyws968ImqjKuYtTJXrl7Vq7jsN7Ly/C3xj5KWFrY7sHNeDkAzXw==", + "dev": true, + "requires": { + "hasown": "^2.0.0" + } + }, + "is-data-view": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz", + "integrity": "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==", + "dev": true, + "requires": { + "is-typed-array": "^1.1.13" + } + }, + "is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-descriptor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.3.tgz", + "integrity": "sha512-JCNNGbwWZEVaSPtS45mdtrneRWJFp07LLmykxeFV5F6oBvNF8vHSfJuJgoT472pSfk+Mf8VnlrspaFBHWM8JAw==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.1", + "is-data-descriptor": "^1.0.1" + } + }, + "is-directory": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", + "integrity": "sha512-yVChGzahRFvbkscn2MlwGismPO12i9+znNruC5gVEntG3qu0xQMzsGg/JFbrsqDOHtHFPci+V5aP5T9I+yeKqw==", + "dev": true + }, + "is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==" + }, + "is-dotfile": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz", + "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=" + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==" + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" + }, + "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": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" + }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-html": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-html/-/is-html-1.1.0.tgz", + "integrity": "sha512-eoGsQVAAyvLFRKnbt4jo7Il56agsH5I04pDymPoxRp/tnna5yiIpdNzvKPOy5G1Ff0zY/jfN2hClb7ju+sOrdA==", + "dev": true, + "requires": { + "html-tags": "^1.0.0" + } + }, + "is-negative-zero": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", + "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", + "dev": true + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" + }, + "is-number-object": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", + "dev": true + }, + "is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "requires": { + "isobject": "^3.0.1" + } + }, + "is-potential-custom-element-name": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", + "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==" + }, + "is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-resolvable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", + "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==", + "dev": true + }, + "is-shared-array-buffer": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz", + "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==", + "dev": true, + "requires": { + "call-bind": "^1.0.7" + } + }, + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" + }, + "is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dev": true, + "requires": { + "has-symbols": "^1.0.2" + } + }, + "is-typed-array": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz", + "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==", + "dev": true, + "requires": { + "which-typed-array": "^1.1.14" + } + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", + "dev": true + }, + "is-url": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/is-url/-/is-url-1.2.4.tgz", + "integrity": "sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==" + }, + "is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.2" + } + }, + "is-whitespace": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/is-whitespace/-/is-whitespace-0.3.0.tgz", + "integrity": "sha512-RydPhl4S6JwAyj0JJjshWJEFG6hNye3pZFBRZaTUfZFwGHxzppNaNOVgQuS/E/SlhrApuMXrpnK1EEIXfdo3Dg==" + }, + "is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "dev": true + }, + "is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "requires": { + "is-docker": "^2.0.0" + } + }, + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true + }, + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==", + "dev": true + }, + "jackspeak": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.0.tgz", + "integrity": "sha512-JVYhQnN59LVPFCEcVa2C3CrEKYacvjRfqIQl+h8oi91aLYQVWRYbxjPcv1bUiUy/kLmQaANrYfNMCO3kuEDHfw==", + "requires": { + "@isaacs/cliui": "^8.0.2", + "@pkgjs/parseargs": "^0.11.0" + } + }, + "jju": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/jju/-/jju-1.4.0.tgz", + "integrity": "sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA==" + }, + "js-base64": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-3.7.2.tgz", + "integrity": "sha512-NnRs6dsyqUXejqk/yv2aiXlAvOs56sLkX6nUdeaNezI5LFFLlsZjOThmwnrcwh5ZZRwZlCMnVAY3CvhIhoVEKQ==" + }, + "js-beautify": { + "version": "1.14.9", + "resolved": "https://registry.npmjs.org/js-beautify/-/js-beautify-1.14.9.tgz", + "integrity": "sha512-coM7xq1syLcMyuVGyToxcj2AlzhkDjmfklL8r0JgJ7A76wyGMpJ1oA35mr4APdYNO/o/4YY8H54NQIJzhMbhBg==", + "requires": { + "config-chain": "^1.1.13", + "editorconfig": "^1.0.3", + "glob": "^8.1.0", + "nopt": "^6.0.0" + }, + "dependencies": { + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "requires": { + "balanced-match": "^1.0.0" + } + }, + "glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + } + }, + "minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "requires": { + "brace-expansion": "^2.0.1" + } + } + } + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "dependencies": { + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" + } + } + }, + "jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==", + "dev": true + }, + "jsdom": { + "version": "16.7.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz", + "integrity": "sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==", + "requires": { + "abab": "^2.0.5", + "acorn": "^8.2.4", + "acorn-globals": "^6.0.0", + "cssom": "^0.4.4", + "cssstyle": "^2.3.0", + "data-urls": "^2.0.0", + "decimal.js": "^10.2.1", + "domexception": "^2.0.1", + "escodegen": "^2.0.0", + "form-data": "^3.0.0", + "html-encoding-sniffer": "^2.0.1", + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "is-potential-custom-element-name": "^1.0.1", + "nwsapi": "^2.2.0", + "parse5": "6.0.1", + "saxes": "^5.0.1", + "symbol-tree": "^3.2.4", + "tough-cookie": "^4.0.0", + "w3c-hr-time": "^1.0.2", + "w3c-xmlserializer": "^2.0.0", + "webidl-conversions": "^6.1.0", + "whatwg-encoding": "^1.0.5", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^8.5.0", + "ws": "^7.4.6", + "xml-name-validator": "^3.0.0" + }, + "dependencies": { + "escodegen": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz", + "integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==", + "requires": { + "esprima": "^4.0.1", + "estraverse": "^5.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1", + "source-map": "~0.6.1" + } + }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" + }, + "estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==" + }, + "tough-cookie": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.4.tgz", + "integrity": "sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==", + "requires": { + "psl": "^1.1.33", + "punycode": "^2.1.1", + "universalify": "^0.2.0", + "url-parse": "^1.5.3" + } + }, + "universalify": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", + "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==" + } + } + }, + "jsep": { + "version": "1.3.9", + "resolved": "https://registry.npmjs.org/jsep/-/jsep-1.3.9.tgz", + "integrity": "sha512-i1rBX5N7VPl0eYb6+mHNp52sEuaS2Wi8CDYx1X5sn9naevL78+265XJqy1qENEk7mRKwS06NHpUqiBwR7qeodw==" + }, + "jsesc": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz", + "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==", + "dev": true + }, + "jsome": { + "version": "2.3.24", + "resolved": "https://registry.npmjs.org/jsome/-/jsome-2.3.24.tgz", + "integrity": "sha1-p9MCi0oyNCJpN3MNRAmm4E56hBM=", + "requires": { + "chalk": "^1.1.1", + "json-stringify-safe": "^5.0.1", + "yargs": "^3.29.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" + }, + "camelcase": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", + "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=" + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "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" + } + }, + "cliui": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", + "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", + "requires": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wrap-ansi": "^2.0.0" + } + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "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": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" + }, + "wrap-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", + "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "requires": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1" + } + }, + "y18n": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.2.tgz", + "integrity": "sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ==" + }, + "yargs": { + "version": "3.32.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.32.0.tgz", + "integrity": "sha1-AwiOnr+edWtpdRYR0qXvWRSCyZU=", + "requires": { + "camelcase": "^2.0.1", + "cliui": "^3.0.3", + "decamelize": "^1.1.1", + "os-locale": "^1.4.0", + "string-width": "^1.0.1", + "window-size": "^0.1.4", + "y18n": "^3.2.0" + } + } + } + }, + "json-bigint": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-1.0.0.tgz", + "integrity": "sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==", + "requires": { + "bignumber.js": "^9.0.0" + } + }, + "json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==" + }, + "json-format-highlight": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/json-format-highlight/-/json-format-highlight-1.0.4.tgz", + "integrity": "sha512-RqenIjKr1I99XfXPAml9G7YlEZg/GnsH7emWyWJh2yuGXqHW8spN7qx6/ME+MoIBb35/fxrMC9Jauj6nvGe4Mg==" + }, + "json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "dev": true + }, + "json-pretty-html": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/json-pretty-html/-/json-pretty-html-1.1.6.tgz", + "integrity": "sha512-+bhQgNJ3ebvOIGSZ9OPWTHpv9xKaKIodekiphrUKrOCovuBfimtmn2G3vv/jzNsXg12g9SHcBYoiPO362ghDNA==" + }, + "json-schema": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", + "dev": true + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" + }, + "json-to-pretty-yaml": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/json-to-pretty-yaml/-/json-to-pretty-yaml-1.2.2.tgz", + "integrity": "sha1-9M0L0KXo/h3yWq9boRiwmf2ZLVs=", + "requires": { + "remedial": "^1.0.7", + "remove-trailing-spaces": "^1.0.6" + } + }, + "json5": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + }, + "jsonfile": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", + "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=", + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "jsonpath": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/jsonpath/-/jsonpath-1.1.1.tgz", + "integrity": "sha512-l6Cg7jRpixfbgoWgkrl77dgEj8RPvND0wMH6TwQmi9Qs4TFfS9u5cUFnbeKTwj5ga5Y3BTGGNI28k117LJ009w==", + "requires": { + "esprima": "1.2.2", + "static-eval": "2.0.2", + "underscore": "1.12.1" + } + }, + "jsonpath-plus": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/jsonpath-plus/-/jsonpath-plus-10.1.0.tgz", + "integrity": "sha512-gHfV1IYqH8uJHYVTs8BJX1XKy2/rR93+f8QQi0xhx95aCiXn1ettYAd5T+7FU6wfqyDoX/wy0pm/fL3jOKJ9Lg==", + "requires": { + "@jsep-plugin/assignment": "^1.2.1", + "@jsep-plugin/regex": "^1.0.3", + "jsep": "^1.3.9" + } + }, + "jsprim": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", + "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", + "dev": true, + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.4.0", + "verror": "1.10.0" + } + }, + "jwa": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.0.tgz", + "integrity": "sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA==", + "requires": { + "buffer-equal-constant-time": "1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "jws": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.0.tgz", + "integrity": "sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==", + "requires": { + "jwa": "^2.0.0", + "safe-buffer": "^5.0.1" + } + }, + "keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "requires": { + "json-buffer": "3.0.1" + } + }, + "keyv-file": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/keyv-file/-/keyv-file-0.3.1.tgz", + "integrity": "sha512-nrIyNaGlw8nf11mu8p7ttr+Qj6V3N0/BO62Y/oDsi02aWKWYaQjGVPLo0XPfRIwgaByQabuA/IH1se7i150LnQ==", + "requires": { + "debug": "^4.1.1", + "fs-extra": "^4.0.1", + "tslib": "^1.9.3" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "requires": { + "ms": "2.1.2" + } + }, + "fs-extra": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz", + "integrity": "sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==", + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true + }, + "klaw": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz", + "integrity": "sha1-QIhDO0azsbolnXh4XY6W9zugJDk=", + "requires": { + "graceful-fs": "^4.1.9" + } + }, + "lcid": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", + "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", + "requires": { + "invert-kv": "^1.0.0" + } + }, + "levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "requires": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + } + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "requires": { + "p-locate": "^4.1.0" + } + }, + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "lodash._basebind": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/lodash._basebind/-/lodash._basebind-2.3.0.tgz", + "integrity": "sha1-K1vEUqDhBhQ7IYafIzvbWHQX0kg=", + "requires": { + "lodash._basecreate": "~2.3.0", + "lodash._setbinddata": "~2.3.0", + "lodash.isobject": "~2.3.0" + } + }, + "lodash._basecreate": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/lodash._basecreate/-/lodash._basecreate-2.3.0.tgz", + "integrity": "sha1-m4ioak3P97fzxh2Dovz8BnHsneA=", + "requires": { + "lodash._renative": "~2.3.0", + "lodash.isobject": "~2.3.0", + "lodash.noop": "~2.3.0" + } + }, + "lodash._basecreatecallback": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/lodash._basecreatecallback/-/lodash._basecreatecallback-2.3.0.tgz", + "integrity": "sha1-N7KrF1kaM56YjbMln81GAZ16w2I=", + "requires": { + "lodash._setbinddata": "~2.3.0", + "lodash.bind": "~2.3.0", + "lodash.identity": "~2.3.0", + "lodash.support": "~2.3.0" + } + }, + "lodash._basecreatewrapper": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/lodash._basecreatewrapper/-/lodash._basecreatewrapper-2.3.0.tgz", + "integrity": "sha1-qgxhrZYETDkzN2ExSDqXWcNlEkc=", + "requires": { + "lodash._basecreate": "~2.3.0", + "lodash._setbinddata": "~2.3.0", + "lodash._slice": "~2.3.0", + "lodash.isobject": "~2.3.0" + } + }, + "lodash._createwrapper": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/lodash._createwrapper/-/lodash._createwrapper-2.3.0.tgz", + "integrity": "sha1-0arhEC2t9EDo4G/BM6bt1/4UYHU=", + "requires": { + "lodash._basebind": "~2.3.0", + "lodash._basecreatewrapper": "~2.3.0", + "lodash.isfunction": "~2.3.0" + } + }, + "lodash._objecttypes": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/lodash._objecttypes/-/lodash._objecttypes-2.3.0.tgz", + "integrity": "sha1-aj6jmH3W7rgCGy1cnDA1Scwrrh4=" + }, + "lodash._renative": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/lodash._renative/-/lodash._renative-2.3.0.tgz", + "integrity": "sha1-d9jt1M7SbdWXH54Vpfdy5OMX+9M=" + }, + "lodash._setbinddata": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/lodash._setbinddata/-/lodash._setbinddata-2.3.0.tgz", + "integrity": "sha1-5WEEkKzRMnfVmFjZW18nJ/FQjwQ=", + "requires": { + "lodash._renative": "~2.3.0", + "lodash.noop": "~2.3.0" + } + }, + "lodash._shimkeys": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/lodash._shimkeys/-/lodash._shimkeys-2.3.0.tgz", + "integrity": "sha1-YR+TFJ4+bHIQlrSHae8pU3rai6k=", + "requires": { + "lodash._objecttypes": "~2.3.0" + } + }, + "lodash._slice": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/lodash._slice/-/lodash._slice-2.3.0.tgz", + "integrity": "sha1-FHGYEyhZly5GgMoppZkshVZpqlw=" + }, + "lodash.bind": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/lodash.bind/-/lodash.bind-2.3.0.tgz", + "integrity": "sha1-wqjhi2jl7MFS4rFoJmEW/qWwFsw=", + "requires": { + "lodash._createwrapper": "~2.3.0", + "lodash._renative": "~2.3.0", + "lodash._slice": "~2.3.0" + } + }, + "lodash.clone": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clone/-/lodash.clone-4.5.0.tgz", + "integrity": "sha512-GhrVeweiTD6uTmmn5hV/lzgCQhccwReIVRLHp7LT4SopOjqEZ5BbX8b5WWEtAKasjmy8hR7ZPwsYlxRCku5odg==", + "dev": true + }, + "lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", + "dev": true + }, + "lodash.foreach": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/lodash.foreach/-/lodash.foreach-2.3.0.tgz", + "integrity": "sha1-CDQEyR6EbudyRf3512UZxosq8Wg=", + "requires": { + "lodash._basecreatecallback": "~2.3.0", + "lodash.forown": "~2.3.0" + } + }, + "lodash.forown": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/lodash.forown/-/lodash.forown-2.3.0.tgz", + "integrity": "sha1-JPtKr4ANRfwtxgv+w84EyDajrX8=", + "requires": { + "lodash._basecreatecallback": "~2.3.0", + "lodash._objecttypes": "~2.3.0", + "lodash.keys": "~2.3.0" + } + }, + "lodash.identity": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/lodash.identity/-/lodash.identity-2.3.0.tgz", + "integrity": "sha1-awGiEMlIU1XCqRO0i2cRIZoXPe0=" + }, + "lodash.isfunction": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/lodash.isfunction/-/lodash.isfunction-2.3.0.tgz", + "integrity": "sha1-aylz5HpkfPEucNZ2rqE2Q3BuUmc=" + }, + "lodash.isobject": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/lodash.isobject/-/lodash.isobject-2.3.0.tgz", + "integrity": "sha1-LhbT/Fg9qYMZaJU/LY5tc0NPZ5k=", + "requires": { + "lodash._objecttypes": "~2.3.0" + } + }, + "lodash.keys": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-2.3.0.tgz", + "integrity": "sha1-s1D0+Syqn0WkouzwGEVM8vKK4lM=", + "requires": { + "lodash._renative": "~2.3.0", + "lodash._shimkeys": "~2.3.0", + "lodash.isobject": "~2.3.0" + } + }, + "lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", + "dev": true + }, + "lodash.noop": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/lodash.noop/-/lodash.noop-2.3.0.tgz", + "integrity": "sha1-MFnWKNUbv5N80qC2/Dp/ISpmnCw=" + }, + "lodash.sortby": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", + "integrity": "sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==", + "dev": true + }, + "lodash.support": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/lodash.support/-/lodash.support-2.3.0.tgz", + "integrity": "sha1-fq8DivTw1qq3drRKptz8gDNMm/0=", + "requires": { + "lodash._renative": "~2.3.0" + } + }, + "lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==", + "dev": true + }, + "log-symbols": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", + "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", + "dev": true, + "requires": { + "chalk": "^2.0.1" + } + }, + "lower-case": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", + "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", + "requires": { + "tslib": "^2.0.3" + } + }, + "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" + } + }, + "magic-string": { + "version": "0.22.5", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.22.5.tgz", + "integrity": "sha512-oreip9rJZkzvA8Qzk9HFs8fZGF/u7H/gtrE8EN6RjKJ9kh2HlC+yQ2QezifqTZfGyiuAV0dRv5a+y/8gBb1m9w==", + "dev": true, + "requires": { + "vlq": "^0.2.2" + } + }, + "map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==", + "dev": true + }, + "map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w==", + "dev": true, + "requires": { + "object-visit": "^1.0.0" + } + }, + "markdown-table": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-3.0.3.tgz", + "integrity": "sha512-Z1NL3Tb1M9wH4XESsCDEksWoKTdlUafKc4pt0GRwjUyXaCFZ+dc3g2erqB6zm3szA2IUSi7VnPI+o/9jnxh9hw==" + }, + "md5": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz", + "integrity": "sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==", + "requires": { + "charenc": "0.0.2", + "crypt": "0.0.2", + "is-buffer": "~1.1.6" + } + }, + "md5.js": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", + "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", + "dev": true, + "requires": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "mdn-data": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz", + "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==", + "dev": true + }, + "merge-source-map": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.0.4.tgz", + "integrity": "sha512-PGSmS0kfnTnMJCzJ16BLLCEe6oeYCamKFFdQKshi4BmM6FUwipjVOcBFGxqtQtirtAG4iZvHlqST9CpZKqlRjA==", + "dev": true, + "requires": { + "source-map": "^0.5.6" + }, + "dependencies": { + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "dev": true + } + } + }, + "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.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "requires": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + } + }, + "miller-rabin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", + "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", + "dev": true, + "requires": { + "bn.js": "^4.0.0", + "brorand": "^1.0.1" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + } + } + }, + "mime": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.5.2.tgz", + "integrity": "sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg==" + }, + "mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" + }, + "mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "requires": { + "mime-db": "1.52.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==", + "dev": true + }, + "minify": { + "version": "11.4.1", + "resolved": "https://registry.npmjs.org/minify/-/minify-11.4.1.tgz", + "integrity": "sha512-G1a1cSxR+5J4ixbfNSXU1OeXB8J6dFSlYpnS3GiPxYBSLoe51RE8UWj3sHXzZNxqWFvZkpcU/VSSCJtHyRZmdQ==", + "requires": { + "@putout/minify": "^4.0.0", + "@swc/core": "^1.6.7", + "clean-css": "^5.0.1", + "css-b64-images": "~0.2.5", + "debug": "^4.1.0", + "esbuild": "^0.23.0", + "find-up": "^7.0.0", + "html-minifier-terser": "^7.1.0", + "readjson": "^2.2.2", + "simport": "^1.2.0", + "terser": "^5.28.1", + "try-catch": "^3.0.0", + "try-to-catch": "^3.0.0" + }, + "dependencies": { + "debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "requires": { + "ms": "^2.1.3" + } + }, + "find-up": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-7.0.0.tgz", + "integrity": "sha512-YyZM99iHrqLKjmt4LJDj58KI+fYyufRLBSYcqycxf//KpBk9FoewoGX0450m9nB44qrZnovzC2oeP5hUibxc/g==", + "requires": { + "locate-path": "^7.2.0", + "path-exists": "^5.0.0", + "unicorn-magic": "^0.1.0" + } + }, + "locate-path": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz", + "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", + "requires": { + "p-locate": "^6.0.0" + } + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "p-limit": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", + "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", + "requires": { + "yocto-queue": "^1.0.0" + } + }, + "p-locate": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", + "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", + "requires": { + "p-limit": "^4.0.0" + } + }, + "path-exists": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", + "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==" + } + } + }, + "minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", + "dev": true + }, + "minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==", + "dev": true + }, + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "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==" + }, + "minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "requires": { + "yallist": "^4.0.0" + }, + "dependencies": { + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + } + } + }, + "minipass-collect": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", + "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", + "requires": { + "minipass": "^3.0.0" + } + }, + "minipass-flush": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", + "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", + "requires": { + "minipass": "^3.0.0" + } + }, + "minipass-pipeline": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", + "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", + "requires": { + "minipass": "^3.0.0" + } + }, + "minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "requires": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "dependencies": { + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + } + } + }, + "mixin-deep": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", + "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", + "dev": true, + "requires": { + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "requires": { + "minimist": "^1.2.5" + } + }, + "moment": { + "version": "2.30.1", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.30.1.tgz", + "integrity": "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==" + }, + "mount-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mount-point/-/mount-point-3.0.0.tgz", + "integrity": "sha1-Zly57evoDREOZY21bDHQrvUaj5c=", + "requires": { + "@sindresorhus/df": "^1.0.1", + "pify": "^2.3.0", + "pinkie-promise": "^2.0.1" + }, + "dependencies": { + "@sindresorhus/df": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@sindresorhus/df/-/df-1.0.1.tgz", + "integrity": "sha1-xptm9S9vzdKHyAffIQMF2694UA0=" + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" + } + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "nan": { + "version": "2.22.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.22.0.tgz", + "integrity": "sha512-nbajikzWTMwsW+eSsNm3QwlOs7het9gGJU5dDZzRTQGk03vyBOauxgI4VakDzE0PtsGTmXPsXTbbjVhRwR5mpw==", + "dev": true, + "optional": true + }, + "nanomatch": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", + "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", + "dev": true, + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + } + }, + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==" + }, + "no-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", + "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", + "requires": { + "lower-case": "^2.0.2", + "tslib": "^2.0.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==", + "dev": true + }, + "node-fetch": { + "version": "2.6.12", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.12.tgz", + "integrity": "sha512-C/fGU2E8ToujUivIO0H+tpQ6HWo4eEmchoPIoXtxCrVghxdKq+QOHqEZW7tuP3KlV3bC8FRMO5nMCC7Zm1VP6g==", + "requires": { + "whatwg-url": "^5.0.0" + }, + "dependencies": { + "tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + }, + "webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + }, + "whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "requires": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + } + } + }, + "node-forge": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", + "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==" + }, + "node-libs-browser": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz", + "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==", + "dev": true, + "requires": { + "assert": "^1.1.1", + "browserify-zlib": "^0.2.0", + "buffer": "^4.3.0", + "console-browserify": "^1.1.0", + "constants-browserify": "^1.0.0", + "crypto-browserify": "^3.11.0", + "domain-browser": "^1.1.1", + "events": "^3.0.0", + "https-browserify": "^1.0.0", + "os-browserify": "^0.3.0", + "path-browserify": "0.0.1", + "process": "^0.11.10", + "punycode": "^1.2.4", + "querystring-es3": "^0.2.0", + "readable-stream": "^2.3.3", + "stream-browserify": "^2.0.1", + "stream-http": "^2.7.2", + "string_decoder": "^1.0.0", + "timers-browserify": "^2.0.4", + "tty-browserify": "0.0.0", + "url": "^0.11.0", + "util": "^0.11.0", + "vm-browserify": "^1.0.1" + }, + "dependencies": { + "buffer": { + "version": "4.9.2", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", + "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", + "dev": true, + "requires": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" + } + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==", + "dev": true + }, + "readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "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==", + "dev": true + }, + "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==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "node-releases": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz", + "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==", + "dev": true + }, + "node-xlsx": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/node-xlsx/-/node-xlsx-0.24.0.tgz", + "integrity": "sha512-1olwK48XK9nXZsyH/FCltvGrQYvXXZuxVitxXXv2GIuRm51aBi1+5KwR4rWM4KeO61sFU+00913WLZTD+AcXEg==", + "requires": { + "xlsx": "https://cdn.sheetjs.com/xlsx-0.20.2/xlsx-0.20.2.tgz" + } + }, + "nopt": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-6.0.0.tgz", + "integrity": "sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g==", + "requires": { + "abbrev": "^1.0.0" + } + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true + }, + "normalize-url": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-3.3.0.tgz", + "integrity": "sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg==", + "dev": true + }, + "npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "requires": { + "path-key": "^2.0.0" + } + }, + "nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "requires": { + "boolbase": "^1.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" + }, + "nwsapi": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz", + "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==" + }, + "oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", + "dev": true + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" + }, + "object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ==", + "dev": true, + "requires": { + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "is-descriptor": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.7.tgz", + "integrity": "sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.1", + "is-data-descriptor": "^1.0.1" + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "object-inspect": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz", + "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==" + }, + "object-keys": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-0.4.0.tgz", + "integrity": "sha1-KKaq50KN0sOpLz2V8hM13SBOAzY=" + }, + "object-visit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA==", + "dev": true, + "requires": { + "isobject": "^3.0.0" + } + }, + "object.assign": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", + "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + }, + "dependencies": { + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true + } + } + }, + "object.getownpropertydescriptors": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.8.tgz", + "integrity": "sha512-qkHIGe4q0lSYMv0XI4SsBTJz3WaURhLvd0lKSgtVuOsJ2krg4SgMw3PIRQFMp07yi++UR3se2mkcLqsBNpBb/A==", + "dev": true, + "requires": { + "array.prototype.reduce": "^1.0.6", + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0", + "gopd": "^1.0.1", + "safe-array-concat": "^1.1.2" + } + }, + "object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==", + "dev": true, + "requires": { + "isobject": "^3.0.1" + } + }, + "object.values": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.0.tgz", + "integrity": "sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + } + }, + "on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dev": true, + "requires": { + "ee-first": "1.1.1" + } + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "requires": { + "wrappy": "1" + } + }, + "onetime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", + "integrity": "sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ==", + "dev": true, + "requires": { + "mimic-fn": "^1.0.0" + } + }, + "open": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz", + "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==", + "requires": { + "is-docker": "^2.0.0", + "is-wsl": "^2.1.1" + } + }, + "opn": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/opn/-/opn-5.5.0.tgz", + "integrity": "sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA==", + "dev": true, + "requires": { + "is-wsl": "^1.1.0" + }, + "dependencies": { + "is-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", + "integrity": "sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw==", + "dev": true + } + } + }, + "optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "requires": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + } + }, + "ora": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ora/-/ora-2.1.0.tgz", + "integrity": "sha512-hNNlAd3gfv/iPmsNxYoAPLvxg7HuPozww7fFonMZvL84tP6Ox5igfk5j/+a9rtJJwqMgKK+JgWsAQik5o0HTLA==", + "dev": true, + "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": { + "ansi-regex": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", + "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", + "dev": true + }, + "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==", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, + "os-browserify": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", + "integrity": "sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A==", + "dev": true + }, + "os-homedir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=" + }, + "os-locale": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", + "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", + "requires": { + "lcid": "^1.0.0" + } + }, + "p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=" + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "requires": { + "p-try": "^2.0.0" + }, + "dependencies": { + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" + } + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "requires": { + "p-limit": "^2.2.0" + } + }, + "p-map": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-1.2.0.tgz", + "integrity": "sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA==" + }, + "p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=" + }, + "pako": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", + "dev": true + }, + "param-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", + "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", + "requires": { + "dot-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "parcel-bundler": { + "version": "1.12.5", + "resolved": "https://registry.npmjs.org/parcel-bundler/-/parcel-bundler-1.12.5.tgz", + "integrity": "sha512-hpku8mW67U6PXQIenW6NBbphBOMb8XzW6B9r093DUhYj5GN2FUB/CXCiz5hKoPYUsusZ35BpProH8AUF9bh5IQ==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "@babel/core": "^7.4.4", + "@babel/generator": "^7.4.4", + "@babel/parser": "^7.4.4", + "@babel/plugin-transform-flow-strip-types": "^7.4.4", + "@babel/plugin-transform-modules-commonjs": "^7.4.4", + "@babel/plugin-transform-react-jsx": "^7.0.0", + "@babel/preset-env": "^7.4.4", + "@babel/runtime": "^7.4.4", + "@babel/template": "^7.4.4", + "@babel/traverse": "^7.4.4", + "@babel/types": "^7.4.4", + "@iarna/toml": "^2.2.0", + "@parcel/fs": "^1.11.0", + "@parcel/logger": "^1.11.1", + "@parcel/utils": "^1.11.0", + "@parcel/watcher": "^1.12.1", + "@parcel/workers": "^1.11.0", + "ansi-to-html": "^0.6.4", + "babylon-walk": "^1.0.2", + "browserslist": "^4.1.0", + "chalk": "^2.1.0", + "clone": "^2.1.1", + "command-exists": "^1.2.6", + "commander": "^2.11.0", + "core-js": "^2.6.5", + "cross-spawn": "^6.0.4", + "css-modules-loader-core": "^1.1.0", + "cssnano": "^4.0.0", + "deasync": "^0.1.14", + "dotenv": "^5.0.0", + "dotenv-expand": "^5.1.0", + "envinfo": "^7.3.1", + "fast-glob": "^2.2.2", + "filesize": "^3.6.0", + "get-port": "^3.2.0", + "htmlnano": "^0.2.2", + "is-glob": "^4.0.0", + "is-url": "^1.2.2", + "js-yaml": "^3.10.0", + "json5": "^1.0.1", + "micromatch": "^3.0.4", + "mkdirp": "^0.5.1", + "node-forge": "^0.10.0", + "node-libs-browser": "^2.0.0", + "opn": "^5.1.0", + "postcss": "^7.0.11", + "postcss-value-parser": "^3.3.1", + "posthtml": "^0.11.2", + "posthtml-parser": "^0.4.0", + "posthtml-render": "^1.1.3", + "resolve": "^1.4.0", + "semver": "^5.4.1", + "serialize-to-js": "^3.0.0", + "serve-static": "^1.12.4", + "source-map": "0.6.1", + "terser": "^3.7.3", + "v8-compile-cache": "^2.0.0", + "ws": "^5.1.1" + }, + "dependencies": { + "@nodelib/fs.stat": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz", + "integrity": "sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==", + "dev": true + }, + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + } + }, + "clone": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", + "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==", + "dev": true + }, + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "fast-glob": { + "version": "2.2.7", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.7.tgz", + "integrity": "sha512-g1KuQwHOZAmOZMuBtHdxDtju+T2RT8jgCC9aANsbpdiDDTSnjgfuVsIBNKbUeJI3oKMRExcfNDtJl4OhbffMsw==", + "dev": true, + "requires": { + "@mrmlnc/readdir-enhanced": "^2.2.1", + "@nodelib/fs.stat": "^1.1.2", + "glob-parent": "^3.1.0", + "is-glob": "^4.0.0", + "merge2": "^1.2.3", + "micromatch": "^3.1.10" + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + } + }, + "glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA==", + "dev": true, + "requires": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + }, + "dependencies": { + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==", + "dev": true, + "requires": { + "is-extglob": "^2.1.0" + } + } + } + }, + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + }, + "dependencies": { + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", + "dev": true, + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + } + } + } + }, + "node-forge": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz", + "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==", + "dev": true + }, + "terser": { + "version": "3.17.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-3.17.0.tgz", + "integrity": "sha512-/FQzzPJmCpjAH9Xvk2paiWrFq+5M6aVOf+2KRbwhByISDX/EujxsK+BAvrhb6H+2rtrLCHK9N01wO014vrIwVQ==", + "dev": true, + "requires": { + "commander": "^2.19.0", + "source-map": "~0.6.1", + "source-map-support": "~0.5.10" + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + }, + "ws": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/ws/-/ws-5.2.4.tgz", + "integrity": "sha512-fFCejsuC8f9kOSu9FYaOw8CdO68O3h5v0lg4p74o8JqWpwTf9tniOD+nOB78aWoVSS6WptVUmDrp/KPsMVBWFQ==", + "dev": true, + "requires": { + "async-limiter": "~1.0.0" + } + } + } + }, + "parse-asn1": { + "version": "5.1.7", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.7.tgz", + "integrity": "sha512-CTM5kuWR3sx9IFamcl5ErfPl6ea/N8IYwiJ+vpeB2g+1iknv7zBl5uPwbMbRVznRVbrNY6lGuDoE5b30grmbqg==", + "dev": true, + "requires": { + "asn1.js": "^4.10.1", + "browserify-aes": "^1.2.0", + "evp_bytestokey": "^1.0.3", + "hash-base": "~3.0", + "pbkdf2": "^3.1.2", + "safe-buffer": "^5.2.1" + } + }, + "parse-glob": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", + "integrity": "sha512-FC5TeK0AwXzq3tUBFtH74naWkPQCEWs4K+xMxWZBlKDWu0bVHXGZa+KKqxKidd7xwhdZ19ZNuF2uO1M/r196HA==", + "requires": { + "glob-base": "^0.3.0", + "is-dotfile": "^1.0.0", + "is-extglob": "^1.0.0", + "is-glob": "^2.0.0" + }, + "dependencies": { + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=" + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "requires": { + "is-extglob": "^1.0.0" + } + } + } + }, + "parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", + "dev": true, + "requires": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + } + }, + "parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==" + }, + "parse5-htmlparser2-tree-adapter": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz", + "integrity": "sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g==", + "requires": { + "domhandler": "^5.0.2", + "parse5": "^7.0.0" + }, + "dependencies": { + "parse5": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", + "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", + "requires": { + "entities": "^4.4.0" + } + } + } + }, + "parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "dev": true + }, + "pascal-case": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", + "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", + "requires": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw==", + "dev": true + }, + "path-browserify": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz", + "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==", + "dev": true + }, + "path-dirname": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", + "integrity": "sha512-ALzNPpyNq9AqXMBjeymIjFDAkAFH06mHJH/cSBHAgU0s4vfpBn6b2nf8tiRLvagKD8RbTpq2FKTBg7cl9l3c7Q==", + "dev": true + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==" + }, + "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-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=" + }, + "path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "requires": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "dependencies": { + "lru-cache": { + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.2.tgz", + "integrity": "sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==" + }, + "minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==" + } + } + }, + "path-type": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "requires": { + "pify": "^3.0.0" + } + }, + "pbkdf2": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", + "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", + "dev": true, + "requires": { + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4", + "ripemd160": "^2.0.1", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", + "dev": true + }, + "physical-cpu-count": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/physical-cpu-count/-/physical-cpu-count-2.0.0.tgz", + "integrity": "sha512-rxJOljMuWtYlvREBmd6TZYanfcPhNUKtGDZBjBBS8WG1dpN2iwPsRJZgQqN/OtJuiQckdRFOfzogqJClTrsi7g==", + "dev": true + }, + "picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true + }, + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" + }, + "pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=" + }, + "pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "requires": { + "pinkie": "^2.0.0" + } + }, + "pn": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/pn/-/pn-1.1.0.tgz", + "integrity": "sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA==", + "dev": true + }, + "posix-character-classes": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", + "integrity": "sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg==", + "dev": true + }, + "possible-typed-array-names": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", + "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", + "dev": true + }, + "postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "requires": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + }, + "dependencies": { + "picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + } + } + }, + "postcss-calc": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-7.0.5.tgz", + "integrity": "sha512-1tKHutbGtLtEZF6PT4JSihCHfIVldU72mZ8SdZHIYriIZ9fh9k9aWSppaT8rHsyI3dX+KSR+W+Ix9BMY3AODrg==", + "dev": true, + "requires": { + "postcss": "^7.0.27", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.0.2" + }, + "dependencies": { + "postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true + } + } + }, + "postcss-colormin": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-4.0.3.tgz", + "integrity": "sha512-WyQFAdDZpExQh32j0U0feWisZ0dmOtPl44qYmJKkq9xFWY3p+4qnRzCHeNrkeRhwPHz9bQ3mo0/yVkaply0MNw==", + "dev": true, + "requires": { + "browserslist": "^4.0.0", + "color": "^3.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "color": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/color/-/color-3.2.1.tgz", + "integrity": "sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==", + "dev": true, + "requires": { + "color-convert": "^1.9.3", + "color-string": "^1.6.0" + } + } + } + }, + "postcss-convert-values": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-4.0.1.tgz", + "integrity": "sha512-Kisdo1y77KUC0Jmn0OXU/COOJbzM8cImvw1ZFsBgBgMgb1iL23Zs/LXRe3r+EZqM3vGYKdQ2YJVQ5VkJI+zEJQ==", + "dev": true, + "requires": { + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + } + }, + "postcss-discard-comments": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-4.0.2.tgz", + "integrity": "sha512-RJutN259iuRf3IW7GZyLM5Sw4GLTOH8FmsXBnv8Ab/Tc2k4SR4qbV4DNbyyY4+Sjo362SyDmW2DQ7lBSChrpkg==", + "dev": true, + "requires": { + "postcss": "^7.0.0" + } + }, + "postcss-discard-duplicates": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.2.tgz", + "integrity": "sha512-ZNQfR1gPNAiXZhgENFfEglF93pciw0WxMkJeVmw8eF+JZBbMD7jp6C67GqJAXVZP2BWbOztKfbsdmMp/k8c6oQ==", + "dev": true, + "requires": { + "postcss": "^7.0.0" + } + }, + "postcss-discard-empty": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-4.0.1.tgz", + "integrity": "sha512-B9miTzbznhDjTfjvipfHoqbWKwd0Mj+/fL5s1QOz06wufguil+Xheo4XpOnc4NqKYBCNqqEzgPv2aPBIJLox0w==", + "dev": true, + "requires": { + "postcss": "^7.0.0" + } + }, + "postcss-discard-overridden": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-4.0.1.tgz", + "integrity": "sha512-IYY2bEDD7g1XM1IDEsUT4//iEYCxAmP5oDSFMVU/JVvT7gh+l4fmjciLqGgwjdWpQIdb0Che2VX00QObS5+cTg==", + "dev": true, + "requires": { + "postcss": "^7.0.0" + } + }, + "postcss-merge-longhand": { + "version": "4.0.11", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-4.0.11.tgz", + "integrity": "sha512-alx/zmoeXvJjp7L4mxEMjh8lxVlDFX1gqWHzaaQewwMZiVhLo42TEClKaeHbRf6J7j82ZOdTJ808RtN0ZOZwvw==", + "dev": true, + "requires": { + "css-color-names": "0.0.4", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0", + "stylehacks": "^4.0.0" + } + }, + "postcss-merge-rules": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-4.0.3.tgz", + "integrity": "sha512-U7e3r1SbvYzO0Jr3UT/zKBVgYYyhAz0aitvGIYOYK5CPmkNih+WDSsS5tvPrJ8YMQYlEMvsZIiqmn7HdFUaeEQ==", + "dev": true, + "requires": { + "browserslist": "^4.0.0", + "caniuse-api": "^3.0.0", + "cssnano-util-same-parent": "^4.0.0", + "postcss": "^7.0.0", + "postcss-selector-parser": "^3.0.0", + "vendors": "^1.0.0" + }, + "dependencies": { + "postcss-selector-parser": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", + "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", + "dev": true, + "requires": { + "dot-prop": "^5.2.0", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + } + } + } + }, + "postcss-minify-font-values": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-4.0.2.tgz", + "integrity": "sha512-j85oO6OnRU9zPf04+PZv1LYIYOprWm6IA6zkXkrJXyRveDEuQggG6tvoy8ir8ZwjLxLuGfNkCZEQG7zan+Hbtg==", + "dev": true, + "requires": { + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + } + }, + "postcss-minify-gradients": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-4.0.2.tgz", + "integrity": "sha512-qKPfwlONdcf/AndP1U8SJ/uzIJtowHlMaSioKzebAXSG4iJthlWC9iSWznQcX4f66gIWX44RSA841HTHj3wK+Q==", + "dev": true, + "requires": { + "cssnano-util-get-arguments": "^4.0.0", + "is-color-stop": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + } + }, + "postcss-minify-params": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-4.0.2.tgz", + "integrity": "sha512-G7eWyzEx0xL4/wiBBJxJOz48zAKV2WG3iZOqVhPet/9geefm/Px5uo1fzlHu+DOjT+m0Mmiz3jkQzVHe6wxAWg==", + "dev": true, + "requires": { + "alphanum-sort": "^1.0.0", + "browserslist": "^4.0.0", + "cssnano-util-get-arguments": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0", + "uniqs": "^2.0.0" + } + }, + "postcss-minify-selectors": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-4.0.2.tgz", + "integrity": "sha512-D5S1iViljXBj9kflQo4YutWnJmwm8VvIsU1GeXJGiG9j8CIg9zs4voPMdQDUmIxetUOh60VilsNzCiAFTOqu3g==", + "dev": true, + "requires": { + "alphanum-sort": "^1.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-selector-parser": "^3.0.0" + }, + "dependencies": { + "postcss-selector-parser": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", + "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", + "dev": true, + "requires": { + "dot-prop": "^5.2.0", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + } + } + } + }, + "postcss-modules-extract-imports": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.1.0.tgz", + "integrity": "sha512-zF9+UIEvtpeqMGxhpeT9XaIevQSrBBCz9fi7SwfkmjVacsSj8DY5eFVgn+wY8I9vvdDDwK5xC8Myq4UkoLFIkA==", + "dev": true, + "requires": { + "postcss": "^6.0.1" + }, + "dependencies": { + "postcss": { + "version": "6.0.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", + "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", + "dev": true, + "requires": { + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" + } + } + } + }, + "postcss-modules-local-by-default": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.2.0.tgz", + "integrity": "sha512-X4cquUPIaAd86raVrBwO8fwRfkIdbwFu7CTfEOjiZQHVQwlHRSkTgH5NLDmMm5+1hQO8u6dZ+TOOJDbay1hYpA==", + "dev": true, + "requires": { + "css-selector-tokenizer": "^0.7.0", + "postcss": "^6.0.1" + }, + "dependencies": { + "postcss": { + "version": "6.0.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", + "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", + "dev": true, + "requires": { + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" + } + } + } + }, + "postcss-modules-scope": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-1.1.0.tgz", + "integrity": "sha512-LTYwnA4C1He1BKZXIx1CYiHixdSe9LWYVKadq9lK5aCCMkoOkFyZ7aigt+srfjlRplJY3gIol6KUNefdMQJdlw==", + "dev": true, + "requires": { + "css-selector-tokenizer": "^0.7.0", + "postcss": "^6.0.1" + }, + "dependencies": { + "postcss": { + "version": "6.0.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", + "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", + "dev": true, + "requires": { + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" + } + } + } + }, + "postcss-modules-values": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-1.3.0.tgz", + "integrity": "sha512-i7IFaR9hlQ6/0UgFuqM6YWaCfA1Ej8WMg8A5DggnH1UGKJvTV/ugqq/KaULixzzOi3T/tF6ClBXcHGCzdd5unA==", + "dev": true, + "requires": { + "icss-replace-symbols": "^1.1.0", + "postcss": "^6.0.1" + }, + "dependencies": { + "postcss": { + "version": "6.0.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", + "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", + "dev": true, + "requires": { + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" + } + } + } + }, + "postcss-normalize-charset": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-4.0.1.tgz", + "integrity": "sha512-gMXCrrlWh6G27U0hF3vNvR3w8I1s2wOBILvA87iNXaPvSNo5uZAMYsZG7XjCUf1eVxuPfyL4TJ7++SGZLc9A3g==", + "dev": true, + "requires": { + "postcss": "^7.0.0" + } + }, + "postcss-normalize-display-values": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.2.tgz", + "integrity": "sha512-3F2jcsaMW7+VtRMAqf/3m4cPFhPD3EFRgNs18u+k3lTJJlVe7d0YPO+bnwqo2xg8YiRpDXJI2u8A0wqJxMsQuQ==", + "dev": true, + "requires": { + "cssnano-util-get-match": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + } + }, + "postcss-normalize-positions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-4.0.2.tgz", + "integrity": "sha512-Dlf3/9AxpxE+NF1fJxYDeggi5WwV35MXGFnnoccP/9qDtFrTArZ0D0R+iKcg5WsUd8nUYMIl8yXDCtcrT8JrdA==", + "dev": true, + "requires": { + "cssnano-util-get-arguments": "^4.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + } + }, + "postcss-normalize-repeat-style": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.2.tgz", + "integrity": "sha512-qvigdYYMpSuoFs3Is/f5nHdRLJN/ITA7huIoCyqqENJe9PvPmLhNLMu7QTjPdtnVf6OcYYO5SHonx4+fbJE1+Q==", + "dev": true, + "requires": { + "cssnano-util-get-arguments": "^4.0.0", + "cssnano-util-get-match": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + } + }, + "postcss-normalize-string": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-4.0.2.tgz", + "integrity": "sha512-RrERod97Dnwqq49WNz8qo66ps0swYZDSb6rM57kN2J+aoyEAJfZ6bMx0sx/F9TIEX0xthPGCmeyiam/jXif0eA==", + "dev": true, + "requires": { + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + } + }, + "postcss-normalize-timing-functions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.2.tgz", + "integrity": "sha512-acwJY95edP762e++00Ehq9L4sZCEcOPyaHwoaFOhIwWCDfik6YvqsYNxckee65JHLKzuNSSmAdxwD2Cud1Z54A==", + "dev": true, + "requires": { + "cssnano-util-get-match": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + } + }, + "postcss-normalize-unicode": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-4.0.1.tgz", + "integrity": "sha512-od18Uq2wCYn+vZ/qCOeutvHjB5jm57ToxRaMeNuf0nWVHaP9Hua56QyMF6fs/4FSUnVIw0CBPsU0K4LnBPwYwg==", + "dev": true, + "requires": { + "browserslist": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + } + }, + "postcss-normalize-url": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-4.0.1.tgz", + "integrity": "sha512-p5oVaF4+IHwu7VpMan/SSpmpYxcJMtkGppYf0VbdH5B6hN8YNmVyJLuY9FmLQTzY3fag5ESUUHDqM+heid0UVA==", + "dev": true, + "requires": { + "is-absolute-url": "^2.0.0", + "normalize-url": "^3.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + } + }, + "postcss-normalize-whitespace": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.2.tgz", + "integrity": "sha512-tO8QIgrsI3p95r8fyqKV+ufKlSHh9hMJqACqbv2XknufqEDhDvbguXGBBqxw9nsQoXWf0qOqppziKJKHMD4GtA==", + "dev": true, + "requires": { + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + } + }, + "postcss-ordered-values": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-4.1.2.tgz", + "integrity": "sha512-2fCObh5UanxvSxeXrtLtlwVThBvHn6MQcu4ksNT2tsaV2Fg76R2CV98W7wNSlX+5/pFwEyaDwKLLoEV7uRybAw==", + "dev": true, + "requires": { + "cssnano-util-get-arguments": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + } + }, + "postcss-reduce-initial": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-4.0.3.tgz", + "integrity": "sha512-gKWmR5aUulSjbzOfD9AlJiHCGH6AEVLaM0AV+aSioxUDd16qXP1PCh8d1/BGVvpdWn8k/HiK7n6TjeoXN1F7DA==", + "dev": true, + "requires": { + "browserslist": "^4.0.0", + "caniuse-api": "^3.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0" + } + }, + "postcss-reduce-transforms": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.2.tgz", + "integrity": "sha512-EEVig1Q2QJ4ELpJXMZR8Vt5DQx8/mo+dGWSR7vWXqcob2gQLyQGsionYcGKATXvQzMPn6DSN1vTN7yFximdIAg==", + "dev": true, + "requires": { + "cssnano-util-get-match": "^4.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + } + }, + "postcss-selector-parser": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", + "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", + "dev": true, + "requires": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + } + }, + "postcss-svgo": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-4.0.3.tgz", + "integrity": "sha512-NoRbrcMWTtUghzuKSoIm6XV+sJdvZ7GZSc3wdBN0W19FTtp2ko8NqLsgoh/m9CzNhU3KLPvQmjIwtaNFkaFTvw==", + "dev": true, + "requires": { + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0", + "svgo": "^1.0.0" + } + }, + "postcss-unique-selectors": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-4.0.1.tgz", + "integrity": "sha512-+JanVaryLo9QwZjKrmJgkI4Fn8SBgRO6WXQBJi7KiAVPlmxikB5Jzc4EvXMT2H0/m0RjrVVm9rGNhZddm/8Spg==", + "dev": true, + "requires": { + "alphanum-sort": "^1.0.0", + "postcss": "^7.0.0", + "uniqs": "^2.0.0" + } + }, + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + }, + "posthtml": { + "version": "0.11.6", + "resolved": "https://registry.npmjs.org/posthtml/-/posthtml-0.11.6.tgz", + "integrity": "sha512-C2hrAPzmRdpuL3iH0TDdQ6XCc9M7Dcc3zEW5BLerY65G4tWWszwv6nG/ksi6ul5i2mx22ubdljgktXCtNkydkw==", + "dev": true, + "requires": { + "posthtml-parser": "^0.4.1", + "posthtml-render": "^1.1.5" + } + }, + "posthtml-parser": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/posthtml-parser/-/posthtml-parser-0.4.2.tgz", + "integrity": "sha512-BUIorsYJTvS9UhXxPTzupIztOMVNPa/HtAm9KHni9z6qEfiJ1bpOBL5DfUOL9XAc3XkLIEzBzpph+Zbm4AdRAg==", + "dev": true, + "requires": { + "htmlparser2": "^3.9.2" + }, + "dependencies": { + "dom-serializer": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", + "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", + "dev": true, + "requires": { + "domelementtype": "^2.0.1", + "entities": "^2.0.0" + }, + "dependencies": { + "domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "dev": true + }, + "entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "dev": true + } + } + }, + "domelementtype": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", + "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", + "dev": true + }, + "domhandler": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", + "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", + "dev": true, + "requires": { + "domelementtype": "1" + } + }, + "domutils": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", + "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", + "dev": true, + "requires": { + "dom-serializer": "0", + "domelementtype": "1" + } + }, + "entities": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", + "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==", + "dev": true + }, + "htmlparser2": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", + "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==", + "dev": true, + "requires": { + "domelementtype": "^1.3.1", + "domhandler": "^2.3.0", + "domutils": "^1.5.1", + "entities": "^1.1.1", + "inherits": "^2.0.1", + "readable-stream": "^3.1.1" + } + } + } + }, + "posthtml-render": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/posthtml-render/-/posthtml-render-1.4.0.tgz", + "integrity": "sha512-W1779iVHGfq0Fvh2PROhCe2QhB8mEErgqzo1wpIt36tCgChafP+hbXIhLDOM8ePJrZcFs0vkNEtdibEWVqChqw==", + "dev": true + }, + "prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=" + }, + "pretty": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pretty/-/pretty-2.0.0.tgz", + "integrity": "sha512-G9xUchgTEiNpormdYBl+Pha50gOUovT18IvAe7EYMZ1/f9W/WWMPRn+xI68yXNMUk3QXHDwo/1wV/4NejVNe1w==", + "requires": { + "condense-newlines": "^0.2.1", + "extend-shallow": "^2.0.1", + "js-beautify": "^1.6.12" + } + }, + "process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", + "dev": true + }, + "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==", + "dev": true + }, + "progress-stream": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/progress-stream/-/progress-stream-1.2.0.tgz", + "integrity": "sha1-LNPP6jO6OonJwSHsM0er6asSX3c=", + "requires": { + "speedometer": "~0.1.2", + "through2": "~0.2.3" + } + }, + "promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=" + }, + "proto-list": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", + "integrity": "sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk=" + }, + "prr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=" + }, + "pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=" + }, + "psl": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", + "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==" + }, + "public-encrypt": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", + "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", + "dev": true, + "requires": { + "bn.js": "^4.1.0", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "parse-asn1": "^5.0.0", + "randombytes": "^2.0.1", + "safe-buffer": "^5.1.2" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + } + } + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" + }, + "purgecss": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/purgecss/-/purgecss-2.3.0.tgz", + "integrity": "sha512-BE5CROfVGsx2XIhxGuZAT7rTH9lLeQx/6M0P7DTXQH4IUc3BBzs9JUzt4yzGf3JrH9enkeq6YJBe9CTtkm1WmQ==", + "dev": true, + "requires": { + "commander": "^5.0.0", + "glob": "^7.0.0", + "postcss": "7.0.32", + "postcss-selector-parser": "^6.0.2" + }, + "dependencies": { + "commander": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", + "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", + "dev": true + }, + "postcss": { + "version": "7.0.32", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz", + "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "q": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", + "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=" + }, + "qs": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", + "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", + "requires": { + "side-channel": "^1.0.6" + } + }, + "query-string": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-7.1.3.tgz", + "integrity": "sha512-hh2WYhq4fi8+b+/2Kg9CEge4fDPvHS534aOOvOZeQ3+Vf2mCFsaFBYj0i+iXcAq6I9Vzp5fjMFBlONvayDC1qg==", + "requires": { + "decode-uri-component": "^0.2.2", + "filter-obj": "^1.1.0", + "split-on-first": "^1.0.0", + "strict-uri-encode": "^2.0.0" + }, + "dependencies": { + "strict-uri-encode": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz", + "integrity": "sha512-QwiXZgpRcKkhTj2Scnn++4PKtWsH0kpzZ62L2R6c/LUVYv7hVnZqcg2+sMuT6R7Jusu1vviK/MFsu6kNJfWlEQ==" + } + } + }, + "querystring": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.1.tgz", + "integrity": "sha512-wkvS7mL/JMugcup3/rMitHmd9ecIGd2lhFhK9N3UUQ450h66d1r3Y9nvXzQAW1Lq+wyx61k/1pfKS5KuKiyEbg==" + }, + "querystring-es3": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", + "integrity": "sha512-773xhDQnZBMFobEiztv8LIl70ch5MSF/jUQVlhwFyBILqq96anmoctVIYz+ZRp0qbCKATTn6ev02M3r7Ga5vqA==", + "dev": true + }, + "querystringify": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==" + }, + "queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==" + }, + "quote-stream": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/quote-stream/-/quote-stream-1.0.2.tgz", + "integrity": "sha512-kKr2uQ2AokadPjvTyKJQad9xELbZwYzWlNfI3Uz2j/ib5u6H9lDP7fUUR//rMycd0gv4Z5P1qXMfXR8YpIxrjQ==", + "dev": true, + "requires": { + "buffer-equal": "0.0.1", + "minimist": "^1.1.3", + "through2": "^2.0.0" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "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==", + "dev": true + }, + "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==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "dev": true, + "requires": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, + "xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true + } + } + }, + "rage-edit": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/rage-edit/-/rage-edit-1.2.0.tgz", + "integrity": "sha512-0RspBRc2s6We4g7hRCvT5mu7YPEnfjvQK8Tt354a2uUNJCMC7MKLvo/1mLvHUCQ/zbP6siQyp5VRZN7UCpMFZg==" + }, + "randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "requires": { + "safe-buffer": "^5.1.0" + } + }, + "randomfill": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", + "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", + "dev": true, + "requires": { + "randombytes": "^2.0.5", + "safe-buffer": "^5.1.0" + } + }, + "range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "dev": true + }, + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "readdirp": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", + "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" + }, + "dependencies": { + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + } + }, + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + }, + "dependencies": { + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", + "dev": true, + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + } + } + } + }, + "readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "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==", + "dev": true + }, + "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==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + } + } + }, + "readjson": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/readjson/-/readjson-2.2.2.tgz", + "integrity": "sha512-PdeC9tsmLWBiL8vMhJvocq+OezQ3HhsH2HrN7YkhfYcTjQSa/iraB15A7Qvt7Xpr0Yd2rDNt6GbFwVQDg3HcAw==", + "requires": { + "jju": "^1.4.0", + "try-catch": "^3.0.0" + } + }, + "regenerate": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", + "dev": true + }, + "regenerate-unicode-properties": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.0.tgz", + "integrity": "sha512-DqHn3DwbmmPVzeKj9woBadqmXxLvQoQIwu7nopMc72ztvxVmVk2SBhSnx67zuye5TP+lJsb/TBQsjLKhnDf3MA==", + "dev": true, + "requires": { + "regenerate": "^1.4.2" + } + }, + "regenerator-runtime": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==", + "dev": true + }, + "regenerator-transform": { + "version": "0.15.2", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.2.tgz", + "integrity": "sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==", + "dev": true, + "requires": { + "@babel/runtime": "^7.8.4" + } + }, + "regex-not": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", + "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "dev": true, + "requires": { + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", + "dev": true, + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + } + }, + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "regexp.prototype.flags": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz", + "integrity": "sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==", + "dev": true, + "requires": { + "call-bind": "^1.0.6", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "set-function-name": "^2.0.1" + } + }, + "regexpu-core": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-6.1.1.tgz", + "integrity": "sha512-k67Nb9jvwJcJmVpw0jPttR1/zVfnKf8Km0IPatrU/zJ5XeG3+Slx0xLXs9HByJSzXzrlz5EDvN6yLNMDc2qdnw==", + "dev": true, + "requires": { + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.2.0", + "regjsgen": "^0.8.0", + "regjsparser": "^0.11.0", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.1.0" + } + }, + "regjsgen": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.8.0.tgz", + "integrity": "sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==", + "dev": true + }, + "regjsparser": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.11.2.tgz", + "integrity": "sha512-3OGZZ4HoLJkkAZx/48mTXJNlmqTGOzc0o9OWQPuWpkOlXXPbyN6OafCcoXUnBqE2D3f/T5L+pWc1kdEmnfnRsA==", + "dev": true, + "requires": { + "jsesc": "~3.0.2" + } + }, + "relateurl": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", + "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==" + }, + "remedial": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/remedial/-/remedial-1.0.8.tgz", + "integrity": "sha512-/62tYiOe6DzS5BqVsNpH/nkGlX45C/Sp6V+NtiN6JQNS1Viay7cWkazmRkrQrdFj2eshDe96SIQNIoMxqhzBOg==" + }, + "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==", + "dev": true + }, + "remove-trailing-spaces": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/remove-trailing-spaces/-/remove-trailing-spaces-1.0.8.tgz", + "integrity": "sha512-O3vsMYfWighyFbTd8hk8VaSj9UAGENxAtX+//ugIst2RMk5e03h6RoIS+0ylsFxY1gvmPuAY/PO4It+gPEeySA==" + }, + "repeat-element": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz", + "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==", + "dev": true + }, + "repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", + "dev": true + }, + "request": { + "version": "2.88.2", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", + "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", + "dev": true, + "requires": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.3", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.5.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + }, + "dependencies": { + "form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "dev": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + } + }, + "qs": { + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", + "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==", + "dev": true + } + } + }, + "request-promise-core": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.4.tgz", + "integrity": "sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw==", + "dev": true, + "requires": { + "lodash": "^4.17.19" + } + }, + "request-promise-native": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.9.tgz", + "integrity": "sha512-wcW+sIUiWnKgNY0dqCpOZkUbF/I+YPi+f09JZIDa39Ec+q82CpSYniDp+ISgTTbKmnpJWASeJBPZmoxH84wt3g==", + "dev": true, + "requires": { + "request-promise-core": "1.1.4", + "stealthy-require": "^1.1.1", + "tough-cookie": "^2.3.3" + } + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" + }, + "require-like": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/require-like/-/require-like-0.1.2.tgz", + "integrity": "sha1-rW8wwTvs15cBDEaK+ndcDAprR/o=" + }, + "require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" + }, + "requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==" + }, + "resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "dev": true, + "requires": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } + }, + "resolve-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw==", + "dev": true + }, + "resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==", + "dev": true + }, + "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==", + "dev": true, + "requires": { + "onetime": "^2.0.0", + "signal-exit": "^3.0.2" + } + }, + "ret": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", + "dev": true + }, + "reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==" + }, + "rgb-regex": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/rgb-regex/-/rgb-regex-1.0.1.tgz", + "integrity": "sha512-gDK5mkALDFER2YLqH6imYvK6g02gpNGM4ILDZ472EwWfXZnC2ZEpoB2ECXTyOVUKuk/bPJZMzwQPBYICzP+D3w==", + "dev": true + }, + "rgba-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/rgba-regex/-/rgba-regex-1.0.0.tgz", + "integrity": "sha512-zgn5OjNQXLUTdq8m17KdaicF6w89TZs8ZU8y0AYENIU6wG8GG6LLm0yLSiPY8DmaYmHdgRW8rnApjoT0fQRfMg==", + "dev": true + }, + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "requires": { + "glob": "^7.1.3" + } + }, + "ripemd160": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", + "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", + "dev": true, + "requires": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1" + } + }, + "rotating-file-stream": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/rotating-file-stream/-/rotating-file-stream-3.2.3.tgz", + "integrity": "sha512-cfmm3tqdnbuYw2FBmRTPBDaohYEbMJ3211T35o6eZdr4d7v69+ZeK1Av84Br7FLj2dlzyeZSbN6qTuXXE6dawQ==" + }, + "run-applescript": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-3.2.0.tgz", + "integrity": "sha512-Ep0RsvAjnRcBX1p5vogbaBdAGu/8j/ewpvGqnQYunnLd9SM0vWcPJewPKNnWFggf0hF0pwIgwV5XK7qQ7UZ8Qg==", + "requires": { + "execa": "^0.10.0" + } + }, + "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-array-concat": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz", + "integrity": "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==", + "dev": true, + "requires": { + "call-bind": "^1.0.7", + "get-intrinsic": "^1.2.4", + "has-symbols": "^1.0.3", + "isarray": "^2.0.5" + }, + "dependencies": { + "isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true + } + } + }, + "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==" + }, + "safe-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg==", + "dev": true, + "requires": { + "ret": "~0.1.10" + } + }, + "safe-regex-test": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz", + "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==", + "dev": true, + "requires": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-regex": "^1.1.4" + } + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "sanitize-filename": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/sanitize-filename/-/sanitize-filename-1.6.3.tgz", + "integrity": "sha512-y/52Mcy7aw3gRm7IrcGDFx/bCk4AhRh2eI9luHOQM86nZsqwiRkkq2GekHXBBD+SmPidc8i2PqtYZl+pWJ8Oeg==", + "requires": { + "truncate-utf8-bytes": "^1.0.0" + } + }, + "sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", + "dev": true + }, + "saxes": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", + "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", + "requires": { + "xmlchars": "^2.2.0" + } + }, + "semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==" + }, + "send": { + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", + "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", + "dev": true, + "requires": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "dependencies": { + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "dev": true + }, + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + } + } + }, + "serialize-to-js": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/serialize-to-js/-/serialize-to-js-3.1.2.tgz", + "integrity": "sha512-owllqNuDDEimQat7EPG0tH7JjO090xKNzUtYz6X+Sk2BXDnOCilDdNLwjWeFywG9xkJul1ULvtUQa9O4pUaY0w==", + "dev": true + }, + "serve-static": { + "version": "1.16.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", + "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", + "dev": true, + "requires": { + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.19.0" + } + }, + "server-destroy": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/server-destroy/-/server-destroy-1.0.1.tgz", + "integrity": "sha512-rb+9B5YBIEzYcD6x2VKidaa+cqYBJQKnU4oe4E3ANwRRN56yk/ua1YCJT1n21NTS8w6CcOclAKNP3PhdCXKYtQ==" + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" + }, + "set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "requires": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + } + }, + "set-function-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", + "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", + "dev": true, + "requires": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.2" + } + }, + "set-value": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", + "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" + } + }, + "setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", + "dev": true + }, + "setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "dev": true + }, + "sha.js": { + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "shallow-copy": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/shallow-copy/-/shallow-copy-0.0.1.tgz", + "integrity": "sha512-b6i4ZpVuUxB9h5gfCxPiusKYkqTMOjEbBs4wMaFbkfia4yFv92UKZ6Df8WXcKbn08JNL/abvg3FnMAOfakDvUw==", + "dev": true + }, + "sharp": { + "version": "0.33.4", + "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.33.4.tgz", + "integrity": "sha512-7i/dt5kGl7qR4gwPRD2biwD2/SvBn3O04J77XKFgL2OnZtQw+AG9wnuS/csmu80nPRHLYE9E41fyEiG8nhH6/Q==", + "requires": { + "@img/sharp-darwin-arm64": "0.33.4", + "@img/sharp-darwin-x64": "0.33.4", + "@img/sharp-libvips-darwin-arm64": "1.0.2", + "@img/sharp-libvips-darwin-x64": "1.0.2", + "@img/sharp-libvips-linux-arm": "1.0.2", + "@img/sharp-libvips-linux-arm64": "1.0.2", + "@img/sharp-libvips-linux-s390x": "1.0.2", + "@img/sharp-libvips-linux-x64": "1.0.2", + "@img/sharp-libvips-linuxmusl-arm64": "1.0.2", + "@img/sharp-libvips-linuxmusl-x64": "1.0.2", + "@img/sharp-linux-arm": "0.33.4", + "@img/sharp-linux-arm64": "0.33.4", + "@img/sharp-linux-s390x": "0.33.4", + "@img/sharp-linux-x64": "0.33.4", + "@img/sharp-linuxmusl-arm64": "0.33.4", + "@img/sharp-linuxmusl-x64": "0.33.4", + "@img/sharp-wasm32": "0.33.4", + "@img/sharp-win32-ia32": "0.33.4", + "@img/sharp-win32-x64": "0.33.4", + "color": "^4.2.3", + "detect-libc": "^2.0.3", + "semver": "^7.6.0" + }, + "dependencies": { + "semver": { + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", + "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==" + } + } + }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "requires": { + "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": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=" + }, + "shell-escape": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/shell-escape/-/shell-escape-0.2.0.tgz", + "integrity": "sha512-uRRBT2MfEOyxuECseCZd28jC1AJ8hmqqneWQ4VWUTgCAFvb3wKU1jLqj6egC4Exrr88ogg3dp+zroH4wJuaXzw==" + }, + "showdown": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/showdown/-/showdown-2.1.0.tgz", + "integrity": "sha512-/6NVYu4U819R2pUIk79n67SYgJHWCce0a5xTP979WbNp0FL9MN1I1QK662IDU1b6JzKTvmhgI7T7JYIxBi3kMQ==", + "requires": { + "commander": "^9.0.0" + }, + "dependencies": { + "commander": { + "version": "9.5.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", + "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==" + } + } + }, + "side-channel": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", + "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", + "requires": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" + } + }, + "signal-exit": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", + "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==" + }, + "simple-swizzle": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", + "requires": { + "is-arrayish": "^0.3.1" + }, + "dependencies": { + "is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" + } + } + }, + "simport": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/simport/-/simport-1.2.0.tgz", + "integrity": "sha512-85Bm7pKsqiiQ8rmYCaPDdlXZjJvuW6/k/FY8MTtLFMgU7f8S00CgTHfRtWB6KwSb6ek4p9YyG2enG1+yJbl+CA==", + "requires": { + "readjson": "^2.2.0", + "try-to-catch": "^3.0.0" + } + }, + "slash": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", + "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=" + }, + "slide": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/slide/-/slide-1.1.6.tgz", + "integrity": "sha1-VusCfWW00tzmyy4tMsTUr8nh1wc=" + }, + "snapdragon": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", + "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "dev": true, + "requires": { + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "is-descriptor": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.7.tgz", + "integrity": "sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.1", + "is-data-descriptor": "^1.0.1" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "dev": true + } + } + }, + "snapdragon-node": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", + "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", + "dev": true, + "requires": { + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + } + } + }, + "snapdragon-util": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", + "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "dev": true, + "requires": { + "kind-of": "^3.2.0" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "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-resolve": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", + "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", + "dev": true, + "requires": { + "atob": "^2.1.2", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" + } + }, + "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" + } + }, + "source-map-url": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", + "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==", + "dev": true + }, + "speedometer": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/speedometer/-/speedometer-0.1.4.tgz", + "integrity": "sha1-mHbb0qFp0xFUAtSObqYynIgWpQ0=" + }, + "split-on-first": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/split-on-first/-/split-on-first-1.1.0.tgz", + "integrity": "sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw==" + }, + "split-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", + "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "dev": true, + "requires": { + "extend-shallow": "^3.0.0" + }, + "dependencies": { + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", + "dev": true, + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + } + }, + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" + }, + "srcset": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/srcset/-/srcset-3.0.1.tgz", + "integrity": "sha512-MM8wDGg5BQJEj94tDrZDrX9wrC439/Eoeg3sgmVLPMjHgrAFeXAKk3tmFlCbKw5k+yOEhPXRpPlRcisQmqWVSQ==", + "dev": true + }, + "sshpk": { + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.18.0.tgz", + "integrity": "sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==", + "dev": true, + "requires": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + } + }, + "ssri": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", + "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", + "requires": { + "minipass": "^3.1.1" + } + }, + "stable": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", + "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", + "dev": true + }, + "static-eval": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/static-eval/-/static-eval-2.0.2.tgz", + "integrity": "sha512-N/D219Hcr2bPjLxPiV+TQE++Tsmrady7TqAJugLy7Xk1EumfDWS/f5dtBbkRCGE7wKKXuYockQoj8Rm2/pVKyg==", + "requires": { + "escodegen": "^1.8.1" + } + }, + "static-extend": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", + "integrity": "sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g==", + "dev": true, + "requires": { + "define-property": "^0.2.5", + "object-copy": "^0.1.0" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "is-descriptor": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.7.tgz", + "integrity": "sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.1", + "is-data-descriptor": "^1.0.1" + } + } + } + }, + "static-module": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/static-module/-/static-module-2.2.5.tgz", + "integrity": "sha512-D8vv82E/Kpmz3TXHKG8PPsCPg+RAX6cbCOyvjM6x04qZtQ47EtJFVwRsdov3n5d6/6ynrOY9XB4JkaZwB2xoRQ==", + "dev": true, + "requires": { + "concat-stream": "~1.6.0", + "convert-source-map": "^1.5.1", + "duplexer2": "~0.1.4", + "escodegen": "~1.9.0", + "falafel": "^2.1.0", + "has": "^1.0.1", + "magic-string": "^0.22.4", + "merge-source-map": "1.0.4", + "object-inspect": "~1.4.0", + "quote-stream": "~1.0.2", + "readable-stream": "~2.3.3", + "shallow-copy": "~0.0.1", + "static-eval": "^2.0.0", + "through2": "~2.0.3" + }, + "dependencies": { + "convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "dev": true + }, + "escodegen": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.9.1.tgz", + "integrity": "sha512-6hTjO1NAWkHnDk3OqQ4YrCuwwmGHL9S3nPlzBOUG/R44rda3wLNrfvQ5fkSGjyhHFKM7ALPKcKGrwvCLe0lC7Q==", + "dev": true, + "requires": { + "esprima": "^3.1.3", + "estraverse": "^4.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1", + "source-map": "~0.6.1" + } + }, + "esprima": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz", + "integrity": "sha512-AWwVMNxwhN8+NIPQzAQZCm7RkLC4RbM3B1OobMuyp3i+w73X57KCKaVIxaRZb+DYCojq7rspo+fmuQfAboyhFg==", + "dev": true + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "object-inspect": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.4.1.tgz", + "integrity": "sha512-wqdhLpfCUbEsoEwl3FXwGyv8ief1k/1aUdIPCqVnupM6e8l63BEJdiF/0swtn04/8p05tG/T0FrpTlfwvljOdw==", + "dev": true + }, + "readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "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==", + "dev": true + }, + "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==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "dev": true, + "requires": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, + "xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true + } + } + }, + "statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dev": true + }, + "stealthy-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", + "integrity": "sha512-ZnWpYnYugiOVEY5GkcuJK1io5V8QmNYChG62gSit9pQVGErXtrKuPC55ITaVSukmMta5qpMU7vqLt2Lnni4f/g==", + "dev": true + }, + "stream-browserify": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", + "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==", + "dev": true, + "requires": { + "inherits": "~2.0.1", + "readable-stream": "^2.0.2" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "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==", + "dev": true + }, + "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==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "stream-http": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz", + "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", + "dev": true, + "requires": { + "builtin-status-codes": "^3.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.3.6", + "to-arraybuffer": "^1.0.0", + "xtend": "^4.0.0" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "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==", + "dev": true + }, + "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==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true + } + } + }, + "stream-parser": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/stream-parser/-/stream-parser-0.3.1.tgz", + "integrity": "sha1-FhhUhpRCACGhGC/wrxkRwSl2F3M=", + "requires": { + "debug": "2" + } + }, + "string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "requires": { + "safe-buffer": "~5.2.0" + } + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "string-width-cjs": { + "version": "npm:string-width@4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" + }, + "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==" + }, + "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", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "requires": { + "ansi-regex": "^5.0.1" + } + } + } + }, + "string.prototype.trim": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz", + "integrity": "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==", + "dev": true, + "requires": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.0", + "es-object-atoms": "^1.0.0" + } + }, + "string.prototype.trimend": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz", + "integrity": "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + } + }, + "string.prototype.trimstart": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", + "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", + "dev": true, + "requires": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "requires": { + "ansi-regex": "^4.1.0" + } + }, + "strip-ansi-cjs": { + "version": "npm:strip-ansi@6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "requires": { + "ansi-regex": "^5.0.1" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" + } + } + }, + "strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=" + }, + "strip-outer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/strip-outer/-/strip-outer-1.0.1.tgz", + "integrity": "sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg==", + "requires": { + "escape-string-regexp": "^1.0.2" + } + }, + "stylehacks": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-4.0.3.tgz", + "integrity": "sha512-7GlLk9JwlElY4Y6a/rmbH2MhVlTyVmiJd1PfTCqFaIBEGMYNsrO/v3SeGTdhBThLg4Z+NbOk/qFMwCa+J+3p/g==", + "dev": true, + "requires": { + "browserslist": "^4.0.0", + "postcss": "^7.0.0", + "postcss-selector-parser": "^3.0.0" + }, + "dependencies": { + "postcss-selector-parser": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", + "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", + "dev": true, + "requires": { + "dot-prop": "^5.2.0", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + } + } + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + }, + "supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true + }, + "svgo": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.3.2.tgz", + "integrity": "sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==", + "dev": true, + "requires": { + "chalk": "^2.4.1", + "coa": "^2.0.2", + "css-select": "^2.0.0", + "css-select-base-adapter": "^0.1.1", + "css-tree": "1.0.0-alpha.37", + "csso": "^4.0.2", + "js-yaml": "^3.13.1", + "mkdirp": "~0.5.1", + "object.values": "^1.1.0", + "sax": "~1.2.4", + "stable": "^0.1.8", + "unquote": "~1.1.1", + "util.promisify": "~1.0.0" + }, + "dependencies": { + "css-select": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz", + "integrity": "sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==", + "dev": true, + "requires": { + "boolbase": "^1.0.0", + "css-what": "^3.2.1", + "domutils": "^1.7.0", + "nth-check": "^1.0.2" + } + }, + "css-what": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-3.4.2.tgz", + "integrity": "sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ==", + "dev": true + }, + "dom-serializer": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", + "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", + "dev": true, + "requires": { + "domelementtype": "^2.0.1", + "entities": "^2.0.0" + } + }, + "domutils": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", + "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", + "dev": true, + "requires": { + "dom-serializer": "0", + "domelementtype": "1" + }, + "dependencies": { + "domelementtype": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", + "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", + "dev": true + } + } + }, + "entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "dev": true + }, + "nth-check": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", + "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", + "dev": true, + "requires": { + "boolbase": "~1.0.0" + } + } + } + }, + "symbol-tree": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==" + }, + "tar": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", + "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", + "requires": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^5.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "dependencies": { + "minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==" + }, + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + } + } + }, + "terser": { + "version": "5.34.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.34.1.tgz", + "integrity": "sha512-FsJZ7iZLd/BXkz+4xrRTGJ26o/6VTjQytUk8b8OxkwcD2I+79VPJlz7qss1+zE7h8GNIScFqXcDyJ/KqBYZFVA==", + "requires": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "dependencies": { + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + } + } + }, + "throttle": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/throttle/-/throttle-1.0.3.tgz", + "integrity": "sha1-ijLkoV8XY9mXlIMXxevjrYpB5Lc=", + "requires": { + "readable-stream": ">= 0.3.0", + "stream-parser": ">= 0.0.2" + } + }, + "through2": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/through2/-/through2-0.2.3.tgz", + "integrity": "sha1-6zKE2k6jEbbMis42U3SKUqvyWj8=", + "requires": { + "readable-stream": "~1.1.9", + "xtend": "~2.1.1" + }, + "dependencies": { + "readable-stream": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" + } + } + }, + "timers-browserify": { + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.12.tgz", + "integrity": "sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==", + "dev": true, + "requires": { + "setimmediate": "^1.0.4" + } + }, + "timsort": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz", + "integrity": "sha512-qsdtZH+vMoCARQtyod4imc2nIJwg9Cc7lPRrw9CzF8ZKR0khdr8+2nX80PBhET3tcyTtJDxAffGh2rXH4tyU8A==", + "dev": true + }, + "tiny-inflate": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tiny-inflate/-/tiny-inflate-1.0.3.tgz", + "integrity": "sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==", + "dev": true + }, + "to-arraybuffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", + "integrity": "sha512-okFlQcoGTi4LQBG/PgSYblw9VOyptsz2KJZqc6qtgGdes8VktzUQkj4BI2blit072iS8VODNcMA+tvnS9dnuMA==", + "dev": true + }, + "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==", + "dev": true + }, + "to-object-path": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", + "integrity": "sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg==", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "to-regex": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", + "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "dev": true, + "requires": { + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", + "dev": true, + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + } + }, + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "requires": { + "is-number": "^7.0.0" + } + }, + "toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "dev": true + }, + "tough-cookie": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "dev": true, + "requires": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + } + }, + "tr46": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", + "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", + "requires": { + "punycode": "^2.1.1" + } + }, + "trash": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/trash/-/trash-4.3.0.tgz", + "integrity": "sha512-f36TKwIaBiXm63xSrn8OTNghg5CYHBsFVJvcObMo76LRpgariuRi2CqXQHw1VzfeximD0igdGaonOG6N760BtQ==", + "requires": { + "escape-string-applescript": "^2.0.0", + "fs-extra": "^0.30.0", + "globby": "^7.1.1", + "p-map": "^1.2.0", + "p-try": "^1.0.0", + "pify": "^3.0.0", + "run-applescript": "^3.0.0", + "uuid": "^3.1.0", + "xdg-trashdir": "^2.1.1" + } + }, + "trim-repeated": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/trim-repeated/-/trim-repeated-1.0.0.tgz", + "integrity": "sha1-42RqLqTokTEr9+rObPsFOAvAHCE=", + "requires": { + "escape-string-regexp": "^1.0.2" + } + }, + "truncate-utf8-bytes": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz", + "integrity": "sha512-95Pu1QXQvruGEhv62XCMO3Mm90GscOCClvrIUwCM0PYOXK3kaF3l3sIHxx71ThJfcbM2O5Au6SO3AWCSEfW4mQ==", + "requires": { + "utf8-byte-length": "^1.0.1" + } + }, + "try-catch": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/try-catch/-/try-catch-3.0.1.tgz", + "integrity": "sha512-91yfXw1rr/P6oLpHSyHDOHm0vloVvUoo9FVdw8YwY05QjJQG9OT0LUxe2VRAzmHG+0CUOmI3nhxDUMLxDN/NEQ==" + }, + "try-to-catch": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/try-to-catch/-/try-to-catch-3.0.1.tgz", + "integrity": "sha512-hOY83V84Hx/1sCzDSaJA+Xz2IIQOHRvjxzt+F0OjbQGPZ6yLPLArMA0gw/484MlfUkQbCpKYMLX3VDCAjWKfzQ==" + }, + "tslib": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.1.0.tgz", + "integrity": "sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A==" + }, + "tslog": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/tslog/-/tslog-3.3.4.tgz", + "integrity": "sha512-N0HHuHE0e/o75ALfkioFObknHR5dVchUad4F0XyFf3gXJYB++DewEzwGI/uIOM216E5a43ovnRNEeQIq9qgm4Q==", + "requires": { + "source-map-support": "^0.5.21" + } + }, + "tty-browserify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", + "integrity": "sha512-JVa5ijo+j/sOoHGjw0sxw734b1LhBkQ3bvUGNdxnVXDCX81Yx7TFgnZygxrIIWn23hbfTaMYLwRmAxFyDuFmIw==", + "dev": true + }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "dev": true, + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "turndown": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/turndown/-/turndown-7.2.0.tgz", + "integrity": "sha512-eCZGBN4nNNqM9Owkv9HAtWRYfLA4h909E/WGAWWBpmB275ehNhZyk87/Tpvjbp0jjNl9XwCsbe6bm6CqFsgD+A==", + "requires": { + "@mixmark-io/domino": "^2.2.0" + } + }, + "tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", + "dev": true + }, + "type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "requires": { + "prelude-ls": "~1.1.2" + } + }, + "typed-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz", + "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.13" + } + }, + "typed-array-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz", + "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==", + "dev": true, + "requires": { + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" + } + }, + "typed-array-byte-offset": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz", + "integrity": "sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==", + "dev": true, + "requires": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" + } + }, + "typed-array-length": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.6.tgz", + "integrity": "sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==", + "dev": true, + "requires": { + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13", + "possible-typed-array-names": "^1.0.0" + } + }, + "typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", + "dev": true + }, + "typescript": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", + "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==" + }, + "unbox-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + } + }, + "uncss": { + "version": "0.17.3", + "resolved": "https://registry.npmjs.org/uncss/-/uncss-0.17.3.tgz", + "integrity": "sha512-ksdDWl81YWvF/X14fOSw4iu8tESDHFIeyKIeDrK6GEVTQvqJc1WlOEXqostNwOCi3qAj++4EaLsdAgPmUbEyog==", + "dev": true, + "requires": { + "commander": "^2.20.0", + "glob": "^7.1.4", + "is-absolute-url": "^3.0.1", + "is-html": "^1.1.0", + "jsdom": "^14.1.0", + "lodash": "^4.17.15", + "postcss": "^7.0.17", + "postcss-selector-parser": "6.0.2", + "request": "^2.88.0" + }, + "dependencies": { + "acorn": { + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz", + "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==", + "dev": true + }, + "acorn-globals": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-4.3.4.tgz", + "integrity": "sha512-clfQEh21R+D0leSbUdWf3OcfqyaCSAQ8Ryq00bofSekfr9W8u1jyYZo6ir0xu9Gtcf7BjcHJpnbZH7JOCpP60A==", + "dev": true, + "requires": { + "acorn": "^6.0.1", + "acorn-walk": "^6.0.1" + } + }, + "acorn-walk": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-6.2.0.tgz", + "integrity": "sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA==", + "dev": true + }, + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "cssom": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", + "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", + "dev": true + }, + "cssstyle": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-1.4.0.tgz", + "integrity": "sha512-GBrLZYZ4X4x6/QEoBnIrqb8B/f5l4+8me2dkom/j1Gtbxy0kBv6OGzKuAsGM75bkGwGAFkt56Iwg28S3XTZgSA==", + "dev": true, + "requires": { + "cssom": "0.3.x" + } + }, + "data-urls": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-1.1.0.tgz", + "integrity": "sha512-YTWYI9se1P55u58gL5GkQHW4P6VJBJ5iBT+B5a7i2Tjadhv52paJG0qHX4A0OR6/t52odI64KP2YvFpkDOi3eQ==", + "dev": true, + "requires": { + "abab": "^2.0.0", + "whatwg-mimetype": "^2.2.0", + "whatwg-url": "^7.0.0" + } + }, + "domexception": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/domexception/-/domexception-1.0.1.tgz", + "integrity": "sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug==", + "dev": true, + "requires": { + "webidl-conversions": "^4.0.2" + } + }, + "html-encoding-sniffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz", + "integrity": "sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw==", + "dev": true, + "requires": { + "whatwg-encoding": "^1.0.1" + } + }, + "is-absolute-url": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-3.0.3.tgz", + "integrity": "sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==", + "dev": true + }, + "jsdom": { + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-14.1.0.tgz", + "integrity": "sha512-O901mfJSuTdwU2w3Sn+74T+RnDVP+FuV5fH8tcPWyqrseRAb0s5xOtPgCFiPOtLcyK7CLIJwPyD83ZqQWvA5ng==", + "dev": true, + "requires": { + "abab": "^2.0.0", + "acorn": "^6.0.4", + "acorn-globals": "^4.3.0", + "array-equal": "^1.0.0", + "cssom": "^0.3.4", + "cssstyle": "^1.1.1", + "data-urls": "^1.1.0", + "domexception": "^1.0.1", + "escodegen": "^1.11.0", + "html-encoding-sniffer": "^1.0.2", + "nwsapi": "^2.1.3", + "parse5": "5.1.0", + "pn": "^1.1.0", + "request": "^2.88.0", + "request-promise-native": "^1.0.5", + "saxes": "^3.1.9", + "symbol-tree": "^3.2.2", + "tough-cookie": "^2.5.0", + "w3c-hr-time": "^1.0.1", + "w3c-xmlserializer": "^1.1.2", + "webidl-conversions": "^4.0.2", + "whatwg-encoding": "^1.0.5", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^7.0.0", + "ws": "^6.1.2", + "xml-name-validator": "^3.0.0" + } + }, + "parse5": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.0.tgz", + "integrity": "sha512-fxNG2sQjHvlVAYmzBZS9YlDp6PTSSDwa98vkD4QgVDDCAo84z5X1t5XyJQ62ImdLXx5NdIIfihey6xpum9/gRQ==", + "dev": true + }, + "postcss-selector-parser": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.2.tgz", + "integrity": "sha512-36P2QR59jDTOAiIkqEprfJDsoNrvwFei3eCqKd1Y0tUsBimsq39BLp7RD+JWny3WgB1zGhJX8XVePwm9k4wdBg==", + "dev": true, + "requires": { + "cssesc": "^3.0.0", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + } + }, + "saxes": { + "version": "3.1.11", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-3.1.11.tgz", + "integrity": "sha512-Ydydq3zC+WYDJK1+gRxRapLIED9PWeSuuS41wqyoRmzvhhh9nc+QQrVMKJYzJFULazeGhzSV0QleN2wD3boh2g==", + "dev": true, + "requires": { + "xmlchars": "^2.1.1" + } + }, + "tr46": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", + "integrity": "sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } + }, + "w3c-xmlserializer": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-1.1.2.tgz", + "integrity": "sha512-p10l/ayESzrBMYWRID6xbuCKh2Fp77+sA0doRuGn4tTIMrrZVeqfpKjXHY+oDh3K4nLdPgNwMTVP6Vp4pvqbNg==", + "dev": true, + "requires": { + "domexception": "^1.0.1", + "webidl-conversions": "^4.0.2", + "xml-name-validator": "^3.0.0" + } + }, + "webidl-conversions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", + "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", + "dev": true + }, + "whatwg-url": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", + "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", + "dev": true, + "requires": { + "lodash.sortby": "^4.7.0", + "tr46": "^1.0.1", + "webidl-conversions": "^4.0.2" + } + }, + "ws": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.3.tgz", + "integrity": "sha512-jmTjYU0j60B+vHey6TfR3Z7RD61z/hmxBS3VMSGIrroOWXQEneK1zNuotOUrGyBHQj0yrpsLHPWtigEFd13ndA==", + "dev": true, + "requires": { + "async-limiter": "~1.0.0" + } + } + } + }, + "underscore": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.12.1.tgz", + "integrity": "sha512-hEQt0+ZLDVUMhebKxL4x1BTtDY7bavVofhZ9KZ4aI26X9SRaE+Y3m83XUL1UP2jn8ynjndwCCpEHdUG+9pP1Tw==" + }, + "undici-types": { + "version": "6.19.8", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", + "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==" + }, + "unicode-canonical-property-names-ecmascript": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.1.tgz", + "integrity": "sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==", + "dev": true + }, + "unicode-match-property-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", + "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", + "dev": true, + "requires": { + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" + } + }, + "unicode-match-property-value-ecmascript": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.2.0.tgz", + "integrity": "sha512-4IehN3V/+kkr5YeSSDDQG8QLqO26XpL2XP3GQtqwlT/QYSECAwFztxVHjlbh0+gjJ3XmNLS0zDsbgs9jWKExLg==", + "dev": true + }, + "unicode-property-aliases-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", + "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", + "dev": true + }, + "unicode-trie": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/unicode-trie/-/unicode-trie-0.3.1.tgz", + "integrity": "sha512-WgVuO0M2jDl7hVfbPgXv2LUrD81HM0bQj/bvLGiw6fJ4Zo8nNFnDrA0/hU2Te/wz6pjxCm5cxJwtLjo2eyV51Q==", + "dev": true, + "requires": { + "pako": "^0.2.5", + "tiny-inflate": "^1.0.0" + }, + "dependencies": { + "pako": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz", + "integrity": "sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==", + "dev": true + } + } + }, + "unicorn-magic": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.1.0.tgz", + "integrity": "sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==" + }, + "union-value": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", + "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", + "dev": true, + "requires": { + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^2.0.1" + } + }, + "uniq": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz", + "integrity": "sha512-Gw+zz50YNKPDKXs+9d+aKAjVwpjNwqzvNpLigIruT4HA9lMZNdMqs9x07kKHB/L9WRzqp4+DlTU5s4wG2esdoA==", + "dev": true + }, + "uniqs": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/uniqs/-/uniqs-2.0.0.tgz", + "integrity": "sha512-mZdDpf3vBV5Efh29kMw5tXoup/buMgxLzOt/XKFKcVmi+15ManNQWr6HfZ2aiZTYlYixbdNJ0KFmIZIv52tHSQ==", + "dev": true + }, + "unique-filename": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", + "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", + "requires": { + "unique-slug": "^2.0.0" + } + }, + "unique-slug": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", + "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", + "requires": { + "imurmurhash": "^0.1.4" + } + }, + "universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" + }, + "unquote": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz", + "integrity": "sha512-vRCqFv6UhXpWxZPyGDh/F3ZpNv8/qo7w6iufLpQg9aKnQ71qM4B5KiI7Mia9COcjEhrO9LueHpMYjYzsWH3OIg==", + "dev": true + }, + "unset-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", + "integrity": "sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ==", + "dev": true, + "requires": { + "has-value": "^0.3.1", + "isobject": "^3.0.0" + }, + "dependencies": { + "has-value": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", + "integrity": "sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q==", + "dev": true, + "requires": { + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" + }, + "dependencies": { + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==", + "dev": true, + "requires": { + "isarray": "1.0.0" + } + } + } + }, + "has-values": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", + "integrity": "sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ==", + "dev": true + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + } + } + }, + "upath": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", + "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", + "dev": true + }, + "update-browserslist-db": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.1.tgz", + "integrity": "sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==", + "dev": true, + "requires": { + "escalade": "^3.2.0", + "picocolors": "^1.1.0" + } + }, + "uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "requires": { + "punycode": "^2.1.0" + } + }, + "urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==", + "dev": true + }, + "url": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/url/-/url-0.11.4.tgz", + "integrity": "sha512-oCwdVC7mTuWiPyjLUz/COz5TLk6wgp0RCsN+wHZ2Ekneac9w8uuV0njcbbie2ME+Vs+d6duwmYuR3HgQXs1fOg==", + "dev": true, + "requires": { + "punycode": "^1.4.1", + "qs": "^6.12.3" + }, + "dependencies": { + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==", + "dev": true + } + } + }, + "url-parse": { + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", + "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", + "requires": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + }, + "url-template": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/url-template/-/url-template-2.0.8.tgz", + "integrity": "sha512-XdVKMF4SJ0nP/O7XIPB0JwAEuT9lDIYnNsK8yGVe43y0AWoKeJNdv3ZNWh7ksJ6KqQFjOO6ox/VEitLnaVNufw==" + }, + "use": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", + "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", + "dev": true + }, + "user-home": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/user-home/-/user-home-2.0.0.tgz", + "integrity": "sha1-nHC/2Babwdy/SGBODwS4tJzenp8=", + "requires": { + "os-homedir": "^1.0.0" + } + }, + "utf8-byte-length": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/utf8-byte-length/-/utf8-byte-length-1.0.4.tgz", + "integrity": "sha512-4+wkEYLBbWxqTahEsWrhxepcoVOJ+1z5PGIjPZxRkytcdSUaNjIjBM7Xn8E+pdSuV7SzvWovBFA54FO0JSoqhA==" + }, + "util": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz", + "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==", + "dev": true, + "requires": { + "inherits": "2.0.3" + }, + "dependencies": { + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", + "dev": true + } + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "util.promisify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.1.tgz", + "integrity": "sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.2", + "has-symbols": "^1.0.1", + "object.getownpropertydescriptors": "^2.1.0" + } + }, + "uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" + }, + "v8-compile-cache": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.4.0.tgz", + "integrity": "sha512-ocyWc3bAHBB/guyqJQVI5o4BZkPhznPYUG2ea80Gond/BgNWpap8TOmLSeeQG7bnh2KMISxskdADG59j7zruhw==", + "dev": true + }, + "vendors": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.4.tgz", + "integrity": "sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w==", + "dev": true + }, + "verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", + "dev": true, + "requires": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "vlq": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/vlq/-/vlq-0.2.3.tgz", + "integrity": "sha512-DRibZL6DsNhIgYQ+wNdWDL2SL3bKPlVrRiBqV5yuMm++op8W4kGFtaQfCs4KEJn0wBZcHVHJ3eoywX8983k1ow==", + "dev": true + }, + "vm-browserify": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", + "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==", + "dev": true + }, + "w3c-hr-time": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", + "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", + "requires": { + "browser-process-hrtime": "^1.0.0" + } + }, + "w3c-xmlserializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz", + "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==", + "requires": { + "xml-name-validator": "^3.0.0" + } + }, + "wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=", + "dev": true, + "requires": { + "defaults": "^1.0.3" + } + }, + "webidl-conversions": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", + "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==" + }, + "whatwg-encoding": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", + "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", + "requires": { + "iconv-lite": "0.4.24" + } + }, + "whatwg-mimetype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", + "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==" + }, + "whatwg-url": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz", + "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==", + "requires": { + "lodash": "^4.7.0", + "tr46": "^2.1.0", + "webidl-conversions": "^6.1.0" + } + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "requires": { + "isexe": "^2.0.0" + } + }, + "which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, + "requires": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + } + }, + "which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=" + }, + "which-typed-array": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz", + "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==", + "dev": true, + "requires": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.2" + } + }, + "window-size": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.4.tgz", + "integrity": "sha1-+OGqHuWlPsW/FR/6CXQqatdpeHY=" + }, + "word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==" + }, + "wrap-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "requires": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + } + }, + "wrap-ansi-cjs": { + "version": "npm:wrap-ansi@7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "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==" + }, + "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", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "requires": { + "ansi-regex": "^5.0.1" + } + } + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "write-file-atomic": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-1.3.4.tgz", + "integrity": "sha1-+Aek8LHZ6ROuekgRLmzDrxmRtF8=", + "requires": { + "graceful-fs": "^4.1.11", + "imurmurhash": "^0.1.4", + "slide": "^1.1.5" + } + }, + "ws": { + "version": "7.5.10", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", + "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", + "requires": {} + }, + "xdg-basedir": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-2.0.0.tgz", + "integrity": "sha1-7byQPMOF/ARSPZZqM1UEtVBNG9I=", + "requires": { + "os-homedir": "^1.0.0" + } + }, + "xdg-trashdir": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/xdg-trashdir/-/xdg-trashdir-2.1.1.tgz", + "integrity": "sha512-KcVhPaOu2ZurYNHSRTf1+ZHORkTZGCQ+u0JHN17QixRISJq4pXOnjt/lQcehvtHL5QAKhSzKgyjrcNnPdkPBHA==", + "requires": { + "@sindresorhus/df": "^2.1.0", + "mount-point": "^3.0.0", + "pify": "^2.2.0", + "user-home": "^2.0.0", + "xdg-basedir": "^2.0.0" + }, + "dependencies": { + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" + } + } + }, + "xlsx": { + "version": "https://cdn.sheetjs.com/xlsx-0.20.2/xlsx-0.20.2.tgz", + "integrity": "sha512-+nKZ39+nvK7Qq6i0PvWWRA4j/EkfWOtkP/YhMtupm+lJIiHxUrgTr1CcKv1nBk1rHtkRRQ3O2+Ih/q/sA+FXZA==" + }, + "xml-name-validator": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", + "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==" + }, + "xmlchars": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==" + }, + "xtend": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.1.2.tgz", + "integrity": "sha1-bv7MKk2tjmlixJAbM3znuoe10os=", + "requires": { + "object-keys": "~0.4.0" + } + }, + "y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==" + }, + "yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=" + }, + "yaml": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.7.0.tgz", + "integrity": "sha512-+hSoy/QHluxmC9kCIJyL/uyFmLmc+e5CFR5Wa+bpIhIj85LVb9ZH2nVnqrHoSvKogwODv0ClqZkmiSSaIH5LTA==" + }, + "yargs": { + "version": "14.2.3", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-14.2.3.tgz", + "integrity": "sha512-ZbotRWhF+lkjijC/VhmOT9wSgyBQ7+zr13+YLkhfsSiTriYsMzkTUFP18pFhWwBeMa5gUc1MzbhrO6/VB7c9Xg==", + "requires": { + "cliui": "^5.0.0", + "decamelize": "^1.2.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^15.0.1" + }, + "dependencies": { + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "requires": { + "locate-path": "^3.0.0" + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "requires": { + "p-limit": "^2.0.0" + } + } + } + }, + "yargs-parser": { + "version": "15.0.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-15.0.3.tgz", + "integrity": "sha512-/MVEVjTXy/cGAjdtQf8dW3V9b97bPN7rNn8ETj6BmAQL7ibC7O1Q9SPJbGjgh3SlwoBNXMzj/ZGIj8mBgl12YA==", + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + }, + "yocto-queue": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.1.1.tgz", + "integrity": "sha512-b4JR1PFR10y1mKjhHY9LaGo6tmrgjit7hxVIeAmyMw3jegXR4dhYqLaQF5zMXZxY7tLpMyJeLjr1C4rLmkVe8g==" + }, + "zod": { + "version": "3.24.1", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.24.1.tgz", + "integrity": "sha512-muH7gBL9sI1nciMZV67X5fTKKBLtwpZ5VBp1vsOQzj1MhrBZ4wlVCm3gedKZWLp0Oyel8sIGfeiz54Su+OVT+A==" + } + } +} diff --git a/packages/osrl/package.json b/packages/osrl/package.json new file mode 100644 index 00000000..b143a8e6 --- /dev/null +++ b/packages/osrl/package.json @@ -0,0 +1,115 @@ +{ + "name": "@plastichub/osrl", + "description": "Liquid based markup language", + "version": "0.5.5", + "typings": "index.d.ts", + "publishConfig": { + "access": "public" + }, + "bin": { + "osrl": "main.js" + }, + "dependencies": { + "@google-cloud/local-auth": "^2.1.1", + "@iarna/toml": "^2.2.5", + "@plastichub/core": "^0.2.6", + "@plastichub/fs": "^0.13.39", + "@plastichub/osr-ai": "file:../osr-ai", + "@plastichub/osr-cache": "^0.3.9", + "@plastichub/osr-commons": "file:../osr-commons", + "@plastichub/osr-i18n": "file:../osr-i18n", + "@plastichub/osr-log": "file:../osr-log", + "@types/cacache": "^15.0.1", + "@types/download": "^8.0.1", + "@types/get-stdin": "^7.0.0", + "@types/html-minifier-terser": "^7.0.2", + "@types/is-glob": "^4.0.2", + "@types/js-beautify": "^1.13.2", + "@types/jsonpath": "^0.2.0", + "@types/minify": "^9.1.4", + "@types/moment": "^2.13.0", + "@types/node": "^20.14.2", + "@types/yargs": "^17.0.2", + "axios": "^0.21.1", + "bluebird": "^3.7.2", + "cacache": "^15.2.0", + "cheerio": "^1.0.0-rc.10", + "convert-units": "^2.3.4", + "env-var": "^7.3.0", + "errlop": "^4.5.0", + "exception-formatter": "^2.1.2", + "fast-glob": "^3.2.7", + "find-up": "4.0", + "front-matter": "^4.0.2", + "get-stdin": "^9.0.0", + "gitea-js": "^1.20.1", + "glob-base": "^0.3.0", + "googleapis": "^105.0.0", + "highlight.js": "^11.1.0", + "html-minifier-terser": "^7.2.0", + "is-glob": "^4.0.1", + "is-url": "^1.2.4", + "js-base64": "^3.7.2", + "js-beautify": "^1.14.0", + "jsdom": "^16.7.0", + "jsome": "^2.3.24", + "json-format-highlight": "^1.0.4", + "json-pretty-html": "^1.1.6", + "json-to-pretty-yaml": "^1.2.2", + "jsonpath": "^1.1.1", + "jsonpath-plus": "^10.0.0", + "keyv": "^4.5.4", + "keyv-file": "^0.3.1", + "lodash": "^4.17.21", + "markdown-table": "^3.0.3", + "minify": "^11.4.1", + "moment": "^2.30.1", + "node-xlsx": "^0.24.0", + "parse-glob": "^3.0.4", + "pretty": "^2.0.0", + "query-string": "^7.1.3", + "require-like": "^0.1.2", + "rotating-file-stream": "^3.2.3", + "sharp": "^0.33.4", + "showdown": "^2.1.0", + "turndown": "^7.2.0", + "typescript": "^4.9.4", + "uri-js": "^4.4.1", + "yaml": "^2.4.2", + "yargs": "^14.2.3", + "yargs-parser": "^15.0.3", + "zod": "^3.24.1" + }, + "scripts": { + "test": "tsc; mocha --full-trace mocha \"spec/**/*.spec.js\"", + "test-with-coverage": "istanbul cover node_modules/.bin/_mocha -- 'spec/**/*.spec.js'", + "lint": "tslint --project=./tsconfig.json", + "build": "tsc -p . --declaration", + "dev": "tsc -p . --declaration -w", + "dev-grunt": "cd tasks && tsc -p . --declaration -w", + "typings": "tsc --declaration", + "docs": "npx typedoc src/index.ts", + "dev-test-watch": "mocha-typescript-watch", + "init:google-sheets": "node ./main.js init google-sheets --sheet='1oVEiGH4o3SV-mAA3Mb-WNVJMyYl4VMxLjWjrSw_ipJY' --range='Parts!B4:B5'", + "build-lib": "parcel --no-source-maps build ./main.js --out-dir ./dist/main" + }, + "homepage": "https://git.osr-plastic.org/plastichub/lib-content", + "repository": { + "type": "git", + "url": "https://git.osr-plastic.org/plastichub/lib-content.git" + }, + "engines": { + "node": ">= 8.0.0" + }, + "license": "BSD-3-Clause", + "keywords": [ + "typescript" + ], + "pre-commit": [], + "optionalDependencies": { + "@img/sharp-win32-x64": "^0.33.4" + }, + "devDependencies": { + "parcel-bundler": "^1.12.5" + } +} diff --git a/packages/osrl/plugins/ask.d.ts b/packages/osrl/plugins/ask.d.ts new file mode 100644 index 00000000..d8192883 --- /dev/null +++ b/packages/osrl/plugins/ask.d.ts @@ -0,0 +1 @@ +export declare const register: (engine: any) => void; diff --git a/packages/osrl/plugins/ask.js b/packages/osrl/plugins/ask.js new file mode 100644 index 00000000..85568ea1 --- /dev/null +++ b/packages/osrl/plugins/ask.js @@ -0,0 +1,52 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.register = void 0; +const liquid_1 = require("../liquidjs/liquid"); +const inquirer = require("inquirer"); +const register = (engine) => { + engine.registerTag('ask', { + parse: function (token) { + const args = token.args; + const tokenizer = new liquid_1.Tokenizer(args, this.liquid.options.operatorsTrie); + this.name = tokenizer.readValue(); + const begin = tokenizer.p; + tokenizer.readIdentifier(); + tokenizer.p = begin; + this.hash = new liquid_1.Hash(tokenizer.remaining()); + }, + render: function* (ctx) { + const { name, liquid } = this; + let question = ctx.opts.dynamicPartials + ? (liquid_1.TypeGuards.isQuotedToken(name) + ? yield ((0, liquid_1.evalQuotedToken)(name)) + : yield (0, liquid_1.evalToken)(name, ctx)) + : name.getText(); + const type = this.hash.hash['type']; + let type_ = ctx.opts.dynamicPartials + ? (liquid_1.TypeGuards.isQuotedToken(type) + ? yield ((0, liquid_1.evalQuotedToken)(type)) + : yield (0, liquid_1.evalToken)(type, ctx)) + : type.getText(); + ; + let _ctx = liquid; + if (_ctx.ask) { + return _ctx.ask; + } + _ctx.ask = new Promise((resolve, reject) => { + inquirer.prompt([{ + type: type_, + name: 'question', + message: question + }]).then((answers) => { + console.log('-', answers); + resolve(answers); + _ctx.ask = null; + return answers['question']; + }); + }); + return _ctx.ask; + } + }); +}; +exports.register = register; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNrLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3BsdWdpbnMvYXNrLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUNBLCtDQUF3SDtBQUN4SCxxQ0FBb0M7QUFFN0IsTUFBTSxRQUFRLEdBQUcsQ0FBQyxNQUFNLEVBQUUsRUFBRTtJQUUvQixNQUFNLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRTtRQUN0QixLQUFLLEVBQUUsVUFBVSxLQUFlO1lBQzVCLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUE7WUFDdkIsTUFBTSxTQUFTLEdBQUcsSUFBSSxrQkFBUyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQTtZQUN4RSxJQUFJLENBQUMsSUFBSSxHQUFHLFNBQVMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNsQyxNQUFNLEtBQUssR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDO1lBQzFCLFNBQVMsQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUMzQixTQUFTLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztZQUNwQixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksYUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDO1FBQ2hELENBQUM7UUFDRCxNQUFNLEVBQUUsUUFBUSxDQUFDLEVBQUUsR0FBWTtZQUMzQixNQUFNLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQztZQUU5QixJQUFJLFFBQVEsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLGVBQWU7Z0JBQ25DLENBQUMsQ0FBQyxDQUFDLG1CQUFVLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQztvQkFDN0IsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFBLHdCQUFlLEVBQUMsSUFBSSxDQUFDLENBQUM7b0JBQy9CLENBQUMsQ0FBQyxNQUFNLElBQUEsa0JBQVMsRUFBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7Z0JBQ2pDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFHckIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDcEMsSUFBSSxLQUFLLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxlQUFlO2dCQUNoQyxDQUFDLENBQUMsQ0FBQyxtQkFBVSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUM7b0JBQzdCLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBQSx3QkFBZSxFQUFDLElBQUksQ0FBQyxDQUFDO29CQUMvQixDQUFDLENBQUMsTUFBTSxJQUFBLGtCQUFTLEVBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO2dCQUNqQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ3JCLENBQUM7WUFFRCxJQUFJLElBQUksR0FBUSxNQUFNLENBQUM7WUFFdkIsSUFBSSxJQUFJLENBQUMsR0FBRyxFQUFFO2dCQUNWLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQzthQUNuQjtZQUVELElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7Z0JBQ3ZDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQzt3QkFDYixJQUFJLEVBQUUsS0FBSzt3QkFDWCxJQUFJLEVBQUUsVUFBVTt3QkFDaEIsT0FBTyxFQUFFLFFBQVE7cUJBQ3BCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO29CQUNqQixPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQztvQkFDMUIsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO29CQUNqQixJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQztvQkFDaEIsT0FBTyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUM7Z0JBQy9CLENBQUMsQ0FBQyxDQUFDO1lBQ1AsQ0FBQyxDQUFDLENBQUE7WUFDRixPQUFPLElBQUksQ0FBQyxHQUFHLENBQUM7UUFDcEIsQ0FBQztLQUNKLENBQUMsQ0FBQTtBQUNOLENBQUMsQ0FBQTtBQW5EWSxRQUFBLFFBQVEsWUFtRHBCIn0= \ No newline at end of file diff --git a/packages/osrl/plugins/csv.d.ts b/packages/osrl/plugins/csv.d.ts new file mode 100644 index 00000000..a7afd036 --- /dev/null +++ b/packages/osrl/plugins/csv.d.ts @@ -0,0 +1,9 @@ +/** + * Converts CSV to Markdown Table + * + * @param {string} csvContent - The string content of the CSV + * @param {string} delimiter - The character(s) to use as the CSV column delimiter + * @param {boolean} hasHeader - Whether to use the first row of Data as headers + * @returns {string} + */ +export declare function csvToMarkdown(csvContent: string, delimiter?: string, hasHeader?: boolean): string; diff --git a/packages/osrl/plugins/csv.js b/packages/osrl/plugins/csv.js new file mode 100644 index 00000000..27cc70bd --- /dev/null +++ b/packages/osrl/plugins/csv.js @@ -0,0 +1,70 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.csvToMarkdown = void 0; +/** + * Converts CSV to Markdown Table + * + * @param {string} csvContent - The string content of the CSV + * @param {string} delimiter - The character(s) to use as the CSV column delimiter + * @param {boolean} hasHeader - Whether to use the first row of Data as headers + * @returns {string} + */ +function csvToMarkdown(csvContent, delimiter = ",", hasHeader = true) { + if (delimiter != "\t") { + csvContent = csvContent.replace(/\t/g, " "); + } + const columns = csvContent.split(/\r?\n/); + const tabularData = []; + const maxRowLen = []; + columns.forEach((e, i) => { + if (typeof tabularData[i] == "undefined") { + tabularData[i] = []; + } + const regex = new RegExp(delimiter + '(?![^"]*"\\B)'); + const row = e.split(regex); + row.forEach((ee, ii) => { + if (typeof maxRowLen[ii] == "undefined") { + maxRowLen[ii] = 0; + } + // escape pipes and backslashes + ee = ee.replace(/(\||\\)/g, "\\$1"); + maxRowLen[ii] = Math.max(maxRowLen[ii], ee.length); + tabularData[i][ii] = ee; + }); + }); + let headerOutput = ""; + let seperatorOutput = ""; + maxRowLen.forEach((len) => { + const sizer = Array(len + 1 + 2); + seperatorOutput += "|" + sizer.join("-"); + headerOutput += "|" + sizer.join(" "); + }); + headerOutput += "| \n"; + seperatorOutput += "| \n"; + if (hasHeader) { + headerOutput = ""; + } + let rowOutput = ""; + tabularData.forEach((col, i) => { + maxRowLen.forEach((len, y) => { + const row = typeof col[y] == "undefined" ? "" : col[y]; + const spacing = Array((len - row.length) + 1).join(" "); + const out = `| ${row}${spacing} `; + if (hasHeader && i === 0) { + headerOutput += out; + } + else { + rowOutput += out; + } + }); + if (hasHeader && i === 0) { + headerOutput += "| \n"; + } + else { + rowOutput += "| \n"; + } + }); + return `\n\n ${headerOutput}${seperatorOutput}${rowOutput} \n\n`; +} +exports.csvToMarkdown = csvToMarkdown; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3N2LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3BsdWdpbnMvY3N2LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBOzs7Ozs7O0dBT0c7QUFDRixTQUFnQixhQUFhLENBQUMsVUFBa0IsRUFBRSxZQUFvQixHQUFHLEVBQUUsWUFBcUIsSUFBSTtJQUNqRyxJQUFJLFNBQVMsSUFBSSxJQUFJLEVBQUU7UUFDbkIsVUFBVSxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0tBQ2xEO0lBRUQsTUFBTSxPQUFPLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUUxQyxNQUFNLFdBQVcsR0FBZSxFQUFFLENBQUM7SUFDbkMsTUFBTSxTQUFTLEdBQWEsRUFBRSxDQUFDO0lBRS9CLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDckIsSUFBSSxPQUFPLFdBQVcsQ0FBQyxDQUFDLENBQUMsSUFBSSxXQUFXLEVBQUU7WUFDdEMsV0FBVyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztTQUN2QjtRQUNELE1BQU0sS0FBSyxHQUFHLElBQUksTUFBTSxDQUFDLFNBQVMsR0FBRyxlQUFlLENBQUMsQ0FBQztRQUN0RCxNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzNCLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUU7WUFDbkIsSUFBSSxPQUFPLFNBQVMsQ0FBQyxFQUFFLENBQUMsSUFBSSxXQUFXLEVBQUU7Z0JBQ3JDLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7YUFDckI7WUFFRCwrQkFBK0I7WUFDL0IsRUFBRSxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBRXBDLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDbkQsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUM1QixDQUFDLENBQUMsQ0FBQztJQUNQLENBQUMsQ0FBQyxDQUFDO0lBRUgsSUFBSSxZQUFZLEdBQUcsRUFBRSxDQUFDO0lBQ3RCLElBQUksZUFBZSxHQUFHLEVBQUUsQ0FBQztJQUV6QixTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7UUFDdEIsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFFakMsZUFBZSxJQUFJLEdBQUcsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3pDLFlBQVksSUFBSSxHQUFHLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUMxQyxDQUFDLENBQUMsQ0FBQztJQUVILFlBQVksSUFBSSxNQUFNLENBQUM7SUFDdkIsZUFBZSxJQUFJLE1BQU0sQ0FBQztJQUUxQixJQUFJLFNBQVMsRUFBRTtRQUNYLFlBQVksR0FBRyxFQUFFLENBQUM7S0FDckI7SUFFRCxJQUFJLFNBQVMsR0FBRyxFQUFFLENBQUM7SUFDbkIsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUMzQixTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ3pCLE1BQU0sR0FBRyxHQUFHLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLFdBQVcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdkQsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDeEQsTUFBTSxHQUFHLEdBQUcsS0FBSyxHQUFHLEdBQUcsT0FBTyxHQUFHLENBQUM7WUFDbEMsSUFBSSxTQUFTLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRTtnQkFDdEIsWUFBWSxJQUFJLEdBQUcsQ0FBQzthQUN2QjtpQkFBTTtnQkFDSCxTQUFTLElBQUksR0FBRyxDQUFDO2FBQ3BCO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLFNBQVMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ3RCLFlBQVksSUFBSSxNQUFNLENBQUM7U0FDMUI7YUFBTTtZQUNILFNBQVMsSUFBSSxNQUFNLENBQUM7U0FDdkI7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILE9BQU8sUUFBUSxZQUFZLEdBQUcsZUFBZSxHQUFHLFNBQVMsT0FBTyxDQUFDO0FBQ3JFLENBQUM7QUFuRUEsc0NBbUVBIn0= \ No newline at end of file diff --git a/packages/osrl/plugins/ds.d.ts b/packages/osrl/plugins/ds.d.ts new file mode 100644 index 00000000..fb3133d6 --- /dev/null +++ b/packages/osrl/plugins/ds.d.ts @@ -0,0 +1,2 @@ +export declare function testDS(engine: any): Promise; +export declare const register: (engine: any) => void; diff --git a/packages/osrl/plugins/ds.js b/packages/osrl/plugins/ds.js new file mode 100644 index 00000000..df74d697 --- /dev/null +++ b/packages/osrl/plugins/ds.js @@ -0,0 +1,125 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.register = exports.testDS = void 0; +const liquid_1 = require("../liquidjs/liquid"); +const sheets_1 = require("../lib/net/sheets"); +const jsonpath = require("jsonpath"); +const cacache_1 = require("cacache"); +const index_1 = require("../index"); +const constants_1 = require("../constants"); +const exists_1 = require("@plastichub/fs/exists"); +const dir_1 = require("@plastichub/fs/dir"); +const osr_commons_1 = require("@plastichub/osr-commons"); +const fs_path = require("path"); +const cache_path = (_namespace) => `${fs_path.resolve(fs_path.join((0, osr_commons_1.OSR_CACHE)(), _namespace))}`; +function testDS(engine) { + return __awaiter(this, void 0, void 0, function* () { + // let ret = await read('1oVEiGH4o3SV-mAA3Mb-WNVJMyYl4VMxLjWjrSw_ipJY', 'ElenaMargin'); + // console.log('sheet result : ', ret); + }); +} +exports.testDS = testDS; +const register = (engine) => { + engine.registerTag('googlesheet', { + parse: function (token, other) { + const args = token.args; + const tokenizer = new liquid_1.Tokenizer(args, this.liquid.options.operatorsTrie); + this.name = tokenizer.readValue(); + const begin = tokenizer.p; + tokenizer.readIdentifier(); + tokenizer.p = begin; + this.hash = new liquid_1.Hash(tokenizer.remaining()); + }, + render: function* (ctx, emitter) { + const { liquid, hash, name } = this; + let name_ = ctx.opts.dynamicPartials + ? (liquid_1.TypeGuards.isQuotedToken(name) + ? yield ((0, liquid_1.evalQuotedToken)(name)) + : yield (0, liquid_1.evalToken)(name, ctx)) + : name.getText(); + const id = this.hash.hash['id']; + let id_ = ctx.opts.dynamicPartials + ? (liquid_1.TypeGuards.isQuotedToken(id) + ? yield ((0, liquid_1.evalQuotedToken)(id)) + : yield (0, liquid_1.evalToken)(id, ctx)) + : id.getText(); + const range = this.hash.hash['range']; + let range_ = ctx.opts.dynamicPartials + ? (liquid_1.TypeGuards.isQuotedToken(range) + ? yield ((0, liquid_1.evalQuotedToken)(range)) + : yield (0, liquid_1.evalToken)(range, ctx)) + : range.getText(); + const path = this.hash.hash['path']; + let path_; + if (path) { + path_ = ctx.opts.dynamicPartials + ? (liquid_1.TypeGuards.isQuotedToken(path) + ? yield ((0, liquid_1.evalQuotedToken)(path)) + : yield (0, liquid_1.evalToken)(path, ctx)) + : path.getText(); + } + const cache = this.hash.hash['cache']; + let cache_ = true; + if (cache) { + cache_ = ctx.opts.dynamicPartials + ? (liquid_1.TypeGuards.isQuotedToken(path) + ? yield ((0, liquid_1.evalQuotedToken)(path)) + : yield (0, liquid_1.evalToken)(path, ctx)) + : cache.getText(); + } + const assign = this.hash.hash['assign']; + let assign_; + if (assign) { + assign_ = ctx.opts.dynamicPartials + ? (liquid_1.TypeGuards.isQuotedToken(assign) + ? yield ((0, liquid_1.evalQuotedToken)(assign)) + : yield (0, liquid_1.evalToken)(path, ctx)) + : assign_.getText(); + } + const cache_dir = fs_path.resolve(`${cache_path(constants_1.MODULE_NAME)}`); + if (!(0, exists_1.sync)(cache_dir)) { + (0, dir_1.sync)(cache_dir); + } + const c_integrity = `${id_}_${range_}`; + const cached = yield cacache_1.get.info(cache_dir, c_integrity); + let data = []; + if (cached && cache_) { + data = JSON.parse((yield (0, cacache_1.get)(cache_dir, c_integrity)).data.toString()); + } + else { + data = yield (0, sheets_1.read)(id_, range_); + } + let ret = []; + if (path) { + try { + ret = jsonpath.query(data, path_); + if (assign_) { + ctx.bottom()[assign_] = ret[0]; + liquid.owner.variables[assign_] = ret[0]; + ret = ''; + } + ret = ret[0]; + } + catch (e) { + index_1.logger.error('error jsonpath', e); + } + } + ret = data[0]; + if (cache_ && !cached) { + yield (0, cacache_1.put)(cache_dir, c_integrity, JSON.stringify(data, null, 2)); + } + return ret; + } + }); +}; +exports.register = register; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvcGx1Z2lucy9kcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFBQSwrQ0FBdUk7QUFDdkksOENBQXlDO0FBQ3pDLHFDQUFvQztBQUVwQyxxQ0FBNkQ7QUFFN0Qsb0NBQWlDO0FBQ2pDLDRDQUEwQztBQUUxQyxrREFBc0Q7QUFDdEQsNENBQWtEO0FBRWxELHlEQUFtRDtBQUVuRCxnQ0FBK0I7QUFFL0IsTUFBTSxVQUFVLEdBQUcsQ0FBQyxVQUFrQixFQUFFLEVBQUUsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFBLHVCQUFTLEdBQUUsRUFBRSxVQUFVLENBQUMsQ0FBQyxFQUFFLENBQUE7QUFHdEcsU0FBc0IsTUFBTSxDQUFDLE1BQU07O1FBQy9CLHVGQUF1RjtRQUN2Rix1Q0FBdUM7SUFDM0MsQ0FBQztDQUFBO0FBSEQsd0JBR0M7QUFHTSxNQUFNLFFBQVEsR0FBRyxDQUFDLE1BQU0sRUFBRSxFQUFFO0lBRS9CLE1BQU0sQ0FBQyxXQUFXLENBQUMsYUFBYSxFQUFFO1FBRTlCLEtBQUssRUFBRSxVQUFVLEtBQWUsRUFBRSxLQUFLO1lBQ25DLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUE7WUFDdkIsTUFBTSxTQUFTLEdBQUcsSUFBSSxrQkFBUyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQTtZQUN4RSxJQUFJLENBQUMsSUFBSSxHQUFHLFNBQVMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNsQyxNQUFNLEtBQUssR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDO1lBQzFCLFNBQVMsQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUMzQixTQUFTLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztZQUNwQixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksYUFB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 \ No newline at end of file diff --git a/packages/osrl/plugins/get.d.ts b/packages/osrl/plugins/get.d.ts new file mode 100644 index 00000000..d8192883 --- /dev/null +++ b/packages/osrl/plugins/get.d.ts @@ -0,0 +1 @@ +export declare const register: (engine: any) => void; diff --git a/packages/osrl/plugins/get.js b/packages/osrl/plugins/get.js new file mode 100644 index 00000000..36bd28b3 --- /dev/null +++ b/packages/osrl/plugins/get.js @@ -0,0 +1,109 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.register = void 0; +const axios_1 = require("axios"); +const jsonpath_plus_1 = require("jsonpath-plus"); +const primitives_1 = require("@plastichub/core/primitives"); +const index_1 = require("../index"); +const liquid_1 = require("../liquidjs/liquid"); +const _1 = require("./"); +const render_1 = require("../liquidjs/builtin/tags/render"); +const filters_1 = require("../filters"); +const register = (engine) => { + engine.registerTag('get', { + parseFilePath: render_1.parseFilePath, + renderFilePath: render_1.renderFilePath, + parse: function (token) { + const args = token.args; + const tokenizer = new liquid_1.Tokenizer(args, this.liquid.options.operatorsTrie); + this['file'] = this.parseFilePath(tokenizer, this.liquid); + this['currentFile'] = token.file; + const begin = tokenizer.p; + const withStr = tokenizer.readIdentifier(); + if (withStr.content === 'with') { + tokenizer.skipBlank(); + if (tokenizer.peek() !== ':') { + this.withVar = tokenizer.readValue(); + } + else + tokenizer.p = begin; + } + else + tokenizer.p = begin; + this.hash = new liquid_1.Hash(tokenizer.remaining(), this.liquid.options.jekyllInclude); + }, + render: function* (ctx, emitter) { + const enabled = yield* (0, _1.arg)(this.hash.hash, 'enabled', ctx, true); + if (!enabled) + return; + const { liquid, hash, withVar } = this; + const { renderer } = liquid; + let url = yield this.renderFilePath(this['file'], ctx, liquid); + if ((0, primitives_1.isString)(url)) { + url = liquid.owner.options.resolve(url); + } + (0, liquid_1.assert)(url, () => `illegal url "${url}"`); + (0, liquid_1.assert)((0, filters_1.isValidUrl)(url), () => `illegal url "${url}"`); + let data = null; + const raw = yield axios_1.default.get(url); + if (!raw) { + index_1.logger.error(`Error fetching data from ${url}`); + return; + } + if (raw && raw.data) { + data = raw.data; + } + const jsonpath = yield* (0, _1.arg)(this.hash.hash, 'path', ctx); + if (jsonpath && ((0, primitives_1.isObject)(data) || (0, primitives_1.isArray)(data))) { + try { + data = (0, jsonpath_plus_1.JSONPath)({ + path: jsonpath, + json: data, + }); + data = (0, filters_1.cleanArray)(data); + //@todo : jsonpath spec + if ((0, primitives_1.isArray)(data) && data.length === 1) { + data = data[0]; + } + } + catch (error) { + index_1.logger.error('Error querying index', error, error.stack); + } + } + const assign = yield* (0, _1.arg)(this.hash.hash, 'assign', ctx); + const before = yield* (0, _1.arg)(this.hash.hash, 'before', ctx); + const after = yield* (0, _1.arg)(this.hash.hash, 'after', ctx); + /* + @todo : remote content + ctx.setRegister('blocks', {}) + ctx.setRegister('blockMode', BlockMode.OUTPUT) + + const scope = yield hash.render(ctx) + if (withVar) scope[url] = evalToken(withVar, ctx) + + const templates = yield liquid._parsePartialFile(url, ctx.sync, this['currentFile']) + ctx.push(ctx.opts.jekyllInclude ? { include: scope } : scope) + let output = '' + const collector: Emitter = { + buffer: emitter.buffer, + write: function (html) { + this.buffer += html + output += html + } + } + yield renderer.renderTemplates(templates, ctx, collector) + ctx.pop() + ctx.restoreRegister(saved) + liquid.owner.stats.includes.push({ file: url, parent: this.currentFile }) + */ + data = yield (0, filters_1.applyFilters)(data, after || '', (0, filters_1.Filters)(liquid.owner.options)); + if (assign) { + ctx.bottom()[assign] = data; + return; + } + return data; + } + }); +}; +exports.register = register; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3BsdWdpbnMvZ2V0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLGlDQUF5QjtBQUN6QixpREFBd0M7QUFDeEMsNERBQXlFO0FBRXpFLG9DQUFpQztBQUVqQywrQ0FBd0Y7QUFDeEYseUJBQXdCO0FBQ3hCLDREQUErRTtBQUMvRSx3Q0FBMEU7QUFHbkUsTUFBTSxRQUFRLEdBQUcsQ0FBQyxNQUFNLEVBQUUsRUFBRTtJQUNqQyxNQUFNLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRTtRQUN4QixhQUFhLEVBQWIsc0JBQWE7UUFDYixjQUFjLEVBQWQsdUJBQWM7UUFDZCxLQUFLLEVBQUUsVUFBVSxLQUFlO1lBQzlCLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUE7WUFDdkIsTUFBTSxTQUFTLEdBQUcsSUFBSSxrQkFBUyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQTtZQUN4RSxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFBO1lBQ3pELElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFBO1lBQ2hDLE1BQU0sS0FBSyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUE7WUFDekIsTUFBTSxPQUFPLEdBQUcsU0FBUyxDQUFDLGNBQWMsRUFBRSxDQUFBO1lBQzFDLElBQUksT0FBTyxDQUFDLE9BQU8sS0FBSyxNQUFNLEVBQUU7Z0JBQzlCLFNBQVMsQ0FBQyxTQUFTLEVBQUUsQ0FBQTtnQkFDckIsSUFBSSxTQUFTLENBQUMsSUFBSSxFQUFFLEtBQUssR0FBRyxFQUFFO29CQUM1QixJQUFJLENBQUMsT0FBTyxHQUFHLFNBQVMsQ0FBQyxTQUFTLEVBQUUsQ0FBQTtpQkFDckM7O29CQUFNLFNB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 \ No newline at end of file diff --git a/packages/osrl/plugins/html.d.ts b/packages/osrl/plugins/html.d.ts new file mode 100644 index 00000000..d4dc9db1 --- /dev/null +++ b/packages/osrl/plugins/html.d.ts @@ -0,0 +1,4 @@ +import { Engine } from '../index'; +import { IOptions } from '../types'; +export declare const html: (expr: string, options: IOptions, engine: Engine) => Promise; +export declare const pretty: (expr: string, options: IOptions, engine: Engine) => Promise; diff --git a/packages/osrl/plugins/html.js b/packages/osrl/plugins/html.js new file mode 100644 index 00000000..9dfad269 --- /dev/null +++ b/packages/osrl/plugins/html.js @@ -0,0 +1,46 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.pretty = exports.html = void 0; +const index_1 = require("../index"); +const showdown_1 = require("showdown"); +const prettyConv = require('pretty'); +const convert = (input) => { + let converter = new showdown_1.Converter({ + tables: true, + parseImgDimensions: true, + simplifiedAutoLink: true, + tasklists: true + }); + converter.setOption('literalMidWordUnderscores', 'true'); + return converter.makeHtml(input); +}; +const html = (expr, options, engine) => __awaiter(void 0, void 0, void 0, function* () { + try { + return convert(expr); + } + catch (e) { + index_1.logger.error(e); + } + return expr; +}); +exports.html = html; +const pretty = (expr, options, engine) => __awaiter(void 0, void 0, void 0, function* () { + try { + return prettyConv(expr, { ocd: true }); + } + catch (e) { + index_1.logger.error(e); + } + return expr; +}); +exports.pretty = pretty; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHRtbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9wbHVnaW5zL2h0bWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBQUEsb0NBQXlDO0FBRXpDLHVDQUFvQztBQUNwQyxNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUE7QUFFcEMsTUFBTSxPQUFPLEdBQUcsQ0FBQyxLQUFhLEVBQUUsRUFBRTtJQUNqQyxJQUFJLFNBQVMsR0FBRyxJQUFJLG9CQUFTLENBQUM7UUFDdkIsTUFBTSxFQUFFLElBQUk7UUFDWixrQkFBa0IsRUFBRSxJQUFJO1FBQ3hCLGtCQUFrQixFQUFFLElBQUk7UUFDeEIsU0FBUyxFQUFDLElBQUk7S0FDakIsQ0FBQyxDQUFDO0lBQ0gsU0FBUyxDQUFDLFNBQVMsQ0FBQywyQkFBMkIsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUN6RCxPQUFPLFNBQVMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDckMsQ0FBQyxDQUFBO0FBRU0sTUFBTSxJQUFJLEdBQUcsQ0FDbkIsSUFBWSxFQUNaLE9BQWlCLEVBQ2pCLE1BQWMsRUFDYixFQUFFO0lBQ0gsSUFBSTtRQUNILE9BQU8sT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFBO0tBQ3BCO0lBQUMsT0FBTyxDQUFDLEVBQUU7UUFDWCxjQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFBO0tBQ2Y7SUFDRCxPQUFPLElBQUksQ0FBQTtBQUNaLENBQUMsQ0FBQSxDQUFBO0FBWFksUUFBQSxJQUFJLFFBV2hCO0FBRU0sTUFBTSxNQUFNLEdBQUcsQ0FDckIsSUFBWSxFQUNaLE9BQWlCLEVBQ2pCLE1BQWMsRUFDYixFQUFFO0lBQ0gsSUFBSTtRQUNILE9BQU8sVUFBVSxDQUFDLElBQUksRUFBRSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFBO0tBQ3RDO0lBQUMsT0FBTyxDQUFDLEVBQUU7UUFDWCxjQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFBO0tBQ2Y7SUFDRCxPQUFPLElBQUksQ0FBQTtBQUNaLENBQUMsQ0FBQSxDQUFBO0FBWFksUUFBQSxNQUFNLFVBV2xCIn0= \ No newline at end of file diff --git a/packages/osrl/plugins/i18n.d.ts b/packages/osrl/plugins/i18n.d.ts new file mode 100644 index 00000000..3a74c9ed --- /dev/null +++ b/packages/osrl/plugins/i18n.d.ts @@ -0,0 +1,6 @@ +import { Engine } from '../index'; +import { Liquid, Template } from '../liquidjs/liquid'; +import { IOptions } from '../types'; +export declare const onError: (status: number, text: string, engine: Engine, sourceLanguage: string, targetLanguage: string, store: string) => Promise; +export declare const i18n: (expr: string, options: IOptions, engine: Engine, parsed: Template[], _ctx: any, args?: any, templateFile?: string) => Promise; +export declare const register: (engine: Liquid) => void; diff --git a/packages/osrl/plugins/i18n.js b/packages/osrl/plugins/i18n.js new file mode 100644 index 00000000..8a31dbd5 --- /dev/null +++ b/packages/osrl/plugins/i18n.js @@ -0,0 +1,162 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.register = exports.i18n = exports.onError = void 0; +const path = require("path"); +const index_1 = require("../index"); +const i18n_1 = require("../lib/i18n"); +const translate_1 = require("@plastichub/osr-i18n/lib/translate"); +const osr_commons_1 = require("@plastichub/osr-commons"); +const liquid_1 = require("../liquidjs/liquid"); +const osr_commons_2 = require("@plastichub/osr-commons"); +const openai_1 = require("@plastichub/osr-ai/lib/openai"); +const openAI = false; +const translateOpenAI = (text, srcLang, dstLang, store, engine) => __awaiter(void 0, void 0, void 0, function* () { + const query = `translate from ${srcLang} to ${dstLang}: ${text}`; + const config = (0, osr_commons_2.CONFIG_DEFAULT)(); + const _store = path.resolve((0, osr_commons_1.resolve)(engine.variables['i18n'], false, engine.variables)); + const cached = (0, translate_1.storeGet)(_store, text); + if (cached) { + return cached; + } + const options = { + query, + api_key: process.env.OPENAI_API_KEY || config.openai.key, + filters: '', + logLevel: engine.options.logLevel || 'debug', + gui: false, + variables: Object.assign({}, engine.variables), + }; + let ret = yield (0, openai_1.prompt)(options); + if (ret) { + ret = (0, openai_1.applyFilters)(ret, options.filters || []); + (0, translate_1.storeSet)(_store, text, ret); + } + return ret; +}); +const onError = (status, text, engine, sourceLanguage, targetLanguage, store) => __awaiter(void 0, void 0, void 0, function* () { + if (!openAI) { + return text; + } + if (status !== 403) { + return text; + } + return yield translateOpenAI(text, sourceLanguage, targetLanguage, store, engine); + return text; +}); +exports.onError = onError; +const i18n = (expr, options, engine, parsed = [], _ctx, args = {}, templateFile = "") => __awaiter(void 0, void 0, void 0, function* () { + if (!engine.variables['i18n']) { + index_1.logger.warn(`i18n : i18n is not defined in the variables`); + return expr; + } + const store = path.resolve((0, osr_commons_1.resolve)(engine.variables['i18n'], false, engine.variables)); + if (!store) { + index_1.logger.error(`i18n : i18n store not found`); + return expr; + } + const srcLang = engine.variables['sourceLanguage']; + const dstLang = engine.variables['targetLanguage']; + if (!srcLang || !dstLang || (srcLang === dstLang)) { + return expr; + } + let translation; + try { + if (expr === 'Injectors') { + //debugger + } + translation = yield (0, translate_1.translateText)(expr, srcLang, dstLang, { store }); + } + catch (e) { + index_1.logger.error(`Error translating text ${e.message} @ ${templateFile} : ${expr}`); + } + return translation || expr; +}); +exports.i18n = i18n; +const register = (engine) => { + engine.registerTag('i18n', { + parse(tagToken, remainTokens) { + this.tpls = []; + const args = tagToken.args; + let closed = false; + this['currentFile'] = tagToken.file; + const tokenizer = new liquid_1.Tokenizer(args, this.liquid.options.operatorsTrie); + const begin = tokenizer.p; + while (remainTokens.length) { + let token = remainTokens.shift(); + if (token.name === 'i18n-end') { + closed = true; + break; + } + let tpl = this.liquid.parser.parseToken(token, remainTokens); + this.tpls.push(tpl); + } + if (!closed) + throw new Error(`tag ${tagToken.getText()} not closed`); + tokenizer.p = begin; + this.hash = new liquid_1.Hash(tokenizer.remaining()); + }, + *render(context, emitter) { + let { liquid } = this; + let translation; + let output = ''; + const emitter2 = { + buffer: emitter.buffer, + write: function (html) { + this.buffer += html; + output += html; + } + }; + yield liquid.renderer.renderTemplates(this.tpls, context, emitter2); + let text = output; + const owner = this.liquid.owner; + const variables = owner.variables; + if (!owner.variables['i18n']) { + index_1.logger.warn(`i18n tag used in ${this['currentFile']} but i18n is not defined in the variables`); + return text; + } + if (text && + text.length && + (0, i18n_1.clean)(text).length && + variables['i18n'] && + variables['sourceLanguage'] && + variables['targetLanguage']) { + const store = path.resolve((0, osr_commons_1.resolve)(owner.variables['i18n'], false, variables)); + const srcLang = variables['sourceLanguage']; + const dstLang = variables['targetLanguage']; + try { + translation = yield (0, translate_1.translateText)(text, srcLang, dstLang, { + store + }); + } + catch (e) { + index_1.logger.error(`Error translating \n\t${text} \n in ${this['currentFile']}: ${e.message} : ${e.response.data.message}`); + /* + translation = yield onError(e.response.status, text, owner, srcLang, dstLang, store) + if (translation) { + // storeSet(text, translation, srcLang, dstLang, store) + logger.info(`Translated via OpenAI`) + //debugger + return translation + } + */ + } + } + else { + index_1.logger.warn(`Invalid parameters for i18n tag in ${this['currentFile']}`); + } + //yield liquid.renderer.renderTemplates(this.tpls, context, emitter) + return translation || text; + } + }); +}; +exports.register = register; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaTE4bi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9wbHVnaW5zL2kxOG4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBQUEsNkJBQTRCO0FBQzVCLG9DQUF5QztBQUN6QyxzQ0FBbUM7QUFFbkMsa0VBQXNGO0FBQ3RGLHlEQUFpRDtBQUVqRCwrQ0FBNkQ7QUFDN0QseURBQXdEO0FBRXhELDBEQUE0RTtBQUU1RSxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUE7QUFFcEIsTUFBTSxlQUFlLEdBQUcsQ0FBTyxJQUFZLEVBQUUsT0FBZSxFQUFFLE9BQWUsRUFBRSxLQUFhLEVBQUUsTUFBYyxFQUFFLEVBQUU7SUFFL0csTUFBTSxLQUFLLEdBQUcsa0JBQWtCLE9BQU8sT0FBTyxPQUFPLEtBQUssSUFBSSxFQUFFLENBQUE7SUFDaEUsTUFBTSxNQUFNLEdBQUcsSUFBQSw0QkFBYyxHQUFTLENBQUE7SUFDdEMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFBLHFCQUFPLEVBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUE7SUFDdkYsTUFBTSxNQUFNLEdBQUcsSUFBQSxvQkFBUSxFQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQTtJQUNyQyxJQUFJLE1BQU0sRUFBRTtRQUNYLE9BQU8sTUFBTSxDQUFBO0tBQ2I7SUFFRCxNQUFNLE9BQU8sR0FBUTtRQUNwQixLQUFLO1FBQ0wsT0FBTyxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsY0FBYyxJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRztRQUN4RCxPQUFPLEVBQUUsRUFBRTtRQUNYLFFBQVEsRUFBRSxNQUFNLENBQUMsT0FBTyxDQUFDLFFBQVEsSUFBSSxPQUFPO1FBQzVDLEdBQUcsRUFBRSxLQUFLO1FBQ1YsU0FBUyxvQkFBTyxNQUFNLENBQUMsU0FB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 \ No newline at end of file diff --git a/packages/osrl/plugins/include.d.ts b/packages/osrl/plugins/include.d.ts new file mode 100644 index 00000000..5b112c50 --- /dev/null +++ b/packages/osrl/plugins/include.d.ts @@ -0,0 +1,9 @@ +import { Emitter, TagToken, Context, Liquid } from '../liquidjs'; +import { Parser } from '../../liquidjs/parser'; +import { Tag, TopLevelToken } from '../../liquidjs'; +export default class RInclude extends Tag { + private withVar?; + private hash; + constructor(token: TagToken, remainTokens: TopLevelToken[], liquid: Liquid, parser: Parser); + render(ctx: Context, emitter: Emitter): Generator; +} diff --git a/packages/osrl/plugins/include.js b/packages/osrl/plugins/include.js new file mode 100644 index 00000000..45101df7 --- /dev/null +++ b/packages/osrl/plugins/include.js @@ -0,0 +1,46 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const liquidjs_1 = require("../liquidjs"); +const context_1 = require("../../liquidjs/context"); +const render_1 = require("../../liquidjs/tags/render"); +const liquidjs_2 = require("../../liquidjs"); +class RInclude extends liquidjs_2.Tag { + constructor(token, remainTokens, liquid, parser) { + super(token, remainTokens, liquid); + const { tokenizer } = token; + this['file'] = (0, render_1.parseFilePath)(tokenizer, this.liquid, parser); + this['currentFile'] = token.file; + const begin = tokenizer.p; + const withStr = tokenizer.readIdentifier(); + if (withStr.content === 'with') { + tokenizer.skipBlank(); + if (tokenizer.peek() !== ':') { + this.withVar = tokenizer.readValue(); + } + else + tokenizer.p = begin; + } + else + tokenizer.p = begin; + this.hash = new liquidjs_1.Hash(tokenizer.remaining(), this.liquid.options.jekyllInclude); + } + *render(ctx, emitter) { + const { liquid, hash, withVar } = this; + const { renderer } = liquid; + const filepath = (yield (0, render_1.renderFilePath)(this['file'], ctx, liquid)); + (0, liquidjs_1.assert)(filepath, () => `illegal file path "${filepath}"`); + const saved = ctx.saveRegister('blocks', 'blockMode'); + ctx.setRegister('blocks', {}); + ctx.setRegister('blockMode', context_1.BlockMode.OUTPUT); + const scope = (yield hash.render(ctx)); + if (withVar) + scope[filepath] = yield (0, liquidjs_1.evalToken)(withVar, ctx); + const templates = (yield liquid._parsePartialFile(filepath, ctx.sync, this['currentFile'])); + ctx.push(ctx.opts.jekyllInclude ? { include: scope } : scope); + yield renderer.renderTemplates(templates, ctx, emitter); + ctx.pop(); + ctx.restoreRegister(saved); + } +} +exports.default = RInclude; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5jbHVkZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9wbHVnaW5zL2luY2x1ZGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSwwQ0FBa0o7QUFDbEosb0RBQXlEO0FBRXpELHVEQUEwRTtBQUMxRSw2Q0FBK0Q7QUFFL0QsTUFBcUIsUUFBUyxTQUFRLGNBQUc7SUFHdkMsWUFBYSxLQUFlLEVBQUUsWUFBNkIsRUFBRSxNQUFjLEVBQUUsTUFBYztRQUN6RixLQUFLLENBQUMsS0FBSyxFQUFFLFlBQVksRUFBRSxNQUFNLENBQUMsQ0FBQTtRQUNsQyxNQUFNLEVBQUUsU0FBUyxFQUFFLEdBQUcsS0FBSyxDQUFBO1FBQzNCLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxJQUFBLHNCQUFhLEVBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUE7UUFDNUQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUE7UUFFaEMsTUFBTSxLQUFLLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQTtRQUN6QixNQUFNLE9BQU8sR0FBRyxTQUFTLENBQUMsY0FBYyxFQUFFLENBQUE7UUFDMUMsSUFBSSxPQUFPLENBQUMsT0FBTyxLQUFLLE1BQU0sRUFBRSxDQUFDO1lBQy9CLFNBQVMsQ0FBQyxTQUFTLEVBQUUsQ0FBQTtZQUNyQixJQUFJLFNBQVMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxHQUFHLEVBQUUsQ0FBQztnQkFDN0IsSUFBSSxDQUFDLE9BQU8sR0FBRyxTQUFTLENBQUMsU0FBUyxFQUFFLENBQUE7WUFDdEMsQ0FBQzs7Z0JBQU0sU0FBUyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUE7UUFDNUIsQ0FBQzs7WUFBTSxTQUFTLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQTtRQUUxQixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksZUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLEVBQUUsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQTtJQUNoRixDQUFDO0lBQ0QsQ0FBRSxNQUFNLENBQUUsR0FBWSxFQUFFLE9BQWdCO1FBQ3RDLE1BQU0sRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxHQUFHLElBQUksQ0FBQTtRQUN0QyxNQUFNLEVBQUUsUUFBUSxFQUFFLEdBQUcsTUFBTSxDQUFBO1FBQzNCLE1BQU0sUUFBUSxHQUFHLENBQUMsTUFBTSxJQUFBLHVCQUFjLEVBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEdBQUcsRUFBRSxNQUFNLENBQUMsQ0FBVyxDQUFBO1FBQzVFLElBQUEsaUJBQU0sRUFBQyxRQUFRLEVBQUUsR0FBRyxFQUFFLENBQUMsc0JBQXNCLFFBQVEsR0FBRyxDQUFDLENBQUE7UUFFekQsTUFBTSxLQUFLLEdBQUcsR0FBRyxDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUUsV0FBVyxDQUFDLENBQUE7UUFDckQsR0FBRyxDQUFDLFdBQVcsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLENBQUE7UUFDN0IsR0FBRyxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUUsbUJBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQTtRQUM5QyxNQUFNLEtBQUssR0FBRyxDQUFDLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBVSxDQUFBO1FBQy9DLElBQUksT0FBTztZQUFFLEtBQUssQ0FBQyxRQUFRLENBQUMsR0FBRyxNQUFNLElBQUEsb0JBQVMsRUFBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUE7UUFDNUQsTUFBTSxTQUFTLEdBQUcsQ0FBQyxNQUFNLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBZSxDQUFBO1FBQ3pHLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQTtRQUM3RCxNQUFNLFFBQVEsQ0FBQyxlQUFlLENBQUMsU0FBUyxFQUFFLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQTtRQUN2RCxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUE7UUFDVCxHQUFHLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFBO0lBQzVCLENBQUM7Q0FDRjtBQXJDRCwyQkFxQ0MifQ== \ No newline at end of file diff --git a/packages/osrl/plugins/index.d.ts b/packages/osrl/plugins/index.d.ts new file mode 100644 index 00000000..27975d1b --- /dev/null +++ b/packages/osrl/plugins/index.d.ts @@ -0,0 +1,2 @@ +export * from './csv'; +export declare const arg: (hash: any, key: any, context: any, defaultValue?: any) => Generator; diff --git a/packages/osrl/plugins/index.js b/packages/osrl/plugins/index.js new file mode 100644 index 00000000..bd09d594 --- /dev/null +++ b/packages/osrl/plugins/index.js @@ -0,0 +1,32 @@ +"use strict"; +var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { enumerable: true, get: function() { return m[k]; } }; + } + Object.defineProperty(o, k2, desc); +}) : (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +})); +var __exportStar = (this && this.__exportStar) || function(m, exports) { + for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.arg = void 0; +const liquid_1 = require("../liquidjs/liquid"); +__exportStar(require("./csv"), exports); +const arg = function* (hash, key, context, defaultValue = null) { + const value = hash[key]; + if (value == undefined) + return defaultValue; + const ret = context.opts.dynamicPartials + ? (liquid_1.TypeGuards.isQuotedToken(value) + ? yield (0, liquid_1.evalQuotedToken)(value) + : yield (0, liquid_1.evalToken)(value, context)) + : value.getText(); + return ret != undefined ? ret : defaultValue; +}; +exports.arg = arg; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvcGx1Z2lucy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLCtDQUEyRTtBQUMzRSx3Q0FBcUI7QUFDZCxNQUFNLEdBQUcsR0FBRyxRQUFRLENBQUMsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxZQUFZLEdBQUcsSUFBSTtJQUNqRSxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUE7SUFDdkIsSUFBSSxLQUFLLElBQUksU0FBUztRQUFFLE9BQU8sWUFBWSxDQUFBO0lBQzNDLE1BQU0sR0FBRyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsZUFBZTtRQUNwQyxDQUFDLENBQUMsQ0FBQyxtQkFBVSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUM7WUFDOUIsQ0FBQyxDQUFDLE1BQU0sSUFBQSx3QkFBZSxFQUFDLEtBQUssQ0FBQztZQUM5QixDQUFDLENBQUMsTUFBTSxJQUFBLGtCQUFTLEVBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ3RDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUE7SUFFckIsT0FBTyxHQUFHLElBQUksU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQTtBQUNoRCxDQUFDLENBQUE7QUFWWSxRQUFBLEdBQUcsT0FVZiJ9 \ No newline at end of file diff --git a/packages/osrl/plugins/js.d.ts b/packages/osrl/plugins/js.d.ts new file mode 100644 index 00000000..bcbdfbe4 --- /dev/null +++ b/packages/osrl/plugins/js.d.ts @@ -0,0 +1,6 @@ +import { Liquid, Template } from '../liquidjs/liquid'; +import { IOptions } from "../types"; +export declare const runJS: (path: string, options: IOptions, engine: any, parsed: Template[]) => any; +export declare const runJSExpressionEx: (expr: string, options: IOptions, engine: Liquid, parsed: Template[], _ctx: any, args?: any, templateFile?: string) => any; +export declare const register: (engine: any) => void; +export declare const runJSExpression: (expr: string, options: IOptions, engine: any, parsed?: Template[]) => any; diff --git a/packages/osrl/plugins/js.js b/packages/osrl/plugins/js.js new file mode 100644 index 00000000..708315ca --- /dev/null +++ b/packages/osrl/plugins/js.js @@ -0,0 +1,210 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.runJSExpression = exports.register = exports.runJSExpressionEx = exports.runJS = void 0; +const path = require("path"); +const fs_1 = require("fs"); +const exists_1 = require("@plastichub/fs/exists"); +const write_1 = require("@plastichub/fs/write"); +const primitives_1 = require("@plastichub/core/primitives"); +const strings_1 = require("@plastichub/core/strings"); +const parser_1 = require("../liquid/parser"); +const eval_1 = require("../vm/eval"); +const fs_2 = require("../lib/fs"); +const crypto_1 = require("crypto"); +const bootstrap_1 = require("../conf/bootstrap"); +const StringUtils_1 = require("../lib/StringUtils"); +const index_1 = require("../index"); +const exceptionFormatter = require('exception-formatter'); +var fm = require('front-matter'); +const query_string_1 = require("query-string"); +const toModule = (expr) => { + let _header = 'module.exports = function () {'; + return `${_header}\n ${expr.trim()};\n}`; +}; +const resolve = (filePath, hints, variables) => { + let resolved; + filePath = (0, strings_1.substitute)(filePath, variables); + hints.find((f) => { + let testPath = path.join(f, filePath); + if ((0, exists_1.sync)(testPath)) { + const stat = (0, fs_1.statSync)(testPath); + if (stat.isFile()) { + resolved = testPath; + } + } + }); + return resolved; +}; +const toScript = (path) => { + try { + const script = require(path); + if (script && script.default) { + return script.default; + } + if (script && typeof script === 'function') { + return script; + } + } + catch (e) { + index_1.logger.error(e); + } +}; +const runJS = (path, options, engine, parsed) => { + let scope = Object.assign({}, engine.variables); + const script = resolve(path, options.profile.includes, engine.variables); + const pageVariables = (0, parser_1.toVariables)(parsed); + pageVariables.forEach((t) => scope[t.key] = t.value); + let ret; + if (script) { + const fn = toScript(script); + if (fn) { + ret = fn.apply(engine, [scope]); + } + else { + console.warn('invalid script ' + script); + } + } + return ret; +}; +exports.runJS = runJS; +const createScope = (engine, parsed, ctx, options, templateFile = "") => { + let scope = Object.assign({}, engine.variables); + const pageVariables = (0, parser_1.toVariables)(parsed); + pageVariables.forEach((t) => scope[t.key] = t.value); + // mixin liquid variables + (ctx.scopes || []).forEach(_scope => { + scope = Object.assign(Object.assign({}, _scope), scope); + }); + const ret = Object.assign(Object.assign(Object.assign({}, bootstrap_1.context), scope), { scope: scope, substitute: (string, variables = {}) => (0, strings_1.substitute)(string, Object.assign(Object.assign({}, scope), variables)), lookup: (fileName) => { + const hints = [ + ...options.profile.includes, + path.parse(templateFile).dir + ]; + return resolve(fileName, [...new Set(hints)], engine.variables); + }, engine: engine, forward_slash: fs_2.forward_slash, read: (file) => (0, fs_2.read)((0, strings_1.substitute)(file, scope)) || {}, write: (file, data) => (0, write_1.sync)((0, strings_1.substitute)(file, scope), data), readJSON: (file) => (0, fs_2.read)((0, strings_1.substitute)(file, scope), 'json') || {}, writeJSON: (file, data) => (0, write_1.sync)((0, strings_1.substitute)(file, scope), data), readFile: (file) => (0, fs_2.read)((0, strings_1.substitute)(file, scope)) || {}, store: engine.global, addGlobal: (what) => { + engine.global = Object.assign(Object.assign({}, engine.global), what); + }, register: (key, value) => { + ctx.bottom()[key] = value; + } }); + ret.logger = index_1.logger; + return ret; +}; +const loadPlugins = (engine, options) => { + let ret = {}; + if (options.plugins) { + options.plugins.forEach((d) => { + const jsFiles = (0, fs_2.files)(d, '*.js'); + jsFiles.map((f) => { + try { + const plugin = require(f); + ret = Object.assign(Object.assign({}, ret), plugin); + } + catch (e) { + index_1.logger.error(`Couldnt load plugin from ${f} : \n ${e.message}`, e); + } + }); + }); + } + return ret; +}; +const runJSExpressionEx = (expr, options, engine, parsed = [], _ctx, args = {}, templateFile = "") => { + let expression = "" + expr; + let ret; + try { + let ctx = createScope(engine, parsed, _ctx, options, templateFile); + let _fm = { fm: {} }; + if (fm.test(options.string)) { + _fm = { + fm: fm(options.string).attributes + }; + } + engine['context'] = ctx; + let plugins = loadPlugins(engine, options); + let scopeArgs = Object.assign(Object.assign(Object.assign({}, engine['context']), plugins), _fm.fm); + for (let k in args) { + if ((0, primitives_1.isString)(args[k])) { + args[k] = (0, strings_1.substitute)(args[k], scopeArgs); + } + } + ret = (0, eval_1.evaluate)(toModule(expr), templateFile + '.js', Object.assign(Object.assign({}, scopeArgs), args), true)(args); + return ret; + } + catch (e) { + index_1.logger.error(`Error running expression ${expression} :: ${templateFile}.js @ ${options.source || options.string} : ${e.message}`); + return exceptionFormatter(e, { + format: 'html' + }); + } + return ret; +}; +exports.runJSExpressionEx = runJSExpressionEx; +const register = (engine) => { + engine.registerTag('js', { + parse: function (token, remainTokens) { + this.tokens = []; + const stream = this.liquid.parser.parseStream(remainTokens); + this['currentFile'] = token.file; + const argsStr = (0, StringUtils_1.replaceAll)(" ", "&", token.args || ""); + this.args = (0, query_string_1.parse)(argsStr, { parseNumbers: true, parseBooleans: true }) || {}; + stream + .on('token', (token) => { + if (token['name'] === 'endjs') { + stream.stop(); + } + else { + this.tokens.push(token); + } + }) + .on('end', () => { + throw new Error(`tag ${token.raw} not closed`); + }); + stream.start(); + }, + render: function (ctx) { + return __awaiter(this, void 0, void 0, function* () { + const file = this['currentFile']; + const text = this.tokens.map((token) => token.getText()).join('').replace('', ''); + const { liquid } = this; + const _hash = (0, crypto_1.createHash)('md5').update(text).digest('base64'); + if (_hash in liquid.owner.expressionCache) { + // return liquid.owner.expressionCache[_hash]; + } + const content = (0, exports.runJSExpressionEx)(text, liquid.owner.engine.options, liquid.owner, [], ctx, this.args, file); + liquid.owner.expressionCache[_hash] = content; + return content; + }); + } + }); +}; +exports.register = register; +const runJSExpression = (expr, options, engine, parsed = []) => { + let expression = "" + expr; + expr = 'return ' + expr.trim(); + let ret; + try { + try { + let ctx = createScope(engine, parsed, null, options, ""); + ret = (0, eval_1.evaluate)(toModule(expr), 'js expression', ctx, true); + return ret(); + } + catch (e) { + index_1.logger.error(`Error running expression ${expression} :: ${e.message}`); + return 'Invalid Expression: ' + `"${expression}"`; + } + } + catch (e) { + index_1.logger.error(`Error running expression ${expr}`, e); + } + return ret; +}; +exports.runJSExpression = runJSExpression; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoianMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvcGx1Z2lucy9qcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFFQSw2QkFBNEI7QUFDNUIsMkJBQTZCO0FBQzdCLGtEQUFzRDtBQUN0RCxnREFBb0Q7QUFDcEQsNERBQXNEO0FBQ3RELHNEQUFxRDtBQUNyRCw2Q0FBOEM7QUFDOUMscUNBQXFDO0FBQ3JDLGtDQUFzRDtBQUN0RCxtQ0FBbUM7QUFDbkMsaURBQTJDO0FBQzNDLG9EQUErQztBQUMvQyxvQ0FBaUM7QUFFakMsTUFBTSxrQkFBa0IsR0FBRyxPQUFPLENBQUMscUJBQXFCLENBQUMsQ0FBQTtBQUN6RCxJQUFJLEVBQUUsR0FBRyxPQUFPLENBQUMsY0FBYyxDQUFDLENBQUE7QUFDaEMsK0NBQW9DO0FBRXBDLE1BQU0sUUFBUSxHQUFHLENBQUMsSUFBSSxFQUFFLEVBQUU7SUFDdEIsSUFBSSxPQUFPLEdBQUcsZ0NBQWdDLENBQUE7SUFDOUMsT0FBTyxHQUFHLE9BQU8sTUFBTSxJQUFJLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQztBQUM3QyxDQUFDLENBQUE7QUFDRCxNQUFNLE9BQU8sR0FBRyxDQUFDLFFBQWdCLEVBQUUsS0FBZSxFQUFFLFNBQWMsRUFBRSxFQUFFO0lBQ2xFLElBQUksUUFBUSxDQUFBO0lBQ1osUUFBUSxHQUFHLElBQUEsb0JBQVUsRUFBQyxRQUFRLEVBQUUsU0FBUyxDQUFDLENBQUE7SUFDMUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO1FBQ2IsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUE7UUFDckMsSUFBSSxJQUFBLGFBQU0sRUFBQyxRQUFRLENBQUMsRUFBRTtZQUNsQixNQUFNLElBQUksR0FBRyxJQUFBLGFBQVEsRUFBQyxRQUFRLENBQUMsQ0FBQTtZQUMvQixJQUFJLElBQUksQ0FBQyxN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 \ No newline at end of file diff --git a/packages/osrl/plugins/minclude.d.ts b/packages/osrl/plugins/minclude.d.ts new file mode 100644 index 00000000..d8192883 --- /dev/null +++ b/packages/osrl/plugins/minclude.d.ts @@ -0,0 +1 @@ +export declare const register: (engine: any) => void; diff --git a/packages/osrl/plugins/minclude.js b/packages/osrl/plugins/minclude.js new file mode 100644 index 00000000..f73a4951 --- /dev/null +++ b/packages/osrl/plugins/minclude.js @@ -0,0 +1,80 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.register = void 0; +const path = require("path"); +const liquid_1 = require("../liquidjs/liquid"); +const _1 = require("./"); +const render_1 = require("../liquidjs/builtin/tags/render"); +const block_mode_1 = require("../liquidjs/context/block-mode"); +const filters_1 = require("../filters"); +const underscore_1 = require("../liquid/underscore"); +const osr_commons_1 = require("@plastichub/osr-commons"); +const register = (engine) => { + engine.registerTag('include', { + parseFilePath: render_1.parseFilePath, + renderFilePath: render_1.renderFilePath, + parse: function (token) { + const args = token.args; + const tokenizer = new liquid_1.Tokenizer(args, this.liquid.options.operatorsTrie); + this['file'] = this.parseFilePath(tokenizer, this.liquid); + this['currentFile'] = token.file; + const begin = tokenizer.p; + const withStr = tokenizer.readIdentifier(); + if (withStr.content === 'with') { + tokenizer.skipBlank(); + if (tokenizer.peek() !== ':') { + this.withVar = tokenizer.readValue(); + } + else + tokenizer.p = begin; + } + else + tokenizer.p = begin; + this.hash = new liquid_1.Hash(tokenizer.remaining(), this.liquid.options.jekyllInclude); + }, + render: function* (ctx, emitter) { + const enabled = yield* (0, _1.arg)(this.hash.hash, 'enabled', ctx, true); + if (!enabled) + return; + const { liquid, hash, withVar } = this; + const { renderer } = liquid; + let filepath = yield this.renderFilePath(this['file'], ctx, liquid); + if ((0, underscore_1.isString)(filepath)) { + filepath = liquid.owner.options.resolve(filepath); + } + (0, liquid_1.assert)(filepath, () => `illegal filename "${filepath}"`); + const assign = yield* (0, _1.arg)(this.hash.hash, 'assign', ctx); + //const before = yield* arg(this.hash.hash, 'before', ctx) + const after = yield* (0, _1.arg)(this.hash.hash, 'after', ctx); + const saved = ctx.saveRegister('blocks', 'blockMode'); + ctx.setRegister('blocks', {}); + ctx.setRegister('blockMode', block_mode_1.default.OUTPUT); + const scope = yield hash.render(ctx); + if (withVar) + scope[filepath] = (0, liquid_1.evalToken)(withVar, ctx); + const templates = yield liquid._parsePartialFile(filepath, ctx.sync, this['currentFile']); + ctx.push(ctx.opts.jekyllInclude ? { include: scope } : scope); + let output = ''; + const emitter2 = { + buffer: emitter.buffer, + write: function (html) { + this.buffer += html; + output += html; + } + }; + yield renderer.renderTemplates(templates, ctx, emitter2); + ctx.pop(); + ctx.restoreRegister(saved); + const rel = path.relative(liquid.owner.options.cwd, this.currentFile).replace('.tmp', ''); + liquid.owner.stats.imports.push({ file: filepath, parent: (0, osr_commons_1.forward_slash)(rel) }); + output = yield (0, filters_1.applyFilters)(output, after || '', (0, filters_1.Filters)(liquid.owner.options)); + if (assign) { + ctx.bottom()[assign] = output; + return; + } + return output; + } + }); +}; +exports.register = register; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWluY2x1ZGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvcGx1Z2lucy9taW5jbHVkZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw2QkFBNEI7QUFDNUIsK0NBQW1HO0FBQ25HLHlCQUF3QjtBQUN4Qiw0REFBK0U7QUFDL0UsK0RBQXNEO0FBQ3RELHdDQUFrRDtBQUNsRCxxREFBK0M7QUFDL0MseURBQXVEO0FBRWhELE1BQU0sUUFBUSxHQUFHLENBQUMsTUFBTSxFQUFFLEVBQUU7SUFDakMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxTQUFTLEVBQUU7UUFDNUIsYUFBYSxFQUFiLHNCQUFhO1FBQ2IsY0FBYyxFQUFkLHVCQUFjO1FBQ2QsS0FBSyxFQUFFLFVBQVUsS0FBZTtZQUM5QixNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFBO1lBQ3ZCLE1BQU0sU0FBUyxHQUFHLElBQUksa0JBQVMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLENBQUE7WUFDeEUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQTtZQUN6RCxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQTtZQUNoQyxNQUFNLEtBQUssR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFBO1lBQ3pCLE1BQU0sT0FBTyxHQUFHLFNBQVMsQ0FBQyxjQUFjLEVBQUUsQ0FBQTtZQUMxQyxJQUFJLE9BQU8sQ0FBQyxPQUFPLEtBQUssTUFBTSxFQUFFO2dCQUM5QixTQUFTLENBQUMsU0FBUyxFQUFFLENBQUE7Z0JBQ3JCLElBQUksU0FBUyxDQUFDLElBQUksRUFBRSxLQUFLLEdBQUcsRUFBRTtvQkFDNUIsSUFBSSxDQUFDLE9BQU8sR0FBRyxTQUFTLENBQUMsU0FBUyxFQUFFLENBQUE7aUJBQ3JD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 \ No newline at end of file diff --git a/packages/osrl/plugins/osr-ai.d.ts b/packages/osrl/plugins/osr-ai.d.ts new file mode 100644 index 00000000..2a3be992 --- /dev/null +++ b/packages/osrl/plugins/osr-ai.d.ts @@ -0,0 +1,7 @@ +import { Engine } from '../index'; +import { Liquid, Template } from '../liquidjs/liquid'; +import { IOptions } from '@plastichub/osr-ai/lib/openai'; +export declare const openAI: (expr: string, options: IOptions, engine: Engine, parsed: Template[], _ctx: any, args?: any, templateFile?: string) => Promise; +export declare const removeFields: (obj: Record, fields: string[]) => Record; +export declare const register: (engine: Liquid) => void; +export declare const registerFilter: (engine: Liquid) => void; diff --git a/packages/osrl/plugins/osr-ai.js b/packages/osrl/plugins/osr-ai.js new file mode 100644 index 00000000..ade7a6ce --- /dev/null +++ b/packages/osrl/plugins/osr-ai.js @@ -0,0 +1,204 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.registerFilter = exports.register = exports.removeFields = exports.openAI = void 0; +const path = require("path"); +const osr_commons_1 = require("@plastichub/osr-commons"); +const read_1 = require("@plastichub/fs/read"); +const write_1 = require("@plastichub/fs/write"); +const exists_1 = require("@plastichub/fs/exists"); +const index_1 = require("../index"); +const _1 = require("./"); +const liquid_1 = require("../liquidjs/liquid"); +const openai_1 = require("@plastichub/osr-ai/lib/openai"); +const openAI = (expr, options, engine, parsed = [], _ctx, args = {}, templateFile = "") => __awaiter(void 0, void 0, void 0, function* () { + return expr; +}); +exports.openAI = openAI; +const aiArgs = ['assign', 'dst', 'source', 'model', 'cache', 'filters', 'logLevel', 'system', 'gui']; +const removeFields = (obj, fields) => { + const newObj = Object.assign({}, obj); + fields.forEach(field => delete newObj[field]); + return newObj; +}; +exports.removeFields = removeFields; +const register = (engine) => { + engine.registerTag('osr-ai', { + parse(tagToken, remainTokens) { + this.tpls = []; + const args = tagToken.args; + let closed = false; + this['currentFile'] = tagToken.file; + const tokenizer = new liquid_1.Tokenizer(args, this.liquid.options.operatorsTrie); + const begin = tokenizer.p; + while (remainTokens.length) { + let token = remainTokens.shift(); + if (token.name === 'osr-ai-end') { + closed = true; + break; + } + let tpl = this.liquid.parser.parseToken(token, remainTokens); + this.tpls.push(tpl); + } + if (!closed) + throw new Error(`tag ${tagToken.getText()} not closed`); + tokenizer.p = begin; + this.hash = new liquid_1.Hash(tokenizer.remaining()); + }, + *render(context, emitter) { + let { liquid } = this; + let query = this.tpls.map((token) => token.str).join('').trim(); + const config = (0, osr_commons_1.CONFIG_DEFAULT)(); + let output = ''; + const collector = { + buffer: emitter.buffer, + write: function (html) { + this.buffer += html; + output += html; + } + }; + const hash = this.hash.hash; + let vars = Object.fromEntries(yield Promise.all(Object.keys(hash).map((key) => __awaiter(this, void 0, void 0, function* () { return [key, yield* (0, _1.arg)(hash, key, context)]; })))); + Object.keys(vars).forEach(key => { + context.bottom()[key] = vars[key]; + }); + query = yield liquid.renderer.renderTemplates(this.tpls, context, collector); + const owner = this.liquid.owner; + const resolve = owner.options.resolve; + const assign = yield* (0, _1.arg)(hash, 'assign', context); + let dst = yield* (0, _1.arg)(hash, 'dst', context); + let source = yield* (0, _1.arg)(hash, 'source', context); + if (dst) { + dst = path.resolve(resolve(dst)); + } + if (source) { + source = path.resolve(resolve(source)); + } + const options = { + model: yield* (0, _1.arg)(hash, 'model', context), + cache: yield* (0, _1.arg)(hash, 'cache', context), + query: output, + api_key: process.env.OPENAI_API_KEY || config.openai.key, + filters: yield* (0, _1.arg)(hash, 'filters', context), + logLevel: yield* (0, _1.arg)(hash, 'logLevel', context), + gui: yield* (0, _1.arg)(hash, 'gui', context), + dst: dst, + source: source, + variables: Object.assign(Object.assign({}, owner.variables), (0, exports.removeFields)(vars, aiArgs)), + system: yield* (0, _1.arg)(hash, 'system', context) + }; + if (options.cache && dst && (0, exists_1.sync)(options.dst)) { + index_1.logger.debug('Output file already exists, skipping: ', options.dst); + return (0, read_1.sync)(options.dst); + } + let ret = yield (0, openai_1.prompt)(options); + const result = (0, openai_1.applyFilters)(ret, options.filters || []); + index_1.logger.debug(`osr-ai: render prompt ${query} : \`t\n${result}\``); + if (options.dst) { + (0, write_1.sync)(options.dst, result); + } + if (assign) { + context.bottom()[assign] = result; + liquid['owner'].variables[assign] = result; + return; + } + return result; + } + }); +}; +exports.register = register; +// custom ai filters +const registerFilter = (engine) => { + engine.registerTag('osr-ai-filter', { + parse(tagToken, remainTokens) { + this.tpls = []; + const args = tagToken.args; + let closed = false; + this['currentFile'] = tagToken.file; + const tokenizer = new liquid_1.Tokenizer(args, this.liquid.options.operatorsTrie); + const begin = tokenizer.p; + while (remainTokens.length) { + let token = remainTokens.shift(); + if (token.name === 'osr-ai-filter-end') { + closed = true; + break; + } + let tpl = this.liquid.parser.parseToken(token, remainTokens); + this.tpls.push(tpl); + } + if (!closed) + throw new Error(`tag ${tagToken.getText()} not closed`); + tokenizer.p = begin; + this.hash = new liquid_1.Hash(tokenizer.remaining()); + }, + *render(context, emitter) { + let { liquid } = this; + let query = this.tpls.map((token) => token.str).join('').trim(); + const config = (0, osr_commons_1.CONFIG_DEFAULT)(); + let output = ''; + const collector = { + buffer: emitter.buffer, + write: function (html) { + this.buffer += html; + output += html; + } + }; + const hash = this.hash.hash; + let vars = Object.fromEntries(yield Promise.all(Object.keys(hash).map((key) => __awaiter(this, void 0, void 0, function* () { return [key, yield* (0, _1.arg)(hash, key, context)]; })))); + Object.keys(vars).forEach(key => { + context.bottom()[key] = vars[key]; + }); + query = yield liquid.renderer.renderTemplates(this.tpls, context, collector); + const owner = this.liquid.owner; + const resolve = owner.options.resolve; + const assign = yield* (0, _1.arg)(hash, 'assign', context); + let dst = yield* (0, _1.arg)(hash, 'dst', context); + let source = yield* (0, _1.arg)(hash, 'source', context); + if (dst) { + dst = path.resolve(resolve(dst)); + } + if (source) { + source = path.resolve(resolve(source)); + } + const options = { + model: yield* (0, _1.arg)(hash, 'model', context), + cache: yield* (0, _1.arg)(hash, 'cache', context), + query: output, + api_key: process.env.OPENAI_API_KEY || config.openai.key, + filters: yield* (0, _1.arg)(hash, 'filters', context), + logLevel: yield* (0, _1.arg)(hash, 'logLevel', context), + gui: yield* (0, _1.arg)(hash, 'gui', context), + dst: dst, + source: source, + variables: Object.assign(Object.assign({}, owner.variables), (0, exports.removeFields)(vars, aiArgs)), + system: yield* (0, _1.arg)(hash, 'system', context) + }; + if (options.cache && dst && (0, exists_1.sync)(options.dst)) { + index_1.logger.debug('Output file already exists, skipping: ', options.dst); + return (0, read_1.sync)(options.dst); + } + let ret = yield (0, openai_1.prompt)(options); + const result = (0, openai_1.applyFilters)(ret, options.filters || []); + index_1.logger.debug(`osr-ai: render prompt ${query} : \`t\n${result}\``); + if (options.dst) { + (0, write_1.sync)(options.dst, result); + } + if (assign) { + context.bottom()[assign] = result; + liquid['owner'].variables[assign] = result; + return; + } + return result; + } + }); +}; +exports.registerFilter = registerFilter; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3NyLWFpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3BsdWdpbnMvb3NyLWFpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQUFBLDZCQUE0QjtBQUU1Qix5REFBd0Q7QUFDeEQsOENBQWtEO0FBQ2xELGdEQUFvRDtBQUNwRCxrREFBc0Q7QUFFdEQsb0NBQXlDO0FBQ3pDLHlCQUF3QjtBQUN4QiwrQ0FBK0U7QUFDL0UsMERBQWtHO0FBRTNGLE1BQU0sTUFBTSxHQUFHLENBQ3JCLElBQVksRUFDWixPQUFpQixFQUNqQixNQUFjLEVBQ2QsU0FBcUIsRUFBRSxFQUN2QixJQUFJLEVBQ0osT0FBWSxFQUFFLEVBQ2QsZUFBdUIsRUFBRSxFQUN4QixFQUFFO0lBQ0gsT0FBTyxJQUFJLENBQUE7QUFDWixDQUFDLENBQUEsQ0FBQTtBQVZZLFFBQUEsTUFBTSxVQVVsQjtBQUVELE1BQU0sTUFBTSxHQUFHLENBQUMsUUFBUSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQTtBQUU3RixNQUFNLFlBQVksR0FBRyxDQUFDLEdBQXdCLEVBQUUsTUFBZ0IsRUFBdUIsRUFBRTtJQUMvRixNQUFNLE1BQU0scUJBQVEsR0FBRyxDQUFFLENBQUE7SUFDekIsTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLE9BQU8sTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUE7SUFDN0MsT0FBTyxNQUFNLENBQUE7QUFDZCxDQUFDLENBQUE7QUFKWSxRQUFBLFlBQVksZ0JBSXhCO0FBRU0sTUFBTSxRQUFRLEdBQUcsQ0FBQyxNQUFjLEVBQUUsRUFBRTtJQUMxQyxNQUFNLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRTtRQUM1QixLQUFLLENBQUMsUUFBUSxFQUFFLFlBQVk7WUFDM0IsSUFBSSxDQUFDLElBQUks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 \ No newline at end of file diff --git a/packages/osrl/plugins/print.d.ts b/packages/osrl/plugins/print.d.ts new file mode 100644 index 00000000..5e4d55b8 --- /dev/null +++ b/packages/osrl/plugins/print.d.ts @@ -0,0 +1,2 @@ +import { Liquid } from '../liquidjs/liquid'; +export declare const register: (engine: Liquid) => void; diff --git a/packages/osrl/plugins/print.js b/packages/osrl/plugins/print.js new file mode 100644 index 00000000..c4380951 --- /dev/null +++ b/packages/osrl/plugins/print.js @@ -0,0 +1,38 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.register = void 0; +const register = (engine) => { + engine.registerTag('print', { + parse(tagToken, remainTokens) { + this.tpls = []; + this.tokens = []; + let closed = false; + this['currentFile'] = tagToken.file; + while (remainTokens.length) { + let token = remainTokens.shift(); + if (token.name === 'print-end') { + closed = true; + break; + } + let tpl = this.liquid.parser.parseToken(token, remainTokens); + this.tpls.push(tpl); + this.tokens.push(token); + } + if (!closed) + throw new Error(`tag ${tagToken.getText()} not closed`); + }, + *render(context, emitter) { + let { liquid } = this; + const text = this.tpls.map((token) => { + return token.str; + }).join(''); + const token = this.tokens[0] ? this.tokens[0] : null; + const t = token.getContent(); + if (token) { + emitter.write(`\n${token.getText()}`); + } + } + }); +}; +exports.register = register; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJpbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvcGx1Z2lucy9wcmludC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFLTyxNQUFNLFFBQVEsR0FBRyxDQUFDLE1BQWMsRUFBRSxFQUFFO0lBQ3ZDLE1BQU0sQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFO1FBQ3hCLEtBQUssQ0FBQyxRQUFRLEVBQUUsWUFBWTtZQUN4QixJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQTtZQUNkLElBQUksQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFBO1lBQ2hCLElBQUksTUFBTSxHQUFHLEtBQUssQ0FBQTtZQUNsQixJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQTtZQUNuQyxPQUFPLFlBQVksQ0FBQyxNQUFNLEVBQUU7Z0JBQ3hCLElBQUksS0FBSyxHQUFRLFlBQVksQ0FBQyxLQUFLLEVBQUUsQ0FBQTtnQkFDckMsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLFdBQVcsRUFBRTtvQkFDNUIsTUFBTSxHQUFHLElBQUksQ0FBQTtvQkFDYixNQUFLO2lCQUNSO2dCQUNELElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsWUFBWSxDQUFDLENBQUE7Z0JBQzVELElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFBO2dCQUNuQixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQTthQUMxQjtZQUNELElBQUksQ0FBQyxNQUFNO2dCQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsT0FBTyxRQUFRLENBQUMsT0FBTyxFQUFFLGFBQWEsQ0FBQyxDQUFBO1FBQ3hFLENBQUM7UUFDRCxDQUFFLE1BQU0sQ0FBQyxPQUFPLEVBQUUsT0FBTztZQUNyQixJQUFJLEVBQUUsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFBO1lBQ3JCLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7Z0JBQ2pDLE9BQU8sS0FBSyxDQUFDLEdBQUcsQ0FBQTtZQUNwQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUE7WUFDWCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUE7WUFDcEQsTUFBTSxDQUFDLEdBQUcsS0FBSyxDQUFDLFVBQVUsRUFBRSxDQUFBO1lBQzVCLElBQUcsS0FBSyxFQUFFO2dCQUNOLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxLQUFLLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFBO2FBQ3hDO1FBQ0wsQ0FBQztLQUNKLENBQUMsQ0FBQTtBQUNOLENBQUMsQ0FBQTtBQS9CWSxRQUFBLFFBQVEsWUErQnBCIn0= \ No newline at end of file diff --git a/packages/osrl/plugins/rinclude.d.ts b/packages/osrl/plugins/rinclude.d.ts new file mode 100644 index 00000000..f7ecac01 --- /dev/null +++ b/packages/osrl/plugins/rinclude.d.ts @@ -0,0 +1,10 @@ +import { Emitter, TagToken, Context, Liquid, TopLevelToken } from '../liquidjs/liquid'; +import Parser from '../liquidjs/parser/parser'; +import { Tag } from '../../liquidjs/template/tag/tag'; +export declare class RInclude extends Tag { + private withVar?; + private hash; + constructor(token: TagToken, remainTokens: TopLevelToken[], liquid: Liquid, parser: Parser); + render(ctx: Context, emitter: Emitter): Generator; +} +export declare const register: (liquid: Liquid) => void; diff --git a/packages/osrl/plugins/rinclude.js b/packages/osrl/plugins/rinclude.js new file mode 100644 index 00000000..a95f18fc --- /dev/null +++ b/packages/osrl/plugins/rinclude.js @@ -0,0 +1,50 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.register = exports.RInclude = void 0; +const liquid_1 = require("../liquidjs/liquid"); +const block_mode_1 = require("../liquidjs/context/block-mode"); +const render_1 = require("../liquidjs/builtin/tags/render"); +const tag_1 = require("../../liquidjs/template/tag/tag"); +class RInclude extends tag_1.Tag { + constructor(token, remainTokens, liquid, parser) { + super(token, remainTokens, liquid); + const { tokenizer } = token; + this['file'] = (0, render_1.parseFilePath)(tokenizer, this.liquid, parser); + this['currentFile'] = token.file; + const begin = tokenizer.p; + const withStr = tokenizer.readIdentifier(); + if (withStr.content === 'with') { + tokenizer.skipBlank(); + if (tokenizer.peek() !== ':') { + this.withVar = tokenizer.readValue(); + } + else + tokenizer.p = begin; + } + else + tokenizer.p = begin; + this.hash = new liquid_1.Hash(tokenizer.remaining(), this.liquid.options.jekyllInclude); + } + *render(ctx, emitter) { + const { liquid, hash, withVar } = this; + const { renderer } = liquid; + const filepath = (yield (0, render_1.renderFilePath)(this['file'], ctx, liquid)); + (0, liquid_1.assert)(filepath, () => `illegal file path "${filepath}"`); + const saved = ctx.saveRegister('blocks', 'blockMode'); + ctx.setRegister('blocks', {}); + ctx.setRegister('blockMode', block_mode_1.default.OUTPUT); + const scope = (yield hash.render(ctx)); + if (withVar) + scope[filepath] = yield (0, liquid_1.evalToken)(withVar, ctx); + const templates = (yield liquid._parsePartialFile(filepath, ctx.sync, this['currentFile'])); + ctx.push(ctx.opts.jekyllInclude ? { include: scope } : scope); + yield renderer.renderTemplates(templates, ctx, emitter); + ctx.pop(); + ctx.restoreRegister(saved); + } +} +exports.RInclude = RInclude; +const register = (liquid) => { +}; +exports.register = register; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmluY2x1ZGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvcGx1Z2lucy9yaW5jbHVkZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSwrQ0FBeUg7QUFFekgsK0RBQXNEO0FBR3RELDREQUErRTtBQUMvRSx5REFBcUQ7QUFHckQsTUFBYSxRQUFTLFNBQVEsU0FBRztJQUcvQixZQUFZLEtBQWUsRUFBRSxZQUE2QixFQUFFLE1BQWMsRUFBRSxNQUFjO1FBQ3hGLEtBQUssQ0FBQyxLQUFLLEVBQUUsWUFBWSxFQUFFLE1BQU0sQ0FBQyxDQUFBO1FBQ2xDLE1BQU0sRUFBRSxTQUFTLEVBQUUsR0FBRyxLQUFLLENBQUE7UUFDM0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLElBQUEsc0JBQWEsRUFBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQTtRQUM1RCxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQTtRQUVoQyxNQUFNLEtBQUssR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFBO1FBQ3pCLE1BQU0sT0FBTyxHQUFHLFNBQVMsQ0FBQyxjQUFjLEVBQUUsQ0FBQTtRQUMxQyxJQUFJLE9BQU8sQ0FBQyxPQUFPLEtBQUssTUFBTSxFQUFFO1lBQzlCLFNBQVMsQ0FBQyxTQUFTLEVBQUUsQ0FBQTtZQUNyQixJQUFJLFNBQVMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxHQUFHLEVBQUU7Z0JBQzVCLElBQUksQ0FBQyxPQUFPLEdBQUcsU0FBUyxDQUFDLFNBQVMsRUFBRSxDQUFBO2FBQ3JDOztnQkFBTSxTQUFTLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQTtTQUMzQjs7WUFBTSxTQUFTLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQTtRQUUxQixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksYUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLEVBQUUsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQTtJQUNoRixDQUFDO0lBQ0QsQ0FBRSxNQUFNLENBQUMsR0FBWSxFQUFFLE9BQWdCO1FBQ3JDLE1BQU0sRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxHQUFHLElBQUksQ0FBQTtRQUN0QyxNQUFNLEVBQUUsUUFBUSxFQUFFLEdBQUcsTUFBTSxDQUFBO1FBQzNCLE1BQU0sUUFBUSxHQUFHLENBQUMsTUFBTSxJQUFBLHVCQUFjLEVBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEdBQUcsRUFBRSxNQUFNLENBQUMsQ0FBVyxDQUFBO1FBQzVFLElBQUEsZUFBTSxFQUFDLFFBQVEsRUFBRSxHQUFHLEVBQUUsQ0FBQyxzQkFBc0IsUUFBUSxHQUFHLENBQUMsQ0FBQTtRQUV6RCxNQUFNLEtBQUssR0FBRyxHQUFHLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxXQUFXLENBQUMsQ0FBQTtRQUNyRCxHQUFHLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQTtRQUM3QixHQUFHLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxvQkFBUyxDQUFDLE1BQU0sQ0FBQyxDQUFBO1FBQzlDLE1BQU0sS0FBSyxHQUFHLENBQUMsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFVLENBQUE7UUFDL0MsSUFBSSxPQUFPO1lBQUUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxHQUFHLE1BQU0sSUFBQSxrQkFBUyxFQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQTtRQUM1RCxNQUFNLFNBQVMsR0FBRyxDQUFDLE1BQU0sTUFBTSxDQUFDLGlCQUFpQixDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFlLENBQUE7UUFDekcsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBQzdELE1BQU0sUUFBUSxDQUFDLGVBQWUsQ0FBQyxTQUFTLEVBQUUsR0FBRyxFQUFFLE9BQU8sQ0FBQyxDQUFBO1FBQ3ZELEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQTtRQUNULEdBQUcsQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUE7SUFDNUIsQ0FBQztDQUNGO0FBckNELDRCQXFDQztBQUVNLE1BQU0sUUFBUSxHQUFHLENBQUMsTUFBYyxFQUFFLEVBQUU7QUFFM0MsQ0FBQyxDQUFBO0FBRlksUUFBQSxRQUFRLFlBRXBCIn0= \ No newline at end of file diff --git a/packages/osrl/plugins/turndown.d.ts b/packages/osrl/plugins/turndown.d.ts new file mode 100644 index 00000000..f2a23e0e --- /dev/null +++ b/packages/osrl/plugins/turndown.d.ts @@ -0,0 +1,4 @@ +import { Engine } from '../index'; +import { IOptions } from '../types'; +export declare const markdown: (expr: string, options: IOptions, engine: Engine) => Promise; +export declare const markdownSync: (expr: string, options: IOptions, engine: Engine) => any; diff --git a/packages/osrl/plugins/turndown.js b/packages/osrl/plugins/turndown.js new file mode 100644 index 00000000..51c4ab09 --- /dev/null +++ b/packages/osrl/plugins/turndown.js @@ -0,0 +1,44 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.markdownSync = exports.markdown = void 0; +const index_1 = require("../index"); +const TurndownService = require('turndown'); +/** + * @link: https://www.npmjs.com/package/turndown + * @param input + * @returns + */ +const convert = (input) => { + var turndownService = new TurndownService(); + return turndownService.turndown(input); +}; +const markdown = (expr, options, engine) => __awaiter(void 0, void 0, void 0, function* () { + try { + return convert(expr); + } + catch (e) { + index_1.logger.error(e); + } + return expr; +}); +exports.markdown = markdown; +const markdownSync = (expr, options, engine) => { + try { + return convert(expr); + } + catch (e) { + index_1.logger.error(e); + } + return expr; +}; +exports.markdownSync = markdownSync; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHVybmRvd24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvcGx1Z2lucy90dXJuZG93bi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFBQSxvQ0FBeUM7QUFHekMsTUFBTSxlQUFlLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFBO0FBQzNDOzs7O0dBSUc7QUFFSCxNQUFNLE9BQU8sR0FBRyxDQUFDLEtBQWEsRUFBRSxFQUFFO0lBQ2pDLElBQUksZUFBZSxHQUFHLElBQUksZUFBZSxFQUFFLENBQUE7SUFDM0MsT0FBTyxlQUFlLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFBO0FBQ3ZDLENBQUMsQ0FBQTtBQUVNLE1BQU0sUUFBUSxHQUFHLENBQ3ZCLElBQVksRUFBRSxPQUFpQixFQUFFLE1BQWMsRUFDOUMsRUFBRTtJQUNILElBQUk7UUFDSCxPQUFPLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQTtLQUNwQjtJQUFDLE9BQU8sQ0FBQyxFQUFFO1FBQ1gsY0FBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQTtLQUNmO0lBQ0QsT0FBTyxJQUFJLENBQUE7QUFDWixDQUFDLENBQUEsQ0FBQTtBQVRZLFFBQUEsUUFBUSxZQVNwQjtBQUVNLE1BQU0sWUFBWSxHQUFJLENBQzVCLElBQVksRUFBRSxPQUFpQixFQUFFLE1BQWMsRUFDOUMsRUFBRTtJQUNILElBQUk7UUFDSCxPQUFPLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQTtLQUNwQjtJQUFDLE9BQU8sQ0FBQyxFQUFFO1FBQ1gsY0FBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQTtLQUNmO0lBQ0QsT0FBTyxJQUFJLENBQUE7QUFDWixDQUFDLENBQUE7QUFUWSxRQUFBLFlBQVksZ0JBU3hCIn0= \ No newline at end of file diff --git a/packages/osrl/products.json b/packages/osrl/products.json new file mode 100644 index 00000000..1be819a8 --- /dev/null +++ b/packages/osrl/products.json @@ -0,0 +1,3924 @@ +[ + { + "product_id": "31", + "product": "Sheetpress Cassandra", + "product_type": "P", + "parent_product_id": "0", + "product_code": "", + "status": "H", + "company_id": "1", + "list_price": "0.00", + "amount": "0", + "weight": "0.000", + "length": "0", + "width": "0", + "height": "0", + "shipping_freight": "0.00", + "low_avail_limit": "0", + "timestamp": "1644948570", + "updated_timestamp": "1644948578", + "usergroup_ids": "0", + "is_edp": "N", + "edp_shipping": "N", + "unlimited_download": "N", + "tracking": "D", + "free_shipping": "N", + "zero_price_action": "R", + "is_pbp": "Y", + "is_op": "N", + "is_oper": "N", + "is_returnable": "Y", + "return_period": "10", + "avail_since": "0", + "out_of_stock_actions": "N", + "localization": "", + "min_qty": "0", + "max_qty": "0", + "qty_step": "0", + "list_qty_count": "0", + "tax_ids": "", + "age_verification": "N", + "age_limit": "0", + "options_type": "P", + "exceptions_type": "F", + "details_layout": "default", + "shipping_params": "a:5:{s:16:\"min_items_in_box\";i:0;s:16:\"max_items_in_box\";i:0;s:10:\"box_length\";i:0;s:9:\"box_width\";i:0;s:10:\"box_height\";i:0;}", + "facebook_obj_type": "", + "buy_now_url": "", + "price": "5900.000000", + "category_ids": [ + 15 + ], + "seo_name": "sheetpress-cassandra", + "seo_path": "15", + "main_category": 15, + "options_type_raw": null, + "exceptions_type_raw": null, + "tracking_raw": null, + "zero_price_action_raw": null, + "min_qty_raw": null, + "max_qty_raw": null, + "qty_step_raw": null, + "list_qty_count_raw": null, + "details_layout_raw": "default", + "variation_features": [], + "main_pair": { + "pair_id": "201", + "image_id": "0", + "detailed_id": "8773", + "position": "0", + "object_id": "31", + "object_type": "product", + "detailed": { + "object_id": "31", + "object_type": "product", + "type": "M", + "image_path": "https://shop.osr-plastic.org/images/detailed/8/perspective_closed.JPG", + "alt": "", + "image_x": "1984", + "image_y": "2976", + "http_image_path": "http://shop.osr-plastic.org/images/detailed/8/perspective_closed.JPG", + "https_image_path": "https://shop.osr-plastic.org/images/detailed/8/perspective_closed.JPG", + "absolute_path": "/var/www/vhosts/osr-plastic.org/shop.osr-plastic.org/images/detailed/8/perspective_closed.JPG", + "relative_path": "detailed/8/perspective_closed.JPG", + "is_high_res": false + } + }, + "base_price": "5900.000000", + "selected_options": [], + "has_options": false, + "product_options": [], + "discounts": { + "A": 0, + "P": 0 + }, + "product_features": [], + "qty_content": [] + }, + { + "product_id": "30", + "product": "Asterix - SM - PP", + "product_type": "P", + "parent_product_id": "0", + "product_code": "", + "status": "A", + "company_id": "1", + "list_price": "0.00", + "amount": "0", + "weight": "0.000", + "length": "0", + "width": "0", + "height": "0", + "shipping_freight": "0.00", + "low_avail_limit": "0", + "timestamp": "1644946381", + "updated_timestamp": "1644948257", + "usergroup_ids": "0", + "is_edp": "N", + "edp_shipping": "N", + "unlimited_download": "N", + "tracking": "D", + "free_shipping": "N", + "zero_price_action": "R", + "is_pbp": "Y", + "is_op": "N", + "is_oper": "N", + "is_returnable": "Y", + "return_period": "10", + "avail_since": "0", + "out_of_stock_actions": "N", + "localization": "", + "min_qty": "0", + "max_qty": "0", + "qty_step": "0", + "list_qty_count": "0", + "tax_ids": "", + "age_verification": "N", + "age_limit": "0", + "options_type": "P", + "exceptions_type": "F", + "details_layout": "default", + "shipping_params": "a:5:{s:16:\"min_items_in_box\";i:0;s:16:\"max_items_in_box\";i:0;s:10:\"box_length\";i:0;s:9:\"box_width\";i:0;s:10:\"box_height\";i:0;}", + "facebook_obj_type": "", + "buy_now_url": "", + "price": "2100.000000", + "category_ids": [ + 19 + ], + "seo_name": "asterix-sm-pp", + "seo_path": "6/19", + "main_category": 19, + "options_type_raw": null, + "exceptions_type_raw": null, + "tracking_raw": null, + "zero_price_action_raw": null, + "min_qty_raw": null, + "max_qty_raw": null, + "qty_step_raw": null, + "list_qty_count_raw": null, + "details_layout_raw": "default", + "variation_features": [], + "main_pair": { + "pair_id": "197", + "image_id": "0", + "detailed_id": "8769", + "position": "0", + "object_id": "30", + "object_type": "product", + "detailed": { + "object_id": "30", + "object_type": "product", + "type": "M", + "image_path": "https://shop.osr-plastic.org/images/detailed/8/perspective_gqn9-wy.jpg", + "alt": "", + "image_x": "3245", + "image_y": "3512", + "http_image_path": "http://shop.osr-plastic.org/images/detailed/8/perspective_gqn9-wy.jpg", + "https_image_path": "https://shop.osr-plastic.org/images/detailed/8/perspective_gqn9-wy.jpg", + "absolute_path": "/var/www/vhosts/osr-plastic.org/shop.osr-plastic.org/images/detailed/8/perspective_gqn9-wy.jpg", + "relative_path": "detailed/8/perspective_gqn9-wy.jpg", + "is_high_res": false + } + }, + "image_pairs": { + "198": { + "pair_id": "198", + "image_id": "0", + "detailed_id": "8770", + "position": "1", + "object_id": "30", + "object_type": "product", + "detailed": { + "object_id": "30", + "object_type": "product", + "type": "A", + "image_path": "https://shop.osr-plastic.org/images/detailed/8/asterix-sm-pp-198.JPG", + "alt": "", + "image_x": "1930", + "image_y": "1086", + "http_image_path": "http://shop.osr-plastic.org/images/detailed/8/asterix-sm-pp-198.JPG", + "https_image_path": "https://shop.osr-plastic.org/images/detailed/8/asterix-sm-pp-198.JPG", + "absolute_path": "/var/www/vhosts/osr-plastic.org/shop.osr-plastic.org/images/detailed/8/asterix-sm-pp-198.JPG", + "relative_path": "detailed/8/asterix-sm-pp-198.JPG", + "is_high_res": false + } + }, + "200": { + "pair_id": "200", + "image_id": "0", + "detailed_id": "8772", + "position": "2", + "object_id": "30", + "object_type": "product", + "detailed": { + "object_id": "30", + "object_type": "product", + "type": "A", + "image_path": "https://shop.osr-plastic.org/images/detailed/8/asterix-sm-pp-200.jpg", + "alt": "", + "image_x": "1999", + "image_y": "1545", + "http_image_path": "http://shop.osr-plastic.org/images/detailed/8/asterix-sm-pp-200.jpg", + "https_image_path": "https://shop.osr-plastic.org/images/detailed/8/asterix-sm-pp-200.jpg", + "absolute_path": "/var/www/vhosts/osr-plastic.org/shop.osr-plastic.org/images/detailed/8/asterix-sm-pp-200.jpg", + "relative_path": "detailed/8/asterix-sm-pp-200.jpg", + "is_high_res": false + } + } + }, + "base_price": "2100.000000", + "selected_options": [], + "has_options": true, + "product_options": [], + "discounts": { + "A": 0, + "P": 0 + }, + "product_features": [], + "qty_content": [] + }, + { + "product_id": "29", + "product": "Mold - Clamp - Semi | Lucy Mini", + "product_type": "P", + "parent_product_id": "0", + "product_code": "", + "status": "A", + "company_id": "1", + "list_price": "0.00", + "amount": "1", + "weight": "0.000", + "length": "0", + "width": "0", + "height": "0", + "shipping_freight": "0.00", + "low_avail_limit": "0", + "timestamp": "1644931776", + "updated_timestamp": "1644933292", + "usergroup_ids": "0", + "is_edp": "N", + "edp_shipping": "N", + "unlimited_download": "N", + "tracking": "D", + "free_shipping": "N", + "zero_price_action": "R", + "is_pbp": "Y", + "is_op": "N", + "is_oper": "N", + "is_returnable": "Y", + "return_period": "10", + "avail_since": "0", + "out_of_stock_actions": "N", + "localization": "", + "min_qty": "0", + "max_qty": "0", + "qty_step": "0", + "list_qty_count": "0", + "tax_ids": "", + "age_verification": "N", + "age_limit": "0", + "options_type": "P", + "exceptions_type": "F", + "details_layout": "default", + "shipping_params": "a:5:{s:16:\"min_items_in_box\";i:0;s:16:\"max_items_in_box\";i:0;s:10:\"box_length\";i:0;s:9:\"box_width\";i:0;s:10:\"box_height\";i:0;}", + "facebook_obj_type": "", + "buy_now_url": "", + "price": "2800.000000", + "category_ids": [ + 12 + ], + "seo_name": "mold-clamp-semi-lucy-mini", + "seo_path": "11/12", + "main_category": 12, + "options_type_raw": null, + "exceptions_type_raw": null, + "tracking_raw": null, + "zero_price_action_raw": "R", + "min_qty_raw": null, + "max_qty_raw": null, + "qty_step_raw": null, + "list_qty_count_raw": null, + "details_layout_raw": "default", + "variation_features": [], + "main_pair": { + "pair_id": "142", + "image_id": "0", + "detailed_id": "8758", + "position": "0", + "object_id": "29", + "object_type": "product", + "detailed": { + "object_id": "29", + "object_type": "product", + "type": "M", + "image_path": "https://shop.osr-plastic.org/images/detailed/8/perspective_l892-vl.jpg", + "alt": "", + "image_x": "1931", + "image_y": "1545", + "http_image_path": "http://shop.osr-plastic.org/images/detailed/8/perspective_l892-vl.jpg", + "https_image_path": "https://shop.osr-plastic.org/images/detailed/8/perspective_l892-vl.jpg", + "absolute_path": "/var/www/vhosts/osr-plastic.org/shop.osr-plastic.org/images/detailed/8/perspective_l892-vl.jpg", + "relative_path": "detailed/8/perspective_l892-vl.jpg", + "is_high_res": false + } + }, + "image_pairs": { + "143": { + "pair_id": "143", + "image_id": "0", + "detailed_id": "8759", + "position": "1", + "object_id": "29", + "object_type": "product", + "detailed": { + "object_id": "29", + "object_type": "product", + "type": "A", + "image_path": "https://shop.osr-plastic.org/images/detailed/8/mold-clamp-semi-lucy-mini-143.jpg", + "alt": "", + "image_x": "1931", + "image_y": "1545", + "http_image_path": "http://shop.osr-plastic.org/images/detailed/8/mold-clamp-semi-lucy-mini-143.jpg", + "https_image_path": "https://shop.osr-plastic.org/images/detailed/8/mold-clamp-semi-lucy-mini-143.jpg", + "absolute_path": "/var/www/vhosts/osr-plastic.org/shop.osr-plastic.org/images/detailed/8/mold-clamp-semi-lucy-mini-143.jpg", + "relative_path": "detailed/8/mold-clamp-semi-lucy-mini-143.jpg", + "is_high_res": false + } + } + }, + "base_price": "2800.000000", + "selected_options": [], + "has_options": false, + "product_options": [], + "discounts": { + "A": 0, + "P": 0 + }, + "product_features": [], + "qty_content": [] + }, + { + "product_id": "28", + "product": "Crusher - SXD100", + "product_type": "P", + "parent_product_id": "0", + "product_code": "", + "status": "A", + "company_id": "1", + "list_price": "0.00", + "amount": "1", + "weight": "0.000", + "length": "0", + "width": "0", + "height": "0", + "shipping_freight": "0.00", + "low_avail_limit": "0", + "timestamp": "1644885778", + "updated_timestamp": "1644929240", + "usergroup_ids": "0", + "is_edp": "N", + "edp_shipping": "N", + "unlimited_download": "N", + "tracking": "D", + "free_shipping": "N", + "zero_price_action": "R", + "is_pbp": "Y", + "is_op": "N", + "is_oper": "N", + "is_returnable": "Y", + "return_period": "10", + "avail_since": "0", + "out_of_stock_actions": "N", + "localization": "", + "min_qty": "0", + "max_qty": "0", + "qty_step": "0", + "list_qty_count": "0", + "tax_ids": "", + "age_verification": "N", + "age_limit": "0", + "options_type": "P", + "exceptions_type": "F", + "details_layout": "default", + "shipping_params": "a:5:{s:16:\"min_items_in_box\";i:0;s:16:\"max_items_in_box\";i:0;s:10:\"box_length\";i:0;s:9:\"box_width\";i:0;s:10:\"box_height\";i:0;}", + "facebook_obj_type": "", + "buy_now_url": "", + "price": "2100.000000", + "category_ids": [ + 21 + ], + "seo_name": "crusher-sxd100", + "seo_path": "6/21", + "main_category": 21, + "options_type_raw": null, + "exceptions_type_raw": null, + "tracking_raw": null, + "zero_price_action_raw": null, + "min_qty_raw": null, + "max_qty_raw": null, + "qty_step_raw": null, + "list_qty_count_raw": null, + "details_layout_raw": "default", + "variation_features": [], + "main_pair": { + "pair_id": "138", + "image_id": "0", + "detailed_id": "8754", + "position": "0", + "object_id": "28", + "object_type": "product", + "detailed": { + "object_id": "28", + "object_type": "product", + "type": "M", + "image_path": "https://shop.osr-plastic.org/images/detailed/8/grinder_4k_1.jpg", + "alt": "", + "image_x": "800", + "image_y": "800", + "http_image_path": "http://shop.osr-plastic.org/images/detailed/8/grinder_4k_1.jpg", + "https_image_path": "https://shop.osr-plastic.org/images/detailed/8/grinder_4k_1.jpg", + "absolute_path": "/var/www/vhosts/osr-plastic.org/shop.osr-plastic.org/images/detailed/8/grinder_4k_1.jpg", + "relative_path": "detailed/8/grinder_4k_1.jpg", + "is_high_res": false + } + }, + "image_pairs": { + "139": { + "pair_id": "139", + "image_id": "0", + "detailed_id": "8755", + "position": "1", + "object_id": "28", + "object_type": "product", + "detailed": { + "object_id": "28", + "object_type": "product", + "type": "A", + "image_path": "https://shop.osr-plastic.org/images/detailed/8/crusher-sxd100-139.jpg", + "alt": "", + "image_x": "1805", + "image_y": "1200", + "http_image_path": "http://shop.osr-plastic.org/images/detailed/8/crusher-sxd100-139.jpg", + "https_image_path": "https://shop.osr-plastic.org/images/detailed/8/crusher-sxd100-139.jpg", + "absolute_path": "/var/www/vhosts/osr-plastic.org/shop.osr-plastic.org/images/detailed/8/crusher-sxd100-139.jpg", + "relative_path": "detailed/8/crusher-sxd100-139.jpg", + "is_high_res": false + } + }, + "140": { + "pair_id": "140", + "image_id": "0", + "detailed_id": "8756", + "position": "2", + "object_id": "28", + "object_type": "product", + "detailed": { + "object_id": "28", + "object_type": "product", + "type": "A", + "image_path": "https://shop.osr-plastic.org/images/detailed/8/crusher-sxd100-140.jpg", + "alt": "", + "image_x": "800", + "image_y": "800", + "http_image_path": "http://shop.osr-plastic.org/images/detailed/8/crusher-sxd100-140.jpg", + "https_image_path": "https://shop.osr-plastic.org/images/detailed/8/crusher-sxd100-140.jpg", + "absolute_path": "/var/www/vhosts/osr-plastic.org/shop.osr-plastic.org/images/detailed/8/crusher-sxd100-140.jpg", + "relative_path": "detailed/8/crusher-sxd100-140.jpg", + "is_high_res": false + } + } + }, + "base_price": "2100.000000", + "selected_options": [], + "has_options": false, + "product_options": [], + "discounts": { + "A": 0, + "P": 0 + }, + "product_features": [], + "qty_content": [] + }, + { + "product_id": "27", + "product": "SJ - 35 Extruder CE/SGS/ISO Certified", + "product_type": "P", + "parent_product_id": "0", + "product_code": "", + "status": "A", + "company_id": "1", + "list_price": "0.00", + "amount": "1", + "weight": "0.000", + "length": "0", + "width": "0", + "height": "0", + "shipping_freight": "0.00", + "low_avail_limit": "0", + "timestamp": "1644882747", + "updated_timestamp": "1644929514", + "usergroup_ids": "0", + "is_edp": "N", + "edp_shipping": "N", + "unlimited_download": "N", + "tracking": "D", + "free_shipping": "N", + "zero_price_action": "R", + "is_pbp": "Y", + "is_op": "N", + "is_oper": "N", + "is_returnable": "Y", + "return_period": "10", + "avail_since": "0", + "out_of_stock_actions": "N", + "localization": "", + "min_qty": "0", + "max_qty": "0", + "qty_step": "0", + "list_qty_count": "0", + "tax_ids": "", + "age_verification": "N", + "age_limit": "0", + "options_type": "P", + "exceptions_type": "F", + "details_layout": "default", + "shipping_params": "a:5:{s:16:\"min_items_in_box\";i:0;s:16:\"max_items_in_box\";i:0;s:10:\"box_length\";i:0;s:9:\"box_width\";i:0;s:10:\"box_height\";i:0;}", + "facebook_obj_type": "", + "buy_now_url": "", + "price": "6700.000000", + "category_ids": [ + 22 + ], + "seo_name": "sj-35-extruder", + "seo_path": "11/22", + "main_category": 22, + "options_type_raw": null, + "exceptions_type_raw": null, + "tracking_raw": null, + "zero_price_action_raw": null, + "min_qty_raw": null, + "max_qty_raw": null, + "qty_step_raw": null, + "list_qty_count_raw": null, + "details_layout_raw": "default", + "variation_features": [], + "main_pair": { + "pair_id": "136", + "image_id": "0", + "detailed_id": "8752", + "position": "0", + "object_id": "27", + "object_type": "product", + "detailed": { + "object_id": "27", + "object_type": "product", + "type": "M", + "image_path": "https://shop.osr-plastic.org/images/detailed/8/sj35_1x.JPG", + "alt": "", + "image_x": "813", + "image_y": "778", + "http_image_path": "http://shop.osr-plastic.org/images/detailed/8/sj35_1x.JPG", + "https_image_path": "https://shop.osr-plastic.org/images/detailed/8/sj35_1x.JPG", + "absolute_path": "/var/www/vhosts/osr-plastic.org/shop.osr-plastic.org/images/detailed/8/sj35_1x.JPG", + "relative_path": "detailed/8/sj35_1x.JPG", + "is_high_res": false + } + }, + "image_pairs": { + "137": { + "pair_id": "137", + "image_id": "0", + "detailed_id": "8753", + "position": "1", + "object_id": "27", + "object_type": "product", + "detailed": { + "object_id": "27", + "object_type": "product", + "type": "A", + "image_path": "https://shop.osr-plastic.org/images/detailed/8/sj-35-extruder-137.JPG", + "alt": "", + "image_x": "824", + "image_y": "755", + "http_image_path": "http://shop.osr-plastic.org/images/detailed/8/sj-35-extruder-137.JPG", + "https_image_path": "https://shop.osr-plastic.org/images/detailed/8/sj-35-extruder-137.JPG", + "absolute_path": "/var/www/vhosts/osr-plastic.org/shop.osr-plastic.org/images/detailed/8/sj-35-extruder-137.JPG", + "relative_path": "detailed/8/sj-35-extruder-137.JPG", + "is_high_res": false + } + } + }, + "base_price": "6700.000000", + "selected_options": [], + "has_options": false, + "product_options": [], + "discounts": { + "A": 0, + "P": 0 + }, + "product_features": [], + "qty_content": [] + }, + { + "product_id": "26", + "product": "Material Feeder / Auto-Loader", + "product_type": "P", + "parent_product_id": "0", + "product_code": "", + "status": "A", + "company_id": "1", + "list_price": "0.00", + "amount": "1", + "weight": "0.000", + "length": "0", + "width": "0", + "height": "0", + "shipping_freight": "0.00", + "low_avail_limit": "0", + "timestamp": "1644867174", + "updated_timestamp": "1644867208", + "usergroup_ids": "0", + "is_edp": "N", + "edp_shipping": "N", + "unlimited_download": "N", + "tracking": "D", + "free_shipping": "N", + "zero_price_action": "R", + "is_pbp": "Y", + "is_op": "N", + "is_oper": "N", + "is_returnable": "Y", + "return_period": "10", + "avail_since": "0", + "out_of_stock_actions": "N", + "localization": "", + "min_qty": "0", + "max_qty": "0", + "qty_step": "0", + "list_qty_count": "0", + "tax_ids": "", + "age_verification": "N", + "age_limit": "0", + "options_type": "P", + "exceptions_type": "F", + "details_layout": "default", + "shipping_params": "a:5:{s:16:\"min_items_in_box\";i:0;s:16:\"max_items_in_box\";i:0;s:10:\"box_length\";i:0;s:9:\"box_width\";i:0;s:10:\"box_height\";i:0;}", + "facebook_obj_type": "", + "buy_now_url": "", + "price": "270.000000", + "category_ids": [ + 20, + 12 + ], + "seo_name": "material-feeder-auto-loader", + "seo_path": "11/12", + "main_category": 12, + "options_type_raw": null, + "exceptions_type_raw": null, + "tracking_raw": null, + "zero_price_action_raw": null, + "min_qty_raw": null, + "max_qty_raw": null, + "qty_step_raw": null, + "list_qty_count_raw": null, + "details_layout_raw": "default", + "variation_features": [], + "main_pair": { + "pair_id": "133", + "image_id": "0", + "detailed_id": "8749", + "position": "0", + "object_id": "26", + "object_type": "product", + "detailed": { + "object_id": "26", + "object_type": "product", + "type": "M", + "image_path": "https://shop.osr-plastic.org/images/detailed/8/feeder.png", + "alt": "", + "image_x": "300", + "image_y": "300", + "http_image_path": "http://shop.osr-plastic.org/images/detailed/8/feeder.png", + "https_image_path": "https://shop.osr-plastic.org/images/detailed/8/feeder.png", + "absolute_path": "/var/www/vhosts/osr-plastic.org/shop.osr-plastic.org/images/detailed/8/feeder.png", + "relative_path": "detailed/8/feeder.png", + "is_high_res": false + } + }, + "base_price": "270.000000", + "selected_options": [], + "has_options": false, + "product_options": [], + "discounts": { + "A": 0, + "P": 0 + }, + "product_features": [], + "qty_content": [] + }, + { + "product_id": "24", + "product": "Laser Gauge", + "product_type": "P", + "parent_product_id": "0", + "product_code": "", + "status": "A", + "company_id": "1", + "list_price": "0.00", + "amount": "1", + "weight": "0.000", + "length": "0", + "width": "0", + "height": "0", + "shipping_freight": "0.00", + "low_avail_limit": "0", + "timestamp": "1644864550", + "updated_timestamp": "1644864550", + "usergroup_ids": "0", + "is_edp": "N", + "edp_shipping": "N", + "unlimited_download": "N", + "tracking": "D", + "free_shipping": "N", + "zero_price_action": "R", + "is_pbp": "Y", + "is_op": "N", + "is_oper": "N", + "is_returnable": "Y", + "return_period": "10", + "avail_since": "0", + "out_of_stock_actions": "N", + "localization": "", + "min_qty": "0", + "max_qty": "0", + "qty_step": "0", + "list_qty_count": "0", + "tax_ids": "", + "age_verification": "N", + "age_limit": "0", + "options_type": "P", + "exceptions_type": "F", + "details_layout": "default", + "shipping_params": "a:5:{s:16:\"min_items_in_box\";i:0;s:16:\"max_items_in_box\";i:0;s:10:\"box_length\";i:0;s:9:\"box_width\";i:0;s:10:\"box_height\";i:0;}", + "facebook_obj_type": "", + "buy_now_url": "", + "price": "1350.000000", + "category_ids": [ + 20 + ], + "seo_name": "laser-gauge", + "seo_path": "20", + "main_category": 20, + "options_type_raw": null, + "exceptions_type_raw": null, + "tracking_raw": null, + "zero_price_action_raw": null, + "min_qty_raw": null, + "max_qty_raw": null, + "qty_step_raw": null, + "list_qty_count_raw": null, + "details_layout_raw": "default", + "variation_features": [], + "main_pair": { + "pair_id": "126", + "image_id": "0", + "detailed_id": "8742", + "position": "0", + "object_id": "24", + "object_type": "product", + "detailed": { + "object_id": "24", + "object_type": "product", + "type": "M", + "image_path": "https://shop.osr-plastic.org/images/detailed/8/laser3.jpeg", + "alt": "", + "image_x": "300", + "image_y": "300", + "http_image_path": "http://shop.osr-plastic.org/images/detailed/8/laser3.jpeg", + "https_image_path": "https://shop.osr-plastic.org/images/detailed/8/laser3.jpeg", + "absolute_path": "/var/www/vhosts/osr-plastic.org/shop.osr-plastic.org/images/detailed/8/laser3.jpeg", + "relative_path": "detailed/8/laser3.jpeg", + "is_high_res": false + } + }, + "image_pairs": { + "127": { + "pair_id": "127", + "image_id": "0", + "detailed_id": "8743", + "position": "1", + "object_id": "24", + "object_type": "product", + "detailed": { + "object_id": "24", + "object_type": "product", + "type": "A", + "image_path": "https://shop.osr-plastic.org/images/detailed/8/laser-gauge-127.jpeg", + "alt": "", + "image_x": "300", + "image_y": "300", + "http_image_path": "http://shop.osr-plastic.org/images/detailed/8/laser-gauge-127.jpeg", + "https_image_path": "https://shop.osr-plastic.org/images/detailed/8/laser-gauge-127.jpeg", + "absolute_path": "/var/www/vhosts/osr-plastic.org/shop.osr-plastic.org/images/detailed/8/laser-gauge-127.jpeg", + "relative_path": "detailed/8/laser-gauge-127.jpeg", + "is_high_res": false + } + }, + "128": { + "pair_id": "128", + "image_id": "0", + "detailed_id": "8744", + "position": "2", + "object_id": "24", + "object_type": "product", + "detailed": { + "object_id": "24", + "object_type": "product", + "type": "A", + "image_path": "https://shop.osr-plastic.org/images/detailed/8/laser-gauge-128.jpeg", + "alt": "", + "image_x": "300", + "image_y": "300", + "http_image_path": "http://shop.osr-plastic.org/images/detailed/8/laser-gauge-128.jpeg", + "https_image_path": "https://shop.osr-plastic.org/images/detailed/8/laser-gauge-128.jpeg", + "absolute_path": "/var/www/vhosts/osr-plastic.org/shop.osr-plastic.org/images/detailed/8/laser-gauge-128.jpeg", + "relative_path": "detailed/8/laser-gauge-128.jpeg", + "is_high_res": false + } + } + }, + "base_price": "1350.000000", + "selected_options": [], + "has_options": false, + "product_options": [], + "discounts": { + "A": 0, + "P": 0 + }, + "product_features": [], + "qty_content": [] + }, + { + "product_id": "23", + "product": "Cantilever Pelletizer", + "product_type": "P", + "parent_product_id": "0", + "product_code": "", + "status": "A", + "company_id": "1", + "list_price": "0.00", + "amount": "1", + "weight": "0.000", + "length": "0", + "width": "0", + "height": "0", + "shipping_freight": "0.00", + "low_avail_limit": "0", + "timestamp": "1644863605", + "updated_timestamp": "1644863845", + "usergroup_ids": "0", + "is_edp": "N", + "edp_shipping": "N", + "unlimited_download": "N", + "tracking": "D", + "free_shipping": "N", + "zero_price_action": "R", + "is_pbp": "Y", + "is_op": "N", + "is_oper": "N", + "is_returnable": "Y", + "return_period": "10", + "avail_since": "0", + "out_of_stock_actions": "N", + "localization": "", + "min_qty": "0", + "max_qty": "0", + "qty_step": "0", + "list_qty_count": "0", + "tax_ids": "", + "age_verification": "N", + "age_limit": "0", + "options_type": "P", + "exceptions_type": "F", + "details_layout": "default", + "shipping_params": "a:5:{s:16:\"min_items_in_box\";i:0;s:16:\"max_items_in_box\";i:0;s:10:\"box_length\";i:0;s:9:\"box_width\";i:0;s:10:\"box_height\";i:0;}", + "facebook_obj_type": "", + "buy_now_url": "", + "price": "2350.000000", + "category_ids": [ + 12 + ], + "seo_name": "cantilever-pelletizer", + "seo_path": "11/12", + "main_category": 12, + "options_type_raw": null, + "exceptions_type_raw": null, + "tracking_raw": null, + "zero_price_action_raw": null, + "min_qty_raw": null, + "max_qty_raw": null, + "qty_step_raw": null, + "list_qty_count_raw": null, + "details_layout_raw": "default", + "variation_features": [], + "main_pair": { + "pair_id": "124", + "image_id": "0", + "detailed_id": "8740", + "position": "0", + "object_id": "23", + "object_type": "product", + "detailed": { + "object_id": "23", + "object_type": "product", + "type": "M", + "image_path": "https://shop.osr-plastic.org/images/detailed/8/palletizer.jpeg", + "alt": "", + "image_x": "300", + "image_y": "300", + "http_image_path": "http://shop.osr-plastic.org/images/detailed/8/palletizer.jpeg", + "https_image_path": "https://shop.osr-plastic.org/images/detailed/8/palletizer.jpeg", + "absolute_path": "/var/www/vhosts/osr-plastic.org/shop.osr-plastic.org/images/detailed/8/palletizer.jpeg", + "relative_path": "detailed/8/palletizer.jpeg", + "is_high_res": false + } + }, + "image_pairs": { + "125": { + "pair_id": "125", + "image_id": "0", + "detailed_id": "8741", + "position": "1", + "object_id": "23", + "object_type": "product", + "detailed": { + "object_id": "23", + "object_type": "product", + "type": "A", + "image_path": "https://shop.osr-plastic.org/images/detailed/8/cantilever-pelletizer-125.jpeg", + "alt": "", + "image_x": "800", + "image_y": "450", + "http_image_path": "http://shop.osr-plastic.org/images/detailed/8/cantilever-pelletizer-125.jpeg", + "https_image_path": "https://shop.osr-plastic.org/images/detailed/8/cantilever-pelletizer-125.jpeg", + "absolute_path": "/var/www/vhosts/osr-plastic.org/shop.osr-plastic.org/images/detailed/8/cantilever-pelletizer-125.jpeg", + "relative_path": "detailed/8/cantilever-pelletizer-125.jpeg", + "is_high_res": false + } + } + }, + "base_price": "2350.000000", + "selected_options": [], + "has_options": false, + "product_options": [], + "discounts": { + "A": 0, + "P": 0 + }, + "product_features": [], + "qty_content": [] + }, + { + "product_id": "22", + "product": "Hopper Dryer", + "product_type": "P", + "parent_product_id": "0", + "product_code": "", + "status": "A", + "company_id": "1", + "list_price": "0.00", + "amount": "1", + "weight": "0.000", + "length": "0", + "width": "0", + "height": "0", + "shipping_freight": "0.00", + "low_avail_limit": "0", + "timestamp": "1644863368", + "updated_timestamp": "1644863402", + "usergroup_ids": "0", + "is_edp": "N", + "edp_shipping": "N", + "unlimited_download": "N", + "tracking": "D", + "free_shipping": "N", + "zero_price_action": "R", + "is_pbp": "Y", + "is_op": "N", + "is_oper": "N", + "is_returnable": "Y", + "return_period": "10", + "avail_since": "0", + "out_of_stock_actions": "N", + "localization": "", + "min_qty": "0", + "max_qty": "0", + "qty_step": "0", + "list_qty_count": "0", + "tax_ids": "", + "age_verification": "N", + "age_limit": "0", + "options_type": "P", + "exceptions_type": "F", + "details_layout": "default", + "shipping_params": "a:5:{s:16:\"min_items_in_box\";i:0;s:16:\"max_items_in_box\";i:0;s:10:\"box_length\";i:0;s:9:\"box_width\";i:0;s:10:\"box_height\";i:0;}", + "facebook_obj_type": "", + "buy_now_url": "", + "price": "430.000000", + "category_ids": [ + 12 + ], + "seo_name": "hopper-dryer", + "seo_path": "11/12", + "main_category": 12, + "options_type_raw": null, + "exceptions_type_raw": null, + "tracking_raw": null, + "zero_price_action_raw": null, + "min_qty_raw": null, + "max_qty_raw": null, + "qty_step_raw": null, + "list_qty_count_raw": null, + "details_layout_raw": "default", + "variation_features": [], + "main_pair": { + "pair_id": "122", + "image_id": "0", + "detailed_id": "8738", + "position": "0", + "object_id": "22", + "object_type": "product", + "detailed": { + "object_id": "22", + "object_type": "product", + "type": "M", + "image_path": "https://shop.osr-plastic.org/images/detailed/8/dryer.jpeg", + "alt": "", + "image_x": "300", + "image_y": "300", + "http_image_path": "http://shop.osr-plastic.org/images/detailed/8/dryer.jpeg", + "https_image_path": "https://shop.osr-plastic.org/images/detailed/8/dryer.jpeg", + "absolute_path": "/var/www/vhosts/osr-plastic.org/shop.osr-plastic.org/images/detailed/8/dryer.jpeg", + "relative_path": "detailed/8/dryer.jpeg", + "is_high_res": false + } + }, + "image_pairs": { + "123": { + "pair_id": "123", + "image_id": "0", + "detailed_id": "8739", + "position": "1", + "object_id": "22", + "object_type": "product", + "detailed": { + "object_id": "22", + "object_type": "product", + "type": "A", + "image_path": "https://shop.osr-plastic.org/images/detailed/8/hopper-dryer-123.JPG", + "alt": "", + "image_x": "591", + "image_y": "288", + "http_image_path": "http://shop.osr-plastic.org/images/detailed/8/hopper-dryer-123.JPG", + "https_image_path": "https://shop.osr-plastic.org/images/detailed/8/hopper-dryer-123.JPG", + "absolute_path": "/var/www/vhosts/osr-plastic.org/shop.osr-plastic.org/images/detailed/8/hopper-dryer-123.JPG", + "relative_path": "detailed/8/hopper-dryer-123.JPG", + "is_high_res": false + } + } + }, + "base_price": "430.000000", + "selected_options": [], + "has_options": false, + "product_options": [], + "discounts": { + "A": 0, + "P": 0 + }, + "product_features": [], + "qty_content": [] + }, + { + "product_id": "21", + "product": "Precious Plastic Extrusion Screw & Barrel v4 / Pro", + "product_type": "P", + "parent_product_id": "0", + "product_code": "", + "status": "A", + "company_id": "1", + "list_price": "0.00", + "amount": "1", + "weight": "0.000", + "length": "0", + "width": "0", + "height": "0", + "shipping_freight": "0.00", + "low_avail_limit": "0", + "timestamp": "1644671937", + "updated_timestamp": "1644671949", + "usergroup_ids": "0", + "is_edp": "N", + "edp_shipping": "N", + "unlimited_download": "N", + "tracking": "D", + "free_shipping": "N", + "zero_price_action": "R", + "is_pbp": "Y", + "is_op": "N", + "is_oper": "N", + "is_returnable": "Y", + "return_period": "10", + "avail_since": "0", + "out_of_stock_actions": "N", + "localization": "", + "min_qty": "0", + "max_qty": "0", + "qty_step": "0", + "list_qty_count": "0", + "tax_ids": "", + "age_verification": "N", + "age_limit": "0", + "options_type": "P", + "exceptions_type": "F", + "details_layout": "default", + "shipping_params": "a:5:{s:16:\"min_items_in_box\";i:0;s:16:\"max_items_in_box\";i:0;s:10:\"box_length\";i:0;s:9:\"box_width\";i:0;s:10:\"box_height\";i:0;}", + "facebook_obj_type": "", + "buy_now_url": "", + "price": "350.000000", + "category_ids": [ + 12 + ], + "seo_name": "precious-plastic-extrusion-screw-and-barrel-v4-pro", + "seo_path": "11/12", + "main_category": 12, + "options_type_raw": null, + "exceptions_type_raw": null, + "tracking_raw": null, + "zero_price_action_raw": null, + "min_qty_raw": null, + "max_qty_raw": null, + "qty_step_raw": null, + "list_qty_count_raw": null, + "details_layout_raw": "default", + "variation_features": [], + "main_pair": { + "pair_id": "121", + "image_id": "0", + "detailed_id": "8737", + "position": "0", + "object_id": "21", + "object_type": "product", + "detailed": { + "object_id": "21", + "object_type": "product", + "type": "M", + "image_path": "https://shop.osr-plastic.org/images/detailed/8/precious-plastic-extrusion-screw-and-barrel-v4-pro-121.jpeg", + "alt": "", + "image_x": "1000", + "image_y": "500", + "http_image_path": "http://shop.osr-plastic.org/images/detailed/8/precious-plastic-extrusion-screw-and-barrel-v4-pro-121.jpeg", + "https_image_path": "https://shop.osr-plastic.org/images/detailed/8/precious-plastic-extrusion-screw-and-barrel-v4-pro-121.jpeg", + "absolute_path": "/var/www/vhosts/osr-plastic.org/shop.osr-plastic.org/images/detailed/8/precious-plastic-extrusion-screw-and-barrel-v4-pro-121.jpeg", + "relative_path": "detailed/8/precious-plastic-extrusion-screw-and-barrel-v4-pro-121.jpeg", + "is_high_res": false + } + }, + "image_pairs": { + "120": { + "pair_id": "120", + "image_id": "0", + "detailed_id": "8736", + "position": "1", + "object_id": "21", + "object_type": "product", + "detailed": { + "object_id": "21", + "object_type": "product", + "type": "A", + "image_path": "https://shop.osr-plastic.org/images/detailed/8/v4-screw-drawing.jpeg", + "alt": "", + "image_x": "799", + "image_y": "445", + "http_image_path": "http://shop.osr-plastic.org/images/detailed/8/v4-screw-drawing.jpeg", + "https_image_path": "https://shop.osr-plastic.org/images/detailed/8/v4-screw-drawing.jpeg", + "absolute_path": "/var/www/vhosts/osr-plastic.org/shop.osr-plastic.org/images/detailed/8/v4-screw-drawing.jpeg", + "relative_path": "detailed/8/v4-screw-drawing.jpeg", + "is_high_res": false + } + } + }, + "base_price": "350.000000", + "selected_options": [], + "has_options": false, + "product_options": [], + "discounts": { + "A": 0, + "P": 0 + }, + "product_features": [], + "qty_content": [] + }, + { + "product_id": "20", + "product": "Obelix-XM-300", + "product_type": "P", + "parent_product_id": "0", + "product_code": "", + "status": "A", + "company_id": "1", + "list_price": "0.00", + "amount": "1", + "weight": "0.000", + "length": "0", + "width": "0", + "height": "0", + "shipping_freight": "0.00", + "low_avail_limit": "0", + "timestamp": "1644668134", + "updated_timestamp": "1644939177", + "usergroup_ids": "0", + "is_edp": "N", + "edp_shipping": "N", + "unlimited_download": "N", + "tracking": "D", + "free_shipping": "N", + "zero_price_action": "R", + "is_pbp": "Y", + "is_op": "N", + "is_oper": "N", + "is_returnable": "Y", + "return_period": "10", + "avail_since": "0", + "out_of_stock_actions": "N", + "localization": "", + "min_qty": "0", + "max_qty": "0", + "qty_step": "0", + "list_qty_count": "0", + "tax_ids": "", + "age_verification": "N", + "age_limit": "0", + "options_type": "P", + "exceptions_type": "F", + "details_layout": "default", + "shipping_params": "a:5:{s:16:\"min_items_in_box\";i:0;s:16:\"max_items_in_box\";i:0;s:10:\"box_length\";i:0;s:9:\"box_width\";i:0;s:10:\"box_height\";i:0;}", + "facebook_obj_type": "", + "buy_now_url": "", + "price": "7200.000000", + "category_ids": [ + 21 + ], + "seo_name": "obelix-xm-300", + "seo_path": "6/21", + "main_category": 21, + "options_type_raw": null, + "exceptions_type_raw": null, + "tracking_raw": null, + "zero_price_action_raw": null, + "min_qty_raw": null, + "max_qty_raw": null, + "qty_step_raw": null, + "list_qty_count_raw": null, + "details_layout_raw": "default", + "variation_features": [], + "main_pair": { + "pair_id": "141", + "image_id": "0", + "detailed_id": "8757", + "position": "0", + "object_id": "20", + "object_type": "product", + "detailed": { + "object_id": "20", + "object_type": "product", + "type": "M", + "image_path": "https://shop.osr-plastic.org/images/detailed/8/shr.jpg", + "alt": "", + "image_x": "800", + "image_y": "800", + "http_image_path": "http://shop.osr-plastic.org/images/detailed/8/shr.jpg", + "https_image_path": "https://shop.osr-plastic.org/images/detailed/8/shr.jpg", + "absolute_path": "/var/www/vhosts/osr-plastic.org/shop.osr-plastic.org/images/detailed/8/shr.jpg", + "relative_path": "detailed/8/shr.jpg", + "is_high_res": false + } + }, + "image_pairs": { + "116": { + "pair_id": "116", + "image_id": "0", + "detailed_id": "8732", + "position": "2", + "object_id": "20", + "object_type": "product", + "detailed": { + "object_id": "20", + "object_type": "product", + "type": "A", + "image_path": "https://shop.osr-plastic.org/images/detailed/8/obelix-xm-300-116.jpg", + "alt": "", + "image_x": "3072", + "image_y": "4096", + "http_image_path": "http://shop.osr-plastic.org/images/detailed/8/obelix-xm-300-116.jpg", + "https_image_path": "https://shop.osr-plastic.org/images/detailed/8/obelix-xm-300-116.jpg", + "absolute_path": "/var/www/vhosts/osr-plastic.org/shop.osr-plastic.org/images/detailed/8/obelix-xm-300-116.jpg", + "relative_path": "detailed/8/obelix-xm-300-116.jpg", + "is_high_res": false + } + }, + "118": { + "pair_id": "118", + "image_id": "0", + "detailed_id": "8734", + "position": "3", + "object_id": "20", + "object_type": "product", + "detailed": { + "object_id": "20", + "object_type": "product", + "type": "A", + "image_path": "https://shop.osr-plastic.org/images/detailed/8/obelix-xm-300-118.JPG", + "alt": "", + "image_x": "665", + "image_y": "621", + "http_image_path": "http://shop.osr-plastic.org/images/detailed/8/obelix-xm-300-118.JPG", + "https_image_path": "https://shop.osr-plastic.org/images/detailed/8/obelix-xm-300-118.JPG", + "absolute_path": "/var/www/vhosts/osr-plastic.org/shop.osr-plastic.org/images/detailed/8/obelix-xm-300-118.JPG", + "relative_path": "detailed/8/obelix-xm-300-118.JPG", + "is_high_res": false + } + }, + "119": { + "pair_id": "119", + "image_id": "0", + "detailed_id": "8735", + "position": "4", + "object_id": "20", + "object_type": "product", + "detailed": { + "object_id": "20", + "object_type": "product", + "type": "A", + "image_path": "https://shop.osr-plastic.org/images/detailed/8/obelix-xm-300-119.jpg", + "alt": "", + "image_x": "746", + "image_y": "942", + "http_image_path": "http://shop.osr-plastic.org/images/detailed/8/obelix-xm-300-119.jpg", + "https_image_path": "https://shop.osr-plastic.org/images/detailed/8/obelix-xm-300-119.jpg", + "absolute_path": "/var/www/vhosts/osr-plastic.org/shop.osr-plastic.org/images/detailed/8/obelix-xm-300-119.jpg", + "relative_path": "detailed/8/obelix-xm-300-119.jpg", + "is_high_res": false + } + } + }, + "base_price": "7200.000000", + "selected_options": [], + "has_options": true, + "product_options": [], + "discounts": { + "A": 0, + "P": 0 + }, + "product_features": [], + "qty_content": [] + }, + { + "product_id": "19", + "product": "Hand Cranked Shredder", + "product_type": "P", + "parent_product_id": "0", + "product_code": "", + "status": "A", + "company_id": "1", + "list_price": "0.00", + "amount": "1", + "weight": "0.000", + "length": "0", + "width": "0", + "height": "0", + "shipping_freight": "0.00", + "low_avail_limit": "0", + "timestamp": "1644428621", + "updated_timestamp": "1644521073", + "usergroup_ids": "0", + "is_edp": "N", + "edp_shipping": "N", + "unlimited_download": "N", + "tracking": "D", + "free_shipping": "N", + "zero_price_action": "R", + "is_pbp": "Y", + "is_op": "N", + "is_oper": "N", + "is_returnable": "Y", + "return_period": "10", + "avail_since": "0", + "out_of_stock_actions": "N", + "localization": "", + "min_qty": "0", + "max_qty": "0", + "qty_step": "0", + "list_qty_count": "0", + "tax_ids": "", + "age_verification": "N", + "age_limit": "0", + "options_type": "P", + "exceptions_type": "F", + "details_layout": "default", + "shipping_params": "a:5:{s:16:\"min_items_in_box\";i:0;s:16:\"max_items_in_box\";i:0;s:10:\"box_length\";i:0;s:9:\"box_width\";i:0;s:10:\"box_height\";i:0;}", + "facebook_obj_type": "", + "buy_now_url": "", + "price": "850.000000", + "category_ids": [ + 19 + ], + "seo_name": "hand-cranked-shredder", + "seo_path": "6/19", + "main_category": 19, + "options_type_raw": null, + "exceptions_type_raw": null, + "tracking_raw": null, + "zero_price_action_raw": null, + "min_qty_raw": null, + "max_qty_raw": null, + "qty_step_raw": null, + "list_qty_count_raw": null, + "details_layout_raw": "default", + "variation_features": [], + "main_pair": { + "pair_id": "110", + "image_id": "0", + "detailed_id": "8726", + "position": "0", + "object_id": "19", + "object_type": "product", + "detailed": { + "object_id": "19", + "object_type": "product", + "type": "M", + "image_path": "https://shop.osr-plastic.org/images/detailed/8/DSC00549.JPG", + "alt": "", + "image_x": "1080", + "image_y": "1364", + "http_image_path": "http://shop.osr-plastic.org/images/detailed/8/DSC00549.JPG", + "https_image_path": "https://shop.osr-plastic.org/images/detailed/8/DSC00549.JPG", + "absolute_path": "/var/www/vhosts/osr-plastic.org/shop.osr-plastic.org/images/detailed/8/DSC00549.JPG", + "relative_path": "detailed/8/DSC00549.JPG", + "is_high_res": false + } + }, + "image_pairs": { + "111": { + "pair_id": "111", + "image_id": "0", + "detailed_id": "8727", + "position": "1", + "object_id": "19", + "object_type": "product", + "detailed": { + "object_id": "19", + "object_type": "product", + "type": "A", + "image_path": "https://shop.osr-plastic.org/images/detailed/8/hand-cranked-shredder-111.JPG", + "alt": "", + "image_x": "1394", + "image_y": "1080", + "http_image_path": "http://shop.osr-plastic.org/images/detailed/8/hand-cranked-shredder-111.JPG", + "https_image_path": "https://shop.osr-plastic.org/images/detailed/8/hand-cranked-shredder-111.JPG", + "absolute_path": "/var/www/vhosts/osr-plastic.org/shop.osr-plastic.org/images/detailed/8/hand-cranked-shredder-111.JPG", + "relative_path": "detailed/8/hand-cranked-shredder-111.JPG", + "is_high_res": false + } + }, + "112": { + "pair_id": "112", + "image_id": "0", + "detailed_id": "8728", + "position": "2", + "object_id": "19", + "object_type": "product", + "detailed": { + "object_id": "19", + "object_type": "product", + "type": "A", + "image_path": "https://shop.osr-plastic.org/images/detailed/8/hand-cranked-shredder-112.JPG", + "alt": "", + "image_x": "1383", + "image_y": "1080", + "http_image_path": "http://shop.osr-plastic.org/images/detailed/8/hand-cranked-shredder-112.JPG", + "https_image_path": "https://shop.osr-plastic.org/images/detailed/8/hand-cranked-shredder-112.JPG", + "absolute_path": "/var/www/vhosts/osr-plastic.org/shop.osr-plastic.org/images/detailed/8/hand-cranked-shredder-112.JPG", + "relative_path": "detailed/8/hand-cranked-shredder-112.JPG", + "is_high_res": false + } + } + }, + "base_price": "850.000000", + "selected_options": [], + "has_options": false, + "product_options": [], + "discounts": { + "A": 0, + "P": 0 + }, + "product_features": [], + "qty_content": [] + }, + { + "product_id": "18", + "product": "Grinder - Idefix", + "product_type": "P", + "parent_product_id": "0", + "product_code": "", + "status": "A", + "company_id": "1", + "list_price": "0.00", + "amount": "1", + "weight": "0.000", + "length": "0", + "width": "0", + "height": "0", + "shipping_freight": "0.00", + "low_avail_limit": "0", + "timestamp": "1644427431", + "updated_timestamp": "1644939313", + "usergroup_ids": "0", + "is_edp": "N", + "edp_shipping": "N", + "unlimited_download": "N", + "tracking": "D", + "free_shipping": "N", + "zero_price_action": "R", + "is_pbp": "Y", + "is_op": "N", + "is_oper": "N", + "is_returnable": "Y", + "return_period": "10", + "avail_since": "0", + "out_of_stock_actions": "N", + "localization": "", + "min_qty": "0", + "max_qty": "0", + "qty_step": "0", + "list_qty_count": "0", + "tax_ids": "", + "age_verification": "N", + "age_limit": "0", + "options_type": "P", + "exceptions_type": "F", + "details_layout": "default", + "shipping_params": "a:5:{s:16:\"min_items_in_box\";i:0;s:16:\"max_items_in_box\";i:0;s:10:\"box_length\";i:0;s:9:\"box_width\";i:0;s:10:\"box_height\";i:0;}", + "facebook_obj_type": "", + "buy_now_url": "", + "price": "1800.000000", + "category_ids": [ + 19 + ], + "seo_name": "grinder-idefix", + "seo_path": "6/19", + "main_category": 19, + "options_type_raw": null, + "exceptions_type_raw": null, + "tracking_raw": null, + "zero_price_action_raw": null, + "min_qty_raw": null, + "max_qty_raw": null, + "qty_step_raw": null, + "list_qty_count_raw": null, + "details_layout_raw": "default", + "variation_features": [], + "main_pair": { + "pair_id": "103", + "image_id": "0", + "detailed_id": "8719", + "position": "0", + "object_id": "18", + "object_type": "product", + "detailed": { + "object_id": "18", + "object_type": "product", + "type": "M", + "image_path": "https://shop.osr-plastic.org/images/detailed/8/grinder-idefix-103.JPG", + "alt": "", + "image_x": "1984", + "image_y": "2976", + "http_image_path": "http://shop.osr-plastic.org/images/detailed/8/grinder-idefix-103.JPG", + "https_image_path": "https://shop.osr-plastic.org/images/detailed/8/grinder-idefix-103.JPG", + "absolute_path": "/var/www/vhosts/osr-plastic.org/shop.osr-plastic.org/images/detailed/8/grinder-idefix-103.JPG", + "relative_path": "detailed/8/grinder-idefix-103.JPG", + "is_high_res": false + } + }, + "image_pairs": { + "102": { + "pair_id": "102", + "image_id": "0", + "detailed_id": "8718", + "position": "1", + "object_id": "18", + "object_type": "product", + "detailed": { + "object_id": "18", + "object_type": "product", + "type": "A", + "image_path": "https://shop.osr-plastic.org/images/detailed/8/perspective_qv9o-6p.JPG", + "alt": "", + "image_x": "1569", + "image_y": "1255", + "http_image_path": "http://shop.osr-plastic.org/images/detailed/8/perspective_qv9o-6p.JPG", + "https_image_path": "https://shop.osr-plastic.org/images/detailed/8/perspective_qv9o-6p.JPG", + "absolute_path": "/var/www/vhosts/osr-plastic.org/shop.osr-plastic.org/images/detailed/8/perspective_qv9o-6p.JPG", + "relative_path": "detailed/8/perspective_qv9o-6p.JPG", + "is_high_res": false + } + }, + "104": { + "pair_id": "104", + "image_id": "0", + "detailed_id": "8720", + "position": "2", + "object_id": "18", + "object_type": "product", + "detailed": { + "object_id": "18", + "object_type": "product", + "type": "A", + "image_path": "https://shop.osr-plastic.org/images/detailed/8/grinder-idefix-104.jpg", + "alt": "", + "image_x": "1569", + "image_y": "1255", + "http_image_path": "http://shop.osr-plastic.org/images/detailed/8/grinder-idefix-104.jpg", + "https_image_path": "https://shop.osr-plastic.org/images/detailed/8/grinder-idefix-104.jpg", + "absolute_path": "/var/www/vhosts/osr-plastic.org/shop.osr-plastic.org/images/detailed/8/grinder-idefix-104.jpg", + "relative_path": "detailed/8/grinder-idefix-104.jpg", + "is_high_res": false + } + }, + "105": { + "pair_id": "105", + "image_id": "0", + "detailed_id": "8721", + "position": "3", + "object_id": "18", + "object_type": "product", + "detailed": { + "object_id": "18", + "object_type": "product", + "type": "A", + "image_path": "https://shop.osr-plastic.org/images/detailed/8/grinder-idefix-105.JPG", + "alt": "", + "image_x": "2976", + "image_y": "1984", + "http_image_path": "http://shop.osr-plastic.org/images/detailed/8/grinder-idefix-105.JPG", + "https_image_path": "https://shop.osr-plastic.org/images/detailed/8/grinder-idefix-105.JPG", + "absolute_path": "/var/www/vhosts/osr-plastic.org/shop.osr-plastic.org/images/detailed/8/grinder-idefix-105.JPG", + "relative_path": "detailed/8/grinder-idefix-105.JPG", + "is_high_res": false + } + }, + "106": { + "pair_id": "106", + "image_id": "0", + "detailed_id": "8722", + "position": "4", + "object_id": "18", + "object_type": "product", + "detailed": { + "object_id": "18", + "object_type": "product", + "type": "A", + "image_path": "https://shop.osr-plastic.org/images/detailed/8/grinder-idefix-106.JPG", + "alt": "", + "image_x": "1984", + "image_y": "2976", + "http_image_path": "http://shop.osr-plastic.org/images/detailed/8/grinder-idefix-106.JPG", + "https_image_path": "https://shop.osr-plastic.org/images/detailed/8/grinder-idefix-106.JPG", + "absolute_path": "/var/www/vhosts/osr-plastic.org/shop.osr-plastic.org/images/detailed/8/grinder-idefix-106.JPG", + "relative_path": "detailed/8/grinder-idefix-106.JPG", + "is_high_res": false + } + } + }, + "base_price": "1800.000000", + "selected_options": [], + "has_options": true, + "product_options": [], + "discounts": { + "A": 0, + "P": 0 + }, + "product_features": [], + "qty_content": [] + }, + { + "product_id": "17", + "product": "Injection Barrel - Kit", + "product_type": "P", + "parent_product_id": "0", + "product_code": "", + "status": "A", + "company_id": "1", + "list_price": "0.00", + "amount": "1", + "weight": "0.000", + "length": "0", + "width": "0", + "height": "0", + "shipping_freight": "0.00", + "low_avail_limit": "0", + "timestamp": "1644421975", + "updated_timestamp": "1644520730", + "usergroup_ids": "0", + "is_edp": "N", + "edp_shipping": "N", + "unlimited_download": "N", + "tracking": "D", + "free_shipping": "N", + "zero_price_action": "R", + "is_pbp": "Y", + "is_op": "N", + "is_oper": "N", + "is_returnable": "Y", + "return_period": "10", + "avail_since": "0", + "out_of_stock_actions": "N", + "localization": "", + "min_qty": "0", + "max_qty": "0", + "qty_step": "0", + "list_qty_count": "0", + "tax_ids": "", + "age_verification": "N", + "age_limit": "0", + "options_type": "P", + "exceptions_type": "F", + "details_layout": "default", + "shipping_params": "a:5:{s:16:\"min_items_in_box\";i:0;s:16:\"max_items_in_box\";i:0;s:10:\"box_length\";i:0;s:9:\"box_width\";i:0;s:10:\"box_height\";i:0;}", + "facebook_obj_type": "", + "buy_now_url": "", + "price": "850.000000", + "category_ids": [ + 8 + ], + "seo_name": "injection-barrel-kit", + "seo_path": "7/8", + "main_category": 8, + "options_type_raw": null, + "exceptions_type_raw": null, + "tracking_raw": null, + "zero_price_action_raw": null, + "min_qty_raw": null, + "max_qty_raw": null, + "qty_step_raw": null, + "list_qty_count_raw": null, + "details_layout_raw": "default", + "variation_features": [], + "main_pair": { + "pair_id": "96", + "image_id": "0", + "detailed_id": "8712", + "position": "0", + "object_id": "17", + "object_type": "product", + "detailed": { + "object_id": "17", + "object_type": "product", + "type": "M", + "image_path": "https://shop.osr-plastic.org/images/detailed/8/DSC00737.JPG", + "alt": "", + "image_x": "4000", + "image_y": "4000", + "http_image_path": "http://shop.osr-plastic.org/images/detailed/8/DSC00737.JPG", + "https_image_path": "https://shop.osr-plastic.org/images/detailed/8/DSC00737.JPG", + "absolute_path": "/var/www/vhosts/osr-plastic.org/shop.osr-plastic.org/images/detailed/8/DSC00737.JPG", + "relative_path": "detailed/8/DSC00737.JPG", + "is_high_res": false + } + }, + "image_pairs": { + "97": { + "pair_id": "97", + "image_id": "0", + "detailed_id": "8713", + "position": "1", + "object_id": "17", + "object_type": "product", + "detailed": { + "object_id": "17", + "object_type": "product", + "type": "A", + "image_path": "https://shop.osr-plastic.org/images/detailed/8/injection-barrel-kit-97.jpg", + "alt": "", + "image_x": "1771", + "image_y": "1183", + "http_image_path": "http://shop.osr-plastic.org/images/detailed/8/injection-barrel-kit-97.jpg", + "https_image_path": "https://shop.osr-plastic.org/images/detailed/8/injection-barrel-kit-97.jpg", + "absolute_path": "/var/www/vhosts/osr-plastic.org/shop.osr-plastic.org/images/detailed/8/injection-barrel-kit-97.jpg", + "relative_path": "detailed/8/injection-barrel-kit-97.jpg", + "is_high_res": false + } + }, + "98": { + "pair_id": "98", + "image_id": "0", + "detailed_id": "8714", + "position": "2", + "object_id": "17", + "object_type": "product", + "detailed": { + "object_id": "17", + "object_type": "product", + "type": "A", + "image_path": "https://shop.osr-plastic.org/images/detailed/8/injection-barrel-kit-98.JPG", + "alt": "", + "image_x": "1919", + "image_y": "1080", + "http_image_path": "http://shop.osr-plastic.org/images/detailed/8/injection-barrel-kit-98.JPG", + "https_image_path": "https://shop.osr-plastic.org/images/detailed/8/injection-barrel-kit-98.JPG", + "absolute_path": "/var/www/vhosts/osr-plastic.org/shop.osr-plastic.org/images/detailed/8/injection-barrel-kit-98.JPG", + "relative_path": "detailed/8/injection-barrel-kit-98.JPG", + "is_high_res": false + } + }, + "99": { + "pair_id": "99", + "image_id": "0", + "detailed_id": "8715", + "position": "3", + "object_id": "17", + "object_type": "product", + "detailed": { + "object_id": "17", + "object_type": "product", + "type": "A", + "image_path": "https://shop.osr-plastic.org/images/detailed/8/injection-barrel-kit-99.JPG", + "alt": "", + "image_x": "838", + "image_y": "851", + "http_image_path": "http://shop.osr-plastic.org/images/detailed/8/injection-barrel-kit-99.JPG", + "https_image_path": "https://shop.osr-plastic.org/images/detailed/8/injection-barrel-kit-99.JPG", + "absolute_path": "/var/www/vhosts/osr-plastic.org/shop.osr-plastic.org/images/detailed/8/injection-barrel-kit-99.JPG", + "relative_path": "detailed/8/injection-barrel-kit-99.JPG", + "is_high_res": false + } + } + }, + "base_price": "850.000000", + "selected_options": [], + "has_options": false, + "product_options": [], + "discounts": { + "A": 0, + "P": 0 + }, + "product_features": [], + "qty_content": [] + }, + { + "product_id": "16", + "product": "Extrusion - v4.5 - Lydia - Kit", + "product_type": "P", + "parent_product_id": "0", + "product_code": "", + "status": "A", + "company_id": "1", + "list_price": "0.00", + "amount": "1", + "weight": "0.000", + "length": "0", + "width": "0", + "height": "0", + "shipping_freight": "0.00", + "low_avail_limit": "0", + "timestamp": "1644420782", + "updated_timestamp": "1644929745", + "usergroup_ids": "0", + "is_edp": "N", + "edp_shipping": "N", + "unlimited_download": "N", + "tracking": "D", + "free_shipping": "N", + "zero_price_action": "R", + "is_pbp": "Y", + "is_op": "N", + "is_oper": "N", + "is_returnable": "Y", + "return_period": "10", + "avail_since": "0", + "out_of_stock_actions": "N", + "localization": "", + "min_qty": "0", + "max_qty": "0", + "qty_step": "0", + "list_qty_count": "0", + "tax_ids": "", + "age_verification": "N", + "age_limit": "0", + "options_type": "P", + "exceptions_type": "F", + "details_layout": "default", + "shipping_params": "a:5:{s:16:\"min_items_in_box\";i:0;s:16:\"max_items_in_box\";i:0;s:10:\"box_length\";i:0;s:9:\"box_width\";i:0;s:10:\"box_height\";i:0;}", + "facebook_obj_type": "", + "buy_now_url": "", + "price": "750.000000", + "category_ids": [ + 12 + ], + "seo_name": "extrusion-v4.5-lydia-kit", + "seo_path": "11/12", + "main_category": 12, + "options_type_raw": null, + "exceptions_type_raw": null, + "tracking_raw": null, + "zero_price_action_raw": null, + "min_qty_raw": null, + "max_qty_raw": null, + "qty_step_raw": null, + "list_qty_count_raw": null, + "details_layout_raw": "default", + "variation_features": [], + "main_pair": { + "pair_id": "95", + "image_id": "0", + "detailed_id": "8711", + "position": "0", + "object_id": "16", + "object_type": "product", + "detailed": { + "object_id": "16", + "object_type": "product", + "type": "M", + "image_path": "https://shop.osr-plastic.org/images/detailed/8/latest.jpg", + "alt": "", + "image_x": "1617", + "image_y": "1080", + "http_image_path": "http://shop.osr-plastic.org/images/detailed/8/latest.jpg", + "https_image_path": "https://shop.osr-plastic.org/images/detailed/8/latest.jpg", + "absolute_path": "/var/www/vhosts/osr-plastic.org/shop.osr-plastic.org/images/detailed/8/latest.jpg", + "relative_path": "detailed/8/latest.jpg", + "is_high_res": false + } + }, + "image_pairs": { + "100": { + "pair_id": "100", + "image_id": "0", + "detailed_id": "8716", + "position": "1", + "object_id": "16", + "object_type": "product", + "detailed": { + "object_id": "16", + "object_type": "product", + "type": "A", + "image_path": "https://shop.osr-plastic.org/images/detailed/8/extrusion-v4.5-lydia-kit-100.jpg", + "alt": "", + "image_x": "1617", + "image_y": "1080", + "http_image_path": "http://shop.osr-plastic.org/images/detailed/8/extrusion-v4.5-lydia-kit-100.jpg", + "https_image_path": "https://shop.osr-plastic.org/images/detailed/8/extrusion-v4.5-lydia-kit-100.jpg", + "absolute_path": "/var/www/vhosts/osr-plastic.org/shop.osr-plastic.org/images/detailed/8/extrusion-v4.5-lydia-kit-100.jpg", + "relative_path": "detailed/8/extrusion-v4.5-lydia-kit-100.jpg", + "is_high_res": false + } + }, + "101": { + "pair_id": "101", + "image_id": "0", + "detailed_id": "8717", + "position": "2", + "object_id": "16", + "object_type": "product", + "detailed": { + "object_id": "16", + "object_type": "product", + "type": "A", + "image_path": "https://shop.osr-plastic.org/images/detailed/8/extrusion-v4.5-lydia-kit-101.JPG", + "alt": "", + "image_x": "828", + "image_y": "797", + "http_image_path": "http://shop.osr-plastic.org/images/detailed/8/extrusion-v4.5-lydia-kit-101.JPG", + "https_image_path": "https://shop.osr-plastic.org/images/detailed/8/extrusion-v4.5-lydia-kit-101.JPG", + "absolute_path": "/var/www/vhosts/osr-plastic.org/shop.osr-plastic.org/images/detailed/8/extrusion-v4.5-lydia-kit-101.JPG", + "relative_path": "detailed/8/extrusion-v4.5-lydia-kit-101.JPG", + "is_high_res": false + } + }, + "113": { + "pair_id": "113", + "image_id": "0", + "detailed_id": "8729", + "position": "3", + "object_id": "16", + "object_type": "product", + "detailed": { + "object_id": "16", + "object_type": "product", + "type": "A", + "image_path": "https://shop.osr-plastic.org/images/detailed/8/extrusion-v4.5-lydia-kit-113.JPG", + "alt": "", + "image_x": "2183", + "image_y": "1972", + "http_image_path": "http://shop.osr-plastic.org/images/detailed/8/extrusion-v4.5-lydia-kit-113.JPG", + "https_image_path": "https://shop.osr-plastic.org/images/detailed/8/extrusion-v4.5-lydia-kit-113.JPG", + "absolute_path": "/var/www/vhosts/osr-plastic.org/shop.osr-plastic.org/images/detailed/8/extrusion-v4.5-lydia-kit-113.JPG", + "relative_path": "detailed/8/extrusion-v4.5-lydia-kit-113.JPG", + "is_high_res": false + } + } + }, + "base_price": "750.000000", + "selected_options": [], + "has_options": false, + "product_options": [], + "discounts": { + "A": 0, + "P": 0 + }, + "product_features": [], + "qty_content": [] + }, + { + "product_id": "15", + "product": "Extrusion Screw & Barrel - PreciousPlastic v3.0", + "product_type": "P", + "parent_product_id": "0", + "product_code": "", + "status": "A", + "company_id": "1", + "list_price": "0.00", + "amount": "1", + "weight": "0.000", + "length": "0", + "width": "0", + "height": "0", + "shipping_freight": "0.00", + "low_avail_limit": "0", + "timestamp": "1644350492", + "updated_timestamp": "1644350677", + "usergroup_ids": "0", + "is_edp": "N", + "edp_shipping": "N", + "unlimited_download": "N", + "tracking": "D", + "free_shipping": "N", + "zero_price_action": "R", + "is_pbp": "Y", + "is_op": "N", + "is_oper": "N", + "is_returnable": "Y", + "return_period": "10", + "avail_since": "0", + "out_of_stock_actions": "N", + "localization": "", + "min_qty": "0", + "max_qty": "0", + "qty_step": "0", + "list_qty_count": "0", + "tax_ids": "", + "age_verification": "N", + "age_limit": "0", + "options_type": "P", + "exceptions_type": "F", + "details_layout": "default", + "shipping_params": "a:5:{s:16:\"min_items_in_box\";i:0;s:16:\"max_items_in_box\";i:0;s:10:\"box_length\";i:0;s:9:\"box_width\";i:0;s:10:\"box_height\";i:0;}", + "facebook_obj_type": "", + "buy_now_url": "", + "price": "250.000000", + "category_ids": [ + 12 + ], + "seo_name": "extrusion-screw-pp-v3.0", + "seo_path": "11/12", + "main_category": 12, + "options_type_raw": null, + "exceptions_type_raw": null, + "tracking_raw": null, + "zero_price_action_raw": null, + "min_qty_raw": null, + "max_qty_raw": null, + "qty_step_raw": null, + "list_qty_count_raw": null, + "details_layout_raw": "default", + "variation_features": [], + "main_pair": { + "pair_id": "78", + "image_id": "0", + "detailed_id": "8694", + "position": "0", + "object_id": "15", + "object_type": "product", + "detailed": { + "object_id": "15", + "object_type": "product", + "type": "M", + "image_path": "https://shop.osr-plastic.org/images/detailed/8/v3-screw.jpeg", + "alt": "", + "image_x": "745", + "image_y": "450", + "http_image_path": "http://shop.osr-plastic.org/images/detailed/8/v3-screw.jpeg", + "https_image_path": "https://shop.osr-plastic.org/images/detailed/8/v3-screw.jpeg", + "absolute_path": "/var/www/vhosts/osr-plastic.org/shop.osr-plastic.org/images/detailed/8/v3-screw.jpeg", + "relative_path": "detailed/8/v3-screw.jpeg", + "is_high_res": false + } + }, + "image_pairs": { + "79": { + "pair_id": "79", + "image_id": "0", + "detailed_id": "8695", + "position": "1", + "object_id": "15", + "object_type": "product", + "detailed": { + "object_id": "15", + "object_type": "product", + "type": "A", + "image_path": "https://shop.osr-plastic.org/images/detailed/8/extrusion-screw-pp-v3.0-79.png", + "alt": "", + "image_x": "871", + "image_y": "636", + "http_image_path": "http://shop.osr-plastic.org/images/detailed/8/extrusion-screw-pp-v3.0-79.png", + "https_image_path": "https://shop.osr-plastic.org/images/detailed/8/extrusion-screw-pp-v3.0-79.png", + "absolute_path": "/var/www/vhosts/osr-plastic.org/shop.osr-plastic.org/images/detailed/8/extrusion-screw-pp-v3.0-79.png", + "relative_path": "detailed/8/extrusion-screw-pp-v3.0-79.png", + "is_high_res": false + } + }, + "80": { + "pair_id": "80", + "image_id": "0", + "detailed_id": "8696", + "position": "2", + "object_id": "15", + "object_type": "product", + "detailed": { + "object_id": "15", + "object_type": "product", + "type": "A", + "image_path": "https://shop.osr-plastic.org/images/detailed/8/extrusion-screw-pp-v3.0-80.png", + "alt": "", + "image_x": "800", + "image_y": "600", + "http_image_path": "http://shop.osr-plastic.org/images/detailed/8/extrusion-screw-pp-v3.0-80.png", + "https_image_path": "https://shop.osr-plastic.org/images/detailed/8/extrusion-screw-pp-v3.0-80.png", + "absolute_path": "/var/www/vhosts/osr-plastic.org/shop.osr-plastic.org/images/detailed/8/extrusion-screw-pp-v3.0-80.png", + "relative_path": "detailed/8/extrusion-screw-pp-v3.0-80.png", + "is_high_res": false + } + }, + "81": { + "pair_id": "81", + "image_id": "0", + "detailed_id": "8697", + "position": "3", + "object_id": "15", + "object_type": "product", + "detailed": { + "object_id": "15", + "object_type": "product", + "type": "A", + "image_path": "https://shop.osr-plastic.org/images/detailed/8/extrusion-screw-pp-v3.0-81.png", + "alt": "", + "image_x": "800", + "image_y": "405", + "http_image_path": "http://shop.osr-plastic.org/images/detailed/8/extrusion-screw-pp-v3.0-81.png", + "https_image_path": "https://shop.osr-plastic.org/images/detailed/8/extrusion-screw-pp-v3.0-81.png", + "absolute_path": "/var/www/vhosts/osr-plastic.org/shop.osr-plastic.org/images/detailed/8/extrusion-screw-pp-v3.0-81.png", + "relative_path": "detailed/8/extrusion-screw-pp-v3.0-81.png", + "is_high_res": false + } + } + }, + "base_price": "250.000000", + "selected_options": [], + "has_options": false, + "product_options": [], + "discounts": { + "A": 0, + "P": 0 + }, + "product_features": [], + "qty_content": [] + }, + { + "product_id": "14", + "product": "Filament Cooler", + "product_type": "P", + "parent_product_id": "0", + "product_code": "FLM", + "status": "A", + "company_id": "1", + "list_price": "0.00", + "amount": "1", + "weight": "0.000", + "length": "0", + "width": "0", + "height": "0", + "shipping_freight": "0.00", + "low_avail_limit": "0", + "timestamp": "1644343653", + "updated_timestamp": "1644864248", + "usergroup_ids": "0", + "is_edp": "N", + "edp_shipping": "N", + "unlimited_download": "N", + "tracking": "D", + "free_shipping": "N", + "zero_price_action": "R", + "is_pbp": "Y", + "is_op": "N", + "is_oper": "N", + "is_returnable": "Y", + "return_period": "10", + "avail_since": "0", + "out_of_stock_actions": "N", + "localization": "", + "min_qty": "0", + "max_qty": "0", + "qty_step": "0", + "list_qty_count": "0", + "tax_ids": "", + "age_verification": "N", + "age_limit": "0", + "options_type": "P", + "exceptions_type": "F", + "details_layout": "default", + "shipping_params": "a:5:{s:16:\"min_items_in_box\";i:0;s:16:\"max_items_in_box\";i:0;s:10:\"box_length\";i:0;s:9:\"box_width\";i:0;s:10:\"box_height\";i:0;}", + "facebook_obj_type": "", + "buy_now_url": "", + "price": "290.000000", + "category_ids": [ + 20, + 12 + ], + "seo_name": "filament-cooler", + "seo_path": "11/12", + "main_category": 12, + "options_type_raw": null, + "exceptions_type_raw": null, + "tracking_raw": null, + "zero_price_action_raw": null, + "min_qty_raw": null, + "max_qty_raw": null, + "qty_step_raw": null, + "list_qty_count_raw": null, + "details_layout_raw": "default", + "variation_features": [], + "main_pair": { + "pair_id": "76", + "image_id": "0", + "detailed_id": "8692", + "position": "0", + "object_id": "14", + "object_type": "product", + "detailed": { + "object_id": "14", + "object_type": "product", + "type": "M", + "image_path": "https://shop.osr-plastic.org/images/detailed/8/filament-cooler-76.jpg", + "alt": "", + "image_x": "2048", + "image_y": "2040", + "http_image_path": "http://shop.osr-plastic.org/images/detailed/8/filament-cooler-76.jpg", + "https_image_path": "https://shop.osr-plastic.org/images/detailed/8/filament-cooler-76.jpg", + "absolute_path": "/var/www/vhosts/osr-plastic.org/shop.osr-plastic.org/images/detailed/8/filament-cooler-76.jpg", + "relative_path": "detailed/8/filament-cooler-76.jpg", + "is_high_res": false + } + }, + "image_pairs": { + "75": { + "pair_id": "75", + "image_id": "0", + "detailed_id": "8691", + "position": "1", + "object_id": "14", + "object_type": "product", + "detailed": { + "object_id": "14", + "object_type": "product", + "type": "A", + "image_path": "https://shop.osr-plastic.org/images/detailed/8/perspective_2ayl-wq.jpg", + "alt": "", + "image_x": "1931", + "image_y": "1545", + "http_image_path": "http://shop.osr-plastic.org/images/detailed/8/perspective_2ayl-wq.jpg", + "https_image_path": "https://shop.osr-plastic.org/images/detailed/8/perspective_2ayl-wq.jpg", + "absolute_path": "/var/www/vhosts/osr-plastic.org/shop.osr-plastic.org/images/detailed/8/perspective_2ayl-wq.jpg", + "relative_path": "detailed/8/perspective_2ayl-wq.jpg", + "is_high_res": false + } + } + }, + "base_price": "290.000000", + "selected_options": [], + "has_options": false, + "product_options": [], + "discounts": { + "A": 0, + "P": 0 + }, + "product_features": [], + "qty_content": [] + }, + { + "product_id": "13", + "product": "Lydia - Mini", + "product_type": "P", + "parent_product_id": "0", + "product_code": "LM", + "status": "A", + "company_id": "1", + "list_price": "0.00", + "amount": "1", + "weight": "0.000", + "length": "0", + "width": "0", + "height": "0", + "shipping_freight": "0.00", + "low_avail_limit": "0", + "timestamp": "1644342464", + "updated_timestamp": "1644864299", + "usergroup_ids": "0", + "is_edp": "N", + "edp_shipping": "N", + "unlimited_download": "N", + "tracking": "D", + "free_shipping": "N", + "zero_price_action": "R", + "is_pbp": "Y", + "is_op": "N", + "is_oper": "N", + "is_returnable": "Y", + "return_period": "10", + "avail_since": "0", + "out_of_stock_actions": "N", + "localization": "", + "min_qty": "0", + "max_qty": "0", + "qty_step": "0", + "list_qty_count": "0", + "tax_ids": "", + "age_verification": "N", + "age_limit": "0", + "options_type": "P", + "exceptions_type": "F", + "details_layout": "default", + "shipping_params": "a:5:{s:16:\"min_items_in_box\";i:0;s:16:\"max_items_in_box\";i:0;s:10:\"box_length\";i:0;s:9:\"box_width\";i:0;s:10:\"box_height\";i:0;}", + "facebook_obj_type": "", + "buy_now_url": "", + "price": "1300.000000", + "category_ids": [ + 20, + 14 + ], + "seo_name": "lydia-mini", + "seo_path": "11/14", + "main_category": 14, + "options_type_raw": null, + "exceptions_type_raw": null, + "tracking_raw": null, + "zero_price_action_raw": null, + "min_qty_raw": null, + "max_qty_raw": null, + "qty_step_raw": null, + "list_qty_count_raw": null, + "details_layout_raw": "default", + "variation_features": [], + "main_pair": { + "pair_id": "77", + "image_id": "0", + "detailed_id": "8693", + "position": "0", + "object_id": "13", + "object_type": "product", + "detailed": { + "object_id": "13", + "object_type": "product", + "type": "M", + "image_path": "https://shop.osr-plastic.org/images/detailed/8/lydia-mini-77.jpg", + "alt": "", + "image_x": "1716", + "image_y": "2048", + "http_image_path": "http://shop.osr-plastic.org/images/detailed/8/lydia-mini-77.jpg", + "https_image_path": "https://shop.osr-plastic.org/images/detailed/8/lydia-mini-77.jpg", + "absolute_path": "/var/www/vhosts/osr-plastic.org/shop.osr-plastic.org/images/detailed/8/lydia-mini-77.jpg", + "relative_path": "detailed/8/lydia-mini-77.jpg", + "is_high_res": false + } + }, + "image_pairs": { + "74": { + "pair_id": "74", + "image_id": "0", + "detailed_id": "8690", + "position": "1", + "object_id": "13", + "object_type": "product", + "detailed": { + "object_id": "13", + "object_type": "product", + "type": "A", + "image_path": "https://shop.osr-plastic.org/images/detailed/8/perspective_j69l-oe.JPG", + "alt": "", + "image_x": "1931", + "image_y": "1545", + "http_image_path": "http://shop.osr-plastic.org/images/detailed/8/perspective_j69l-oe.JPG", + "https_image_path": "https://shop.osr-plastic.org/images/detailed/8/perspective_j69l-oe.JPG", + "absolute_path": "/var/www/vhosts/osr-plastic.org/shop.osr-plastic.org/images/detailed/8/perspective_j69l-oe.JPG", + "relative_path": "detailed/8/perspective_j69l-oe.JPG", + "is_high_res": false + } + } + }, + "base_price": "1300.000000", + "selected_options": [], + "has_options": false, + "product_options": [], + "discounts": { + "A": 0, + "P": 0 + }, + "product_features": [], + "qty_content": [] + }, + { + "product_id": "12", + "product": "elx", + "product_type": "P", + "parent_product_id": "0", + "product_code": "", + "status": "D", + "company_id": "1", + "list_price": "0.00", + "amount": "0", + "weight": "0.000", + "length": "0", + "width": "0", + "height": "0", + "shipping_freight": "0.00", + "low_avail_limit": "0", + "timestamp": "1644329325", + "updated_timestamp": "1644329376", + "usergroup_ids": "0", + "is_edp": "N", + "edp_shipping": "N", + "unlimited_download": "N", + "tracking": "D", + "free_shipping": "N", + "zero_price_action": "R", + "is_pbp": "N", + "is_op": "N", + "is_oper": "N", + "is_returnable": "Y", + "return_period": "10", + "avail_since": "0", + "out_of_stock_actions": "N", + "localization": "", + "min_qty": "0", + "max_qty": "0", + "qty_step": "0", + "list_qty_count": "0", + "tax_ids": "", + "age_verification": "N", + "age_limit": "0", + "options_type": "P", + "exceptions_type": "F", + "details_layout": "", + "shipping_params": "a:5:{s:16:\"min_items_in_box\";i:0;s:16:\"max_items_in_box\";i:0;s:10:\"box_length\";i:0;s:9:\"box_width\";i:0;s:10:\"box_height\";i:0;}", + "facebook_obj_type": "", + "buy_now_url": "", + "price": "11.000000", + "category_ids": [ + 11 + ], + "seo_name": "textss", + "seo_path": "11", + "main_category": 11, + "options_type_raw": null, + "exceptions_type_raw": null, + "tracking_raw": null, + "zero_price_action_raw": null, + "min_qty_raw": null, + "max_qty_raw": null, + "qty_step_raw": null, + "list_qty_count_raw": null, + "details_layout_raw": "", + "variation_features": [], + "base_price": "11.000000", + "selected_options": [], + "has_options": false, + "product_options": [], + "discounts": { + "A": 0, + "P": 0 + }, + "product_features": [], + "qty_content": [] + }, + { + "product_id": "11", + "product": "Elena XMAX", + "product_type": "P", + "parent_product_id": "0", + "product_code": "ELM", + "status": "A", + "company_id": "1", + "list_price": "0.00", + "amount": "1", + "weight": "0.000", + "length": "0", + "width": "0", + "height": "0", + "shipping_freight": "0.00", + "low_avail_limit": "0", + "timestamp": "1644318804", + "updated_timestamp": "1644938676", + "usergroup_ids": "0", + "is_edp": "N", + "edp_shipping": "N", + "unlimited_download": "N", + "tracking": "D", + "free_shipping": "N", + "zero_price_action": "R", + "is_pbp": "Y", + "is_op": "N", + "is_oper": "N", + "is_returnable": "Y", + "return_period": "10", + "avail_since": "0", + "out_of_stock_actions": "N", + "localization": "", + "min_qty": "0", + "max_qty": "0", + "qty_step": "0", + "list_qty_count": "0", + "tax_ids": "", + "age_verification": "N", + "age_limit": "0", + "options_type": "P", + "exceptions_type": "F", + "details_layout": "default", + "shipping_params": "a:5:{s:16:\"min_items_in_box\";i:0;s:16:\"max_items_in_box\";i:0;s:10:\"box_length\";i:0;s:9:\"box_width\";i:0;s:10:\"box_height\";i:0;}", + "facebook_obj_type": "", + "buy_now_url": "", + "price": "1835.000000", + "category_ids": [ + 10 + ], + "seo_name": "elena-xmax", + "seo_path": "7/10", + "main_category": 10, + "options_type_raw": null, + "exceptions_type_raw": null, + "tracking_raw": null, + "zero_price_action_raw": null, + "min_qty_raw": null, + "max_qty_raw": null, + "qty_step_raw": null, + "list_qty_count_raw": null, + "details_layout_raw": "default", + "variation_features": [], + "main_pair": { + "pair_id": "67", + "image_id": "0", + "detailed_id": "8683", + "position": "0", + "object_id": "11", + "object_type": "product", + "detailed": { + "object_id": "11", + "object_type": "product", + "type": "M", + "image_path": "https://shop.osr-plastic.org/images/detailed/8/elena-xmax-67.jpg", + "alt": "", + "image_x": "1679", + "image_y": "1680", + "http_image_path": "http://shop.osr-plastic.org/images/detailed/8/elena-xmax-67.jpg", + "https_image_path": "https://shop.osr-plastic.org/images/detailed/8/elena-xmax-67.jpg", + "absolute_path": "/var/www/vhosts/osr-plastic.org/shop.osr-plastic.org/images/detailed/8/elena-xmax-67.jpg", + "relative_path": "detailed/8/elena-xmax-67.jpg", + "is_high_res": false + } + }, + "image_pairs": { + "66": { + "pair_id": "66", + "image_id": "0", + "detailed_id": "8682", + "position": "1", + "object_id": "11", + "object_type": "product", + "detailed": { + "object_id": "11", + "object_type": "product", + "type": "A", + "image_path": "https://shop.osr-plastic.org/images/detailed/8/perspective_wfuy-xq.jpg", + "alt": "", + "image_x": "2135", + "image_y": "2135", + "http_image_path": "http://shop.osr-plastic.org/images/detailed/8/perspective_wfuy-xq.jpg", + "https_image_path": "https://shop.osr-plastic.org/images/detailed/8/perspective_wfuy-xq.jpg", + "absolute_path": "/var/www/vhosts/osr-plastic.org/shop.osr-plastic.org/images/detailed/8/perspective_wfuy-xq.jpg", + "relative_path": "detailed/8/perspective_wfuy-xq.jpg", + "is_high_res": false + } + } + }, + "base_price": "1835.000000", + "selected_options": [], + "has_options": true, + "product_options": [], + "discounts": { + "A": 0, + "P": 0 + }, + "product_features": [], + "qty_content": [] + }, + { + "product_id": "10", + "product": "Mold Service", + "product_type": "P", + "parent_product_id": "0", + "product_code": "", + "status": "A", + "company_id": "1", + "list_price": "0.00", + "amount": "1", + "weight": "0.000", + "length": "0", + "width": "0", + "height": "0", + "shipping_freight": "0.00", + "low_avail_limit": "0", + "timestamp": "1644164569", + "updated_timestamp": "1644402865", + "usergroup_ids": "0", + "is_edp": "N", + "edp_shipping": "N", + "unlimited_download": "N", + "tracking": "D", + "free_shipping": "N", + "zero_price_action": "R", + "is_pbp": "Y", + "is_op": "N", + "is_oper": "N", + "is_returnable": "Y", + "return_period": "10", + "avail_since": "0", + "out_of_stock_actions": "N", + "localization": "", + "min_qty": "0", + "max_qty": "0", + "qty_step": "0", + "list_qty_count": "0", + "tax_ids": "", + "age_verification": "N", + "age_limit": "0", + "options_type": "P", + "exceptions_type": "F", + "details_layout": "default", + "shipping_params": "a:5:{s:16:\"min_items_in_box\";i:0;s:16:\"max_items_in_box\";i:0;s:10:\"box_length\";i:0;s:9:\"box_width\";i:0;s:10:\"box_height\";i:0;}", + "facebook_obj_type": "", + "buy_now_url": "", + "price": "0.000000", + "category_ids": [ + 3 + ], + "seo_name": "mold-service", + "seo_path": "3", + "main_category": 3, + "options_type_raw": null, + "exceptions_type_raw": null, + "tracking_raw": null, + "zero_price_action_raw": null, + "min_qty_raw": null, + "max_qty_raw": null, + "qty_step_raw": null, + "list_qty_count_raw": null, + "details_layout_raw": "default", + "variation_features": [], + "main_pair": { + "pair_id": "59", + "image_id": "0", + "detailed_id": "8675", + "position": "0", + "object_id": "10", + "object_type": "product", + "detailed": { + "object_id": "10", + "object_type": "product", + "type": "M", + "image_path": "https://shop.osr-plastic.org/images/detailed/8/molds2.jpg", + "alt": "", + "image_x": "1254", + "image_y": "836", + "http_image_path": "http://shop.osr-plastic.org/images/detailed/8/molds2.jpg", + "https_image_path": "https://shop.osr-plastic.org/images/detailed/8/molds2.jpg", + "absolute_path": "/var/www/vhosts/osr-plastic.org/shop.osr-plastic.org/images/detailed/8/molds2.jpg", + "relative_path": "detailed/8/molds2.jpg", + "is_high_res": false + } + }, + "image_pairs": { + "58": { + "pair_id": "58", + "image_id": "0", + "detailed_id": "8674", + "position": "1", + "object_id": "10", + "object_type": "product", + "detailed": { + "object_id": "10", + "object_type": "product", + "type": "A", + "image_path": "https://shop.osr-plastic.org/images/detailed/8/molds.jpg", + "alt": "", + "image_x": "1254", + "image_y": "836", + "http_image_path": "http://shop.osr-plastic.org/images/detailed/8/molds.jpg", + "https_image_path": "https://shop.osr-plastic.org/images/detailed/8/molds.jpg", + "absolute_path": "/var/www/vhosts/osr-plastic.org/shop.osr-plastic.org/images/detailed/8/molds.jpg", + "relative_path": "detailed/8/molds.jpg", + "is_high_res": false + } + }, + "93": { + "pair_id": "93", + "image_id": "0", + "detailed_id": "8709", + "position": "2", + "object_id": "10", + "object_type": "product", + "detailed": { + "object_id": "10", + "object_type": "product", + "type": "A", + "image_path": "https://shop.osr-plastic.org/images/detailed/8/mold-service-93.JPG", + "alt": "", + "image_x": "2976", + "image_y": "1680", + "http_image_path": "http://shop.osr-plastic.org/images/detailed/8/mold-service-93.JPG", + "https_image_path": "https://shop.osr-plastic.org/images/detailed/8/mold-service-93.JPG", + "absolute_path": "/var/www/vhosts/osr-plastic.org/shop.osr-plastic.org/images/detailed/8/mold-service-93.JPG", + "relative_path": "detailed/8/mold-service-93.JPG", + "is_high_res": false + } + }, + "94": { + "pair_id": "94", + "image_id": "0", + "detailed_id": "8710", + "position": "3", + "object_id": "10", + "object_type": "product", + "detailed": { + "object_id": "10", + "object_type": "product", + "type": "A", + "image_path": "https://shop.osr-plastic.org/images/detailed/8/mold-service-94.JPG", + "alt": "", + "image_x": "1802", + "image_y": "1680", + "http_image_path": "http://shop.osr-plastic.org/images/detailed/8/mold-service-94.JPG", + "https_image_path": "https://shop.osr-plastic.org/images/detailed/8/mold-service-94.JPG", + "absolute_path": "/var/www/vhosts/osr-plastic.org/shop.osr-plastic.org/images/detailed/8/mold-service-94.JPG", + "relative_path": "detailed/8/mold-service-94.JPG", + "is_high_res": false + } + } + }, + "base_price": "0.000000", + "selected_options": [], + "has_options": false, + "product_options": [], + "discounts": { + "A": 0, + "P": 0 + }, + "product_features": [], + "qty_content": [] + }, + { + "product_id": "9", + "product": "Zoe - Shredder & Extrusion Combo", + "product_type": "P", + "parent_product_id": "0", + "product_code": "", + "status": "A", + "company_id": "1", + "list_price": "0.00", + "amount": "1", + "weight": "0.000", + "length": "0", + "width": "0", + "height": "0", + "shipping_freight": "0.00", + "low_avail_limit": "0", + "timestamp": "1644164492", + "updated_timestamp": "1644521248", + "usergroup_ids": "0", + "is_edp": "N", + "edp_shipping": "N", + "unlimited_download": "N", + "tracking": "D", + "free_shipping": "N", + "zero_price_action": "R", + "is_pbp": "Y", + "is_op": "N", + "is_oper": "N", + "is_returnable": "Y", + "return_period": "10", + "avail_since": "0", + "out_of_stock_actions": "N", + "localization": "", + "min_qty": "0", + "max_qty": "0", + "qty_step": "0", + "list_qty_count": "0", + "tax_ids": "", + "age_verification": "N", + "age_limit": "0", + "options_type": "P", + "exceptions_type": "F", + "details_layout": "default", + "shipping_params": "a:5:{s:16:\"min_items_in_box\";i:0;s:16:\"max_items_in_box\";i:0;s:10:\"box_length\";i:0;s:9:\"box_width\";i:0;s:10:\"box_height\";i:0;}", + "facebook_obj_type": "", + "buy_now_url": "", + "price": "4200.000000", + "category_ids": [ + 14, + 19 + ], + "seo_name": "zoe-shredder-and-extrusion-combo", + "seo_path": "6/19", + "main_category": 19, + "options_type_raw": null, + "exceptions_type_raw": null, + "tracking_raw": null, + "zero_price_action_raw": null, + "min_qty_raw": null, + "max_qty_raw": null, + "qty_step_raw": null, + "list_qty_count_raw": null, + "details_layout_raw": "default", + "variation_features": [], + "main_pair": { + "pair_id": "72", + "image_id": "0", + "detailed_id": "8688", + "position": "0", + "object_id": "9", + "object_type": "product", + "detailed": { + "object_id": "9", + "object_type": "product", + "type": "M", + "image_path": "https://shop.osr-plastic.org/images/detailed/8/zoe-shredder-and-extrusion-combo-72.jpg", + "alt": "", + "image_x": "2048", + "image_y": "1375", + "http_image_path": "http://shop.osr-plastic.org/images/detailed/8/zoe-shredder-and-extrusion-combo-72.jpg", + "https_image_path": "https://shop.osr-plastic.org/images/detailed/8/zoe-shredder-and-extrusion-combo-72.jpg", + "absolute_path": "/var/www/vhosts/osr-plastic.org/shop.osr-plastic.org/images/detailed/8/zoe-shredder-and-extrusion-combo-72.jpg", + "relative_path": "detailed/8/zoe-shredder-and-extrusion-combo-72.jpg", + "is_high_res": false + } + }, + "image_pairs": { + "56": { + "pair_id": "56", + "image_id": "0", + "detailed_id": "8672", + "position": "1", + "object_id": "9", + "object_type": "product", + "detailed": { + "object_id": "9", + "object_type": "product", + "type": "A", + "image_path": "https://shop.osr-plastic.org/images/detailed/8/RevB-Auto-Plunger.jpg", + "alt": "", + "image_x": "1999", + "image_y": "1545", + "http_image_path": "http://shop.osr-plastic.org/images/detailed/8/RevB-Auto-Plunger.jpg", + "https_image_path": "https://shop.osr-plastic.org/images/detailed/8/RevB-Auto-Plunger.jpg", + "absolute_path": "/var/www/vhosts/osr-plastic.org/shop.osr-plastic.org/images/detailed/8/RevB-Auto-Plunger.jpg", + "relative_path": "detailed/8/RevB-Auto-Plunger.jpg", + "is_high_res": false + } + }, + "73": { + "pair_id": "73", + "image_id": "0", + "detailed_id": "8689", + "position": "2", + "object_id": "9", + "object_type": "product", + "detailed": { + "object_id": "9", + "object_type": "product", + "type": "A", + "image_path": "https://shop.osr-plastic.org/images/detailed/8/zoe-shredder-and-extrusion-combo-73.jpg", + "alt": "", + "image_x": "2048", + "image_y": "1152", + "http_image_path": "http://shop.osr-plastic.org/images/detailed/8/zoe-shredder-and-extrusion-combo-73.jpg", + "https_image_path": "https://shop.osr-plastic.org/images/detailed/8/zoe-shredder-and-extrusion-combo-73.jpg", + "absolute_path": "/var/www/vhosts/osr-plastic.org/shop.osr-plastic.org/images/detailed/8/zoe-shredder-and-extrusion-combo-73.jpg", + "relative_path": "detailed/8/zoe-shredder-and-extrusion-combo-73.jpg", + "is_high_res": false + } + } + }, + "base_price": "4200.000000", + "selected_options": [], + "has_options": false, + "product_options": [], + "discounts": { + "A": 0, + "P": 0 + }, + "product_features": [], + "qty_content": [] + }, + { + "product_id": "8", + "product": "Cassanda - Light", + "product_type": "P", + "parent_product_id": "0", + "product_code": "", + "status": "A", + "company_id": "1", + "list_price": "0.00", + "amount": "1", + "weight": "0.000", + "length": "0", + "width": "0", + "height": "0", + "shipping_freight": "0.00", + "low_avail_limit": "0", + "timestamp": "1644164351", + "updated_timestamp": "1644521215", + "usergroup_ids": "0", + "is_edp": "N", + "edp_shipping": "N", + "unlimited_download": "N", + "tracking": "D", + "free_shipping": "N", + "zero_price_action": "R", + "is_pbp": "Y", + "is_op": "N", + "is_oper": "N", + "is_returnable": "Y", + "return_period": "10", + "avail_since": "0", + "out_of_stock_actions": "N", + "localization": "", + "min_qty": "0", + "max_qty": "0", + "qty_step": "0", + "list_qty_count": "0", + "tax_ids": "", + "age_verification": "N", + "age_limit": "0", + "options_type": "P", + "exceptions_type": "F", + "details_layout": "default", + "shipping_params": "a:5:{s:16:\"min_items_in_box\";i:0;s:16:\"max_items_in_box\";i:0;s:10:\"box_length\";i:0;s:9:\"box_width\";i:0;s:10:\"box_height\";i:0;}", + "facebook_obj_type": "", + "buy_now_url": "", + "price": "3500.000000", + "category_ids": [ + 18 + ], + "seo_name": "cassanda-light", + "seo_path": "15/18", + "main_category": 18, + "options_type_raw": null, + "exceptions_type_raw": null, + "tracking_raw": null, + "zero_price_action_raw": null, + "min_qty_raw": null, + "max_qty_raw": null, + "qty_step_raw": null, + "list_qty_count_raw": null, + "details_layout_raw": "default", + "variation_features": [], + "main_pair": { + "pair_id": "68", + "image_id": "0", + "detailed_id": "8684", + "position": "0", + "object_id": "8", + "object_type": "product", + "detailed": { + "object_id": "8", + "object_type": "product", + "type": "M", + "image_path": "https://shop.osr-plastic.org/images/detailed/8/cassanda-light-68.JPG", + "alt": "", + "image_x": "1919", + "image_y": "1080", + "http_image_path": "http://shop.osr-plastic.org/images/detailed/8/cassanda-light-68.JPG", + "https_image_path": "https://shop.osr-plastic.org/images/detailed/8/cassanda-light-68.JPG", + "absolute_path": "/var/www/vhosts/osr-plastic.org/shop.osr-plastic.org/images/detailed/8/cassanda-light-68.JPG", + "relative_path": "detailed/8/cassanda-light-68.JPG", + "is_high_res": false + } + }, + "image_pairs": { + "69": { + "pair_id": "69", + "image_id": "0", + "detailed_id": "8685", + "position": "2", + "object_id": "8", + "object_type": "product", + "detailed": { + "object_id": "8", + "object_type": "product", + "type": "A", + "image_path": "https://shop.osr-plastic.org/images/detailed/8/cassanda-light-69.JPG", + "alt": "", + "image_x": "1919", + "image_y": "1080", + "http_image_path": "http://shop.osr-plastic.org/images/detailed/8/cassanda-light-69.JPG", + "https_image_path": "https://shop.osr-plastic.org/images/detailed/8/cassanda-light-69.JPG", + "absolute_path": "/var/www/vhosts/osr-plastic.org/shop.osr-plastic.org/images/detailed/8/cassanda-light-69.JPG", + "relative_path": "detailed/8/cassanda-light-69.JPG", + "is_high_res": false + } + }, + "70": { + "pair_id": "70", + "image_id": "0", + "detailed_id": "8686", + "position": "3", + "object_id": "8", + "object_type": "product", + "detailed": { + "object_id": "8", + "object_type": "product", + "type": "A", + "image_path": "https://shop.osr-plastic.org/images/detailed/8/cassanda-light-70.JPG", + "alt": "", + "image_x": "1919", + "image_y": "1080", + "http_image_path": "http://shop.osr-plastic.org/images/detailed/8/cassanda-light-70.JPG", + "https_image_path": "https://shop.osr-plastic.org/images/detailed/8/cassanda-light-70.JPG", + "absolute_path": "/var/www/vhosts/osr-plastic.org/shop.osr-plastic.org/images/detailed/8/cassanda-light-70.JPG", + "relative_path": "detailed/8/cassanda-light-70.JPG", + "is_high_res": false + } + }, + "71": { + "pair_id": "71", + "image_id": "0", + "detailed_id": "8687", + "position": "1", + "object_id": "8", + "object_type": "product", + "detailed": { + "object_id": "8", + "object_type": "product", + "type": "A", + "image_path": "https://shop.osr-plastic.org/images/detailed/8/perspective-stackked.jpg", + "alt": "", + "image_x": "1931", + "image_y": "1545", + "http_image_path": "http://shop.osr-plastic.org/images/detailed/8/perspective-stackked.jpg", + "https_image_path": "https://shop.osr-plastic.org/images/detailed/8/perspective-stackked.jpg", + "absolute_path": "/var/www/vhosts/osr-plastic.org/shop.osr-plastic.org/images/detailed/8/perspective-stackked.jpg", + "relative_path": "detailed/8/perspective-stackked.jpg", + "is_high_res": false + } + } + }, + "base_price": "3500.000000", + "selected_options": [], + "has_options": false, + "product_options": [], + "discounts": { + "A": 0, + "P": 0 + }, + "product_features": [], + "qty_content": [] + }, + { + "product_id": "7", + "product": "Sheetpress - Cell - 1.20m", + "product_type": "P", + "parent_product_id": "0", + "product_code": "", + "status": "A", + "company_id": "1", + "list_price": "0.00", + "amount": "1", + "weight": "0.000", + "length": "0", + "width": "0", + "height": "0", + "shipping_freight": "0.00", + "low_avail_limit": "0", + "timestamp": "1644164213", + "updated_timestamp": "1644521235", + "usergroup_ids": "0", + "is_edp": "N", + "edp_shipping": "N", + "unlimited_download": "N", + "tracking": "D", + "free_shipping": "N", + "zero_price_action": "R", + "is_pbp": "Y", + "is_op": "N", + "is_oper": "N", + "is_returnable": "Y", + "return_period": "10", + "avail_since": "0", + "out_of_stock_actions": "N", + "localization": "", + "min_qty": "0", + "max_qty": "0", + "qty_step": "0", + "list_qty_count": "0", + "tax_ids": "", + "age_verification": "N", + "age_limit": "0", + "options_type": "P", + "exceptions_type": "F", + "details_layout": "default", + "shipping_params": "a:5:{s:16:\"min_items_in_box\";i:0;s:16:\"max_items_in_box\";i:0;s:10:\"box_length\";i:0;s:9:\"box_width\";i:0;s:10:\"box_height\";i:0;}", + "facebook_obj_type": "", + "buy_now_url": "", + "price": "5900.000000", + "category_ids": [ + 18 + ], + "seo_name": "sheetpress-cell-1.20m", + "seo_path": "15/18", + "main_category": 18, + "options_type_raw": null, + "exceptions_type_raw": null, + "tracking_raw": null, + "zero_price_action_raw": null, + "min_qty_raw": null, + "max_qty_raw": null, + "qty_step_raw": null, + "list_qty_count_raw": null, + "details_layout_raw": "default", + "variation_features": [], + "main_pair": { + "pair_id": "54", + "image_id": "0", + "detailed_id": "8670", + "position": "0", + "object_id": "7", + "object_type": "product", + "detailed": { + "object_id": "7", + "object_type": "product", + "type": "M", + "image_path": "https://shop.osr-plastic.org/images/detailed/8/latest2.jpg", + "alt": "", + "image_x": "1884", + "image_y": "1975", + "http_image_path": "http://shop.osr-plastic.org/images/detailed/8/latest2.jpg", + "https_image_path": "https://shop.osr-plastic.org/images/detailed/8/latest2.jpg", + "absolute_path": "/var/www/vhosts/osr-plastic.org/shop.osr-plastic.org/images/detailed/8/latest2.jpg", + "relative_path": "detailed/8/latest2.jpg", + "is_high_res": false + } + }, + "image_pairs": { + "53": { + "pair_id": "53", + "image_id": "0", + "detailed_id": "8669", + "position": "1", + "object_id": "7", + "object_type": "product", + "detailed": { + "object_id": "7", + "object_type": "product", + "type": "A", + "image_path": "https://shop.osr-plastic.org/images/detailed/8/perspective_ezdf-nd.JPG", + "alt": "", + "image_x": "2861", + "image_y": "2799", + "http_image_path": "http://shop.osr-plastic.org/images/detailed/8/perspective_ezdf-nd.JPG", + "https_image_path": "https://shop.osr-plastic.org/images/detailed/8/perspective_ezdf-nd.JPG", + "absolute_path": "/var/www/vhosts/osr-plastic.org/shop.osr-plastic.org/images/detailed/8/perspective_ezdf-nd.JPG", + "relative_path": "detailed/8/perspective_ezdf-nd.JPG", + "is_high_res": false + } + } + }, + "base_price": "5900.000000", + "selected_options": [], + "has_options": false, + "product_options": [], + "discounts": { + "A": 0, + "P": 0 + }, + "product_features": [], + "qty_content": [] + }, + { + "product_id": "6", + "product": "Obelix - Upgraded v4 - Shredder", + "product_type": "P", + "parent_product_id": "0", + "product_code": "", + "status": "A", + "company_id": "1", + "list_price": "0.00", + "amount": "1", + "weight": "0.000", + "length": "0", + "width": "0", + "height": "0", + "shipping_freight": "0.00", + "low_avail_limit": "0", + "timestamp": "1644163162", + "updated_timestamp": "1644521224", + "usergroup_ids": "0", + "is_edp": "N", + "edp_shipping": "N", + "unlimited_download": "N", + "tracking": "D", + "free_shipping": "N", + "zero_price_action": "R", + "is_pbp": "Y", + "is_op": "N", + "is_oper": "N", + "is_returnable": "Y", + "return_period": "10", + "avail_since": "0", + "out_of_stock_actions": "N", + "localization": "", + "min_qty": "0", + "max_qty": "0", + "qty_step": "0", + "list_qty_count": "0", + "tax_ids": "", + "age_verification": "N", + "age_limit": "0", + "options_type": "P", + "exceptions_type": "F", + "details_layout": "default", + "shipping_params": "a:5:{s:16:\"min_items_in_box\";i:0;s:16:\"max_items_in_box\";i:0;s:10:\"box_length\";i:0;s:9:\"box_width\";i:0;s:10:\"box_height\";i:0;}", + "facebook_obj_type": "activity", + "buy_now_url": "", + "price": "4900.000000", + "category_ids": [ + 19 + ], + "seo_name": "obelix-upgraded-v4-shredder", + "seo_path": "6/19", + "main_category": 19, + "options_type_raw": null, + "exceptions_type_raw": null, + "tracking_raw": null, + "zero_price_action_raw": null, + "min_qty_raw": null, + "max_qty_raw": null, + "qty_step_raw": null, + "list_qty_count_raw": null, + "details_layout_raw": "default", + "variation_features": [], + "main_pair": { + "pair_id": "52", + "image_id": "0", + "detailed_id": "8668", + "position": "0", + "object_id": "6", + "object_type": "product", + "detailed": { + "object_id": "6", + "object_type": "product", + "type": "M", + "image_path": "https://shop.osr-plastic.org/images/detailed/8/rev-latest.jpg", + "alt": "", + "image_x": "1754", + "image_y": "2369", + "http_image_path": "http://shop.osr-plastic.org/images/detailed/8/rev-latest.jpg", + "https_image_path": "https://shop.osr-plastic.org/images/detailed/8/rev-latest.jpg", + "absolute_path": "/var/www/vhosts/osr-plastic.org/shop.osr-plastic.org/images/detailed/8/rev-latest.jpg", + "relative_path": "detailed/8/rev-latest.jpg", + "is_high_res": false + } + }, + "image_pairs": { + "51": { + "pair_id": "51", + "image_id": "0", + "detailed_id": "8667", + "position": "1", + "object_id": "6", + "object_type": "product", + "detailed": { + "object_id": "6", + "object_type": "product", + "type": "A", + "image_path": "https://shop.osr-plastic.org/images/detailed/8/revA-0.8.jpg", + "alt": "", + "image_x": "1400", + "image_y": "1082", + "http_image_path": "http://shop.osr-plastic.org/images/detailed/8/revA-0.8.jpg", + "https_image_path": "https://shop.osr-plastic.org/images/detailed/8/revA-0.8.jpg", + "absolute_path": "/var/www/vhosts/osr-plastic.org/shop.osr-plastic.org/images/detailed/8/revA-0.8.jpg", + "relative_path": "detailed/8/revA-0.8.jpg", + "is_high_res": false + } + } + }, + "base_price": "4900.000000", + "selected_options": [], + "has_options": false, + "product_options": [], + "discounts": { + "A": 0, + "P": 0 + }, + "product_features": [], + "qty_content": [] + }, + { + "product_id": "5", + "product": "Lydia - v3.5", + "product_type": "P", + "parent_product_id": "0", + "product_code": "", + "status": "A", + "company_id": "1", + "list_price": "0.00", + "amount": "1", + "weight": "0.000", + "length": "0", + "width": "0", + "height": "0", + "shipping_freight": "0.00", + "low_avail_limit": "0", + "timestamp": "1644162887", + "updated_timestamp": "1644520793", + "usergroup_ids": "0", + "is_edp": "N", + "edp_shipping": "N", + "unlimited_download": "N", + "tracking": "D", + "free_shipping": "N", + "zero_price_action": "R", + "is_pbp": "Y", + "is_op": "N", + "is_oper": "N", + "is_returnable": "Y", + "return_period": "10", + "avail_since": "0", + "out_of_stock_actions": "N", + "localization": "", + "min_qty": "0", + "max_qty": "0", + "qty_step": "0", + "list_qty_count": "0", + "tax_ids": "", + "age_verification": "N", + "age_limit": "0", + "options_type": "P", + "exceptions_type": "F", + "details_layout": "default", + "shipping_params": "a:5:{s:16:\"min_items_in_box\";i:0;s:16:\"max_items_in_box\";i:0;s:10:\"box_length\";i:0;s:9:\"box_width\";i:0;s:10:\"box_height\";i:0;}", + "facebook_obj_type": "activity", + "buy_now_url": "", + "price": "1650.000000", + "category_ids": [ + 14 + ], + "seo_name": "lydia-v3.5", + "seo_path": "11/14", + "main_category": 14, + "options_type_raw": null, + "exceptions_type_raw": null, + "tracking_raw": null, + "zero_price_action_raw": null, + "min_qty_raw": null, + "max_qty_raw": null, + "qty_step_raw": null, + "list_qty_count_raw": null, + "details_layout_raw": "default", + "variation_features": [], + "main_pair": { + "pair_id": "50", + "image_id": "0", + "detailed_id": "8666", + "position": "0", + "object_id": "5", + "object_type": "product", + "detailed": { + "object_id": "5", + "object_type": "product", + "type": "M", + "image_path": "https://shop.osr-plastic.org/images/detailed/8/perspective_uu8s-zl.jpg", + "alt": "", + "image_x": "1647", + "image_y": "1273", + "http_image_path": "http://shop.osr-plastic.org/images/detailed/8/perspective_uu8s-zl.jpg", + "https_image_path": "https://shop.osr-plastic.org/images/detailed/8/perspective_uu8s-zl.jpg", + "absolute_path": "/var/www/vhosts/osr-plastic.org/shop.osr-plastic.org/images/detailed/8/perspective_uu8s-zl.jpg", + "relative_path": "detailed/8/perspective_uu8s-zl.jpg", + "is_high_res": false + } + }, + "base_price": "1650.000000", + "selected_options": [], + "has_options": false, + "product_options": [], + "discounts": { + "A": 0, + "P": 0 + }, + "product_features": [], + "qty_content": [] + }, + { + "product_id": "4", + "product": "Lydia - v4.5", + "product_type": "P", + "parent_product_id": "0", + "product_code": "L45", + "status": "A", + "company_id": "1", + "list_price": "0.00", + "amount": "0", + "weight": "0.000", + "length": "0", + "width": "0", + "height": "0", + "shipping_freight": "0.00", + "low_avail_limit": "0", + "timestamp": "1644162438", + "updated_timestamp": "1644522976", + "usergroup_ids": "0", + "is_edp": "N", + "edp_shipping": "N", + "unlimited_download": "N", + "tracking": "D", + "free_shipping": "N", + "zero_price_action": "R", + "is_pbp": "Y", + "is_op": "N", + "is_oper": "N", + "is_returnable": "Y", + "return_period": "10", + "avail_since": "0", + "out_of_stock_actions": "N", + "localization": "", + "min_qty": "0", + "max_qty": "0", + "qty_step": "0", + "list_qty_count": "0", + "tax_ids": "", + "age_verification": "N", + "age_limit": "0", + "options_type": "P", + "exceptions_type": "F", + "details_layout": "default", + "shipping_params": "a:5:{s:16:\"min_items_in_box\";i:0;s:16:\"max_items_in_box\";i:0;s:10:\"box_length\";i:0;s:9:\"box_width\";i:0;s:10:\"box_height\";i:0;}", + "facebook_obj_type": "activity", + "buy_now_url": "", + "price": "4220.000000", + "category_ids": [ + 14 + ], + "seo_name": "lydia-v4.5", + "seo_path": "11/14", + "main_category": 14, + "options_type_raw": null, + "exceptions_type_raw": null, + "tracking_raw": null, + "zero_price_action_raw": null, + "min_qty_raw": null, + "max_qty_raw": null, + "qty_step_raw": null, + "list_qty_count_raw": null, + "details_layout_raw": "default", + "variation_features": [], + "main_pair": { + "pair_id": "48", + "image_id": "0", + "detailed_id": "8664", + "position": "0", + "object_id": "4", + "object_type": "product", + "detailed": { + "object_id": "4", + "object_type": "product", + "type": "M", + "image_path": "https://shop.osr-plastic.org/images/detailed/8/latest_hgcw-ds.JPG", + "alt": "", + "image_x": "882", + "image_y": "861", + "http_image_path": "http://shop.osr-plastic.org/images/detailed/8/latest_hgcw-ds.JPG", + "https_image_path": "https://shop.osr-plastic.org/images/detailed/8/latest_hgcw-ds.JPG", + "absolute_path": "/var/www/vhosts/osr-plastic.org/shop.osr-plastic.org/images/detailed/8/latest_hgcw-ds.JPG", + "relative_path": "detailed/8/latest_hgcw-ds.JPG", + "is_high_res": false + } + }, + "image_pairs": { + "46": { + "pair_id": "46", + "image_id": "0", + "detailed_id": "8662", + "position": "2", + "object_id": "4", + "object_type": "product", + "detailed": { + "object_id": "4", + "object_type": "product", + "type": "A", + "image_path": "https://shop.osr-plastic.org/images/detailed/8/background_removed_perspective.png", + "alt": "", + "image_x": "665", + "image_y": "375", + "http_image_path": "http://shop.osr-plastic.org/images/detailed/8/background_removed_perspective.png", + "https_image_path": "https://shop.osr-plastic.org/images/detailed/8/background_removed_perspective.png", + "absolute_path": "/var/www/vhosts/osr-plastic.org/shop.osr-plastic.org/images/detailed/8/background_removed_perspective.png", + "relative_path": "detailed/8/background_removed_perspective.png", + "is_high_res": false + } + }, + "47": { + "pair_id": "47", + "image_id": "0", + "detailed_id": "8663", + "position": "3", + "object_id": "4", + "object_type": "product", + "detailed": { + "object_id": "4", + "object_type": "product", + "type": "A", + "image_path": "https://shop.osr-plastic.org/images/detailed/8/IMG_3618.JPG", + "alt": "", + "image_x": "2976", + "image_y": "1680", + "http_image_path": "http://shop.osr-plastic.org/images/detailed/8/IMG_3618.JPG", + "https_image_path": "https://shop.osr-plastic.org/images/detailed/8/IMG_3618.JPG", + "absolute_path": "/var/www/vhosts/osr-plastic.org/shop.osr-plastic.org/images/detailed/8/IMG_3618.JPG", + "relative_path": "detailed/8/IMG_3618.JPG", + "is_high_res": false + } + }, + "49": { + "pair_id": "49", + "image_id": "0", + "detailed_id": "8665", + "position": "1", + "object_id": "4", + "object_type": "product", + "detailed": { + "object_id": "4", + "object_type": "product", + "type": "A", + "image_path": "https://shop.osr-plastic.org/images/detailed/8/preview_ujgx-6j.jpg", + "alt": "", + "image_x": "3090", + "image_y": "3089", + "http_image_path": "http://shop.osr-plastic.org/images/detailed/8/preview_ujgx-6j.jpg", + "https_image_path": "https://shop.osr-plastic.org/images/detailed/8/preview_ujgx-6j.jpg", + "absolute_path": "/var/www/vhosts/osr-plastic.org/shop.osr-plastic.org/images/detailed/8/preview_ujgx-6j.jpg", + "relative_path": "detailed/8/preview_ujgx-6j.jpg", + "is_high_res": false + } + } + }, + "base_price": "4220.000000", + "selected_options": [], + "has_options": true, + "product_options": [], + "discounts": { + "A": 0, + "P": 0 + }, + "product_features": [], + "qty_content": [] + }, + { + "product_id": "3", + "product": "Elena Standard", + "product_type": "P", + "parent_product_id": "0", + "product_code": "ELS", + "status": "A", + "company_id": "1", + "list_price": "0.00", + "amount": "1", + "weight": "40.000", + "length": "0", + "width": "0", + "height": "0", + "shipping_freight": "0.00", + "low_avail_limit": "0", + "timestamp": "1644159993", + "updated_timestamp": "1644938690", + "usergroup_ids": "0", + "is_edp": "N", + "edp_shipping": "N", + "unlimited_download": "N", + "tracking": "D", + "free_shipping": "N", + "zero_price_action": "R", + "is_pbp": "Y", + "is_op": "N", + "is_oper": "N", + "is_returnable": "Y", + "return_period": "10", + "avail_since": "0", + "out_of_stock_actions": "N", + "localization": "", + "min_qty": "0", + "max_qty": "0", + "qty_step": "0", + "list_qty_count": "0", + "tax_ids": "", + "age_verification": "N", + "age_limit": "0", + "options_type": "P", + "exceptions_type": "F", + "details_layout": "default", + "shipping_params": "a:5:{s:16:\"min_items_in_box\";i:1;s:16:\"max_items_in_box\";i:0;s:10:\"box_length\";i:15;s:9:\"box_width\";i:50;s:10:\"box_height\";i:120;}", + "facebook_obj_type": "activity", + "buy_now_url": "", + "price": "1450.000000", + "category_ids": [ + 10 + ], + "seo_name": "elena", + "seo_path": "7/10", + "main_category": 10, + "options_type_raw": null, + "exceptions_type_raw": null, + "tracking_raw": null, + "zero_price_action_raw": null, + "min_qty_raw": null, + "max_qty_raw": null, + "qty_step_raw": null, + "list_qty_count_raw": null, + "details_layout_raw": "default", + "variation_features": [], + "main_pair": { + "pair_id": "39", + "image_id": "0", + "detailed_id": "8655", + "position": "0", + "object_id": "3", + "object_type": "product", + "detailed": { + "object_id": "3", + "object_type": "product", + "type": "M", + "image_path": "https://shop.osr-plastic.org/images/detailed/8/classic.jpg", + "alt": "", + "image_x": "640", + "image_y": "640", + "http_image_path": "http://shop.osr-plastic.org/images/detailed/8/classic.jpg", + "https_image_path": "https://shop.osr-plastic.org/images/detailed/8/classic.jpg", + "absolute_path": "/var/www/vhosts/osr-plastic.org/shop.osr-plastic.org/images/detailed/8/classic.jpg", + "relative_path": "detailed/8/classic.jpg", + "is_high_res": false + } + }, + "image_pairs": { + "38": { + "pair_id": "38", + "image_id": "0", + "detailed_id": "8654", + "position": "1", + "object_id": "3", + "object_type": "product", + "detailed": { + "object_id": "3", + "object_type": "product", + "type": "A", + "image_path": "https://shop.osr-plastic.org/images/detailed/8/perspective.JPG", + "alt": "", + "image_x": "1661", + "image_y": "2293", + "http_image_path": "http://shop.osr-plastic.org/images/detailed/8/perspective.JPG", + "https_image_path": "https://shop.osr-plastic.org/images/detailed/8/perspective.JPG", + "absolute_path": "/var/www/vhosts/osr-plastic.org/shop.osr-plastic.org/images/detailed/8/perspective.JPG", + "relative_path": "detailed/8/perspective.JPG", + "is_high_res": false + } + }, + "40": { + "pair_id": "40", + "image_id": "0", + "detailed_id": "8656", + "position": "2", + "object_id": "3", + "object_type": "product", + "detailed": { + "object_id": "3", + "object_type": "product", + "type": "A", + "image_path": "https://shop.osr-plastic.org/images/detailed/8/IMG_3577.JPG", + "alt": "", + "image_x": "1679", + "image_y": "1679", + "http_image_path": "http://shop.osr-plastic.org/images/detailed/8/IMG_3577.JPG", + "https_image_path": "https://shop.osr-plastic.org/images/detailed/8/IMG_3577.JPG", + "absolute_path": "/var/www/vhosts/osr-plastic.org/shop.osr-plastic.org/images/detailed/8/IMG_3577.JPG", + "relative_path": "detailed/8/IMG_3577.JPG", + "is_high_res": false + } + }, + "41": { + "pair_id": "41", + "image_id": "0", + "detailed_id": "8657", + "position": "3", + "object_id": "3", + "object_type": "product", + "detailed": { + "object_id": "3", + "object_type": "product", + "type": "A", + "image_path": "https://shop.osr-plastic.org/images/detailed/8/mold_jack.jpg", + "alt": "", + "image_x": "1080", + "image_y": "1080", + "http_image_path": "http://shop.osr-plastic.org/images/detailed/8/mold_jack.jpg", + "https_image_path": "https://shop.osr-plastic.org/images/detailed/8/mold_jack.jpg", + "absolute_path": "/var/www/vhosts/osr-plastic.org/shop.osr-plastic.org/images/detailed/8/mold_jack.jpg", + "relative_path": "detailed/8/mold_jack.jpg", + "is_high_res": false + } + } + }, + "base_price": "1450.000000", + "selected_options": [], + "has_options": true, + "product_options": [], + "discounts": { + "A": 0, + "P": 0 + }, + "product_features": { + "2": { + "feature_id": "2", + "value": "", + "value_int": null, + "variant_id": "1", + "feature_type": "S", + "internal_name": "Cart", + "description": "Cart", + "prefix": "", + "suffix": "", + "variant": "Cart", + "parent_id": "0", + "display_on_header": "Y", + "display_on_catalog": "N", + "display_on_product": "Y", + "feature_code": "", + "purpose": "group_variation_catalog_item", + "variants": { + "1": { + "value": "", + "value_int": null, + "variant_id": "1", + "variant": "Cart", + "image_pairs": false + } + } + } + }, + "qty_content": [] + }, + { + "product_id": "2", + "product": "Asterix - JW", + "product_type": "P", + "parent_product_id": "0", + "product_code": "ASM", + "status": "A", + "company_id": "1", + "list_price": "0.00", + "amount": "1", + "weight": "65.000", + "length": "0", + "width": "0", + "height": "0", + "shipping_freight": "0.00", + "low_avail_limit": "0", + "timestamp": "1644158843", + "updated_timestamp": "1644521181", + "usergroup_ids": "0", + "is_edp": "N", + "edp_shipping": "N", + "unlimited_download": "N", + "tracking": "D", + "free_shipping": "N", + "zero_price_action": "R", + "is_pbp": "Y", + "is_op": "N", + "is_oper": "N", + "is_returnable": "Y", + "return_period": "10", + "avail_since": "0", + "out_of_stock_actions": "N", + "localization": "", + "min_qty": "0", + "max_qty": "0", + "qty_step": "0", + "list_qty_count": "0", + "tax_ids": "", + "age_verification": "N", + "age_limit": "0", + "options_type": "P", + "exceptions_type": "F", + "details_layout": "default", + "shipping_params": "a:5:{s:16:\"min_items_in_box\";i:1;s:16:\"max_items_in_box\";i:5;s:10:\"box_length\";i:50;s:9:\"box_width\";i:50;s:10:\"box_height\";i:80;}", + "facebook_obj_type": "activity", + "buy_now_url": "", + "price": "2900.000000", + "category_ids": [ + 19 + ], + "seo_name": "asterix-sm", + "seo_path": "6/19", + "main_category": 19, + "options_type_raw": null, + "exceptions_type_raw": null, + "tracking_raw": null, + "zero_price_action_raw": null, + "min_qty_raw": null, + "max_qty_raw": null, + "qty_step_raw": null, + "list_qty_count_raw": null, + "details_layout_raw": "default", + "variation_features": [], + "main_pair": { + "pair_id": "65", + "image_id": "0", + "detailed_id": "8681", + "position": "0", + "object_id": "2", + "object_type": "product", + "detailed": { + "object_id": "2", + "object_type": "product", + "type": "M", + "image_path": "https://shop.osr-plastic.org/images/detailed/8/asterix-sm-65.JPG", + "alt": "", + "image_x": "1079", + "image_y": "1542", + "http_image_path": "http://shop.osr-plastic.org/images/detailed/8/asterix-sm-65.JPG", + "https_image_path": "https://shop.osr-plastic.org/images/detailed/8/asterix-sm-65.JPG", + "absolute_path": "/var/www/vhosts/osr-plastic.org/shop.osr-plastic.org/images/detailed/8/asterix-sm-65.JPG", + "relative_path": "detailed/8/asterix-sm-65.JPG", + "is_high_res": false + } + }, + "image_pairs": { + "36": { + "pair_id": "36", + "image_id": "0", + "detailed_id": "8652", + "position": "1", + "object_id": "2", + "object_type": "product", + "detailed": { + "object_id": "2", + "object_type": "product", + "type": "A", + "image_path": "https://shop.osr-plastic.org/images/detailed/8/perspective_izc2-0c.jpg", + "alt": "", + "image_x": "1999", + "image_y": "1545", + "http_image_path": "http://shop.osr-plastic.org/images/detailed/8/perspective_izc2-0c.jpg", + "https_image_path": "https://shop.osr-plastic.org/images/detailed/8/perspective_izc2-0c.jpg", + "absolute_path": "/var/www/vhosts/osr-plastic.org/shop.osr-plastic.org/images/detailed/8/perspective_izc2-0c.jpg", + "relative_path": "detailed/8/perspective_izc2-0c.jpg", + "is_high_res": false + } + } + }, + "base_price": "2900.000000", + "selected_options": [], + "has_options": false, + "product_options": [], + "discounts": { + "A": 0, + "P": 0 + }, + "product_features": [], + "qty_content": [] + } +] \ No newline at end of file diff --git a/packages/osrl/src/.gitignore b/packages/osrl/src/.gitignore new file mode 100644 index 00000000..e69de29b diff --git a/packages/osrl/src/Engine.ts b/packages/osrl/src/Engine.ts new file mode 100644 index 00000000..8a6f96a5 --- /dev/null +++ b/packages/osrl/src/Engine.ts @@ -0,0 +1,238 @@ +import * as path from 'path' +import * as _ from './liquid/underscore' +import { Liquid, Context as LContext } from './liquidjs/liquid' +import { engineDefault } from './liquid' +import { exists, existsSync, readFile, readFileSync, resolve } from './fs' +import { LiquidOptions } from './liquidjs/liquid-options' +import { stringify } from 'yaml' +import { IObjectLiteral } from '@plastichub/core' +export { sync as dir } from '@plastichub/fs/dir' +import { sync as read } from '@plastichub/fs/read' +import { sync as write } from '@plastichub/fs/write' +import { sync as rm } from '@plastichub/fs/remove' +import { resolve as resolve_path } from "@plastichub/osr-commons" + +import { runJS, runJSExpression, runJSExpressionEx } from './plugins/js' +import { register as registerDSTag } from './plugins/ds' +import { register as registerJS } from './plugins/js' +import { register as registerI18n, i18n } from './plugins/i18n' +import { register as registerPrint } from './plugins/print' +import { register as registerOpenAI, openAI } from './plugins/osr-ai' +import { markdown } from './plugins/turndown' +import { html, pretty } from './plugins/html' +import { register as registerMInclude } from './plugins/minclude' +import { register as registerGET } from './plugins/get' + +import { Context } from './conf/bootstrap' +import { IOptions } from './types' +import { defaultFS } from './fs' +import { md2html } from './filters' +import { substitute, logger } from './index' + +import { html_beautify } from 'js-beautify' +const fm = require('front-matter') + +let _engine: Engine +export const getEngine = (): Engine => _engine +export const getContext = (): Context => _engine.context + +export class LiquidEx extends Liquid { + owner: Engine +} + +export class Engine { + constructor(options: IOptions) { + this.engine = engineDefault(options) as LiquidEx + this.options = options || {} as IOptions + this.expressionCache = {} + this.global = {} + this.stats = { + imports: [] + } + _engine = this + } + + engine: LiquidEx + options: IOptions + variables: IObjectLiteral + expressionCache: IObjectLiteral + global: any + context: Context + stats: any + async render(sourceFile: string, vars: IObjectLiteral) { + vars = { + targetLanguage: this.options.targetLanguage || 'en', + sourceLanguage: this.options.sourceLanguage || 'en', + i18n: '${OSR_ROOT}/i18n-store/store-en.json', + ...this.options.profile.variables, + ...vars + } + let owner = this + let _engine = this.engine + _engine.owner = owner + this.variables = vars + const src = '' + sourceFile + const resolveFs = (f) => resolve_path(f, false, vars) + let options_: IOptions = { + fs: defaultFS(resolveFs), + ...this.options, + resolve: resolveFs + } + this.options = options_ + let source = read(sourceFile) + let tmpFile = (sourceFile + '.tmp').replace('.md', '._md') + tmpFile = (sourceFile + '.tmp').replace('.html', '._html') + if (this.options.template && exists(this.options.template)) { + const template = read(this.options.template, 'string') + if (!template) { + logger.error(`Invalid template file: ${this.options.template}`) + return false + } + source = substitute(false, template as string, { SOURCE: source, ...this.variables }) + write(tmpFile, source) + sourceFile = tmpFile + } + + //@todo + _engine.options['string'] = source + registerDSTag(_engine) + registerJS(_engine) + registerI18n(_engine) + registerOpenAI(_engine) + registerPrint(_engine) + registerMInclude(_engine) + registerGET(_engine) + let _fm: any = { fm: {} } + try { + if (fm.test(_engine.options['string'])) { + _fm = { + fm: fm(_engine.options['string']).attributes, + body: fm(_engine.options['string']).body + } + vars.fm ? _fm.fm = { ...vars.fm, ..._fm.fm } : null + } + } catch (e) { + logger.error(`Error parsing front matter: ${e.message} : ${sourceFile}`) + } + + let parsed = await _engine.parseFile(sourceFile) + _engine.registerFilter('jseval', async x => await runJS(x, options_, owner, parsed)) + _engine.registerFilter('jsexp', x => runJSExpressionEx(x, options_, _engine, parsed, _engine, {}, "")) + _engine.registerFilter('i18n', async x => await i18n(x, options_, this, parsed, _engine, {}, "")) + _engine.registerFilter('html', async x => await html(x, options_, this)) + _engine.registerFilter('turndown', async x => await markdown(x, options_, this)) + _engine.registerFilter('pretty', async x => await pretty(x, options_, this)) + _engine.registerFilter('openAI', async x => await openAI(x, options_ as any, this, parsed, _engine, {}, "")) + + let fmChanged = false + if (Object.keys(_fm.fm) && Object.keys(_fm.fm).length > 0) { + for (let k in _fm.fm) { + if (k.endsWith('_i18n')) { + const val = await i18n(_fm.fm[k], options_, this, parsed, _engine, {}, "") + if (val) { + _fm.fm[k] = val + delete _fm.fm[k] + _fm.fm[k.replace('_i18n', '')] = val + fmChanged = true + } + } + } + } + fmChanged = true + if (fmChanged && _fm.fm && Object.keys(_fm.fm).length > 0) { + source = '---\n' + stringify(_fm.fm) + '---\n' + _fm.body + write(tmpFile, source) + sourceFile = tmpFile + options_['source'] = tmpFile + } + const childCtx = new LContext( + {}, + this.options as any, + { + sync: false, + globals: { + ..._fm.fm, + ...this.variables, + fm: _fm.fm + }, + strictVariables: false, + ownPropertyOnly: false + }) + + + let ret = null; + debugger + try { + ret = await _engine.renderFile(sourceFile, childCtx, { + globals: { + ..._fm.fm, + ...this.variables, + fm: _fm.fm + } + }) + } catch (e) { + logger.error(`Error rendering file: ${sourceFile} \n\t : ${e.message}`) + rm(tmpFile) + return false + } + + rm(tmpFile) + options_['source'] = src + if (options_.format === 'html') { + ret = html_beautify(md2html(ret)) + } + if (options_.format === 'pretty') { + ret = html_beautify(ret) + } + if(this.options.trace){ + const traceFile = resolveFs(this.options.trace) + write(traceFile, { ...this.stats, ...this.options.profile }) + } + return ret + } + async parse(string: string, vars: any, iterations: number = 5) { + let _engine = this.engine; + _engine.options['string'] = string; + let _fm = { fm: {} }; + if (fm.test(_engine.options['string'])) { + _fm = { + fm: fm(_engine.options['string']).attributes + } + } + this.variables = { + ...vars, + ..._fm.fm + }; + + let owner = this; + (_engine as any).owner = this; + let options_ = { + fs: { + exists: (f) => { + return exists(f) + }, + existsSync: existsSync, + readFile: (f) => readFile(path.resolve(resolve_path(f))), + readFileSync: readFileSync, + resolve + }, + ...this.options + } + + registerDSTag(_engine); + registerJS(_engine); + registerMInclude(_engine); + let parsed = _engine.parse(string); + _engine.registerFilter('jseval', x => runJS(x, options_, owner, parsed)) + _engine.registerFilter('jsexp', x => runJSExpression(x, options_, owner, parsed)) + parsed = _engine.parse(string) + let t = await _engine.render(parsed, vars, options_ as LiquidOptions) + for (let i = 0; i < iterations; i++) { + t = await this.engine.render(parsed, vars, options_ as LiquidOptions); + } + if (options_.format === 'html') { + t = html_beautify(md2html(t)) + } + return t + } +} diff --git a/packages/osrl/src/_cli.ts b/packages/osrl/src/_cli.ts new file mode 100644 index 00000000..3e08930f --- /dev/null +++ b/packages/osrl/src/_cli.ts @@ -0,0 +1,175 @@ +import * as CLI from 'yargs' +import * as path from 'path' +import { sync as exists } from '@plastichub/fs/exists' +import { isArray } from '@plastichub/core/primitives' +import { isFile, resolve } from '@plastichub/osr-commons' + +import { logger } from './index' +import { IOptions } from './types' + +export const defaultOptions = (yargs: CLI.Argv) => { + yargs.parserConfiguration({ + "camel-case-expansion": false + }) + return yargs. + showHelpOnFail(true). + option('format', { + describe: 'selects the output format, can be \'html\', \'md\', \'raw\', \'pretty\'', + default: 'md', + choices: ['md', 'html', 'raw', 'pretty'] + }).option('source', { + describe: 'Path to the input file. If not specified, std.in will be used.\ + Glob patters are also supported', + }).option('template', { + describe: 'Path to a surrounding template file, for --source. In this case, the source file will be included by referencing ${SOURCE} in your template file' + }).option('language', { + describe: 'Set source language', + default: 'osr', + choices: ['osr', 'liquid'] + }).option('bootstrap', { + describe: 'Path to another Javscript bootstrap module' + }).option('variables', { + describe: 'Path to another JSON file being filled into Javascript evaluation global scopes', + default: '${OSR_ROOT}/conf/variables.js' + }).option('trace', { + describe: 'Path to the output file', + default: '${SRC_DIR}/${SRC_NAME}-trace.json' + }).option('output', { + describe: 'Path to the output file', + default: '${SRC_DIR}/${SRC_NAME}.md' + }).option('disable', { + describe: 'Comma separated list of disabled tags and filters' + }).option('profile', { + describe: "Path to profile(s) file which provides all settings, paths and variables.\n \ + CLI arguments will override any profile settings.", + default: '${OSR_ROOT}/osr-templates/osrl/.osrl.json' + }).option('envVariables', { + describe: 'Append Global scope for environment variables', + default: 'true', + boolean: true + }).option('stdout', { + describe: 'write on stdout', + default: 'false', + boolean: true + }).option('dry', { + describe: 'Don`t run the compiler', + default: 'false', + boolean: true + }).option('introspect', { + describe: 'Path to a report file, containing scopes and evaluations. Dumps also defaults. - Not implemented!' + }).option('env', { + describe: 'Target environment', + }).option('alt', { + default: false, + describe: 'Use alternate tokenizer, & instead of $', + type: 'boolean' + }).option('plugins', { + describe: "Path or array of paths for plugins to be loaded.\n \ + The --disabled argument is being applied! \ + Accepted file patterns : \n \ + tags: tag.mytag.js\n \ + filters: filter.mytag.js" + }).option('targetLanguage', { + describe: 'The target language (i18n)', + default: 'en', + type: 'string' + }).option('sourceLanguage', { + describe: 'The source language (i18n)', + default: 'en', + type: 'string' + }).option('logLevel', { + describe: 'Log level', + default: 'warn', + type: 'string' + }) +} + +export const sanitize = (argv: any): IOptions | boolean => { + let ret: any = { + alt: argv.alt + } + ret.stdout = argv.stdout === 'true' || argv.stdout === true ? true : false + ret.dry = argv.dry === 'true' || argv.dry === true ? true : false + ret.env = argv.env + ret.trace = argv.trace + if (argv.plugins) { + if (typeof argv.plugins === 'string') { + ret.plugins = [argv.plugins] + } else if (isArray(argv.plugins)) { + ret.plugins = argv.plugins + } else { + ret.plugins = [] + } + } else { + argv.plugins = [] + } + + try { + if (!argv.source) { + logger.error("You must specify a source path!") + return false; + } + ret.source = argv.source; + } catch (e) { + logger.error("Error sanitize", e) + } + + ret.output = argv.output ? argv.output : null + ret.profile = argv.profile ? argv.profile : null + ret.template = argv.template ? path.resolve(resolve(argv.template, ret.alt)) : null + if (ret.template && !isFile(ret.template)) { + logger.error(`Template file ${ret.template} not found or invalid`) + } + const bootstrap = ret.bootstrap ? path.resolve(resolve(ret.bootstrap, false, argv)) : null + if (bootstrap) { + if (exists(bootstrap)) { + ret.bootstrap = bootstrap + } else { + logger.warn(`Error reading bootstrap ${bootstrap}`) + ret.bootstrap = null + } + } + + ret.format = argv.format && (argv.format === 'md' || argv.format === 'html') ? argv.format : 'md'; + ret.language = argv.language && (argv.language === 'liquid' || argv.language === 'liquid') ? argv.language : 'osr'; + + if (argv.disabled && (argv.disable as string).includes(',')) { + const disabled = {}; + (argv.disable as string).split(',').forEach((d) => { + disabled[d] = true + }) + ret.disabled = disabled + } + + if (argv.cwd) { + ret.cwd = path.resolve(resolve(argv.cwd)) + if (!exists((ret.cwd))) { + logger.error(`Invalid working directory ${argv.cwd}`) + } + } else { + ret.cwd = process.cwd(); + } + + ret = { + ...ret, + ...{ variables: {} } + } + + return ret +} + +// tweaks and handlers +export const defaults = () => { + + // default command + const DefaultCommand = 'compile'; + if (process.argv.length === 2) { + process.argv.push(DefaultCommand) + } + + // currently no default handler, display only : + process.on('unhandledRejection', (reason: string) => { + console.error('Unhandled rejection, reason: ', reason) + }) +} + diff --git a/packages/osrl/src/argv.ts b/packages/osrl/src/argv.ts new file mode 100644 index 00000000..e8067478 --- /dev/null +++ b/packages/osrl/src/argv.ts @@ -0,0 +1,52 @@ +import * as CLI from 'yargs'; +import { warn, error } from '../debug'; + +import { + Options, OutputTarget, OutputFormat +} from './types'; + + +const LIGHT = 'http://google.co.uk'; +const HEAVY = 'http://0.0.0.0:5555/app/xcf?debug=true&xblox=debug&xgrid=debug&davinci=debug&userDirectory=/PMaster/x4mm/user;' + +// default options for all commands +export const defaultOptions = (yargs: CLI.Argv) => { + return yargs.option('url', { + default: LIGHT, + describe: 'The URL to analyze' + }).option('format', { + default: 'text', + describe: 'Normal human readable text or JSON [text|json]' + }).option('target', { + default: 'console', + describe: 'Output target [console|file]' + }).option('path', { + default: '', + describe: 'The target location on the local filesystem for --target=file' + }) +}; + +// Sanitizes faulty user argv options for all commands. +export const sanitize = (argv: CLI.Arguments): Options => { + const args = argv as Options; + args.cwd = args.cwd || process.cwd(); + if (!args.url) { + // internal user error, should never happen! + error('Invalid url, abort'); + return process.exit(); + } + // path given but target is not file, correct to file + if (args.path && args.target !== OutputTarget.FILE) { + args.target = OutputTarget.FILE; + } + // target is file but no path given, correct to default file + if (args.target === OutputTarget.FILE && !args.path) { + // args.path = default_path(args.cwd, args.url); + } + // format string not valid + if (!(argv.format as string in OutputFormat)) { + warn(`Unknown output format ${argv.format}! Default to ${OutputFormat.text}`); + args.format = OutputFormat.text; + } + return args; +}; diff --git a/packages/osrl/src/commands/compile.ts b/packages/osrl/src/commands/compile.ts new file mode 100644 index 00000000..dbbd18d6 --- /dev/null +++ b/packages/osrl/src/commands/compile.ts @@ -0,0 +1,134 @@ +import * as CLI from 'yargs' +import * as path from 'path' +import { Promise as BPromise } from 'bluebird' +import { sync as read } from '@plastichub/fs/read' +import { sync as exists } from '@plastichub/fs/exists' +import { sync as write } from '@plastichub/fs/write' +import { DATE_VARS } from '@plastichub/osr-commons' +import { Engine } from '../Engine' +import { parse } from '../options' +import { logger, substitute } from '../index' +import { defaultOptions, sanitize } from '../_cli' +import { IOptions } from '../types' +import { compilerOptions } from '../zod_schema' + +let options = (yargs: CLI.Argv) => defaultOptions(yargs) + +async function _compile(options: IOptions) { + let engineOptions = { + root: [ + ...options.profile.includes + ], + ...options + } + if (options.dry) { + return + } + + let engine = new Engine(engineOptions) + options.source = path.resolve(options.source) + logger.info(`\n\nCompile ${options.source}`) + let output = await engine.render(options.source, options.variables) + if(!output){ + logger.error(`Error compiling ${options.source} : invalid output`) + return false + } + + output = output.trim() + if (!options.output && options.stdout) { + process.stdout.write(output) + } else { + write(options.output, output) + } + const outputPath = path.resolve(options.output) + options.output && logger.info(`\n\nWriting output to ${outputPath}`) +} + +const clone = (obj) => { + if (null == obj || "object" != typeof obj) return obj; + var copy = obj.constructor(); + for (var attr in obj) { + if (obj.hasOwnProperty(attr)) copy[attr] = obj[attr]; + } + return copy; +} +export const targets = (f: string, options: IOptions) => { + const srcParts = path.parse(f) + const variables = clone(options.pathVariables) + const targets = [] + variables.SRC_NAME = srcParts.name + variables.SRC_DIR = srcParts.dir + variables.SRC_EXT = srcParts.ext + if (variables.ROOT) { + variables.SRC_REL = path.relative(variables.ROOT, srcParts.dir); + } + + if (options.targetInfo.IS_GLOB) { + options.targetInfo.GLOB_EXTENSIONS.forEach((e) => { + variables.SRC_NAME = srcParts.name + variables.SRC_DIR = srcParts.dir + let targetPath = substitute(options.alt, options.pathVariables.DST_PATH, variables) + targetPath = path.resolve(targetPath.replace(options.pathVariables.DST_FILE_EXT, '') + e) + targets.push(targetPath) + }) + } else { + let targetPath = substitute(options.alt, options.pathVariables.DST_PATH, variables) + targets.push(targetPath); + } + return targets; +} +async function compile(options: IOptions) { + if (options.srcInfo) { + return await BPromise.resolve(options.srcInfo.FILES).map((f) => { + const outputs = targets(f, options); + return _compile( + { + ...options, + source: f, + output: outputs[0] + }); + }, { concurrency: 1 }); + } else { + return _compile(options); + } +} +export const register = (cli: CLI.Argv) => { + return cli.command('compile', 'Compiles input files', options, async (argv: CLI.Arguments) => { + if (argv.help) { + return; + } + let options = sanitize(argv as any) as IOptions + if (!options) { + return + } + + options = compilerOptions().parse(options) as any + options = parse(options, argv) + let variables = Object.assign({}, ...Object.keys(argv).filter((k) => k.startsWith('var-')).map((k) => { + return { + [k.replace('var-', '')]: argv[k] + } + })) + options.variables = { + ...options.variables, + ...variables, + ...DATE_VARS(), + ...{ + model: argv.model + } + } + logger.settings.minLevel = options.logLevel as any + if (options.source && !options.srcInfo) { + if (!exists(options.source)) { + logger.error(`Invalid source file, doesn't exists: ${options.source} `); + return; + } + } + if (options.dry) { + logger.info(`Abort : Dry enabled`) + return + } + logger.debug(`Compile with options`, options) + await compile(options) + }) +} diff --git a/packages/osrl/src/commands/init.ts b/packages/osrl/src/commands/init.ts new file mode 100644 index 00000000..468f0cdd --- /dev/null +++ b/packages/osrl/src/commands/init.ts @@ -0,0 +1,32 @@ +import * as CLI from 'yargs'; +import { logger } from '../index'; +import { defaultOptions } from '../_cli'; +import { read } from '../lib/net/sheets' + +let options = (yargs: CLI.Argv) => defaultOptions(yargs); + +// node ./main.js init google-sheets --sheet='1oVEiGH4o3SV-mAA3Mb-WNVJMyYl4VMxLjWjrSw_ipJY' --range='Parts!B4:B5' + +const initGSheets = async (sheet, range) =>{ + return read(sheet,range) +} + +export const register = (cli: CLI.Argv) => { + return cli.command('init ', 'Initialize specific language features', options, async (argv: CLI.Arguments) => { + if (argv.help) { + return; + } + const verb = argv.verb; + if(!verb){ + logger.error(`You need to specify a verb`); + } + + if(verb==='google-sheets'){ + const sheet = argv.sheet; + const range = argv.range; + initGSheets(sheet,range).then((d)=>{ + logger.info('done google auth | sheet result', d ); + }) + } + }); +}; diff --git a/packages/osrl/src/conf/bootstrap.ts b/packages/osrl/src/conf/bootstrap.ts new file mode 100644 index 00000000..a6d2537b --- /dev/null +++ b/packages/osrl/src/conf/bootstrap.ts @@ -0,0 +1,153 @@ +import * as path from 'path' +import { resolveConfig } from "../lib/index" +import { logger } from '../' +import * as StringUtils from '../lib/StringUtils' +import * as HexUtils from '../lib/HexUtils' +import * as Arrays from '../lib/arrays' +import * as Primitives from '../lib/primitives' +import { markdownTable, md2html } from '../lib/markdown' +import * as fm from 'front-matter' +import { forward_slash, sizeToString } from '../lib/fs' +import { CONFIG_DEFAULT, DEFAULT_ROOTS } from '@plastichub/osr-commons' +import { IBaseOptions, IProcessingNode } from '@plastichub/fs/interfaces' +import { sync as iterator } from '@plastichub/fs/iterator' +import { sync as exists } from '@plastichub/fs/exists' +import { sync as write } from '@plastichub/fs/write' +import { sync as read } from '@plastichub/fs/read' +import { ArrayIterator } from '@plastichub/core/iterator' +import { resolve } from "@plastichub/osr-commons" +import { IObjectLiteral } from '@plastichub/core' + +import * as env from 'env-var'; +import * as os from 'os' +import * as fs from 'fs' +import * as crypto from 'crypto' +import * as cheerio from 'cheerio' +import { Promise as BPromise } from 'bluebird' +import * as cacache from 'cacache' +import { html_beautify } from 'js-beautify' + +const convert = require('convert-units') +const fg = require('fast-glob') +const findUp = require('find-up') +const hljs = require('highlight.js') +const prettyHtml = require('json-pretty-html').default +const prettyJSON = require('json-format-highlight') +const TOML = require('@iarna/toml') +const TOMLParser = require('@iarna/toml/lib/toml-parser.js') +const xlsx = require('node-xlsx') +const YAML = require('json-to-pretty-yaml') + +/////////////////////////// +// +// osr-media stub + +export interface Context extends IObjectLiteral { + markdownTable: (data: any, options?: any) => string + cacache: any + cheerio: any + TOML: any + frontmatter: any + logger: any + config: any + PATHS: any + fs: { + findUp: any, + iterator: (from: string, options: IBaseOptions) => ArrayIterator + glob: (path: string, options: any) => string[], + slash: (s: string) => string, + EIteratorFlags: { + MODE: 2, + TIMES: 4, + SYMLINKS: 8, + FILE_SIZE: 16, + DIRECTORY_SIZE: 32, + CHECKSUM: 64, + MIME: 128 + }, + sizeToString: (size: number) => string; + dir: (dir, glob) => string[]; + path: any, + exists: (path: string) => boolean | string, + resolve: (path: string, alt: boolean, vars: IObjectLiteral) => string[], + write: (path: string, content: string) => void, + read: (path: string, type: string) => string | Buffer + } +} + +export const context: Context = { + convert: convert, + ...StringUtils, + ...HexUtils, + ...Arrays, + ...Primitives, + markdownTable, + md2html, + cacache, + cheerio, + logger, + config: CONFIG_DEFAULT(), + PATHS: DEFAULT_ROOTS, + TOML: { + parse: TOML.parse, + stringify: TOML.stringify, + parser: TOMLParser + }, + frontmatter: fm, + YAML, + resolveConfig, + prettyHtml, + prettyJSON, + html_beautify, + BPromise, + hljs, + xlsx: { + build: xlsx.build, + parse: xlsx.parse + }, + path, + fs: { + findUp: findUp, + iterator: iterator, + glob: fg, + slash: forward_slash, + EIteratorFlags: { + MODE: 2, + TIMES: 4, + SYMLINKS: 8, + FILE_SIZE: 16, + DIRECTORY_SIZE: 32, + CHECKSUM: 64, + MIME: 128 + }, + sizeToString: sizeToString, + dir: (dir, glob) => fg.sync(glob, { dot: true, cwd: dir, absolute: true }) as [], + ...fs, + path, + exists, + resolve, + write, + read: read as any + }, + os: { + env: env, + ...os + }, + crypto: { + ...crypto, + encrypt: (text, password, algorithm = 'aes-256-cbc') => { + const iv = crypto.randomBytes(16); + const cipher = crypto.createCipheriv(algorithm, password, iv); + let crypted = cipher.update(text, 'utf8', 'hex'); + crypted += cipher.final('hex'); + return crypted; + }, + decrypt: (text, password, algorithm = 'aes-128-ecb') => { + const iv = crypto.randomBytes(16); + const decipher = crypto.createCipheriv(algorithm, password, iv) + let dec = decipher.update(text, 'hex', 'utf8'); + dec += decipher.final('utf8'); + return dec; + } + } +} diff --git a/packages/osrl/src/constants.ts b/packages/osrl/src/constants.ts new file mode 100644 index 00000000..5dd4df0d --- /dev/null +++ b/packages/osrl/src/constants.ts @@ -0,0 +1,2 @@ +export const MODULE_NAME = `OSRL` +export const PROFILE_FILE_NAME = `.osrl.json` \ No newline at end of file diff --git a/packages/osrl/src/filters/index.ts b/packages/osrl/src/filters/index.ts new file mode 100644 index 00000000..258f1483 --- /dev/null +++ b/packages/osrl/src/filters/index.ts @@ -0,0 +1,92 @@ +import { Converter } from 'showdown' +import { html_beautify } from 'js-beautify' +import { markdownSync as markdown, markdownSync } from '../plugins/turndown' +import { IOptions } from '../types' +import { substitute } from '..' +import { logger } from '../index' + +export type Filter = (src: any) => any +export type FilterMap = { [key: string]: Filter } +////////////////////////////////////////////////////// +// +// Filters +export const md2html = (content) => { + let converter = new Converter({ + tables: true, + parseImgDimensions: true, + simplifiedAutoLink: true, + tasklists: true + }); + converter.setOption('literalMidWordUnderscores', 'true') + return converter.makeHtml(content) +} +export const beautify = (content) => html_beautify(content, {}) + +////////////////////////////////////////////////////// +// +// Filter Utils +export const toFilters = (src: any, Filters: FilterMap): Filter[] => { + src = (src || '').split(',') + const ret: Filter[] = [] + src.forEach((f) => { + if (Filters[f]) { + ret.push(Filters[f]) + } + }) + return ret +} +export const applyFilters = async (src: any, _filters: string, filters: FilterMap): Promise => { + toFilters(_filters, filters).forEach((f) => { + let _ret = f(src) + if (_ret) { + src = _ret + } + }) + return src +} + + +export function cleanArray(arr: any[]): any[] { + const uniqueItems = Array.from(new Set(arr.map(item => JSON.stringify(item)))) + .map(item => JSON.parse(item)) + return uniqueItems.filter(item => { + if (Array.isArray(item)) { + return item.length > 0; // Exclude empty arrays + } else if (typeof item === 'object' && item !== null) { + return Object.keys(item).length > 0; // Exclude empty objects + } else if (typeof item === 'string') { + return (item) + } + return true + }).map(item => { + if (typeof item === 'string') { + return item + } + return item + }) +} +export const isValidUrl = (url: string): boolean => { + try { + new URL(url); + return true; + } catch (_) { + return false; + } +} + +export const Filters = (options: IOptions): FilterMap => { + return { + html: md2html, + beautify: beautify, + substitute: (str) => substitute(false, str, options.variables), + markdown: (str) => markdownSync(str, options, null), + JSONParse: (str) => { + try { + return JSON.parse(str) + } catch (e) { + logger.error(`Filter Error : JSONParse: ${e} : ${str} @ ${options.source}`) + return str + } + } + } +} \ No newline at end of file diff --git a/packages/osrl/src/fs/index.ts b/packages/osrl/src/fs/index.ts new file mode 100644 index 00000000..aab02ac3 --- /dev/null +++ b/packages/osrl/src/fs/index.ts @@ -0,0 +1,66 @@ + +import * as path from 'path' +import { resolve as nodeResolve, extname } from 'path' +import { stat, statSync, readFileSync as nodeReadFileSync } from 'fs' + +export { sync as dir } from '@plastichub/fs/dir' +import { sync as read } from '@plastichub/fs/read' +import { async as readAsync } from '@plastichub/fs/read' +import * as _ from '../liquid/underscore' + +export const exists = (filepath: string) => statAsync(filepath).then(() => true).catch(() => false); + +import { md2html } from '../filters' +import { csvToMarkdown } from '../plugins/' + + +const statAsync = _.promisify(stat) +const csv = (file: string) => { + let content = read(file) as string; + return new Promise((resolve) => { + resolve(csvToMarkdown(content)); + }); +} + +const plugins = { + '.csv': csv +} + +export function readFile(filepath: string): any { + const parts = path.parse(filepath); + if (plugins[parts.ext]) { + return plugins[parts.ext](filepath); + } + if (filepath.includes('.md.') || filepath.endsWith('.md')) { + let content = read(filepath) as string; + return new Promise((resolve) => { + resolve(md2html(content)); + }); + } + return readAsync(filepath); +} +export function existsSync(filepath: string) { + try { + statSync(filepath) + return true + } catch (err) { + return false + } +} +export function readFileSync(filepath: string) { + return nodeReadFileSync(filepath, 'utf8') +} +export function resolve(root: string, file: string, ext: string) { + if (!extname(file)) file += ext + return nodeResolve(root, file) +} + +export const defaultFS = (resolve) => { + return { + exists: (f) => exists(f), + existsSync: existsSync, + readFile: (f) => readFile(resolve(f)), + readFileSync: readFileSync, + resolve + } +} \ No newline at end of file diff --git a/packages/osrl/src/i18n.ts b/packages/osrl/src/i18n.ts new file mode 100644 index 00000000..c2974a4d --- /dev/null +++ b/packages/osrl/src/i18n.ts @@ -0,0 +1,83 @@ + +import { + I18N_SOURCE_LANGUAGE, I18N_STORE, + OSR_ROOT +} from './config' + +import { IOptions as IOptionsI18n } from '@plastichub/osr-i18n/types' + +import { CONFIG_DEFAULT } from '@plastichub/osr-commons' + +import { translateDeepL, getTranslation, translate } from '@plastichub/osr-i18n/lib/translate' +import { sync as read } from '@plastichub/fs/read' +import { sync as write } from '@plastichub/fs/write' + +import { sanitize } from '@plastichub/osr-i18n/_cli' + +import { createHash } from 'crypto' + +const removeNonPrintableCharacters = (text: string): string => text.replace(/[^\x20-\x7E]/g, '') + +export const clean = (text: string = "") => text.trim() +export const hash = (text: string) => createHash('md5').update(clean(text)).digest('base64') + +export const store = (storePath: string, text: string, file: string = '') => { + const _hash: string = hash(text) + const store = read(storePath, 'json') || {} + store[_hash] = clean(text) + write(storePath, store) +} + +export const translateText = async (text: string, srcLang: string, dstLang: string, storePath: string) => { + if (text.length === 0) { + return '' + } + if (srcLang === dstLang) { + store(storePath, text) + return + } + const config: any = CONFIG_DEFAULT() + text = clean(text) + const _hash: string = hash(text) + const db = read(storePath, 'json') || {} + if (db[text]) { + return db[text] + } + const out = await translateDeepL( + text, + srcLang, + dstLang, + { + ...config.deepl + }, { + + }, "") + + const translation = getTranslation((out as any), false) + + if (translation) { + db[text] = translation + write(storePath, db) + return translation + } +} + +export const translateString = (str: string, srcLang: string, dstLanguage: string) => { + + const translateProductAssets = async () => { + const config: any = CONFIG_DEFAULT() + if (dstLanguage === I18N_SOURCE_LANGUAGE) { + return + } + const i18nOptions: IOptionsI18n = { + srcLang: I18N_SOURCE_LANGUAGE, + dstLang: dstLanguage, + store: I18N_STORE(OSR_ROOT(), dstLanguage), + noCache: true, + api_key: config.deepl.auth_key, + logLevel: 'warn' + } + const ret = await translate(sanitize(i18nOptions) as any) + return ret + } +} diff --git a/packages/osrl/src/index.ts b/packages/osrl/src/index.ts new file mode 100644 index 00000000..e48e0328 --- /dev/null +++ b/packages/osrl/src/index.ts @@ -0,0 +1,14 @@ +export * from './liquid' +export * from './Engine' +export * from './options' +export * from './types' + +import { MODULE_NAME } from './constants' +import { logger as _logger } from '@plastichub/core/debug' +import { substitute as _substitute, substituteAlt as _substituteAlt } from "@plastichub/core/strings" +import { IObjectLiteral } from "@plastichub/core" + +export const logger = _logger(MODULE_NAME) +export { getContext } from './Engine' +export const substitute = (alt: boolean, template: string, vars: IObjectLiteral) => alt ? _substituteAlt(template, vars) : _substitute(template, vars); + diff --git a/packages/osrl/src/lib/HexUtils.ts b/packages/osrl/src/lib/HexUtils.ts new file mode 100644 index 00000000..2c57787f --- /dev/null +++ b/packages/osrl/src/lib/HexUtils.ts @@ -0,0 +1,1347 @@ + +const utils: any = {}; +const types: any = {} +const json: any = {}; + +import * as _ from 'lodash'; +/** + * Converts a single hex number to a character. note that no checking is performed to ensure that this is just a hex + * number, eg. no spaces etc. + * @param hex {string} the hex codepoint to be converted. + * @returns {string} + * @memberOf module:xide/utils/StringUtils + */ +const hex2char = (hex: string): string => { + let result = ''; + let n = parseInt(hex, 16); + if (n <= 0xFFFF) { + result += String.fromCharCode(n); + } else if (n <= 0x10FFFF) { + n -= 0x10000; + result += String.fromCharCode(0xD800 | (n >> 10)) + String.fromCharCode(0xDC00 | (n & 0x3FF)); + } else { + result += 'hex2Char error: Code point out of range: ' + dec2hex(n); + } + return result; +} + +/** + * Converts a single string representing a decimal number to a character. Note that no checking is performed to + * ensure that this is just a hex number, eg. no spaces etc. + * @param n {string} dec: string, the dec codepoint to be converted + * @returns {string} + */ +const dec2char = (n: number) => { + let result = ''; + if (n <= 0xFFFF) { + result += String.fromCharCode(n); + } else if (n <= 0x10FFFF) { + n -= 0x10000; + result += String.fromCharCode(0xD800 | (n >> 10)) + String.fromCharCode(0xDC00 | (n & 0x3FF)); + } else { + result += 'dec2char error: Code point out of range: ' + dec2hex(n); + } + return result; +} + +const dec2hex = (textString) => (textString + 0).toString(16).toUpperCase(); + +let hexequiv = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F']; + +const dec2hex2 = (textString) => hexequiv[(textString >> 4) & 0xF] + hexequiv[textString & 0xF]; + +const dec2hex4 = (textString) => { + return hexequiv[(textString >> 12) & 0xF] + hexequiv[(textString >> 8) & 0xF] + + hexequiv[(textString >> 4) & 0xF] + hexequiv[textString & 0xF]; +} + +const convertChar2CP = (textString: string) => { + let haut = 0; + let n = 0; + let CPstring = ''; + for (let i = 0; i < textString.length; i++) { + let b = textString.charCodeAt(i); + if (b < 0 || b > 0xFFFF) { + CPstring += 'Error in convertChar2CP: byte out of range ' + dec2hex(b) + '!'; + } + if (haut !== 0) { + if (0xDC00 <= b && b <= 0xDFFF) { + CPstring += dec2hex(0x10000 + ((haut - 0xD800) << 10) + (b - 0xDC00)) + ' '; + haut = 0; + continue; + } else { + CPstring += 'Error in convertChar2CP: surrogate out of range ' + dec2hex(haut) + '!'; + haut = 0; + } + } + if (0xD800 <= b && b <= 0xDBFF) { + haut = b; + } else { + CPstring += dec2hex(b) + ' '; + } + } + return CPstring.substring(0, CPstring.length - 1); +} + +/** + * Converts a string containing &#x...; escapes to a string of characters. + */ +const removeWhitespacesFromHexSequence = (str) => { + // convert up to 6 digit escapes to characters + str = str.replace(/0x([A-Fa-f0-9]{1,4})(\s)?/g, + // tslint:disable-next-line:space-before-function-paren + (matchstr, parens) => hex2char(parens) + ); + return str; +} + +// ========================== Converting to characters ============================================== +/** + * Converts all escapes in the text str to characters, and can interpret numbers as escapes too. + * @param str {string} the text to be converted. + * @param numbers {string} enum [none, hex, dec, utf8, utf16], what to treat numbers as. + * @returns {string|*} + * @memberOf module:xide/utils/StringUtils + */ +export const convertAllEscapes = (str: string, numbers: string): string | any => { + let sle = false; + str = convertUnicode2Char(str); + str = removeWhitespacesFromHexSequence(str); + + str = convertZeroX2Char(str); + str = convertHexNCR2Char(str); + str = convertDecNCR2Char(str); + if (sle) { + str = convertjEsc2Char(str, true); + } else { + str = convertjEsc2Char(str, false); + str = convertCSS2Char(str, false); + } + str = convertpEnc2Char(str); + str = convertEntities2Char(str); + str = convertNumbers2Char(str, numbers); + + return str; +} +/** + * Converts a string containing U+... escapes to a string of characters. + * @param str {string} the input + * @returns {string} + * @memberOf module:xide/utils/StringUtils + */ +const convertUnicode2Char = (str: string): string => { + // first convert the 6 digit escapes to characters + str = str.replace(/[Uu]\+10([A-Fa-f0-9]{4})/g, + (matchstr, parens) => hex2char('10' + parens) + ); + // next convert up to 5 digit escapes to characters + str = str.replace(/[Uu]\+([A-Fa-f0-9]{1,5})/g, + (matchstr, parens) => hex2char(parens) + ); + return str; +} + +/** + * Converts a string containing &#x...; escapes to a string of characters + * @param str + * @returns {*} + */ +const convertHexNCR2Char = (str): string => { + // convert up to 6 digit escapes to characters + str = str.replace(/&#x([A-Fa-f0-9]{1,6});/g, + (matchstr, parens) => hex2char(parens) + ); + return str; +} + +/** + * Converts a string containing &#...; escapes to a string of characters + * @param str + * @returns {*} + */ +const convertDecNCR2Char = (str): string => { + // convert up to 6 digit escapes to characters + str = str.replace(/&#([0-9]{1,7});/g, + (matchstr, parens) => dec2char(parens) + ); + return str; +} + +/** + * Converts a string containing 0x... escapes to a string of characters, up to 6 digit escapes to characters. + * @param str + * @returns {*} + */ +const convertZeroX2Char = (str: string): string => { + str = str.replace(/0x([A-Fa-f0-9]{1,6})/g, + (matchstr, parens) => hex2char(parens) + ); + return str; +} + +/** + * Converts a string containing CSS escapes to a string of characters, up to 6 digit escapes to characters & throw + * away any following whitespace. + * @param str {string} str: string, the input + * @param convertbackslash {boolean} true if you want \x etc to become x or \a to be treated as 0xA + * @returns {*} + * @memberOf module:xide/utils/StringUtils + */ +export const convertCSS2Char = (str: string, convertbackslash: boolean): string => { + if (convertbackslash) { + str = str.replace(/\\([A-Fa-f0-9]{1,6})(\s)?/g, + (matchstr, parens) => hex2char(parens) + ); + str = str.replace(/\\/g, ''); + } else { + str = str.replace(/\\([A-Fa-f0-9]{2,6})(\s)?/g, + (matchstr, parens) => hex2char(parens) + ); + } + return str; +} + +/** + * Converts a string containing JavaScript or Java escapes to a string of characters + * @param str {string} str: string, the input + * @param shortEscapes {boolean} if true the function will convert \b etc to characters + * @returns {*} + * @memberOf module:xide/utils/StringUtils + */ +export const convertjEsc2Char = (str: string, shortEscapes: boolean): any => { + // convert ES6 escapes to characters + str = str.replace(/\\u\{([A-Fa-f0-9]{1,})\}/g, + (matchstr, parens) => hex2char(parens) + ); + // convert \U and 6 digit escapes to characters + str = str.replace(/\\U([A-Fa-f0-9]{8})/g, + (matchstr, parens) => hex2char(parens) + ); + // convert \u and 6 digit escapes to characters + str = str.replace(/\\u([A-Fa-f0-9]{4})/g, + (matchstr, parens) => hex2char(parens) + ); + // convert \b etc to characters, if flag set + if (shortEscapes) { + str = str.replace(/\\b/g, '\b'); + str = str.replace(/\\t/g, '\t'); + str = str.replace(/\\n/g, '\n'); + str = str.replace(/\\v/g, '\v'); + str = str.replace(/\\f/g, '\f'); + str = str.replace(/\\r/g, '\r'); + str = str.replace(/\\\'/g, '\''); + str = str.replace(/\\\"/g, '\"'); + str = str.replace(/\\\\/g, '\\'); + } + return str; +} + +/** + * Converts a string containing precent encoded escapes to a string of characters + * @param str {string} the input + * @returns {string} + * @memberOf module:xide/utils/StringUtils + */ +const convertpEnc2Char = (str: string): string => { + // find runs of hex numbers separated by % and send them for conversion + str = str.replace(/((%[A-Fa-f0-9]{2})+)/g, + (matchstr, parens) => convertpEsc2Char(parens) + ); + return str; +} + +/** + * converts a string containing HTML/XML character entities to a string of characters + * @param str {string} the input + * @returns {string} + * @memberOf module:xide/utils/StringUtils + */ +function convertEntities2Char(str) { + let entities = {}; + str = str.replace(/&([A-Za-z0-9]+);/g, + function (matchstr, parens) { + if (parens in entities) { + return entities[parens]; + } else { + return matchstr; + } + } + ); + return str; +} + +/** + * Converts a string containing HTML/XML character entities to a string of characters + * @param str {string} the input + * @param type {string} none, hex, dec, utf8, utf16. what to treat numbers as + * @returns {string} + * @memberOf module:xide/utils/StringUtils + */ +function convertNumbers2Char(str, type) { + if (type === 'hex') { + str = str.replace(/(\b[A-Fa-f0-9]{2,6}\b)/g, + (matchstr, parens) => hex2char(parens) + ); + } else if (type === 'dec') { + str = str.replace(/(\b[0-9]+\b)/g, + function (matchstr, parens) { + return dec2char(parens); + } + ); + } else if (type === 'utf8') { + str = str.replace(/(( [A-Fa-f0-9]{2})+)/g, + function (matchstr, parens) { + return convertUTF82Char(parens); + } + ); + } else if (type === 'utf16') { + str = str.replace(/(( [A-Fa-f0-9]{1,6})+)/g, + function (matchstr, parens) { + return convertUTF162Char(parens); + } + ); + } + return str; +} + +/** + * Converts to characters a sequence of space-separated hex numbers representing bytes in utf8. + * @param str {string} the input + * @returns {*} + * @memberOf module:xide/utils/StringUtils + */ +function convertUTF82Char(str) { + let outputString = ''; + let counter = 0; + let n = 0; + + // remove leading and trailing spaces + str = str.replace(/^\s+/, ''); + str = str.replace(/\s+$/, ''); + if (str.length === 0) { + return ''; + } + str = str.replace(/\s+/g, ' '); + + let listArray = str.split(' '); + for (let i = 0; i < listArray.length; i++) { + let b = parseInt(listArray[i], 16); // alert('b:'+dec2hex(b)); + switch (counter) { + case 0: + if (0 <= b && b <= 0x7F) { // 0xxxxxxx + outputString += dec2char(b); + } else if (0xC0 <= b && b <= 0xDF) { // 110xxxxx + counter = 1; + n = b & 0x1F; + } else if (0xE0 <= b && b <= 0xEF) { // 1110xxxx + counter = 2; + n = b & 0xF; + } else if (0xF0 <= b && b <= 0xF7) { // 11110xxx + counter = 3; + n = b & 0x7; + } else { + outputString += 'convertUTF82Char: error1 ' + dec2hex(b) + '! '; + } + break; + case 1: + if (b < 0x80 || b > 0xBF) { + outputString += 'convertUTF82Char: error2 ' + dec2hex(b) + '! '; + } + counter--; + outputString += dec2char((n << 6) | (b - 0x80)); + n = 0; + break; + case 2: + case 3: + if (b < 0x80 || b > 0xBF) { + outputString += 'convertUTF82Char: error3 ' + dec2hex(b) + '! '; + } + n = (n << 6) | (b - 0x80); + counter--; + break; + } + } + return outputString.replace(/ $/, ''); +} + +/** + * Converts a string of UTF-16 code units to characters + * @param str {string} the input, the equence of UTF16 code units, separated by spaces. + * @returns {string|null} + * @memberOf module:xide/utils/StringUtils + */ +function convertUTF162Char(str) { + let highsurrogate = 0; + let outputString = ''; + + // remove leading and multiple spaces + str = str.replace(/^\s+/, ''); + str = str.replace(/\s+$/, ''); + if (str.length === 0) { + return null; + } + str = str.replace(/\s+/g, ' '); + + let listArray = str.split(' '); + for (let i = 0; i < listArray.length; i++) { + let b = parseInt(listArray[i], 16); + if (b < 0 || b > 0xFFFF) { + outputString += '!Error in convertUTF162Char: unexpected value, b=' + dec2hex(b) + '!'; + } + if (highsurrogate !== 0) { + if (0xDC00 <= b && b <= 0xDFFF) { + outputString += dec2char(0x10000 + ((highsurrogate - 0xD800) << 10) + (b - 0xDC00)); + highsurrogate = 0; + continue; + } else { + outputString += 'Error in convertUTF162Char: low surrogate expected, b=' + dec2hex(b) + '!'; + highsurrogate = 0; + } + } + if (0xD800 <= b && b <= 0xDBFF) { // start of supplementary character + highsurrogate = b; + } else { + outputString += dec2char(b); + } + } + return outputString; +} + +/** + * Converts to characters a sequence of %-separated hex numbers representing bytes in utf8. + * @param str {string} the input + * @returns {string} + * @memberOf module:xide/utils/StringUtils + */ +function convertpEsc2Char(str) { + let outputString = ''; + let counter = 0; + let n = 0; + + let listArray = str.split('%'); + for (let i = 1; i < listArray.length; i++) { + let b = parseInt(listArray[i], 16); + switch (counter) { + case 0: + if (0 <= b && b <= 0x7F) { // 0xxxxxxx + outputString += dec2char(b); + } else if (0xC0 <= b && b <= 0xDF) { // 110xxxxx + counter = 1; + n = b & 0x1F; + } else if (0xE0 <= b && b <= 0xEF) { // 1110xxxx + counter = 2; + n = b & 0xF; + } else if (0xF0 <= b && b <= 0xF7) { // 11110xxx + counter = 3; + n = b & 0x7; + } else { + outputString += 'convertpEsc2Char: error ' + dec2hex(b) + '! '; + } + break; + case 1: + if (b < 0x80 || b > 0xBF) { + outputString += 'convertpEsc2Char: error ' + dec2hex(b) + '! '; + } + counter--; + outputString += dec2char((n << 6) | (b - 0x80)); + n = 0; + break; + case 2: + case 3: + if (b < 0x80 || b > 0xBF) { + outputString += 'convertpEsc2Char: error ' + dec2hex(b) + '! '; + } + n = (n << 6) | (b - 0x80); + counter--; + break; + } + } + return outputString; +} + +/** + * Converts XML or HTML text to characters by removing all character entities and ncrs. + * @param str {string} the input + * @returns {string} + * @memberOf module:xide/utils/StringUtils + */ +function convertXML2Char(str) { + // remove various escaped forms + str = convertHexNCR2Char(str); + str = convertDecNCR2Char(str); + str = convertEntities2Char(str); + return str; +} + +// ============================== Convert to escapes =============================================== + +/** + * replaces xml/html syntax-sensitive characters in a string with entities + * also replaces invisible and ambiguous characters with escapes (list to be extended). + * @param str + * @param parameters {boolean] if true, invisible characters are converted to NCRs + * @returns {*} + * @memberOf module:xide/utils/StringUtils + */ +function convertCharStr2XML(str, parameters) { + // bidimarkup: boolean, if true, bidi rle/lre/pdf/rli/lri/fsi/pdi characters are converted to markup + str = str.replace(/&/g, '&'); + str = str.replace(/"/g, '"'); + str = str.replace(//g, '>'); + + // replace invisible and ambiguous characters + if (parameters.match(/convertinvisibles/)) { + str = str.replace(/\u2066/g, '⁦'); // lri + str = str.replace(/\u2067/g, '⁧'); // rli + str = str.replace(/\u2068/g, '⁨'); // fsi + str = str.replace(/\u2069/g, '⁩'); // pdi + + str = str.replace(/\u202A/g, '‪'); // lre + str = str.replace(/\u202B/g, '‫'); // rle + str = str.replace(/\u202D/g, '‭'); // lro + str = str.replace(/\u202E/g, '‮'); // rlo + str = str.replace(/\u202C/g, '‬'); // pdf + str = str.replace(/\u200E/g, '‎'); // lrm + str = str.replace(/\u200F/g, '‏'); // rlm + + str = str.replace(/\u2000/g, ' '); // en quad + str = str.replace(/\u2001/g, ' '); // em quad + str = str.replace(/\u2002/g, ' '); // en space + str = str.replace(/\u2003/g, ' '); // em space + str = str.replace(/\u2004/g, ' '); // 3 per em space + str = str.replace(/\u2005/g, ' '); // 4 per em space + str = str.replace(/\u2006/g, ' '); // 6 per em space + str = str.replace(/\u2007/g, ' '); // figure space + str = str.replace(/\u2008/g, ' '); // punctuation space + str = str.replace(/\u2009/g, ' '); // thin space + str = str.replace(/\u200A/g, ' '); // hair space + str = str.replace(/\u200B/g, '​'); // zwsp + str = str.replace(/\u205F/g, ' '); // mmsp + // str = str.replace(/\uA0/g, ' ') // nbsp + str = str.replace(/\u3000/g, ' '); // ideographic sp + str = str.replace(/\u202F/g, ' '); // nnbsp + + str = str.replace(/\u180B/g, '᠋'); // mfvs1 + str = str.replace(/\u180C/g, '᠌'); // mfvs2 + str = str.replace(/\u180D/g, '᠍'); // mfvs3 + + str = str.replace(/\u200C/g, '‌'); // zwnj + str = str.replace(/\u200D/g, '‍'); // zwj + str = str.replace(/\u2028/g, '
'); // line sep + str = str.replace(/\u206A/g, ''); // iss + str = str.replace(/\u206B/g, ''); // ass + str = str.replace(/\u206C/g, ''); // iafs + str = str.replace(/\u206D/g, ''); // aafs + str = str.replace(/\u206E/g, ''); // nads + str = str.replace(/\u206F/g, ''); // nods + } + + // convert lre/rle/pdf/rli/lri/fsi/pdi to markup + if (parameters.match(/bidimarkup/)) { + str = str.replace(/\u2066/g, '<span dir="ltr">'); // lri + str = str.replace(/\u2067/g, '<span dir="rtl">'); // rli + str = str.replace(/\u2068/g, '<span dir="auto">'); // fsi + str = str.replace(/\u2069/g, '</span>'); // pdi + + str = str.replace(/\u202A/g, '<span dir="ltr">'); // + str = str.replace(/\u202B/g, '<span dir="rtl">'); + str = str.replace(/\u202C/g, '</span>'); + str = str.replace(/‪/g, '<span dir="ltr">'); + str = str.replace(/‫/g, '<span dir="rtl">'); + // str = str.replace(/\u202D/g, '<bdo dir="ltr">') + // str = str.replace(/\u202E/g, '<bdo dir="rtl">') + str = str.replace(/‬/g, '</span>'); + } + + return str; +} + +/** + * Converts a string of characters to code points or code point based escapes. + * @param str {string} the input + * @param parameters {string} enum [ascii, latin1], a set of characters to not convert. + * @param pad {boolean} if true, hex numbers lower than 1000 are padded with zeros. + * @param before {string} any characters to include before a code point (eg. &#x for NCRs). + * @param after {string} any characters to include after (eg. ; for NCRs). + * @param base {string] enum [hex, dec], hex or decimal output. + * @returns {string} + * @memberOf module:xide/utils/StringUtils + */ +function convertCharStr2SelectiveCPs(str, parameters, pad, before, after, base) { + let haut = 0; + let n = 0; + let cp; + let CPstring = ''; + for (let i = 0; i < str.length; i++) { + let b = str.charCodeAt(i); + if (b < 0 || b > 0xFFFF) { + CPstring += 'Error in convertCharStr2SelectiveCPs: byte out of range ' + dec2hex(b) + '!'; + } + if (haut !== 0) { + if (0xDC00 <= b && b <= 0xDFFF) { + if (base === 'hex') { + CPstring += before + dec2hex(0x10000 + ((haut - 0xD800) << 10) + (b - 0xDC00)) + after; + } else { + cp = 0x10000 + ((haut - 0xD800) << 10) + (b - 0xDC00); + CPstring += before + cp + after; + } + haut = 0; + continue; + } else { + CPstring += 'Error in convertCharStr2SelectiveCPs: surrogate out of range ' + dec2hex(haut) + '!'; + haut = 0; + } + } + if (0xD800 <= b && b <= 0xDBFF) { + haut = b; + } else { + if (parameters.match(/ascii/) && b <= 127) { // && b != 0x3E && b != 0x3C && b != 0x26) { + CPstring += str.charAt(i); + } else if (b <= 255 && parameters.match(/latin1/)) { // && b != 0x3E && b != 0x3C && b != 0x26) { + CPstring += str.charAt(i); + } else { + if (base === 'hex') { + cp = dec2hex(b); + if (pad) { + while (cp.length < 4) { + cp = '0' + cp; + } + } + } else { + cp = b; + } + CPstring += before + cp + after; + } + } + } + return CPstring; +} + +/** + * + * @param textString + * @returns {string} + */ +function convertCharStr2HexNCR(textString) { + let outputString = ''; + textString = textString.replace(/^\s+/, ''); + if (textString.length === 0) { + return ''; + } + textString = textString.replace(/\s+/g, ' '); + let listArray = textString.split(' '); + for (let i = 0; i < listArray.length; i++) { + let n = parseInt(listArray[i], 16); + outputString += '&#x' + dec2hex(n) + ';'; + } + return (outputString); +} + +/** + * + * @param str {string] sequence of Unicode characters + * @returns {string} + */ +function convertCharStr2pEsc(str) { + let outputString = ''; + let CPstring = convertChar2CP(str); + if (str.length === 0) { + return ''; + } + // process each codepoint + let listArray = CPstring.split(' '); + for (let i = 0; i < listArray.length; i++) { + let n = parseInt(listArray[i], 16); + // if (i > 0) { outputString += ' ';} + if (n === 0x20) { + outputString += '%20'; + } else if (n >= 0x41 && n <= 0x5A) { + outputString += String.fromCharCode(n); + } else if (n >= 0x61 && n <= 0x7A) { + // alpha + outputString += String.fromCharCode(n); + } else if (n >= 0x30 && n <= 0x39) { + outputString += String.fromCharCode(n); + } else if (n === 0x2D || n === 0x2E || n === 0x5F || n === 0x7E) { + outputString += String.fromCharCode(n); + } else if (n <= 0x7F) { + // - . _ ~ + outputString += '%' + dec2hex2(n); + } else if (n <= 0x7FF) { + outputString += '%' + dec2hex2(0xC0 | ((n >> 6) & 0x1F)) + '%' + dec2hex2(0x80 | (n & 0x3F)); + } else if (n <= 0xFFFF) { + outputString += '%' + dec2hex2(0xE0 | ((n >> 12) & 0x0F)) + '%' + dec2hex2(0x80 | ((n >> 6) & 0x3F)) + '%' + dec2hex2(0x80 | (n & 0x3F)); + } else if (n <= 0x10FFFF) { + outputString += '%' + dec2hex2(0xF0 | ((n >> 18) & 0x07)) + '%' + dec2hex2(0x80 | ((n >> 12) & 0x3F)) + '%' + dec2hex2(0x80 | ((n >> 6) & 0x3F)) + '%' + dec2hex2(0x80 | (n & 0x3F)); + } else { + outputString += '!Error ' + dec2hex(n) + '!'; + } + } + return (outputString); +} + +/** + * Converts a string of characters to UTF-8 byte codes, separated by spaces. + * @param str {string} sequence of Unicode characters. + * @returns {string} + * @memberOf module:xide/utils/StringUtils + */ +function convertCharStr2UTF8(str) { + let highsurrogate = 0; + let suppCP; // decimal code point value for a supp char + let n = 0; + let outputString = ''; + for (let i = 0; i < str.length; i++) { + let cc = str.charCodeAt(i); + if (cc < 0 || cc > 0xFFFF) { + outputString += '!Error in convertCharStr2UTF8: unexpected charCodeAt result, cc=' + cc + '!'; + } + if (highsurrogate !== 0) { + if (0xDC00 <= cc && cc <= 0xDFFF) { + suppCP = 0x10000 + ((highsurrogate - 0xD800) << 10) + (cc - 0xDC00); + outputString += ' ' + dec2hex2(0xF0 | ((suppCP >> 18) & 0x07)) + ' ' + dec2hex2(0x80 | ((suppCP >> 12) & 0x3F)) + ' ' + dec2hex2(0x80 | ((suppCP >> 6) & 0x3F)) + ' ' + dec2hex2(0x80 | (suppCP & 0x3F)); + highsurrogate = 0; + continue; + } else { + outputString += 'Error in convertCharStr2UTF8: low surrogate expected, cc=' + cc + '!'; + highsurrogate = 0; + } + } + if (0xD800 <= cc && cc <= 0xDBFF) { // high surrogate + highsurrogate = cc; + } else { + if (cc <= 0x7F) { + outputString += ' ' + dec2hex2(cc); + } else if (cc <= 0x7FF) { + outputString += ' ' + dec2hex2(0xC0 | ((cc >> 6) & 0x1F)) + ' ' + dec2hex2(0x80 | (cc & 0x3F)); + } else if (cc <= 0xFFFF) { + outputString += ' ' + dec2hex2(0xE0 | ((cc >> 12) & 0x0F)) + ' ' + dec2hex2(0x80 | ((cc >> 6) & 0x3F)) + ' ' + dec2hex2(0x80 | (cc & 0x3F)); + } + } + } + return outputString.substring(1); +} + +/** + * Converts a string of characters to UTF-16 code units, separated by spaces. + * @param str {string} sequence of Unicode characters. + * @returns {string} + * @memberOf module:xide/utils/StringUtils + */ +function convertCharStr2UTF16(str) { + let highsurrogate = 0; + let suppCP; + let n = 0; + let outputString = ''; + let result = ''; + for (let i = 0; i < str.length; i++) { + let cc = str.charCodeAt(i); + if (cc < 0 || cc > 0xFFFF) { + outputString += '!Error in convertCharStr2UTF16: unexpected charCodeAt result, cc=' + cc + '!'; + } + if (highsurrogate !== 0) { + if (0xDC00 <= cc && cc <= 0xDFFF) { + suppCP = 0x10000 + ((highsurrogate - 0xD800) << 10) + (cc - 0xDC00); + suppCP -= 0x10000; + outputString += dec2hex4(0xD800 | (suppCP >> 10)) + ' ' + dec2hex4(0xDC00 | (suppCP & 0x3FF)) + ' '; + highsurrogate = 0; + continue; + } else { + outputString += 'Error in convertCharStr2UTF16: low surrogate expected, cc=' + cc + '!'; + highsurrogate = 0; + } + } + if (0xD800 <= cc && cc <= 0xDBFF) { // start of supplementary character + highsurrogate = cc; + } else { + result = dec2hex(cc); + while (result.length < 4) { + result = '0' + result; + } + outputString += result + ' '; + } + } + return outputString.substring(0, outputString.length - 1); +} + +/** + * Converts a string of characters to JavaScript escapes. + * @param str {string} sequence of Unicode characters. + * @param parameters {string} a semicolon separated string showing ids for checkboxes that are turned on. + * @returns {string} + * @memberOf module:xide/utils/StringUtils + */ +function convertCharStr2jEsc(str, parameters) { + let highsurrogate = 0; + let suppCP; + let pad; + let n = 0; + let pars = parameters.split(';'); + let outputString = ''; + for (let i = 0; i < str.length; i++) { + let cc = str.charCodeAt(i); + if (cc < 0 || cc > 0xFFFF) { + outputString += '!Error in convertCharStr2UTF16: unexpected charCodeAt result, cc=' + cc + '!'; + } + if (highsurrogate !== 0) { // this is a supp char, and cc contains the low surrogate + if (0xDC00 <= cc && cc <= 0xDFFF) { + suppCP = 0x10000 + ((highsurrogate - 0xD800) << 10) + (cc - 0xDC00); + if (parameters.match(/cstyleSC/)) { + pad = suppCP.toString(16); + while (pad.length < 8) { + pad = '0' + pad; + } + outputString += '\\U' + pad; + } else if (parameters.match(/es6styleSC/)) { + pad = suppCP.toString(16); + outputString += '\\u{' + pad + '}'; + } else { + suppCP -= 0x10000; + outputString += '\\u' + dec2hex4(0xD800 | (suppCP >> 10)) + '\\u' + dec2hex4(0xDC00 | (suppCP & 0x3FF)); + } + highsurrogate = 0; + continue; + } else { + outputString += 'Error in convertCharStr2UTF16: low surrogate expected, cc=' + cc + '!'; + highsurrogate = 0; + } + } + if (0xD800 <= cc && cc <= 0xDBFF) { // start of supplementary character + highsurrogate = cc; + } else { // this is a BMP character + // outputString += dec2hex(cc) + ' '; + switch (cc) { + case 0: + outputString += '\\0'; + break; + case 8: + outputString += '\\b'; + break; + case 9: + if (parameters.match(/noCR/)) { + outputString += '\\t'; + } else { + outputString += '\t'; + } + break; + case 10: + if (parameters.match(/noCR/)) { + outputString += '\\n'; + } else { + outputString += '\n'; + } + break; + case 13: + if (parameters.match(/noCR/)) { + outputString += '\\r'; + } else { + outputString += '\r'; + } + break; + case 11: + outputString += '\\v'; + break; + case 12: + outputString += '\\f'; + break; + case 34: + if (parameters.match(/noCR/)) { + outputString += '\\\"'; + } else { + outputString += '"'; + } + break; + case 39: + if (parameters.match(/noCR/)) { + outputString += '\\\\'; + } else { + outputString += '\''; + } + break; + case 92: + outputString += '\\\\'; + break; + default: + if (cc > 0x1f && cc < 0x7F) { + outputString += String.fromCharCode(cc); + } else { + pad = cc.toString(16).toUpperCase(); + while (pad.length < 4) { + pad = '0' + pad; + } + outputString += '\\u' + pad; + } + } + } + } + return outputString; +} + +/** + * Converts a string of characters to CSS escapes. + * @param str {string} sequence of Unicode characters. + * @returns {string} + * @memberOf module:xide/utils/StringUtils + */ +function convertCharStr2CSS(str) { + // + // + let highsurrogate = 0; + let suppCP; + let pad; + let outputString = ''; + for (let i = 0; i < str.length; i++) { + let cc = str.charCodeAt(i); + if (cc < 0 || cc > 0xFFFF) { + outputString += '!Error in convertCharStr2CSS: unexpected charCodeAt result, cc=' + cc + '!'; + } + if (highsurrogate !== 0) { // this is a supp char, and cc contains the low surrogate + if (0xDC00 <= cc && cc <= 0xDFFF) { + suppCP = 0x10000 + ((highsurrogate - 0xD800) << 10) + (cc - 0xDC00); + pad = suppCP.toString(16).toUpperCase(); + if (suppCP < 0x10000) { + while (pad.length < 4) { + pad = '0' + pad; + } + } else { + while (pad.length < 6) { + pad = '0' + pad; + } + } + outputString += '\\' + pad + ' '; + highsurrogate = 0; + continue; + } else { + outputString += 'Error in convertCharStr2CSS: low surrogate expected, cc=' + cc + '!'; + highsurrogate = 0; + } + } + if (0xD800 <= cc && cc <= 0xDBFF) { // start of supplementary character + highsurrogate = cc; + } else { // this is a BMP character + if (cc === 0x5C) { + outputString += '\\\\'; + } else if (cc > 0x1f && cc < 0x7F) { + outputString += String.fromCharCode(cc); + } else if (cc === 0x9 || cc === 0xA || cc === 0xD) { + outputString += String.fromCharCode(cc); + } else /* if (cc > 0x7E) */ { + pad = cc.toString(16).toUpperCase(); + while (pad.length < 4) { + pad = '0' + pad; + } + outputString += '\\' + pad + ' '; + } + } + } + return outputString; +} + +/** + * Converts a string of characters to code points, separated by space. + * @param textString {string} the input + * @param parameters {string} enum [ascii, latin1], a set of characters to not convert. + * @param pad {boolean} if true, hex numbers lower than 1000 are padded with zeros. + * @param type {string} enum[hex, dec, unicode, zerox], whether output should be in hex or dec or unicode U+ form. + * @returns {string} + * @memberOf module:xide/utils/StringUtils + */ +function convertCharStr2CP(textString, parameters, pad, type) { + let haut = 0; + let n = 0; + let CPstring = ''; + let afterEscape = false; + let cp = ''; + for (let i = 0; i < textString.length; i++) { + let b = textString.charCodeAt(i); + if (b < 0 || b > 0xFFFF) { + CPstring += 'Error in convertChar2CP: byte out of range ' + dec2hex(b) + '!'; + } + if (haut !== 0) { + if (0xDC00 <= b && b <= 0xDFFF) { + if (afterEscape) { + CPstring += ' '; + } + if (type === 'hex') { + CPstring += dec2hex(0x10000 + ((haut - 0xD800) << 10) + (b - 0xDC00)); + } else if (type === 'unicode') { + CPstring += 'U+' + dec2hex(0x10000 + ((haut - 0xD800) << 10) + (b - 0xDC00)); + } else if (type === 'zerox') { + CPstring += '0x' + dec2hex(0x10000 + ((haut - 0xD800) << 10) + (b - 0xDC00)); + } else { + CPstring += 0x10000 + ((haut - 0xD800) << 10) + (b - 0xDC00); + } + haut = 0; + continue; + } else { + CPstring += 'Error in convertChar2CP: surrogate out of range ' + dec2hex(haut) + '!'; + haut = 0; + } + } + if (0xD800 <= b && b <= 0xDBFF) { + haut = b; + } else { + if (b <= 127 && parameters.match(/ascii/)) { + CPstring += textString.charAt(i); + afterEscape = false; + } else if (b <= 255 && parameters.match(/latin1/)) { + CPstring += textString.charAt(i); + afterEscape = false; + } else { + if (afterEscape) { + CPstring += ' '; + } + if (type === 'hex') { + cp = dec2hex(b); + if (pad) { + while (cp.length < 4) { + cp = '0' + cp; + } + } + } else if (type === 'unicode') { + cp = dec2hex(b); + if (pad) { + while (cp.length < 4) { + cp = '0' + cp; + } + } + CPstring += 'U+'; + } else if (type === 'zerox') { + cp = dec2hex(b); + if (pad) { + while (cp.length < 4) { + cp = '0' + cp; + } + } + CPstring += '0x'; + } else { + cp = b; + } + CPstring += cp; + afterEscape = true; + } + } + } + return CPstring; +} + +/** + * Converts a string of characters to U+... notation, separated by space. + * @param textString {string} the input + * @param preserve {string} enum [ascii, latin1], a set of characters to not convert. + * @param pad {boolean} if true, hex numbers lower than 1000 are padded with zeros. + * @returns {string} + * @memberOf module:xide/utils/StringUtils + */ +function convertCharStr2Unicode(textString, preserve, pad) { + // pad: + let haut = 0; + let n = 0; + let CPstring = ''; + let cp = ''; + pad = false; + for (let i = 0; i < textString.length; i++) { + let b = textString.charCodeAt(i); + if (b < 0 || b > 0xFFFF) { + CPstring += 'Error in convertChar2CP: byte out of range ' + dec2hex(b) + '!'; + } + if (haut !== 0) { + if (0xDC00 <= b && b <= 0xDFFF) { + CPstring += 'U+' + dec2hex(0x10000 + ((haut - 0xD800) << 10) + (b - 0xDC00)) + ' '; + haut = 0; + continue; + } else { + CPstring += 'Error in convertChar2CP: surrogate out of range ' + dec2hex(haut) + '!'; + haut = 0; + } + } + if (0xD800 <= b && b <= 0xDBFF) { + haut = b; + } else { + if (b <= 127 && preserve === 'ascii') { + CPstring += textString.charAt(i) + ' '; + } else if (b <= 255 && preserve === 'latin1') { + CPstring += textString.charAt(i) + ' '; + } else { + cp = dec2hex(b); + if (pad) { + while (cp.length < 4) { + cp = '0' + cp; + } + } + CPstring += 'U+' + cp + ' '; + } + } + } + return CPstring.substring(0, CPstring.length - 1); +} + +let digit_array = new Array('0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'); +/** + * + * @param n + * @returns {string} + */ +export const to_hex = function (n) { + let hex_result = ''; + let the_start = true; + for (let i = 32; i > 0;) { + i -= 4; + let one_digit = (n >> i) & 0xf; + if (!the_start || one_digit !== 0) { + the_start = false; + hex_result += digit_array[one_digit]; + } + } + return '0x' + (hex_result === '' ? '0' : hex_result); +}; + +/** + * Unescape hex sequences like 'x0d' to chars + * @param str {string} + * @returns {string} + * @memberOf module:xide/utils/StringUtils + */ +export const replaceHex = (str: string): string => { + if (_.isString(str)) { + return str.replace(/x([0-9A-Fa-f]{2})/gmi, function () { + return String.fromCharCode(parseInt(arguments[1], 16)); + }); + } + return str; +}; + +let zero = function (n, max) { + n = n.toString(16).toUpperCase(); + while (n.length < max) { + n = '0' + n; + } + return n; +}; + +function d2h(d) { + return d.toString(16); +} + +function h2d(h) { + return parseInt(h, 16); +} + +/** + * Convert a string into hex values + * @memberOf module:xide/utils/StringUtils + * @param string {string} + * @returns {string} + */ +export const stringToHex = (string) => { + let str = ''; + let i = 0; + let tmp_len = string.length; + let c; + + for (; i < tmp_len; i += 1) { + c = string.charCodeAt(i); + str += zero(d2h(c), 2) + ' '; + } + return str; +}; + +/** + * Returns buffer compatible string + * @param string + * @example + * utils.stringToHex("a b") returns "61 20 62" + * @memberOf module:xide/utils/StringUtils + * @returns {string} + */ +export const stringToBufferStr = (string) => { + let i = 0; + let tmp_len = string.length; + let c; + + let arr = []; + for (; i < tmp_len; i += 1) { + c = string.charCodeAt(i); + arr.push(c); + } + return arr.join(','); +}; + +/** + * Return an integer array (as Buffer) for a string + * @param string + * @returns {Array} + */ +export const stringToBuffer = (string) => { + let i = 0; + let tmp_len = string.length; + let c; + let arr = []; + for (; i < tmp_len; i += 1) { + c = string.charCodeAt(i); + arr.push(c); + } + return arr; +}; + +/** + * + * @param bufferString {String} The serialized buffer formatted as 00,02 (decimal values) + * @memberOf module:xide/utils/StringUtils + * @returns {String} The hex version of the buffer string + */ +export const bufferToHexString = (bufferString) => { + let bytesArray = bufferString.indexOf(',') !== -1 ? bufferString.split(',') : [bufferString]; + let tmp = []; + for (let i = 0; i < bytesArray.length; i++) { + let dec = bytesArray[i]; + tmp.push(dec2hex2(dec)); + } + return tmp.join(' '); +}; + +/** + * + * @param bufferString {String} The serialized buffer formatted as 00,02 (decimal values) + * @memberOf module:xide/utils/StringUtils + * @returns {integer} The integer array + */ +export const bufferFromDecString = (bufferString) => { + let bytesArray = bufferString.indexOf(',') !== -1 ? bufferString.split(',') : [bufferString]; + for (let i = 0; i < bytesArray.length; i++) { + bytesArray[i] = parseInt(bytesArray[i], 10); + } + return bytesArray; +}; + +/** + * Return a buffer like formatted string "0a 12" + * @param string + * @memberOf module:xide/utils/StringUtils + * @returns {string} + */ +export const stringFromDecString = (string) => { + let buffer = bufferFromDecString(string); + let result = ''; + for (let i = 0; i < buffer.length; i++) { + result += String.fromCharCode(buffer[i], 16); + } + return result; +}; + +/** + * + * @param string + * @returns {string} + */ +export const stringToHex2 = (string) => { + let str = ''; + let i = 0; + let tmp_len = string.length; + let c; + + for (; i < tmp_len; i += 1) { + c = string.charCodeAt(i); + str += zero(d2h(c), 2) + ' '; + } + return str; +}; + +/** + * + * @param string {string} + * @returns {string} + */ +export const hexToString = (string: string) => { + let arr = string.split(' '); + let str = ''; + let i = 0; + let arr_len = arr.length; + let c; + + for (; i < arr_len; i += 1) { + c = String.fromCharCode(h2d(arr[i])); + str += c; + } + return str; +} + +/** + * + * @param buffer + * @returns {string} + */ +export const prettyHex = function (buffer) { + let rows = Math.ceil(buffer.length / 16); + let last = buffer.length % 16 || 16; + let offsetLength = buffer.length.toString(16).length; + if (offsetLength < 6) { + offsetLength = 6; + } + let str = 'Offset'; + while (str.length < offsetLength) { + str += ' '; + } + + str = '\u001b[36m' + str + ' '; + + let i; + for (i = 0; i < 16; i++) { + str += ' ' + zero(i, 2); + } + + str += '\u001b[0m\n'; + if (buffer.length) { + str += '\n'; + } + + let b = 0; + let lastBytes; + let lastSpaces; + let v; + + for (i = 0; i < rows; i++) { + str += '\u001b[36m' + zero(b, offsetLength) + '\u001b[0m '; + lastBytes = i === rows - 1 ? last : 16; + lastSpaces = 16 - lastBytes; + + let j; + for (j = 0; j < lastBytes; j++) { + str += ' ' + zero(buffer[b], 2); + b++; + } + + for (j = 0; j < lastSpaces; j++) { + str += ' '; + } + + b -= lastBytes; + str += ' '; + + for (j = 0; j < lastBytes; j++) { + v = buffer[b]; + str += (v > 31 && v < 127) || v > 159 ? String.fromCharCode(v) : '.'; + b++; + } + str += '\n'; + } + return str; +}; + +/** + * + * @param str + * @param prefix + * @returns {string} + */ +export const hexEncode = (str, prefix) => { + let hex; + let i; + let result = ''; + for (i = 0; i < str.length; i++) { + hex = str.charCodeAt(i).toString(16); + result += ((prefix !== null ? prefix : '000') + hex).slice(-4); + } + return result; +}; diff --git a/packages/osrl/src/lib/StringUtils.ts b/packages/osrl/src/lib/StringUtils.ts new file mode 100644 index 00000000..15e2f217 --- /dev/null +++ b/packages/osrl/src/lib/StringUtils.ts @@ -0,0 +1,479 @@ +import { Hash } from '@plastichub/core' +import { isArray, isObject, isString } from '@plastichub/core/primitives' + +const escapeRegExpPattern = /[[\]{}()|\/\\^$.*+?]/g; +const escapeXmlPattern = /[&<]/g; +const escapeXmlForPattern = /[&<>'"]/g; +const escapeXmlMap: Hash = { + '&': '&', + '<': '<', + '>': '>', + '"': '"', + '\'': ''' +}; +export const DefaultDelimiter = { + begin: '{', + + end: '}' +}; +export const hasFlag = (field, enumValue) => { + //noinspection JSBitwiseOperatorUsage,JSBitwiseOperatorUsage,JSBitwiseOperatorUsage,JSBitwiseOperatorUsage,JSBitwiseOperatorUsage,JSBitwiseOperatorUsage,JSBitwiseOperatorUsage,JSBitwiseOperatorUsage + // tslint:disable-next-line:no-bitwise + return ((1 << enumValue) & field) ? true : false; +}; +export const hasFlagHex = (field, enumValue) => { + //noinspection JSBitwiseOperatorUsage,JSBitwiseOperatorUsage,JSBitwiseOperatorUsage,JSBitwiseOperatorUsage,JSBitwiseOperatorUsage,JSBitwiseOperatorUsage,JSBitwiseOperatorUsage,JSBitwiseOperatorUsage + // tslint:disable-next-line:no-bitwise + return enumValue & field ? true : false; +}; +export const disableFlag = (enumValue, field) => { + enumValue &= ~(1 << field); + return enumValue; +}; +/** + * The minimum location of high surrogates + */ +export const HIGH_SURROGATE_MIN = 0xD800; +/** + * The maximum location of high surrogates + */ +export const HIGH_SURROGATE_MAX = 0xDBFF; +/** + * The minimum location of low surrogates + */ +export const LOW_SURROGATE_MIN = 0xDC00; +/** + * The maximum location of low surrogates + */ +export const LOW_SURROGATE_MAX = 0xDFFF; + +const BASE64_KEYSTR = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='; +export const capitalize = (word) => { + return word.substring(0, 1).toUpperCase() + word.substring(1); +}; +export const getJson = (inData, validOnly, ommit) => { + try { + return isString(inData) ? JSON.parse(inData) : validOnly === true ? null : inData; + } catch (e) { + ommit !== false && console.error('error parsing json data ' + inData + ' error = ' + e); + } + return null; +}; + +/** + * Escapes a string so that it can safely be passed to the RegExp constructor. + * @param text The string to be escaped + * @return The escaped string + */ +export function escapeRegExpEx(text: string): string { + return !text ? text : text.replace(escapeRegExpPattern, '\\$&'); +} + +/** + * Sanitizes a string to protect against tag injection. + * @param xml The string to be escaped + * @param forAttribute Whether to also escape ', ", and > in addition to < and & + * @return The escaped string + */ +export function escapeXml(xml: string, forAttribute: boolean = true): string { + if (!xml) { + return xml; + } + + const pattern = forAttribute ? escapeXmlForPattern : escapeXmlPattern; + + return xml.replace(pattern, function (character: string): string { + return escapeXmlMap[character]; + }); +} + +export function createUUID(): string { + const S4 = function () { + return (((1 + Math.random()) * 0x10000) | 0).toString(16).substring(1); + }; + return (S4() + S4() + '-' + S4() + '-' + S4() + '-' + S4() + '-' + S4() + S4() + S4()); +} + +export function escapeRegExp(str: string): string { + const special = ['[', ']', '(', ')', '{', '}', '*', '+', '.', '|', '||']; + for (let n = 0; n < special.length; n++) { + str = str.replace(special[n], '\\' + special[n]); + } + return str; +}; + +export function findOcurrences(expression: string, delimiters: IDelimiter): Array { + // tslint:disable-next-line:no-object-literal-type-assertion + const d = { + begin: escapeRegExp(delimiters.begin), + end: escapeRegExp(delimiters.end) + } as IDelimiter; + return expression.match(new RegExp(d.begin + '([^' + d.end + ']*)' + d.end, 'g')); +}; + +export function multipleReplace(str: string, hash: any): string { + // to array + const a = []; + // tslint:disable-next-line:forin + for (let key in hash) { + a[a.length] = key; + } + return str.replace(new RegExp(a.join('\\b|\\b'), 'g'), function (m) { + return hash[m] || hash['\\' + m]; + }); +}; + +export function replaceAll(find: string, replace: string, str: string): string { + return str ? str.split(find).join(replace) : ''; +}; + +export interface IDelimiter { + begin: string; + end: string; +} + +export function replace(str: string, needle: any | null, what: string | any, delimiters: IDelimiter): string { + if (!str) { + return ''; + } + if (what && isObject(what) || isArray(what)) { + what = what as any; + if (!delimiters) { + // fast case + return multipleReplace(str, what); + } + const occurrence = findOcurrences(str, delimiters); + if (!occurrence) { + return str; + } else { + for (let i = 0, j = occurrence.length; i < j; i++) { + const el = occurrence[i]; + // strip off delimiters + let _variableName = replaceAll(delimiters.begin, '', el); + _variableName = replaceAll(delimiters.end, '', _variableName); + str = replaceAll(el, (what[_variableName]), str); + } + } + return str; + } + // fast case + return replaceAll(needle, what as string, str); +}; + +function decodeUtf8EncodedCodePoint(codePoint: number, validationRange: number[] = [0, Infinity], checkSurrogate?: boolean): string { + if (codePoint < validationRange[0] || codePoint > validationRange[1]) { + throw Error('Invalid continuation byte'); + } + + if (checkSurrogate && codePoint >= HIGH_SURROGATE_MIN && codePoint <= LOW_SURROGATE_MAX) { + throw Error('Surrogate is not a scalar value'); + } + + let encoded = ''; + + if (codePoint > 0xFFFF) { + codePoint -= 0x010000; + encoded += String.fromCharCode(codePoint >>> 0x10 & 0x03FF | HIGH_SURROGATE_MIN); + codePoint = LOW_SURROGATE_MIN | codePoint & 0x03FF; + } + + encoded += String.fromCharCode(codePoint); + + return encoded; +} + +function validateUtf8EncodedCodePoint(codePoint: number): void { + if ((codePoint & 0xC0) !== 0x80) { + throw Error('Invalid continuation byte'); + } +} + +export type ByteBuffer = Uint16Array | Uint8Array | Buffer | number[]; + +export interface Codec { + encode(data: string): number[]; + decode(data: ByteBuffer): string; +} + +/** + * Provides facilities for encoding a string into an ASCII-encoded byte buffer and + * decoding an ASCII-encoded byte buffer into a string. + */ +export const ascii: Codec = { + /** + * Encodes a string into an ASCII-encoded byte buffer. + * + * @param data The text string to encode + */ + encode(data: string): number[] { + if (data == null) { + return []; + } + + const buffer: number[] = []; + + for (let i = 0, length = data.length; i < length; i++) { + buffer[i] = data.charCodeAt(i); + } + + return buffer; + }, + /** + * Decodes an ASCII-encoded byte buffer into a string. + * + * @param data The byte buffer to decode + */ + decode(data: ByteBuffer): string { + if (data == null) { + return ''; + } + + let decoded = ''; + + for (let i = 0, length = data.length; i < length; i++) { + decoded += String.fromCharCode(data[i]); + } + + return decoded; + } +}; + +/** + * Provides facilities for encoding a string into a Base64-encoded byte buffer and + * decoding a Base64-encoded byte buffer into a string. + */ +export const base64: Codec = { + /** + * Encodes a Base64-encoded string into a Base64 byte buffer. + * + * @param data The Base64-encoded string to encode + */ + encode(data: string): number[] { + if (data == null) { + return []; + } + + const buffer: number[] = []; + + let i = 0; + let length = data.length; + + while (data[--length] === '=') { } + while (i < length) { + let encoded = BASE64_KEYSTR.indexOf(data[i++]) << 18; + if (i <= length) { + encoded |= BASE64_KEYSTR.indexOf(data[i++]) << 12; + } + if (i <= length) { + encoded |= BASE64_KEYSTR.indexOf(data[i++]) << 6; + } + if (i <= length) { + encoded |= BASE64_KEYSTR.indexOf(data[i++]); + } + + buffer.push((encoded >>> 16) & 0xff); + buffer.push((encoded >>> 8) & 0xff); + buffer.push(encoded & 0xff); + } + + while (buffer[buffer.length - 1] === 0) { + buffer.pop(); + } + + return buffer; + }, + /** + * Decodes a Base64-encoded byte buffer into a Base64-encoded string. + * + * @param data The byte buffer to decode + */ + decode(data: ByteBuffer): string { + if (data == null) { + return ''; + } + + let decoded = ''; + let i = 0; + + for (let length = data.length - (data.length % 3); i < length;) { + let encoded = data[i++] << 16 | data[i++] << 8 | data[i++]; + + decoded += BASE64_KEYSTR.charAt((encoded >>> 18) & 0x3F); + decoded += BASE64_KEYSTR.charAt((encoded >>> 12) & 0x3F); + decoded += BASE64_KEYSTR.charAt((encoded >>> 6) & 0x3F); + decoded += BASE64_KEYSTR.charAt(encoded & 0x3F); + } + + if (data.length % 3 === 1) { + let encoded = data[i++] << 16; + decoded += BASE64_KEYSTR.charAt((encoded >>> 18) & 0x3f); + decoded += BASE64_KEYSTR.charAt((encoded >>> 12) & 0x3f); + decoded += '=='; + } else if (data.length % 3 === 2) { + let encoded = data[i++] << 16 | data[i++] << 8; + decoded += BASE64_KEYSTR.charAt((encoded >>> 18) & 0x3f); + decoded += BASE64_KEYSTR.charAt((encoded >>> 12) & 0x3f); + decoded += BASE64_KEYSTR.charAt((encoded >>> 6) & 0x3f); + decoded += '='; + } + + return decoded; + } +}; + +/** + * Provides facilities for encoding a string into a hex-encoded byte buffer and + * decoding a hex-encoded byte buffer into a string. + */ +export const hex: Codec = { + /** + * Encodes a string into a hex-encoded byte buffer. + * + * @param data The hex-encoded string to encode + */ + encode(data: string): number[] { + if (data == null) { + return []; + } + + const buffer: number[] = []; + + for (let i = 0, length = data.length; i < length; i += 2) { + let encodedChar = parseInt(data.substr(i, 2), 16); + + buffer.push(encodedChar); + } + + return buffer; + }, + /** + * Decodes a hex-encoded byte buffer into a hex-encoded string. + * + * @param data The byte buffer to decode + */ + decode(data: ByteBuffer): string { + if (data == null) { + return ''; + } + + let decoded = ''; + + for (let i = 0, length = data.length; i < length; i++) { + decoded += data[i].toString(16).toUpperCase(); + } + + return decoded; + } +}; + +/** + * Provides facilities for encoding a string into a UTF-8-encoded byte buffer and + * decoding a UTF-8-encoded byte buffer into a string. + * Inspired by the work of: https://github.com/mathiasbynens/utf8.js + */ +export const utf8: Codec = { + /** + * Encodes a string into a UTF-8-encoded byte buffer. + * + * @param data The text string to encode + */ + encode(data: string): number[] { + if (data == null) { + return []; + } + + const buffer: number[] = []; + + for (let i = 0, length = data.length; i < length; i++) { + let encodedChar = data.charCodeAt(i); + /** + * Surrogates + * http://en.wikipedia.org/wiki/Universal_Character_Set_characters + */ + if (encodedChar >= HIGH_SURROGATE_MIN && encodedChar <= HIGH_SURROGATE_MAX) { + let lowSurrogate = data.charCodeAt(i + 1); + if (lowSurrogate >= LOW_SURROGATE_MIN && lowSurrogate <= LOW_SURROGATE_MAX) { + encodedChar = 0x010000 + (encodedChar - HIGH_SURROGATE_MIN) * 0x0400 + (lowSurrogate - LOW_SURROGATE_MIN); + i++; + } + } + + if (encodedChar < 0x80) { + buffer.push(encodedChar); + } else { + if (encodedChar < 0x800) { + buffer.push(((encodedChar >> 0x06) & 0x1F) | 0xC0); + } else if (encodedChar < 0x010000) { + if (encodedChar >= HIGH_SURROGATE_MIN && encodedChar <= LOW_SURROGATE_MAX) { + throw Error('Surrogate is not a scalar value'); + } + + buffer.push(((encodedChar >> 0x0C) & 0x0F) | 0xE0); + buffer.push(((encodedChar >> 0x06) & 0x3F) | 0x80); + } else if (encodedChar < 0x200000) { + buffer.push(((encodedChar >> 0x12) & 0x07) | 0xF0); + buffer.push(((encodedChar >> 0x0C) & 0x3F) | 0x80); + buffer.push(((encodedChar >> 0x06) & 0x3F) | 0x80); + } + buffer.push((encodedChar & 0x3F) | 0x80); + } + } + + return buffer; + }, + /** + * Decodes a UTF-8-encoded byte buffer into a string. + * + * @param data The byte buffer to decode + */ + decode(data: ByteBuffer): string { + if (data == null) { + return ''; + } + + let decoded = ''; + + for (let i = 0, length = data.length; i < length; i++) { + let byte1 = data[i] & 0xFF; + + if ((byte1 & 0x80) === 0) { + decoded += decodeUtf8EncodedCodePoint(byte1); + } else if ((byte1 & 0xE0) === 0xC0) { + let byte2 = data[++i] & 0xFF; + validateUtf8EncodedCodePoint(byte2); + byte2 = byte2 & 0x3F; + let encodedByte = ((byte1 & 0x1F) << 0x06) | byte2; + decoded += decodeUtf8EncodedCodePoint(encodedByte, [0x80, Infinity]); + } else if ((byte1 & 0xF0) === 0xE0) { + let byte2 = data[++i] & 0xFF; + validateUtf8EncodedCodePoint(byte2); + byte2 = byte2 & 0x3F; + + let byte3 = data[++i] & 0xFF; + validateUtf8EncodedCodePoint(byte3); + byte3 = byte3 & 0x3F; + + let encodedByte = ((byte1 & 0x1F) << 0x0C) | (byte2 << 0x06) | byte3; + decoded += decodeUtf8EncodedCodePoint(encodedByte, [0x0800, Infinity], true); + } else if ((byte1 & 0xF8) === 0xF0) { + let byte2 = data[++i] & 0xFF; + validateUtf8EncodedCodePoint(byte2); + byte2 = byte2 & 0x3F; + + let byte3 = data[++i] & 0xFF; + validateUtf8EncodedCodePoint(byte3); + byte3 = byte3 & 0x3F; + + let byte4 = data[++i] & 0xFF; + validateUtf8EncodedCodePoint(byte4); + byte4 = byte4 & 0x3F; + + let encodedByte = ((byte1 & 0x1F) << 0x0C) | (byte2 << 0x0C) | (byte3 << 0x06) | byte4; + decoded += decodeUtf8EncodedCodePoint(encodedByte, [0x010000, 0x10FFFF]); + } else { + validateUtf8EncodedCodePoint(byte1); + } + } + return decoded; + } +}; diff --git a/packages/osrl/src/lib/arrays.ts b/packages/osrl/src/lib/arrays.ts new file mode 100644 index 00000000..026433a7 --- /dev/null +++ b/packages/osrl/src/lib/arrays.ts @@ -0,0 +1,235 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +'use strict'; + +/** + * Returns the last element of an array. + * @param array The array. + * @param n Which element from the end (default ist zero). + */ +export function tail(array: T[], n: number = 0): T { + return array[array.length - (1 + n)]; +} + +export function equals(one: T[], other: T[], itemEquals: (a: T, b: T) => boolean = (a, b) => a === b): boolean { + if (one.length !== other.length) { + return false; + } + + for (let i = 0, len = one.length; i < len; i++) { + if (!itemEquals(one[i], other[i])) { + return false; + } + } + + return true; +} + +export function binarySearch(array: T[], key: T, comparator: (op1: T, op2: T) => number): number { + let low = 0, + high = array.length - 1; + + while (low <= high) { + let mid = ((low + high) / 2) | 0; + let comp = comparator(array[mid], key); + if (comp < 0) { + low = mid + 1; + } else if (comp > 0) { + high = mid - 1; + } else { + return mid; + } + } + return -(low + 1); +} + +/** + * Takes a sorted array and a function p. The array is sorted in such a way that all elements where p(x) is false + * are located before all elements where p(x) is true. + * @returns the least x for which p(x) is true or array.length if no element fullfills the given function. + */ +export function findFirst(array: T[], p: (x: T) => boolean): number { + let low = 0, high = array.length; + if (high === 0) { + return 0; // no children + } + while (low < high) { + let mid = Math.floor((low + high) / 2); + if (p(array[mid])) { + high = mid; + } else { + low = mid + 1; + } + } + return low; +} + +/** + * Returns the top N elements from the array. + * + * Faster than sorting the entire array when the array is a lot larger than N. + * + * @param array The unsorted array. + * @param compare A sort function for the elements. + * @param n The number of elements to return. + * @return The first n elemnts from array when sorted with compare. + */ +export function top(array: T[], compare: (a: T, b: T) => number, n: number): T[] { + if (n === 0) { + return []; + } + const result = array.slice(0, n).sort(compare); + for (let i = n, m = array.length; i < m; i++) { + const element = array[i]; + if (compare(element, result[n - 1]) < 0) { + result.pop(); + const j = findFirst(result, e => compare(element, e) < 0); + result.splice(j, 0, element); + } + } + return result; +} + +/** + * @returns a new array with all undefined or null values removed. The original array is not modified at all. + */ +export function coalesce(array: T[]): T[] { + if (!array) { + return array; + } + + return array.filter(e => !!e); +} + +/** + * Moves the element in the array for the provided positions. + */ +export function move(array: any[], from: number, to: number): void { + array.splice(to, 0, array.splice(from, 1)[0]); +} + +/** + * @returns {{false}} if the provided object is an array + * and not empty. + */ +export function isFalsyOrEmpty(obj: any): boolean { + return !Array.isArray(obj) || (>obj).length === 0; +} + +/** + * Removes duplicates from the given array. The optional keyFn allows to specify + * how elements are checked for equalness by returning a unique string for each. + */ +export function distinct(array: T[], keyFn?: (t: T) => string): T[] { + if (!keyFn) { + return array.filter((element, position) => { + return array.indexOf(element) === position; + }); + } + + const seen: { [key: string]: boolean; } = Object.create(null); + return array.filter((elem) => { + const key = keyFn(elem); + if (seen[key]) { + return false; + } + + seen[key] = true; + + return true; + }); +} + +export function uniqueFilter(keyFn: (t: T) => string): (t: T) => boolean { + const seen: { [key: string]: boolean; } = Object.create(null); + + return element => { + const key = keyFn(element); + + if (seen[key]) { + return false; + } + + seen[key] = true; + return true; + }; +} + +export function firstIndex(array: T[], fn: (item: T) => boolean): number { + for (let i = 0; i < array.length; i++) { + const element = array[i]; + + if (fn(element)) { + return i; + } + } + + return -1; +} + +export function first(array: T[], fn: (item: T) => boolean, notFoundValue: T = null): T { + const index = firstIndex(array, fn); + return index < 0 ? notFoundValue : array[index]; +} + +export function commonPrefixLength(one: T[], other: T[], equals: (a: T, b: T) => boolean = (a, b) => a === b): number { + let result = 0; + + for (let i = 0, len = Math.min(one.length, other.length); i < len && equals(one[i], other[i]); i++) { + result++; + } + + return result; +} + +export function flatten(arr: T[][]): T[] { + return arr.reduce((r, v) => r.concat(v), []); +} + +export function range(to: number, from = 0): number[] { + const result: number[] = []; + + for (let i = from; i < to; i++) { + result.push(i); + } + + return result; +} + +export function fill(num: number, valueFn: () => T, arr: T[] = []): T[] { + for (let i = 0; i < num; i++) { + arr[i] = valueFn(); + } + + return arr; +} + +export function index(array: T[], indexer: (t: T) => string): { [key: string]: T; }; +export function index(array: T[], indexer: (t: T) => string, merger?: (t: T, r: R) => R): { [key: string]: R; }; +export function index(array: T[], indexer: (t: T) => string, merger: (t: T, r: R) => R = t => t as any): { [key: string]: R; } { + return array.reduce((r, t) => { + const key = indexer(t); + r[key] = merger(t, r[key]); + return r; + }, Object.create(null)); +} + +/** + * Inserts an element into an array. Returns a function which, when + * called, will remove that element from the array. + */ +export function insert(array: T[], element: T): () => void { + array.push(element); + + return () => { + const index = array.indexOf(element); + if (index > -1) { + array.splice(index, 1); + } + }; +} +export function remove(array: any[], element: any): void { + array.splice(array.indexOf(element)); +} \ No newline at end of file diff --git a/packages/osrl/src/lib/charCode.ts b/packages/osrl/src/lib/charCode.ts new file mode 100644 index 00000000..51307984 --- /dev/null +++ b/packages/osrl/src/lib/charCode.ts @@ -0,0 +1,422 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +'use strict'; + +// Names from https://blog.codinghorror.com/ascii-pronunciation-rules-for-programmers/ + +/** + * An inlined enum containing useful character codes (to be used with String.charCodeAt). + * Please leave the const keyword such that it gets inlined when compiled to JavaScript! + */ +export const enum CharCode { + Null = 0, + /** + * The `\t` character. + */ + Tab = 9, + /** + * The `\n` character. + */ + LineFeed = 10, + /** + * The `\r` character. + */ + CarriageReturn = 13, + Space = 32, + /** + * The `!` character. + */ + ExclamationMark = 33, + /** + * The `"` character. + */ + DoubleQuote = 34, + /** + * The `#` character. + */ + Hash = 35, + /** + * The `$` character. + */ + DollarSign = 36, + /** + * The `%` character. + */ + PercentSign = 37, + /** + * The `&` character. + */ + Ampersand = 38, + /** + * The `'` character. + */ + SingleQuote = 39, + /** + * The `(` character. + */ + OpenParen = 40, + /** + * The `)` character. + */ + CloseParen = 41, + /** + * The `*` character. + */ + Asterisk = 42, + /** + * The `+` character. + */ + Plus = 43, + /** + * The `,` character. + */ + Comma = 44, + /** + * The `-` character. + */ + Dash = 45, + /** + * The `.` character. + */ + Period = 46, + /** + * The `/` character. + */ + Slash = 47, + + Digit0 = 48, + Digit1 = 49, + Digit2 = 50, + Digit3 = 51, + Digit4 = 52, + Digit5 = 53, + Digit6 = 54, + Digit7 = 55, + Digit8 = 56, + Digit9 = 57, + + /** + * The `:` character. + */ + Colon = 58, + /** + * The `;` character. + */ + Semicolon = 59, + /** + * The `<` character. + */ + LessThan = 60, + /** + * The `=` character. + */ + Equals = 61, + /** + * The `>` character. + */ + GreaterThan = 62, + /** + * The `?` character. + */ + QuestionMark = 63, + /** + * The `@` character. + */ + AtSign = 64, + + A = 65, + B = 66, + C = 67, + D = 68, + E = 69, + F = 70, + G = 71, + H = 72, + I = 73, + J = 74, + K = 75, + L = 76, + M = 77, + N = 78, + O = 79, + P = 80, + Q = 81, + R = 82, + S = 83, + T = 84, + U = 85, + V = 86, + W = 87, + X = 88, + Y = 89, + Z = 90, + + /** + * The `[` character. + */ + OpenSquareBracket = 91, + /** + * The `\` character. + */ + Backslash = 92, + /** + * The `]` character. + */ + CloseSquareBracket = 93, + /** + * The `^` character. + */ + Caret = 94, + /** + * The `_` character. + */ + Underline = 95, + /** + * The ``(`)`` character. + */ + BackTick = 96, + + a = 97, + b = 98, + c = 99, + d = 100, + e = 101, + f = 102, + g = 103, + h = 104, + i = 105, + j = 106, + k = 107, + l = 108, + m = 109, + n = 110, + o = 111, + p = 112, + q = 113, + r = 114, + s = 115, + t = 116, + u = 117, + v = 118, + w = 119, + x = 120, + y = 121, + z = 122, + + /** + * The `{` character. + */ + OpenCurlyBrace = 123, + /** + * The `|` character. + */ + Pipe = 124, + /** + * The `}` character. + */ + CloseCurlyBrace = 125, + /** + * The `~` character. + */ + Tilde = 126, + + U_Combining_Grave_Accent = 0x0300, // U+0300 Combining Grave Accent + U_Combining_Acute_Accent = 0x0301, // U+0301 Combining Acute Accent + U_Combining_Circumflex_Accent = 0x0302, // U+0302 Combining Circumflex Accent + U_Combining_Tilde = 0x0303, // U+0303 Combining Tilde + U_Combining_Macron = 0x0304, // U+0304 Combining Macron + U_Combining_Overline = 0x0305, // U+0305 Combining Overline + U_Combining_Breve = 0x0306, // U+0306 Combining Breve + U_Combining_Dot_Above = 0x0307, // U+0307 Combining Dot Above + U_Combining_Diaeresis = 0x0308, // U+0308 Combining Diaeresis + U_Combining_Hook_Above = 0x0309, // U+0309 Combining Hook Above + U_Combining_Ring_Above = 0x030A, // U+030A Combining Ring Above + U_Combining_Double_Acute_Accent = 0x030B, // U+030B Combining Double Acute Accent + U_Combining_Caron = 0x030C, // U+030C Combining Caron + U_Combining_Vertical_Line_Above = 0x030D, // U+030D Combining Vertical Line Above + U_Combining_Double_Vertical_Line_Above = 0x030E, // U+030E Combining Double Vertical Line Above + U_Combining_Double_Grave_Accent = 0x030F, // U+030F Combining Double Grave Accent + U_Combining_Candrabindu = 0x0310, // U+0310 Combining Candrabindu + U_Combining_Inverted_Breve = 0x0311, // U+0311 Combining Inverted Breve + U_Combining_Turned_Comma_Above = 0x0312, // U+0312 Combining Turned Comma Above + U_Combining_Comma_Above = 0x0313, // U+0313 Combining Comma Above + U_Combining_Reversed_Comma_Above = 0x0314, // U+0314 Combining Reversed Comma Above + U_Combining_Comma_Above_Right = 0x0315, // U+0315 Combining Comma Above Right + U_Combining_Grave_Accent_Below = 0x0316, // U+0316 Combining Grave Accent Below + U_Combining_Acute_Accent_Below = 0x0317, // U+0317 Combining Acute Accent Below + U_Combining_Left_Tack_Below = 0x0318, // U+0318 Combining Left Tack Below + U_Combining_Right_Tack_Below = 0x0319, // U+0319 Combining Right Tack Below + U_Combining_Left_Angle_Above = 0x031A, // U+031A Combining Left Angle Above + U_Combining_Horn = 0x031B, // U+031B Combining Horn + U_Combining_Left_Half_Ring_Below = 0x031C, // U+031C Combining Left Half Ring Below + U_Combining_Up_Tack_Below = 0x031D, // U+031D Combining Up Tack Below + U_Combining_Down_Tack_Below = 0x031E, // U+031E Combining Down Tack Below + U_Combining_Plus_Sign_Below = 0x031F, // U+031F Combining Plus Sign Below + U_Combining_Minus_Sign_Below = 0x0320, // U+0320 Combining Minus Sign Below + U_Combining_Palatalized_Hook_Below = 0x0321, // U+0321 Combining Palatalized Hook Below + U_Combining_Retroflex_Hook_Below = 0x0322, // U+0322 Combining Retroflex Hook Below + U_Combining_Dot_Below = 0x0323, // U+0323 Combining Dot Below + U_Combining_Diaeresis_Below = 0x0324, // U+0324 Combining Diaeresis Below + U_Combining_Ring_Below = 0x0325, // U+0325 Combining Ring Below + U_Combining_Comma_Below = 0x0326, // U+0326 Combining Comma Below + U_Combining_Cedilla = 0x0327, // U+0327 Combining Cedilla + U_Combining_Ogonek = 0x0328, // U+0328 Combining Ogonek + U_Combining_Vertical_Line_Below = 0x0329, // U+0329 Combining Vertical Line Below + U_Combining_Bridge_Below = 0x032A, // U+032A Combining Bridge Below + U_Combining_Inverted_Double_Arch_Below = 0x032B, // U+032B Combining Inverted Double Arch Below + U_Combining_Caron_Below = 0x032C, // U+032C Combining Caron Below + U_Combining_Circumflex_Accent_Below = 0x032D, // U+032D Combining Circumflex Accent Below + U_Combining_Breve_Below = 0x032E, // U+032E Combining Breve Below + U_Combining_Inverted_Breve_Below = 0x032F, // U+032F Combining Inverted Breve Below + U_Combining_Tilde_Below = 0x0330, // U+0330 Combining Tilde Below + U_Combining_Macron_Below = 0x0331, // U+0331 Combining Macron Below + U_Combining_Low_Line = 0x0332, // U+0332 Combining Low Line + U_Combining_Double_Low_Line = 0x0333, // U+0333 Combining Double Low Line + U_Combining_Tilde_Overlay = 0x0334, // U+0334 Combining Tilde Overlay + U_Combining_Short_Stroke_Overlay = 0x0335, // U+0335 Combining Short Stroke Overlay + U_Combining_Long_Stroke_Overlay = 0x0336, // U+0336 Combining Long Stroke Overlay + U_Combining_Short_Solidus_Overlay = 0x0337, // U+0337 Combining Short Solidus Overlay + U_Combining_Long_Solidus_Overlay = 0x0338, // U+0338 Combining Long Solidus Overlay + U_Combining_Right_Half_Ring_Below = 0x0339, // U+0339 Combining Right Half Ring Below + U_Combining_Inverted_Bridge_Below = 0x033A, // U+033A Combining Inverted Bridge Below + U_Combining_Square_Below = 0x033B, // U+033B Combining Square Below + U_Combining_Seagull_Below = 0x033C, // U+033C Combining Seagull Below + U_Combining_X_Above = 0x033D, // U+033D Combining X Above + U_Combining_Vertical_Tilde = 0x033E, // U+033E Combining Vertical Tilde + U_Combining_Double_Overline = 0x033F, // U+033F Combining Double Overline + U_Combining_Grave_Tone_Mark = 0x0340, // U+0340 Combining Grave Tone Mark + U_Combining_Acute_Tone_Mark = 0x0341, // U+0341 Combining Acute Tone Mark + U_Combining_Greek_Perispomeni = 0x0342, // U+0342 Combining Greek Perispomeni + U_Combining_Greek_Koronis = 0x0343, // U+0343 Combining Greek Koronis + U_Combining_Greek_Dialytika_Tonos = 0x0344, // U+0344 Combining Greek Dialytika Tonos + U_Combining_Greek_Ypogegrammeni = 0x0345, // U+0345 Combining Greek Ypogegrammeni + U_Combining_Bridge_Above = 0x0346, // U+0346 Combining Bridge Above + U_Combining_Equals_Sign_Below = 0x0347, // U+0347 Combining Equals Sign Below + U_Combining_Double_Vertical_Line_Below = 0x0348, // U+0348 Combining Double Vertical Line Below + U_Combining_Left_Angle_Below = 0x0349, // U+0349 Combining Left Angle Below + U_Combining_Not_Tilde_Above = 0x034A, // U+034A Combining Not Tilde Above + U_Combining_Homothetic_Above = 0x034B, // U+034B Combining Homothetic Above + U_Combining_Almost_Equal_To_Above = 0x034C, // U+034C Combining Almost Equal To Above + U_Combining_Left_Right_Arrow_Below = 0x034D, // U+034D Combining Left Right Arrow Below + U_Combining_Upwards_Arrow_Below = 0x034E, // U+034E Combining Upwards Arrow Below + U_Combining_Grapheme_Joiner = 0x034F, // U+034F Combining Grapheme Joiner + U_Combining_Right_Arrowhead_Above = 0x0350, // U+0350 Combining Right Arrowhead Above + U_Combining_Left_Half_Ring_Above = 0x0351, // U+0351 Combining Left Half Ring Above + U_Combining_Fermata = 0x0352, // U+0352 Combining Fermata + U_Combining_X_Below = 0x0353, // U+0353 Combining X Below + U_Combining_Left_Arrowhead_Below = 0x0354, // U+0354 Combining Left Arrowhead Below + U_Combining_Right_Arrowhead_Below = 0x0355, // U+0355 Combining Right Arrowhead Below + U_Combining_Right_Arrowhead_And_Up_Arrowhead_Below = 0x0356, // U+0356 Combining Right Arrowhead And Up Arrowhead Below + U_Combining_Right_Half_Ring_Above = 0x0357, // U+0357 Combining Right Half Ring Above + U_Combining_Dot_Above_Right = 0x0358, // U+0358 Combining Dot Above Right + U_Combining_Asterisk_Below = 0x0359, // U+0359 Combining Asterisk Below + U_Combining_Double_Ring_Below = 0x035A, // U+035A Combining Double Ring Below + U_Combining_Zigzag_Above = 0x035B, // U+035B Combining Zigzag Above + U_Combining_Double_Breve_Below = 0x035C, // U+035C Combining Double Breve Below + U_Combining_Double_Breve = 0x035D, // U+035D Combining Double Breve + U_Combining_Double_Macron = 0x035E, // U+035E Combining Double Macron + U_Combining_Double_Macron_Below = 0x035F, // U+035F Combining Double Macron Below + U_Combining_Double_Tilde = 0x0360, // U+0360 Combining Double Tilde + U_Combining_Double_Inverted_Breve = 0x0361, // U+0361 Combining Double Inverted Breve + U_Combining_Double_Rightwards_Arrow_Below = 0x0362, // U+0362 Combining Double Rightwards Arrow Below + U_Combining_Latin_Small_Letter_A = 0x0363, // U+0363 Combining Latin Small Letter A + U_Combining_Latin_Small_Letter_E = 0x0364, // U+0364 Combining Latin Small Letter E + U_Combining_Latin_Small_Letter_I = 0x0365, // U+0365 Combining Latin Small Letter I + U_Combining_Latin_Small_Letter_O = 0x0366, // U+0366 Combining Latin Small Letter O + U_Combining_Latin_Small_Letter_U = 0x0367, // U+0367 Combining Latin Small Letter U + U_Combining_Latin_Small_Letter_C = 0x0368, // U+0368 Combining Latin Small Letter C + U_Combining_Latin_Small_Letter_D = 0x0369, // U+0369 Combining Latin Small Letter D + U_Combining_Latin_Small_Letter_H = 0x036A, // U+036A Combining Latin Small Letter H + U_Combining_Latin_Small_Letter_M = 0x036B, // U+036B Combining Latin Small Letter M + U_Combining_Latin_Small_Letter_R = 0x036C, // U+036C Combining Latin Small Letter R + U_Combining_Latin_Small_Letter_T = 0x036D, // U+036D Combining Latin Small Letter T + U_Combining_Latin_Small_Letter_V = 0x036E, // U+036E Combining Latin Small Letter V + U_Combining_Latin_Small_Letter_X = 0x036F, // U+036F Combining Latin Small Letter X + + /** + * Unicode Character 'LINE SEPARATOR' (U+2028) + * http://www.fileformat.info/info/unicode/char/2028/index.htm + */ + LINE_SEPARATOR_2028 = 8232, + + // http://www.fileformat.info/info/unicode/category/Sk/list.htm + U_CIRCUMFLEX = 0x005E, // U+005E CIRCUMFLEX + U_GRAVE_ACCENT = 0x0060, // U+0060 GRAVE ACCENT + U_DIAERESIS = 0x00A8, // U+00A8 DIAERESIS + U_MACRON = 0x00AF, // U+00AF MACRON + U_ACUTE_ACCENT = 0x00B4, // U+00B4 ACUTE ACCENT + U_CEDILLA = 0x00B8, // U+00B8 CEDILLA + U_MODIFIER_LETTER_LEFT_ARROWHEAD = 0x02C2, // U+02C2 MODIFIER LETTER LEFT ARROWHEAD + U_MODIFIER_LETTER_RIGHT_ARROWHEAD = 0x02C3, // U+02C3 MODIFIER LETTER RIGHT ARROWHEAD + U_MODIFIER_LETTER_UP_ARROWHEAD = 0x02C4, // U+02C4 MODIFIER LETTER UP ARROWHEAD + U_MODIFIER_LETTER_DOWN_ARROWHEAD = 0x02C5, // U+02C5 MODIFIER LETTER DOWN ARROWHEAD + U_MODIFIER_LETTER_CENTRED_RIGHT_HALF_RING = 0x02D2, // U+02D2 MODIFIER LETTER CENTRED RIGHT HALF RING + U_MODIFIER_LETTER_CENTRED_LEFT_HALF_RING = 0x02D3, // U+02D3 MODIFIER LETTER CENTRED LEFT HALF RING + U_MODIFIER_LETTER_UP_TACK = 0x02D4, // U+02D4 MODIFIER LETTER UP TACK + U_MODIFIER_LETTER_DOWN_TACK = 0x02D5, // U+02D5 MODIFIER LETTER DOWN TACK + U_MODIFIER_LETTER_PLUS_SIGN = 0x02D6, // U+02D6 MODIFIER LETTER PLUS SIGN + U_MODIFIER_LETTER_MINUS_SIGN = 0x02D7, // U+02D7 MODIFIER LETTER MINUS SIGN + U_BREVE = 0x02D8, // U+02D8 BREVE + U_DOT_ABOVE = 0x02D9, // U+02D9 DOT ABOVE + U_RING_ABOVE = 0x02DA, // U+02DA RING ABOVE + U_OGONEK = 0x02DB, // U+02DB OGONEK + U_SMALL_TILDE = 0x02DC, // U+02DC SMALL TILDE + U_DOUBLE_ACUTE_ACCENT = 0x02DD, // U+02DD DOUBLE ACUTE ACCENT + U_MODIFIER_LETTER_RHOTIC_HOOK = 0x02DE, // U+02DE MODIFIER LETTER RHOTIC HOOK + U_MODIFIER_LETTER_CROSS_ACCENT = 0x02DF, // U+02DF MODIFIER LETTER CROSS ACCENT + U_MODIFIER_LETTER_EXTRA_HIGH_TONE_BAR = 0x02E5, // U+02E5 MODIFIER LETTER EXTRA-HIGH TONE BAR + U_MODIFIER_LETTER_HIGH_TONE_BAR = 0x02E6, // U+02E6 MODIFIER LETTER HIGH TONE BAR + U_MODIFIER_LETTER_MID_TONE_BAR = 0x02E7, // U+02E7 MODIFIER LETTER MID TONE BAR + U_MODIFIER_LETTER_LOW_TONE_BAR = 0x02E8, // U+02E8 MODIFIER LETTER LOW TONE BAR + U_MODIFIER_LETTER_EXTRA_LOW_TONE_BAR = 0x02E9, // U+02E9 MODIFIER LETTER EXTRA-LOW TONE BAR + U_MODIFIER_LETTER_YIN_DEPARTING_TONE_MARK = 0x02EA, // U+02EA MODIFIER LETTER YIN DEPARTING TONE MARK + U_MODIFIER_LETTER_YANG_DEPARTING_TONE_MARK = 0x02EB, // U+02EB MODIFIER LETTER YANG DEPARTING TONE MARK + U_MODIFIER_LETTER_UNASPIRATED = 0x02ED, // U+02ED MODIFIER LETTER UNASPIRATED + U_MODIFIER_LETTER_LOW_DOWN_ARROWHEAD = 0x02EF, // U+02EF MODIFIER LETTER LOW DOWN ARROWHEAD + U_MODIFIER_LETTER_LOW_UP_ARROWHEAD = 0x02F0, // U+02F0 MODIFIER LETTER LOW UP ARROWHEAD + U_MODIFIER_LETTER_LOW_LEFT_ARROWHEAD = 0x02F1, // U+02F1 MODIFIER LETTER LOW LEFT ARROWHEAD + U_MODIFIER_LETTER_LOW_RIGHT_ARROWHEAD = 0x02F2, // U+02F2 MODIFIER LETTER LOW RIGHT ARROWHEAD + U_MODIFIER_LETTER_LOW_RING = 0x02F3, // U+02F3 MODIFIER LETTER LOW RING + U_MODIFIER_LETTER_MIDDLE_GRAVE_ACCENT = 0x02F4, // U+02F4 MODIFIER LETTER MIDDLE GRAVE ACCENT + U_MODIFIER_LETTER_MIDDLE_DOUBLE_GRAVE_ACCENT = 0x02F5, // U+02F5 MODIFIER LETTER MIDDLE DOUBLE GRAVE ACCENT + U_MODIFIER_LETTER_MIDDLE_DOUBLE_ACUTE_ACCENT = 0x02F6, // U+02F6 MODIFIER LETTER MIDDLE DOUBLE ACUTE ACCENT + U_MODIFIER_LETTER_LOW_TILDE = 0x02F7, // U+02F7 MODIFIER LETTER LOW TILDE + U_MODIFIER_LETTER_RAISED_COLON = 0x02F8, // U+02F8 MODIFIER LETTER RAISED COLON + U_MODIFIER_LETTER_BEGIN_HIGH_TONE = 0x02F9, // U+02F9 MODIFIER LETTER BEGIN HIGH TONE + U_MODIFIER_LETTER_END_HIGH_TONE = 0x02FA, // U+02FA MODIFIER LETTER END HIGH TONE + U_MODIFIER_LETTER_BEGIN_LOW_TONE = 0x02FB, // U+02FB MODIFIER LETTER BEGIN LOW TONE + U_MODIFIER_LETTER_END_LOW_TONE = 0x02FC, // U+02FC MODIFIER LETTER END LOW TONE + U_MODIFIER_LETTER_SHELF = 0x02FD, // U+02FD MODIFIER LETTER SHELF + U_MODIFIER_LETTER_OPEN_SHELF = 0x02FE, // U+02FE MODIFIER LETTER OPEN SHELF + U_MODIFIER_LETTER_LOW_LEFT_ARROW = 0x02FF, // U+02FF MODIFIER LETTER LOW LEFT ARROW + U_GREEK_LOWER_NUMERAL_SIGN = 0x0375, // U+0375 GREEK LOWER NUMERAL SIGN + U_GREEK_TONOS = 0x0384, // U+0384 GREEK TONOS + U_GREEK_DIALYTIKA_TONOS = 0x0385, // U+0385 GREEK DIALYTIKA TONOS + U_GREEK_KORONIS = 0x1FBD, // U+1FBD GREEK KORONIS + U_GREEK_PSILI = 0x1FBF, // U+1FBF GREEK PSILI + U_GREEK_PERISPOMENI = 0x1FC0, // U+1FC0 GREEK PERISPOMENI + U_GREEK_DIALYTIKA_AND_PERISPOMENI = 0x1FC1, // U+1FC1 GREEK DIALYTIKA AND PERISPOMENI + U_GREEK_PSILI_AND_VARIA = 0x1FCD, // U+1FCD GREEK PSILI AND VARIA + U_GREEK_PSILI_AND_OXIA = 0x1FCE, // U+1FCE GREEK PSILI AND OXIA + U_GREEK_PSILI_AND_PERISPOMENI = 0x1FCF, // U+1FCF GREEK PSILI AND PERISPOMENI + U_GREEK_DASIA_AND_VARIA = 0x1FDD, // U+1FDD GREEK DASIA AND VARIA + U_GREEK_DASIA_AND_OXIA = 0x1FDE, // U+1FDE GREEK DASIA AND OXIA + U_GREEK_DASIA_AND_PERISPOMENI = 0x1FDF, // U+1FDF GREEK DASIA AND PERISPOMENI + U_GREEK_DIALYTIKA_AND_VARIA = 0x1FED, // U+1FED GREEK DIALYTIKA AND VARIA + U_GREEK_DIALYTIKA_AND_OXIA = 0x1FEE, // U+1FEE GREEK DIALYTIKA AND OXIA + U_GREEK_VARIA = 0x1FEF, // U+1FEF GREEK VARIA + U_GREEK_OXIA = 0x1FFD, // U+1FFD GREEK OXIA + U_GREEK_DASIA = 0x1FFE, // U+1FFE GREEK DASIA + + + U_OVERLINE = 0x203E, // Unicode Character 'OVERLINE' + + /** + * UTF-8 BOM + * Unicode Character 'ZERO WIDTH NO-BREAK SPACE' (U+FEFF) + * http://www.fileformat.info/info/unicode/char/feff/index.htm + */ + UTF8_BOM = 65279 +} \ No newline at end of file diff --git a/packages/osrl/src/lib/common/platform.ts b/packages/osrl/src/lib/common/platform.ts new file mode 100644 index 00000000..a07fe437 --- /dev/null +++ b/packages/osrl/src/lib/common/platform.ts @@ -0,0 +1,12 @@ +import { platform, arch } from 'os'; + +export const os = () => { + if (platform() === 'win32') { + return 'windows'; + } else if (platform() === 'darwin') { + return 'osx'; + } else if (arch() === 'arm') { + return 'arm'; + } + return 'linux'; +} \ No newline at end of file diff --git a/packages/osrl/src/lib/common/types.ts b/packages/osrl/src/lib/common/types.ts new file mode 100644 index 00000000..2d5e65e7 --- /dev/null +++ b/packages/osrl/src/lib/common/types.ts @@ -0,0 +1,35 @@ +export * from './enums'; + +// tslint:disable-next-line:interface-name +export interface Hash { + [id: string]: T; +} +// tslint:disable-next-line:interface-name +export interface List { + [index: number]: T; + length: number; +} +/** + * Interface of the simple literal object with any string keys. + */ +export interface IObjectLiteral { + [key: string]: any; +} +/** + * Represents some Type of the Object. + */ +// tslint:disable-next-line:ban-types +export type ObjectType = { new(): T } | (Function); +/** + * Same as Partial but goes deeper and makes Partial all its properties and sub-properties. + */ +export type DeepPartial = { + [P in keyof T]?: DeepPartial; +}; + +export interface IDelimitter { + begin: string; + end: string; +} + +export type JSONPathExpression = string; diff --git a/packages/osrl/src/lib/fs.ts b/packages/osrl/src/lib/fs.ts new file mode 100644 index 00000000..7c189663 --- /dev/null +++ b/packages/osrl/src/lib/fs.ts @@ -0,0 +1,74 @@ +const fg = require('fast-glob'); +export { sync as read } from '@plastichub/fs/read'; +export { sync as exists } from '@plastichub/fs/exists'; +export { sync as dir } from '@plastichub/fs/dir'; +export { sync as write } from '@plastichub/fs/write'; + +const parseGlob = require('parse-glob') +const GLOB_GROUP_PATTERN = /[!*+?@]\(.*\)/ + +import * as fs from 'fs' + +export const sizeToString = (bytes: number, si: boolean = true) => { + var units; + var u; + var b = bytes; + var thresh = si ? 1000 : 1024; + if (Math.abs(b) < thresh) { + return b + ' B'; + } + units = si + ? ['kB', 'MB', 'GB', 'TB'] + : ['KiB', 'MiB', 'GiB', 'TiB']; + u = -1; + do { + b /= thresh; + ++u; + } while (Math.abs(b) >= thresh && u < units.length - 1); + return b.toFixed(1) + ' ' + units[u]; +}; + +export const getExtensions = (glob: string) => { + const match = glob.match(GLOB_GROUP_PATTERN); + if (match) { + return glob.substring(match.index + 2, glob.lastIndexOf(')')).split('|'); + } else { + return [parseGlob(glob).path.ext]; + } +} + +export const isFile = (src: string) => { + let srcIsFile = false; + try { + srcIsFile = fs.lstatSync(src).isFile(); + } catch (e) { + + } + return srcIsFile; +} +export const isFolder = (src: string) => { + let srcIsFolder = false; + try { + srcIsFolder = fs.lstatSync(src).isDirectory(); + } catch (e) { + + } + return srcIsFolder; +} + +export const files = (dir, glob, options?: any) => fg.sync(glob, { ...{ dot: true, cwd: dir, absolute: true }, ...options || {} }) as []; + + +export const forward_slash = (path) => { + const isExtendedLengthPath = /^\\\\\?\\/.test(path); + const hasNonAscii = /[^\u0000-\u0080]+/.test(path); // eslint-disable-line no-control-regex + if (isExtendedLengthPath || hasNonAscii) { + return path; + } + + return path.replace(/\\/g, '/'); +}; + +const jekyllNop = "---\n#jekyll\n---\n"; +const frontMatter = /^---[.\r\n]*---/; + diff --git a/packages/osrl/src/lib/i18n.ts b/packages/osrl/src/lib/i18n.ts new file mode 100644 index 00000000..ae8a7169 --- /dev/null +++ b/packages/osrl/src/lib/i18n.ts @@ -0,0 +1,17 @@ +import * as path from 'path' +import { Engine } from '../index' +import { createHash } from 'crypto' +import { sync as read } from '@plastichub/fs/read' +import { sync as write } from '@plastichub/fs/write' + +const removeNonPrintableCharacters = (text: string): string => text.replace(/[^\x20-\x7E]/g, '') + +export const clean = (text: string = "") => text.trim() +export const hash = (text: string) => createHash('md5').update(clean(text)).digest('base64') + +export const store = (storePath:string, text: string, file: string = '') => { + const _hash: string = hash(text) + const store = read(storePath, 'json') || {} + store[_hash] = clean(text) + write(storePath, store) +} diff --git a/packages/osrl/src/lib/index.ts b/packages/osrl/src/lib/index.ts new file mode 100644 index 00000000..d6d384b7 --- /dev/null +++ b/packages/osrl/src/lib/index.ts @@ -0,0 +1,21 @@ + +export const substitute = (template, map) => { + const transform = (k) => k || ''; + return template.replace(/\$\{([^\s\:\}]+)(?:\:([^\s\:\}]+))?\}/g, + (match, key, format) => transform(map[key]).toString()); +}; + +const _resolve = (config) => { + for (const key in config) { + if (config[key] && typeof config[key] == 'string') { + const resolved = substitute(config[key], config); + config[key] = resolved; + } + } + return config; +} +export const resolveConfig = (config) => { + config = _resolve(config); + config = _resolve(config); + return config; +} \ No newline at end of file diff --git a/packages/osrl/src/lib/map.ts b/packages/osrl/src/lib/map.ts new file mode 100644 index 00000000..2727623a --- /dev/null +++ b/packages/osrl/src/lib/map.ts @@ -0,0 +1,405 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +'use strict'; + +export interface Key { + toString(): string; +} + +export interface Entry { + next?: Entry; + prev?: Entry; + key: K; + value: T; +} + +/** + * A simple map to store value by a key object. Key can be any object that has toString() function to get + * string value of the key. + */ +export class LinkedMap { + + protected map: { [key: string]: Entry }; + protected _size: number; + + constructor() { + this.map = Object.create(null); + this._size = 0; + } + + public get size(): number { + return this._size; + } + + public get(k: K): T { + const value = this.peek(k); + + return value ? value : null; + } + + public getOrSet(k: K, t: T): T { + const res = this.get(k); + if (res) { + return res; + } + + this.set(k, t); + + return t; + } + + public keys(): K[] { + const keys: K[] = []; + for (let key in this.map) { + keys.push(this.map[key].key); + } + return keys; + } + + public values(): T[] { + const values: T[] = []; + for (let key in this.map) { + values.push(this.map[key].value); + } + return values; + } + + public entries(): Entry[] { + const entries: Entry[] = []; + for (let key in this.map) { + entries.push(this.map[key]); + } + return entries; + } + + public set(k: K, t: T): boolean { + if (this.get(k)) { + return false; // already present! + } + + this.push(k, t); + + return true; + } + + public delete(k: K): T { + let value: T = this.get(k); + if (value) { + this.pop(k); + return value; + } + return null; + } + + public has(k: K): boolean { + return !!this.get(k); + } + + public clear(): void { + this.map = Object.create(null); + this._size = 0; + } + + protected push(key: K, value: T): void { + const entry: Entry = { key, value }; + this.map[key.toString()] = entry; + this._size++; + } + + protected pop(k: K): void { + delete this.map[k.toString()]; + this._size--; + } + + protected peek(k: K): T { + const entry = this.map[k.toString()]; + return entry ? entry.value : null; + } +} + +/** + * A simple Map that optionally allows to set a limit of entries to store. Once the limit is hit, + * the cache will remove the entry that was last recently added. Or, if a ratio is provided below 1, + * all elements will be removed until the ratio is full filled (e.g. 0.75 to remove 25% of old elements). + */ +export class BoundedLinkedMap { + protected map: { [key: string]: Entry }; + private head: Entry; + private tail: Entry; + private _size: number; + private ratio: number; + + constructor(private limit = Number.MAX_VALUE, ratio = 1) { + this.map = Object.create(null); + this._size = 0; + this.ratio = limit * ratio; + } + + public get size(): number { + return this._size; + } + + public set(key: string, value: T): boolean { + if (this.map[key]) { + return false; // already present! + } + + const entry: Entry = { key, value }; + this.push(entry); + + if (this._size > this.limit) { + this.trim(); + } + + return true; + } + + public get(key: string): T { + const entry = this.map[key]; + + return entry ? entry.value : null; + } + + public getOrSet(k: string, t: T): T { + const res = this.get(k); + if (res) { + return res; + } + + this.set(k, t); + + return t; + } + + public delete(key: string): T { + const entry = this.map[key]; + + if (entry) { + this.map[key] = void 0; + this._size--; + + if (entry.next) { + entry.next.prev = entry.prev; // [A]<-[x]<-[C] = [A]<-[C] + } else { + this.head = entry.prev; // [A]-[x] = [A] + } + + if (entry.prev) { + entry.prev.next = entry.next; // [A]->[x]->[C] = [A]->[C] + } else { + this.tail = entry.next; // [x]-[A] = [A] + } + + return entry.value; + } + + return null; + } + + public has(key: string): boolean { + return !!this.map[key]; + } + + public clear(): void { + this.map = Object.create(null); + this._size = 0; + this.head = null; + this.tail = null; + } + + protected push(entry: Entry): void { + if (this.head) { + // [A]-[B] = [A]-[B]->[X] + entry.prev = this.head; + this.head.next = entry; + } + + if (!this.tail) { + this.tail = entry; + } + + this.head = entry; + + this.map[entry.key] = entry; + this._size++; + } + + private trim(): void { + if (this.tail) { + + // Remove all elements until ratio is reached + if (this.ratio < this.limit) { + let index = 0; + let current = this.tail; + while (current.next) { + + // Remove the entry + this.map[current.key] = void 0; + this._size--; + + // if we reached the element that overflows our ratio condition + // make its next element the new tail of the Map and adjust the size + if (index === this.ratio) { + this.tail = current.next; + this.tail.prev = null; + + break; + } + + // Move on + current = current.next; + index++; + } + } + + // Just remove the tail element + else { + this.map[this.tail.key] = void 0; + this._size--; + + // [x]-[B] = [B] + this.tail = this.tail.next; + this.tail.prev = null; + } + } + } +} + +/** + * A subclass of Map that makes an entry the MRU entry as soon + * as it is being accessed. In combination with the limit for the + * maximum number of elements in the cache, it helps to remove those + * entries from the cache that are LRU. + */ +export class LRUCache extends BoundedLinkedMap { + + constructor(limit: number) { + super(limit); + } + + public get(key: string): T { + + // Upon access of an entry, make it the head of + // the linked map so that it is the MRU element + const entry = this.map[key]; + if (entry) { + this.delete(key); + this.push(entry); + + return entry.value; + } + + + return null; + } +} + +// --- trie'ish datastructure + +class Node { + element?: E; + readonly children = new Map(); +} + +/** + * A trie map that allows for fast look up when keys are substrings + * to the actual search keys (dir/subdir-problem). + */ +export class TrieMap { + + static PathSplitter = (s: string) => s.split(/[\\/]/).filter(s => !!s); + + private _splitter: (s: string) => string[]; + private _root = new Node(); + + constructor(splitter: (s: string) => string[]) { + this._splitter = splitter; + } + + insert(path: string, element: E): void { + const parts = this._splitter(path); + let i = 0; + + // find insertion node + let node = this._root; + for (; i < parts.length; i++) { + let child = node.children[parts[i]]; + if (child) { + node = child; + continue; + } + break; + } + + // create new nodes + let newNode: Node; + for (; i < parts.length; i++) { + newNode = new Node(); + node.children[parts[i]] = newNode; + node = newNode; + } + + node.element = element; + } + + lookUp(path: string): E { + const parts = this._splitter(path); + + let {children} = this._root; + let node: Node; + for (const part of parts) { + node = children[part]; + if (!node) { + return undefined; + } + children = node.children; + } + + return node.element; + } + + findSubstr(path: string): E { + const parts = this._splitter(path); + + let lastNode: Node; + let {children} = this._root; + for (const part of parts) { + const node = children[part]; + if (!node) { + break; + } + if (node.element) { + lastNode = node; + } + children = node.children; + } + + // return the last matching node + // that had an element + if (lastNode) { + return lastNode.element; + } + return undefined; + } + + findSuperstr(path: string): TrieMap { + const parts = this._splitter(path); + + let {children} = this._root; + let node: Node; + for (const part of parts) { + node = children[part]; + if (!node) { + return undefined; + } + children = node.children; + } + + const result = new TrieMap(this._splitter); + result._root = node; + return result; + } +} diff --git a/packages/osrl/src/lib/markdown.ts b/packages/osrl/src/lib/markdown.ts new file mode 100644 index 00000000..fd5e9a8e --- /dev/null +++ b/packages/osrl/src/lib/markdown.ts @@ -0,0 +1,257 @@ +import { Converter } from 'showdown' + +export const md2html = (content) => { + let converter = new Converter({ tables: true }); + converter.setOption('literalMidWordUnderscores', 'true'); + return converter.makeHtml(content); +} + +/** + * @typedef MarkdownTableOptions + * @property {string|null|Array.} [align] + * @property {boolean} [padding=true] + * @property {boolean} [delimiterStart=true] + * @property {boolean} [delimiterStart=true] + * @property {boolean} [delimiterEnd=true] + * @property {boolean} [alignDelimiters=true] + * @property {(value: string) => number} [stringLength] + */ + +/** + * Create a table from a matrix of strings. + * + * from : https://github.com/wooorm/markdown-table/blob/main/index.js + * + * + * + * @param {Array.>} table + * @param {MarkdownTableOptions} [options] + * @returns {string} + */ +export const markdownTable = (table, options:any = {}) =>{ + + const align = (options.align || []).concat() + const stringLength = options.stringLength || defaultStringLength + /** @type {Array} Character codes as symbols for alignment per column. */ + const alignments = [] + /** @type {Array>} Cells per row. */ + const cellMatrix = [] + /** @type {Array>} Sizes of each cell per row. */ + const sizeMatrix = [] + /** @type {Array} */ + const longestCellByColumn = [] + let mostCellsPerRow = 0 + let rowIndex = -1 + + // This is a superfluous loop if we don’t align delimiters, but otherwise we’d + // do superfluous work when aligning, so optimize for aligning. + while (++rowIndex < table.length) { + /** @type {Array} */ + const row = [] + /** @type {Array} */ + const sizes = [] + let columnIndex = -1 + + if (table[rowIndex].length > mostCellsPerRow) { + mostCellsPerRow = table[rowIndex].length + } + + while (++columnIndex < table[rowIndex].length) { + const cell = serialize(table[rowIndex][columnIndex]) + + if (options.alignDelimiters !== false) { + const size = stringLength(cell) + sizes[columnIndex] = size + + if ( + longestCellByColumn[columnIndex] === undefined || + size > longestCellByColumn[columnIndex] + ) { + longestCellByColumn[columnIndex] = size + } + } + + row.push(cell) + } + + cellMatrix[rowIndex] = row + sizeMatrix[rowIndex] = sizes + } + + // Figure out which alignments to use. + let columnIndex = -1 + + if (typeof align === 'object' && 'length' in align) { + while (++columnIndex < mostCellsPerRow) { + alignments[columnIndex] = toAlignment(align[columnIndex]) + } + } else { + const code = toAlignment(align) + + while (++columnIndex < mostCellsPerRow) { + alignments[columnIndex] = code + } + } + + // Inject the alignment row. + columnIndex = -1 + /** @type {Array} */ + const row = [] + /** @type {Array} */ + const sizes = [] + + while (++columnIndex < mostCellsPerRow) { + const code = alignments[columnIndex] + let before = '' + let after = '' + + if (code === 99 /* `c` */) { + before = ':' + after = ':' + } else if (code === 108 /* `l` */) { + before = ':' + } else if (code === 114 /* `r` */) { + after = ':' + } + + // There *must* be at least one hyphen-minus in each alignment cell. + let size = + options.alignDelimiters === false + ? 1 + : Math.max( + 1, + longestCellByColumn[columnIndex] - before.length - after.length + ) + + const cell = before + '-'.repeat(size) + after + + if (options.alignDelimiters !== false) { + size = before.length + size + after.length + + if (size > longestCellByColumn[columnIndex]) { + longestCellByColumn[columnIndex] = size + } + + sizes[columnIndex] = size + } + + row[columnIndex] = cell + } + + // Inject the alignment row. + cellMatrix.splice(1, 0, row) + sizeMatrix.splice(1, 0, sizes) + + rowIndex = -1 + /** @type {Array} */ + const lines = [] + + while (++rowIndex < cellMatrix.length) { + const row = cellMatrix[rowIndex] + const sizes = sizeMatrix[rowIndex] + columnIndex = -1 + /** @type {Array} */ + const line = [] + + while (++columnIndex < mostCellsPerRow) { + const cell = row[columnIndex] || '' + let before = '' + let after = '' + + if (options.alignDelimiters !== false) { + const size = + longestCellByColumn[columnIndex] - (sizes[columnIndex] || 0) + const code = alignments[columnIndex] + + if (code === 114 /* `r` */) { + before = ' '.repeat(size) + } else if (code === 99 /* `c` */) { + if (size % 2) { + before = ' '.repeat(size / 2 + 0.5) + after = ' '.repeat(size / 2 - 0.5) + } else { + before = ' '.repeat(size / 2) + after = before + } + } else { + after = ' '.repeat(size) + } + } + + if (options.delimiterStart !== false && !columnIndex) { + line.push('|') + } + + if ( + options.padding !== false && + // Don’t add the opening space if we’re not aligning and the cell is + // empty: there will be a closing space. + !(options.alignDelimiters === false && cell === '') && + (options.delimiterStart !== false || columnIndex) + ) { + line.push(' ') + } + + if (options.alignDelimiters !== false) { + line.push(before) + } + + line.push(cell) + + if (options.alignDelimiters !== false) { + line.push(after) + } + + if (options.padding !== false) { + line.push(' ') + } + + if ( + options.delimiterEnd !== false || + columnIndex !== mostCellsPerRow - 1 + ) { + line.push('|') + } + } + + lines.push( + options.delimiterEnd === false + ? line.join('').replace(/ +$/, '') + : line.join('') + ) + } + + return lines.join('\n') +} + +/** + * @param {string|null|undefined} [value] + * @returns {string} + */ +function serialize(value) { + return value === null || value === undefined ? '' : String(value) +} + +/** + * @param {string} value + * @returns {number} + */ +function defaultStringLength(value) { + return value.length +} + +/** + * @param {string|null|undefined} value + * @returns {number} + */ +function toAlignment(value) { + const code = typeof value === 'string' ? value.codePointAt(0) : 0 + + return code === 67 /* `C` */ || code === 99 /* `c` */ + ? 99 /* `c` */ + : code === 76 /* `L` */ || code === 108 /* `l` */ + ? 108 /* `l` */ + : code === 82 /* `R` */ || code === 114 /* `r` */ + ? 114 /* `r` */ + : 0 +} diff --git a/packages/osrl/src/lib/net/mime.ts b/packages/osrl/src/lib/net/mime.ts new file mode 100644 index 00000000..2e2f8633 --- /dev/null +++ b/packages/osrl/src/lib/net/mime.ts @@ -0,0 +1,29 @@ +export const mimes = { + ".doc": "application/msword", + ".dot": "application/msword", + ".docx": "application/vnd.openxmlformats-officedocument.wordprocessingml.document", + ".dotx": "application/vnd.openxmlformats-officedocument.wordprocessingml.template", + ".docm": "application/vnd.ms-word.document.macroEnabled.12", + ".dotm": "application/vnd.ms-word.template.macroEnabled.12", + ".xls": "application/vnd.ms-excel", + ".xlt": "application/vnd.ms-excel", + ".xla": "application/vnd.ms-excel", + ".xlsx": "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", + ".xltx": "application/vnd.openxmlformats-officedocument.spreadsheetml.template", + ".xlsm": "application/vnd.ms-excel.sheet.macroEnabled.12", + ".xltm": "application/vnd.ms-excel.template.macroEnabled.12", + ".xlam": "application/vnd.ms-excel.addin.macroEnabled.12", + ".xlsb": "application/vnd.ms-excel.sheet.binary.macroEnabled.12", + ".ppt": "application/vnd.ms-powerpoint", + ".pot": "application/vnd.ms-powerpoint", + ".pps": "application/vnd.ms-powerpoint", + ".ppa": "application/vnd.ms-powerpoint", + ".pptx": "application/vnd.openxmlformats-officedocument.presentationml.presentation", + ".potx": "application/vnd.openxmlformats-officedocument.presentationml.template", + ".ppsx": "application/vnd.openxmlformats-officedocument.presentationml.slideshow", + ".ppam": "application/vnd.ms-powerpoint.addin.macroEnabled.12", + ".pptm": "application/vnd.ms-powerpoint.presentation.macroEnabled.12", + ".potm": "application/vnd.ms-powerpoint.template.macroEnabled.12", + ".ppsm": "application/vnd.ms-powerpoint.slideshow.macroEnabled.12", + ".mdb": "application/vnd.ms-access" +} \ No newline at end of file diff --git a/packages/osrl/src/lib/net/sheets.ts b/packages/osrl/src/lib/net/sheets.ts new file mode 100644 index 00000000..d32626b3 --- /dev/null +++ b/packages/osrl/src/lib/net/sheets.ts @@ -0,0 +1,193 @@ + +import { logger } from '../../index' +import { mimes } from './mime'; + +import { substitute } from '@plastichub/core/strings' +import { DEFAULT_ROOTS } from '@plastichub/osr-commons' + + +import * as fs from 'fs'; +import * as path from 'path'; + +import { sync as readFile } from '@plastichub/fs/read'; +import { sync as writeFile } from '@plastichub/fs/write'; +import { sync as exists } from '@plastichub/fs/exists'; + +const { authenticate } = require('@google-cloud/local-auth'); +const { google } = require('googleapis'); + + +// https://developers.google.com/sheets/api/quickstart/nodejs +// If modifying these scopes, delete token.json. + +const SCOPES = ['https://www.googleapis.com/auth/spreadsheets.readonly', + 'https://www.googleapis.com/auth/drive.readonly']; + +/** + * Reads previously authorized credentials from the save file. + * + * @return {Promise} + */ +async function loadSavedCredentialsIfExist() { + + try { + const tokenPath = path.resolve(substitute('${OSR_ROOT}/token.json', DEFAULT_ROOTS)); + const credentials = readFile(tokenPath, 'json') as string; + return google.auth.fromJSON(credentials); + } catch (err) { + return null; + } +} + +/** + * Serializes credentials to a file compatible with GoogleAUth.fromJSON. + * + * @param {OAuth2Client} client + * @return {Promise} + */ +async function saveCredentials(client, credentialsFile: string = '${OSR_ROOT}/credentials.json') { + + credentialsFile = path.resolve(substitute(credentialsFile, DEFAULT_ROOTS)); + + const keys = readFile(credentialsFile, 'json') as any; + + const key = keys.installed || keys.web; + const payload = JSON.stringify({ + type: 'authorized_user', + client_id: key.client_id, + client_secret: key.client_secret, + refresh_token: client.credentials.refresh_token, + }); + + const tokenPath = path.resolve(substitute('${OSR_ROOT}/token.json', DEFAULT_ROOTS)); + writeFile(tokenPath, payload); +} + +async function authorize(credentialsFile: string = '${OSR_ROOT}/credentials.json') { + let client = await loadSavedCredentialsIfExist(); + if (client) { + return client; + } + + credentialsFile = path.resolve(substitute(credentialsFile, DEFAULT_ROOTS)); + + client = await authenticate({ + scopes: SCOPES, + keyfilePath: credentialsFile + }); + if (client.credentials) { + await saveCredentials(client); + } + return client; +} +const readSheet = async (auth: any, sheet: string, range: any) => { + const sheets = google.sheets({ version: 'v4', auth }); + const res = await sheets.spreadsheets.values.get({ + spreadsheetId: sheet, + range: range, + }); + return res.data.values; +} + +export const read = async (sheet: string, range: string, credentialsFile: string = '${OSR_ROOT}/credentials.json') => { + + credentialsFile = path.resolve(substitute(credentialsFile, DEFAULT_ROOTS)) + if (!exists(path.resolve(credentialsFile))) { + logger.error('Cant find credentials.json ', credentialsFile); + return Promise.reject(); + } + const client = await authorize(credentialsFile); + const ret = await readSheet(client, sheet, range); + return ret; +} + + +export const download = async (sheet: string, dst: string, credentialsFile: string = '${OSR_ROOT}/credentials.json') => { + credentialsFile = path.resolve(substitute(credentialsFile,DEFAULT_ROOTS)); + if(!exists(path.resolve(credentialsFile))){ + logger.error('Cant find credentials.json ' + credentialsFile); + return; + } + const auth = await authorize(credentialsFile); + google.options({ auth: auth as any }); + + const dest = fs.createWriteStream(dst); + const drive = google.drive('v3'); + const res = await drive.files.export( + { + fileId: sheet, + mimeType: mimes[path.parse(dst).ext] + }, + { + responseType: 'stream' + } + ); + + await new Promise((resolve, reject) => { + res.data + .on('error', reject) + .pipe(dest) + .on('error', reject) + .on('finish', resolve); + }); +} + + + +/** + * Create an OAuth2 client with the given credentials, and then execute the + * given callback function. + * @param {Object} credentials The authorization client credentials. + * @param {function} callback The callback to call with the authorized client. + */ +/* +const authorize = async (credentials: any) => { + const { client_secret, client_id, redirect_uris } = credentials.installed; + const oAuth2Client = new google.auth.OAuth2(client_id, client_secret, redirect_uris[0]); + + const tokenPath = substitute('${OSR_ROOT}/token.json', DEFAULT_ROOTS); + const token = readFile(tokenPath, 'string') as string; + if (!token) { + return getNewToken(oAuth2Client); + } + + oAuth2Client.setCredentials(JSON.parse(token)); + return oAuth2Client; +} + +*/ + + +/** + * Get and store new token after prompting for user authorization, and then + * execute the given callback with the authorized OAuth2 client. + * @param {google.auth.OAuth2} oAuth2Client The OAuth2 client to get token for. + * @param {getEventsCallback} callback The callback for the authorized client. + */ +/* +const getNewToken = async (oAuth2Client: any) => { + + const authUrl = oAuth2Client.generateAuthUrl({ + access_type: 'offline', + scope: SCOPES, + }); + + logger.warn('Authorize this app by visiting this url:', authUrl); + + const rl = readline.createInterface({ + input: process.stdin, + output: process.stdout, + }); + + rl.question('Enter the code from that page here: ', (code) => { + rl.close(); + oAuth2Client.getToken(code, (err: any, token: any) => { + if (err) return console.error('Error while trying to retrieve access token', err); + oAuth2Client.setCredentials(token); + const tokenPath = substitute('${OSR_ROOT}/token.json', DEFAULT_ROOTS); + writeFile(tokenPath, JSON.stringify(token, null, 2)); + return oAuth2Client; + }); + }); +} +*/ diff --git a/packages/osrl/src/lib/primitives.ts b/packages/osrl/src/lib/primitives.ts new file mode 100644 index 00000000..0b33f38c --- /dev/null +++ b/packages/osrl/src/lib/primitives.ts @@ -0,0 +1,256 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +'use strict'; + +const _typeof = { + number: 'number', + string: 'string', + undefined: 'undefined', + object: 'object', + function: 'function' +}; + +export function traverse(o: any, ctx, fn: (obj: any, prop: string, value: any) => void) { + for (const i in o) { + fn.apply(ctx, [o, i, o[i]]); + if (o[i] !== null && typeof (o[i]) === 'object') { + traverse(o[i], ctx, fn); + } + } +} + +/** + * @returns whether the provided parameter is a JavaScript Array or not. + */ +export function isArray(array: any): array is any[] { + if (Array.isArray) { + return Array.isArray(array); + } + + if (array && typeof (array.length) === _typeof.number && array.constructor === Array) { + return true; + } + + return false; +} + +/** + * @returns whether the provided parameter is a JavaScript String or not. + */ +export function isString(str: any): str is string { + if (typeof (str) === _typeof.string || str instanceof String) { + return true; + } + + return false; +} + +/** + * @returns whether the provided parameter is a JavaScript Array and each element in the array is a string. + */ +export function isStringArray(value: any): value is string[] { + return isArray(value) && (value).every(elem => isString(elem)); +} + +/** + * + * @returns whether the provided parameter is of type `object` but **not** + * `null`, an `array`, a `regexp`, nor a `date`. + */ +export function isObject(obj: any): boolean { + // The method can't do a type cast since there are type (like strings) which + // are subclasses of any put not positvely matched by the function. Hence type + // narrowing results in wrong results. + return typeof obj === _typeof.object + && obj !== null + && !Array.isArray(obj) + && !(obj instanceof RegExp) + && !(obj instanceof Date); +} + +/** + * In **contrast** to just checking `typeof` this will return `false` for `NaN`. + * @returns whether the provided parameter is a JavaScript Number or not. + */ +export function isNumber(obj: any): obj is number { + if ((typeof (obj) === _typeof.number || obj instanceof Number) && !isNaN(obj)) { + return true; + } + + return false; +} + +/** + * @returns whether the provided parameter is a JavaScript Boolean or not. + */ +export function isBoolean(obj: any): obj is boolean { + return obj === true || obj === false; +} + +/** + * @returns whether the provided parameter is undefined. + */ +export function isUndefined(obj: any): boolean { + return typeof (obj) === _typeof.undefined; +} + +/** + * @returns whether the provided parameter is undefined or null. + */ +export function isUndefinedOrNull(obj: any): boolean { + return isUndefined(obj) || obj === null; +} + + +const hasOwnProperty = Object.prototype.hasOwnProperty; + +/** + * @returns whether the provided parameter is an empty JavaScript Object or not. + */ +export function isEmptyObject(obj: any): obj is any { + if (!isObject(obj)) { + return false; + } + + for (let key in obj) { + if (hasOwnProperty.call(obj, key)) { + return false; + } + } + + return true; +} + +/** + * @returns whether the provided parameter is a JavaScript Function or not. + */ +export function isFunction(obj: any): obj is Function { + return typeof obj === _typeof.function; +} + +/** + * @returns whether the provided parameters is are JavaScript Function or not. + */ +export function areFunctions(...objects: any[]): boolean { + return objects && objects.length > 0 && objects.every(isFunction); +} + +export type TypeConstraint = string | Function; + +export function validateConstraints(args: any[], constraints: TypeConstraint[]): void { + const len = Math.min(args.length, constraints.length); + for (let i = 0; i < len; i++) { + validateConstraint(args[i], constraints[i]); + } +} + +export function validateConstraint(arg: any, constraint: TypeConstraint): void { + + if (isString(constraint)) { + if (typeof arg !== constraint) { + throw new Error(`argument does not match constraint: typeof ${constraint}`); + } + } else if (isFunction(constraint)) { + if (arg instanceof constraint) { + return; + } + if (arg && arg.constructor === constraint) { + return; + } + if (constraint.length === 1 && constraint.call(undefined, arg) === true) { + return; + } + throw new Error(`argument does not match one of these constraints: arg instanceof constraint, arg.constructor === constraint, nor constraint(arg) === true`); + } +} + +/** + * Creates a new object of the provided class and will call the constructor with + * any additional argument supplied. + */ +export function create(ctor: Function, ...args: any[]): any { + let obj = Object.create(ctor.prototype); + ctor.apply(obj, args); + + return obj; +} + +export interface IFunction0 { + (): T; +} +export interface IFunction1 { + (a1: A1): T; +} +export interface IFunction2 { + (a1: A1, a2: A2): T; +} +export interface IFunction3 { + (a1: A1, a2: A2, a3: A3): T; +} +export interface IFunction4 { + (a1: A1, a2: A2, a3: A3, a4: A4): T; +} +export interface IFunction5 { + (a1: A1, a2: A2, a3: A3, a4: A4, a5: A5): T; +} +export interface IFunction6 { + (a1: A1, a2: A2, a3: A3, a4: A4, a5: A5, a6: A6): T; +} +export interface IFunction7 { + (a1: A1, a2: A2, a3: A3, a4: A4, a5: A5, a6: A6, a7: A7): T; +} +export interface IFunction8 { + (a1: A1, a2: A2, a3: A3, a4: A4, a5: A5, a6: A6, a7: A7, a8: A8): T; +} + +export interface IAction0 extends IFunction0 { } +export interface IAction1 extends IFunction1 { } +export interface IAction2 extends IFunction2 { } +export interface IAction3 extends IFunction3 { } +export interface IAction4 extends IFunction4 { } +export interface IAction5 extends IFunction5 { } +export interface IAction6 extends IFunction6 { } +export interface IAction7 extends IFunction7 { } +export interface IAction8 extends IFunction8 { } + +export type NumberCallback = (index: number) => void; + +export function count(to: number, callback: NumberCallback): void; +export function count(from: number, to: number, callback: NumberCallback): void; +export function count(fromOrTo: number, toOrCallback?: NumberCallback | number, callback?: NumberCallback): any { + var from: number, to: number; + + if (isNumber(toOrCallback)) { + from = fromOrTo; + to = toOrCallback; + } else { + from = 0; + to = fromOrTo; + callback = toOrCallback; + } + + var op = from <= to ? (i: number) => i + 1 : (i: number) => i - 1; + var cmp = from <= to ? (a: number, b: number) => a < b : (a: number, b: number) => a > b; + + for (var i = from; cmp(i, to); i = op(i)) { + callback(i); + } +} + +export function countToArray(to: number): number[]; +export function countToArray(from: number, to: number): number[]; +export function countToArray(fromOrTo: number, to?: number): number[] { + var result: number[] = []; + var fn = (i: number) => result.push(i); + + if (isUndefined(to)) { + count(fromOrTo, fn); + } else { + count(fromOrTo, to, fn); + } + + return result; +} + diff --git a/packages/osrl/src/lib/strings.ts b/packages/osrl/src/lib/strings.ts new file mode 100644 index 00000000..4f787a38 --- /dev/null +++ b/packages/osrl/src/lib/strings.ts @@ -0,0 +1,657 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +'use strict'; + +import { BoundedLinkedMap } from './map'; +import { CharCode } from './charCode'; + +/** + * The empty string. + */ +export const empty = ''; + +export function isFalsyOrWhitespace(str: string): boolean { + if (!str || typeof str !== 'string') { + return true; + } + return str.trim().length === 0; +} + +/** + * @returns the provided number with the given number of preceding zeros. + */ +export function pad(n: number, l: number, char: string = '0'): string { + let str = '' + n; + let r = [str]; + + for (let i = str.length; i < l; i++) { + r.push(char); + } + + return r.reverse().join(''); +} + +const _formatRegexp = /{(\d+)}/g; + +/** + * Helper to produce a string with a variable number of arguments. Insert variable segments + * into the string using the {n} notation where N is the index of the argument following the string. + * @param value string to which formatting is applied + * @param args replacements for {n}-entries + */ +export function format(value: string, ...args: any[]): string { + if (args.length === 0) { + return value; + } + return value.replace(_formatRegexp, function (match, group) { + let idx = parseInt(group, 10); + return isNaN(idx) || idx < 0 || idx >= args.length ? + match : + args[idx]; + }); +} + +/** + * Converts HTML characters inside the string to use entities instead. Makes the string safe from + * being used e.g. in HTMLElement.innerHTML. + */ +export function escape(html: string): string { + return html.replace(/[<|>|&]/g, function (match) { + switch (match) { + case '<': return '<'; + case '>': return '>'; + case '&': return '&'; + default: return match; + } + }); +} + +/** + * Escapes regular expression characters in a given string + */ +export function escapeRegExpCharacters(value: string): string { + return value.replace(/[\-\\\{\}\*\+\?\|\^\$\.\,\[\]\(\)\#\s]/g, '\\$&'); +} + +/** + * Removes all occurrences of needle from the beginning and end of haystack. + * @param haystack string to trim + * @param needle the thing to trim (default is a blank) + */ +export function trim(haystack: string, needle: string = ' '): string { + let trimmed = ltrim(haystack, needle); + return rtrim(trimmed, needle); +} + +/** + * Removes all occurrences of needle from the beginning of haystack. + * @param haystack string to trim + * @param needle the thing to trim + */ +export function ltrim(haystack?: string, needle?: string): string { + if (!haystack || !needle) { + return haystack; + } + + let needleLen = needle.length; + if (needleLen === 0 || haystack.length === 0) { + return haystack; + } + + let offset = 0; + let idx = -1; + + // tslint:disable-next-line:no-conditional-assignment + while ((idx = haystack.indexOf(needle, offset)) === offset) { + offset = offset + needleLen; + } + return haystack.substring(offset); +} + +/** + * Removes all occurrences of needle from the end of haystack. + * @param haystack string to trim + * @param needle the thing to trim + */ +export function rtrim(haystack?: string, needle?: string): string { + if (!haystack || !needle) { + return haystack; + } + + let needleLen = needle.length, + haystackLen = haystack.length; + + if (needleLen === 0 || haystackLen === 0) { + return haystack; + } + + let offset = haystackLen, + idx = -1; + + while (true) { + idx = haystack.lastIndexOf(needle, offset - 1); + if (idx === -1 || idx + needleLen !== offset) { + break; + } + if (idx === 0) { + return ''; + } + offset = idx; + } + + return haystack.substring(0, offset); +} + +export function convertSimple2RegExpPattern(pattern: string): string { + return pattern.replace(/[\-\\\{\}\+\?\|\^\$\.\,\[\]\(\)\#\s]/g, '\\$&').replace(/[\*]/g, '.*'); +} + +export function stripWildcards(pattern: string): string { + return pattern.replace(/\*/g, ''); +} + +/** + * Determines if haystack starts with needle. + */ +export function startsWith(haystack: string, needle: string): boolean { + if (haystack.length < needle.length) { + return false; + } + + for (let i = 0; i < needle.length; i++) { + if (haystack[i] !== needle[i]) { + return false; + } + } + + return true; +} + +/** + * Determines if haystack ends with needle. + */ +export function endsWith(haystack: string, needle: string): boolean { + let diff = haystack.length - needle.length; + if (diff > 0) { + return haystack.indexOf(needle, diff) === diff; + } else if (diff === 0) { + return haystack === needle; + } else { + return false; + } +} + +export function indexOfIgnoreCase(haystack: string, needle: string, position: number = 0): number { + let index = haystack.indexOf(needle, position); + if (index < 0) { + if (position > 0) { + haystack = haystack.substr(position); + } + needle = escapeRegExpCharacters(needle); + index = haystack.search(new RegExp(needle, 'i')); + } + return index; +} + +export interface RegExpOptions { + matchCase?: boolean; + wholeWord?: boolean; + multiline?: boolean; + global?: boolean; +} + +export function createRegExp(searchString: string, isRegex: boolean, options: RegExpOptions = {}): RegExp { + if (searchString === '') { + throw new Error('Cannot create regex from empty string'); + } + if (!isRegex) { + searchString = searchString.replace(/[\-\\\{\}\*\+\?\|\^\$\.\,\[\]\(\)\#\s]/g, '\\$&'); + } + if (options.wholeWord) { + if (!/\B/.test(searchString.charAt(0))) { + searchString = '\\b' + searchString; + } + if (!/\B/.test(searchString.charAt(searchString.length - 1))) { + searchString = searchString + '\\b'; + } + } + let modifiers = ''; + if (options.global) { + modifiers += 'g'; + } + if (!options.matchCase) { + modifiers += 'i'; + } + if (options.multiline) { + modifiers += 'm'; + } + + return new RegExp(searchString, modifiers); +} + +export function regExpLeadsToEndlessLoop(regexp: RegExp): boolean { + // Exit early if it's one of these special cases which are meant to match + // against an empty string + if (regexp.source === '^' || regexp.source === '^$' || regexp.source === '$') { + return false; + } + + // We check against an empty string. If the regular expression doesn't advance + // (e.g. ends in an endless loop) it will match an empty string. + let match = regexp.exec(''); + return (match && regexp.lastIndex === 0); +} + +/** + * The normalize() method returns the Unicode Normalization Form of a given string. The form will be + * the Normalization Form Canonical Composition. + * + * @see {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/normalize} + */ +export let canNormalize = typeof (('').normalize) === 'function'; +const nonAsciiCharactersPattern = /[^\u0000-\u0080]/; +const normalizedCache = new BoundedLinkedMap(10000); // bounded to 10000 elements +export function normalizeNFC(str: string): string { + if (!canNormalize || !str) { + return str; + } + + const cached = normalizedCache.get(str); + if (cached) { + return cached; + } + + let res: string; + if (nonAsciiCharactersPattern.test(str)) { + res = (str).normalize('NFC'); + } else { + res = str; + } + + // Use the cache for fast lookup + normalizedCache.set(str, res); + + return res; +} + +/** + * Returns first index of the string that is not whitespace. + * If string is empty or contains only whitespaces, returns -1 + */ +export function firstNonWhitespaceIndex(str: string): number { + for (let i = 0, len = str.length; i < len; i++) { + let chCode = str.charCodeAt(i); + if (chCode !== CharCode.Space && chCode !== CharCode.Tab) { + return i; + } + } + return -1; +} + +/** + * Returns the leading whitespace of the string. + * If the string contains only whitespaces, returns entire string + */ +export function getLeadingWhitespace(str: string): string { + for (let i = 0, len = str.length; i < len; i++) { + let chCode = str.charCodeAt(i); + if (chCode !== CharCode.Space && chCode !== CharCode.Tab) { + return str.substring(0, i); + } + } + return str; +} + +/** + * Returns last index of the string that is not whitespace. + * If string is empty or contains only whitespaces, returns -1 + */ +export function lastNonWhitespaceIndex(str: string, startIndex: number = str.length - 1): number { + for (let i = startIndex; i >= 0; i--) { + let chCode = str.charCodeAt(i); + if (chCode !== CharCode.Space && chCode !== CharCode.Tab) { + return i; + } + } + return -1; +} + +export function compare(a: string, b: string): number { + if (a < b) { + return -1; + } else if (a > b) { + return 1; + } else { + return 0; + } +} + +export function compareIgnoreCase(a: string, b: string): number { + const len = Math.min(a.length, b.length); + for (let i = 0; i < len; i++) { + const codeA = a.charCodeAt(i); + const codeB = b.charCodeAt(i); + + if (codeA === codeB) { + // equal + continue; + } + + if (isAsciiLetter(codeA) && isAsciiLetter(codeB)) { + const diff = codeA - codeB; + if (diff === 32 || diff === -32) { + // equal -> ignoreCase + continue; + } else { + return diff; + } + } else { + return compare(a.toLowerCase(), b.toLowerCase()); + } + } + + if (a.length < b.length) { + return -1; + } else if (a.length > b.length) { + return 1; + } else { + return 0; + } +} + +function isAsciiLetter(code: number): boolean { + return (code >= CharCode.a && code <= CharCode.z) || (code >= CharCode.A && code <= CharCode.Z); +} + +export function equalsIgnoreCase(a: string, b: string): boolean { + + let len1 = a.length, + len2 = b.length; + + if (len1 !== len2) { + return false; + } + + for (let i = 0; i < len1; i++) { + + let codeA = a.charCodeAt(i), + codeB = b.charCodeAt(i); + + if (codeA === codeB) { + continue; + + } else if (isAsciiLetter(codeA) && isAsciiLetter(codeB)) { + let diff = Math.abs(codeA - codeB); + if (diff !== 0 && diff !== 32) { + return false; + } + } else { + if (String.fromCharCode(codeA).toLocaleLowerCase() !== String.fromCharCode(codeB).toLocaleLowerCase()) { + return false; + } + } + } + + return true; +} + +/** + * @returns the length of the common prefix of the two strings. + */ +export function commonPrefixLength(a: string, b: string): number { + + let i: number, + len = Math.min(a.length, b.length); + + for (i = 0; i < len; i++) { + if (a.charCodeAt(i) !== b.charCodeAt(i)) { + return i; + } + } + + return len; +} + +/** + * @returns the length of the common suffix of the two strings. + */ +export function commonSuffixLength(a: string, b: string): number { + + let i: number, + len = Math.min(a.length, b.length); + + let aLastIndex = a.length - 1; + let bLastIndex = b.length - 1; + + for (i = 0; i < len; i++) { + if (a.charCodeAt(aLastIndex - i) !== b.charCodeAt(bLastIndex - i)) { + return i; + } + } + + return len; +} + +// --- unicode +// http://en.wikipedia.org/wiki/Surrogate_pair +// Returns the code point starting at a specified index in a string +// Code points U+0000 to U+D7FF and U+E000 to U+FFFF are represented on a single character +// Code points U+10000 to U+10FFFF are represented on two consecutive characters +//export function getUnicodePoint(str:string, index:number, len:number):number { +// let chrCode = str.charCodeAt(index); +// if (0xD800 <= chrCode && chrCode <= 0xDBFF && index + 1 < len) { +// let nextChrCode = str.charCodeAt(index + 1); +// if (0xDC00 <= nextChrCode && nextChrCode <= 0xDFFF) { +// return (chrCode - 0xD800) << 10 + (nextChrCode - 0xDC00) + 0x10000; +// } +// } +// return chrCode; +//} +export function isHighSurrogate(charCode: number): boolean { + return (0xD800 <= charCode && charCode <= 0xDBFF); +} + +export function isLowSurrogate(charCode: number): boolean { + return (0xDC00 <= charCode && charCode <= 0xDFFF); +} + +/** + * Generated using https://github.com/alexandrudima/unicode-utils/blob/master/generate-rtl-test.js + */ +const CONTAINS_RTL = /(?:[\u05BE\u05C0\u05C3\u05C6\u05D0-\u05F4\u0608\u060B\u060D\u061B-\u064A\u066D-\u066F\u0671-\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u0710\u0712-\u072F\u074D-\u07A5\u07B1-\u07EA\u07F4\u07F5\u07FA-\u0815\u081A\u0824\u0828\u0830-\u0858\u085E-\u08BD\u200F\uFB1D\uFB1F-\uFB28\uFB2A-\uFD3D\uFD50-\uFDFC\uFE70-\uFEFC]|\uD802[\uDC00-\uDD1B\uDD20-\uDE00\uDE10-\uDE33\uDE40-\uDEE4\uDEEB-\uDF35\uDF40-\uDFFF]|\uD803[\uDC00-\uDCFF]|\uD83A[\uDC00-\uDCCF\uDD00-\uDD43\uDD50-\uDFFF]|\uD83B[\uDC00-\uDEBB])/; + +/** + * Returns true if `str` contains any Unicode character that is classified as "R" or "AL". + */ +export function containsRTL(str: string): boolean { + return CONTAINS_RTL.test(str); +} + +const IS_BASIC_ASCII = /^[\t\n\r\x20-\x7E]*$/; +/** + * Returns true if `str` contains only basic ASCII characters in the range 32 - 126 (including 32 and 126) or \n, \r, \t + */ +export function isBasicASCII(str: string): boolean { + return IS_BASIC_ASCII.test(str); +} + +export function isFullWidthCharacter(charCode: number): boolean { + // Do a cheap trick to better support wrapping of wide characters, treat them as 2 columns + // http://jrgraphix.net/research/unicode_blocks.php + // 2E80 — 2EFF CJK Radicals Supplement + // 2F00 — 2FDF Kangxi Radicals + // 2FF0 — 2FFF Ideographic Description Characters + // 3000 — 303F CJK Symbols and Punctuation + // 3040 — 309F Hiragana + // 30A0 — 30FF Katakana + // 3100 — 312F Bopomofo + // 3130 — 318F Hangul Compatibility Jamo + // 3190 — 319F Kanbun + // 31A0 — 31BF Bopomofo Extended + // 31F0 — 31FF Katakana Phonetic Extensions + // 3200 — 32FF Enclosed CJK Letters and Months + // 3300 — 33FF CJK Compatibility + // 3400 — 4DBF CJK Unified Ideographs Extension A + // 4DC0 — 4DFF Yijing Hexagram Symbols + // 4E00 — 9FFF CJK Unified Ideographs + // A000 — A48F Yi Syllables + // A490 — A4CF Yi Radicals + // AC00 — D7AF Hangul Syllables + // [IGNORE] D800 — DB7F High Surrogates + // [IGNORE] DB80 — DBFF High Private Use Surrogates + // [IGNORE] DC00 — DFFF Low Surrogates + // [IGNORE] E000 — F8FF Private Use Area + // F900 — FAFF CJK Compatibility Ideographs + // [IGNORE] FB00 — FB4F Alphabetic Presentation Forms + // [IGNORE] FB50 — FDFF Arabic Presentation Forms-A + // [IGNORE] FE00 — FE0F Variation Selectors + // [IGNORE] FE20 — FE2F Combining Half Marks + // [IGNORE] FE30 — FE4F CJK Compatibility Forms + // [IGNORE] FE50 — FE6F Small Form Variants + // [IGNORE] FE70 — FEFF Arabic Presentation Forms-B + // FF00 — FFEF Halfwidth and Fullwidth Forms + // [https://en.wikipedia.org/wiki/Halfwidth_and_fullwidth_forms] + // of which FF01 - FF5E fullwidth ASCII of 21 to 7E + // [IGNORE] and FF65 - FFDC halfwidth of Katakana and Hangul + // [IGNORE] FFF0 — FFFF Specials + charCode = +charCode; // @perf + return ( + (charCode >= 0x2E80 && charCode <= 0xD7AF) + || (charCode >= 0xF900 && charCode <= 0xFAFF) + || (charCode >= 0xFF01 && charCode <= 0xFF5E) + ); +} + +/** + * Computes the difference score for two strings. More similar strings have a higher score. + * We use largest common subsequence dynamic programming approach but penalize in the end for length differences. + * Strings that have a large length difference will get a bad default score 0. + * Complexity - both time and space O(first.length * second.length) + * Dynamic programming LCS computation http://en.wikipedia.org/wiki/Longest_common_subsequence_problem + * + * @param first a string + * @param second a string + */ +export function difference(first: string, second: string, maxLenDelta: number = 4): number { + let lengthDifference = Math.abs(first.length - second.length); + // We only compute score if length of the currentWord and length of entry.name are similar. + if (lengthDifference > maxLenDelta) { + return 0; + } + // Initialize LCS (largest common subsequence) matrix. + let LCS: number[][] = []; + let zeroArray: number[] = []; + let i: number, j: number; + for (i = 0; i < second.length + 1; ++i) { + zeroArray.push(0); + } + for (i = 0; i < first.length + 1; ++i) { + LCS.push(zeroArray); + } + for (i = 1; i < first.length + 1; ++i) { + for (j = 1; j < second.length + 1; ++j) { + if (first[i - 1] === second[j - 1]) { + LCS[i][j] = LCS[i - 1][j - 1] + 1; + } else { + LCS[i][j] = Math.max(LCS[i - 1][j], LCS[i][j - 1]); + } + } + } + return LCS[first.length][second.length] - Math.sqrt(lengthDifference); +} + +/** + * Returns an array in which every entry is the offset of a + * line. There is always one entry which is zero. + */ +export function computeLineStarts(text: string): number[] { + let regexp = /\r\n|\r|\n/g, + ret: number[] = [0], + match: RegExpExecArray; + while ((match = regexp.exec(text))) { + ret.push(regexp.lastIndex); + } + return ret; +} + +/** + * Given a string and a max length returns a shorted version. Shorting + * happens at favorable positions - such as whitespace or punctuation characters. + */ +export function lcut(text: string, n: number): string { + + if (text.length < n) { + return text; + } + + let segments = text.split(/\b/), + count = 0; + + for (let i = segments.length - 1; i >= 0; i--) { + count += segments[i].length; + + if (count > n) { + segments.splice(0, i); + break; + } + } + + return segments.join(empty).replace(/^\s/, empty); +} + +// Escape codes +// http://en.wikipedia.org/wiki/ANSI_escape_code +const EL = /\x1B\x5B[12]?K/g; // Erase in line +const COLOR_START = /\x1b\[\d+m/g; // Color +const COLOR_END = /\x1b\[0?m/g; // Color + +export function removeAnsiEscapeCodes(str: string): string { + if (str) { + str = str.replace(EL, ''); + str = str.replace(COLOR_START, ''); + str = str.replace(COLOR_END, ''); + } + + return str; +} + +// -- UTF-8 BOM + +export const UTF8_BOM_CHARACTER = String.fromCharCode(CharCode.UTF8_BOM); + +export function startsWithUTF8BOM(str: string): boolean { + return (str && str.length > 0 && str.charCodeAt(0) === CharCode.UTF8_BOM); +} + +/** + * Appends two strings. If the appended result is longer than maxLength, + * trims the start of the result and replaces it with '...'. + */ +export function appendWithLimit(first: string, second: string, maxLength: number): string { + const newLength = first.length + second.length; + if (newLength > maxLength) { + first = '...' + first.substr(newLength - maxLength); + } + if (second.length > maxLength) { + first += second.substr(second.length - maxLength); + } else { + first += second; + } + + return first; +} + + +export function safeBtoa(str: string): string { + return btoa(encodeURIComponent(str)); // we use encodeURIComponent because btoa fails for non Latin 1 values +} + +export function repeat(s: string, count: number): string { + let result = ''; + for (let i = 0; i < count; i++) { + result += s; + } + return result; +} diff --git a/packages/osrl/src/library.ts b/packages/osrl/src/library.ts new file mode 100644 index 00000000..95a31272 --- /dev/null +++ b/packages/osrl/src/library.ts @@ -0,0 +1,5 @@ +export * from './liquid' +export * from './Engine' +export * from './options' +export { getContext } from './Engine' +export * from './constants' diff --git a/packages/osrl/src/liquid/index.ts b/packages/osrl/src/liquid/index.ts new file mode 100644 index 00000000..125c0a55 --- /dev/null +++ b/packages/osrl/src/liquid/index.ts @@ -0,0 +1,54 @@ +import { defaultFS } from '../fs' +import { Liquid } from '../liquidjs/liquid' +import { LiquidOptions } from '../liquidjs/liquid-options' +import { IOptions } from '../types' +import * as _ from './underscore' +export { sync as dir } from '@plastichub/fs/dir' + +export const engine = (options) => { + const engine = new Liquid(options) + return engine +} + +export const engineDefault = (options) => { + const delimitters = options.language === 'osr' ? + { + tagDelimiterLeft: '[%', + tagDelimiterRight: '%]', + outputDelimiterLeft: '[[', + outputDelimiterRight: ']]' + } : {} + + const lOptions: LiquidOptions = { + keepOutputType: true, + trimOutputRight: false, + trimOutputLeft: false, + trimTagRight: false, + trimTagLeft: false, + greedy: false, + cache: false, + ...options, + ...delimitters, + }; + return new Liquid(lOptions) +} +/** + * + * @param string + * @param vars + * @param options + * @see https://liquidjs.com/tags/overview.html + * @returns + */ +export async function parseText(string: string, vars: any, iterations: number = 5, options: IOptions = null) { + const l = engine(options) + options = { + fs: defaultFS(options.resolve), + ...options, + } as any; + let t = await l.parseAndRender(string, vars, options as any); + for (let i = 0; i < iterations; i++) { + t = await l.parseAndRender(t, vars, options as any); + } + return t; +} diff --git a/packages/osrl/src/liquid/loader.ts b/packages/osrl/src/liquid/loader.ts new file mode 100644 index 00000000..86decd36 --- /dev/null +++ b/packages/osrl/src/liquid/loader.ts @@ -0,0 +1,80 @@ +import { FS } from './fs' +import { assert, escapeRegex } from '../util' + +export interface LoaderOptions { + fs: FS; + extname: string; + root: string[]; + partials: string[]; + layouts: string[]; + relativeReference: boolean; +} +export enum LookupType { + Partials = 'partials', + Layouts = 'layouts', + Root = 'root' +} +export class Loader { + public shouldLoadRelative: (referencedFile: string) => boolean + private options: LoaderOptions + private contains: (root: string, file: string) => boolean + + constructor (options: LoaderOptions) { + this.options = options + if (options.relativeReference) { + const sep = options.fs.sep + assert(sep, '`fs.sep` is required for relative reference') + const rRelativePath = new RegExp(['.' + sep, '..' + sep, './', '../'].map(prefix => escapeRegex(prefix)).join('|')) + this.shouldLoadRelative = (referencedFile: string) => rRelativePath.test(referencedFile) + } else { + this.shouldLoadRelative = (referencedFile: string) => false + } + this.contains = this.options.fs.contains || (() => true) + } + + public * lookup (file: string, type: LookupType, sync?: boolean, currentFile?: string): Generator { + const { fs } = this.options + const dirs = this.options[type] + for (const filepath of this.candidates(file, dirs, currentFile, type !== LookupType.Root)) { + if (sync ? fs.existsSync(filepath) : yield fs.exists(filepath)) return filepath + } + throw this.lookupError(file, dirs) + } + + public * candidates (file: string, dirs: string[], currentFile?: string, enforceRoot?: boolean) { + const { fs, extname } = this.options + if (this.shouldLoadRelative(file) && currentFile) { + const referenced = fs.resolve(this.dirname(currentFile), file, extname) + for (const dir of dirs) { + if (!enforceRoot || this.contains(dir, referenced)) { + // the relatively referenced file is within one of root dirs + yield referenced + break + } + } + } + for (const dir of dirs) { + const referenced = fs.resolve(dir, file, extname) + if (!enforceRoot || this.contains(dir, referenced)) { + yield referenced + } + } + if (fs.fallback !== undefined) { + const filepath = fs.fallback(file) + if (filepath !== undefined) yield filepath + } + } + + private dirname (path: string) { + const fs = this.options.fs + assert(fs.dirname, '`fs.dirname` is required for relative reference') + return fs.dirname!(path) + } + + private lookupError (file: string, roots: string[]) { + const err = new Error('ENOENT') as any + err.message = `ENOENT: Failed to lookup "${file}" in "${roots}"` + err.code = 'ENOENT' + return err + } +} diff --git a/packages/osrl/src/liquid/parser.ts b/packages/osrl/src/liquid/parser.ts new file mode 100644 index 00000000..85cb7253 --- /dev/null +++ b/packages/osrl/src/liquid/parser.ts @@ -0,0 +1,28 @@ + +export const toValue = (val) => { + const _float = parseFloat(val); + if (!isNaN(_float)) { + return _float; + } + if (val === 'true' || val === true) { + return true; + } + if (val === 'false' || val === false) { + return false; + } + return val; +} + +export const toVariables = (parse) => { + return parse.filter((e) => e.name === 'assign').map((t) => { + return { + key: t.impl.key, + value: toValue(('' + t.impl.value).trim()), + } + }).concat(parse.filter((e) => e.name === 'capture').map((t) => { + return { + key: t.impl.variable, + value: toValue(('' + t.impl.templates[0].str).trim()), + } + })); +} \ No newline at end of file diff --git a/packages/osrl/src/liquid/underscore.ts b/packages/osrl/src/liquid/underscore.ts new file mode 100644 index 00000000..6969eb82 --- /dev/null +++ b/packages/osrl/src/liquid/underscore.ts @@ -0,0 +1,138 @@ +const toStr = Object.prototype.toString +const toLowerCase = String.prototype.toLowerCase + +/* + * Checks if value is classified as a String primitive or object. + * @param {any} value The value to check. + * @return {Boolean} Returns true if value is a string, else false. + */ +export function isString (value: any): value is string { + return toStr.call(value) === '[object String]' +} + +export function isFunction (value: any): value is Function { + return typeof value === 'function' +} + +export function promisify (fn: (arg1: T1, cb: (err: Error | null, result: T2) => void) => void): (arg1: T1) => Promise; +export function promisify (fn: (arg1: T1, arg2: T2, cb: (err: Error | null, result: T3) => void) => void): (arg1: T1, arg2: T2) => Promise; +export function promisify (fn: any) { + return function (...args: any[]) { + return new Promise((resolve, reject) => { + fn(...args, (err: Error, result: any) => { + err ? reject(err) : resolve(result) + }) + }) + } +} + +export function isNumber (value: any): value is number { + return typeof value === 'number' +} + +export function toLiquid (value: any): any { + if (value && isFunction(value.toLiquid)) return toLiquid(value.toLiquid()) + return value +} + +export function isNil (value: any): boolean { + return value === null || value === undefined +} + +export function isArray (value: any): value is any[] { + // be compatible with IE 8 + return toStr.call(value) === '[object Array]' +} + +/* + * Iterates over own enumerable string keyed properties of an object and invokes iteratee for each property. + * The iteratee is invoked with three arguments: (value, key, object). + * Iteratee functions may exit iteration early by explicitly returning false. + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @return {Object} Returns object. + */ +export function forOwn ( + object: {[key: string]: T} | undefined, + iteratee: ((val: T, key: string, obj: {[key: string]: T}) => boolean | void) +) { + object = object || {} + for (const k in object) { + if (object.hasOwnProperty(k)) { + if (iteratee(object[k], k, object) === false) break + } + } + return object +} + +export function last (arr: T[]): T; +export function last (arr: string): string; +export function last (arr: any[] | string): any | string { + return arr[arr.length - 1] +} + +/* + * Checks if value is the language type of Object. + * (e.g. arrays, functions, objects, regexes, new Number(0), and new String('')) + * @param {any} value The value to check. + * @return {Boolean} Returns true if value is an object, else false. + */ +export function isObject (value: any): value is object { + const type = typeof value + return value !== null && (type === 'object' || type === 'function') +} + +export function range (start: number, stop: number, step = 1) { + const arr: number[] = [] + for (let i = start; i < stop; i += step) { + arr.push(i) + } + return arr +} + +export function padStart (str: any, length: number, ch = ' ') { + return pad(str, length, ch, (str, ch) => ch + str) +} + +export function padEnd (str: any, length: number, ch = ' ') { + return pad(str, length, ch, (str, ch) => str + ch) +} + +export function pad (str: any, length: number, ch: string, add: (str: string, ch: string) => string) { + str = String(str) + let n = length - str.length + while (n-- > 0) str = add(str, ch) + return str +} + +export function identify (val: T): T { + return val +} + +export function snakeCase (str: string) { + return str.replace( + /(\w?)([A-Z])/g, + (_, a, b) => (a ? a + '_' : '') + b.toLowerCase() + ) +} + +export function changeCase (str: string): string { + const hasLowerCase = [...str].some(ch => ch >= 'a' && ch <= 'z') + return hasLowerCase ? str.toUpperCase() : str.toLowerCase() +} + +export function ellipsis (str: string, N: number): string { + return str.length > N ? str.substr(0, N - 3) + '...' : str +} + +// compare string in case-insensitive way, undefined values to the tail +export function caseInsensitiveCompare (a: any, b: any) { + if (a == null && b == null) return 0 + if (a == null) return 1 + if (b == null) return -1 + a = toLowerCase.call(a) + b = toLowerCase.call(b) + if (a < b) return -1 + if (a > b) return 1 + return 0 +} diff --git a/packages/osrl/src/liquidjs/builtin/filters/array.ts b/packages/osrl/src/liquidjs/builtin/filters/array.ts new file mode 100644 index 00000000..331ca9e9 --- /dev/null +++ b/packages/osrl/src/liquidjs/builtin/filters/array.ts @@ -0,0 +1,76 @@ +import { argumentsToValue, toValue, stringify, caseInsensitiveCompare, isArray, isNil, last as arrayLast, hasOwnProperty } from '../../util/underscore' +import { toArray } from '../../util/collection' +import { isTruthy } from '../../render/boolean' +import { FilterImpl } from '../../template/filter/filter-impl' +import { Scope } from '../../context/scope' +import { isComparable } from '../../drop/comparable' + +export const join = argumentsToValue((v: any[], arg: string) => toArray(v).join(arg === undefined ? ' ' : arg)) +export const last = argumentsToValue((v: any) => isArray(v) ? arrayLast(v) : '') +export const first = argumentsToValue((v: any) => isArray(v) ? v[0] : '') +export const reverse = argumentsToValue((v: any[]) => [...toArray(v)].reverse()) + +export function sort (this: FilterImpl, arr: T[], property?: string) { + arr = toValue(arr) + const getValue = (obj: Scope) => property ? this.context.getFromScope(obj, stringify(property).split('.')) : obj + return [...toArray(arr)].sort((lhs, rhs) => { + lhs = getValue(lhs) + rhs = getValue(rhs) + return lhs < rhs ? -1 : (lhs > rhs ? 1 : 0) + }) +} + +export function sortNatural (input: T[], property?: string) { + input = toValue(input) + const propertyString = stringify(property) + const compare = property === undefined + ? caseInsensitiveCompare + : (lhs: T, rhs: T) => caseInsensitiveCompare(lhs[propertyString], rhs[propertyString]) + return [...toArray(input)].sort(compare) +} + +export const size = (v: string | any[]) => (v && v.length) || 0 + +export function map (this: FilterImpl, arr: Scope[], property: string) { + arr = toValue(arr) + return toArray(arr).map(obj => this.context.getFromScope(obj, stringify(property).split('.'))) +} + +export function compact (this: FilterImpl, arr: T[]) { + arr = toValue(arr) + return toArray(arr).filter(x => !isNil(toValue(x))) +} + +export function concat (v: T1[], arg: T2[] = []): (T1 | T2)[] { + v = toValue(v) + arg = toArray(arg).map(v => toValue(v)) + return toArray(v).concat(arg) +} + +export function slice (v: T[] | string, begin: number, length = 1): T[] | string { + v = toValue(v) + if (isNil(v)) return [] + if (!isArray(v)) v = stringify(v) + begin = begin < 0 ? v.length + begin : begin + return v.slice(begin, begin + length) +} + +export function where (this: FilterImpl, arr: T[], property: string, expected?: any): T[] { + arr = toValue(arr) + return toArray(arr).filter(obj => { + const value = this.context.getFromScope(obj, stringify(property).split('.')) + if (expected === undefined) return isTruthy(value, this.context) + if (isComparable(expected)) return expected.equals(value) + return value === expected + }) +} + +export function uniq (arr: T[]): T[] { + arr = toValue(arr) + const u = {} + return (arr || []).filter(val => { + if (hasOwnProperty.call(u, String(val))) return false + u[String(val)] = true + return true + }) +} diff --git a/packages/osrl/src/liquidjs/builtin/filters/date.ts b/packages/osrl/src/liquidjs/builtin/filters/date.ts new file mode 100644 index 00000000..f424bcb4 --- /dev/null +++ b/packages/osrl/src/liquidjs/builtin/filters/date.ts @@ -0,0 +1,36 @@ +import strftime from '../../util/strftime' +import { LiquidDate } from '../../util/liquid-date' +import { toValue, stringify, isString, isNumber } from '../../util/underscore' +import { FilterImpl } from '../../template/filter/filter-impl' +import { TimezoneDate } from '../../util/timezone-date' + +export function date (this: FilterImpl, v: string | Date, arg: string) { + const opts = this.context.opts + let date: LiquidDate + v = toValue(v) + arg = stringify(arg) + if (v === 'now' || v === 'today') { + date = new Date() + } else if (isNumber(v)) { + date = new Date(v * 1000) + } else if (isString(v)) { + if (/^\d+$/.test(v)) { + date = new Date(+v * 1000) + } else if (opts.preserveTimezones) { + date = TimezoneDate.createDateFixedToTimezone(v) + } else { + date = new Date(v) + } + } else { + date = v + } + if (!isValidDate(date)) return v + if (opts.hasOwnProperty('timezoneOffset')) { + date = new TimezoneDate(date, opts.timezoneOffset!) + } + return strftime(date, arg) +} + +function isValidDate (date: any): date is Date { + return (date instanceof Date || date instanceof TimezoneDate) && !isNaN(date.getTime()) +} diff --git a/packages/osrl/src/liquidjs/builtin/filters/html.ts b/packages/osrl/src/liquidjs/builtin/filters/html.ts new file mode 100644 index 00000000..cdb340fe --- /dev/null +++ b/packages/osrl/src/liquidjs/builtin/filters/html.ts @@ -0,0 +1,36 @@ +import { stringify } from '../../util/underscore' + +const escapeMap = { + '&': '&', + '<': '<', + '>': '>', + '"': '"', + "'": ''' +} +const unescapeMap = { + '&': '&', + '<': '<', + '>': '>', + '"': '"', + ''': "'" +} + +export function escape (str: string) { + return stringify(str).replace(/&|<|>|"|'/g, m => escapeMap[m]) +} + +function unescape (str: string) { + return stringify(str).replace(/&(amp|lt|gt|#34|#39);/g, m => unescapeMap[m]) +} + +export function escapeOnce (str: string) { + return escape(unescape(stringify(str))) +} + +export function newlineToBr (v: string) { + return stringify(v).replace(/\n/g, '
    \n') +} + +export function stripHtml (v: string) { + return stringify(v).replace(/|||<.*?>/g, '') +} diff --git a/packages/osrl/src/liquidjs/builtin/filters/index.ts b/packages/osrl/src/liquidjs/builtin/filters/index.ts new file mode 100644 index 00000000..2219dee4 --- /dev/null +++ b/packages/osrl/src/liquidjs/builtin/filters/index.ts @@ -0,0 +1,7 @@ +export * from './html' +export * from './math' +export * from './url' +export * from './array' +export * from './date' +export * from './misc' +export * from './string' diff --git a/packages/osrl/src/liquidjs/builtin/filters/math.ts b/packages/osrl/src/liquidjs/builtin/filters/math.ts new file mode 100644 index 00000000..28be0cf8 --- /dev/null +++ b/packages/osrl/src/liquidjs/builtin/filters/math.ts @@ -0,0 +1,24 @@ +import { toValue, argumentsToValue } from '../../util/underscore' + +export const abs = argumentsToValue(Math.abs) +export const atLeast = argumentsToValue(Math.max) +export const atMost = argumentsToValue(Math.min) +export const ceil = argumentsToValue(Math.ceil) +export const dividedBy = argumentsToValue((dividend: number, divisor: number, integerArithmetic = false) => integerArithmetic ? Math.floor(dividend / divisor) : dividend / divisor) +export const floor = argumentsToValue(Math.floor) +export const minus = argumentsToValue((v: number, arg: number) => v - arg) +export const modulo = argumentsToValue((v: number, arg: number) => v % arg) +export const times = argumentsToValue((v: number, arg: number) => v * arg) + +export function round (v: number, arg = 0) { + v = toValue(v) + arg = toValue(arg) + const amp = Math.pow(10, arg) + return Math.round(v * amp) / amp +} + +export function plus (v: number, arg: number) { + v = toValue(v) + arg = toValue(arg) + return Number(v) + Number(arg) +} diff --git a/packages/osrl/src/liquidjs/builtin/filters/misc.ts b/packages/osrl/src/liquidjs/builtin/filters/misc.ts new file mode 100644 index 00000000..be7b1a93 --- /dev/null +++ b/packages/osrl/src/liquidjs/builtin/filters/misc.ts @@ -0,0 +1,16 @@ +import { isFalsy } from '../../render/boolean' +import { identify, isArray, isString, toValue } from '../../util/underscore' +import { FilterImpl } from '../../template/filter/filter-impl' + +export function Default (this: FilterImpl, value: T1, defaultValue: T2, ...args: Array<[string, any]>): T1 | T2 { + value = toValue(value) + if (isArray(value) || isString(value)) return value.length ? value : defaultValue + if (value === false && (new Map(args)).get('allow_false')) return false as T1 + return isFalsy(value, this.context) ? defaultValue : value +} + +export function json (value: any) { + return JSON.stringify(value) +} + +export const raw = identify diff --git a/packages/osrl/src/liquidjs/builtin/filters/string.ts b/packages/osrl/src/liquidjs/builtin/filters/string.ts new file mode 100644 index 00000000..58bd9558 --- /dev/null +++ b/packages/osrl/src/liquidjs/builtin/filters/string.ts @@ -0,0 +1,97 @@ +/** + * String related filters + * + * * prefer stringify() to String() since `undefined`, `null` should eval '' + */ +import { escapeRegExp, stringify } from '../../util/underscore' +import { assert } from '../../util/assert' + +export function append (v: string, arg: string) { + assert(arguments.length === 2, 'append expect 2 arguments') + return stringify(v) + stringify(arg) +} + +export function prepend (v: string, arg: string) { + assert(arguments.length === 2, 'prepend expect 2 arguments') + return stringify(arg) + stringify(v) +} + +export function lstrip (v: string, chars?: string) { + if (chars) { + chars = escapeRegExp(stringify(chars)) + return stringify(v).replace(new RegExp(`^[${chars}]+`, 'g'), '') + } + return stringify(v).replace(/^\s+/, '') +} + +export function downcase (v: string) { + return stringify(v).toLowerCase() +} + +export function upcase (str: string) { + return stringify(str).toUpperCase() +} + +export function remove (v: string, arg: string) { + return stringify(v).split(String(arg)).join('') +} + +export function removeFirst (v: string, l: string) { + return stringify(v).replace(String(l), '') +} + +export function rstrip (str: string, chars?: string) { + if (chars) { + chars = escapeRegExp(stringify(chars)) + return stringify(str).replace(new RegExp(`[${chars}]+$`, 'g'), '') + } + return stringify(str).replace(/\s+$/, '') +} + +export function split (v: string, arg: string) { + const arr = stringify(v).split(String(arg)) + // align to ruby split, which is the behavior of shopify/liquid + // see: https://ruby-doc.org/core-2.4.0/String.html#method-i-split + while (arr.length && arr[arr.length - 1] === '') arr.pop() + return arr +} + +export function strip (v: string, chars?: string) { + if (chars) { + chars = escapeRegExp(stringify(chars)) + return stringify(v) + .replace(new RegExp(`^[${chars}]+`, 'g'), '') + .replace(new RegExp(`[${chars}]+$`, 'g'), '') + } + return stringify(v).trim() +} + +export function stripNewlines (v: string) { + return stringify(v).replace(/\n/g, '') +} + +export function capitalize (str: string) { + str = stringify(str) + return str.charAt(0).toUpperCase() + str.slice(1).toLowerCase() +} + +export function replace (v: string, pattern: string, replacement: string) { + return stringify(v).split(String(pattern)).join(replacement) +} + +export function replaceFirst (v: string, arg1: string, arg2: string) { + return stringify(v).replace(String(arg1), arg2) +} + +export function truncate (v: string, l = 50, o = '...') { + v = stringify(v) + if (v.length <= l) return v + return v.substring(0, l - o.length) + o +} + +export function truncatewords (v: string, l = 15, o = '...') { + const arr = stringify(v).split(/\s+/) + let ret = arr.slice(0, l).join(' ') + if (arr.length >= l) ret += o + return ret +} diff --git a/packages/osrl/src/liquidjs/builtin/filters/url.ts b/packages/osrl/src/liquidjs/builtin/filters/url.ts new file mode 100644 index 00000000..087a6de2 --- /dev/null +++ b/packages/osrl/src/liquidjs/builtin/filters/url.ts @@ -0,0 +1,4 @@ +import { stringify } from '../../util/underscore' + +export const urlDecode = (x: string) => stringify(x).split('+').map(decodeURIComponent).join(' ') +export const urlEncode = (x: string) => stringify(x).split(' ').map(encodeURIComponent).join('+') diff --git a/packages/osrl/src/liquidjs/builtin/tags/assign.ts b/packages/osrl/src/liquidjs/builtin/tags/assign.ts new file mode 100644 index 00000000..88911051 --- /dev/null +++ b/packages/osrl/src/liquidjs/builtin/tags/assign.ts @@ -0,0 +1,15 @@ +import { Value, Tokenizer, assert, TagImplOptions, TagToken, Context } from '../../types' + +export default { + parse: function (token: TagToken) { + const tokenizer = new Tokenizer(token.args, this.liquid.options.operatorsTrie) + this.key = tokenizer.readIdentifier().content + tokenizer.skipBlank() + assert(tokenizer.peek() === '=', () => `illegal token ${token.getText()}`) + tokenizer.advance() + this.value = new Value(tokenizer.remaining(), this.liquid) + }, + render: function * (ctx: Context): Generator { + ctx.bottom()[this.key] = yield this.value.value(ctx, this.liquid.options.lenientIf) + } +} as TagImplOptions diff --git a/packages/osrl/src/liquidjs/builtin/tags/block.ts b/packages/osrl/src/liquidjs/builtin/tags/block.ts new file mode 100644 index 00000000..9a2fc0b9 --- /dev/null +++ b/packages/osrl/src/liquidjs/builtin/tags/block.ts @@ -0,0 +1,39 @@ +import BlockMode from '../../context/block-mode' +import { BlockDrop } from '../../drop/block-drop' +import { TagToken, TopLevelToken, Template, Context, TagImpl, Emitter } from '../../types' + +export default { + parse (this: TagImpl, token: TagToken, remainTokens: TopLevelToken[]) { + const match = /\w+/.exec(token.args) + this.block = match ? match[0] : ' ' + this.tpls = [] as Template[] + this.liquid.parser.parseStream(remainTokens) + .on('tag:endblock', function () { this.stop() }) + .on('template', (tpl: Template) => this.tpls.push(tpl)) + .on('end', () => { throw new Error(`tag ${token.getText()} not closed`) }) + .start() + }, + + * render (this: TagImpl, ctx: Context, emitter: Emitter) { + const blockRender = this.getBlockRender(ctx) + if (ctx.getRegister('blockMode') === BlockMode.STORE) { + ctx.getRegister('blocks')[this.block] = blockRender + } else { + yield blockRender(new BlockDrop(), emitter) + } + }, + + getBlockRender (this: TagImpl, ctx: Context) { + const { liquid, tpls } = this + const renderChild = ctx.getRegister('blocks')[this.block] + const renderCurrent = function * (superBlock: BlockDrop, emitter: Emitter) { + // add {{ block.super }} support when rendering + ctx.push({ block: superBlock }) + yield liquid.renderer.renderTemplates(tpls, ctx, emitter) + ctx.pop() + } + return renderChild + ? (superBlock: BlockDrop, emitter: Emitter) => renderChild(new BlockDrop(() => renderCurrent(superBlock, emitter)), emitter) + : renderCurrent + } +} diff --git a/packages/osrl/src/liquidjs/builtin/tags/break.ts b/packages/osrl/src/liquidjs/builtin/tags/break.ts new file mode 100644 index 00000000..bfa8450c --- /dev/null +++ b/packages/osrl/src/liquidjs/builtin/tags/break.ts @@ -0,0 +1,7 @@ +import { Emitter, Context } from '../../types' + +export default { + render: function (ctx: Context, emitter: Emitter) { + emitter['break'] = true + } +} diff --git a/packages/osrl/src/liquidjs/builtin/tags/capture.ts b/packages/osrl/src/liquidjs/builtin/tags/capture.ts new file mode 100644 index 00000000..5e178702 --- /dev/null +++ b/packages/osrl/src/liquidjs/builtin/tags/capture.ts @@ -0,0 +1,32 @@ +import { Tokenizer, assert, Template, Context, TagImplOptions, TagToken, TopLevelToken } from '../../types' +import { evalQuotedToken } from '../../render/expression' + +export default { + parse: function (tagToken: TagToken, remainTokens: TopLevelToken[]) { + const tokenizer = new Tokenizer(tagToken.args, this.liquid.options.operatorsTrie) + this.variable = readVariableName(tokenizer) + assert(this.variable, () => `${tagToken.args} not valid identifier`) + + this.templates = [] + + const stream = this.liquid.parser.parseStream(remainTokens) + stream.on('tag:endcapture', () => stream.stop()) + .on('template', (tpl: Template) => this.templates.push(tpl)) + .on('end', () => { + throw new Error(`tag ${tagToken.getText()} not closed`) + }) + stream.start() + }, + render: function * (ctx: Context): Generator { + const r = this.liquid.renderer + const html = yield r.renderTemplates(this.templates, ctx) + ctx.bottom()[this.variable] = html + } +} as TagImplOptions + +function readVariableName (tokenizer: Tokenizer) { + const word = tokenizer.readIdentifier().content + if (word) return word + const quoted = tokenizer.readQuoted() + if (quoted) return evalQuotedToken(quoted) +} diff --git a/packages/osrl/src/liquidjs/builtin/tags/case.ts b/packages/osrl/src/liquidjs/builtin/tags/case.ts new file mode 100644 index 00000000..e8f4a20a --- /dev/null +++ b/packages/osrl/src/liquidjs/builtin/tags/case.ts @@ -0,0 +1,48 @@ +import { toValue, evalToken, Value, Emitter, TagToken, TopLevelToken, Context, Template, TagImplOptions, ParseStream } from '../../types' +import { Tokenizer } from '../../parser/tokenizer' + +export default { + parse: function (tagToken: TagToken, remainTokens: TopLevelToken[]) { + this.cond = new Value(tagToken.args, this.liquid) + this.cases = [] + this.elseTemplates = [] + + let p: Template[] = [] + const stream: ParseStream = this.liquid.parser.parseStream(remainTokens) + .on('tag:when', (token: TagToken) => { + p = [] + + const tokenizer = new Tokenizer(token.args, this.liquid.options.operatorsTrie) + + while (!tokenizer.end()) { + const value = tokenizer.readValue() + this.cases.push({ + val: value, + templates: p + }) + tokenizer.readTo(',') + } + }) + .on('tag:else', () => (p = this.elseTemplates)) + .on('tag:endcase', () => stream.stop()) + .on('template', (tpl: Template) => p.push(tpl)) + .on('end', () => { + throw new Error(`tag ${tagToken.getText()} not closed`) + }) + + stream.start() + }, + + render: function * (ctx: Context, emitter: Emitter) { + const r = this.liquid.renderer + const cond = toValue(yield this.cond.value(ctx, ctx.opts.lenientIf)) + for (const branch of this.cases) { + const val = evalToken(branch.val, ctx, ctx.opts.lenientIf) + if (val === cond) { + yield r.renderTemplates(branch.templates, ctx, emitter) + return + } + } + yield r.renderTemplates(this.elseTemplates, ctx, emitter) + } +} as TagImplOptions diff --git a/packages/osrl/src/liquidjs/builtin/tags/comment.ts b/packages/osrl/src/liquidjs/builtin/tags/comment.ts new file mode 100644 index 00000000..dacb19fa --- /dev/null +++ b/packages/osrl/src/liquidjs/builtin/tags/comment.ts @@ -0,0 +1,17 @@ +import { TagToken } from '../../tokens/tag-token' +import { TopLevelToken } from '../../tokens/toplevel-token' +import { TagImplOptions } from '../../template/tag/tag-impl-options' + +export default { + parse: function (tagToken: TagToken, remainTokens: TopLevelToken[]) { + const stream = this.liquid.parser.parseStream(remainTokens) + stream + .on('token', (token: TagToken) => { + if (token.name === 'endcomment') stream.stop() + }) + .on('end', () => { + throw new Error(`tag ${tagToken.getText()} not closed`) + }) + stream.start() + } +} as TagImplOptions diff --git a/packages/osrl/src/liquidjs/builtin/tags/continue.ts b/packages/osrl/src/liquidjs/builtin/tags/continue.ts new file mode 100644 index 00000000..1f5b28cd --- /dev/null +++ b/packages/osrl/src/liquidjs/builtin/tags/continue.ts @@ -0,0 +1,7 @@ +import { Emitter, Context } from '../../types' + +export default { + render: function (ctx: Context, emitter: Emitter) { + emitter['continue'] = true + } +} diff --git a/packages/osrl/src/liquidjs/builtin/tags/cycle.ts b/packages/osrl/src/liquidjs/builtin/tags/cycle.ts new file mode 100644 index 00000000..86153f6b --- /dev/null +++ b/packages/osrl/src/liquidjs/builtin/tags/cycle.ts @@ -0,0 +1,44 @@ +import { assert } from '../../util/assert' +import { evalToken, Emitter, TagToken, Context, TagImplOptions } from '../../types' +import { Tokenizer } from '../../parser/tokenizer' + +export default { + parse: function (tagToken: TagToken) { + const tokenizer = new Tokenizer(tagToken.args, this.liquid.options.operatorsTrie) + const group = tokenizer.readValue() + tokenizer.skipBlank() + + this.candidates = [] + + if (group) { + if (tokenizer.peek() === ':') { + this.group = group + tokenizer.advance() + } else this.candidates.push(group) + } + + while (!tokenizer.end()) { + const value = tokenizer.readValue() + if (value) this.candidates.push(value) + tokenizer.readTo(',') + } + assert(this.candidates.length, () => `empty candidates: ${tagToken.getText()}`) + }, + + render: function (ctx: Context, emitter: Emitter) { + const group = evalToken(this.group, ctx) + const fingerprint = `cycle:${group}:` + this.candidates.join(',') + const groups = ctx.getRegister('cycle') + let idx = groups[fingerprint] + + if (idx === undefined) { + idx = groups[fingerprint] = 0 + } + + const candidate = this.candidates[idx] + idx = (idx + 1) % this.candidates.length + groups[fingerprint] = idx + const html = evalToken(candidate, ctx) + emitter.write(html) + } +} as TagImplOptions diff --git a/packages/osrl/src/liquidjs/builtin/tags/decrement.ts b/packages/osrl/src/liquidjs/builtin/tags/decrement.ts new file mode 100644 index 00000000..6c05506e --- /dev/null +++ b/packages/osrl/src/liquidjs/builtin/tags/decrement.ts @@ -0,0 +1,16 @@ +import { Tokenizer, Emitter, TagToken, Context, TagImplOptions } from '../../types' +import { isNumber, stringify } from '../../util/underscore' + +export default { + parse: function (token: TagToken) { + const tokenizer = new Tokenizer(token.args, this.liquid.options.operatorsTrie) + this.variable = tokenizer.readIdentifier().content + }, + render: function (context: Context, emitter: Emitter) { + const scope = context.environments + if (!isNumber(scope[this.variable])) { + scope[this.variable] = 0 + } + emitter.write(stringify(--scope[this.variable])) + } +} as TagImplOptions diff --git a/packages/osrl/src/liquidjs/builtin/tags/echo.ts b/packages/osrl/src/liquidjs/builtin/tags/echo.ts new file mode 100644 index 00000000..fee2b81a --- /dev/null +++ b/packages/osrl/src/liquidjs/builtin/tags/echo.ts @@ -0,0 +1,13 @@ +import { Value } from '../../template/value' +import { Emitter } from '../../emitters/emitter' +import { TagImplOptions, TagToken, Context } from '../../types' + +export default { + parse: function (token: TagToken) { + this.value = new Value(token.args, this.liquid) + }, + render: function * (ctx: Context, emitter: Emitter): Generator { + const val = yield this.value.value(ctx, false) + emitter.write(val) + } +} as TagImplOptions diff --git a/packages/osrl/src/liquidjs/builtin/tags/for.ts b/packages/osrl/src/liquidjs/builtin/tags/for.ts new file mode 100644 index 00000000..40c3181c --- /dev/null +++ b/packages/osrl/src/liquidjs/builtin/tags/for.ts @@ -0,0 +1,92 @@ +import { assert, Tokenizer, evalToken, Emitter, TagToken, TopLevelToken, Context, Template, TagImplOptions, ParseStream } from '../../types' +import { toEnumerable } from '../../util/collection' +import { ForloopDrop } from '../../drop/forloop-drop' +import { Hash, HashValue } from '../../template/tag/hash' + +const MODIFIERS = ['offset', 'limit', 'reversed'] + +type valueof = T[keyof T] + +export default { + type: 'block', + parse: function (token: TagToken, remainTokens: TopLevelToken[]) { + const tokenizer = new Tokenizer(token.args, this.liquid.options.operatorsTrie) + + const variable = tokenizer.readIdentifier() + const inStr = tokenizer.readIdentifier() + const collection = tokenizer.readValue() + assert( + variable.size() && inStr.content === 'in' && collection, + () => `illegal tag: ${token.getText()}` + ) + + this.variable = variable.content + this.collection = collection + this.hash = new Hash(tokenizer.remaining()) + this.templates = [] + this.elseTemplates = [] + + let p + const stream: ParseStream = this.liquid.parser.parseStream(remainTokens) + .on('start', () => (p = this.templates)) + .on('tag:else', () => (p = this.elseTemplates)) + .on('tag:endfor', () => stream.stop()) + .on('template', (tpl: Template) => p.push(tpl)) + .on('end', () => { + throw new Error(`tag ${token.getText()} not closed`) + }) + + stream.start() + }, + render: function * (ctx: Context, emitter: Emitter): Generator { + const r = this.liquid.renderer + let collection = toEnumerable(yield evalToken(this.collection, ctx)) + + if (!collection.length) { + yield r.renderTemplates(this.elseTemplates, ctx, emitter) + return + } + + const continueKey = 'continue-' + this.variable + '-' + this.collection.getText() + ctx.push({ continue: ctx.getRegister(continueKey) }) + const hash = yield this.hash.render(ctx) + ctx.pop() + + const modifiers = this.liquid.options.orderedFilterParameters + ? Object.keys(hash).filter(x => MODIFIERS.includes(x)) + : MODIFIERS.filter(x => hash[x] !== undefined) + + collection = modifiers.reduce((collection, modifier: valueof) => { + if (modifier === 'offset') return offset(collection, hash['offset']) + if (modifier === 'limit') return limit(collection, hash['limit']) + return reversed(collection) + }, collection) + + ctx.setRegister(continueKey, (hash['offset'] || 0) + collection.length) + const scope = { forloop: new ForloopDrop(collection.length, this.collection.getText(), this.variable) } + ctx.push(scope) + for (const item of collection) { + scope[this.variable] = item + yield r.renderTemplates(this.templates, ctx, emitter) + if (emitter['break']) { + emitter['break'] = false + break + } + emitter['continue'] = false + scope.forloop.next() + } + ctx.pop() + } +} as TagImplOptions + +function reversed (arr: Array) { + return [...arr].reverse() +} + +function offset (arr: Array, count: number) { + return arr.slice(count) +} + +function limit (arr: Array, count: number) { + return arr.slice(0, count) +} diff --git a/packages/osrl/src/liquidjs/builtin/tags/if.ts b/packages/osrl/src/liquidjs/builtin/tags/if.ts new file mode 100644 index 00000000..7ba72ddd --- /dev/null +++ b/packages/osrl/src/liquidjs/builtin/tags/if.ts @@ -0,0 +1,37 @@ +import { Value, Emitter, isTruthy, TagToken, TopLevelToken, Context, Template, TagImplOptions } from '../../types' + +export default { + parse: function (tagToken: TagToken, remainTokens: TopLevelToken[]) { + this.branches = [] + this.elseTemplates = [] + + let p + this.liquid.parser.parseStream(remainTokens) + .on('start', () => this.branches.push({ + predicate: new Value(tagToken.args, this.liquid), + templates: (p = []) + })) + .on('tag:elsif', (token: TagToken) => this.branches.push({ + predicate: new Value(token.args, this.liquid), + templates: (p = []) + })) + .on('tag:else', () => (p = this.elseTemplates)) + .on('tag:endif', function () { this.stop() }) + .on('template', (tpl: Template) => p.push(tpl)) + .on('end', () => { throw new Error(`tag ${tagToken.getText()} not closed`) }) + .start() + }, + + render: function * (ctx: Context, emitter: Emitter): Generator { + const r = this.liquid.renderer + + for (const { predicate, templates } of this.branches) { + const value = yield predicate.value(ctx, ctx.opts.lenientIf) + if (isTruthy(value, ctx)) { + yield r.renderTemplates(templates, ctx, emitter) + return + } + } + yield r.renderTemplates(this.elseTemplates, ctx, emitter) + } +} as TagImplOptions diff --git a/packages/osrl/src/liquidjs/builtin/tags/include.ts b/packages/osrl/src/liquidjs/builtin/tags/include.ts new file mode 100644 index 00000000..a8d02698 --- /dev/null +++ b/packages/osrl/src/liquidjs/builtin/tags/include.ts @@ -0,0 +1,42 @@ +import { assert, Tokenizer, evalToken, Hash, Emitter, TagToken, Context, TagImplOptions } from '../../types' +import BlockMode from '../../context/block-mode' +import { parseFilePath, renderFilePath } from './render' + +export default { + parseFilePath, + renderFilePath, + parse: function (token: TagToken) { + const args = token.args + const tokenizer = new Tokenizer(args, this.liquid.options.operatorsTrie) + this['file'] = this.parseFilePath(tokenizer, this.liquid) + this['currentFile'] = token.file + + const begin = tokenizer.p + const withStr = tokenizer.readIdentifier() + if (withStr.content === 'with') { + tokenizer.skipBlank() + if (tokenizer.peek() !== ':') { + this.withVar = tokenizer.readValue() + } else tokenizer.p = begin + } else tokenizer.p = begin + + this.hash = new Hash(tokenizer.remaining(), this.liquid.options.jekyllInclude) + }, + render: function * (ctx: Context, emitter: Emitter) { + const { liquid, hash, withVar } = this + const { renderer } = liquid + const filepath = yield this.renderFilePath(this['file'], ctx, liquid) + assert(filepath, () => `illegal filename "${filepath}"`) + + const saved = ctx.saveRegister('blocks', 'blockMode') + ctx.setRegister('blocks', {}) + ctx.setRegister('blockMode', BlockMode.OUTPUT) + const scope = yield hash.render(ctx) + if (withVar) scope[filepath] = evalToken(withVar, ctx) + const templates = yield liquid._parsePartialFile(filepath, ctx.sync, this['currentFile']) + ctx.push(ctx.opts.jekyllInclude ? { include: scope } : scope) + yield renderer.renderTemplates(templates, ctx, emitter) + ctx.pop() + ctx.restoreRegister(saved) + } +} as TagImplOptions diff --git a/packages/osrl/src/liquidjs/builtin/tags/increment.ts b/packages/osrl/src/liquidjs/builtin/tags/increment.ts new file mode 100644 index 00000000..1fdc6160 --- /dev/null +++ b/packages/osrl/src/liquidjs/builtin/tags/increment.ts @@ -0,0 +1,18 @@ +import { isNumber, stringify } from '../../util/underscore' +import { Tokenizer, Emitter, TagToken, Context, TagImplOptions } from '../../types' + +export default { + parse: function (token: TagToken) { + const tokenizer = new Tokenizer(token.args, this.liquid.options.operatorsTrie) + this.variable = tokenizer.readIdentifier().content + }, + render: function (context: Context, emitter: Emitter) { + const scope = context.environments + if (!isNumber(scope[this.variable])) { + scope[this.variable] = 0 + } + const val = scope[this.variable] + scope[this.variable]++ + emitter.write(stringify(val)) + } +} as TagImplOptions diff --git a/packages/osrl/src/liquidjs/builtin/tags/index.ts b/packages/osrl/src/liquidjs/builtin/tags/index.ts new file mode 100644 index 00000000..82ec5b4a --- /dev/null +++ b/packages/osrl/src/liquidjs/builtin/tags/index.ts @@ -0,0 +1,28 @@ +import assign from './assign' +import For from './for' +import capture from './capture' +import Case from './case' +import comment from './comment' +import include from './include' +import render from './render' +import decrement from './decrement' +import cycle from './cycle' +import If from './if' +import increment from './increment' +import layout from './layout' +import block from './block' +import raw from './raw' +import tablerow from './tablerow' +import unless from './unless' +import Break from './break' +import Continue from './continue' +import echo from './echo' +import liquid from './liquid' +import inlineComment from './inline-comment' +import { TagImplOptions } from '../../template/tag/tag-impl-options' + +const tags: { [key: string]: TagImplOptions } = { + assign, 'for': For, capture, 'case': Case, comment, include, render, decrement, increment, cycle, 'if': If, layout, block, raw, tablerow, unless, 'break': Break, 'continue': Continue, echo, liquid, '#': inlineComment +} + +export default tags diff --git a/packages/osrl/src/liquidjs/builtin/tags/inline-comment.ts b/packages/osrl/src/liquidjs/builtin/tags/inline-comment.ts new file mode 100644 index 00000000..755d4ca3 --- /dev/null +++ b/packages/osrl/src/liquidjs/builtin/tags/inline-comment.ts @@ -0,0 +1,11 @@ +import { TagToken } from '../../tokens/tag-token' +import { TopLevelToken } from '../../tokens/toplevel-token' +import { TagImplOptions } from '../../template/tag/tag-impl-options' + +export default { + parse: function (tagToken: TagToken, remainTokens: TopLevelToken[]) { + if (tagToken.args.search(/\n\s*[^#\s]/g) !== -1) { + throw new Error('every line of an inline comment must start with a \'#\' character') + } + } +} as TagImplOptions diff --git a/packages/osrl/src/liquidjs/builtin/tags/layout.ts b/packages/osrl/src/liquidjs/builtin/tags/layout.ts new file mode 100644 index 00000000..87c0a202 --- /dev/null +++ b/packages/osrl/src/liquidjs/builtin/tags/layout.ts @@ -0,0 +1,42 @@ +import { assert, Tokenizer, Emitter, Hash, TagToken, TopLevelToken, Context, TagImplOptions } from '../../types' +import BlockMode from '../../context/block-mode' +import { parseFilePath, renderFilePath } from './render' +import { BlankDrop } from '../../drop/blank-drop' + +export default { + parseFilePath, + renderFilePath, + parse: function (token: TagToken, remainTokens: TopLevelToken[]) { + const tokenizer = new Tokenizer(token.args, this.liquid.options.operatorsTrie) + this['file'] = this.parseFilePath(tokenizer, this.liquid) + this['currentFile'] = token.file + this.hash = new Hash(tokenizer.remaining()) + this.tpls = this.liquid.parser.parseTokens(remainTokens) + }, + render: function * (ctx: Context, emitter: Emitter) { + const { liquid, hash, file } = this + const { renderer } = liquid + if (file === null) { + ctx.setRegister('blockMode', BlockMode.OUTPUT) + yield renderer.renderTemplates(this.tpls, ctx, emitter) + return + } + const filepath = yield this.renderFilePath(this['file'], ctx, liquid) + assert(filepath, () => `illegal filename "${filepath}"`) + const templates = yield liquid._parseLayoutFile(filepath, ctx.sync, this['currentFile']) + + // render remaining contents and store rendered results + ctx.setRegister('blockMode', BlockMode.STORE) + const html = yield renderer.renderTemplates(this.tpls, ctx) + const blocks = ctx.getRegister('blocks') + + // set whole content to anonymous block if anonymous doesn't specified + if (blocks[''] === undefined) blocks[''] = (parent: BlankDrop, emitter: Emitter) => emitter.write(html) + ctx.setRegister('blockMode', BlockMode.OUTPUT) + + // render the layout file use stored blocks + ctx.push(yield hash.render(ctx)) + yield renderer.renderTemplates(templates, ctx, emitter) + ctx.pop() + } +} as TagImplOptions diff --git a/packages/osrl/src/liquidjs/builtin/tags/liquid.ts b/packages/osrl/src/liquidjs/builtin/tags/liquid.ts new file mode 100644 index 00000000..55294254 --- /dev/null +++ b/packages/osrl/src/liquidjs/builtin/tags/liquid.ts @@ -0,0 +1,14 @@ +import { Emitter } from '../../emitters/emitter' +import { TagImplOptions, TagToken, Context } from '../../types' +import { Tokenizer } from '../../parser/tokenizer' + +export default { + parse: function (token: TagToken) { + const tokenizer = new Tokenizer(token.args, this.liquid.options.operatorsTrie) + const tokens = tokenizer.readLiquidTagTokens(this.liquid.options) + this.tpls = this.liquid.parser.parseTokens(tokens) + }, + render: function * (ctx: Context, emitter: Emitter): Generator { + yield this.liquid.renderer.renderTemplates(this.tpls, ctx, emitter) + } +} as TagImplOptions diff --git a/packages/osrl/src/liquidjs/builtin/tags/raw.ts b/packages/osrl/src/liquidjs/builtin/tags/raw.ts new file mode 100644 index 00000000..1aa5d1bf --- /dev/null +++ b/packages/osrl/src/liquidjs/builtin/tags/raw.ts @@ -0,0 +1,21 @@ +import { TagToken, TopLevelToken, TagImplOptions } from '../../types' + +export default { + parse: function (tagToken: TagToken, remainTokens: TopLevelToken[]) { + this.tokens = [] + + const stream = this.liquid.parser.parseStream(remainTokens) + stream + .on('token', (token: TagToken) => { + if (token.name === 'endraw') stream.stop() + else this.tokens.push(token) + }) + .on('end', () => { + throw new Error(`tag ${tagToken.getText()} not closed`) + }) + stream.start() + }, + render: function () { + return this.tokens.map((token: TopLevelToken) => token.getText()).join('') + } +} as TagImplOptions diff --git a/packages/osrl/src/liquidjs/builtin/tags/render.ts b/packages/osrl/src/liquidjs/builtin/tags/render.ts new file mode 100644 index 00000000..b05e0316 --- /dev/null +++ b/packages/osrl/src/liquidjs/builtin/tags/render.ts @@ -0,0 +1,115 @@ +import { __assign } from 'tslib' +import { assert } from '../../util/assert' +import { ForloopDrop } from '../../drop/forloop-drop' +import { toEnumerable } from '../../util/collection' +import { Liquid } from '../../liquid' +import { Token, Template, evalQuotedToken, TypeGuards, Tokenizer, evalToken, Hash, Emitter, TagToken, Context, TagImplOptions } from '../../types' + +export default { + parseFilePath, + renderFilePath, + parse: function (token: TagToken) { + const args = token.args + const tokenizer = new Tokenizer(args, this.liquid.options.operatorsTrie) + this['file'] = this.parseFilePath(tokenizer, this.liquid) + this['currentFile'] = token.file + while (!tokenizer.end()) { + tokenizer.skipBlank() + const begin = tokenizer.p + const keyword = tokenizer.readIdentifier() + if (keyword.content === 'with' || keyword.content === 'for') { + tokenizer.skipBlank() + // can be normal key/value pair, like "with: true" + if (tokenizer.peek() !== ':') { + const value = tokenizer.readValue() + // can be normal key, like "with," + if (value) { + const beforeAs = tokenizer.p + const asStr = tokenizer.readIdentifier() + let alias + if (asStr.content === 'as') alias = tokenizer.readIdentifier() + else tokenizer.p = beforeAs + + this[keyword.content] = { value, alias: alias && alias.content } + tokenizer.skipBlank() + if (tokenizer.peek() === ',') tokenizer.advance() + // matched! + continue + } + } + } + /** + * restore cursor if with/for not matched + */ + tokenizer.p = begin + break + } + this.hash = new Hash(tokenizer.remaining()) + }, + render: function * (ctx: Context, emitter: Emitter) { + const { liquid, hash } = this + const filepath = yield this.renderFilePath(this['file'], ctx, liquid) + assert(filepath, () => `illegal filename "${filepath}"`) + + const childCtx = new Context({}, ctx.opts, { sync: ctx.sync, globals: ctx.globals, strictVariables: ctx.strictVariables }) + const scope = childCtx.bottom() + __assign(scope, yield hash.render(ctx)) + if (this['with']) { + const { value, alias } = this['with'] + scope[alias || filepath] = evalToken(value, ctx) + } + + if (this['for']) { + const { value, alias } = this['for'] + let collection = evalToken(value, ctx) + collection = toEnumerable(collection) + scope['forloop'] = new ForloopDrop(collection.length, value.getText(), alias) + for (const item of collection) { + scope[alias] = item + const templates = yield liquid._parsePartialFile(filepath, childCtx.sync, this['currentFile']) + yield liquid.renderer.renderTemplates(templates, childCtx, emitter) + scope['forloop'].next() + } + } else { + const templates = yield liquid._parsePartialFile(filepath, childCtx.sync, this['currentFile']) + yield liquid.renderer.renderTemplates(templates, childCtx, emitter) + } + } +} as TagImplOptions + +type ParsedFileName = Template[] | Token | string | undefined + +/** + * @return null for "none", + * @return Template[] for quoted with tags and/or filters + * @return Token for expression (not quoted) + * @throws TypeError if cannot read next token + */ +export function parseFilePath (tokenizer: Tokenizer, liquid: Liquid): ParsedFileName | null { + if (liquid.options.dynamicPartials) { + const file = tokenizer.readValue() + if (file === undefined) throw new TypeError(`illegal argument "${tokenizer.input}"`) + if (file.getText() === 'none') return null + if (TypeGuards.isQuotedToken(file)) { + // for filenames like "files/{{file}}", eval as liquid template + const templates = liquid.parse(evalQuotedToken(file)) + return optimize(templates) + } + return file + } + const tokens = [...tokenizer.readFileNameTemplate(liquid.options)] + const templates = optimize(liquid.parser.parseTokens(tokens)) + return templates === 'none' ? null : templates +} + +function optimize (templates: Template[]): string | Template[] { + // for filenames like "files/file.liquid", extract the string directly + if (templates.length === 1 && TypeGuards.isHTMLToken(templates[0].token)) return templates[0].token.getContent() + return templates +} + +export function renderFilePath (file: ParsedFileName, ctx: Context, liquid: Liquid) { + if (typeof file === 'string') return file + if (Array.isArray(file)) return liquid.renderer.renderTemplates(file, ctx) + return evalToken(file, ctx) +} diff --git a/packages/osrl/src/liquidjs/builtin/tags/tablerow.ts b/packages/osrl/src/liquidjs/builtin/tags/tablerow.ts new file mode 100644 index 00000000..20047ee7 --- /dev/null +++ b/packages/osrl/src/liquidjs/builtin/tags/tablerow.ts @@ -0,0 +1,60 @@ +import { toEnumerable } from '../../util/collection' +import { assert, evalToken, Emitter, Hash, TagToken, TopLevelToken, Context, Template, TagImplOptions, ParseStream } from '../../types' +import { TablerowloopDrop } from '../../drop/tablerowloop-drop' +import { Tokenizer } from '../../parser/tokenizer' + +export default { + parse: function (tagToken: TagToken, remainTokens: TopLevelToken[]) { + const tokenizer = new Tokenizer(tagToken.args, this.liquid.options.operatorsTrie) + + const variable = tokenizer.readIdentifier() + tokenizer.skipBlank() + + const tmp = tokenizer.readIdentifier() + assert(tmp && tmp.content === 'in', () => `illegal tag: ${tagToken.getText()}`) + + this.variable = variable.content + this.collection = tokenizer.readValue() + this.hash = new Hash(tokenizer.remaining()) + this.templates = [] + + let p + const stream: ParseStream = this.liquid.parser.parseStream(remainTokens) + .on('start', () => (p = this.templates)) + .on('tag:endtablerow', () => stream.stop()) + .on('template', (tpl: Template) => p.push(tpl)) + .on('end', () => { + throw new Error(`tag ${tagToken.getText()} not closed`) + }) + + stream.start() + }, + + render: function * (ctx: Context, emitter: Emitter) { + let collection = toEnumerable(yield evalToken(this.collection, ctx)) + const hash = yield this.hash.render(ctx) + const offset = hash.offset || 0 + const limit = (hash.limit === undefined) ? collection.length : hash.limit + + collection = collection.slice(offset, offset + limit) + const cols = hash.cols || collection.length + + const r = this.liquid.renderer + const tablerowloop = new TablerowloopDrop(collection.length, cols, this.collection.getText(), this.variable) + const scope = { tablerowloop } + ctx.push(scope) + + for (let idx = 0; idx < collection.length; idx++, tablerowloop.next()) { + scope[this.variable] = collection[idx] + if (tablerowloop.col0() === 0) { + if (tablerowloop.row() !== 1) emitter.write('') + emitter.write(``) + } + emitter.write(``) + yield r.renderTemplates(this.templates, ctx, emitter) + emitter.write('') + } + if (collection.length) emitter.write('') + ctx.pop() + } +} as TagImplOptions diff --git a/packages/osrl/src/liquidjs/builtin/tags/unless.ts b/packages/osrl/src/liquidjs/builtin/tags/unless.ts new file mode 100644 index 00000000..54ed7d63 --- /dev/null +++ b/packages/osrl/src/liquidjs/builtin/tags/unless.ts @@ -0,0 +1,39 @@ +import { Value, TopLevelToken, Template, Emitter, isTruthy, isFalsy, Context, TagImplOptions, TagToken } from '../../types' + +export default { + parse: function (tagToken: TagToken, remainTokens: TopLevelToken[]) { + this.branches = [] + this.elseTemplates = [] + let p + this.liquid.parser.parseStream(remainTokens) + .on('start', () => this.branches.push({ + predicate: new Value(tagToken.args, this.liquid), + test: isFalsy, + templates: (p = []) + })) + .on('tag:elsif', (token: TagToken) => this.branches.push({ + predicate: new Value(token.args, this.liquid), + test: isTruthy, + templates: (p = []) + })) + .on('tag:else', () => (p = this.elseTemplates)) + .on('tag:endunless', function () { this.stop() }) + .on('template', (tpl: Template) => p.push(tpl)) + .on('end', () => { throw new Error(`tag ${tagToken.getText()} not closed`) }) + .start() + }, + + render: function * (ctx: Context, emitter: Emitter) { + const r = this.liquid.renderer + + for (const { predicate, test, templates } of this.branches) { + const value = yield predicate.value(ctx, ctx.opts.lenientIf) + if (test(value, ctx)) { + yield r.renderTemplates(templates, ctx, emitter) + return + } + } + + yield r.renderTemplates(this.elseTemplates, ctx, emitter) + } +} as TagImplOptions diff --git a/packages/osrl/src/liquidjs/cache/cache.ts b/packages/osrl/src/liquidjs/cache/cache.ts new file mode 100644 index 00000000..084cf381 --- /dev/null +++ b/packages/osrl/src/liquidjs/cache/cache.ts @@ -0,0 +1,9 @@ +import type { Template } from '../template/template' + +export interface Cache { + write (key: string, value: T): void | Promise; + read (key: string): T | undefined | Promise; + remove (key: string): void | Promise; +} + +export type LiquidCache = Cache> diff --git a/packages/osrl/src/liquidjs/cache/lru.ts b/packages/osrl/src/liquidjs/cache/lru.ts new file mode 100644 index 00000000..ec14d3aa --- /dev/null +++ b/packages/osrl/src/liquidjs/cache/lru.ts @@ -0,0 +1,67 @@ +import { Cache } from './cache' + +class Node { + constructor ( + public key: string, + public value: T, + public next: Node, + public prev: Node + ) {} +} + +export class LRU implements Cache { + private cache: { [key: string]: Node } = {} + private head: Node + private tail: Node + + constructor ( + public limit: number, + public size = 0 + ) { + this.head = new Node('HEAD', null as any, null as any, null as any) + this.tail = new Node('TAIL', null as any, null as any, null as any) + this.head.next = this.tail + this.tail.prev = this.head + } + + write (key: string, value: T) { + if (this.cache[key]) { + this.cache[key].value = value + } else { + const node = new Node(key, value, this.head.next, this.head) + this.head.next.prev = node + this.head.next = node + + this.cache[key] = node + this.size++ + this.ensureLimit() + } + } + + read (key: string): T | undefined { + if (!this.cache[key]) return + const { value } = this.cache[key] + this.remove(key) + this.write(key, value) + return value + } + + remove (key: string) { + const node = this.cache[key] + node.prev.next = node.next + node.next.prev = node.prev + delete this.cache[key] + this.size-- + } + + clear () { + this.head.next = this.tail + this.tail.prev = this.head + this.size = 0 + this.cache = {} + } + + private ensureLimit () { + if (this.size > this.limit) this.remove(this.tail.prev.key) + } +} diff --git a/packages/osrl/src/liquidjs/context/block-mode.ts b/packages/osrl/src/liquidjs/context/block-mode.ts new file mode 100644 index 00000000..78fd3214 --- /dev/null +++ b/packages/osrl/src/liquidjs/context/block-mode.ts @@ -0,0 +1,8 @@ +enum BlockMode { + /* store rendered html into blocks */ + OUTPUT, + /* output rendered html directly */ + STORE +} + +export default BlockMode diff --git a/packages/osrl/src/liquidjs/context/context.ts b/packages/osrl/src/liquidjs/context/context.ts new file mode 100644 index 00000000..ab09843f --- /dev/null +++ b/packages/osrl/src/liquidjs/context/context.ts @@ -0,0 +1,123 @@ +import { Drop } from '../drop/drop' +import { __assign } from 'tslib' +import { NormalizedFullOptions, defaultOptions, RenderOptions } from '../liquid-options' +import { Scope } from './scope' +import { isArray, isNil, isString, isFunction, toLiquid } from '../util/underscore' +import { InternalUndefinedVariableError } from '../util/error' + +type PropertyKey = string | number; + +export class Context { + /** + * insert a Context-level empty scope, + * for tags like `{% capture %}` `{% assign %}` to operate + */ + private scopes: Scope[] = [{}] + private registers = {} + /** + * user passed in scope + * `{% increment %}`, `{% decrement %}` changes this scope, + * whereas `{% capture %}`, `{% assign %}` only hide this scope + */ + public environments: Scope + /** + * global scope used as fallback for missing variables + */ + public globals: Scope + public sync: boolean + /** + * The normalized liquid options object + */ + public opts: NormalizedFullOptions + /** + * Throw when accessing undefined variable? + */ + public strictVariables: boolean; + public constructor (env: object = {}, opts: NormalizedFullOptions = defaultOptions, renderOptions: RenderOptions = {}) { + this.sync = !!renderOptions.sync + this.opts = opts + this.globals = renderOptions.globals ?? opts.globals + this.environments = env + this.strictVariables = renderOptions.strictVariables ?? this.opts.strictVariables + } + public getRegister (key: string) { + return (this.registers[key] = this.registers[key] || {}) + } + public setRegister (key: string, value: any) { + return (this.registers[key] = value) + } + public saveRegister (...keys: string[]): [string, any][] { + return keys.map(key => [key, this.getRegister(key)]) + } + public restoreRegister (keyValues: [string, any][]) { + return keyValues.forEach(([key, value]) => this.setRegister(key, value)) + } + public getAll () { + return [this.globals, this.environments, ...this.scopes] + .reduce((ctx, val) => __assign(ctx, val), {}) + } + public get (paths: PropertyKey[]) { + const scope = this.findScope(paths[0]) + return this.getFromScope(scope, paths) + } + public getFromScope (scope: object, paths: PropertyKey[] | string) { + if (isString(paths)) paths = paths.split('.') + return paths.reduce((scope, path, i) => { + scope = readProperty(scope, path, this.opts.ownPropertyOnly) + if (isNil(scope) && this.strictVariables) { + throw new InternalUndefinedVariableError((paths as string[]).slice(0, i + 1).join!('.')) + } + return scope + }, scope) + } + public push (ctx: object) { + return this.scopes.push(ctx) + } + public pop () { + return this.scopes.pop() + } + public bottom () { + return this.scopes[0] + } + private findScope (key: string | number) { + for (let i = this.scopes.length - 1; i >= 0; i--) { + const candidate = this.scopes[i] + if (key in candidate) return candidate + } + if (key in this.environments) return this.environments + return this.globals + } +} + +export function readProperty (obj: Scope, key: PropertyKey, ownPropertyOnly: boolean) { + if (isNil(obj)) return obj + obj = toLiquid(obj) + if (isArray(obj) && key < 0) return obj[obj.length + +key] + const jsProperty = readJSProperty(obj, key, ownPropertyOnly) + if (jsProperty === undefined && obj instanceof Drop) return obj.liquidMethodMissing(key) + if (isFunction(jsProperty)) return jsProperty.call(obj) + if (key === 'size') return readSize(obj) + else if (key === 'first') return readFirst(obj) + else if (key === 'last') return readLast(obj) + return jsProperty +} +export function readJSProperty (obj: Scope, key: PropertyKey, ownPropertyOnly: boolean) { + if (ownPropertyOnly && !Object.hasOwnProperty.call(obj, key)) return undefined + return obj[key] +} + +function readFirst (obj: Scope) { + if (isArray(obj)) return obj[0] + return obj['first'] +} + +function readLast (obj: Scope) { + if (isArray(obj)) return obj[obj.length - 1] + return obj['last'] +} + +function readSize (obj: Scope) { + if (obj.hasOwnProperty('size') || obj['size'] !== undefined) return obj['size'] + if (isArray(obj) || isString(obj)) return obj.length + if (typeof obj === 'object') return Object.keys(obj).length +} diff --git a/packages/osrl/src/liquidjs/context/scope.ts b/packages/osrl/src/liquidjs/context/scope.ts new file mode 100644 index 00000000..748e316a --- /dev/null +++ b/packages/osrl/src/liquidjs/context/scope.ts @@ -0,0 +1,8 @@ +import { Drop } from '../drop/drop' + +export interface PlainObject { + [key: string]: any; + toLiquid?: () => any; +} + +export type Scope = PlainObject | Drop diff --git a/packages/osrl/src/liquidjs/drop/blank-drop.ts b/packages/osrl/src/liquidjs/drop/blank-drop.ts new file mode 100644 index 00000000..652dcf8b --- /dev/null +++ b/packages/osrl/src/liquidjs/drop/blank-drop.ts @@ -0,0 +1,11 @@ +import { isNil, isString, toValue } from '../util/underscore' +import { EmptyDrop } from '../drop/empty-drop' + +export class BlankDrop extends EmptyDrop { + public equals (value: any) { + if (value === false) return true + if (isNil(toValue(value))) return true + if (isString(value)) return /^\s*$/.test(value) + return super.equals(value) + } +} diff --git a/packages/osrl/src/liquidjs/drop/block-drop.ts b/packages/osrl/src/liquidjs/drop/block-drop.ts new file mode 100644 index 00000000..0e994aa9 --- /dev/null +++ b/packages/osrl/src/liquidjs/drop/block-drop.ts @@ -0,0 +1,17 @@ +import { Drop } from './drop' + +export class BlockDrop extends Drop { + constructor ( + // the block render from layout template + private superBlockRender: () => Iterable = () => '' + ) { + super() + } + /** + * Provide parent access in child block by + * {{ block.super }} + */ + public super () { + return this.superBlockRender() + } +} diff --git a/packages/osrl/src/liquidjs/drop/comparable.ts b/packages/osrl/src/liquidjs/drop/comparable.ts new file mode 100644 index 00000000..16aaef3a --- /dev/null +++ b/packages/osrl/src/liquidjs/drop/comparable.ts @@ -0,0 +1,13 @@ +import { isFunction } from '../util/underscore' + +export interface Comparable { + equals: (rhs: any) => boolean; + gt: (rhs: any) => boolean; + geq: (rhs: any) => boolean; + lt: (rhs: any) => boolean; + leq: (rhs: any) => boolean; +} + +export function isComparable (arg: any): arg is Comparable { + return arg && isFunction(arg.equals) +} diff --git a/packages/osrl/src/liquidjs/drop/drop.ts b/packages/osrl/src/liquidjs/drop/drop.ts new file mode 100644 index 00000000..f9ea6089 --- /dev/null +++ b/packages/osrl/src/liquidjs/drop/drop.ts @@ -0,0 +1,5 @@ +export abstract class Drop { + public liquidMethodMissing (key: string | number): Promise | string | undefined { + return undefined + } +} diff --git a/packages/osrl/src/liquidjs/drop/empty-drop.ts b/packages/osrl/src/liquidjs/drop/empty-drop.ts new file mode 100644 index 00000000..cf9664bd --- /dev/null +++ b/packages/osrl/src/liquidjs/drop/empty-drop.ts @@ -0,0 +1,28 @@ +import { Drop } from './drop' +import { Comparable } from './comparable' +import { isObject, isString, isArray, toValue } from '../util/underscore' + +export class EmptyDrop extends Drop implements Comparable { + public equals (value: any) { + if (value instanceof EmptyDrop) return false + value = toValue(value) + if (isString(value) || isArray(value)) return value.length === 0 + if (isObject(value)) return Object.keys(value).length === 0 + return false + } + public gt () { + return false + } + public geq () { + return false + } + public lt () { + return false + } + public leq () { + return false + } + public valueOf () { + return '' + } +} diff --git a/packages/osrl/src/liquidjs/drop/forloop-drop.ts b/packages/osrl/src/liquidjs/drop/forloop-drop.ts new file mode 100644 index 00000000..08b69d7c --- /dev/null +++ b/packages/osrl/src/liquidjs/drop/forloop-drop.ts @@ -0,0 +1,36 @@ +import { Drop } from './drop' + +export class ForloopDrop extends Drop { + protected i = 0 + public name: string + public length: number + public constructor (length: number, collection: string, variable: string) { + super() + this.length = length + this.name = `${variable}-${collection}` + } + public next () { + this.i++ + } + public index0 () { + return this.i + } + public index () { + return this.i + 1 + } + public first () { + return this.i === 0 + } + public last () { + return this.i === this.length - 1 + } + public rindex () { + return this.length - this.i + } + public rindex0 () { + return this.length - this.i - 1 + } + public valueOf () { + return JSON.stringify(this) + } +} diff --git a/packages/osrl/src/liquidjs/drop/null-drop.ts b/packages/osrl/src/liquidjs/drop/null-drop.ts new file mode 100644 index 00000000..ea7e322c --- /dev/null +++ b/packages/osrl/src/liquidjs/drop/null-drop.ts @@ -0,0 +1,24 @@ +import { Drop } from './drop' +import { Comparable } from './comparable' +import { isNil, toValue } from '../util/underscore' + +export class NullDrop extends Drop implements Comparable { + public equals (value: any) { + return isNil(toValue(value)) + } + public gt () { + return false + } + public geq () { + return false + } + public lt () { + return false + } + public leq () { + return false + } + public valueOf () { + return null + } +} diff --git a/packages/osrl/src/liquidjs/drop/tablerowloop-drop.ts b/packages/osrl/src/liquidjs/drop/tablerowloop-drop.ts new file mode 100644 index 00000000..b7bb5b16 --- /dev/null +++ b/packages/osrl/src/liquidjs/drop/tablerowloop-drop.ts @@ -0,0 +1,25 @@ +import { ForloopDrop } from './forloop-drop' + +export class TablerowloopDrop extends ForloopDrop { + private cols: number + public constructor (length: number, cols: number, collection: string, variable: string) { + super(length, collection, variable) + this.length = length + this.cols = cols + } + public row () { + return Math.floor(this.i / this.cols) + 1 + } + public col0 () { + return (this.i % this.cols) + } + public col () { + return this.col0() + 1 + } + public col_first () { // eslint-disable-line + return this.col0() === 0 + } + public col_last () { // eslint-disable-line + return this.col() === this.cols + } +} diff --git a/packages/osrl/src/liquidjs/emitters/emitter.ts b/packages/osrl/src/liquidjs/emitters/emitter.ts new file mode 100644 index 00000000..be08b6c2 --- /dev/null +++ b/packages/osrl/src/liquidjs/emitters/emitter.ts @@ -0,0 +1,11 @@ +export interface Emitter { + /** + * Write a html value into emitter + * @param html string, Drop or other primitive value + */ + write (html: any): void; + /** + * Buffered string + */ + buffer: string; +} diff --git a/packages/osrl/src/liquidjs/emitters/keeping-type-emitter.ts b/packages/osrl/src/liquidjs/emitters/keeping-type-emitter.ts new file mode 100644 index 00000000..7565f264 --- /dev/null +++ b/packages/osrl/src/liquidjs/emitters/keeping-type-emitter.ts @@ -0,0 +1,19 @@ +import { stringify, toValue } from '../util/underscore' +import { Emitter } from '../types' + +export class KeepingTypeEmitter implements Emitter { + public buffer: any = ''; + + public write (html: any) { + html = toValue(html) + // This will only preserve the type if the value is isolated. + // I.E: + // {{ my-port }} -> 42 + // {{ my-host }}:{{ my-port }} -> 'host:42' + if (typeof html !== 'string' && this.buffer === '') { + this.buffer = html + } else { + this.buffer = stringify(this.buffer) + stringify(html) + } + } +} diff --git a/packages/osrl/src/liquidjs/emitters/simple-emitter.ts b/packages/osrl/src/liquidjs/emitters/simple-emitter.ts new file mode 100644 index 00000000..64a7f5b2 --- /dev/null +++ b/packages/osrl/src/liquidjs/emitters/simple-emitter.ts @@ -0,0 +1,10 @@ +import { stringify } from '../util/underscore' +import { Emitter } from './emitter' + +export class SimpleEmitter implements Emitter { + public buffer = ''; + + public write (html: any) { + this.buffer += stringify(html) + } +} diff --git a/packages/osrl/src/liquidjs/emitters/streamed-emitter-browser.ts b/packages/osrl/src/liquidjs/emitters/streamed-emitter-browser.ts new file mode 100644 index 00000000..4931ba6a --- /dev/null +++ b/packages/osrl/src/liquidjs/emitters/streamed-emitter-browser.ts @@ -0,0 +1,12 @@ +import { Emitter } from './emitter' + +export class StreamedEmitter implements Emitter { + public buffer = ''; + public stream: NodeJS.ReadableStream = null as any + constructor () { + throw new Error('streaming not supported in browser') + } + public write: (html: any) => void + public error: (err: Error) => void + public end: () => void +} diff --git a/packages/osrl/src/liquidjs/emitters/streamed-emitter.ts b/packages/osrl/src/liquidjs/emitters/streamed-emitter.ts new file mode 100644 index 00000000..83a9ca25 --- /dev/null +++ b/packages/osrl/src/liquidjs/emitters/streamed-emitter.ts @@ -0,0 +1,17 @@ +import { stringify } from '../util/underscore' +import { Emitter } from './emitter' +import { PassThrough } from 'stream' + +export class StreamedEmitter implements Emitter { + public buffer = ''; + public stream: NodeJS.ReadWriteStream = new PassThrough() + public write (html: any) { + this.stream.write(stringify(html)) + } + public error (err: Error) { + this.stream.emit('error', err) + } + public end () { + this.stream.end() + } +} diff --git a/packages/osrl/src/liquidjs/fs/browser.ts b/packages/osrl/src/liquidjs/fs/browser.ts new file mode 100644 index 00000000..fe0dd944 --- /dev/null +++ b/packages/osrl/src/liquidjs/fs/browser.ts @@ -0,0 +1,68 @@ +import { last } from '../util/underscore' + +function domResolve (root: string, path: string) { + const base = document.createElement('base') + base.href = root + + const head = document.getElementsByTagName('head')[0] + head.insertBefore(base, head.firstChild) + + const a = document.createElement('a') + a.href = path + const resolved = a.href + head.removeChild(base) + + return resolved +} + +export function resolve (root: string, filepath: string, ext: string) { + if (root.length && last(root) !== '/') root += '/' + const url = domResolve(root, filepath) + return url.replace(/^(\w+:\/\/[^/]+)(\/[^?]+)/, (str, origin, path) => { + const last = path.split('/').pop() + if (/\.\w+$/.test(last)) return str + return origin + path + ext + }) +} + +export async function readFile (url: string): Promise { + return new Promise((resolve, reject) => { + const xhr = new XMLHttpRequest() + xhr.onload = () => { + if (xhr.status >= 200 && xhr.status < 300) { + resolve(xhr.responseText as string) + } else { + reject(new Error(xhr.statusText)) + } + } + xhr.onerror = () => { + reject(new Error('An error occurred whilst receiving the response.')) + } + xhr.open('GET', url) + xhr.send() + }) +} + +export function readFileSync (url: string): string { + const xhr = new XMLHttpRequest() + xhr.open('GET', url, false) + xhr.send() + if (xhr.status < 200 || xhr.status >= 300) { + throw new Error(xhr.statusText) + } + return xhr.responseText as string +} + +export async function exists (filepath: string) { + return true +} + +export function existsSync (filepath: string) { + return true +} + +export function dirname (filepath: string) { + return domResolve(filepath, '.') +} + +export const sep = '/' diff --git a/packages/osrl/src/liquidjs/fs/fs.ts b/packages/osrl/src/liquidjs/fs/fs.ts new file mode 100644 index 00000000..0a010459 --- /dev/null +++ b/packages/osrl/src/liquidjs/fs/fs.ts @@ -0,0 +1,20 @@ +export interface FS { + /** check if a file exists asynchronously */ + exists: (filepath: string) => Promise; + /** check if a file exists synchronously */ + existsSync: (filepath: string) => boolean; + /** read a file asynchronously */ + readFile: (filepath: string) => Promise; + /** read a file synchronously */ + readFileSync: (filepath: string) => string; + /** resolve a file against directory, for given `ext` option */ + resolve: (dir: string, file: string, ext: string) => string; + /** check if file is contained in `root`, always return `true` by default. Warning: not setting this could expose path traversal vulnerabilities. */ + contains?: (root: string, file: string) => boolean; + /** defaults to "/" */ + sep?: string; + /** required for relative path resolving */ + dirname?: (file: string) => string; + /** fallback file for lookup failure */ + fallback?: (file: string) => string | undefined; +} diff --git a/packages/osrl/src/liquidjs/fs/loader.ts b/packages/osrl/src/liquidjs/fs/loader.ts new file mode 100644 index 00000000..30dabc01 --- /dev/null +++ b/packages/osrl/src/liquidjs/fs/loader.ts @@ -0,0 +1,81 @@ +import { FS } from './fs' +import { escapeRegex } from '../util/underscore' +import { assert } from '../util/assert' + +export interface LoaderOptions { + fs: FS; + extname: string; + root: string[]; + partials: string[]; + layouts: string[]; + relativeReference: boolean; +} +export enum LookupType { + Partials = 'partials', + Layouts = 'layouts', + Root = 'root' +} +export class Loader { + public shouldLoadRelative: (referencedFile: string) => boolean + private options: LoaderOptions + private contains: (root: string, file: string) => boolean + + constructor (options: LoaderOptions) { + this.options = options + if (options.relativeReference) { + const sep = options.fs.sep + assert(sep, '`fs.sep` is required for relative reference') + const rRelativePath = new RegExp(['.' + sep, '..' + sep, './', '../'].map(prefix => escapeRegex(prefix)).join('|')) + this.shouldLoadRelative = (referencedFile: string) => rRelativePath.test(referencedFile) + } else { + this.shouldLoadRelative = (referencedFile: string) => false + } + this.contains = this.options.fs.contains || (() => true) + } + + public * lookup (file: string, type: LookupType, sync?: boolean, currentFile?: string): Generator { + const { fs } = this.options + const dirs = this.options[type] + for (const filepath of this.candidates(file, dirs, currentFile, type !== LookupType.Root)) { + if (sync ? fs.existsSync(filepath) : yield fs.exists(filepath)) return filepath + } + throw this.lookupError(file, dirs) + } + + public * candidates (file: string, dirs: string[], currentFile?: string, enforceRoot?: boolean) { + const { fs, extname } = this.options + if (this.shouldLoadRelative(file) && currentFile) { + const referenced = fs.resolve(this.dirname(currentFile), file, extname) + for (const dir of dirs) { + if (!enforceRoot || this.contains(dir, referenced)) { + // the relatively referenced file is within one of root dirs + yield referenced + break + } + } + } + for (const dir of dirs) { + const referenced = fs.resolve(dir, file, extname) + if (!enforceRoot || this.contains(dir, referenced)) { + yield referenced + } + } + if (fs.fallback !== undefined) { + const filepath = fs.fallback(file) + if (filepath !== undefined) yield filepath + } + } + + private dirname (path: string) { + const fs = this.options.fs + assert(fs.dirname, '`fs.dirname` is required for relative reference') + return fs.dirname!(path) + } + + private lookupError (file: string, roots: string[]) { + const err = new Error('ENOENT') as any + err.message = `ENOENT: Failed to lookup "${file}" in "${roots.join('\t\n')}"` + err.code = 'ENOENT' + return err + } +} diff --git a/packages/osrl/src/liquidjs/fs/node-require.mjs b/packages/osrl/src/liquidjs/fs/node-require.mjs new file mode 100644 index 00000000..39334060 --- /dev/null +++ b/packages/osrl/src/liquidjs/fs/node-require.mjs @@ -0,0 +1,10 @@ +import { createRequire } from 'module' + +export function requireResolve (file) { + /** + * createRequire() can throw, + * when import.meta.url not begin with "file://". + */ + const require = createRequire(import.meta.url) + return require.resolve(file) +} diff --git a/packages/osrl/src/liquidjs/fs/node-require.ts b/packages/osrl/src/liquidjs/fs/node-require.ts new file mode 100644 index 00000000..962e77c3 --- /dev/null +++ b/packages/osrl/src/liquidjs/fs/node-require.ts @@ -0,0 +1 @@ +export const requireResolve = require.resolve diff --git a/packages/osrl/src/liquidjs/fs/node.ts b/packages/osrl/src/liquidjs/fs/node.ts new file mode 100644 index 00000000..44f87356 --- /dev/null +++ b/packages/osrl/src/liquidjs/fs/node.ts @@ -0,0 +1,49 @@ +import * as _ from '../util/underscore' +import { sep, resolve as nodeResolve, extname, dirname as nodeDirname } from 'path' +import { stat, statSync, readFile as nodeReadFile, readFileSync as nodeReadFileSync } from 'fs' +import { requireResolve } from './node-require' + +const statAsync = _.promisify(stat) +const readFileAsync = _.promisify(nodeReadFile as any) + +export async function exists (filepath: string) { + try { + await statAsync(filepath) + return true + } catch (err) { + return false + } +} +export function readFile (filepath: string) { + return (readFileAsync as any)(filepath, 'utf8') +} +export function existsSync (filepath: string) { + try { + statSync(filepath) + return true + } catch (err) { + return false + } +} +export function readFileSync (filepath: string) { + return nodeReadFileSync(filepath, 'utf8') +} +export function resolve (root: string, file: string, ext: string) { + if (!extname(file)) file += ext + return nodeResolve(root, file) +} +export function fallback (file: string) { + try { + return requireResolve(file) + } catch (e) {} +} +export function dirname (filepath: string) { + return nodeDirname(filepath) +} +export function contains (root: string, file: string) { + root = nodeResolve(root) + root = root.endsWith(sep) ? root : root + sep + return file.startsWith(root) +} + +export { sep } from 'path' diff --git a/packages/osrl/src/liquidjs/liquid-options.ts b/packages/osrl/src/liquidjs/liquid-options.ts new file mode 100644 index 00000000..9dd1c7a4 --- /dev/null +++ b/packages/osrl/src/liquidjs/liquid-options.ts @@ -0,0 +1,215 @@ +import { snakeCase, forOwn, isArray, isString, isFunction } from './util/underscore' +import { LiquidCache } from './cache/cache' +import { LRU } from './cache/lru' +import { FS } from './fs/fs' +import * as fs from './fs/node' +import { defaultOperators, Operators } from './render/operator' +import { createTrie, Trie } from './util/operator-trie' +import * as builtinFilters from './builtin/filters' +import { assert, FilterImplOptions } from './types' + +const filters = new Map() +forOwn(builtinFilters, (conf: FilterImplOptions, name: string) => { + filters.set(snakeCase(name), conf) +}) + +type OutputEscape = (value: any) => string +type OutputEscapeOption = 'escape' | 'json' | OutputEscape + +export interface LiquidOptions { + /** A directory or an array of directories from where to resolve layout and include templates, and the filename passed to `.renderFile()`. If it's an array, the files are looked up in the order they occur in the array. Defaults to `["."]` */ + root?: string | string[]; + /** A directory or an array of directories from where to resolve included templates. If it's an array, the files are looked up in the order they occur in the array. Defaults to `root` */ + partials?: string | string[]; + /** A directory or an array of directories from where to resolve layout templates. If it's an array, the files are looked up in the order they occur in the array. Defaults to `root` */ + layouts?: string | string[]; + /** Allow refer to layouts/partials by relative pathname. To avoid arbitrary filesystem read, paths been referenced also need to be within corresponding root, partials, layouts. Defaults to `true`. */ + relativeReference?: boolean; + /** Use jekyll style include, pass parameters to `include` variable of current scope. Defaults to `false`. */ + jekyllInclude?: boolean; + /** Add a extname (if filepath doesn't include one) before template file lookup. Eg: setting to `".html"` will allow including file by basename. Defaults to `""`. */ + extname?: string; + /** Whether or not to cache resolved templates. Defaults to `false`. */ + cache?: boolean | number | LiquidCache; + /** Use Javascript Truthiness. Defaults to `false`. */ + jsTruthy?: boolean; + /** If set, treat the `filepath` parameter in `{%include filepath %}` and `{%layout filepath%}` as a variable, otherwise as a literal value. Defaults to `true`. */ + dynamicPartials?: boolean; + /** Whether or not to assert filter existence. If set to `false`, undefined filters will be skipped. Otherwise, undefined filters will cause an exception. Defaults to `false`. */ + strictFilters?: boolean; + /** Whether or not to assert variable existence. If set to `false`, undefined variables will be rendered as empty string. Otherwise, undefined variables will cause an exception. Defaults to `false`. */ + strictVariables?: boolean; + /** Hide scope variables from prototypes, useful when you're passing a not sanitized object into LiquidJS or need to hide prototypes from templates. */ + ownPropertyOnly?: boolean; + /** Modifies the behavior of `strictVariables`. If set, a single undefined variable will *not* cause an exception in the context of the `if`/`elsif`/`unless` tag and the `default` filter. Instead, it will evaluate to `false` and `null`, respectively. Irrelevant if `strictVariables` is not set. Defaults to `false`. **/ + lenientIf?: boolean; + /** JavaScript timezoneOffset for `date` filter, default to local time. That means if you're in Australia (UTC+10), it'll default to -600 */ + timezoneOffset?: number; + /** Strip blank characters (including ` `, `\t`, and `\r`) from the right of tags (`{% %}`) until `\n` (inclusive). Defaults to `false`. */ + trimTagRight?: boolean; + /** Similar to `trimTagRight`, whereas the `\n` is exclusive. Defaults to `false`. See Whitespace Control for details. */ + trimTagLeft?: boolean; + /** Strip blank characters (including ` `, `\t`, and `\r`) from the right of values (`{{ }}`) until `\n` (inclusive). Defaults to `false`. */ + trimOutputRight?: boolean; + /** Similar to `trimOutputRight`, whereas the `\n` is exclusive. Defaults to `false`. See Whitespace Control for details. */ + trimOutputLeft?: boolean; + /** The left delimiter for liquid tags. **/ + tagDelimiterLeft?: string; + /** The right delimiter for liquid tags. **/ + tagDelimiterRight?: string; + /** The left delimiter for liquid outputs. **/ + outputDelimiterLeft?: string; + /** The right delimiter for liquid outputs. **/ + outputDelimiterRight?: string; + /** Whether input strings to date filter preserve the given timezone **/ + preserveTimezones?: boolean; + /** Whether `trim*Left`/`trim*Right` is greedy. When set to `true`, all consecutive blank characters including `\n` will be trimed regardless of line breaks. Defaults to `true`. */ + greedy?: boolean; + /** `fs` is used to override the default file-system module with a custom implementation. */ + fs?: FS; + /** the global scope passed down to all partial and layout templates, i.e. templates included by `include`, `layout` and `render` tags. */ + globals?: object; + /** Whether or not to keep value type when writing the Output, not working for streamed rendering. Defaults to `false`. */ + keepOutputType?: boolean; + /** Default escape filter applied to output values, when set, you'll have to add `| raw` for values don't need to be escaped. Defaults to `undefined`. */ + outputEscape?: OutputEscapeOption; + /** An object of operators for conditional statements. Defaults to the regular Liquid operators. */ + operators?: Operators; + /** Respect parameter order when using filters like "for ... reversed limit", Defaults to `false`. */ + orderedFilterParameters?: boolean; +} + +export interface RenderOptions { + /** + * This call is sync or async? It's used by Liquid internal methods, you'll not need this. + */ + sync?: boolean; + /** + * Same as `globals` on LiquidOptions, but only for current render() call + */ + globals?: object; + /** + * Same as `strictVariables` on LiquidOptions, but only for current render() call + */ + strictVariables?: boolean; + /** + * Same as `ownPropertyOnly` on LiquidOptions, but only for current render() call + */ + ownPropertyOnly?: boolean; +} + +interface NormalizedOptions extends LiquidOptions { + root?: string[]; + partials?: string[]; + layouts?: string[]; + cache?: LiquidCache; + outputEscape?: OutputEscape; + operatorsTrie?: Trie; +} + +export interface NormalizedFullOptions extends NormalizedOptions { + root: string[]; + partials: string[]; + layouts: string[]; + relativeReference: boolean; + jekyllInclude: boolean; + extname: string; + cache?: LiquidCache; + jsTruthy: boolean; + dynamicPartials: boolean; + fs: FS; + strictFilters: boolean; + strictVariables: boolean; + ownPropertyOnly: boolean; + lenientIf: boolean; + trimTagRight: boolean; + trimTagLeft: boolean; + trimOutputRight: boolean; + trimOutputLeft: boolean; + tagDelimiterLeft: string; + tagDelimiterRight: string; + outputDelimiterLeft: string; + outputDelimiterRight: string; + preserveTimezones: boolean; + greedy: boolean; + globals: object; + keepOutputType: boolean; + operators: Operators; + operatorsTrie: Trie; +} + +export const defaultOptions: NormalizedFullOptions = { + root: ['.'], + layouts: ['.'], + partials: ['.'], + relativeReference: true, + jekyllInclude: false, + cache: undefined, + extname: '', + fs: fs, + dynamicPartials: true, + jsTruthy: false, + trimTagRight: false, + trimTagLeft: false, + trimOutputRight: false, + trimOutputLeft: false, + greedy: true, + tagDelimiterLeft: '{%', + tagDelimiterRight: '%}', + outputDelimiterLeft: '{{', + outputDelimiterRight: '}}', + preserveTimezones: false, + strictFilters: false, + strictVariables: false, + ownPropertyOnly: false, + lenientIf: false, + globals: {}, + keepOutputType: false, + operators: defaultOperators, + operatorsTrie: createTrie(defaultOperators) +} + +export function normalize (options: LiquidOptions): NormalizedFullOptions { + if (options.hasOwnProperty('operators')) { + (options as NormalizedOptions).operatorsTrie = createTrie(options.operators!) + } + if (options.hasOwnProperty('root')) { + if (!options.hasOwnProperty('partials')) options.partials = options.root + if (!options.hasOwnProperty('layouts')) options.layouts = options.root + } + if (options.hasOwnProperty('cache')) { + let cache: LiquidCache | undefined + if (typeof options.cache === 'number') cache = options.cache > 0 ? new LRU(options.cache) : undefined + else if (typeof options.cache === 'object') cache = options.cache + else cache = options.cache ? new LRU(1024) : undefined + options.cache = cache + } + options = { ...defaultOptions, ...(options.jekyllInclude ? { dynamicPartials: false } : {}), ...options } + if (!options.fs!.dirname && options.relativeReference) { + console.warn('[LiquidJS] `fs.dirname` is required for relativeReference, set relativeReference to `false` to suppress this warning, or provide implementation for `fs.dirname`') + options.relativeReference = false + } + options.root = normalizeDirectoryList(options.root) + options.partials = normalizeDirectoryList(options.partials) + options.layouts = normalizeDirectoryList(options.layouts) + options.outputEscape = options.outputEscape && getOutputEscapeFunction(options.outputEscape) + return options as NormalizedFullOptions +} + +function getOutputEscapeFunction (nameOrFunction: OutputEscapeOption) { + if (isString(nameOrFunction)) { + const filterImpl = filters.get(nameOrFunction) + assert(isFunction(filterImpl), `filter "${nameOrFunction}" not found`) + return filterImpl + } else { + assert(isFunction(nameOrFunction), '`outputEscape` need to be of type string or function') + return nameOrFunction + } +} + +export function normalizeDirectoryList (value: any): string[] { + let list: string[] = [] + if (isArray(value)) list = value + if (isString(value)) list = [value] + return list +} diff --git a/packages/osrl/src/liquidjs/liquid.ts b/packages/osrl/src/liquidjs/liquid.ts new file mode 100644 index 00000000..c83fb0d8 --- /dev/null +++ b/packages/osrl/src/liquidjs/liquid.ts @@ -0,0 +1,128 @@ +import { Context } from './context/context' +import { forOwn, snakeCase } from './util/underscore' +import { Template } from './template/template' +import { LookupType } from './fs/loader' +import { Render } from './render/render' +import Parser from './parser/parser' +import { TagImplOptions } from './template/tag/tag-impl-options' +import { Value } from './template/value' +import builtinTags from './builtin/tags' +import * as builtinFilters from './builtin/filters' +import { TagMap } from './template/tag/tag-map' +import { FilterMap } from './template/filter/filter-map' +import { LiquidOptions, normalizeDirectoryList, NormalizedFullOptions, normalize, RenderOptions } from './liquid-options' +import { FilterImplOptions } from './template/filter/filter-impl-options' +import { toPromise, toValueSync } from './util/async' + +export * from './util/error' +export * from './types' +export const version = '[VI]{version}[/VI]' + +export class Liquid { + public readonly options: NormalizedFullOptions + public readonly renderer: Render + public readonly parser: Parser + public readonly filters: FilterMap + public readonly tags: TagMap + + public constructor (opts: LiquidOptions = {}) { + this.options = normalize(opts) + this.parser = new Parser(this) + this.renderer = new Render() + this.filters = new FilterMap(this.options.strictFilters, this) + this.tags = new TagMap() + + forOwn(builtinTags, (conf: TagImplOptions, name: string) => this.registerTag(snakeCase(name), conf)) + forOwn(builtinFilters, (handler: FilterImplOptions, name: string) => this.registerFilter(snakeCase(name), handler)) + } + public parse (html: string, filepath?: string): Template[] { + return this.parser.parse(html, filepath) + } + + public _render (tpl: Template[], scope: object | undefined, renderOptions: RenderOptions): IterableIterator { + const ctx = new Context(scope, this.options, renderOptions) + return this.renderer.renderTemplates(tpl, ctx) + } + public async render (tpl: Template[], scope?: object, renderOptions?: RenderOptions): Promise { + return toPromise(this._render(tpl, scope, { ...renderOptions, sync: false })) + } + public renderSync (tpl: Template[], scope?: object, renderOptions?: RenderOptions): any { + return toValueSync(this._render(tpl, scope, { ...renderOptions, sync: true })) + } + public renderToNodeStream (tpl: Template[], scope?: object, renderOptions: RenderOptions = {}): NodeJS.ReadableStream { + const ctx = new Context(scope, this.options, renderOptions) + return this.renderer.renderTemplatesToNodeStream(tpl, ctx) + } + + public _parseAndRender (html: string, scope: object | undefined, renderOptions: RenderOptions): IterableIterator { + const tpl = this.parse(html) + return this._render(tpl, scope, renderOptions) + } + public async parseAndRender (html: string, scope?: object, renderOptions?: RenderOptions): Promise { + return toPromise(this._parseAndRender(html, scope, { ...renderOptions, sync: false })) + } + public parseAndRenderSync (html: string, scope?: object, renderOptions?: RenderOptions): any { + return toValueSync(this._parseAndRender(html, scope, { ...renderOptions, sync: true })) + } + + public _parsePartialFile (file: string, sync?: boolean, currentFile?: string) { + return this.parser.parseFile(file, sync, LookupType.Partials, currentFile) + } + public _parseLayoutFile (file: string, sync?: boolean, currentFile?: string) { + return this.parser.parseFile(file, sync, LookupType.Layouts, currentFile) + } + public async parseFile (file: string): Promise { + return toPromise(this.parser.parseFile(file, false)) + } + public parseFileSync (file: string): Template[] { + return toValueSync(this.parser.parseFile(file, true)) + } + public async renderFile (file: string, ctx?: object, renderOptions?: RenderOptions) { + const templates = await this.parseFile(file) + return this.render(templates, ctx, renderOptions) + } + public renderFileSync (file: string, ctx?: object, renderOptions?: RenderOptions) { + const templates = this.parseFileSync(file) + return this.renderSync(templates, ctx, renderOptions) + } + public async renderFileToNodeStream (file: string, scope?: object, renderOptions?: RenderOptions) { + const templates = await this.parseFile(file) + return this.renderToNodeStream(templates, scope, renderOptions) + } + + public _evalValue (str: string, ctx: Context): IterableIterator { + const value = new Value(str, this) + return value.value(ctx, false) + } + public async evalValue (str: string, ctx: Context): Promise { + return toPromise(this._evalValue(str, ctx)) + } + public evalValueSync (str: string, ctx: Context): any { + return toValueSync(this._evalValue(str, ctx)) + } + + public registerFilter (name: string, filter: FilterImplOptions) { + this.filters.set(name, filter) + } + public registerTag (name: string, tag: TagImplOptions) { + this.tags.set(name, tag) + } + public plugin (plugin: (this: Liquid, L: typeof Liquid) => void) { + return plugin.call(this, Liquid) + } + public express () { + const self = this // eslint-disable-line + let firstCall = true + + return function (this: any, filePath: string, ctx: object, callback: (err: Error | null, rendered: string) => void) { + if (firstCall) { + firstCall = false + const dirs = normalizeDirectoryList(this.root) + self.options.root.unshift(...dirs) + self.options.layouts.unshift(...dirs) + self.options.partials.unshift(...dirs) + } + self.renderFile(filePath, ctx).then(html => callback(null, html) as any, callback as any) + } + } +} diff --git a/packages/osrl/src/liquidjs/parser/filter-arg.ts b/packages/osrl/src/liquidjs/parser/filter-arg.ts new file mode 100644 index 00000000..b3e49906 --- /dev/null +++ b/packages/osrl/src/liquidjs/parser/filter-arg.ts @@ -0,0 +1,10 @@ +import { isArray } from '../util/underscore' +import { ValueToken } from '../tokens/value-token' + +type KeyValuePair = [string?, ValueToken?] + +export type FilterArg = ValueToken | KeyValuePair + +export function isKeyValuePair (arr: FilterArg): arr is KeyValuePair { // TODO check + return isArray(arr) +} diff --git a/packages/osrl/src/liquidjs/parser/match-operator.ts b/packages/osrl/src/liquidjs/parser/match-operator.ts new file mode 100644 index 00000000..37ccde58 --- /dev/null +++ b/packages/osrl/src/liquidjs/parser/match-operator.ts @@ -0,0 +1,15 @@ +import { IDENTIFIER, TYPES } from '../util/character' +import { Trie } from '../util/operator-trie' + +export function matchOperator (str: string, begin: number, trie: Trie, end = str.length) { + let node = trie + let i = begin + let info + while (node[str[i]] && i < end) { + node = node[str[i++]] + if (node['end']) info = node + } + if (!info) return -1 + if (info['needBoundary'] && (TYPES[str.charCodeAt(i)] & IDENTIFIER)) return -1 + return i +} diff --git a/packages/osrl/src/liquidjs/parser/parse-stream.ts b/packages/osrl/src/liquidjs/parser/parse-stream.ts new file mode 100644 index 00000000..7543f212 --- /dev/null +++ b/packages/osrl/src/liquidjs/parser/parse-stream.ts @@ -0,0 +1,44 @@ +import { Token } from '../tokens/token' +import { Template } from '../template/template' +import { isTagToken } from '../util/type-guards' +import { TopLevelToken } from '../tokens/toplevel-token' + +type ParseToken = ((token: T, remainTokens: T[]) => Template) + +export class ParseStream { + private tokens: T[] + private handlers: {[key: string]: (arg: any) => void} = {} + private stopRequested = false + private parseToken: ParseToken + + public constructor (tokens: T[], parseToken: ParseToken) { + this.tokens = tokens + this.parseToken = parseToken + } + public on (name: string, cb: (this: ParseStream, arg: T2) => void): ParseStream { + this.handlers[name] = cb + return this + } + private trigger (event: string, arg?: T) { + const h = this.handlers[event] + return h ? (h.call(this, arg), true) : false + } + public start () { + this.trigger('start') + let token: T | undefined + while (!this.stopRequested && (token = this.tokens.shift())) { + if (this.trigger('token', token)) continue + if (isTagToken(token) && this.trigger(`tag:${token.name}`, token)) { + continue + } + const template = this.parseToken(token, this.tokens) + this.trigger('template', template) + } + if (!this.stopRequested) this.trigger('end') + return this + } + public stop () { + this.stopRequested = true + return this + } +} diff --git a/packages/osrl/src/liquidjs/parser/parse-string-literal.ts b/packages/osrl/src/liquidjs/parser/parse-string-literal.ts new file mode 100644 index 00000000..c1e8f1a3 --- /dev/null +++ b/packages/osrl/src/liquidjs/parser/parse-string-literal.ts @@ -0,0 +1,49 @@ +const rHex = /[\da-fA-F]/ +const rOct = /[0-7]/ +const escapeChar = { + b: '\b', + f: '\f', + n: '\n', + r: '\r', + t: '\t', + v: '\x0B' +} + +function hexVal (c: string) { + const code = c.charCodeAt(0) + if (code >= 97) return code - 87 + if (code >= 65) return code - 55 + return code - 48 +} + +export function parseStringLiteral (str: string): string { + let ret = '' + for (let i = 1; i < str.length - 1; i++) { + if (str[i] !== '\\') { + ret += str[i] + continue + } + if (escapeChar[str[i + 1]] !== undefined) { + ret += escapeChar[str[++i]] + } else if (str[i + 1] === 'u') { + let val = 0 + let j = i + 2 + while (j <= i + 5 && rHex.test(str[j])) { + val = val * 16 + hexVal(str[j++]) + } + i = j - 1 + ret += String.fromCharCode(val) + } else if (!rOct.test(str[i + 1])) { + ret += str[++i] + } else { + let j = i + 1 + let val = 0 + while (j <= i + 3 && rOct.test(str[j])) { + val = val * 8 + hexVal(str[j++]) + } + i = j - 1 + ret += String.fromCharCode(val) + } + } + return ret +} diff --git a/packages/osrl/src/liquidjs/parser/parser.ts b/packages/osrl/src/liquidjs/parser/parser.ts new file mode 100644 index 00000000..ca7c3d7c --- /dev/null +++ b/packages/osrl/src/liquidjs/parser/parser.ts @@ -0,0 +1,78 @@ +import { ParseError } from '../util/error' +import { Liquid, Tokenizer } from '../liquid' +import { ParseStream } from './parse-stream' +import { isTagToken, isOutputToken } from '../util/type-guards' +import { OutputToken } from '../tokens/output-token' +import { Tag } from '../template/tag/tag' +import { Output } from '../template/output' +import { HTML } from '../template/html' +import { Template } from '../template/template' +import { TopLevelToken } from '../tokens/toplevel-token' +import { LiquidCache } from '../cache/cache' +import { Loader, LookupType } from '../fs/loader' +import { toPromise } from '../util/async' +import { FS } from '../fs/fs' + +export default class Parser { + public parseFile: (file: string, sync?: boolean, type?: LookupType, currentFile?: string) => Generator + + private liquid: Liquid + private fs: FS + private cache?: LiquidCache + private loader: Loader + + public constructor (liquid: Liquid) { + this.liquid = liquid + this.cache = this.liquid.options.cache + this.fs = this.liquid.options.fs + this.parseFile = this.cache ? this._parseFileCached : this._parseFile + this.loader = new Loader(this.liquid.options) + } + public parse (html: string, filepath?: string): Template[] { + const tokenizer = new Tokenizer(html, this.liquid.options.operatorsTrie, filepath) + const tokens = tokenizer.readTopLevelTokens(this.liquid.options) + return this.parseTokens(tokens) + } + public parseTokens (tokens: TopLevelToken[]) { + let token + const templates: Template[] = [] + while ((token = tokens.shift())) { + templates.push(this.parseToken(token, tokens)) + } + return templates + } + public parseToken (token: TopLevelToken, remainTokens: TopLevelToken[]) { + try { + if (isTagToken(token)) { + return new Tag(token, remainTokens, this.liquid) + } + if (isOutputToken(token)) { + return new Output(token as OutputToken, this.liquid) + } + return new HTML(token) + } catch (e) { + throw new ParseError(e as Error, token) + } + } + public parseStream (tokens: TopLevelToken[]) { + return new ParseStream(tokens, (token, tokens) => this.parseToken(token, tokens)) + } + private * _parseFileCached (file: string, sync?: boolean, type: LookupType = LookupType.Root, currentFile?: string): Generator { + const cache = this.cache! + const key = this.loader.shouldLoadRelative(file) ? currentFile + ',' + file : type + ':' + file + const tpls = yield cache.read(key) + if (tpls) return tpls + + const task = this._parseFile(file, sync, type, currentFile) + // sync mode: exec the task and cache the result + // async mode: cache the task before exec + const taskOrTpl = sync ? yield task : toPromise(task) + cache.write(key, taskOrTpl as any) + // note: concurrent tasks will be reused, cache for failed task is removed until its end + try { return yield taskOrTpl } catch (err) { cache.remove(key); throw err } + } + private * _parseFile (file: string, sync?: boolean, type: LookupType = LookupType.Root, currentFile?: string): Generator { + const filepath = yield this.loader.lookup(file, type, sync, currentFile) + return this.liquid.parse(sync ? this.fs.readFileSync(filepath) : yield this.fs.readFile(filepath), filepath) + } +} diff --git a/packages/osrl/src/liquidjs/parser/token-kind.ts b/packages/osrl/src/liquidjs/parser/token-kind.ts new file mode 100644 index 00000000..afa1f7ab --- /dev/null +++ b/packages/osrl/src/liquidjs/parser/token-kind.ts @@ -0,0 +1,15 @@ +export enum TokenKind { + Number = 1, + Literal = 2, + Tag = 4, + Output = 8, + HTML = 16, + Filter = 32, + Hash = 64, + PropertyAccess = 128, + Word = 256, + Range = 512, + Quoted = 1024, + Operator = 2048, + Delimited = Tag | Output +} diff --git a/packages/osrl/src/liquidjs/parser/tokenizer.ts b/packages/osrl/src/liquidjs/parser/tokenizer.ts new file mode 100644 index 00000000..7f02313a --- /dev/null +++ b/packages/osrl/src/liquidjs/parser/tokenizer.ts @@ -0,0 +1,399 @@ +import { whiteSpaceCtrl } from './whitespace-ctrl' +import { NumberToken } from '../tokens/number-token' +import { IdentifierToken } from '../tokens/identifier-token' +import { literalValues } from '../util/literal' +import { LiteralToken } from '../tokens/literal-token' +import { OperatorToken } from '../tokens/operator-token' +import { PropertyAccessToken } from '../tokens/property-access-token' +import { assert } from '../util/assert' +import { TopLevelToken } from '../tokens/toplevel-token' +import { FilterArg } from './filter-arg' +import { FilterToken } from '../tokens/filter-token' +import { HashToken } from '../tokens/hash-token' +import { QuotedToken } from '../tokens/quoted-token' +import { ellipsis } from '../util/underscore' +import { HTMLToken } from '../tokens/html-token' +import { TagToken } from '../tokens/tag-token' +import { Token } from '../tokens/token' +import { RangeToken } from '../tokens/range-token' +import { ValueToken } from '../tokens/value-token' +import { OutputToken } from '../tokens/output-token' +import { TokenizationError } from '../util/error' +import { NormalizedFullOptions, defaultOptions } from '../liquid-options' +import { TYPES, QUOTE, BLANK, IDENTIFIER } from '../util/character' +import { matchOperator } from './match-operator' +import { Trie } from '../util/operator-trie' +import { Expression } from '../render/expression' +import { LiquidTagToken } from '../tokens/liquid-tag-token' + +export class Tokenizer { + p = 0 + N: number + private rawBeginAt = -1 + + constructor ( + public input: string, + private trie: Trie, + public file: string = '' + ) { + this.N = input.length + } + + readExpression () { + return new Expression(this.readExpressionTokens()) + } + + * readExpressionTokens (): IterableIterator { + const operand = this.readValue() + if (!operand) return + + yield operand + + while (this.p < this.N) { + const operator = this.readOperator() + if (!operator) return + + const operand = this.readValue() + if (!operand) return + + yield operator + yield operand + } + } + readOperator (): OperatorToken | undefined { + this.skipBlank() + const end = matchOperator(this.input, this.p, this.trie) + if (end === -1) return + return new OperatorToken(this.input, this.p, (this.p = end), this.file) + } + readFilters (): FilterToken[] { + const filters = [] + while (true) { + const filter = this.readFilter() + if (!filter) return filters + filters.push(filter) + } + } + readFilter (): FilterToken | null { + this.skipBlank() + if (this.end()) return null + assert(this.peek() === '|', () => `unexpected token at ${this.snapshot()}`) + this.p++ + const begin = this.p + const name = this.readIdentifier() + if (!name.size()) return null + const args = [] + this.skipBlank() + if (this.peek() === ':') { + do { + ++this.p + const arg = this.readFilterArg() + arg && args.push(arg) + this.skipBlank() + assert(this.end() || this.peek() === ',' || this.peek() === '|', () => `unexpected character ${this.snapshot()}`) + } while (this.peek() === ',') + } + return new FilterToken(name.getText(), args, this.input, begin, this.p, this.file) + } + + readFilterArg (): FilterArg | undefined { + const key = this.readValue() + if (!key) return + this.skipBlank() + if (this.peek() !== ':') return key + ++this.p + const value = this.readValue() + return [key.getText(), value] + } + + readTopLevelTokens (options: NormalizedFullOptions = defaultOptions): TopLevelToken[] { + const tokens: TopLevelToken[] = [] + while (this.p < this.N) { + const token = this.readTopLevelToken(options) + tokens.push(token) + } + whiteSpaceCtrl(tokens, options) + return tokens + } + + readTopLevelToken (options: NormalizedFullOptions): TopLevelToken { + const { tagDelimiterLeft, outputDelimiterLeft } = options + if (this.rawBeginAt > -1) return this.readEndrawOrRawContent(options) + if (this.match(tagDelimiterLeft)) return this.readTagToken(options) + if (this.match(outputDelimiterLeft)) return this.readOutputToken(options) + return this.readHTMLToken([tagDelimiterLeft, outputDelimiterLeft]) + } + + readHTMLToken (stopStrings: string[]): HTMLToken { + const begin = this.p + while (this.p < this.N) { + if (stopStrings.some(str => this.match(str))) break + ++this.p + } + return new HTMLToken(this.input, begin, this.p, this.file) + } + + readTagToken (options: NormalizedFullOptions = defaultOptions): TagToken { + const { file, input } = this + const begin = this.p + if (this.readToDelimiter(options.tagDelimiterRight) === -1) { + throw this.mkError(`tag ${this.snapshot(begin)} not closed`, begin) + } + const token = new TagToken(input, begin, this.p, options, file) + if (token.name === 'raw') this.rawBeginAt = begin + return token + } + + readToDelimiter (delimiter: string) { + while (this.p < this.N) { + if ((this.peekType() & QUOTE)) { + this.readQuoted() + continue + } + ++this.p + if (this.rmatch(delimiter)) return this.p + } + return -1 + } + + readOutputToken (options: NormalizedFullOptions = defaultOptions): OutputToken { + const { file, input } = this + const { outputDelimiterRight } = options + const begin = this.p + if (this.readToDelimiter(outputDelimiterRight) === -1) { + throw this.mkError(`output ${this.snapshot(begin)} not closed`, begin) + } + return new OutputToken(input, begin, this.p, options, file) + } + + readEndrawOrRawContent (options: NormalizedFullOptions): HTMLToken | TagToken { + const { tagDelimiterLeft, tagDelimiterRight } = options + const begin = this.p + let leftPos = this.readTo(tagDelimiterLeft) - tagDelimiterLeft.length + while (this.p < this.N) { + if (this.readIdentifier().getText() !== 'endraw') { + leftPos = this.readTo(tagDelimiterLeft) - tagDelimiterLeft.length + continue + } + while (this.p <= this.N) { + if (this.rmatch(tagDelimiterRight)) { + const end = this.p + if (begin === leftPos) { + this.rawBeginAt = -1 + return new TagToken(this.input, begin, end, options, this.file) + } else { + this.p = leftPos + return new HTMLToken(this.input, begin, leftPos, this.file) + } + } + if (this.rmatch(tagDelimiterLeft)) break + this.p++ + } + } + throw this.mkError(`raw ${this.snapshot(this.rawBeginAt)} not closed`, begin) + } + + readLiquidTagTokens (options: NormalizedFullOptions = defaultOptions): LiquidTagToken[] { + const tokens: LiquidTagToken[] = [] + while (this.p < this.N) { + const token = this.readLiquidTagToken(options) + if (token.name) tokens.push(token) + } + return tokens + } + + readLiquidTagToken (options: NormalizedFullOptions): LiquidTagToken { + const { file, input } = this + const begin = this.p + let end = this.N + if (this.readToDelimiter('\n') !== -1) end = this.p + return new LiquidTagToken(input, begin, end, options, file) + } + + mkError (msg: string, begin: number) { + return new TokenizationError(msg, new IdentifierToken(this.input, begin, this.N, this.file)) + } + + snapshot (begin: number = this.p) { + return JSON.stringify(ellipsis(this.input.slice(begin), 16)) + } + + /** + * @deprecated + */ + readWord () { + console.warn('Tokenizer#readWord() will be removed, use #readIdentifier instead') + return this.readIdentifier() + } + + readIdentifier (): IdentifierToken { + this.skipBlank() + const begin = this.p + while (this.peekType() & IDENTIFIER) ++this.p + return new IdentifierToken(this.input, begin, this.p, this.file) + } + + readTagName (): string { + this.skipBlank() + // Handle inline comment tags + if (this.input[this.p] === '#') return this.input.slice(this.p, ++this.p) + return this.readIdentifier().getText() + } + + readHashes (jekyllStyle?: boolean) { + const hashes = [] + while (true) { + const hash = this.readHash(jekyllStyle) + if (!hash) return hashes + hashes.push(hash) + } + } + + readHash (jekyllStyle?: boolean): HashToken | undefined { + this.skipBlank() + if (this.peek() === ',') ++this.p + const begin = this.p + const name = this.readIdentifier() + if (!name.size()) return + let value + + this.skipBlank() + const sep = jekyllStyle ? '=' : ':' + if (this.peek() === sep) { + ++this.p + value = this.readValue() + } + return new HashToken(this.input, begin, this.p, name, value, this.file) + } + + remaining () { + return this.input.slice(this.p) + } + + advance (i = 1) { + this.p += i + } + + end () { + return this.p >= this.N + } + + readTo (end: string): number { + while (this.p < this.N) { + ++this.p + if (this.rmatch(end)) return this.p + } + return -1 + } + + readValue (): ValueToken | undefined { + const value = this.readQuoted() || this.readRange() + if (value) return value + + if (this.peek() === '[') { + this.p++ + const prop = this.readQuoted() + if (!prop) return + if (this.peek() !== ']') return + this.p++ + return new PropertyAccessToken(prop, [], this.p) + } + + const variable = this.readIdentifier() + if (!variable.size()) return + + let isNumber = variable.isNumber(true) + const props: (QuotedToken | IdentifierToken)[] = [] + while (true) { + if (this.peek() === '[') { + isNumber = false + this.p++ + const prop = this.readValue() || new IdentifierToken(this.input, this.p, this.p, this.file) + this.readTo(']') + props.push(prop) + } else if (this.peek() === '.' && this.peek(1) !== '.') { // skip range syntax + this.p++ + const prop = this.readIdentifier() + if (!prop.size()) break + if (!prop.isNumber()) isNumber = false + props.push(prop) + } else break + } + if (!props.length && literalValues.hasOwnProperty(variable.content)) { + return new LiteralToken(this.input, variable.begin, variable.end, this.file) + } + if (isNumber) return new NumberToken(variable, props[0] as IdentifierToken) + return new PropertyAccessToken(variable, props, this.p) + } + + readRange (): RangeToken | undefined { + this.skipBlank() + const begin = this.p + if (this.peek() !== '(') return + ++this.p + const lhs = this.readValueOrThrow() + this.p += 2 + const rhs = this.readValueOrThrow() + ++this.p + return new RangeToken(this.input, begin, this.p, lhs, rhs, this.file) + } + + readValueOrThrow (): ValueToken { + const value = this.readValue() + assert(value, () => `unexpected token ${this.snapshot()}, value expected`) + return value! + } + + readQuoted (): QuotedToken | undefined { + this.skipBlank() + const begin = this.p + if (!(this.peekType() & QUOTE)) return + ++this.p + let escaped = false + while (this.p < this.N) { + ++this.p + if (this.input[this.p - 1] === this.input[begin] && !escaped) break + if (escaped) escaped = false + else if (this.input[this.p - 1] === '\\') escaped = true + } + return new QuotedToken(this.input, begin, this.p, this.file) + } + + * readFileNameTemplate (options: NormalizedFullOptions): IterableIterator { + const { outputDelimiterLeft } = options + const htmlStopStrings = [',', ' ', outputDelimiterLeft] + const htmlStopStringSet = new Set(htmlStopStrings) + // break on ',' and ' ', outputDelimiterLeft only stops HTML token + while (this.p < this.N && !htmlStopStringSet.has(this.peek())) { + yield this.match(outputDelimiterLeft) + ? this.readOutputToken(options) + : this.readHTMLToken(htmlStopStrings) + } + } + + match (word: string) { + for (let i = 0; i < word.length; i++) { + if (word[i] !== this.input[this.p + i]) return false + } + return true + } + + rmatch (pattern: string) { + for (let i = 0; i < pattern.length; i++) { + if (pattern[pattern.length - 1 - i] !== this.input[this.p - 1 - i]) return false + } + return true + } + + peekType (n = 0) { + return TYPES[this.input.charCodeAt(this.p + n)] + } + + peek (n = 0) { + return this.input[this.p + n] + } + + skipBlank () { + while (this.peekType() & BLANK) ++this.p + } +} diff --git a/packages/osrl/src/liquidjs/parser/whitespace-ctrl.ts b/packages/osrl/src/liquidjs/parser/whitespace-ctrl.ts new file mode 100644 index 00000000..49a621fe --- /dev/null +++ b/packages/osrl/src/liquidjs/parser/whitespace-ctrl.ts @@ -0,0 +1,40 @@ +import { Token } from '../tokens/token' +import { isTagToken, isHTMLToken, isDelimitedToken } from '../util/type-guards' +import { NormalizedFullOptions } from '../liquid-options' +import { TYPES, INLINE_BLANK, BLANK } from '../util/character' + +export function whiteSpaceCtrl (tokens: Token[], options: NormalizedFullOptions) { + let inRaw = false + + for (let i = 0; i < tokens.length; i++) { + const token = tokens[i] + if (!isDelimitedToken(token)) continue + if (!inRaw && token.trimLeft) { + trimLeft(tokens[i - 1], options.greedy) + } + + if (isTagToken(token)) { + if (token.name === 'raw') inRaw = true + else if (token.name === 'endraw') inRaw = false + } + + if (!inRaw && token.trimRight) { + trimRight(tokens[i + 1], options.greedy) + } + } +} + +function trimLeft (token: Token, greedy: boolean) { + if (!token || !isHTMLToken(token)) return + + const mask = greedy ? BLANK : INLINE_BLANK + while (TYPES[token.input.charCodeAt(token.end - 1 - token.trimRight)] & mask) token.trimRight++ +} + +function trimRight (token: Token, greedy: boolean) { + if (!token || !isHTMLToken(token)) return + + const mask = greedy ? BLANK : INLINE_BLANK + while (TYPES[token.input.charCodeAt(token.begin + token.trimLeft)] & mask) token.trimLeft++ + if (token.input.charAt(token.begin + token.trimLeft) === '\n') token.trimLeft++ +} diff --git a/packages/osrl/src/liquidjs/render/boolean.ts b/packages/osrl/src/liquidjs/render/boolean.ts new file mode 100644 index 00000000..d91c8f7f --- /dev/null +++ b/packages/osrl/src/liquidjs/render/boolean.ts @@ -0,0 +1,13 @@ +import { Context } from '../context/context' + +export function isTruthy (val: any, ctx: Context): boolean { + return !isFalsy(val, ctx) +} + +export function isFalsy (val: any, ctx: Context): boolean { + if (ctx.opts.jsTruthy) { + return !val + } else { + return val === false || undefined === val || val === null + } +} diff --git a/packages/osrl/src/liquidjs/render/expression.ts b/packages/osrl/src/liquidjs/render/expression.ts new file mode 100644 index 00000000..a206c9c3 --- /dev/null +++ b/packages/osrl/src/liquidjs/render/expression.ts @@ -0,0 +1,96 @@ +import { QuotedToken } from '../tokens/quoted-token' +import { PropertyAccessToken } from '../tokens/property-access-token' +import { NumberToken } from '../tokens/number-token' +import { assert } from '../util/assert' +import { literalValues } from '../util/literal' +import { LiteralToken } from '../tokens/literal-token' +import * as TypeGuards from '../util/type-guards' +import { Token } from '../tokens/token' +import { OperatorToken } from '../tokens/operator-token' +import { RangeToken } from '../tokens/range-token' +import { parseStringLiteral } from '../parser/parse-string-literal' +import { Context } from '../context/context' +import { range } from '../util/underscore' +import { Operators } from '../render/operator' +import { UndefinedVariableError } from '../util/error' + +export class Expression { + private postfix: Token[] + + public constructor (tokens: IterableIterator) { + this.postfix = [...toPostfix(tokens)] + } + public * evaluate (ctx: Context, lenient: boolean): Generator { + assert(ctx, 'unable to evaluate: context not defined') + const operands: any[] = [] + for (const token of this.postfix) { + if (TypeGuards.isOperatorToken(token)) { + const r = operands.pop() + const l = operands.pop() + const result = yield evalOperatorToken(ctx.opts.operators, token, l, r, ctx) + operands.push(result) + } else { + operands.push(yield evalToken(token, ctx, lenient && this.postfix.length === 1)) + } + } + return operands[0] + } +} + +export function evalToken (token: Token | undefined, ctx: Context, lenient = false): any { + if (TypeGuards.isPropertyAccessToken(token)) return evalPropertyAccessToken(token, ctx, lenient) + if (TypeGuards.isRangeToken(token)) return evalRangeToken(token, ctx) + if (TypeGuards.isLiteralToken(token)) return evalLiteralToken(token) + if (TypeGuards.isNumberToken(token)) return evalNumberToken(token) + if (TypeGuards.isWordToken(token)) return token.getText() + if (TypeGuards.isQuotedToken(token)) return evalQuotedToken(token) +} + +function evalPropertyAccessToken (token: PropertyAccessToken, ctx: Context, lenient: boolean) { + const props: string[] = token.props.map(prop => evalToken(prop, ctx, false)) + try { + return ctx.get([token.propertyName, ...props]) + } catch (e) { + if (lenient && (e as Error).name === 'InternalUndefinedVariableError') return null + throw (new UndefinedVariableError(e as Error, token)) + } +} + +function evalNumberToken (token: NumberToken) { + const str = token.whole.content + '.' + (token.decimal ? token.decimal.content : '') + return Number(str) +} + +export function evalQuotedToken (token: QuotedToken) { + return parseStringLiteral(token.getText()) +} + +function evalOperatorToken (operators: Operators, token: OperatorToken, lhs: any, rhs: any, ctx: Context) { + const impl = operators[token.operator] + return impl(lhs, rhs, ctx) +} + +function evalLiteralToken (token: LiteralToken) { + return literalValues[token.literal] +} + +function evalRangeToken (token: RangeToken, ctx: Context) { + const low: number = evalToken(token.lhs, ctx) + const high: number = evalToken(token.rhs, ctx) + return range(+low, +high + 1) +} + +function * toPostfix (tokens: IterableIterator): IterableIterator { + const ops: OperatorToken[] = [] + for (const token of tokens) { + if (TypeGuards.isOperatorToken(token)) { + while (ops.length && ops[ops.length - 1].getPrecedence() > token.getPrecedence()) { + yield ops.pop()! + } + ops.push(token) + } else yield token + } + while (ops.length) { + yield ops.pop()! + } +} diff --git a/packages/osrl/src/liquidjs/render/operator.ts b/packages/osrl/src/liquidjs/render/operator.ts new file mode 100644 index 00000000..4f0f0dde --- /dev/null +++ b/packages/osrl/src/liquidjs/render/operator.ts @@ -0,0 +1,48 @@ +import { isComparable } from '../drop/comparable' +import { Context } from '../context/context' +import { isFunction, toValue } from '../util/underscore' +import { isTruthy } from '../render/boolean' + +export interface Operators { + [key: string]: (lhs: any, rhs: any, ctx: Context) => boolean; +} + +export const defaultOperators: Operators = { + '==': (l: any, r: any) => { + if (isComparable(l)) return l.equals(r) + if (isComparable(r)) return r.equals(l) + return toValue(l) === toValue(r) + }, + '!=': (l: any, r: any) => { + if (isComparable(l)) return !l.equals(r) + if (isComparable(r)) return !r.equals(l) + return toValue(l) !== toValue(r) + }, + '>': (l: any, r: any) => { + if (isComparable(l)) return l.gt(r) + if (isComparable(r)) return r.lt(l) + return toValue(l) > toValue(r) + }, + '<': (l: any, r: any) => { + if (isComparable(l)) return l.lt(r) + if (isComparable(r)) return r.gt(l) + return toValue(l) < toValue(r) + }, + '>=': (l: any, r: any) => { + if (isComparable(l)) return l.geq(r) + if (isComparable(r)) return r.leq(l) + return toValue(l) >= toValue(r) + }, + '<=': (l: any, r: any) => { + if (isComparable(l)) return l.leq(r) + if (isComparable(r)) return r.geq(l) + return toValue(l) <= toValue(r) + }, + 'contains': (l: any, r: any) => { + l = toValue(l) + r = toValue(r) + return l && isFunction(l.indexOf) ? l.indexOf(r) > -1 : false + }, + 'and': (l: any, r: any, ctx: Context) => isTruthy(toValue(l), ctx) && isTruthy(toValue(r), ctx), + 'or': (l: any, r: any, ctx: Context) => isTruthy(toValue(l), ctx) || isTruthy(toValue(r), ctx) +} diff --git a/packages/osrl/src/liquidjs/render/render.ts b/packages/osrl/src/liquidjs/render/render.ts new file mode 100644 index 00000000..10aaac92 --- /dev/null +++ b/packages/osrl/src/liquidjs/render/render.ts @@ -0,0 +1,35 @@ +import { RenderError } from '../util/error' +import { Context } from '../context/context' +import { Template } from '../template/template' +import { Emitter } from '../emitters/emitter' +import { SimpleEmitter } from '../emitters/simple-emitter' +import { StreamedEmitter } from '../emitters/streamed-emitter' +import { toPromise } from '../util/async' +import { KeepingTypeEmitter } from '../emitters/keeping-type-emitter' + +export class Render { + public renderTemplatesToNodeStream (templates: Template[], ctx: Context): NodeJS.ReadableStream { + const emitter = new StreamedEmitter() + Promise.resolve().then(() => toPromise(this.renderTemplates(templates, ctx, emitter))) + .then(() => emitter.end(), err => emitter.error(err)) + return emitter.stream + } + public * renderTemplates (templates: Template[], ctx: Context, emitter?: Emitter): IterableIterator { + if (!emitter) { + emitter = ctx.opts.keepOutputType ? new KeepingTypeEmitter() : new SimpleEmitter() + } + for (const tpl of templates) { + try { + // if tpl.render supports emitter, it'll return empty `html` + const html = yield tpl.render(ctx, emitter) + // if not, it'll return an `html`, write to the emitter for it + html && emitter.write(html) + if (emitter['break'] || emitter['continue']) break + } catch (e) { + const err = RenderError.is(e) ? e : new RenderError(e as Error, tpl) + throw err + } + } + return emitter.buffer + } +} diff --git a/packages/osrl/src/liquidjs/template/filter/filter-impl-options.ts b/packages/osrl/src/liquidjs/template/filter/filter-impl-options.ts new file mode 100644 index 00000000..d6f800d6 --- /dev/null +++ b/packages/osrl/src/liquidjs/template/filter/filter-impl-options.ts @@ -0,0 +1,5 @@ +import { FilterImpl } from './filter-impl' + +export interface FilterImplOptions { + (this: FilterImpl, value: any, ...args: any[]): any; +} diff --git a/packages/osrl/src/liquidjs/template/filter/filter-impl.ts b/packages/osrl/src/liquidjs/template/filter/filter-impl.ts new file mode 100644 index 00000000..6602b86f --- /dev/null +++ b/packages/osrl/src/liquidjs/template/filter/filter-impl.ts @@ -0,0 +1,7 @@ +import { Context } from '../../context/context' +import { Liquid } from '../../liquid' + +export interface FilterImpl { + context: Context; + liquid: Liquid; +} diff --git a/packages/osrl/src/liquidjs/template/filter/filter-map.ts b/packages/osrl/src/liquidjs/template/filter/filter-map.ts new file mode 100644 index 00000000..8ad41498 --- /dev/null +++ b/packages/osrl/src/liquidjs/template/filter/filter-map.ts @@ -0,0 +1,28 @@ +import { FilterImplOptions } from './filter-impl-options' +import { Filter } from './filter' +import { FilterArg } from '../../parser/filter-arg' +import { assert } from '../../util/assert' +import { Liquid } from '../../liquid' + +export class FilterMap { + private impls: {[key: string]: FilterImplOptions} = {} + + constructor ( + private readonly strictFilters: boolean, + private readonly liquid: Liquid + ) {} + + get (name: string) { + const impl = this.impls[name] + assert(impl || !this.strictFilters, () => `undefined filter: ${name}`) + return impl + } + + set (name: string, impl: FilterImplOptions) { + this.impls[name] = impl + } + + create (name: string, args: FilterArg[]) { + return new Filter(name, this.get(name), args, this.liquid) + } +} diff --git a/packages/osrl/src/liquidjs/template/filter/filter.ts b/packages/osrl/src/liquidjs/template/filter/filter.ts new file mode 100644 index 00000000..771f8777 --- /dev/null +++ b/packages/osrl/src/liquidjs/template/filter/filter.ts @@ -0,0 +1,28 @@ +import { evalToken } from '../../render/expression' +import { Context } from '../../context/context' +import { identify } from '../../util/underscore' +import { FilterImplOptions } from './filter-impl-options' +import { FilterArg, isKeyValuePair } from '../../parser/filter-arg' +import { Liquid } from '../../liquid' + +export class Filter { + public name: string + public args: FilterArg[] + private impl: FilterImplOptions + private liquid: Liquid + + public constructor (name: string, impl: FilterImplOptions, args: FilterArg[], liquid: Liquid) { + this.name = name + this.impl = impl || identify + this.args = args + this.liquid = liquid + } + public render (value: any, context: Context) { + const argv: any[] = [] + for (const arg of this.args as FilterArg[]) { + if (isKeyValuePair(arg)) argv.push([arg[0], evalToken(arg[1], context)]) + else argv.push(evalToken(arg, context)) + } + return this.impl.apply({ context, liquid: this.liquid }, [value, ...argv]) + } +} diff --git a/packages/osrl/src/liquidjs/template/html.ts b/packages/osrl/src/liquidjs/template/html.ts new file mode 100644 index 00000000..50cfdb8b --- /dev/null +++ b/packages/osrl/src/liquidjs/template/html.ts @@ -0,0 +1,16 @@ +import { TemplateImpl } from '../template/template-impl' +import { Template } from '../template/template' +import { HTMLToken } from '../tokens/html-token' +import { Context } from '../context/context' +import { Emitter } from '../emitters/emitter' + +export class HTML extends TemplateImpl implements Template { + private str: string + public constructor (token: HTMLToken) { + super(token) + this.str = token.getContent() + } + public * render (ctx: Context, emitter: Emitter): IterableIterator { + emitter.write(this.str) + } +} diff --git a/packages/osrl/src/liquidjs/template/output.ts b/packages/osrl/src/liquidjs/template/output.ts new file mode 100644 index 00000000..5cabdc63 --- /dev/null +++ b/packages/osrl/src/liquidjs/template/output.ts @@ -0,0 +1,27 @@ +import { Value } from './value' +import { TemplateImpl } from '../template/template-impl' +import { Template } from '../template/template' +import { Context } from '../context/context' +import { Emitter } from '../emitters/emitter' +import { OutputToken } from '../tokens/output-token' +import { Liquid } from '../liquid' +import { Filter } from './filter/filter' + +export class Output extends TemplateImpl implements Template { + private value: Value + public constructor (token: OutputToken, liquid: Liquid) { + super(token) + this.value = new Value(token.content, liquid) + const filters = this.value.filters + const outputEscape = liquid.options.outputEscape + if (filters.length && filters[filters.length - 1].name === 'raw') { + filters.pop() + } else if (outputEscape) { + filters.push(new Filter(toString.call(outputEscape), outputEscape, [], liquid)) + } + } + public * render (ctx: Context, emitter: Emitter): IterableIterator { + const val = yield this.value.value(ctx, false) + emitter.write(val) + } +} diff --git a/packages/osrl/src/liquidjs/template/tag/hash.ts b/packages/osrl/src/liquidjs/template/tag/hash.ts new file mode 100644 index 00000000..27394528 --- /dev/null +++ b/packages/osrl/src/liquidjs/template/tag/hash.ts @@ -0,0 +1,32 @@ +import { evalToken } from '../../render/expression' +import { Context } from '../../context/context' +import { Tokenizer } from '../../parser/tokenizer' + +export interface HashValue { + [key: string]: any; +} + +/** + * Key-Value Pairs Representing Tag Arguments + * Example: + * For the markup `, foo:'bar', coo:2 reversed %}`, + * hash['foo'] === 'bar' + * hash['coo'] === 2 + * hash['reversed'] === undefined + */ +export class Hash { + hash: HashValue = {} + constructor (markup: string, jekyllStyle?: boolean) { + const tokenizer = new Tokenizer(markup, {}) + for (const hash of tokenizer.readHashes(jekyllStyle)) { + this.hash[hash.name.content] = hash.value + } + } + * render (ctx: Context): Generator { + const hash = {} + for (const key of Object.keys(this.hash)) { + hash[key] = this.hash[key] === undefined ? true : yield evalToken(this.hash[key], ctx) + } + return hash + } +} diff --git a/packages/osrl/src/liquidjs/template/tag/tag-impl-options.ts b/packages/osrl/src/liquidjs/template/tag/tag-impl-options.ts new file mode 100644 index 00000000..56a2d29f --- /dev/null +++ b/packages/osrl/src/liquidjs/template/tag/tag-impl-options.ts @@ -0,0 +1,11 @@ +import { Context } from '../../context/context' +import { TagToken } from '../../tokens/tag-token' +import { TopLevelToken } from '../../tokens/toplevel-token' +import { TagImpl } from './tag-impl' +import { HashValue } from '../../template/tag/hash' +import { Emitter } from '../../emitters/emitter' + +export interface TagImplOptions { + parse?: (this: TagImpl, token: TagToken, remainingTokens: TopLevelToken[]) => void; + render: (this: TagImpl, ctx: Context, emitter: Emitter, hash: HashValue) => void | string | Promise | Generator; +} diff --git a/packages/osrl/src/liquidjs/template/tag/tag-impl.ts b/packages/osrl/src/liquidjs/template/tag/tag-impl.ts new file mode 100644 index 00000000..904b833f --- /dev/null +++ b/packages/osrl/src/liquidjs/template/tag/tag-impl.ts @@ -0,0 +1,7 @@ +import { Liquid } from '../../liquid' +import { TagImplOptions } from './tag-impl-options' + +export interface TagImpl extends TagImplOptions { + liquid: Liquid; + [key: string]: any; +} diff --git a/packages/osrl/src/liquidjs/template/tag/tag-map.ts b/packages/osrl/src/liquidjs/template/tag/tag-map.ts new file mode 100644 index 00000000..f23ed2ba --- /dev/null +++ b/packages/osrl/src/liquidjs/template/tag/tag-map.ts @@ -0,0 +1,16 @@ +import { TagImplOptions } from './tag-impl-options' +import { assert } from '../../util/assert' + +export class TagMap { + private impls: {[key: string]: TagImplOptions} = {} + + get (name: string) { + const impl = this.impls[name] + assert(impl, () => `tag "${name}" not found`) + return impl + } + + set (name: string, impl: TagImplOptions) { + this.impls[name] = impl + } +} diff --git a/packages/osrl/src/liquidjs/template/tag/tag.ts b/packages/osrl/src/liquidjs/template/tag/tag.ts new file mode 100644 index 00000000..8bfb7c27 --- /dev/null +++ b/packages/osrl/src/liquidjs/template/tag/tag.ts @@ -0,0 +1,29 @@ +import { isFunction } from '../../util/underscore' +import { Liquid } from '../../liquid' +import { TemplateImpl } from '../../template/template-impl' +import { Emitter, Hash, Context, TagToken, Template, TopLevelToken } from '../../types' +import { TagImpl } from './tag-impl' +import { HashValue } from './hash' + +export class Tag extends TemplateImpl implements Template { + public name: string + private impl: TagImpl + + public constructor (token: TagToken, tokens: TopLevelToken[], liquid: Liquid) { + super(token) + this.name = token.name + + const impl = liquid.tags.get(token.name) + + this.impl = Object.create(impl) + this.impl.liquid = liquid + if (this.impl.parse) { + this.impl.parse(token, tokens) + } + } + public * render (ctx: Context, emitter: Emitter): Generator { + const hash = (yield new Hash(this.token.args).render(ctx)) as HashValue + const impl = this.impl + if (isFunction(impl.render)) return yield impl.render(ctx, emitter, hash) + } +} diff --git a/packages/osrl/src/liquidjs/template/template-impl.ts b/packages/osrl/src/liquidjs/template/template-impl.ts new file mode 100644 index 00000000..3b8e9c88 --- /dev/null +++ b/packages/osrl/src/liquidjs/template/template-impl.ts @@ -0,0 +1,6 @@ +export abstract class TemplateImpl { + public token: T; + public constructor (token: T) { + this.token = token + } +} diff --git a/packages/osrl/src/liquidjs/template/template.ts b/packages/osrl/src/liquidjs/template/template.ts new file mode 100644 index 00000000..f210ba70 --- /dev/null +++ b/packages/osrl/src/liquidjs/template/template.ts @@ -0,0 +1,8 @@ +import { Context } from '../context/context' +import { Token } from '../tokens/token' +import { Emitter } from '../emitters/emitter' + +export interface Template { + token: Token; + render(ctx: Context, emitter: Emitter): any; +} diff --git a/packages/osrl/src/liquidjs/template/value.ts b/packages/osrl/src/liquidjs/template/value.ts new file mode 100644 index 00000000..0a1bae05 --- /dev/null +++ b/packages/osrl/src/liquidjs/template/value.ts @@ -0,0 +1,28 @@ +import { Expression } from '../render/expression' +import { Tokenizer } from '../parser/tokenizer' +import { Filter } from './filter/filter' +import { Context } from '../context/context' +import { Liquid } from '../liquid' + +export class Value { + public readonly filters: Filter[] = [] + public readonly initial: Expression + + /** + * @param str the value to be valuated, eg.: "foobar" | truncate: 3 + */ + public constructor (str: string, liquid: Liquid) { + const tokenizer = new Tokenizer(str, liquid.options.operatorsTrie) + this.initial = tokenizer.readExpression() + this.filters = tokenizer.readFilters().map(({ name, args }) => new Filter(name, liquid.filters.get(name), args, liquid)) + } + public * value (ctx: Context, lenient: boolean): Generator { + lenient = lenient || (ctx.opts.lenientIf && this.filters.length > 0 && this.filters[0].name === 'default') + let val = yield this.initial.evaluate(ctx, lenient) + + for (const filter of this.filters) { + val = yield filter.render(val, ctx) + } + return val + } +} diff --git a/packages/osrl/src/liquidjs/tokens/delimited-token.ts b/packages/osrl/src/liquidjs/tokens/delimited-token.ts new file mode 100644 index 00000000..1a9f2948 --- /dev/null +++ b/packages/osrl/src/liquidjs/tokens/delimited-token.ts @@ -0,0 +1,32 @@ +import { Token } from './token' +import { TokenKind } from '../parser/token-kind' +import { last } from '../util/underscore' + +export abstract class DelimitedToken extends Token { + public trimLeft = false + public trimRight = false + public content: string + public constructor ( + kind: TokenKind, + content: string, + input: string, + begin: number, + end: number, + trimLeft: boolean, + trimRight: boolean, + file?: string + ) { + super(kind, input, begin, end, file) + this.content = this.getText() + const tl = content[0] === '-' + const tr = last(content) === '-' + this.content = content + .slice( + tl ? 1 : 0, + tr ? -1 : content.length + ) + .trim() + this.trimLeft = tl || trimLeft + this.trimRight = tr || trimRight + } +} diff --git a/packages/osrl/src/liquidjs/tokens/filter-token.ts b/packages/osrl/src/liquidjs/tokens/filter-token.ts new file mode 100644 index 00000000..dbd8b326 --- /dev/null +++ b/packages/osrl/src/liquidjs/tokens/filter-token.ts @@ -0,0 +1,16 @@ +import { Token } from './token' +import { FilterArg } from '../parser/filter-arg' +import { TokenKind } from '../parser/token-kind' + +export class FilterToken extends Token { + public constructor ( + public name: string, + public args: FilterArg[], + input: string, + begin: number, + end: number, + file?: string + ) { + super(TokenKind.Filter, input, begin, end, file) + } +} diff --git a/packages/osrl/src/liquidjs/tokens/hash-token.ts b/packages/osrl/src/liquidjs/tokens/hash-token.ts new file mode 100644 index 00000000..6f691939 --- /dev/null +++ b/packages/osrl/src/liquidjs/tokens/hash-token.ts @@ -0,0 +1,17 @@ +import { Token } from './token' +import { ValueToken } from './value-token' +import { IdentifierToken } from './identifier-token' +import { TokenKind } from '../parser/token-kind' + +export class HashToken extends Token { + constructor ( + public input: string, + public begin: number, + public end: number, + public name: IdentifierToken, + public value?: ValueToken, + public file?: string + ) { + super(TokenKind.Hash, input, begin, end, file) + } +} diff --git a/packages/osrl/src/liquidjs/tokens/html-token.ts b/packages/osrl/src/liquidjs/tokens/html-token.ts new file mode 100644 index 00000000..015467fd --- /dev/null +++ b/packages/osrl/src/liquidjs/tokens/html-token.ts @@ -0,0 +1,18 @@ +import { Token } from './token' +import { TokenKind } from '../parser/token-kind' + +export class HTMLToken extends Token { + trimLeft = 0 + trimRight = 0 + constructor ( + public input: string, + public begin: number, + public end: number, + public file?: string + ) { + super(TokenKind.HTML, input, begin, end, file) + } + public getContent () { + return this.input.slice(this.begin + this.trimLeft, this.end - this.trimRight) + } +} diff --git a/packages/osrl/src/liquidjs/tokens/identifier-token.ts b/packages/osrl/src/liquidjs/tokens/identifier-token.ts new file mode 100644 index 00000000..056a85de --- /dev/null +++ b/packages/osrl/src/liquidjs/tokens/identifier-token.ts @@ -0,0 +1,25 @@ +import { Token } from './token' +import { NUMBER, TYPES, SIGN } from '../util/character' +import { TokenKind } from '../parser/token-kind' + +export class IdentifierToken extends Token { + public content: string + constructor ( + public input: string, + public begin: number, + public end: number, + public file?: string + ) { + super(TokenKind.Word, input, begin, end, file) + this.content = this.getText() + } + isNumber (allowSign = false) { + const begin = allowSign && TYPES[this.input.charCodeAt(this.begin)] & SIGN + ? this.begin + 1 + : this.begin + for (let i = begin; i < this.end; i++) { + if (!(TYPES[this.input.charCodeAt(i)] & NUMBER)) return false + } + return true + } +} diff --git a/packages/osrl/src/liquidjs/tokens/liquid-tag-token.ts b/packages/osrl/src/liquidjs/tokens/liquid-tag-token.ts new file mode 100644 index 00000000..e8a0f6fa --- /dev/null +++ b/packages/osrl/src/liquidjs/tokens/liquid-tag-token.ts @@ -0,0 +1,33 @@ +import { DelimitedToken } from './delimited-token' +import { TokenizationError } from '../util/error' +import { NormalizedFullOptions } from '../liquid-options' +import { TokenKind } from '../parser/token-kind' +import { Tokenizer } from '../parser/tokenizer' + +export class LiquidTagToken extends DelimitedToken { + public name: string + public args: string + public constructor ( + input: string, + begin: number, + end: number, + options: NormalizedFullOptions, + file?: string + ) { + const value = input.slice(begin, end) + super(TokenKind.Tag, value, input, begin, end, false, false, file) + + if (!/\S/.test(value)) { + // A line that contains only whitespace. + this.name = '' + this.args = '' + } else { + const tokenizer = new Tokenizer(this.content, options.operatorsTrie) + this.name = tokenizer.readTagName() + if (!this.name) throw new TokenizationError(`illegal liquid tag syntax`, this) + + tokenizer.skipBlank() + this.args = tokenizer.remaining() + } + } +} diff --git a/packages/osrl/src/liquidjs/tokens/literal-token.ts b/packages/osrl/src/liquidjs/tokens/literal-token.ts new file mode 100644 index 00000000..4e6a56be --- /dev/null +++ b/packages/osrl/src/liquidjs/tokens/literal-token.ts @@ -0,0 +1,15 @@ +import { Token } from './token' +import { TokenKind } from '../parser/token-kind' + +export class LiteralToken extends Token { + public literal: string + public constructor ( + public input: string, + public begin: number, + public end: number, + public file?: string + ) { + super(TokenKind.Literal, input, begin, end, file) + this.literal = this.getText() + } +} diff --git a/packages/osrl/src/liquidjs/tokens/number-token.ts b/packages/osrl/src/liquidjs/tokens/number-token.ts new file mode 100644 index 00000000..e8ea5da2 --- /dev/null +++ b/packages/osrl/src/liquidjs/tokens/number-token.ts @@ -0,0 +1,12 @@ +import { Token } from './token' +import { IdentifierToken } from './identifier-token' +import { TokenKind } from '../parser/token-kind' + +export class NumberToken extends Token { + constructor ( + public whole: IdentifierToken, + public decimal?: IdentifierToken + ) { + super(TokenKind.Number, whole.input, whole.begin, decimal ? decimal.end : whole.end, whole.file) + } +} diff --git a/packages/osrl/src/liquidjs/tokens/operator-token.ts b/packages/osrl/src/liquidjs/tokens/operator-token.ts new file mode 100644 index 00000000..fd1f93a1 --- /dev/null +++ b/packages/osrl/src/liquidjs/tokens/operator-token.ts @@ -0,0 +1,31 @@ +import { Token } from './token' +import { TokenKind } from '../parser/token-kind' + +export const precedence = { + '==': 1, + '!=': 1, + '>': 1, + '<': 1, + '>=': 1, + '<=': 1, + 'contains': 1, + 'and': 0, + 'or': 0 +} + +export class OperatorToken extends Token { + public operator: string + public constructor ( + public input: string, + public begin: number, + public end: number, + public file?: string + ) { + super(TokenKind.Operator, input, begin, end, file) + this.operator = this.getText() + } + getPrecedence () { + const key = this.getText() + return key in precedence ? precedence[key] : 1 + } +} diff --git a/packages/osrl/src/liquidjs/tokens/output-token.ts b/packages/osrl/src/liquidjs/tokens/output-token.ts new file mode 100644 index 00000000..d6f8b748 --- /dev/null +++ b/packages/osrl/src/liquidjs/tokens/output-token.ts @@ -0,0 +1,17 @@ +import { DelimitedToken } from './delimited-token' +import { NormalizedFullOptions } from '../liquid-options' +import { TokenKind } from '../parser/token-kind' + +export class OutputToken extends DelimitedToken { + public constructor ( + input: string, + begin: number, + end: number, + options: NormalizedFullOptions, + file?: string + ) { + const { trimOutputLeft, trimOutputRight, outputDelimiterLeft, outputDelimiterRight } = options + const value = input.slice(begin + outputDelimiterLeft.length, end - outputDelimiterRight.length) + super(TokenKind.Output, value, input, begin, end, trimOutputLeft, trimOutputRight, file) + } +} diff --git a/packages/osrl/src/liquidjs/tokens/property-access-token.ts b/packages/osrl/src/liquidjs/tokens/property-access-token.ts new file mode 100644 index 00000000..44262bbb --- /dev/null +++ b/packages/osrl/src/liquidjs/tokens/property-access-token.ts @@ -0,0 +1,19 @@ +import { Token } from './token' +import { IdentifierToken } from './identifier-token' +import { QuotedToken } from './quoted-token' +import { TokenKind } from '../parser/token-kind' +import { parseStringLiteral } from '../parser/parse-string-literal' + +export class PropertyAccessToken extends Token { + public propertyName: string + constructor ( + public variable: IdentifierToken | QuotedToken, + public props: (IdentifierToken | QuotedToken | PropertyAccessToken)[], + end: number + ) { + super(TokenKind.PropertyAccess, variable.input, variable.begin, end, variable.file) + this.propertyName = this.variable instanceof IdentifierToken + ? this.variable.getText() + : parseStringLiteral(this.variable.getText()) + } +} diff --git a/packages/osrl/src/liquidjs/tokens/quoted-token.ts b/packages/osrl/src/liquidjs/tokens/quoted-token.ts new file mode 100644 index 00000000..803023a3 --- /dev/null +++ b/packages/osrl/src/liquidjs/tokens/quoted-token.ts @@ -0,0 +1,13 @@ +import { Token } from './token' +import { TokenKind } from '../parser/token-kind' + +export class QuotedToken extends Token { + constructor ( + public input: string, + public begin: number, + public end: number, + public file?: string + ) { + super(TokenKind.Quoted, input, begin, end, file) + } +} diff --git a/packages/osrl/src/liquidjs/tokens/range-token.ts b/packages/osrl/src/liquidjs/tokens/range-token.ts new file mode 100644 index 00000000..62ffa872 --- /dev/null +++ b/packages/osrl/src/liquidjs/tokens/range-token.ts @@ -0,0 +1,16 @@ +import { Token } from './token' +import { ValueToken } from './value-token' +import { TokenKind } from '../parser/token-kind' + +export class RangeToken extends Token { + constructor ( + public input: string, + public begin: number, + public end: number, + public lhs: ValueToken, + public rhs: ValueToken, + public file?: string + ) { + super(TokenKind.Range, input, begin, end, file) + } +} diff --git a/packages/osrl/src/liquidjs/tokens/tag-token.ts b/packages/osrl/src/liquidjs/tokens/tag-token.ts new file mode 100644 index 00000000..b8ebecce --- /dev/null +++ b/packages/osrl/src/liquidjs/tokens/tag-token.ts @@ -0,0 +1,28 @@ +import { DelimitedToken } from './delimited-token' +import { TokenizationError } from '../util/error' +import { NormalizedFullOptions } from '../liquid-options' +import { TokenKind } from '../parser/token-kind' +import { Tokenizer } from '../parser/tokenizer' + +export class TagToken extends DelimitedToken { + public name: string + public args: string + public constructor ( + input: string, + begin: number, + end: number, + options: NormalizedFullOptions, + file?: string + ) { + const { trimTagLeft, trimTagRight, tagDelimiterLeft, tagDelimiterRight } = options + const value = input.slice(begin + tagDelimiterLeft.length, end - tagDelimiterRight.length) + super(TokenKind.Tag, value, input, begin, end, trimTagLeft, trimTagRight, file) + + const tokenizer = new Tokenizer(this.content, options.operatorsTrie) + this.name = tokenizer.readTagName() + if (!this.name) throw new TokenizationError(`illegal tag syntax`, this) + + tokenizer.skipBlank() + this.args = tokenizer.remaining() + } +} diff --git a/packages/osrl/src/liquidjs/tokens/token.ts b/packages/osrl/src/liquidjs/tokens/token.ts new file mode 100644 index 00000000..9cae30a6 --- /dev/null +++ b/packages/osrl/src/liquidjs/tokens/token.ts @@ -0,0 +1,27 @@ +import { TokenKind } from '../parser/token-kind' + +export abstract class Token { + public constructor ( + public kind: TokenKind, + public input: string, + public begin: number, + public end: number, + public file?: string + ) {} + public getText () { + return this.input.slice(this.begin, this.end) + } + public getPosition () { + let [row, col] = [1, 1] + for (let i = 0; i < this.begin; i++) { + if (this.input[i] === '\n') { + row++ + col = 1 + } else col++ + } + return [row, col] + } + public size () { + return this.end - this.begin + } +} diff --git a/packages/osrl/src/liquidjs/tokens/toplevel-token.ts b/packages/osrl/src/liquidjs/tokens/toplevel-token.ts new file mode 100644 index 00000000..320d2df5 --- /dev/null +++ b/packages/osrl/src/liquidjs/tokens/toplevel-token.ts @@ -0,0 +1,5 @@ +import { TagToken } from './tag-token' +import { HTMLToken } from './html-token' +import { OutputToken } from './output-token' + +export type TopLevelToken = TagToken | OutputToken | HTMLToken diff --git a/packages/osrl/src/liquidjs/tokens/value-token.ts b/packages/osrl/src/liquidjs/tokens/value-token.ts new file mode 100644 index 00000000..55650ce3 --- /dev/null +++ b/packages/osrl/src/liquidjs/tokens/value-token.ts @@ -0,0 +1,6 @@ +import { RangeToken } from './range-token' +import { LiteralToken } from './literal-token' +import { QuotedToken } from './quoted-token' +import { PropertyAccessToken } from './property-access-token' + +export type ValueToken = RangeToken | LiteralToken | QuotedToken | PropertyAccessToken diff --git a/packages/osrl/src/liquidjs/types.ts b/packages/osrl/src/liquidjs/types.ts new file mode 100644 index 00000000..1c48f8ad --- /dev/null +++ b/packages/osrl/src/liquidjs/types.ts @@ -0,0 +1,30 @@ +/* istanbul ignore file */ +import * as TypeGuards from './util/type-guards' +export { TypeGuards } +export { ParseError, TokenizationError, AssertionError } from './util/error' +export { assert } from './util/assert' +export { Drop } from './drop/drop' +export { Emitter } from './emitters/emitter' +export { Expression } from './render/expression' +export { isFalsy, isTruthy } from './render/boolean' +export { TagToken } from './tokens/tag-token' +export { Context } from './context/context' +export { Template } from './template/template' +export { FilterImplOptions } from './template/filter/filter-impl-options' +export { TagImplOptions } from './template/tag/tag-impl-options' +export { TagImpl } from './template/tag/tag-impl' +export { ParseStream } from './parser/parse-stream' +export { Token } from './tokens/token' +export { TokenKind } from './parser/token-kind' +export { TopLevelToken } from './tokens/toplevel-token' +export { Tokenizer } from './parser/tokenizer' +export { Hash } from './template/tag/hash' +export { Value } from './template/value' +export { evalToken, evalQuotedToken } from './render/expression' +export { toPromise, toThenable } from './util/async' +export { defaultOperators, Operators } from './render/operator' +export { createTrie, Trie } from './util/operator-trie' +export { toValue } from './util/underscore' +export { TimezoneDate } from './util/timezone-date' +export * as filters from './builtin/filters' +export * as tags from './builtin/tags' diff --git a/packages/osrl/src/liquidjs/util/assert.ts b/packages/osrl/src/liquidjs/util/assert.ts new file mode 100644 index 00000000..67dcd7ec --- /dev/null +++ b/packages/osrl/src/liquidjs/util/assert.ts @@ -0,0 +1,10 @@ +import { AssertionError } from './error' + +export function assert (predicate: T | null | undefined, message?: string | (() => string)) { + if (!predicate) { + const msg = typeof message === 'function' + ? message() + : (message || `expect ${predicate} to be true`) + throw new AssertionError(msg) + } +} diff --git a/packages/osrl/src/liquidjs/util/async.ts b/packages/osrl/src/liquidjs/util/async.ts new file mode 100644 index 00000000..3dba5cb9 --- /dev/null +++ b/packages/osrl/src/liquidjs/util/async.ts @@ -0,0 +1,48 @@ +import { isPromise, isIterator } from './underscore' + +// convert an async iterator to a Promise +export async function toPromise (val: Generator | Promise | T): Promise { + if (!isIterator(val)) return val + let value: unknown + let done = false + let next = 'next' + do { + const state = val[next](value) + done = state.done + value = state.value + next = 'next' + try { + if (isIterator(value)) value = toPromise(value) + if (isPromise(value)) value = await value + } catch (err) { + next = 'throw' + value = err + } + } while (!done) + return value as T +} + +// convert an async iterator to a value in a synchronous manner +export function toValueSync (val: Generator | T): T { + if (!isIterator(val)) return val + let value: any + let done = false + let next = 'next' + do { + const state = val[next](value) + done = state.done + value = state.value + next = 'next' + if (isIterator(value)) { + try { + value = toValueSync(value) + } catch (err) { + next = 'throw' + value = err + } + } + } while (!done) + return value +} + +export const toThenable = toPromise diff --git a/packages/osrl/src/liquidjs/util/character.ts b/packages/osrl/src/liquidjs/util/character.ts new file mode 100644 index 00000000..cbec80b3 --- /dev/null +++ b/packages/osrl/src/liquidjs/util/character.ts @@ -0,0 +1,13 @@ +// **DO NOT CHANGE THIS FILE** +// +// This file is generated by bin/character-gen.js +// bitmask character types to boost performance +export const TYPES = [0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 4, 4, 4, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 2, 8, 0, 0, 0, 0, 8, 0, 0, 0, 64, 0, 65, 0, 0, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 0, 0, 2, 2, 2, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0] +export const IDENTIFIER = 1 +export const OPERATOR = 2 +export const BLANK = 4 +export const QUOTE = 8 +export const INLINE_BLANK = 16 +export const NUMBER = 32 +export const SIGN = 64 +TYPES[160] = TYPES[5760] = TYPES[6158] = TYPES[8192] = TYPES[8193] = TYPES[8194] = TYPES[8195] = TYPES[8196] = TYPES[8197] = TYPES[8198] = TYPES[8199] = TYPES[8200] = TYPES[8201] = TYPES[8202] = TYPES[8232] = TYPES[8233] = TYPES[8239] = TYPES[8287] = TYPES[12288] = BLANK diff --git a/packages/osrl/src/liquidjs/util/collection.ts b/packages/osrl/src/liquidjs/util/collection.ts new file mode 100644 index 00000000..b43b7ad3 --- /dev/null +++ b/packages/osrl/src/liquidjs/util/collection.ts @@ -0,0 +1,16 @@ +import { isNil, isString, isObject, isArray, isIterable, toValue } from './underscore' + +export function toEnumerable (val: any) { + val = toValue(val) + if (isArray(val)) return val + if (isString(val) && val.length > 0) return [val] + if (isIterable(val)) return Array.from(val) + if (isObject(val)) return Object.keys(val).map((key) => [key, val[key]]) + return [] +} + +export function toArray (val: any) { + if (isNil(val)) return [] + if (isArray(val)) return val + return [ val ] +} diff --git a/packages/osrl/src/liquidjs/util/error.ts b/packages/osrl/src/liquidjs/util/error.ts new file mode 100644 index 00000000..f92930e5 --- /dev/null +++ b/packages/osrl/src/liquidjs/util/error.ts @@ -0,0 +1,106 @@ +import * as _ from './underscore' +import { Token } from '../tokens/token' +import { Template } from '../template/template' + +export abstract class LiquidError extends Error { + private token: Token + public context: string + private originalError: Error + public constructor (err: Error, token: Token) { + super(err.message) + this.originalError = err + this.token = token + this.context = '' + } + protected update () { + const err = this.originalError + this.context = mkContext(this.token) + this.message = mkMessage(err.message, this.token) + this.stack = this.message + '\n' + this.context + + '\n' + this.stack + '\nFrom ' + err.stack + } +} + +export class TokenizationError extends LiquidError { + public constructor (message: string, token: Token) { + super(new Error(message), token) + this.name = 'TokenizationError' + super.update() + } +} + +export class ParseError extends LiquidError { + public constructor (err: Error, token: Token) { + super(err, token) + this.name = 'ParseError' + this.message = err.message + super.update() + } +} + +export class RenderError extends LiquidError { + public constructor (err: Error, tpl: Template) { + super(err, tpl.token) + this.name = 'RenderError' + this.message = err.message + super.update() + } + public static is (obj: any): obj is RenderError { + return obj.name === 'RenderError' + } +} + +export class UndefinedVariableError extends LiquidError { + public constructor (err: Error, token: Token) { + super(err, token) + this.name = 'UndefinedVariableError' + this.message = err.message + super.update() + } +} + +// only used internally; raised where we don't have token information, +// so it can't be an UndefinedVariableError. +export class InternalUndefinedVariableError extends Error { + variableName: string + + public constructor (variableName: string) { + super(`undefined variable: ${variableName}`) + this.name = 'InternalUndefinedVariableError' + this.variableName = variableName + } +} + +export class AssertionError extends Error { + public constructor (message: string) { + super(message) + this.name = 'AssertionError' + this.message = message + '' + } +} + +function mkContext (token: Token) { + const [line] = token.getPosition() + const lines = token.input.split('\n') + const begin = Math.max(line - 2, 1) + const end = Math.min(line + 3, lines.length) + + const context = _ + .range(begin, end + 1) + .map(lineNumber => { + const indicator = (lineNumber === line) ? '>> ' : ' ' + const num = _.padStart(String(lineNumber), String(end).length) + const text = lines[lineNumber - 1] + return `${indicator}${num}| ${text}` + }) + .join('\n') + + return context +} + +function mkMessage (msg: string, token: Token) { + if (token.file) msg += `, file:${token.file}` + const [line, col] = token.getPosition() + msg += `, line:${line}, col:${col}` + return msg +} diff --git a/packages/osrl/src/liquidjs/util/liquid-date.ts b/packages/osrl/src/liquidjs/util/liquid-date.ts new file mode 100644 index 00000000..fb2c348f --- /dev/null +++ b/packages/osrl/src/liquidjs/util/liquid-date.ts @@ -0,0 +1,19 @@ +/** + * The date interface LiquidJS uses. + * Basically a subset of JavaScript Date, + * it's defined abstractly here to allow different implementation + */ +export interface LiquidDate { + getTime(): number; + getMilliseconds(): number; + getSeconds(): number; + getMinutes(): number; + getHours(): number; + getDay(): number; + getDate(): number; + getMonth(): number; + getFullYear(): number; + getTimezoneOffset(): number; + toLocaleTimeString(): string; + toLocaleDateString(): string; +} diff --git a/packages/osrl/src/liquidjs/util/literal.ts b/packages/osrl/src/liquidjs/util/literal.ts new file mode 100644 index 00000000..212d0424 --- /dev/null +++ b/packages/osrl/src/liquidjs/util/literal.ts @@ -0,0 +1,13 @@ +import { NullDrop } from '../drop/null-drop' +import { EmptyDrop } from '../drop/empty-drop' +import { BlankDrop } from '../drop/blank-drop' + +const nil = new NullDrop() +export const literalValues = { + 'true': true, + 'false': false, + 'nil': nil, + 'null': nil, + 'empty': new EmptyDrop(), + 'blank': new BlankDrop() +} diff --git a/packages/osrl/src/liquidjs/util/operator-trie.ts b/packages/osrl/src/liquidjs/util/operator-trie.ts new file mode 100644 index 00000000..94d3acb8 --- /dev/null +++ b/packages/osrl/src/liquidjs/util/operator-trie.ts @@ -0,0 +1,28 @@ +import { Operators } from '../render/operator' +import { IDENTIFIER, TYPES } from '../util/character' + +export interface Trie { + [key: string]: any; +} + +export function createTrie (operators: Operators): Trie { + const trie: Trie = {} + for (const [name, handler] of Object.entries(operators)) { + let node = trie + + for (let i = 0; i < name.length; i++) { + const c = name[i] + node[c] = node[c] || {} + + if (i === name.length - 1 && (TYPES[name.charCodeAt(i)] & IDENTIFIER)) { + node[c].needBoundary = true + } + + node = node[c] + } + + node.handler = handler + node.end = true + } + return trie +} diff --git a/packages/osrl/src/liquidjs/util/strftime.ts b/packages/osrl/src/liquidjs/util/strftime.ts new file mode 100644 index 00000000..e50dba71 --- /dev/null +++ b/packages/osrl/src/liquidjs/util/strftime.ts @@ -0,0 +1,170 @@ +import { changeCase, padStart, padEnd } from './underscore' +import { LiquidDate } from './liquid-date' + +const rFormat = /%([-_0^#:]+)?(\d+)?([EO])?(.)/ +const monthNames = [ + 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', + 'September', 'October', 'November', 'December' +] +const dayNames = [ + 'Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday' +] +const monthNamesShort = monthNames.map(abbr) +const dayNamesShort = dayNames.map(abbr) +const suffixes = { + 1: 'st', + 2: 'nd', + 3: 'rd', + 'default': 'th' +} +interface FormatOptions { + flags: object; + width?: string; + modifier?: string; +} + +function abbr (str: string) { + return str.slice(0, 3) +} + +// prototype extensions +function daysInMonth (d: LiquidDate) { + const feb = isLeapYear(d) ? 29 : 28 + return [31, feb, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31] +} +function getDayOfYear (d: LiquidDate) { + let num = 0 + for (let i = 0; i < d.getMonth(); ++i) { + num += daysInMonth(d)[i] + } + return num + d.getDate() +} +function getWeekOfYear (d: LiquidDate, startDay: number) { + // Skip to startDay of this week + const now = getDayOfYear(d) + (startDay - d.getDay()) + // Find the first startDay of the year + const jan1 = new Date(d.getFullYear(), 0, 1) + const then = (7 - jan1.getDay() + startDay) + return String(Math.floor((now - then) / 7) + 1) +} +function isLeapYear (d: LiquidDate) { + const year = d.getFullYear() + return !!((year & 3) === 0 && (year % 100 || (year % 400 === 0 && year))) +} +function getSuffix (d: LiquidDate) { + const str = d.getDate().toString() + const index = parseInt(str.slice(-1)) + return suffixes[index] || suffixes['default'] +} +function century (d: LiquidDate) { + return parseInt(d.getFullYear().toString().substring(0, 2), 10) +} + +// default to 0 +const padWidths = { + d: 2, + e: 2, + H: 2, + I: 2, + j: 3, + k: 2, + l: 2, + L: 3, + m: 2, + M: 2, + S: 2, + U: 2, + W: 2 +} + +// default to '0' +const padChars = { + a: ' ', + A: ' ', + b: ' ', + B: ' ', + c: ' ', + e: ' ', + k: ' ', + l: ' ', + p: ' ', + P: ' ' +} +const formatCodes = { + a: (d: LiquidDate) => dayNamesShort[d.getDay()], + A: (d: LiquidDate) => dayNames[d.getDay()], + b: (d: LiquidDate) => monthNamesShort[d.getMonth()], + B: (d: LiquidDate) => monthNames[d.getMonth()], + c: (d: LiquidDate) => d.toLocaleString(), + C: (d: LiquidDate) => century(d), + d: (d: LiquidDate) => d.getDate(), + e: (d: LiquidDate) => d.getDate(), + H: (d: LiquidDate) => d.getHours(), + I: (d: LiquidDate) => String(d.getHours() % 12 || 12), + j: (d: LiquidDate) => getDayOfYear(d), + k: (d: LiquidDate) => d.getHours(), + l: (d: LiquidDate) => String(d.getHours() % 12 || 12), + L: (d: LiquidDate) => d.getMilliseconds(), + m: (d: LiquidDate) => d.getMonth() + 1, + M: (d: LiquidDate) => d.getMinutes(), + N: (d: LiquidDate, opts: FormatOptions) => { + const width = Number(opts.width) || 9 + const str = String(d.getMilliseconds()).substr(0, width) + return padEnd(str, width, '0') + }, + p: (d: LiquidDate) => (d.getHours() < 12 ? 'AM' : 'PM'), + P: (d: LiquidDate) => (d.getHours() < 12 ? 'am' : 'pm'), + q: (d: LiquidDate) => getSuffix(d), + s: (d: LiquidDate) => Math.round(d.getTime() / 1000), + S: (d: LiquidDate) => d.getSeconds(), + u: (d: LiquidDate) => d.getDay() || 7, + U: (d: LiquidDate) => getWeekOfYear(d, 0), + w: (d: LiquidDate) => d.getDay(), + W: (d: LiquidDate) => getWeekOfYear(d, 1), + x: (d: LiquidDate) => d.toLocaleDateString(), + X: (d: LiquidDate) => d.toLocaleTimeString(), + y: (d: LiquidDate) => d.getFullYear().toString().substring(2, 4), + Y: (d: LiquidDate) => d.getFullYear(), + z: (d: LiquidDate, opts: FormatOptions) => { + const nOffset = Math.abs(d.getTimezoneOffset()) + const h = Math.floor(nOffset / 60) + const m = nOffset % 60 + return (d.getTimezoneOffset() > 0 ? '-' : '+') + + padStart(h, 2, '0') + + (opts.flags[':'] ? ':' : '') + + padStart(m, 2, '0') + }, + 't': () => '\t', + 'n': () => '\n', + '%': () => '%' +}; +(formatCodes as any).h = formatCodes.b + +export default function (d: LiquidDate, formatStr: string) { + let output = '' + let remaining = formatStr + let match + while ((match = rFormat.exec(remaining))) { + output += remaining.slice(0, match.index) + remaining = remaining.slice(match.index + match[0].length) + output += format(d, match) + } + return output + remaining +} + +function format (d: LiquidDate, match: RegExpExecArray) { + const [input, flagStr = '', width, modifier, conversion] = match + const convert = formatCodes[conversion] + if (!convert) return input + const flags = {} + for (const flag of flagStr) flags[flag] = true + let ret = String(convert(d, { flags, width, modifier })) + let padChar = padChars[conversion] || '0' + let padWidth = width || padWidths[conversion] || 0 + if (flags['^']) ret = ret.toUpperCase() + else if (flags['#']) ret = changeCase(ret) + if (flags['_']) padChar = ' ' + else if (flags['0']) padChar = '0' + if (flags['-']) padWidth = 0 + return padStart(ret, padWidth, padChar) +} diff --git a/packages/osrl/src/liquidjs/util/timezone-date.ts b/packages/osrl/src/liquidjs/util/timezone-date.ts new file mode 100644 index 00000000..283cbc07 --- /dev/null +++ b/packages/osrl/src/liquidjs/util/timezone-date.ts @@ -0,0 +1,95 @@ +import { LiquidDate } from './liquid-date' + +// one minute in milliseconds +const OneMinute = 60000 +const hostTimezoneOffset = new Date().getTimezoneOffset() +const ISO8601_TIMEZONE_PATTERN = /([zZ]|([+-])(\d{2}):(\d{2}))$/ + +/** + * A date implementation with timezone info, just like Ruby date + * + * Implementation: + * - create a Date offset by it's timezone difference, avoiding overriding a bunch of methods + * - rewrite getTimezoneOffset() to trick strftime + */ +export class TimezoneDate implements LiquidDate { + private timezoneOffset: number + private date: Date + constructor (init: string | number | Date | TimezoneDate, timezoneOffset: number) { + if (init instanceof TimezoneDate) { + this.date = init.date + timezoneOffset = init.timezoneOffset + } else { + const diff = (hostTimezoneOffset - timezoneOffset) * OneMinute + const time = new Date(init).getTime() + diff + this.date = new Date(time) + } + this.timezoneOffset = timezoneOffset + } + + getTime () { + return this.date.getTime() + } + + getMilliseconds () { + return this.date.getMilliseconds() + } + getSeconds () { + return this.date.getSeconds() + } + getMinutes () { + return this.date.getMinutes() + } + getHours () { + return this.date.getHours() + } + getDay () { + return this.date.getDay() + } + getDate () { + return this.date.getDate() + } + getMonth () { + return this.date.getMonth() + } + getFullYear () { + return this.date.getFullYear() + } + toLocaleTimeString (locale?: string) { + return this.date.toLocaleTimeString(locale) + } + toLocaleDateString (locale?: string) { + return this.date.toLocaleDateString(locale) + } + getTimezoneOffset () { + return this.timezoneOffset! + } + + /** + * Create a Date object fixed to it's declared Timezone. Both + * - 2021-08-06T02:29:00.000Z and + * - 2021-08-06T02:29:00.000+08:00 + * will always be displayed as + * - 2021-08-06 02:29:00 + * regardless timezoneOffset in JavaScript realm + * + * The implementation hack: + * Instead of calling `.getMonth()`/`.getUTCMonth()` respect to `preserveTimezones`, + * we create a different Date to trick strftime, it's both simpler and more performant. + * Given that a template is expected to be parsed fewer times than rendered. + */ + static createDateFixedToTimezone (dateString: string): LiquidDate { + const m = dateString.match(ISO8601_TIMEZONE_PATTERN) + // representing a UTC timestamp + if (m && m[1] === 'Z') { + return new TimezoneDate(+new Date(dateString), 0) + } + // has a timezone specified + if (m && m[2] && m[3] && m[4]) { + const [, , sign, hours, minutes] = m + const delta = (sign === '+' ? -1 : 1) * (parseInt(hours, 10) * 60 + parseInt(minutes, 10)) + return new TimezoneDate(+new Date(dateString), delta) + } + return new Date(dateString) + } +} diff --git a/packages/osrl/src/liquidjs/util/type-guards.ts b/packages/osrl/src/liquidjs/util/type-guards.ts new file mode 100644 index 00000000..f2e02bf1 --- /dev/null +++ b/packages/osrl/src/liquidjs/util/type-guards.ts @@ -0,0 +1,60 @@ +import { OperatorToken } from '../tokens/operator-token' +import { DelimitedToken } from '../tokens/delimited-token' +import { IdentifierToken } from '../tokens/identifier-token' +import { TagToken } from '../tokens/tag-token' +import { HTMLToken } from '../tokens/html-token' +import { OutputToken } from '../tokens/output-token' +import { PropertyAccessToken } from '../tokens/property-access-token' +import { LiteralToken } from '../tokens/literal-token' +import { QuotedToken } from '../tokens/quoted-token' +import { NumberToken } from '../tokens/number-token' +import { RangeToken } from '../tokens/range-token' +import { TokenKind } from '../parser/token-kind' + +export function isDelimitedToken (val: any): val is DelimitedToken { + return !!(getKind(val) & TokenKind.Delimited) +} + +export function isOperatorToken (val: any): val is OperatorToken { + return getKind(val) === TokenKind.Operator +} + +export function isHTMLToken (val: any): val is HTMLToken { + return getKind(val) === TokenKind.HTML +} + +export function isOutputToken (val: any): val is OutputToken { + return getKind(val) === TokenKind.Output +} + +export function isTagToken (val: any): val is TagToken { + return getKind(val) === TokenKind.Tag +} + +export function isQuotedToken (val: any): val is QuotedToken { + return getKind(val) === TokenKind.Quoted +} + +export function isLiteralToken (val: any): val is LiteralToken { + return getKind(val) === TokenKind.Literal +} + +export function isNumberToken (val: any): val is NumberToken { + return getKind(val) === TokenKind.Number +} + +export function isPropertyAccessToken (val: any): val is PropertyAccessToken { + return getKind(val) === TokenKind.PropertyAccess +} + +export function isWordToken (val: any): val is IdentifierToken { + return getKind(val) === TokenKind.Word +} + +export function isRangeToken (val: any): val is RangeToken { + return getKind(val) === TokenKind.Range +} + +function getKind (val: any) { + return val ? val.kind : -1 +} diff --git a/packages/osrl/src/liquidjs/util/underscore.ts b/packages/osrl/src/liquidjs/util/underscore.ts new file mode 100644 index 00000000..002b19d6 --- /dev/null +++ b/packages/osrl/src/liquidjs/util/underscore.ts @@ -0,0 +1,174 @@ +import { Drop } from '../drop/drop' + +export const toString = Object.prototype.toString +const toLowerCase = String.prototype.toLowerCase + +export const hasOwnProperty = Object.hasOwnProperty + +export function isString (value: any): value is string { + return typeof value === 'string' +} + +// eslint-disable-next-line @typescript-eslint/ban-types +export function isFunction (value: any): value is Function { + return typeof value === 'function' +} + +export function isPromise (val: any): val is Promise { + return val && isFunction(val.then) +} + +export function isIterator (val: any): val is IterableIterator { + return val && isFunction(val.next) && isFunction(val.throw) && isFunction(val.return) +} + +export function escapeRegex (str: string) { + return str.replace(/[-/\\^$*+?.()|[\]{}]/g, '\\$&') +} + +export function promisify (fn: (arg1: T1, cb: (err: Error | null, result: T2) => void) => void): (arg1: T1) => Promise; +export function promisify (fn: (arg1: T1, arg2: T2, cb: (err: Error | null, result: T3) => void) => void): (arg1: T1, arg2: T2) => Promise; +export function promisify (fn: any) { + return function (...args: any[]) { + return new Promise((resolve, reject) => { + fn(...args, (err: Error, result: any) => { + err ? reject(err) : resolve(result) + }) + }) + } +} + +export function stringify (value: any): string { + value = toValue(value) + if (isString(value)) return value + if (isNil(value)) return '' + if (isArray(value)) return value.map(x => stringify(x)).join('') + return String(value) +} + +export function toValue (value: any): any { + return (value instanceof Drop && isFunction(value.valueOf)) ? value.valueOf() : value +} + +export function isNumber (value: any): value is number { + return typeof value === 'number' +} + +export function toLiquid (value: any): any { + if (value && isFunction(value.toLiquid)) return toLiquid(value.toLiquid()) + return value +} + +export function isNil (value: any): boolean { + return value == null +} + +export function isArray (value: any): value is any[] { + // be compatible with IE 8 + return toString.call(value) === '[object Array]' +} + +export function isIterable (value: any): value is Iterable { + return isObject(value) && Symbol.iterator in value +} + +/* + * Iterates over own enumerable string keyed properties of an object and invokes iteratee for each property. + * The iteratee is invoked with three arguments: (value, key, object). + * Iteratee functions may exit iteration early by explicitly returning false. + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @return {Object} Returns object. + */ +export function forOwn ( + obj: {[key: string]: T} | undefined, + iteratee: ((val: T, key: string, obj: {[key: string]: T}) => boolean | void) +) { + obj = obj || {} + for (const k in obj) { + if (hasOwnProperty.call(obj, k)) { + if (iteratee(obj[k], k, obj) === false) break + } + } + return obj +} + +export function last (arr: T[]): T; +export function last (arr: string): string; +export function last (arr: any[] | string): any | string { + return arr[arr.length - 1] +} + +/* + * Checks if value is the language type of Object. + * (e.g. arrays, functions, objects, regexes, new Number(0), and new String('')) + * @param {any} value The value to check. + * @return {Boolean} Returns true if value is an object, else false. + */ +export function isObject (value: any): value is object { + const type = typeof value + return value !== null && (type === 'object' || type === 'function') +} + +export function range (start: number, stop: number, step = 1) { + const arr: number[] = [] + for (let i = start; i < stop; i += step) { + arr.push(i) + } + return arr +} + +export function padStart (str: any, length: number, ch = ' ') { + return pad(str, length, ch, (str, ch) => ch + str) +} + +export function padEnd (str: any, length: number, ch = ' ') { + return pad(str, length, ch, (str, ch) => str + ch) +} + +export function pad (str: any, length: number, ch: string, add: (str: string, ch: string) => string) { + str = String(str) + let n = length - str.length + while (n-- > 0) str = add(str, ch) + return str +} + +export function identify (val: T): T { + return val +} + +export function snakeCase (str: string) { + return str.replace( + /(\w?)([A-Z])/g, + (_, a, b) => (a ? a + '_' : '') + b.toLowerCase() + ) +} + +export function changeCase (str: string): string { + const hasLowerCase = [...str].some(ch => ch >= 'a' && ch <= 'z') + return hasLowerCase ? str.toUpperCase() : str.toLowerCase() +} + +export function ellipsis (str: string, N: number): string { + return str.length > N ? str.substr(0, N - 3) + '...' : str +} + +// compare string in case-insensitive way, undefined values to the tail +export function caseInsensitiveCompare (a: any, b: any) { + if (a == null && b == null) return 0 + if (a == null) return 1 + if (b == null) return -1 + a = toLowerCase.call(a) + b = toLowerCase.call(b) + if (a < b) return -1 + if (a > b) return 1 + return 0 +} + +export function argumentsToValue any> (fn: F) { + return (...args: Parameters) => fn(...args.map(toValue)) +} + +export function escapeRegExp (text: string) { + return text.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, '\\$&') +} diff --git a/packages/osrl/src/main.ts b/packages/osrl/src/main.ts new file mode 100644 index 00000000..aaf47315 --- /dev/null +++ b/packages/osrl/src/main.ts @@ -0,0 +1,32 @@ +#!/usr/bin/env node +import { defaults } from './_cli'; defaults() +import * as CLI from 'yargs' +import { register as registerCompile } from './commands/compile'; registerCompile(CLI) +import { register as registerInit } from './commands/init'; registerInit(CLI) +import { types } from './zod_schema' + +const defaultOptions = (yargs: CLI.Argv) => { + return yargs.option('logLevel', { + default: 'info', + describe: 'Log level : error, warn, info, debug, trace' + }) +} + +let options = (yargs: CLI.Argv) => defaultOptions(yargs) + +export const register = (cli: CLI.Argv) => { + return cli.command('types', 'generate types', options , async (argv: CLI.Arguments) => { + if (argv.help) { return } + types() + }) +} +register(CLI) + +const argv: any = CLI.argv + +if (argv.h || argv.help) { + CLI.showHelp(); + process.exit(); +} else if (argv.v || argv.version) { + process.exit(); +} diff --git a/packages/osrl/src/options.ts b/packages/osrl/src/options.ts new file mode 100644 index 00000000..abcc2d00 --- /dev/null +++ b/packages/osrl/src/options.ts @@ -0,0 +1,190 @@ +import * as path from 'path' + +import { REGEX_VAR } from "@plastichub/core/constants" +import { sync as read } from '@plastichub/fs/read' +import { sync as exists } from '@plastichub/fs/exists' +import { isString, isArray } from '@plastichub/core/primitives' +import { IProfile, resolve, DEFAULT_ROOTS,pathInfo } from '@plastichub/osr-commons' + +import { IOptions} from './types' +import { substitute, logger } from './' +import { resolveConfig } from './lib/' +import { PROFILE_FILE_NAME } from './constants' + +export const parseProfile = (profilePath: string, profile: IProfile, options: IOptions, rel?: string) => { + profilePath = path.resolve(resolve(profilePath, false, profile.variables)) + if (!exists(profilePath as string)) { + logger.warn(`Profile file not found: ${profilePath}`) + return + } + const _profile = read(profilePath as string, 'json') as any || { includes: [], variables: {} } as IProfile + + _profile.includes = _profile.includes || [] + _profile.variables = _profile.variables || {} + + if (options.env && _profile.env && _profile.env[options.env] && _profile.env[options.env].includes) { + profile.includes = [ + ...profile.includes, + ..._profile.includes, + ..._profile.env[options.env].includes + ] + } else { + profile.includes = [ + ...profile.includes, + ..._profile.includes + ] + } + if (options.env && _profile.env && _profile.env[options.env] && _profile.env[options.env].variables) { + profile.variables = { + ...profile.variables, + ..._profile.variables, + ..._profile.env[options.env].variables + } + } + for (const k in _profile.variables) { + if (isString(_profile.variables[k])) { + _profile.variables[k] = substitute(false, _profile.variables[k], profile.variables) + } + } + + profile.variables = { ...profile.variables, ..._profile.variables, ..._profile.env[options.env]?.variables || {} } + for (const k in profile.variables) { + if (isString(profile.variables[k])) { + profile.variables[k] = substitute(false, profile.variables[k], profile.variables) + } + } + profile.includes = Array.from(new Set(profile.includes)) + profile.includes = [ + ...profile.includes.map((i) => { + if (!path.isAbsolute(i) && rel && !i.match(REGEX_VAR)) { + return path.resolve(`${rel}/${i}`) + } + let ret = resolve(i, false, profile.variables) + ret = path.resolve(substitute(false, ret, profile.variables)) + return ret + })] + + profile.includes = profile.includes.filter((include) => + include !== null && + include !== '') + profile.includes = Array.from(new Set(profile.includes)) + return profile +} + +export const parse = (options: IOptions, argv: any): IOptions => { + + for (const k in argv) { + if (!(k in options.variables) + && k !== '_' + && k !== '$0' + && k !== 'variables' + && k !== 'source' + && k !== 'language' + && k !== 'envVariables' + && k !== 'env-variables' + && k !== 'format' + && k !== 'profile' + && k !== 'output' + && k !== 'plugins' + && k !== 'dry' + && k !== 'stdout' + && k !== 'alt' + && k !== 'template' + && k !== 'trace' + && k !== 'string' + && k !== 'bootstrap') { + options.variables[k] = argv[k]; + } + } + + const variables = { + ...DEFAULT_ROOTS, + ...options.variables, + sourceLanguage: argv.sourceLanguage, + targetLanguage: argv.targetLanguage, + cwd: options.variables?.cwd || options.cwd, + trace: argv.trace + } + resolveConfig(variables) + + const profile: IProfile = { variables: { ...variables }, includes: [] } + + const srcInfo = pathInfo(options.source) + if (argv.profile) { + if (typeof argv.profile === 'string') { + argv.profile = [argv.profile] + } else if (isArray(argv.profile)) { + argv.profile = argv.profile + } else { + argv.profile = [] + } + } + + if (options.source) { + if (srcInfo && srcInfo.FILES && srcInfo.FILES.length) { + options.srcInfo = srcInfo; + for (const key in srcInfo) { + if (Object.prototype.hasOwnProperty.call(srcInfo, key)) { + options.variables['SRC_' + key] = srcInfo[key] + } + } + } else { + options.source = path.resolve(substitute(options.alt, options.source, profile.variables)) + } + } + + if (argv.profile) { + argv.profile.forEach((p) => parseProfile(p, profile, options)) + } + + if (srcInfo && srcInfo.FILES && srcInfo.FILES.length) { + options.srcInfo = srcInfo; + for (const key in srcInfo) { + if (Object.prototype.hasOwnProperty.call(srcInfo, key)) { + options.variables['SRC_' + key] = srcInfo[key] + } + } + srcInfo.FILES.forEach((f) => { + const srcParts = path.parse(f) + const profilePath = path.resolve(`${srcParts.dir}/${PROFILE_FILE_NAME}`) + if (exists(profilePath)) { + parseProfile(profilePath, profile, options, srcParts.dir) + } + }) + } + + options.profile = profile + if (options.plugins) { + options.plugins = options.plugins.map((p) => { + let dir = path.resolve(substitute(false, p, options.variables)) + if (exists(dir)) { + return dir + } + }) + } + + if (options.output) { + const out = substitute(options.alt, options.output, options.variables); + let targetInfo = pathInfo(out) + if (options.srcInfo && targetInfo) { + targetInfo.PATH = options.output as string + for (const key in targetInfo) { + if (Object.prototype.hasOwnProperty.call(targetInfo, key)) { + options.variables['DST_' + key] = targetInfo[key] + } + } + options.targetInfo = targetInfo + + } else { + options.output = path.resolve(substitute(options.alt, options.output || '', options.variables)) + } + } else { + options.stdout = true + } + + options.pathVariables = options.variables + options.sourceLanguage = argv.sourceLanguage || 'en' + options.targetLanguage = argv.targetLanguage || 'en' + options.logLevel = argv.logLevel || 'warn' + return options +} diff --git a/packages/osrl/src/plugins/csv.ts b/packages/osrl/src/plugins/csv.ts new file mode 100644 index 00000000..87e657a2 --- /dev/null +++ b/packages/osrl/src/plugins/csv.ts @@ -0,0 +1,76 @@ +/** + * Converts CSV to Markdown Table + * + * @param {string} csvContent - The string content of the CSV + * @param {string} delimiter - The character(s) to use as the CSV column delimiter + * @param {boolean} hasHeader - Whether to use the first row of Data as headers + * @returns {string} + */ + export function csvToMarkdown(csvContent: string, delimiter: string = ",", hasHeader: boolean = true): string { + if (delimiter != "\t") { + csvContent = csvContent.replace(/\t/g, " "); + } + + const columns = csvContent.split(/\r?\n/); + + const tabularData: string[][] = []; + const maxRowLen: number[] = []; + + columns.forEach((e, i) => { + if (typeof tabularData[i] == "undefined") { + tabularData[i] = []; + } + const regex = new RegExp(delimiter + '(?![^"]*"\\B)'); + const row = e.split(regex); + row.forEach((ee, ii) => { + if (typeof maxRowLen[ii] == "undefined") { + maxRowLen[ii] = 0; + } + + // escape pipes and backslashes + ee = ee.replace(/(\||\\)/g, "\\$1"); + + maxRowLen[ii] = Math.max(maxRowLen[ii], ee.length); + tabularData[i][ii] = ee; + }); + }); + + let headerOutput = ""; + let seperatorOutput = ""; + + maxRowLen.forEach((len) => { + const sizer = Array(len + 1 + 2); + + seperatorOutput += "|" + sizer.join("-"); + headerOutput += "|" + sizer.join(" "); + }); + + headerOutput += "| \n"; + seperatorOutput += "| \n"; + + if (hasHeader) { + headerOutput = ""; + } + + let rowOutput = ""; + tabularData.forEach((col, i) => { + maxRowLen.forEach((len, y) => { + const row = typeof col[y] == "undefined" ? "" : col[y]; + const spacing = Array((len - row.length) + 1).join(" "); + const out = `| ${row}${spacing} `; + if (hasHeader && i === 0) { + headerOutput += out; + } else { + rowOutput += out; + } + }); + + if (hasHeader && i === 0) { + headerOutput += "| \n"; + } else { + rowOutput += "| \n"; + } + }); + + return `\n\n ${headerOutput}${seperatorOutput}${rowOutput} \n\n`; +} \ No newline at end of file diff --git a/packages/osrl/src/plugins/ds.ts b/packages/osrl/src/plugins/ds.ts new file mode 100644 index 00000000..be576111 --- /dev/null +++ b/packages/osrl/src/plugins/ds.ts @@ -0,0 +1,135 @@ +import { TagToken, TypeGuards, evalToken, evalQuotedToken, Hash, Context, Tokenizer, Emitter, TopLevelToken } from '../liquidjs/liquid' +import { read } from '../lib/net/sheets'; +import * as jsonpath from 'jsonpath' + +import { get as cache_get, put as cache_put, } from 'cacache' + +import { logger } from '../index' +import { MODULE_NAME } from '../constants' + +import { sync as exists } from '@plastichub/fs/exists' +import { sync as mkdir } from '@plastichub/fs/dir' + +import { OSR_CACHE } from '@plastichub/osr-commons' + +import * as fs_path from 'path' + +const cache_path = (_namespace: string) => `${fs_path.resolve(fs_path.join(OSR_CACHE(), _namespace))}` + + +export async function testDS(engine) { + // let ret = await read('1oVEiGH4o3SV-mAA3Mb-WNVJMyYl4VMxLjWjrSw_ipJY', 'ElenaMargin'); + // console.log('sheet result : ', ret); +} + + +export const register = (engine) => { + + engine.registerTag('googlesheet', { + + parse: function (token: TagToken, other) { + const args = token.args + const tokenizer = new Tokenizer(args, this.liquid.options.operatorsTrie) + this.name = tokenizer.readValue(); + const begin = tokenizer.p; + tokenizer.readIdentifier(); + tokenizer.p = begin; + this.hash = new Hash(tokenizer.remaining()); + + }, + render: function* (ctx: Context, emitter: Emitter) { + const { liquid, hash, name } = this; + + let name_ = ctx.opts.dynamicPartials + ? (TypeGuards.isQuotedToken(name) + ? yield (evalQuotedToken(name)) + : yield evalToken(name, ctx)) + : name.getText(); + + const id = this.hash.hash['id']; + let id_ = ctx.opts.dynamicPartials + ? (TypeGuards.isQuotedToken(id) + ? yield (evalQuotedToken(id)) + : yield evalToken(id, ctx)) + : id.getText(); + + const range = this.hash.hash['range']; + let range_ = ctx.opts.dynamicPartials + ? (TypeGuards.isQuotedToken(range) + ? yield (evalQuotedToken(range)) + : yield evalToken(range, ctx)) + : range.getText(); + + const path = this.hash.hash['path']; + let path_; + + if (path) { + path_ = ctx.opts.dynamicPartials + ? (TypeGuards.isQuotedToken(path) + ? yield (evalQuotedToken(path)) + : yield evalToken(path, ctx)) + : path.getText(); + } + + const cache = this.hash.hash['cache'] + let cache_ = true + + if (cache) { + cache_ = ctx.opts.dynamicPartials + ? (TypeGuards.isQuotedToken(path) + ? yield (evalQuotedToken(path)) + : yield evalToken(path, ctx)) + : cache.getText(); + } + + const assign = this.hash.hash['assign']; + let assign_; + + if (assign) { + assign_ = ctx.opts.dynamicPartials + ? (TypeGuards.isQuotedToken(assign) + ? yield (evalQuotedToken(assign)) + : yield evalToken(path, ctx)) + : assign_.getText(); + } + + const cache_dir = fs_path.resolve(`${cache_path(MODULE_NAME)}`); + if (!exists(cache_dir)) { + mkdir(cache_dir); + } + + const c_integrity = `${id_}_${range_}`; + const cached = yield cache_get.info(cache_dir, c_integrity); + + let data: any = []; + + if (cached && cache_) { + data = JSON.parse(((yield cache_get(cache_dir, c_integrity)).data as Buffer).toString()) + } else { + data = yield read(id_, range_); + } + + let ret: any = []; + + if (path) { + try { + ret = jsonpath.query(data, path_) + if (assign_) { + ctx.bottom()[assign_] = ret[0] + liquid.owner.variables[assign_] = ret[0] + ret = '' + } + ret = ret[0] + } catch (e) { + logger.error('error jsonpath', e) + } + } + ret = data[0]; + + if (cache_ && !cached) { + yield cache_put(cache_dir, c_integrity, JSON.stringify(data, null, 2)); + } + return ret; + } + }); +} diff --git a/packages/osrl/src/plugins/get.ts b/packages/osrl/src/plugins/get.ts new file mode 100644 index 00000000..e1810e82 --- /dev/null +++ b/packages/osrl/src/plugins/get.ts @@ -0,0 +1,109 @@ +import axios from 'axios' +import { JSONPath } from 'jsonpath-plus' +import { isString, isObject, isArray } from '@plastichub/core/primitives' + +import { logger } from '../index' + +import { assert, Tokenizer, Hash, Emitter, TagToken, Context } from '../liquidjs/liquid' +import { arg } from './' +import { parseFilePath, renderFilePath } from '../liquidjs/builtin/tags/render' +import { applyFilters, cleanArray, Filters, isValidUrl } from '../filters' + + +export const register = (engine) => { + engine.registerTag('get', { + parseFilePath, + renderFilePath, + parse: function (token: TagToken) { + const args = token.args + const tokenizer = new Tokenizer(args, this.liquid.options.operatorsTrie) + this['file'] = this.parseFilePath(tokenizer, this.liquid) + this['currentFile'] = token.file + const begin = tokenizer.p + const withStr = tokenizer.readIdentifier() + if (withStr.content === 'with') { + tokenizer.skipBlank() + if (tokenizer.peek() !== ':') { + this.withVar = tokenizer.readValue() + } else tokenizer.p = begin + } else tokenizer.p = begin + + this.hash = new Hash(tokenizer.remaining(), this.liquid.options.jekyllInclude) + }, + render: function* (ctx: Context, emitter: Emitter) { + const enabled = yield* arg(this.hash.hash, 'enabled', ctx, true) + if (!enabled) return + const { liquid, hash, withVar } = this + const { renderer } = liquid + + let url = yield this.renderFilePath(this['file'], ctx, liquid) + if (isString(url)) { + url = liquid.owner.options.resolve(url) + } + assert(url, () => `illegal url "${url}"`) + assert(isValidUrl(url), () => `illegal url "${url}"`) + + let data = null + const raw = yield axios.get(url) + if (!raw) { + logger.error(`Error fetching data from ${url}`) + return + } + + if (raw && raw.data) { + data = raw.data + } + + const jsonpath = yield* arg(this.hash.hash, 'path', ctx) + if (jsonpath && (isObject(data) || isArray(data))) { + try { + data = JSONPath( + { + path: jsonpath, + json: data, + + }) + data = cleanArray(data) + //@todo : jsonpath spec + if (isArray(data) && data.length === 1) { + data = data[0] + } + } catch (error) { + logger.error('Error querying index', error, error.stack) + } + } + const assign = yield* arg(this.hash.hash, 'assign', ctx) + const before = yield* arg(this.hash.hash, 'before', ctx) + const after = yield* arg(this.hash.hash, 'after', ctx) +/* + @todo : remote content + ctx.setRegister('blocks', {}) + ctx.setRegister('blockMode', BlockMode.OUTPUT) + + const scope = yield hash.render(ctx) + if (withVar) scope[url] = evalToken(withVar, ctx) + + const templates = yield liquid._parsePartialFile(url, ctx.sync, this['currentFile']) + ctx.push(ctx.opts.jekyllInclude ? { include: scope } : scope) + let output = '' + const collector: Emitter = { + buffer: emitter.buffer, + write: function (html) { + this.buffer += html + output += html + } + } + yield renderer.renderTemplates(templates, ctx, collector) + ctx.pop() + ctx.restoreRegister(saved) + liquid.owner.stats.includes.push({ file: url, parent: this.currentFile }) + */ + data = yield applyFilters(data, after || '', Filters(liquid.owner.options)) + if (assign) { + ctx.bottom()[assign] = data + return + } + return data + } + }) +} diff --git a/packages/osrl/src/plugins/html.ts b/packages/osrl/src/plugins/html.ts new file mode 100644 index 00000000..22fee463 --- /dev/null +++ b/packages/osrl/src/plugins/html.ts @@ -0,0 +1,41 @@ +import { Engine, logger } from '../index' +import { IOptions } from '../types' +import { Converter } from 'showdown' +const prettyConv = require('pretty') + +const convert = (input: string) => { + let converter = new Converter({ + tables: true, + parseImgDimensions: true, + simplifiedAutoLink: true, + tasklists:true + }); + converter.setOption('literalMidWordUnderscores', 'true'); + return converter.makeHtml(input); +} + +export const html = async ( + expr: string, + options: IOptions, + engine: Engine +) => { + try { + return convert(expr) + } catch (e) { + logger.error(e) + } + return expr +} + +export const pretty = async ( + expr: string, + options: IOptions, + engine: Engine +) => { + try { + return prettyConv(expr, { ocd: true }) + } catch (e) { + logger.error(e) + } + return expr +} diff --git a/packages/osrl/src/plugins/i18n.ts b/packages/osrl/src/plugins/i18n.ts new file mode 100644 index 00000000..194fabf2 --- /dev/null +++ b/packages/osrl/src/plugins/i18n.ts @@ -0,0 +1,166 @@ +import * as path from 'path' +import { Engine, logger } from '../index' +import { clean } from '../lib/i18n' +import { Liquid, Template } from '../liquidjs/liquid' +import { translateText, storeGet, storeSet } from '@plastichub/osr-i18n/lib/translate' +import { resolve } from '@plastichub/osr-commons' +import { IOptions } from '../types' +import { Tokenizer, Hash, Emitter } from '../liquidjs/liquid' +import { CONFIG_DEFAULT } from '@plastichub/osr-commons' + +import { prompt, applyFilters, Filter } from '@plastichub/osr-ai/lib/openai' + +const openAI = false + +const translateOpenAI = async (text: string, srcLang: string, dstLang: string, store: string, engine: Engine) => { + + const query = `translate from ${srcLang} to ${dstLang}: ${text}` + const config = CONFIG_DEFAULT() as any + const _store = path.resolve(resolve(engine.variables['i18n'], false, engine.variables)) + const cached = storeGet(_store, text) + if (cached) { + return cached + } + + const options: any = { + query, + api_key: process.env.OPENAI_API_KEY || config.openai.key, + filters: '', + logLevel: engine.options.logLevel || 'debug', + gui: false, + variables: { ...engine.variables }, + } + + let ret = await prompt(options) + if (ret) { + ret = applyFilters(ret, options.filters as Filter[] || []) + storeSet(_store, text, ret) + } + + return ret +} + +export const onError = async (status: number, text: string, engine: Engine, sourceLanguage: string, targetLanguage: string, store: string) => { + if (!openAI) { + return text + } + + if (status !== 403) { + return text + } + return await translateOpenAI(text, sourceLanguage, targetLanguage, store, engine) + return text +} + +export const i18n = async ( + expr: string, + options: IOptions, + engine: Engine, + parsed: Template[] = [], + _ctx, + args: any = {}, + templateFile: string = "" +) => { + + if (!engine.variables['i18n']) { + logger.warn(`i18n : i18n is not defined in the variables`) + return expr + } + const store = path.resolve(resolve(engine.variables['i18n'], false, engine.variables)) + if (!store) { + logger.error(`i18n : i18n store not found`) + return expr + } + const srcLang = engine.variables['sourceLanguage'] + const dstLang = engine.variables['targetLanguage'] + if (!srcLang || !dstLang || (srcLang === dstLang)) { + return expr + } + let translation + try { + if(expr === 'Injectors') { + //debugger + } + translation = await translateText(expr, srcLang, dstLang, { store }) + } catch (e) { + logger.error(`Error translating text ${e.message} @ ${templateFile} : ${expr}`) + } + return translation || expr +} + +export const register = (engine: Liquid) => { + engine.registerTag('i18n', { + parse(tagToken, remainTokens) { + this.tpls = [] + const args = tagToken.args + let closed = false + this['currentFile'] = tagToken.file + const tokenizer = new Tokenizer(args, this.liquid.options.operatorsTrie) + const begin = tokenizer.p; + while (remainTokens.length) { + let token: any = remainTokens.shift() + if (token.name === 'i18n-end') { + closed = true + break + } + let tpl = this.liquid.parser.parseToken(token, remainTokens) + this.tpls.push(tpl) + } + if (!closed) throw new Error(`tag ${tagToken.getText()} not closed`) + tokenizer.p = begin; + this.hash = new Hash(tokenizer.remaining()); + }, + * render(context, emitter) { + let { liquid } = this + let translation + + let output = '' + const emitter2: Emitter = { + buffer: emitter.buffer, + write: function (html) { + this.buffer += html + output += html + } + } + + yield liquid.renderer.renderTemplates(this.tpls, context, emitter2) + let text = output + const owner: any = (this.liquid as any).owner + const variables: any = owner.variables + if (!owner.variables['i18n']) { + logger.warn(`i18n tag used in ${this['currentFile']} but i18n is not defined in the variables`) + return text + } + if (text && + text.length && + clean(text).length && + variables['i18n'] && + variables['sourceLanguage'] && + variables['targetLanguage']) { + const store = path.resolve(resolve(owner.variables['i18n'], false, variables)) + const srcLang = variables['sourceLanguage'] + const dstLang = variables['targetLanguage'] + try { + translation = yield translateText(text, srcLang, dstLang, { + store + }) + } catch (e) { + logger.error(`Error translating \n\t${text} \n in ${this['currentFile']}: ${e.message} : ${e.response.data.message}`) + /* + translation = yield onError(e.response.status, text, owner, srcLang, dstLang, store) + if (translation) { + // storeSet(text, translation, srcLang, dstLang, store) + logger.info(`Translated via OpenAI`) + //debugger + return translation + } + */ + } + } else { + logger.warn(`Invalid parameters for i18n tag in ${this['currentFile']}`) + } + //yield liquid.renderer.renderTemplates(this.tpls, context, emitter) + return translation || text + } + }) +} \ No newline at end of file diff --git a/packages/osrl/src/plugins/include.ts b/packages/osrl/src/plugins/include.ts new file mode 100644 index 00000000..23575856 --- /dev/null +++ b/packages/osrl/src/plugins/include.ts @@ -0,0 +1,46 @@ +import { assert, evalQuotedToken, TypeGuards, Tokenizer, evalToken, Hash, Emitter, TagToken, Context, TagImplOptions } from '../../types' +import BlockMode from '../../context/block-mode' + +export default { + parse: function (token: TagToken) { + const args = token.args + const tokenizer = new Tokenizer(args, this.liquid.options.operatorsTrie) + this.file = this.liquid.options.dynamicPartials + ? tokenizer.readValue() + : tokenizer.readFileName() + assert(this.file, () => `illegal argument "${token.args}"`) + + const begin = tokenizer.p + const withStr = tokenizer.readIdentifier() + if (withStr.content === 'with') { + tokenizer.skipBlank() + if (tokenizer.peek() !== ':') { + this.withVar = tokenizer.readValue() + } else tokenizer.p = begin + } else tokenizer.p = begin + + this.hash = new Hash(tokenizer.remaining()) + }, + render: function * (ctx: Context, emitter: Emitter) { + const { liquid, hash, withVar, file } = this + const { renderer } = liquid + // TODO try move all liquid.parse calls into parse() section + const filepath = ctx.opts.dynamicPartials + ? (TypeGuards.isQuotedToken(file) + ? yield renderer.renderTemplates(liquid.parse(evalQuotedToken(file)), ctx) + : yield evalToken(file, ctx)) + : file.getText() + assert(filepath, () => `illegal filename "${file.getText()}":"${filepath}"`) + + const saved = ctx.saveRegister('blocks', 'blockMode') + ctx.setRegister('blocks', {}) + ctx.setRegister('blockMode', BlockMode.OUTPUT) + const scope = yield hash.render(ctx) + if (withVar) scope[filepath] = evalToken(withVar, ctx) + const templates = yield liquid._parseFile(filepath, ctx.opts, ctx.sync) + ctx.push(scope) + yield renderer.renderTemplates(templates, ctx, emitter) + ctx.pop() + ctx.restoreRegister(saved) + } +} as TagImplOptions diff --git a/packages/osrl/src/plugins/index.ts b/packages/osrl/src/plugins/index.ts new file mode 100644 index 00000000..5b8ba30d --- /dev/null +++ b/packages/osrl/src/plugins/index.ts @@ -0,0 +1,13 @@ +import { TypeGuards, evalToken, evalQuotedToken } from '../liquidjs/liquid' +export * from './csv' +export const arg = function* (hash, key, context, defaultValue = null) { + const value = hash[key] + if (value == undefined) return defaultValue + const ret = context.opts.dynamicPartials + ? (TypeGuards.isQuotedToken(value) + ? yield evalQuotedToken(value) + : yield evalToken(value, context)) + : value.getText() + + return ret != undefined ? ret : defaultValue +} diff --git a/packages/osrl/src/plugins/js.ts b/packages/osrl/src/plugins/js.ts new file mode 100644 index 00000000..53496470 --- /dev/null +++ b/packages/osrl/src/plugins/js.ts @@ -0,0 +1,243 @@ +import { Liquid, Template, Token, Value, TagToken, TopLevelToken } from '../liquidjs/liquid' +import { IOptions } from "../types" +import * as path from 'path' +import { statSync } from 'fs' +import { sync as exists } from '@plastichub/fs/exists' +import { sync as write } from '@plastichub/fs/write' +import { isString } from '@plastichub/core/primitives' +import { substitute } from "@plastichub/core/strings" +import { toVariables } from '../liquid/parser' +import { evaluate } from '../vm/eval' +import { forward_slash, read, files } from '../lib/fs' +import { createHash } from 'crypto' +import { context } from '../conf/bootstrap' +import { replaceAll } from '../lib/StringUtils' +import { logger } from '../index' + +const exceptionFormatter = require('exception-formatter') +var fm = require('front-matter') +import { parse } from 'query-string' + +const toModule = (expr) => { + let _header = 'module.exports = function () {' + return `${_header}\n ${expr.trim()};\n}`; +} +const resolve = (filePath: string, hints: string[], variables: any) => { + let resolved + filePath = substitute(filePath, variables) + hints.find((f) => { + let testPath = path.join(f, filePath) + if (exists(testPath)) { + const stat = statSync(testPath) + if (stat.isFile()) { + resolved = testPath + } + } + }) + return resolved; +} + +const toScript = (path) => { + try { + const script = require(path); + if (script && script.default) { + return script.default; + } + + if (script && typeof script === 'function') { + return script; + } + + } catch (e) { + logger.error(e); + } +} + +export const runJS = (path: string, options: IOptions, engine: any, parsed: Template[]) => { + let scope = { + ...engine.variables + } + + const script = resolve(path, options.profile.includes as [], engine.variables); + const pageVariables = toVariables(parsed); + pageVariables.forEach((t) => scope[t.key] = t.value); + + let ret; + if (script) { + const fn: Function = toScript(script); + if (fn) { + ret = fn.apply(engine, [scope]); + } else { + console.warn('invalid script ' + script); + } + } + return ret; +} + +const createScope = (engine, parsed, ctx, options, templateFile = "") => { + let scope = { + ...engine.variables + } + const pageVariables = toVariables(parsed); + pageVariables.forEach((t) => scope[t.key] = t.value); + + // mixin liquid variables + (ctx.scopes || []).forEach(_scope => { + scope = { + ..._scope, + ...scope + } + }); + + const ret = { + ...context, + ...scope, + scope: scope, + substitute: (string, variables = {}) => substitute(string, { ...scope, ...variables }), + lookup: (fileName: string) => { + const hints = [ + ...options.profile.includes as [], + path.parse(templateFile).dir + ]; + return resolve(fileName, [...new Set(hints)], engine.variables); + }, + engine: engine, + forward_slash: forward_slash, + read: (file) => read(substitute(file, scope)) || {}, + write: (file, data) => write(substitute(file, scope), data), + readJSON: (file) => read(substitute(file, scope), 'json') || {}, + writeJSON: (file, data) => write(substitute(file, scope), data), + readFile: (file) => read(substitute(file, scope)) || {}, + store: engine.global, + addGlobal: (what) => { + engine.global = { + ...engine.global, + ...what + } + }, + register: (key, value) => { + ctx.bottom()[key] = value; + } + } + ret.logger = logger; + return ret +} + +const loadPlugins = (engine, options: IOptions) => { + let ret = {}; + if (options.plugins) { + options.plugins.forEach((d) => { + const jsFiles = files(d, '*.js'); + jsFiles.map((f) => { + try { + const plugin = require(f); + ret = { + ...ret, + ...plugin + } + } catch (e) { + logger.error(`Couldnt load plugin from ${f} : \n ${e.message}`, e) + } + }); + }); + } + return ret; +} + +export const runJSExpressionEx = ( + expr: string, + options: IOptions, + engine: Liquid, + parsed: Template[] = [], + _ctx, + args: any = {}, + templateFile: string = "" +) => { + let expression = "" + expr + let ret + try { + let ctx = createScope(engine, parsed, _ctx, options, templateFile); + let _fm = { fm: {} }; + if (fm.test(options.string)) { + _fm = { + fm: fm(options.string).attributes + } + } + + engine['context'] = ctx; + let plugins = loadPlugins(engine, options); + let scopeArgs = { ...engine['context'], ...plugins, ..._fm.fm }; + for (let k in args) { + if (isString(args[k])) { + args[k] = substitute(args[k], scopeArgs); + } + } + ret = evaluate(toModule(expr), templateFile + '.js', { ...scopeArgs, ...args }, true)(args); + return ret; + } catch (e) { + logger.error(`Error running expression ${expression} :: ${templateFile}.js @ ${options.source || options.string} : ${e.message}`) + return exceptionFormatter(e, { + format: 'html' + }) + } + + return ret; +} + + +export const register = (engine) => { + engine.registerTag('js', { + parse: function (token, remainTokens) { + this.tokens = [] + const stream = this.liquid.parser.parseStream(remainTokens); + + this['currentFile'] = token.file + const argsStr = replaceAll(" ", "&", token.args || ""); + this.args = parse(argsStr, { parseNumbers: true, parseBooleans: true }) || {}; + stream + .on('token', (token: Token) => { + if (token['name'] === 'endjs') { + stream.stop(); + } + else { + this.tokens.push(token) + } + }) + .on('end', () => { + throw new Error(`tag ${token.raw} not closed`) + }) + stream.start() + }, + render: async function (ctx) { + const file = this['currentFile'] + const text = this.tokens.map((token) => token.getText()).join('').replace('', '') + const { liquid } = this + const _hash: string = createHash('md5').update(text).digest('base64') + if (_hash in liquid.owner.expressionCache) { + // return liquid.owner.expressionCache[_hash]; + } + const content = runJSExpressionEx(text, liquid.owner.engine.options, liquid.owner, [], ctx, this.args, file) + liquid.owner.expressionCache[_hash] = content + return content + } + }) +} +export const runJSExpression = (expr: string, options: IOptions, engine: any, parsed: Template[] = []) => { + let expression = "" + expr; + expr = 'return ' + expr.trim(); + let ret; + try { + try { + let ctx = createScope(engine, parsed, null, options, ""); + ret = evaluate(toModule(expr), 'js expression', ctx, true); + return ret(); + } catch (e) { + logger.error(`Error running expression ${expression} :: ${e.message}`) + return 'Invalid Expression: ' + `"${expression}"` + } + + } catch (e) { + logger.error(`Error running expression ${expr}`, e); + } + return ret +} diff --git a/packages/osrl/src/plugins/minclude.ts b/packages/osrl/src/plugins/minclude.ts new file mode 100644 index 00000000..160c69fe --- /dev/null +++ b/packages/osrl/src/plugins/minclude.ts @@ -0,0 +1,71 @@ +import * as path from 'path' +import { assert, Tokenizer, evalToken, Hash, Emitter, TagToken, Context } from '../liquidjs/liquid' +import { arg } from './' +import { parseFilePath, renderFilePath } from '../liquidjs/builtin/tags/render' +import BlockMode from '../liquidjs/context/block-mode' +import { applyFilters, Filters } from '../filters' +import { isString } from '../liquid/underscore' +import { forward_slash } from '@plastichub/osr-commons' + +export const register = (engine) => { + engine.registerTag('include', { + parseFilePath, + renderFilePath, + parse: function (token: TagToken) { + const args = token.args + const tokenizer = new Tokenizer(args, this.liquid.options.operatorsTrie) + this['file'] = this.parseFilePath(tokenizer, this.liquid) + this['currentFile'] = token.file + const begin = tokenizer.p + const withStr = tokenizer.readIdentifier() + if (withStr.content === 'with') { + tokenizer.skipBlank() + if (tokenizer.peek() !== ':') { + this.withVar = tokenizer.readValue() + } else tokenizer.p = begin + } else tokenizer.p = begin + + this.hash = new Hash(tokenizer.remaining(), this.liquid.options.jekyllInclude) + }, + render: function* (ctx: Context, emitter: Emitter) { + const enabled = yield* arg(this.hash.hash, 'enabled', ctx, true) + if (!enabled) return + const { liquid, hash, withVar } = this + const { renderer } = liquid + let filepath = yield this.renderFilePath(this['file'], ctx, liquid) + if (isString(filepath)) { + filepath = liquid.owner.options.resolve(filepath) + } + assert(filepath, () => `illegal filename "${filepath}"`) + const assign = yield* arg(this.hash.hash, 'assign', ctx) + //const before = yield* arg(this.hash.hash, 'before', ctx) + const after = yield* arg(this.hash.hash, 'after', ctx) + const saved = ctx.saveRegister('blocks', 'blockMode') + ctx.setRegister('blocks', {}) + ctx.setRegister('blockMode', BlockMode.OUTPUT) + const scope = yield hash.render(ctx) + if (withVar) scope[filepath] = evalToken(withVar, ctx) + const templates = yield liquid._parsePartialFile(filepath, ctx.sync, this['currentFile']) + ctx.push(ctx.opts.jekyllInclude ? { include: scope } : scope) + let output = '' + const emitter2: Emitter = { + buffer: emitter.buffer, + write: function (html) { + this.buffer += html + output += html + } + } + yield renderer.renderTemplates(templates, ctx, emitter2) + ctx.pop() + ctx.restoreRegister(saved) + const rel = path.relative(liquid.owner.options.cwd,this.currentFile).replace('.tmp','') + liquid.owner.stats.imports.push({ file: filepath, parent: forward_slash(rel) }) + output = yield applyFilters(output, after || '', Filters(liquid.owner.options)) + if (assign) { + ctx.bottom()[assign] = output + return + } + return output + } + }) +} diff --git a/packages/osrl/src/plugins/osr-ai.ts b/packages/osrl/src/plugins/osr-ai.ts new file mode 100644 index 00000000..b3da56d0 --- /dev/null +++ b/packages/osrl/src/plugins/osr-ai.ts @@ -0,0 +1,227 @@ +import * as path from 'path' + +import { CONFIG_DEFAULT } from '@plastichub/osr-commons' +import { sync as read } from '@plastichub/fs/read' +import { sync as write } from '@plastichub/fs/write' +import { sync as exists } from '@plastichub/fs/exists' + +import { Engine, logger } from '../index' +import { arg } from './' +import { Liquid, Template, Tokenizer, Hash, Emitter } from '../liquidjs/liquid' +import { prompt, IOptions, IOptionsEx, applyFilters, Filter } from '@plastichub/osr-ai/lib/openai' + +export const openAI = async ( + expr: string, + options: IOptions, + engine: Engine, + parsed: Template[] = [], + _ctx, + args: any = {}, + templateFile: string = "" +) => { + return expr +} + +const aiArgs = ['assign', 'dst', 'source', 'model', 'cache', 'filters', 'logLevel', 'system', 'gui'] + +export const removeFields = (obj: Record, fields: string[]): Record => { + const newObj = { ...obj } + fields.forEach(field => delete newObj[field]) + return newObj +} + +export const register = (engine: Liquid) => { + engine.registerTag('osr-ai', { + parse(tagToken, remainTokens) { + this.tpls = [] + const args = tagToken.args + let closed = false + this['currentFile'] = tagToken.file + const tokenizer = new Tokenizer(args, this.liquid.options.operatorsTrie) + const begin = tokenizer.p; + while (remainTokens.length) { + let token: any = remainTokens.shift() + if (token.name === 'osr-ai-end') { + closed = true + break + } + let tpl = this.liquid.parser.parseToken(token, remainTokens) + this.tpls.push(tpl) + } + if (!closed) throw new Error(`tag ${tagToken.getText()} not closed`) + tokenizer.p = begin; + this.hash = new Hash(tokenizer.remaining()); + }, + * render(context, emitter) { + let { liquid } = this + let query = this.tpls.map((token) => token.str).join('').trim() + const config = CONFIG_DEFAULT() as any + + let output = '' + const collector: Emitter = { + buffer: emitter.buffer, + write: function (html) { + this.buffer += html + output += html + } + } + + const hash = this.hash.hash + let vars = Object.fromEntries( + yield Promise.all( + Object.keys(hash).map(async key => [key, yield* arg(hash, key, context)]) + ) + ) + Object.keys(vars).forEach(key => { + context.bottom()[key] = vars[key] + }) + query = yield liquid.renderer.renderTemplates(this.tpls, context, collector) + + const owner: Engine = (this.liquid as any).owner + const resolve = owner.options.resolve + + const assign = yield* arg(hash, 'assign', context) + let dst = yield* arg(hash, 'dst', context) + let source = yield* arg(hash, 'source', context) + if (dst) { + dst = path.resolve(resolve(dst)) + } + if (source) { + source = path.resolve(resolve(source)) + } + + const options: IOptionsEx = { + model: yield* arg(hash, 'model', context), + cache: yield* arg(hash, 'cache', context), + query: output, + api_key: process.env.OPENAI_API_KEY || config.openai.key, + filters: yield* arg(hash, 'filters', context), + logLevel: yield* arg(hash, 'logLevel', context), + gui: yield* arg(hash, 'gui', context), + dst: dst, + source: source, + variables: { ...owner.variables, ...removeFields(vars, aiArgs) }, + system: yield* arg(hash, 'system', context) + } + + if (options.cache && dst && exists(options.dst)) { + logger.debug('Output file already exists, skipping: ', options.dst) + return read(options.dst) as string + } + + let ret = yield prompt(options) + const result = applyFilters(ret, options.filters as Filter[] || []) + logger.debug(`osr-ai: render prompt ${query} : \`t\n${result}\``) + + if (options.dst) { + write(options.dst, result) + } + + if (assign) { + context.bottom()[assign] = result; + liquid['owner'].variables[assign] = result + return + } + return result + } + }) +} + +// custom ai filters + +export const registerFilter = (engine: Liquid) => { + engine.registerTag('osr-ai-filter', { + parse(tagToken, remainTokens) { + this.tpls = [] + const args = tagToken.args + let closed = false + this['currentFile'] = tagToken.file + const tokenizer = new Tokenizer(args, this.liquid.options.operatorsTrie) + const begin = tokenizer.p; + while (remainTokens.length) { + let token: any = remainTokens.shift() + if (token.name === 'osr-ai-filter-end') { + closed = true + break + } + let tpl = this.liquid.parser.parseToken(token, remainTokens) + this.tpls.push(tpl) + } + if (!closed) throw new Error(`tag ${tagToken.getText()} not closed`) + tokenizer.p = begin; + this.hash = new Hash(tokenizer.remaining()); + }, + * render(context, emitter) { + let { liquid } = this + let query = this.tpls.map((token) => token.str).join('').trim() + const config = CONFIG_DEFAULT() as any + + let output = '' + const collector: Emitter = { + buffer: emitter.buffer, + write: function (html) { + this.buffer += html + output += html + } + } + + const hash = this.hash.hash + let vars = Object.fromEntries( + yield Promise.all( + Object.keys(hash).map(async key => [key, yield* arg(hash, key, context)]) + ) + ) + Object.keys(vars).forEach(key => { + context.bottom()[key] = vars[key] + }) + query = yield liquid.renderer.renderTemplates(this.tpls, context, collector) + + const owner: Engine = (this.liquid as any).owner + const resolve = owner.options.resolve + + const assign = yield* arg(hash, 'assign', context) + let dst = yield* arg(hash, 'dst', context) + let source = yield* arg(hash, 'source', context) + if (dst) { + dst = path.resolve(resolve(dst)) + } + if (source) { + source = path.resolve(resolve(source)) + } + + const options: IOptionsEx = { + model: yield* arg(hash, 'model', context), + cache: yield* arg(hash, 'cache', context), + query: output, + api_key: process.env.OPENAI_API_KEY || config.openai.key, + filters: yield* arg(hash, 'filters', context), + logLevel: yield* arg(hash, 'logLevel', context), + gui: yield* arg(hash, 'gui', context), + dst: dst, + source: source, + variables: { ...owner.variables, ...removeFields(vars, aiArgs) }, + system: yield* arg(hash, 'system', context) + } + + if (options.cache && dst && exists(options.dst)) { + logger.debug('Output file already exists, skipping: ', options.dst) + return read(options.dst) as string + } + + let ret = yield prompt(options) + const result = applyFilters(ret, options.filters as Filter[] || []) + logger.debug(`osr-ai: render prompt ${query} : \`t\n${result}\``) + + if (options.dst) { + write(options.dst, result) + } + + if (assign) { + context.bottom()[assign] = result; + liquid['owner'].variables[assign] = result + return + } + return result + } + }) +} \ No newline at end of file diff --git a/packages/osrl/src/plugins/print.ts b/packages/osrl/src/plugins/print.ts new file mode 100644 index 00000000..c4d80db2 --- /dev/null +++ b/packages/osrl/src/plugins/print.ts @@ -0,0 +1,37 @@ +import { TagToken } from '../liquidjs/tokens/tag-token' +import { TopLevelToken } from '../liquidjs/tokens/toplevel-token' +import { TagImplOptions } from '../liquidjs/template/tag/tag-impl-options' +import { Liquid, Tokenizer } from '../liquidjs/liquid' + +export const register = (engine: Liquid) => { + engine.registerTag('print', { + parse(tagToken, remainTokens) { + this.tpls = [] + this.tokens = [] + let closed = false + this['currentFile'] = tagToken.file + while (remainTokens.length) { + let token: any = remainTokens.shift() + if (token.name === 'print-end') { + closed = true + break + } + let tpl = this.liquid.parser.parseToken(token, remainTokens) + this.tpls.push(tpl) + this.tokens.push(token) + } + if (!closed) throw new Error(`tag ${tagToken.getText()} not closed`) + }, + * render(context, emitter) { + let { liquid } = this + const text = this.tpls.map((token) => { + return token.str + }).join('') + const token = this.tokens[0] ? this.tokens[0] : null + const t = token.getContent() + if(token) { + emitter.write(`\n${token.getText()}`) + } + } + }) +} \ No newline at end of file diff --git a/packages/osrl/src/plugins/rinclude.ts b/packages/osrl/src/plugins/rinclude.ts new file mode 100644 index 00000000..4d9b74b3 --- /dev/null +++ b/packages/osrl/src/plugins/rinclude.ts @@ -0,0 +1,50 @@ +import { assert, evalToken, Hash, Emitter, TagToken, Context, Liquid, Template, TopLevelToken } from '../liquidjs/liquid' + +import BlockMode from '../liquidjs/context/block-mode' +import Parser from '../liquidjs/parser/parser' +import { Scope } from '../liquidjs/context/scope' +import { parseFilePath, renderFilePath } from '../liquidjs/builtin/tags/render' +import { ValueToken } from '../../liquidjs/tokens/value-token' + +export class RInclude extends Tag { + private withVar?: ValueToken + private hash: Hash + constructor(token: TagToken, remainTokens: TopLevelToken[], liquid: Liquid, parser: Parser) { + super(token, remainTokens, liquid) + const { tokenizer } = token + this['file'] = parseFilePath(tokenizer, this.liquid, parser) + this['currentFile'] = token.file + + const begin = tokenizer.p + const withStr = tokenizer.readIdentifier() + if (withStr.content === 'with') { + tokenizer.skipBlank() + if (tokenizer.peek() !== ':') { + this.withVar = tokenizer.readValue() + } else tokenizer.p = begin + } else tokenizer.p = begin + + this.hash = new Hash(tokenizer.remaining(), this.liquid.options.jekyllInclude) + } + * render(ctx: Context, emitter: Emitter): Generator { + const { liquid, hash, withVar } = this + const { renderer } = liquid + const filepath = (yield renderFilePath(this['file'], ctx, liquid)) as string + assert(filepath, () => `illegal file path "${filepath}"`) + + const saved = ctx.saveRegister('blocks', 'blockMode') + ctx.setRegister('blocks', {}) + ctx.setRegister('blockMode', BlockMode.OUTPUT) + const scope = (yield hash.render(ctx)) as Scope + if (withVar) scope[filepath] = yield evalToken(withVar, ctx) + const templates = (yield liquid._parsePartialFile(filepath, ctx.sync, this['currentFile'])) as Template[] + ctx.push(ctx.opts.jekyllInclude ? { include: scope } : scope) + yield renderer.renderTemplates(templates, ctx, emitter) + ctx.pop() + ctx.restoreRegister(saved) + } +} + +export const register = (liquid: Liquid) => { + +} \ No newline at end of file diff --git a/packages/osrl/src/plugins/turndown.ts b/packages/osrl/src/plugins/turndown.ts new file mode 100644 index 00000000..d3d1e1f8 --- /dev/null +++ b/packages/osrl/src/plugins/turndown.ts @@ -0,0 +1,36 @@ +import { Engine, logger } from '../index' +import { IOptions } from '../types' + +const TurndownService = require('turndown') +/** + * @link: https://www.npmjs.com/package/turndown + * @param input + * @returns + */ + +const convert = (input: string) => { + var turndownService = new TurndownService() + return turndownService.turndown(input) +} + +export const markdown = async ( + expr: string, options: IOptions, engine: Engine +) => { + try { + return convert(expr) + } catch (e) { + logger.error(e) + } + return expr +} + +export const markdownSync = ( + expr: string, options: IOptions, engine: Engine +) => { + try { + return convert(expr) + } catch (e) { + logger.error(e) + } + return expr +} diff --git a/packages/osrl/src/types.ts b/packages/osrl/src/types.ts new file mode 100644 index 00000000..28a20f66 --- /dev/null +++ b/packages/osrl/src/types.ts @@ -0,0 +1,271 @@ +import * as CLI from 'yargs' +import { PATH_INFO } from '@plastichub/osr-commons' +import { IObjectLiteral, Hash } from '@plastichub/core' + +import { FS } from './liquidjs/fs/fs' + +export interface DisabledPlugins extends Hash { }; +export interface List { + [index: number]: T + length: number; +} +export type ObjectType = { new(): T } | (Function) +export type DeepPartial = { + [P in keyof T]?: DeepPartial +} +export interface IDelimitter { + begin: '%' + end: '%' +} + +export type JSONPathExpression = string + +export enum FLAG { + /** + * Instruct for no additional extra processing + * @constant + * @type int + */ + NONE = 0x00000000, + /** + * Will instruct the pre/post processor to base-64 decode or encode + * @constant + * @type int + */ + BASE_64 = 0x00000001, + /** + * Post/Pre process the value with a user function + * @constant + * @type int + */ + USE_FUNCTION = 0x00000002, + /** + * Replace variables with local scope's variables during the post/pre process + * @constant + * @type int + */ + REPLACE_VARIABLES = 0x00000004, + /** + * Replace variables with local scope's variables during the post/pre process but evaluate the whole string + * as Javascript + * @constant + * @type int + */ + REPLACE_VARIABLES_EVALUATED = 0x00000008, + /** + * Will instruct the pre/post processor to escpape evaluated or replaced variables or expressions + * @constant + * @type int + */ + ESCAPE = 0x00000010, + /** + * Will instruct the pre/post processor to replace block calls with oridinary vanilla script + * @constant + * @type int + */ + REPLACE_BLOCK_CALLS = 0x00000020, + /** + * Will instruct the pre/post processor to remove variable delimitters/placeholders from the final string + * @constant + * @type int + */ + REMOVE_DELIMTTERS = 0x00000040, + /** + * Will instruct the pre/post processor to remove "[" ,"]" , "(" , ")" , "{", "}" , "*" , "+" , "." + * @constant + * @type int + */ + ESCAPE_SPECIAL_CHARS = 0x00000080, + /** + * Will instruct the pre/post processor to use regular expressions over string substitution + * @constant + * @type int + */ + USE_REGEX = 0x00000100, + /** + * Will instruct the pre/post processor to use Filtrex (custom bison parser, needs xexpression) over string substitution + * @constant + * @type int + */ + USE_FILTREX = 0x00000200, + /** + * Cascade entry. There are cases where #USE_FUNCTION is not enough or we'd like to avoid further type checking. + * @constant + * @type int + */ + CASCADE = 0x00000400, + /** + * Cascade entry. There are cases where #USE_FUNCTION is not enough or we'd like to avoid further type checking. + * @constant + * @type int + */ + EXPRESSION = 0x00000800, + /** + * Dont parse anything + * @constant + * @type int + */ + DONT_PARSE = 0x000001000, + /** + * Convert to hex + * @constant + * @type int + */ + TO_HEX = 0x000002000, + /** + * Convert to hex + * @constant + * @type int + */ + REPLACE_HEX = 0x000004000, + /** + * Wait for finish + * @constant + * @type int + */ + WAIT = 0x000008000, + /** + * Wait for finish + * @constant + * @type int + */ + DONT_ESCAPE = 0x000010000, + /** + * Flag to mark the maximum core bit mask, after here its user land + * @constant + * @type int + */ + END = 0x000020000 +} + +export type LanguageType = "osr" | "liquid" +export type OutputType = "html" | "md" | "raw" | "pretty" + +export interface OptionEx { + include?: string | string[] + exclude?: string | string[] + query?: string | string[] +} +export interface IBaseOptions { + format?: OutputType + language?: LanguageType + output?: string + cwd?: string + env?: string + root?: string | string[] + profile?: IProfile + bootstrap?: string +} + +export type IDefaultCLIArgs = CLI.Arguments & IBaseOptions & { + stdout: boolean + variables?: any +} + +export type IOptions = IBaseOptions & { + template?: string + string?: string + source?: string + trace?: string + logLevel?: string + output?: string + variables?: Hash + cache?: boolean + module?: string + stdout?: boolean + dry?: boolean + srcInfo?: PATH_INFO + targetInfo?: PATH_INFO + pathVariables?: Hash + plugins?: string[] + alt?: boolean + language?: string // (osr|liquid) + targetLanguage?: string + sourceLanguage?: string + fs?: FS + resolve?: (file: string) => string +} + +export interface IEnvProfile { + includes?: string[] + variables?: Record +} + +export interface IProfile { + includes?: string[] + variables?: Hash + env?: Record +} + +export enum EType +{ + Number = 'Number', + String = 'String', + Boolean = 'Boolean', + Date = 'Date', + TimeStamp = 'TimeStamp', + Duration = 'Duration', + Url = 'Url', + UrlScheme = 'Url-Scheme', + Asset = 'Asset', + Symbol = 'Symbol', + Value = 'Value', + Values = 'Values', + Attribute = 'Attribute', + Parameter = 'Parameter', + Operation = 'Operation', + ParameterOperation = 'ParameterOperation', + Template = 'Template', + Arguments = 'Arguments' +} +export type TVector2D = [number, number]; +export type TVector3D = [number, number, number]; +export type TBBox = [TVector3D, TVector3D]; +export type TQuaternion = [number, number, number, number]; +export type TFlags = Record; +export type TExpression = string | [string | RegExp, { [key: string]: any }]; +export type TOptions = { flags?: TFlags | { [key: string]: any } }; + +export interface IUrlScheme { + url: string; + options?: { [key: string]: any }; +} + +export interface IAsset { + urlScheme: IUrlScheme; + options?: { [key: string]: any }; +} + +export type TSelector = TExpression | [TExpression, { [key: string]: any }]; + +export interface ITypeInfo { + type: string; + symbol: bigint; +} + +export interface IRef { + key: string | string; + struct: { [key: string]: any }; +} + +export interface IAttribute { + type: ITypeInfo; + value: bigint; +} + +export interface IParameter { + type: ITypeInfo; + value: bigint; +} + +export interface IParameterOperation { + param1: bigint; + param2: bigint; + operation: bigint; +} + +export type TTemplate = string | [ITypeInfo | TSelector, { [key: string]: any }]; +export type TArguments = { [key: string]: any } | any[]; + +export * from './zod_types' +export * from './zod_schema' \ No newline at end of file diff --git a/packages/osrl/src/vm/eval.ts b/packages/osrl/src/vm/eval.ts new file mode 100644 index 00000000..ca9d9e8e --- /dev/null +++ b/packages/osrl/src/vm/eval.ts @@ -0,0 +1,79 @@ +import * as vm from 'vm' +const isBuffer = Buffer.isBuffer +import * as requireLike from 'require-like' + +function merge (a, b) { + if (!a || !b) return a + var keys = Object.keys(b) + for (var k, i = 0, n = keys.length; i < n; i++) { + k = keys[i] + a[k] = b[k] + } + return a +} + +// Return the exports/module.exports variable set in the content +// content (String|VmScript): required +export const evaluate = (content, filename, scope, includeGlobals) => { + + if (typeof filename !== 'string') { + if (typeof filename === 'object') { + includeGlobals = scope + scope = filename + filename = '' + } else if (typeof filename === 'boolean') { + includeGlobals = filename + scope = {} + filename = '' + } + } + + // Expose standard Node globals + let sandbox:any = {} + let exports = {} + let _filename = filename || module.parent.filename; + + if (includeGlobals) { + merge(sandbox, global) + // console is non-enumerable in node v10 and above + sandbox.console = global.console + // process is non-enumerable in node v12 and above + sandbox.process = global.process + sandbox.URL = global.URL + sandbox.require = requireLike(_filename) + } + + if (typeof scope === 'object') { + merge(sandbox, scope) + } + + sandbox.exports = exports + sandbox.module = { + exports: exports, + filename: _filename, + id: _filename, + parent: module.parent, + require: sandbox.require || requireLike(_filename) + } + sandbox.global = sandbox + + var options = { + filename: filename, + displayErrors: false + } + + if (isBuffer(content)) { + content = content.toString() + } + + // Evaluate the content with the given scope + if (typeof content === 'string') { + var stringScript = content.replace(/^\#\!.*/, '') + var script = new vm.Script(stringScript, options) + script.runInNewContext(sandbox, options) + } else { + content.runInNewContext(sandbox, options) + } + + return sandbox.module.exports +} diff --git a/packages/osrl/src/zod_schema.ts b/packages/osrl/src/zod_schema.ts new file mode 100644 index 00000000..150a9c65 --- /dev/null +++ b/packages/osrl/src/zod_schema.ts @@ -0,0 +1,42 @@ +import { z } from 'zod' + +// import { CommonLanguageCodeSchema, TargetLanguageCodeSchema } from '@plastichub/osr-i18n' +import { TLogLevelNameSchema } from '@plastichub/osr-log/' +import { OSR_ROOT, generate_interfaces } from '@plastichub/osr-commons' + +//const CommonLanguageCodeSchema = z.ZodEnum<["en", "pt", "bg", "cs", "da", "de", "el", "es", "et", "fi", "fr", "hu", "id", "it", "ja", "ko", "lt", "lv", "nb", "nl", "pl", "ro", "ru", "sk", "sl", "sv", "tr", "uk", "zh"]>; +//const TargetLanguageCodeSchema = z.ZodUnion<[z.ZodEnum<["en", "pt", "bg", "cs", "da", "de", "el", "es", "et", "fi", "fr", "hu", "id", "it", "ja", "ko", "lt", "lv", "nb", "nl", "pl", "ro", "ru", "sk", "sl", "sv", "tr", "uk", "zh"]>, z.ZodEnum<["en-GB", "en-US", "pt-BR", "pt-PT"]>]>; + +export const compilerVariables = () => z.object({ + targetLanguage: z.string().default('en'), + sourceLanguage: z.string().default('en'), + i18n: z.string().default(OSR_ROOT()), +}).passthrough() + +export const compilerOptions = () => z.object({ + logLevel: TLogLevelNameSchema.default('info'), + root: z.string().default(`${process.cwd()}`), + cwd: z.string().default(`${process.cwd()}`), + env: z.string().default('hugo-debug'), + format: z.string().default('html'), + template: z.string().optional().describe('Template ifle'), + output: z.string().optional().describe('The destination file'), + source: z.string().optional().describe('The source file'), + trace: z.string().default("${SRC_DIR}/${SRC_NAME}-trace.json"), + language: z.string().default('osr'), + profile: z.string().optional().default('${OSR_ROOT}/osr-templates/osrl/.osrl.json'), + watchContent: z.boolean().default(false), + cache: z.boolean().default(true), + stdout: z.boolean().default(false), + module: z.string().default('osr-module'), + variables: compilerVariables().default({ + targetLanguage: 'en', + sourceLanguage: 'en', + i18n: OSR_ROOT() + }), +}, { description: 'ICompileOptions' }).passthrough() + +export const types = () => generate_interfaces( + [ + compilerOptions() + ], 'src/zod_types.ts') \ No newline at end of file diff --git a/packages/osrl/src/zod_types.ts b/packages/osrl/src/zod_types.ts new file mode 100644 index 00000000..0ae80304 --- /dev/null +++ b/packages/osrl/src/zod_types.ts @@ -0,0 +1,27 @@ +export interface ICompileOptions { + logLevel?: "silly" | "trace" | "debug" | "info" | "warn" | "error" | "fatal"; + root?: string; + cwd?: string; + env?: string; + format?: string; + /** Template ifle */ + template?: string | undefined; + /** The destination file */ + output?: string | undefined; + /** The source file */ + source?: string | undefined; + trace?: string; + language?: string; + profile?: string; + watchContent?: boolean; + cache?: boolean; + stdout?: boolean; + module?: string; + variables?: { + targetLanguage?: "en" | "pt" | "bg" | "cs" | "da" | "de" | "el" | "es" | "et" | "fi" | "fr" | "hu" | "id" | "it" | "ja" | "ko" | "lt" | "lv" | "nb" | "nl" | "pl" | "ro" | "ru" | "sk" | "sl" | "sv" | "tr" | "uk" | "zh"; + sourceLanguage?: ("en" | "pt" | "bg" | "cs" | "da" | "de" | "el" | "es" | "et" | "fi" | "fr" | "hu" | "id" | "it" | "ja" | "ko" | "lt" | "lv" | "nb" | "nl" | "pl" | "ro" | "ru" | "sk" | "sl" | "sv" | "tr" | "uk" | "zh") | ("en-GB" | "en-US" | "pt-BR" | "pt-PT"); + i18n?: string; + } & { + [x: string]: any; + }; +} \ No newline at end of file diff --git a/packages/osrl/test.in.md b/packages/osrl/test.in.md new file mode 100644 index 00000000..a47d4b0d --- /dev/null +++ b/packages/osrl/test.in.md @@ -0,0 +1,1412 @@ +--- +permalink: /system/testosr +--- +# Examples + +## Retrieve Environment variables + +- NUMBER_OF_PROCESSORS = 16 + +## Directory listing using fs.iterator (provides mime and directory sizes) + +- body.md - ./body.md - file - text/markdown | Size : 0 B +- sal-test copy.md - ./content/de/sal-test copy.md - file - text/markdown | Size : 76 B +- sal-test-ai.md - ./content/de/sal-test-ai.md - file - text/markdown | Size : 2.6 kB +- sal-test.md - ./content/de/sal-test.md - file - text/markdown | Size : 76 B +- sample_ai_svg.md - ./content/de/sample_ai_svg.md - file - text/markdown | Size : 4.9 kB +- builtin-modules.md - ./documentation/builtin-modules.md - file - text/markdown | Size : 4.5 kB +- Integration.md - ./documentation/Integration.md - file - text/markdown | Size : 979 B +- natives-osr-lang.md - ./documentation/natives-osr-lang.md - file - text/markdown | Size : 7.0 kB +- unit-conv.md - ./documentation/unit-conv.md - file - text/markdown | Size : 9.8 kB +- basic.md - ./examples/basic.md - file - text/markdown | Size : 4.9 kB +- google-sheet-source.md - ./examples/google-sheet-source.md - file - text/markdown | Size : 1.4 kB +- google-sheets.md - ./examples/google-sheets.md - file - text/markdown | Size : 1.4 kB +- Javascript.md - ./examples/Javascript.md - file - text/markdown | Size : 1.3 kB +- readme.md - ./examples/library/asterix/readme.md - file - text/markdown | Size : 401 B +- body.md - ./examples/library/asterix/templates/shared/body.md - file - text/markdown | Size : 248 B +- product_features.md - ./examples/library/osr/bazar/product_features.md - file - text/markdown | Size : 257 B +- extra_resources.md - ./examples/library/osr/extra_resources.md - file - text/markdown | Size : 0 B +- Readme.md - ./examples/Readme.md - file - text/markdown | Size : 149 B +- test.md - ./examples/test.md - file - text/markdown | Size : 5 B +- license.md - ./node_modules/@elastic/elasticsearch/node_modules/debug/node_modules/ms/license.md - file - text/markdown | Size : 1.1 kB +- readme.md - ./node_modules/@elastic/elasticsearch/node_modules/debug/node_modules/ms/readme.md - file - text/markdown | Size : 2.0 kB +- README.md - ./node_modules/@elastic/elasticsearch/node_modules/debug/README.md - file - text/markdown | Size : 21.6 kB +- license.md - ./node_modules/@elastic/elasticsearch/node_modules/ms/license.md - file - text/markdown | Size : 1.1 kB +- readme.md - ./node_modules/@elastic/elasticsearch/node_modules/ms/readme.md - file - text/markdown | Size : 1.9 kB +- README.md - ./node_modules/@elastic/elasticsearch/README.md - file - text/markdown | Size : 9.0 kB +- LICENSE.md - ./node_modules/@gar/promisify/LICENSE.md - file - text/markdown | Size : 1.1 kB +- README.md - ./node_modules/@gar/promisify/README.md - file - text/markdown | Size : 1.5 kB +- CHANGELOG.md - ./node_modules/@google-cloud/local-auth/CHANGELOG.md - file - text/markdown | Size : 1.6 kB +- README.md - ./node_modules/@google-cloud/local-auth/README.md - file - text/markdown | Size : 5.4 kB +- CHANGELOG.md - ./node_modules/@iarna/toml/CHANGELOG.md - file - text/markdown | Size : 10.6 kB +- README.md - ./node_modules/@iarna/toml/README.md - file - text/markdown | Size : 18.2 kB +- README.md - ./node_modules/@img/sharp-win32-x64/README.md - file - text/markdown | Size : 5.0 kB +- readme.md - ./node_modules/@isaacs/cliui/node_modules/ansi-regex/readme.md - file - text/markdown | Size : 2.6 kB +- readme.md - ./node_modules/@isaacs/cliui/node_modules/ansi-styles/readme.md - file - text/markdown | Size : 4.9 kB +- README.md - ./node_modules/@isaacs/cliui/node_modules/emoji-regex/README.md - file - text/markdown | Size : 4.5 kB +- readme.md - ./node_modules/@isaacs/cliui/node_modules/string-width/readme.md - file - text/markdown | Size : 1.7 kB +- readme.md - ./node_modules/@isaacs/cliui/node_modules/strip-ansi/readme.md - file - text/markdown | Size : 1.5 kB +- readme.md - ./node_modules/@isaacs/cliui/node_modules/wrap-ansi/readme.md - file - text/markdown | Size : 2.5 kB +- README.md - ./node_modules/@isaacs/cliui/README.md - file - text/markdown | Size : 3.1 kB +- CHANGELOG.md - ./node_modules/@mixmark-io/domino/CHANGELOG.md - file - text/markdown | Size : 13.7 kB +- CONTRIBUTING.md - ./node_modules/@mixmark-io/domino/CONTRIBUTING.md - file - text/markdown | Size : 228 B +- README.md - ./node_modules/@mixmark-io/domino/README.md - file - text/markdown | Size : 6.2 kB +- README.md - ./node_modules/@mixmark-io/domino/test/w3c/README.md - file - text/markdown | Size : 677 B +- README.md - ./node_modules/@nodelib/fs.scandir/README.md - file - text/markdown | Size : 5.0 kB +- README.md - ./node_modules/@nodelib/fs.stat/README.md - file - text/markdown | Size : 3.1 kB +- README.md - ./node_modules/@nodelib/fs.walk/README.md - file - text/markdown | Size : 6.1 kB +- LICENSE.md - ./node_modules/@npmcli/fs/LICENSE.md - file - text/markdown | Size : 798 B +- README.md - ./node_modules/@npmcli/fs/node_modules/semver/README.md - file - text/markdown | Size : 24.4 kB +- README.md - ./node_modules/@npmcli/fs/README.md - file - text/markdown | Size : 2.6 kB +- LICENSE.md - ./node_modules/@npmcli/move-file/LICENSE.md - file - text/markdown | Size : 1.1 kB +- CHANGELOG.md - ./node_modules/@npmcli/move-file/node_modules/mkdirp/CHANGELOG.md - file - text/markdown | Size : 448 B +- CHANGELOG.md - ./node_modules/@npmcli/move-file/node_modules/rimraf/CHANGELOG.md - file - text/markdown | Size : 1.5 kB +- README.md - ./node_modules/@npmcli/move-file/node_modules/rimraf/README.md - file - text/markdown | Size : 3.6 kB +- README.md - ./node_modules/@npmcli/move-file/README.md - file - text/markdown | Size : 1.5 kB +- README.md - ./node_modules/@one-ini/wasm/README.md - file - text/markdown | Size : 2.0 kB +- CHANGELOG.md - ./node_modules/@pkgjs/parseargs/CHANGELOG.md - file - text/markdown | Size : 7.0 kB +- README.md - ./node_modules/@pkgjs/parseargs/README.md - file - text/markdown | Size : 13.6 kB +- README.md - ./node_modules/@plastichub/core/README.md - file - text/markdown | Size : 18 B +- CHANGELOG.md - ./node_modules/@plastichub/fs/CHANGELOG.md - file - text/markdown | Size : 4.3 kB +- EXAMPLES.md - ./node_modules/@plastichub/fs/EXAMPLES.md - file - text/markdown | Size : 3.0 kB +- README.md - ./node_modules/@plastichub/fs/node_modules/@types/node/README.md - file - text/markdown | Size : 2.6 kB +- readme.md - ./node_modules/@plastichub/fs/node_modules/ansi-regex/readme.md - file - text/markdown | Size : 2.6 kB +- readme.md - ./node_modules/@plastichub/fs/node_modules/ansi-styles/readme.md - file - text/markdown | Size : 4.3 kB +- README.md - ./node_modules/@plastichub/fs/node_modules/brace-expansion/README.md - file - text/markdown | Size : 4.3 kB +- CHANGELOG.md - ./node_modules/@plastichub/fs/node_modules/cliui/CHANGELOG.md - file - text/markdown | Size : 4.6 kB +- README.md - ./node_modules/@plastichub/fs/node_modules/cliui/README.md - file - text/markdown | Size : 3.0 kB +- CHANGELOG.md - ./node_modules/@plastichub/fs/node_modules/color-convert/CHANGELOG.md - file - text/markdown | Size : 1.4 kB +- README.md - ./node_modules/@plastichub/fs/node_modules/color-convert/README.md - file - text/markdown | Size : 2.9 kB +- README.md - ./node_modules/@plastichub/fs/node_modules/color-name/README.md - file - text/markdown | Size : 384 B +- README.md - ./node_modules/@plastichub/fs/node_modules/emoji-regex/README.md - file - text/markdown | Size : 2.7 kB +- README.md - ./node_modules/@plastichub/fs/node_modules/glob/node_modules/minimatch/README.md - file - text/markdown | Size : 16.9 kB +- README.md - ./node_modules/@plastichub/fs/node_modules/glob/README.md - file - text/markdown | Size : 48.4 kB +- readme.md - ./node_modules/@plastichub/fs/node_modules/is-fullwidth-code-point/readme.md - file - text/markdown | Size : 843 B +- README.md - ./node_modules/@plastichub/fs/node_modules/minipass/README.md - file - text/markdown | Size : 27.2 kB +- readme.md - ./node_modules/@plastichub/fs/node_modules/string-width/readme.md - file - text/markdown | Size : 1.4 kB +- readme.md - ./node_modules/@plastichub/fs/node_modules/strip-ansi/readme.md - file - text/markdown | Size : 1.6 kB +- readme.md - ./node_modules/@plastichub/fs/node_modules/wrap-ansi/readme.md - file - text/markdown | Size : 2.7 kB +- CHANGELOG.md - ./node_modules/@plastichub/fs/node_modules/y18n/CHANGELOG.md - file - text/markdown | Size : 3.9 kB +- README.md - ./node_modules/@plastichub/fs/node_modules/y18n/README.md - file - text/markdown | Size : 3.2 kB +- README.md - ./node_modules/@plastichub/fs/node_modules/yargs/README.md - file - text/markdown | Size : 6.0 kB +- CHANGELOG.md - ./node_modules/@plastichub/fs/node_modules/yargs-parser/CHANGELOG.md - file - text/markdown | Size : 16.5 kB +- README.md - ./node_modules/@plastichub/fs/node_modules/yargs-parser/README.md - file - text/markdown | Size : 11.9 kB +- README.md - ./node_modules/@plastichub/fs/README.md - file - text/markdown | Size : 606 B +- LICENSE.md - ./node_modules/@plastichub/osr-cache/node_modules/@npmcli/move-file/LICENSE.md - file - text/markdown | Size : 1.1 kB +- README.md - ./node_modules/@plastichub/osr-cache/node_modules/@npmcli/move-file/README.md - file - text/markdown | Size : 1.5 kB +- LICENSE.md - ./node_modules/@plastichub/osr-cache/node_modules/@plastichub/osr-cli-commons/node_modules/@npmcli/fs/LICENSE.md - file - text/markdown | Size : 798 B +- README.md - ./node_modules/@plastichub/osr-cache/node_modules/@plastichub/osr-cli-commons/node_modules/@npmcli/fs/README.md - file - text/markdown | Size : 2.0 kB +- LICENSE.md - ./node_modules/@plastichub/osr-cache/node_modules/@plastichub/osr-cli-commons/node_modules/cacache/LICENSE.md - file - text/markdown | Size : 755 B +- README.md - ./node_modules/@plastichub/osr-cache/node_modules/@plastichub/osr-cli-commons/node_modules/cacache/README.md - file - text/markdown | Size : 22.9 kB +- README.md - ./node_modules/@plastichub/osr-cache/node_modules/@plastichub/osr-cli-commons/node_modules/fs-minipass/README.md - file - text/markdown | Size : 2.5 kB +- README.md - ./node_modules/@plastichub/osr-cache/node_modules/@plastichub/osr-cli-commons/node_modules/minipass/README.md - file - text/markdown | Size : 25.3 kB +- LICENSE.md - ./node_modules/@plastichub/osr-cache/node_modules/@plastichub/osr-cli-commons/node_modules/ssri/LICENSE.md - file - text/markdown | Size : 760 B +- README.md - ./node_modules/@plastichub/osr-cache/node_modules/@plastichub/osr-cli-commons/node_modules/ssri/README.md - file - text/markdown | Size : 20.4 kB +- README.md - ./node_modules/@plastichub/osr-cache/node_modules/@plastichub/osr-cli-commons/node_modules/unique-filename/README.md - file - text/markdown | Size : 1.2 kB +- README.md - ./node_modules/@plastichub/osr-cache/node_modules/@plastichub/osr-cli-commons/node_modules/unique-slug/README.md - file - text/markdown | Size : 445 B +- README.md - ./node_modules/@plastichub/osr-cache/node_modules/@plastichub/osr-cli-commons/node_modules/yargs/README.md - file - text/markdown | Size : 6.0 kB +- CHANGELOG.md - ./node_modules/@plastichub/osr-cache/node_modules/@plastichub/osr-cli-commons/node_modules/yargs-parser/CHANGELOG.md - file - text/markdown | Size : 16.5 kB +- README.md - ./node_modules/@plastichub/osr-cache/node_modules/@plastichub/osr-cli-commons/node_modules/yargs-parser/README.md - file - text/markdown | Size : 11.9 kB +- README.md - ./node_modules/@plastichub/osr-cache/node_modules/@plastichub/osr-cli-commons/README.md - file - text/markdown | Size : 1.1 kB +- natives.md - ./node_modules/@plastichub/osr-cache/node_modules/@plastichub/osr-commons/docs/natives.md - file - text/markdown | Size : 7.0 kB +- README.md - ./node_modules/@plastichub/osr-cache/node_modules/@plastichub/osr-commons/node_modules/yargs/README.md - file - text/markdown | Size : 6.0 kB +- CHANGELOG.md - ./node_modules/@plastichub/osr-cache/node_modules/@plastichub/osr-commons/node_modules/yargs-parser/CHANGELOG.md - file - text/markdown | Size : 16.5 kB +- README.md - ./node_modules/@plastichub/osr-cache/node_modules/@plastichub/osr-commons/node_modules/yargs-parser/README.md - file - text/markdown | Size : 11.9 kB +- README.md - ./node_modules/@plastichub/osr-cache/node_modules/@plastichub/osr-commons/README.md - file - text/markdown | Size : 196 B +- README.md - ./node_modules/@plastichub/osr-cache/node_modules/@types/node/README.md - file - text/markdown | Size : 2.6 kB +- readme.md - ./node_modules/@plastichub/osr-cache/node_modules/ansi-regex/readme.md - file - text/markdown | Size : 2.6 kB +- readme.md - ./node_modules/@plastichub/osr-cache/node_modules/ansi-styles/readme.md - file - text/markdown | Size : 4.3 kB +- CHANGELOG.md - ./node_modules/@plastichub/osr-cache/node_modules/axios/CHANGELOG.md - file - text/markdown | Size : 54.3 kB +- README.md - ./node_modules/@plastichub/osr-cache/node_modules/axios/lib/adapters/README.md - file - text/markdown | Size : 915 B +- README.md - ./node_modules/@plastichub/osr-cache/node_modules/axios/lib/core/README.md - file - text/markdown | Size : 399 B +- README.md - ./node_modules/@plastichub/osr-cache/node_modules/axios/lib/env/README.md - file - text/markdown | Size : 131 B +- README.md - ./node_modules/@plastichub/osr-cache/node_modules/axios/lib/helpers/README.md - file - text/markdown | Size : 351 B +- README.md - ./node_modules/@plastichub/osr-cache/node_modules/axios/README.md - file - text/markdown | Size : 33.1 kB +- SECURITY.md - ./node_modules/@plastichub/osr-cache/node_modules/axios/SECURITY.md - file - text/markdown | Size : 105 B +- UPGRADE_GUIDE.md - ./node_modules/@plastichub/osr-cache/node_modules/axios/UPGRADE_GUIDE.md - file - text/markdown | Size : 5.0 kB +- README.md - ./node_modules/@plastichub/osr-cache/node_modules/brace-expansion/README.md - file - text/markdown | Size : 4.3 kB +- LICENSE.md - ./node_modules/@plastichub/osr-cache/node_modules/cacache/LICENSE.md - file - text/markdown | Size : 755 B +- README.md - ./node_modules/@plastichub/osr-cache/node_modules/cacache/README.md - file - text/markdown | Size : 22.9 kB +- CHANGELOG.md - ./node_modules/@plastichub/osr-cache/node_modules/cliui/CHANGELOG.md - file - text/markdown | Size : 4.6 kB +- README.md - ./node_modules/@plastichub/osr-cache/node_modules/cliui/README.md - file - text/markdown | Size : 3.0 kB +- CHANGELOG.md - ./node_modules/@plastichub/osr-cache/node_modules/color-convert/CHANGELOG.md - file - text/markdown | Size : 1.4 kB +- README.md - ./node_modules/@plastichub/osr-cache/node_modules/color-convert/README.md - file - text/markdown | Size : 2.9 kB +- README.md - ./node_modules/@plastichub/osr-cache/node_modules/color-name/README.md - file - text/markdown | Size : 384 B +- README.md - ./node_modules/@plastichub/osr-cache/node_modules/emoji-regex/README.md - file - text/markdown | Size : 2.7 kB +- readme.md - ./node_modules/@plastichub/osr-cache/node_modules/filenamify/readme.md - file - text/markdown | Size : 2.0 kB +- Readme.md - ./node_modules/@plastichub/osr-cache/node_modules/form-data/Readme.md - file - text/markdown | Size : 12.1 kB +- README.md - ./node_modules/@plastichub/osr-cache/node_modules/fs-minipass/README.md - file - text/markdown | Size : 2.5 kB +- README.md - ./node_modules/@plastichub/osr-cache/node_modules/glob/README.md - file - text/markdown | Size : 15.2 kB +- readme.md - ./node_modules/@plastichub/osr-cache/node_modules/is-fullwidth-code-point/readme.md - file - text/markdown | Size : 843 B +- README.md - ./node_modules/@plastichub/osr-cache/node_modules/lru-cache/README.md - file - text/markdown | Size : 28.7 kB +- README.md - ./node_modules/@plastichub/osr-cache/node_modules/minimatch/README.md - file - text/markdown | Size : 8.5 kB +- README.md - ./node_modules/@plastichub/osr-cache/node_modules/minipass/README.md - file - text/markdown | Size : 25.3 kB +- CHANGELOG.md - ./node_modules/@plastichub/osr-cache/node_modules/mkdirp/CHANGELOG.md - file - text/markdown | Size : 448 B +- readme.md - ./node_modules/@plastichub/osr-cache/node_modules/p-map/readme.md - file - text/markdown | Size : 3.0 kB +- CHANGELOG.md - ./node_modules/@plastichub/osr-cache/node_modules/rimraf/CHANGELOG.md - file - text/markdown | Size : 1.5 kB +- README.md - ./node_modules/@plastichub/osr-cache/node_modules/rimraf/node_modules/brace-expansion/README.md - file - text/markdown | Size : 4.1 kB +- README.md - ./node_modules/@plastichub/osr-cache/node_modules/rimraf/node_modules/glob/README.md - file - text/markdown | Size : 15.2 kB +- README.md - ./node_modules/@plastichub/osr-cache/node_modules/rimraf/node_modules/minimatch/README.md - file - text/markdown | Size : 7.2 kB +- README.md - ./node_modules/@plastichub/osr-cache/node_modules/rimraf/README.md - file - text/markdown | Size : 3.6 kB +- README.md - ./node_modules/@plastichub/osr-cache/node_modules/semver/README.md - file - text/markdown | Size : 24.4 kB +- LICENSE.md - ./node_modules/@plastichub/osr-cache/node_modules/ssri/LICENSE.md - file - text/markdown | Size : 760 B +- README.md - ./node_modules/@plastichub/osr-cache/node_modules/ssri/README.md - file - text/markdown | Size : 20.4 kB +- readme.md - ./node_modules/@plastichub/osr-cache/node_modules/string-width/readme.md - file - text/markdown | Size : 1.4 kB +- readme.md - ./node_modules/@plastichub/osr-cache/node_modules/strip-ansi/readme.md - file - text/markdown | Size : 1.6 kB +- README.md - ./node_modules/@plastichub/osr-cache/node_modules/unique-filename/README.md - file - text/markdown | Size : 1.2 kB +- README.md - ./node_modules/@plastichub/osr-cache/node_modules/unique-slug/README.md - file - text/markdown | Size : 445 B +- readme.md - ./node_modules/@plastichub/osr-cache/node_modules/wrap-ansi/readme.md - file - text/markdown | Size : 2.7 kB +- CHANGELOG.md - ./node_modules/@plastichub/osr-cache/node_modules/y18n/CHANGELOG.md - file - text/markdown | Size : 3.9 kB +- README.md - ./node_modules/@plastichub/osr-cache/node_modules/y18n/README.md - file - text/markdown | Size : 3.2 kB +- README.md - ./node_modules/@plastichub/osr-cache/node_modules/yallist/README.md - file - text/markdown | Size : 4.7 kB +- README.md - ./node_modules/@plastichub/osr-cache/README.md - file - text/markdown | Size : 287 B +- natives.md - ./node_modules/@plastichub/osr-commons/docs/natives.md - file - text/markdown | Size : 7.0 kB +- todos_templates.md - ./node_modules/@plastichub/osr-commons/meta/todos_templates.md - file - text/markdown | Size : 2.1 kB +- readme.md - ./node_modules/@plastichub/osr-commons/node_modules/ansi-regex/readme.md - file - text/markdown | Size : 2.6 kB +- readme.md - ./node_modules/@plastichub/osr-commons/node_modules/ansi-styles/readme.md - file - text/markdown | Size : 4.3 kB +- CHANGELOG.md - ./node_modules/@plastichub/osr-commons/node_modules/cliui/CHANGELOG.md - file - text/markdown | Size : 4.6 kB +- README.md - ./node_modules/@plastichub/osr-commons/node_modules/cliui/README.md - file - text/markdown | Size : 3.0 kB +- CHANGELOG.md - ./node_modules/@plastichub/osr-commons/node_modules/color-convert/CHANGELOG.md - file - text/markdown | Size : 1.4 kB +- README.md - ./node_modules/@plastichub/osr-commons/node_modules/color-convert/README.md - file - text/markdown | Size : 2.9 kB +- README.md - ./node_modules/@plastichub/osr-commons/node_modules/color-name/README.md - file - text/markdown | Size : 384 B +- README.md - ./node_modules/@plastichub/osr-commons/node_modules/emoji-regex/README.md - file - text/markdown | Size : 2.7 kB +- readme.md - ./node_modules/@plastichub/osr-commons/node_modules/filenamify/readme.md - file - text/markdown | Size : 2.0 kB +- readme.md - ./node_modules/@plastichub/osr-commons/node_modules/is-fullwidth-code-point/readme.md - file - text/markdown | Size : 843 B +- readme.md - ./node_modules/@plastichub/osr-commons/node_modules/string-width/readme.md - file - text/markdown | Size : 1.4 kB +- readme.md - ./node_modules/@plastichub/osr-commons/node_modules/strip-ansi/readme.md - file - text/markdown | Size : 1.6 kB +- readme.md - ./node_modules/@plastichub/osr-commons/node_modules/wrap-ansi/readme.md - file - text/markdown | Size : 2.7 kB +- CHANGELOG.md - ./node_modules/@plastichub/osr-commons/node_modules/y18n/CHANGELOG.md - file - text/markdown | Size : 3.9 kB +- README.md - ./node_modules/@plastichub/osr-commons/node_modules/y18n/README.md - file - text/markdown | Size : 3.2 kB +- README.md - ./node_modules/@plastichub/osr-commons/node_modules/yargs/README.md - file - text/markdown | Size : 6.0 kB +- CHANGELOG.md - ./node_modules/@plastichub/osr-commons/node_modules/yargs-parser/CHANGELOG.md - file - text/markdown | Size : 16.5 kB +- README.md - ./node_modules/@plastichub/osr-commons/node_modules/yargs-parser/README.md - file - text/markdown | Size : 11.9 kB +- README.md - ./node_modules/@plastichub/osr-commons/README.md - file - text/markdown | Size : 196 B +- LICENSE.md - ./node_modules/@plastichub/osr-vcs/node_modules/@npmcli/fs/LICENSE.md - file - text/markdown | Size : 798 B +- README.md - ./node_modules/@plastichub/osr-vcs/node_modules/@npmcli/fs/README.md - file - text/markdown | Size : 2.0 kB +- LICENSE.md - ./node_modules/@plastichub/osr-vcs/node_modules/@npmcli/move-file/LICENSE.md - file - text/markdown | Size : 1.1 kB +- README.md - ./node_modules/@plastichub/osr-vcs/node_modules/@npmcli/move-file/README.md - file - text/markdown | Size : 1.5 kB +- README.md - ./node_modules/@plastichub/osr-vcs/node_modules/@plastichub/osr-cli-commons/README.md - file - text/markdown | Size : 1.3 kB +- tests.md - ./node_modules/@plastichub/osr-vcs/node_modules/@plastichub/osr-cli-commons/tests/tests.md - file - text/markdown | Size : 663 B +- README.md - ./node_modules/@plastichub/osr-vcs/node_modules/@types/node/README.md - file - text/markdown | Size : 2.6 kB +- readme.md - ./node_modules/@plastichub/osr-vcs/node_modules/ansi-regex/readme.md - file - text/markdown | Size : 2.6 kB +- readme.md - ./node_modules/@plastichub/osr-vcs/node_modules/ansi-styles/readme.md - file - text/markdown | Size : 4.3 kB +- README.md - ./node_modules/@plastichub/osr-vcs/node_modules/brace-expansion/README.md - file - text/markdown | Size : 4.3 kB +- LICENSE.md - ./node_modules/@plastichub/osr-vcs/node_modules/cacache/LICENSE.md - file - text/markdown | Size : 755 B +- README.md - ./node_modules/@plastichub/osr-vcs/node_modules/cacache/node_modules/glob/README.md - file - text/markdown | Size : 16.4 kB +- README.md - ./node_modules/@plastichub/osr-vcs/node_modules/cacache/node_modules/minimatch/README.md - file - text/markdown | Size : 8.5 kB +- README.md - ./node_modules/@plastichub/osr-vcs/node_modules/cacache/README.md - file - text/markdown | Size : 22.9 kB +- CHANGELOG.md - ./node_modules/@plastichub/osr-vcs/node_modules/cliui/CHANGELOG.md - file - text/markdown | Size : 4.6 kB +- README.md - ./node_modules/@plastichub/osr-vcs/node_modules/cliui/README.md - file - text/markdown | Size : 3.0 kB +- CHANGELOG.md - ./node_modules/@plastichub/osr-vcs/node_modules/color-convert/CHANGELOG.md - file - text/markdown | Size : 1.4 kB +- README.md - ./node_modules/@plastichub/osr-vcs/node_modules/color-convert/README.md - file - text/markdown | Size : 2.9 kB +- README.md - ./node_modules/@plastichub/osr-vcs/node_modules/color-name/README.md - file - text/markdown | Size : 384 B +- README.md - ./node_modules/@plastichub/osr-vcs/node_modules/emoji-regex/README.md - file - text/markdown | Size : 2.7 kB +- README.md - ./node_modules/@plastichub/osr-vcs/node_modules/glob/node_modules/minipass/README.md - file - text/markdown | Size : 27.2 kB +- README.md - ./node_modules/@plastichub/osr-vcs/node_modules/glob/README.md - file - text/markdown | Size : 48.4 kB +- readme.md - ./node_modules/@plastichub/osr-vcs/node_modules/is-fullwidth-code-point/readme.md - file - text/markdown | Size : 843 B +- README.md - ./node_modules/@plastichub/osr-vcs/node_modules/isexe/README.md - file - text/markdown | Size : 1.8 kB +- README.md - ./node_modules/@plastichub/osr-vcs/node_modules/lru-cache/README.md - file - text/markdown | Size : 36.7 kB +- README.md - ./node_modules/@plastichub/osr-vcs/node_modules/minimatch/README.md - file - text/markdown | Size : 16.9 kB +- CHANGELOG.md - ./node_modules/@plastichub/osr-vcs/node_modules/mkdirp/CHANGELOG.md - file - text/markdown | Size : 448 B +- readme.md - ./node_modules/@plastichub/osr-vcs/node_modules/p-map/readme.md - file - text/markdown | Size : 3.0 kB +- CHANGELOG.md - ./node_modules/@plastichub/osr-vcs/node_modules/rimraf/CHANGELOG.md - file - text/markdown | Size : 1.5 kB +- README.md - ./node_modules/@plastichub/osr-vcs/node_modules/rimraf/node_modules/brace-expansion/README.md - file - text/markdown | Size : 4.1 kB +- README.md - ./node_modules/@plastichub/osr-vcs/node_modules/rimraf/node_modules/glob/README.md - file - text/markdown | Size : 15.2 kB +- README.md - ./node_modules/@plastichub/osr-vcs/node_modules/rimraf/node_modules/minimatch/README.md - file - text/markdown | Size : 7.2 kB +- README.md - ./node_modules/@plastichub/osr-vcs/node_modules/rimraf/README.md - file - text/markdown | Size : 3.6 kB +- README.md - ./node_modules/@plastichub/osr-vcs/node_modules/semver/README.md - file - text/markdown | Size : 24.4 kB +- LICENSE.md - ./node_modules/@plastichub/osr-vcs/node_modules/ssri/LICENSE.md - file - text/markdown | Size : 760 B +- README.md - ./node_modules/@plastichub/osr-vcs/node_modules/ssri/README.md - file - text/markdown | Size : 20.4 kB +- readme.md - ./node_modules/@plastichub/osr-vcs/node_modules/string-width/readme.md - file - text/markdown | Size : 1.4 kB +- readme.md - ./node_modules/@plastichub/osr-vcs/node_modules/strip-ansi/readme.md - file - text/markdown | Size : 1.6 kB +- README.md - ./node_modules/@plastichub/osr-vcs/node_modules/unique-filename/README.md - file - text/markdown | Size : 1.2 kB +- README.md - ./node_modules/@plastichub/osr-vcs/node_modules/unique-slug/README.md - file - text/markdown | Size : 445 B +- README.md - ./node_modules/@plastichub/osr-vcs/node_modules/which/README.md - file - text/markdown | Size : 1.4 kB +- readme.md - ./node_modules/@plastichub/osr-vcs/node_modules/wrap-ansi/readme.md - file - text/markdown | Size : 2.7 kB +- CHANGELOG.md - ./node_modules/@plastichub/osr-vcs/node_modules/y18n/CHANGELOG.md - file - text/markdown | Size : 3.9 kB +- README.md - ./node_modules/@plastichub/osr-vcs/node_modules/y18n/README.md - file - text/markdown | Size : 3.2 kB +- CHANGELOG.md - ./node_modules/@plastichub/osr-vcs/node_modules/yargs/node_modules/yargs-parser/CHANGELOG.md - file - text/markdown | Size : 16.5 kB +- README.md - ./node_modules/@plastichub/osr-vcs/node_modules/yargs/node_modules/yargs-parser/README.md - file - text/markdown | Size : 11.9 kB +- README.md - ./node_modules/@plastichub/osr-vcs/node_modules/yargs/README.md - file - text/markdown | Size : 6.0 kB +- readme.md - ./node_modules/@sindresorhus/df/node_modules/execa/readme.md - file - text/markdown | Size : 2.5 kB +- readme.md - ./node_modules/@sindresorhus/df/node_modules/npm-run-path/readme.md - file - text/markdown | Size : 1.5 kB +- readme.md - ./node_modules/@sindresorhus/df/node_modules/path-key/readme.md - file - text/markdown | Size : 962 B +- readme.md - ./node_modules/@sindresorhus/df/readme.md - file - text/markdown | Size : 1.7 kB +- README.md - ./node_modules/@szmarczak/http-timer/README.md - file - text/markdown | Size : 2.9 kB +- README.md - ./node_modules/@types/cacache/README.md - file - text/markdown | Size : 543 B +- README.md - ./node_modules/@types/decompress/README.md - file - text/markdown | Size : 2.0 kB +- README.md - ./node_modules/@types/denodeify/README.md - file - text/markdown | Size : 503 B +- README.md - ./node_modules/@types/download/README.md - file - text/markdown | Size : 2.8 kB +- README.md - ./node_modules/@types/get-stdin/README.md - file - text/markdown | Size : 182 B +- README.md - ./node_modules/@types/glob/node_modules/@types/minimatch/README.md - file - text/markdown | Size : 595 B +- README.md - ./node_modules/@types/glob/README.md - file - text/markdown | Size : 728 B +- README.md - ./node_modules/@types/got/README.md - file - text/markdown | Size : 646 B +- README.md - ./node_modules/@types/http-cache-semantics/README.md - file - text/markdown | Size : 532 B +- README.md - ./node_modules/@types/inquirer/node_modules/rxjs/README.md - file - text/markdown | Size : 5.3 kB +- README.md - ./node_modules/@types/inquirer/node_modules/rxjs/src/README.md - file - text/markdown | Size : 5.3 kB +- README.md - ./node_modules/@types/inquirer/node_modules/rxjs/_esm2015/README.md - file - text/markdown | Size : 5.3 kB +- README.md - ./node_modules/@types/inquirer/node_modules/rxjs/_esm5/README.md - file - text/markdown | Size : 5.3 kB +- README.md - ./node_modules/@types/inquirer/node_modules/tslib/README.md - file - text/markdown | Size : 3.4 kB +- README.md - ./node_modules/@types/inquirer/README.md - file - text/markdown | Size : 1.0 kB +- README.md - ./node_modules/@types/is-glob/README.md - file - text/markdown | Size : 1.3 kB +- README.md - ./node_modules/@types/js-beautify/README.md - file - text/markdown | Size : 689 B +- README.md - ./node_modules/@types/jsonpath/README.md - file - text/markdown | Size : 536 B +- README.md - ./node_modules/@types/minimatch/README.md - file - text/markdown | Size : 544 B +- README.md - ./node_modules/@types/moment/README.md - file - text/markdown | Size : 163 B +- README.md - ./node_modules/@types/node/README.md - file - text/markdown | Size : 2.3 kB +- README.md - ./node_modules/@types/through/README.md - file - text/markdown | Size : 545 B +- README.md - ./node_modules/@types/which/README.md - file - text/markdown | Size : 2.7 kB +- README.md - ./node_modules/@types/yargs/README.md - file - text/markdown | Size : 940 B +- README.md - ./node_modules/@types/yargs-parser/README.md - file - text/markdown | Size : 513 B +- CHANGELOG.md - ./node_modules/abab/CHANGELOG.md - file - text/markdown | Size : 901 B +- LICENSE.md - ./node_modules/abab/LICENSE.md - file - text/markdown | Size : 1.7 kB +- README.md - ./node_modules/abab/README.md - file - text/markdown | Size : 2.2 kB +- README.md - ./node_modules/abbrev/README.md - file - text/markdown | Size : 499 B +- CHANGELOG.md - ./node_modules/acorn/CHANGELOG.md - file - text/markdown | Size : 17.7 kB +- README.md - ./node_modules/acorn/README.md - file - text/markdown | Size : 11.0 kB +- CHANGELOG.md - ./node_modules/acorn-globals/node_modules/acorn/CHANGELOG.md - file - text/markdown | Size : 14.9 kB +- README.md - ./node_modules/acorn-globals/node_modules/acorn/README.md - file - text/markdown | Size : 10.4 kB +- README.md - ./node_modules/acorn-globals/README.md - file - text/markdown | Size : 1.9 kB +- CHANGELOG.md - ./node_modules/acorn-walk/CHANGELOG.md - file - text/markdown | Size : 2.4 kB +- README.md - ./node_modules/acorn-walk/README.md - file - text/markdown | Size : 4.6 kB +- README.md - ./node_modules/agent-base/node_modules/debug/README.md - file - text/markdown | Size : 21.6 kB +- license.md - ./node_modules/agent-base/node_modules/ms/license.md - file - text/markdown | Size : 1.1 kB +- readme.md - ./node_modules/agent-base/node_modules/ms/readme.md - file - text/markdown | Size : 2.0 kB +- README.md - ./node_modules/agent-base/README.md - file - text/markdown | Size : 5.1 kB +- readme.md - ./node_modules/aggregate-error/readme.md - file - text/markdown | Size : 1.8 kB +- readme.md - ./node_modules/ansi-escapes/readme.md - file - text/markdown | Size : 5.0 kB +- readme.md - ./node_modules/ansi-regex/readme.md - file - text/markdown | Size : 2.9 kB +- readme.md - ./node_modules/ansi-styles/readme.md - file - text/markdown | Size : 3.7 kB +- readme.md - ./node_modules/archive-type/node_modules/file-type/readme.md - file - text/markdown | Size : 5.3 kB +- readme.md - ./node_modules/archive-type/readme.md - file - text/markdown | Size : 1.0 kB +- CHANGELOG.md - ./node_modules/argparse/CHANGELOG.md - file - text/markdown | Size : 3.4 kB +- README.md - ./node_modules/argparse/README.md - file - text/markdown | Size : 8.4 kB +- CHANGELOG.md - ./node_modules/array-buffer-byte-length/CHANGELOG.md - file - text/markdown | Size : 2.1 kB +- README.md - ./node_modules/array-buffer-byte-length/README.md - file - text/markdown | Size : 2.0 kB +- README.md - ./node_modules/array-each/README.md - file - text/markdown | Size : 3.1 kB +- README.md - ./node_modules/array-slice/README.md - file - text/markdown | Size : 3.5 kB +- readme.md - ./node_modules/array-union/readme.md - file - text/markdown | Size : 513 B +- readme.md - ./node_modules/array-uniq/readme.md - file - text/markdown | Size : 671 B +- CHANGELOG.md - ./node_modules/arraybuffer.prototype.slice/CHANGELOG.md - file - text/markdown | Size : 2.9 kB +- README.md - ./node_modules/arraybuffer.prototype.slice/README.md - file - text/markdown | Size : 2.6 kB +- readme.md - ./node_modules/arrify/readme.md - file - text/markdown | Size : 543 B +- CHANGELOG.md - ./node_modules/async/CHANGELOG.md - file - text/markdown | Size : 33.4 kB +- README.md - ./node_modules/async/README.md - file - text/markdown | Size : 3.2 kB +- README.md - ./node_modules/asynckit/README.md - file - text/markdown | Size : 7.6 kB +- CHANGELOG.md - ./node_modules/available-typed-arrays/CHANGELOG.md - file - text/markdown | Size : 9.2 kB +- README.md - ./node_modules/available-typed-arrays/README.md - file - text/markdown | Size : 2.0 kB +- CHANGELOG.md - ./node_modules/axios/CHANGELOG.md - file - text/markdown | Size : 44.9 kB +- README.md - ./node_modules/axios/lib/adapters/README.md - file - text/markdown | Size : 915 B +- README.md - ./node_modules/axios/lib/core/README.md - file - text/markdown | Size : 399 B +- README.md - ./node_modules/axios/lib/helpers/README.md - file - text/markdown | Size : 351 B +- README.md - ./node_modules/axios/README.md - file - text/markdown | Size : 28.6 kB +- SECURITY.md - ./node_modules/axios/SECURITY.md - file - text/markdown | Size : 105 B +- UPGRADE_GUIDE.md - ./node_modules/axios/UPGRADE_GUIDE.md - file - text/markdown | Size : 4.8 kB +- LICENSE.md - ./node_modules/balanced-match/LICENSE.md - file - text/markdown | Size : 1.1 kB +- README.md - ./node_modules/balanced-match/README.md - file - text/markdown | Size : 3.5 kB +- README.md - ./node_modules/base64-js/README.md - file - text/markdown | Size : 1.1 kB +- CHANGELOG.md - ./node_modules/bignumber.js/CHANGELOG.md - file - text/markdown | Size : 8.0 kB +- LICENCE.md - ./node_modules/bignumber.js/LICENCE.md - file - text/markdown | Size : 1.1 kB +- README.md - ./node_modules/bignumber.js/README.md - file - text/markdown | Size : 10.6 kB +- LICENSE.md - ./node_modules/bl/LICENSE.md - file - text/markdown | Size : 1.2 kB +- README.md - ./node_modules/bl/README.md - file - text/markdown | Size : 12.7 kB +- changelog.md - ./node_modules/bluebird/changelog.md - file - text/markdown | Size : 87 B +- README.md - ./node_modules/bluebird/README.md - file - text/markdown | Size : 3.1 kB +- README.md - ./node_modules/boolbase/README.md - file - text/markdown | Size : 655 B +- README.md - ./node_modules/brace-expansion/README.md - file - text/markdown | Size : 4.1 kB +- README.md - ./node_modules/braces/README.md - file - text/markdown | Size : 21.5 kB +- README.md - ./node_modules/browser-process-hrtime/README.md - file - text/markdown | Size : 920 B +- AUTHORS.md - ./node_modules/buffer/AUTHORS.md - file - text/markdown | Size : 2.7 kB +- README.md - ./node_modules/buffer/README.md - file - text/markdown | Size : 17.3 kB +- readme.md - ./node_modules/buffer-alloc/readme.md - file - text/markdown | Size : 1.2 kB +- readme.md - ./node_modules/buffer-alloc-unsafe/readme.md - file - text/markdown | Size : 1.1 kB +- README.md - ./node_modules/buffer-crc32/README.md - file - text/markdown | Size : 1.5 kB +- README.md - ./node_modules/buffer-equal-constant-time/README.md - file - text/markdown | Size : 1.1 kB +- readme.md - ./node_modules/buffer-fill/readme.md - file - text/markdown | Size : 1.7 kB +- readme.md - ./node_modules/buffer-from/readme.md - file - text/markdown | Size : 2.0 kB +- LICENSE.md - ./node_modules/cacache/LICENSE.md - file - text/markdown | Size : 755 B +- README.md - ./node_modules/cacache/node_modules/lru-cache/README.md - file - text/markdown | Size : 6.0 kB +- CHANGELOG.md - ./node_modules/cacache/node_modules/mkdirp/CHANGELOG.md - file - text/markdown | Size : 448 B +- readme.md - ./node_modules/cacache/node_modules/p-map/readme.md - file - text/markdown | Size : 3.0 kB +- CHANGELOG.md - ./node_modules/cacache/node_modules/rimraf/CHANGELOG.md - file - text/markdown | Size : 1.5 kB +- README.md - ./node_modules/cacache/node_modules/rimraf/README.md - file - text/markdown | Size : 3.6 kB +- README.md - ./node_modules/cacache/node_modules/yallist/README.md - file - text/markdown | Size : 4.7 kB +- README.md - ./node_modules/cacache/README.md - file - text/markdown | Size : 22.2 kB +- README.md - ./node_modules/cacheable-lookup/README.md - file - text/markdown | Size : 7.8 kB +- CHANGELOG.md - ./node_modules/call-bind/CHANGELOG.md - file - text/markdown | Size : 8.1 kB +- README.md - ./node_modules/call-bind/README.md - file - text/markdown | Size : 2.0 kB +- readme.md - ./node_modules/camelcase/readme.md - file - text/markdown | Size : 2.2 kB +- readme.md - ./node_modules/chalk/readme.md - file - text/markdown | Size : 10.8 kB +- README.md - ./node_modules/chardet/README.md - file - text/markdown | Size : 1.9 kB +- README.md - ./node_modules/cheerio/node_modules/parse5/README.md - file - text/markdown | Size : 885 B +- Readme.md - ./node_modules/cheerio/Readme.md - file - text/markdown | Size : 15.2 kB +- README.md - ./node_modules/cheerio-select/README.md - file - text/markdown | Size : 985 B +- README.md - ./node_modules/chownr/README.md - file - text/markdown | Size : 59 B +- readme.md - ./node_modules/clean-stack/readme.md - file - text/markdown | Size : 1.6 kB +- readme.md - ./node_modules/cli-cursor/readme.md - file - text/markdown | Size : 752 B +- readme.md - ./node_modules/cli-spinners/readme.md - file - text/markdown | Size : 1.5 kB +- CHANGELOG.md - ./node_modules/cli-width/CHANGELOG.md - file - text/markdown | Size : 1.5 kB +- README.md - ./node_modules/cli-width/README.md - file - text/markdown | Size : 1.8 kB +- CHANGELOG.md - ./node_modules/cliui/CHANGELOG.md - file - text/markdown | Size : 1.9 kB +- README.md - ./node_modules/cliui/README.md - file - text/markdown | Size : 2.7 kB +- README.md - ./node_modules/clone/README.md - file - text/markdown | Size : 3.6 kB +- readme.md - ./node_modules/clone-response/node_modules/mimic-response/readme.md - file - text/markdown | Size : 1.1 kB +- README.md - ./node_modules/clone-response/README.md - file - text/markdown | Size : 2.1 kB +- readme.md - ./node_modules/code-point-at/readme.md - file - text/markdown | Size : 617 B +- CHANGELOG.md - ./node_modules/color/node_modules/color-convert/CHANGELOG.md - file - text/markdown | Size : 1.4 kB +- README.md - ./node_modules/color/node_modules/color-convert/README.md - file - text/markdown | Size : 2.9 kB +- README.md - ./node_modules/color/node_modules/color-name/README.md - file - text/markdown | Size : 384 B +- README.md - ./node_modules/color/README.md - file - text/markdown | Size : 3.7 kB +- CHANGELOG.md - ./node_modules/color-convert/CHANGELOG.md - file - text/markdown | Size : 1.4 kB +- README.md - ./node_modules/color-convert/README.md - file - text/markdown | Size : 2.9 kB +- README.md - ./node_modules/color-name/README.md - file - text/markdown | Size : 384 B +- README.md - ./node_modules/color-string/README.md - file - text/markdown | Size : 2.6 kB +- README.md - ./node_modules/colors/README.md - file - text/markdown | Size : 4.6 kB +- Readme.md - ./node_modules/combined-stream/Readme.md - file - text/markdown | Size : 4.6 kB +- CHANGELOG.md - ./node_modules/commander/CHANGELOG.md - file - text/markdown | Size : 11.3 kB +- Readme.md - ./node_modules/commander/Readme.md - file - text/markdown | Size : 12.8 kB +- README.md - ./node_modules/condense-newlines/node_modules/kind-of/README.md - file - text/markdown | Size : 8.1 kB +- README.md - ./node_modules/condense-newlines/README.md - file - text/markdown | Size : 3.1 kB +- HISTORY.md - ./node_modules/content-disposition/HISTORY.md - file - text/markdown | Size : 952 B +- README.md - ./node_modules/content-disposition/node_modules/safe-buffer/README.md - file - text/markdown | Size : 19.6 kB +- README.md - ./node_modules/content-disposition/README.md - file - text/markdown | Size : 5.2 kB +- README.md - ./node_modules/convert-units/README.md - file - text/markdown | Size : 5.7 kB +- README.md - ./node_modules/core-util-is/README.md - file - text/markdown | Size : 67 B +- CHANGELOG.md - ./node_modules/cross-fetch/CHANGELOG.md - file - text/markdown | Size : 287 B +- README.md - ./node_modules/cross-fetch/README.md - file - text/markdown | Size : 6.0 kB +- CHANGELOG.md - ./node_modules/cross-spawn/CHANGELOG.md - file - text/markdown | Size : 3.4 kB +- README.md - ./node_modules/cross-spawn/README.md - file - text/markdown | Size : 4.8 kB +- README.md - ./node_modules/cross-spawn-async/README.md - file - text/markdown | Size : 2.4 kB +- README.md - ./node_modules/cryptr/README.md - file - text/markdown | Size : 1.1 kB +- README.md - ./node_modules/css-select/README.md - file - text/markdown | Size : 12.3 kB +- readme.md - ./node_modules/css-what/readme.md - file - text/markdown | Size : 4.7 kB +- README.md - ./node_modules/cssstyle/README.md - file - text/markdown | Size : 919 B +- README.md - ./node_modules/data-urls/README.md - file - text/markdown | Size : 3.7 kB +- CHANGELOG.md - ./node_modules/data-view-buffer/CHANGELOG.md - file - text/markdown | Size : 1.3 kB +- README.md - ./node_modules/data-view-buffer/README.md - file - text/markdown | Size : 1.9 kB +- CHANGELOG.md - ./node_modules/data-view-byte-length/CHANGELOG.md - file - text/markdown | Size : 1.5 kB +- README.md - ./node_modules/data-view-byte-length/README.md - file - text/markdown | Size : 2.0 kB +- CHANGELOG.md - ./node_modules/data-view-byte-offset/CHANGELOG.md - file - text/markdown | Size : 834 B +- README.md - ./node_modules/data-view-byte-offset/README.md - file - text/markdown | Size : 2.0 kB +- Readme.md - ./node_modules/dateformat/Readme.md - file - text/markdown | Size : 11.5 kB +- CHANGELOG.md - ./node_modules/debug/CHANGELOG.md - file - text/markdown | Size : 11.7 kB +- README.md - ./node_modules/debug/README.md - file - text/markdown | Size : 17.9 kB +- readme.md - ./node_modules/decamelize/readme.md - file - text/markdown | Size : 781 B +- CHANGELOG.md - ./node_modules/decimal.js/CHANGELOG.md - file - text/markdown | Size : 5.9 kB +- LICENCE.md - ./node_modules/decimal.js/LICENCE.md - file - text/markdown | Size : 1.1 kB +- README.md - ./node_modules/decimal.js/README.md - file - text/markdown | Size : 8.6 kB +- readme.md - ./node_modules/decode-uri-component/readme.md - file - text/markdown | Size : 2.0 kB +- readme.md - ./node_modules/decompress/node_modules/make-dir/node_modules/pify/readme.md - file - text/markdown | Size : 3.2 kB +- readme.md - ./node_modules/decompress/node_modules/make-dir/readme.md - file - text/markdown | Size : 2.7 kB +- readme.md - ./node_modules/decompress/node_modules/pify/readme.md - file - text/markdown | Size : 2.6 kB +- readme.md - ./node_modules/decompress/readme.md - file - text/markdown | Size : 1.9 kB +- readme.md - ./node_modules/decompress-response/node_modules/mimic-response/readme.md - file - text/markdown | Size : 1.9 kB +- readme.md - ./node_modules/decompress-response/readme.md - file - text/markdown | Size : 1.5 kB +- readme.md - ./node_modules/decompress-tar/node_modules/file-type/readme.md - file - text/markdown | Size : 5.3 kB +- readme.md - ./node_modules/decompress-tar/readme.md - file - text/markdown | Size : 753 B +- readme.md - ./node_modules/decompress-tarbz2/node_modules/file-type/readme.md - file - text/markdown | Size : 5.6 kB +- readme.md - ./node_modules/decompress-tarbz2/readme.md - file - text/markdown | Size : 777 B +- readme.md - ./node_modules/decompress-targz/node_modules/file-type/readme.md - file - text/markdown | Size : 5.3 kB +- readme.md - ./node_modules/decompress-targz/readme.md - file - text/markdown | Size : 775 B +- readme.md - ./node_modules/decompress-unzip/node_modules/file-type/readme.md - file - text/markdown | Size : 5.1 kB +- readme.md - ./node_modules/decompress-unzip/node_modules/get-stream/readme.md - file - text/markdown | Size : 3.9 kB +- readme.md - ./node_modules/decompress-unzip/node_modules/pify/readme.md - file - text/markdown | Size : 2.6 kB +- readme.md - ./node_modules/decompress-unzip/readme.md - file - text/markdown | Size : 630 B +- changelog.md - ./node_modules/deepmerge/changelog.md - file - text/markdown | Size : 9.8 kB +- readme.md - ./node_modules/deepmerge/readme.md - file - text/markdown | Size : 5.7 kB +- README.md - ./node_modules/defaults/README.md - file - text/markdown | Size : 827 B +- README.md - ./node_modules/defer-to-connect/README.md - file - text/markdown | Size : 951 B +- CHANGELOG.md - ./node_modules/define-data-property/CHANGELOG.md - file - text/markdown | Size : 5.4 kB +- README.md - ./node_modules/define-data-property/README.md - file - text/markdown | Size : 2.4 kB +- CHANGELOG.md - ./node_modules/define-properties/CHANGELOG.md - file - text/markdown | Size : 4.2 kB +- CHANGELOG.md - ./node_modules/define-properties/node_modules/object-keys/CHANGELOG.md - file - text/markdown | Size : 7.5 kB +- README.md - ./node_modules/define-properties/node_modules/object-keys/README.md - file - text/markdown | Size : 2.5 kB +- README.md - ./node_modules/define-properties/README.md - file - text/markdown | Size : 2.8 kB +- Readme.md - ./node_modules/delayed-stream/Readme.md - file - text/markdown | Size : 3.9 kB +- CHANGELOG.md - ./node_modules/denodeify/CHANGELOG.md - file - text/markdown | Size : 247 B +- README.md - ./node_modules/denodeify/README.md - file - text/markdown | Size : 4.0 kB +- README.md - ./node_modules/detect-file/README.md - file - text/markdown | Size : 3.7 kB +- README.md - ./node_modules/detect-libc/README.md - file - text/markdown | Size : 3.2 kB +- readme.md - ./node_modules/dir-glob/readme.md - file - text/markdown | Size : 1.5 kB +- README.md - ./node_modules/dom-serializer/README.md - file - text/markdown | Size : 3.5 kB +- readme.md - ./node_modules/domelementtype/readme.md - file - text/markdown | Size : 45 B +- LICENSE.md - ./node_modules/domexception/node_modules/webidl-conversions/LICENSE.md - file - text/markdown | Size : 1.3 kB +- README.md - ./node_modules/domexception/node_modules/webidl-conversions/README.md - file - text/markdown | Size : 8.1 kB +- README.md - ./node_modules/domexception/README.md - file - text/markdown | Size : 1.1 kB +- readme.md - ./node_modules/domhandler/readme.md - file - text/markdown | Size : 2.8 kB +- readme.md - ./node_modules/domutils/readme.md - file - text/markdown | Size : 2.1 kB +- readme.md - ./node_modules/download/node_modules/@sindresorhus/is/readme.md - file - text/markdown | Size : 7.3 kB +- readme.md - ./node_modules/download/node_modules/cacheable-request/node_modules/get-stream/readme.md - file - text/markdown | Size : 3.9 kB +- readme.md - ./node_modules/download/node_modules/cacheable-request/node_modules/lowercase-keys/readme.md - file - text/markdown | Size : 533 B +- README.md - ./node_modules/download/node_modules/cacheable-request/README.md - file - text/markdown | Size : 7.1 kB +- readme.md - ./node_modules/download/node_modules/decompress-response/readme.md - file - text/markdown | Size : 841 B +- readme.md - ./node_modules/download/node_modules/get-stream/readme.md - file - text/markdown | Size : 4.0 kB +- readme.md - ./node_modules/download/node_modules/got/node_modules/get-stream/readme.md - file - text/markdown | Size : 3.9 kB +- readme.md - ./node_modules/download/node_modules/got/node_modules/pify/readme.md - file - text/markdown | Size : 3.2 kB +- readme.md - ./node_modules/download/node_modules/got/readme.md - file - text/markdown | Size : 19.4 kB +- README.md - ./node_modules/download/node_modules/http-cache-semantics/README.md - file - text/markdown | Size : 8.9 kB +- README.md - ./node_modules/download/node_modules/json-buffer/README.md - file - text/markdown | Size : 658 B +- README.md - ./node_modules/download/node_modules/keyv/README.md - file - text/markdown | Size : 8.9 kB +- readme.md - ./node_modules/download/node_modules/lowercase-keys/readme.md - file - text/markdown | Size : 533 B +- readme.md - ./node_modules/download/node_modules/mimic-response/readme.md - file - text/markdown | Size : 1.1 kB +- readme.md - ./node_modules/download/node_modules/normalize-url/readme.md - file - text/markdown | Size : 3.6 kB +- readme.md - ./node_modules/download/node_modules/p-cancelable/readme.md - file - text/markdown | Size : 3.5 kB +- readme.md - ./node_modules/download/node_modules/pify/readme.md - file - text/markdown | Size : 3.6 kB +- readme.md - ./node_modules/download/node_modules/query-string/readme.md - file - text/markdown | Size : 6.2 kB +- README.md - ./node_modules/download/node_modules/responselike/README.md - file - text/markdown | Size : 1.9 kB +- readme.md - ./node_modules/download/readme.md - file - text/markdown | Size : 1.6 kB +- readme.md - ./node_modules/duplexer3/readme.md - file - text/markdown | Size : 2.1 kB +- README.md - ./node_modules/eastasianwidth/README.md - file - text/markdown | Size : 1.2 kB +- README.md - ./node_modules/ecdsa-sig-formatter/README.md - file - text/markdown | Size : 1.9 kB +- README.md - ./node_modules/editorconfig/node_modules/brace-expansion/README.md - file - text/markdown | Size : 4.3 kB +- Readme.md - ./node_modules/editorconfig/node_modules/commander/Readme.md - file - text/markdown | Size : 41.7 kB +- README.md - ./node_modules/editorconfig/node_modules/lru-cache/README.md - file - text/markdown | Size : 6.0 kB +- README.md - ./node_modules/editorconfig/node_modules/minimatch/README.md - file - text/markdown | Size : 16.9 kB +- README.md - ./node_modules/editorconfig/node_modules/semver/README.md - file - text/markdown | Size : 23.7 kB +- README.md - ./node_modules/editorconfig/node_modules/yallist/README.md - file - text/markdown | Size : 4.7 kB +- README.md - ./node_modules/editorconfig/README.md - file - text/markdown | Size : 7.0 kB +- README.md - ./node_modules/emoji-regex/README.md - file - text/markdown | Size : 2.7 kB +- README.md - ./node_modules/end-of-stream/README.md - file - text/markdown | Size : 1.7 kB +- readme.md - ./node_modules/entities/readme.md - file - text/markdown | Size : 5.1 kB +- CHANGELOG.md - ./node_modules/env-var/CHANGELOG.md - file - text/markdown | Size : 6.0 kB +- README.md - ./node_modules/env-var/README.md - file - text/markdown | Size : 5.4 kB +- HISTORY.md - ./node_modules/errlop/HISTORY.md - file - text/markdown | Size : 8.3 kB +- LICENSE.md - ./node_modules/errlop/LICENSE.md - file - text/markdown | Size : 1.4 kB +- README.md - ./node_modules/errlop/README.md - file - text/markdown | Size : 13.2 kB +- README.md - ./node_modules/errno/README.md - file - text/markdown | Size : 4.7 kB +- README.md - ./node_modules/error-ex/README.md - file - text/markdown | Size : 4.1 kB +- CHANGELOG.md - ./node_modules/es-abstract/CHANGELOG.md - file - text/markdown | Size : 41.3 kB +- CHANGELOG.md - ./node_modules/es-abstract/node_modules/object-keys/CHANGELOG.md - file - text/markdown | Size : 7.5 kB +- README.md - ./node_modules/es-abstract/node_modules/object-keys/README.md - file - text/markdown | Size : 2.5 kB +- README.md - ./node_modules/es-abstract/README.md - file - text/markdown | Size : 1.9 kB +- CHANGELOG.md - ./node_modules/es-define-property/CHANGELOG.md - file - text/markdown | Size : 822 B +- README.md - ./node_modules/es-define-property/README.md - file - text/markdown | Size : 2.1 kB +- CHANGELOG.md - ./node_modules/es-errors/CHANGELOG.md - file - text/markdown | Size : 1.8 kB +- README.md - ./node_modules/es-errors/README.md - file - text/markdown | Size : 2.1 kB +- CHANGELOG.md - ./node_modules/es-object-atoms/CHANGELOG.md - file - text/markdown | Size : 934 B +- README.md - ./node_modules/es-object-atoms/README.md - file - text/markdown | Size : 2.4 kB +- CHANGELOG.md - ./node_modules/es-set-tostringtag/CHANGELOG.md - file - text/markdown | Size : 3.0 kB +- README.md - ./node_modules/es-set-tostringtag/README.md - file - text/markdown | Size : 1.9 kB +- CHANGELOG.md - ./node_modules/es-to-primitive/CHANGELOG.md - file - text/markdown | Size : 2.1 kB +- README.md - ./node_modules/es-to-primitive/README.md - file - text/markdown | Size : 2.0 kB +- readme.md - ./node_modules/escalade/readme.md - file - text/markdown | Size : 6.9 kB +- readme.md - ./node_modules/escape-string-applescript/readme.md - file - text/markdown | Size : 1.1 kB +- readme.md - ./node_modules/escape-string-regexp/readme.md - file - text/markdown | Size : 552 B +- README.md - ./node_modules/escodegen/node_modules/esprima/README.md - file - text/markdown | Size : 2.4 kB +- README.md - ./node_modules/escodegen/README.md - file - text/markdown | Size : 3.3 kB +- README.md - ./node_modules/esprima/README.md - file - text/markdown | Size : 1.6 kB +- README.md - ./node_modules/estraverse/README.md - file - text/markdown | Size : 4.9 kB +- README.md - ./node_modules/esutils/README.md - file - text/markdown | Size : 6.8 kB +- README.md - ./node_modules/eventemitter2/README.md - file - text/markdown | Size : 7.3 kB +- README.md - ./node_modules/exception-formatter/README.md - file - text/markdown | Size : 3.2 kB +- readme.md - ./node_modules/execa/readme.md - file - text/markdown | Size : 7.8 kB +- README.md - ./node_modules/exit/README.md - file - text/markdown | Size : 2.4 kB +- README.md - ./node_modules/expand-tilde/README.md - file - text/markdown | Size : 3.6 kB +- readme.md - ./node_modules/ext-list/readme.md - file - text/markdown | Size : 565 B +- readme.md - ./node_modules/ext-name/readme.md - file - text/markdown | Size : 1.1 kB +- CHANGELOG.md - ./node_modules/extend/CHANGELOG.md - file - text/markdown | Size : 2.8 kB +- README.md - ./node_modules/extend/README.md - file - text/markdown | Size : 3.0 kB +- README.md - ./node_modules/extend-shallow/README.md - file - text/markdown | Size : 2.0 kB +- README.md - ./node_modules/external-editor/README.md - file - text/markdown | Size : 7.2 kB +- README.md - ./node_modules/fast-glob/README.md - file - text/markdown | Size : 26.2 kB +- LICENSE.md - ./node_modules/fast-levenshtein/LICENSE.md - file - text/markdown | Size : 1.1 kB +- README.md - ./node_modules/fast-levenshtein/README.md - file - text/markdown | Size : 3.4 kB +- README.md - ./node_modules/fast-text-encoding/README.md - file - text/markdown | Size : 2.0 kB +- README.md - ./node_modules/fastq/README.md - file - text/markdown | Size : 7.8 kB +- CHANGELOG.md - ./node_modules/fd-slicer/CHANGELOG.md - file - text/markdown | Size : 911 B +- README.md - ./node_modules/fd-slicer/README.md - file - text/markdown | Size : 6.7 kB +- readme.md - ./node_modules/figures/readme.md - file - text/markdown | Size : 4.7 kB +- readme.md - ./node_modules/file-type/readme.md - file - text/markdown | Size : 11.1 kB +- readme.md - ./node_modules/filename-reserved-regex/readme.md - file - text/markdown | Size : 1.3 kB +- readme.md - ./node_modules/filenamify/readme.md - file - text/markdown | Size : 1.6 kB +- README.md - ./node_modules/fill-range/README.md - file - text/markdown | Size : 7.5 kB +- readme.md - ./node_modules/filter-obj/readme.md - file - text/markdown | Size : 843 B +- readme.md - ./node_modules/find-up/readme.md - file - text/markdown | Size : 4.1 kB +- README.md - ./node_modules/findup-sync/README.md - file - text/markdown | Size : 2.5 kB +- README.md - ./node_modules/fined/README.md - file - text/markdown | Size : 2.5 kB +- README.md - ./node_modules/flagged-respawn/README.md - file - text/markdown | Size : 5.2 kB +- README.md - ./node_modules/follow-redirects/README.md - file - text/markdown | Size : 6.5 kB +- README.md - ./node_modules/for-each/README.md - file - text/markdown | Size : 746 B +- README.md - ./node_modules/for-in/README.md - file - text/markdown | Size : 3.5 kB +- README.md - ./node_modules/for-own/README.md - file - text/markdown | Size : 3.5 kB +- CHANGELOG.md - ./node_modules/foreground-child/node_modules/cross-spawn/CHANGELOG.md - file - text/markdown | Size : 4.7 kB +- README.md - ./node_modules/foreground-child/node_modules/cross-spawn/README.md - file - text/markdown | Size : 4.7 kB +- readme.md - ./node_modules/foreground-child/node_modules/path-key/readme.md - file - text/markdown | Size : 1.3 kB +- readme.md - ./node_modules/foreground-child/node_modules/shebang-command/readme.md - file - text/markdown | Size : 495 B +- readme.md - ./node_modules/foreground-child/node_modules/shebang-regex/readme.md - file - text/markdown | Size : 649 B +- README.md - ./node_modules/foreground-child/node_modules/signal-exit/README.md - file - text/markdown | Size : 2.4 kB +- CHANGELOG.md - ./node_modules/foreground-child/node_modules/which/CHANGELOG.md - file - text/markdown | Size : 2.7 kB +- README.md - ./node_modules/foreground-child/node_modules/which/README.md - file - text/markdown | Size : 1.4 kB +- README.md - ./node_modules/foreground-child/README.md - file - text/markdown | Size : 4.5 kB +- readme.md - ./node_modules/form-data-encoder/readme.md - file - text/markdown | Size : 10.6 kB +- LICENSE.md - ./node_modules/from2/LICENSE.md - file - text/markdown | Size : 1.1 kB +- README.md - ./node_modules/from2/node_modules/isarray/README.md - file - text/markdown | Size : 1.9 kB +- CONTRIBUTING.md - ./node_modules/from2/node_modules/readable-stream/CONTRIBUTING.md - file - text/markdown | Size : 1.4 kB +- 2015-01-30.md - ./node_modules/from2/node_modules/readable-stream/doc/wg-meetings/2015-01-30.md - file - text/markdown | Size : 2.3 kB +- GOVERNANCE.md - ./node_modules/from2/node_modules/readable-stream/GOVERNANCE.md - file - text/markdown | Size : 5.5 kB +- README.md - ./node_modules/from2/node_modules/readable-stream/README.md - file - text/markdown | Size : 3.0 kB +- README.md - ./node_modules/from2/node_modules/safe-buffer/README.md - file - text/markdown | Size : 19.6 kB +- README.md - ./node_modules/from2/node_modules/string_decoder/README.md - file - text/markdown | Size : 1.8 kB +- README.md - ./node_modules/from2/README.md - file - text/markdown | Size : 2.6 kB +- README.md - ./node_modules/front-matter/README.md - file - text/markdown | Size : 6.4 kB +- README.md - ./node_modules/fs-constants/README.md - file - text/markdown | Size : 528 B +- CHANGELOG.md - ./node_modules/fs-extra/CHANGELOG.md - file - text/markdown | Size : 38.0 kB +- README.md - ./node_modules/fs-extra/README.md - file - text/markdown | Size : 17.3 kB +- README.md - ./node_modules/fs-minipass/README.md - file - text/markdown | Size : 2.5 kB +- README.md - ./node_modules/fs.realpath/README.md - file - text/markdown | Size : 881 B +- SECURITY.md - ./node_modules/function-bind/.github/SECURITY.md - file - text/markdown | Size : 157 B +- CHANGELOG.md - ./node_modules/function-bind/CHANGELOG.md - file - text/markdown | Size : 13.8 kB +- README.md - ./node_modules/function-bind/README.md - file - text/markdown | Size : 1.8 kB +- CHANGELOG.md - ./node_modules/function.prototype.name/CHANGELOG.md - file - text/markdown | Size : 8.2 kB +- README.md - ./node_modules/function.prototype.name/README.md - file - text/markdown | Size : 2.6 kB +- CHANGELOG.md - ./node_modules/functions-have-names/CHANGELOG.md - file - text/markdown | Size : 8.2 kB +- README.md - ./node_modules/functions-have-names/README.md - file - text/markdown | Size : 1.9 kB +- CHANGELOG.md - ./node_modules/gaxios/CHANGELOG.md - file - text/markdown | Size : 11.5 kB +- readme.md - ./node_modules/gaxios/node_modules/is-stream/readme.md - file - text/markdown | Size : 1.6 kB +- README.md - ./node_modules/gaxios/README.md - file - text/markdown | Size : 5.0 kB +- CHANGELOG.md - ./node_modules/gcp-metadata/CHANGELOG.md - file - text/markdown | Size : 23.5 kB +- README.md - ./node_modules/gcp-metadata/README.md - file - text/markdown | Size : 8.1 kB +- LICENSE.md - ./node_modules/get-caller-file/LICENSE.md - file - text/markdown | Size : 745 B +- README.md - ./node_modules/get-caller-file/README.md - file - text/markdown | Size : 1.1 kB +- CHANGELOG.md - ./node_modules/get-intrinsic/CHANGELOG.md - file - text/markdown | Size : 11.6 kB +- README.md - ./node_modules/get-intrinsic/README.md - file - text/markdown | Size : 2.8 kB +- readme.md - ./node_modules/get-stdin/readme.md - file - text/markdown | Size : 1.3 kB +- readme.md - ./node_modules/get-stream/readme.md - file - text/markdown | Size : 3.9 kB +- CHANGELOG.md - ./node_modules/get-symbol-description/CHANGELOG.md - file - text/markdown | Size : 4.7 kB +- README.md - ./node_modules/get-symbol-description/README.md - file - text/markdown | Size : 2.0 kB +- README.md - ./node_modules/getobject/README.md - file - text/markdown | Size : 726 B +- README.md - ./node_modules/gitea-js/README.md - file - text/markdown | Size : 2.2 kB +- changelog.md - ./node_modules/glob/changelog.md - file - text/markdown | Size : 1.4 kB +- README.md - ./node_modules/glob/README.md - file - text/markdown | Size : 15.0 kB +- README.md - ./node_modules/glob-base/node_modules/glob-parent/node_modules/is-glob/README.md - file - text/markdown | Size : 7.1 kB +- README.md - ./node_modules/glob-base/node_modules/glob-parent/README.md - file - text/markdown | Size : 4.2 kB +- README.md - ./node_modules/glob-base/node_modules/is-glob/node_modules/is-extglob/README.md - file - text/markdown | Size : 1.9 kB +- README.md - ./node_modules/glob-base/node_modules/is-glob/README.md - file - text/markdown | Size : 3.2 kB +- README.md - ./node_modules/glob-base/README.md - file - text/markdown | Size : 4.7 kB +- CHANGELOG.md - ./node_modules/glob-parent/CHANGELOG.md - file - text/markdown | Size : 4.5 kB +- README.md - ./node_modules/glob-parent/README.md - file - text/markdown | Size : 4.6 kB +- README.md - ./node_modules/global-modules/README.md - file - text/markdown | Size : 3.4 kB +- README.md - ./node_modules/global-prefix/README.md - file - text/markdown | Size : 3.5 kB +- CHANGELOG.md - ./node_modules/globalthis/CHANGELOG.md - file - text/markdown | Size : 11.9 kB +- README.md - ./node_modules/globalthis/README.md - file - text/markdown | Size : 2.7 kB +- readme.md - ./node_modules/globby/readme.md - file - text/markdown | Size : 4.4 kB +- CHANGELOG.md - ./node_modules/google-auth-library/CHANGELOG.md - file - text/markdown | Size : 68.1 kB +- README.md - ./node_modules/google-auth-library/node_modules/lru-cache/README.md - file - text/markdown | Size : 6.0 kB +- README.md - ./node_modules/google-auth-library/node_modules/yallist/README.md - file - text/markdown | Size : 4.7 kB +- README.md - ./node_modules/google-auth-library/README.md - file - text/markdown | Size : 70.2 kB +- CHANGELOG.md - ./node_modules/google-p12-pem/CHANGELOG.md - file - text/markdown | Size : 14.4 kB +- README.md - ./node_modules/google-p12-pem/README.md - file - text/markdown | Size : 5.4 kB +- CHANGELOG.md - ./node_modules/googleapis/CHANGELOG.md - file - text/markdown | Size : 794.5 kB +- README.md - ./node_modules/googleapis/README.md - file - text/markdown | Size : 26.8 kB +- CHANGELOG.md - ./node_modules/googleapis-common/CHANGELOG.md - file - text/markdown | Size : 20.9 kB +- CHANGELOG.md - ./node_modules/googleapis-common/node_modules/uuid/CHANGELOG.md - file - text/markdown | Size : 16.1 kB +- CONTRIBUTING.md - ./node_modules/googleapis-common/node_modules/uuid/CONTRIBUTING.md - file - text/markdown | Size : 513 B +- LICENSE.md - ./node_modules/googleapis-common/node_modules/uuid/LICENSE.md - file - text/markdown | Size : 1.1 kB +- README.md - ./node_modules/googleapis-common/node_modules/uuid/README.md - file - text/markdown | Size : 16.5 kB +- README.md - ./node_modules/googleapis-common/README.md - file - text/markdown | Size : 4.2 kB +- CHANGELOG.md - ./node_modules/gopd/CHANGELOG.md - file - text/markdown | Size : 1.5 kB +- README.md - ./node_modules/gopd/README.md - file - text/markdown | Size : 1.6 kB +- README.md - ./node_modules/graceful-fs/README.md - file - text/markdown | Size : 4.5 kB +- CHANGELOG.md - ./node_modules/gray-matter/CHANGELOG.md - file - text/markdown | Size : 655 B +- README.md - ./node_modules/gray-matter/README.md - file - text/markdown | Size : 16.8 kB +- README.md - ./node_modules/grunt/node_modules/findup-sync/README.md - file - text/markdown | Size : 2.0 kB +- Changelog.md - ./node_modules/grunt/node_modules/iconv-lite/Changelog.md - file - text/markdown | Size : 6.6 kB +- README.md - ./node_modules/grunt/node_modules/iconv-lite/README.md - file - text/markdown | Size : 6.4 kB +- README.md - ./node_modules/grunt/node_modules/minimatch/README.md - file - text/markdown | Size : 7.0 kB +- README.md - ./node_modules/grunt/node_modules/nopt/README.md - file - text/markdown | Size : 7.7 kB +- README.md - ./node_modules/grunt/README.md - file - text/markdown | Size : 1.0 kB +- CHANGELOG.md - ./node_modules/grunt-cli/CHANGELOG.md - file - text/markdown | Size : 1.3 kB +- CHANGELOG.md - ./node_modules/grunt-cli/node_modules/nopt/CHANGELOG.md - file - text/markdown | Size : 3.0 kB +- README.md - ./node_modules/grunt-cli/node_modules/nopt/README.md - file - text/markdown | Size : 7.6 kB +- README.md - ./node_modules/grunt-cli/README.md - file - text/markdown | Size : 1.7 kB +- README.md - ./node_modules/grunt-contrib-clean/README.md - file - text/markdown | Size : 5.7 kB +- LICENSE.md - ./node_modules/grunt-extend-config/LICENSE.md - file - text/markdown | Size : 1.1 kB +- README.md - ./node_modules/grunt-extend-config/README.md - file - text/markdown | Size : 3.3 kB +- README.md - ./node_modules/grunt-known-options/README.md - file - text/markdown | Size : 256 B +- ReadMe.md - ./node_modules/grunt-legacy-log/node_modules/colors/ReadMe.md - file - text/markdown | Size : 3.5 kB +- README.md - ./node_modules/grunt-legacy-log/README.md - file - text/markdown | Size : 279 B +- readme.md - ./node_modules/grunt-legacy-log-utils/node_modules/ansi-styles/readme.md - file - text/markdown | Size : 4.3 kB +- readme.md - ./node_modules/grunt-legacy-log-utils/node_modules/chalk/readme.md - file - text/markdown | Size : 13.4 kB +- CHANGELOG.md - ./node_modules/grunt-legacy-log-utils/node_modules/color-convert/CHANGELOG.md - file - text/markdown | Size : 1.4 kB +- README.md - ./node_modules/grunt-legacy-log-utils/node_modules/color-convert/README.md - file - text/markdown | Size : 2.9 kB +- README.md - ./node_modules/grunt-legacy-log-utils/node_modules/color-name/README.md - file - text/markdown | Size : 384 B +- readme.md - ./node_modules/grunt-legacy-log-utils/node_modules/has-flag/readme.md - file - text/markdown | Size : 1.6 kB +- readme.md - ./node_modules/grunt-legacy-log-utils/node_modules/supports-color/readme.md - file - text/markdown | Size : 2.3 kB +- README.md - ./node_modules/grunt-legacy-log-utils/README.md - file - text/markdown | Size : 466 B +- CHANGELOG.md - ./node_modules/grunt-legacy-util/node_modules/which/CHANGELOG.md - file - text/markdown | Size : 2.7 kB +- README.md - ./node_modules/grunt-legacy-util/node_modules/which/README.md - file - text/markdown | Size : 1.4 kB +- README.md - ./node_modules/grunt-legacy-util/README.md - file - text/markdown | Size : 1.7 kB +- README.md - ./node_modules/grunt-parallel/node_modules/q/README.md - file - text/markdown | Size : 17.0 kB +- README.md - ./node_modules/grunt-parallel/README.md - file - text/markdown | Size : 3.0 kB +- readme.md - ./node_modules/grunt-shell/readme.md - file - text/markdown | Size : 4.7 kB +- CHANGELOG.md - ./node_modules/gtoken/CHANGELOG.md - file - text/markdown | Size : 17.9 kB +- README.md - ./node_modules/gtoken/README.md - file - text/markdown | Size : 5.7 kB +- readme.md - ./node_modules/has-ansi/node_modules/ansi-regex/readme.md - file - text/markdown | Size : 1.7 kB +- readme.md - ./node_modules/has-ansi/readme.md - file - text/markdown | Size : 856 B +- CHANGELOG.md - ./node_modules/has-bigints/CHANGELOG.md - file - text/markdown | Size : 6.4 kB +- README.md - ./node_modules/has-bigints/README.md - file - text/markdown | Size : 1.7 kB +- readme.md - ./node_modules/has-flag/readme.md - file - text/markdown | Size : 986 B +- CHANGELOG.md - ./node_modules/has-property-descriptors/CHANGELOG.md - file - text/markdown | Size : 2.6 kB +- README.md - ./node_modules/has-property-descriptors/README.md - file - text/markdown | Size : 2.2 kB +- CHANGELOG.md - ./node_modules/has-proto/CHANGELOG.md - file - text/markdown | Size : 2.2 kB +- README.md - ./node_modules/has-proto/README.md - file - text/markdown | Size : 1.6 kB +- README.md - ./node_modules/has-symbol-support-x/README.md - file - text/markdown | Size : 1.4 kB +- CHANGELOG.md - ./node_modules/has-symbols/CHANGELOG.md - file - text/markdown | Size : 7.7 kB +- README.md - ./node_modules/has-symbols/README.md - file - text/markdown | Size : 2.0 kB +- README.md - ./node_modules/has-to-string-tag-x/README.md - file - text/markdown | Size : 1.5 kB +- CHANGELOG.md - ./node_modules/has-tostringtag/CHANGELOG.md - file - text/markdown | Size : 3.5 kB +- README.md - ./node_modules/has-tostringtag/README.md - file - text/markdown | Size : 2.2 kB +- CHANGELOG.md - ./node_modules/hasown/CHANGELOG.md - file - text/markdown | Size : 2.6 kB +- README.md - ./node_modules/hasown/README.md - file - text/markdown | Size : 1.6 kB +- CHANGES.md - ./node_modules/highlight.js/CHANGES.md - file - text/markdown | Size : 114.2 kB +- README.md - ./node_modules/highlight.js/README.md - file - text/markdown | Size : 16.5 kB +- SECURITY.md - ./node_modules/highlight.js/SECURITY.md - file - text/markdown | Size : 1.3 kB +- SUPPORTED_LANGUAGES.md - ./node_modules/highlight.js/SUPPORTED_LANGUAGES.md - file - text/markdown | Size : 17.2 kB +- VERSION_10_UPGRADE.md - ./node_modules/highlight.js/VERSION_10_UPGRADE.md - file - text/markdown | Size : 3.3 kB +- VERSION_11_UPGRADE.md - ./node_modules/highlight.js/VERSION_11_UPGRADE.md - file - text/markdown | Size : 8.5 kB +- README.md - ./node_modules/homedir-polyfill/README.md - file - text/markdown | Size : 3.8 kB +- README.md - ./node_modules/hooker/README.md - file - text/markdown | Size : 5.9 kB +- CHANGELOG.md - ./node_modules/hosted-git-info/CHANGELOG.md - file - text/markdown | Size : 6.2 kB +- README.md - ./node_modules/hosted-git-info/README.md - file - text/markdown | Size : 4.2 kB +- README.md - ./node_modules/hpagent/README.md - file - text/markdown | Size : 3.3 kB +- README.md - ./node_modules/html-encoding-sniffer/README.md - file - text/markdown | Size : 2.1 kB +- README.md - ./node_modules/htmlparser2/README.md - file - text/markdown | Size : 7.7 kB +- README.md - ./node_modules/http-cache-semantics/README.md - file - text/markdown | Size : 10.4 kB +- README.md - ./node_modules/http-proxy-agent/node_modules/debug/README.md - file - text/markdown | Size : 21.6 kB +- license.md - ./node_modules/http-proxy-agent/node_modules/ms/license.md - file - text/markdown | Size : 1.1 kB +- readme.md - ./node_modules/http-proxy-agent/node_modules/ms/readme.md - file - text/markdown | Size : 2.0 kB +- README.md - ./node_modules/http-proxy-agent/README.md - file - text/markdown | Size : 2.5 kB +- README.md - ./node_modules/http2-wrapper/README.md - file - text/markdown | Size : 12.1 kB +- README.md - ./node_modules/https-proxy-agent/node_modules/debug/README.md - file - text/markdown | Size : 21.6 kB +- license.md - ./node_modules/https-proxy-agent/node_modules/ms/license.md - file - text/markdown | Size : 1.1 kB +- readme.md - ./node_modules/https-proxy-agent/node_modules/ms/readme.md - file - text/markdown | Size : 2.0 kB +- README.md - ./node_modules/https-proxy-agent/README.md - file - text/markdown | Size : 4.8 kB +- Changelog.md - ./node_modules/iconv-lite/Changelog.md - file - text/markdown | Size : 4.3 kB +- README.md - ./node_modules/iconv-lite/README.md - file - text/markdown | Size : 6.5 kB +- README.md - ./node_modules/ieee754/README.md - file - text/markdown | Size : 1.7 kB +- README.md - ./node_modules/ignore/README.md - file - text/markdown | Size : 7.4 kB +- README.md - ./node_modules/imurmurhash/README.md - file - text/markdown | Size : 4.8 kB +- readme.md - ./node_modules/indent-string/readme.md - file - text/markdown | Size : 1.2 kB +- README.md - ./node_modules/infer-owner/README.md - file - text/markdown | Size : 1.1 kB +- README.md - ./node_modules/inflight/README.md - file - text/markdown | Size : 991 B +- README.md - ./node_modules/inherits/README.md - file - text/markdown | Size : 1.6 kB +- README.md - ./node_modules/ini/README.md - file - text/markdown | Size : 2.7 kB +- readme.md - ./node_modules/inquirer/node_modules/ansi-regex/readme.md - file - text/markdown | Size : 2.6 kB +- readme.md - ./node_modules/inquirer/node_modules/ansi-styles/readme.md - file - text/markdown | Size : 4.3 kB +- readme.md - ./node_modules/inquirer/node_modules/chalk/readme.md - file - text/markdown | Size : 13.1 kB +- readme.md - ./node_modules/inquirer/node_modules/cli-cursor/readme.md - file - text/markdown | Size : 1.1 kB +- readme.md - ./node_modules/inquirer/node_modules/cli-spinners/readme.md - file - text/markdown | Size : 1.3 kB +- CHANGELOG.md - ./node_modules/inquirer/node_modules/color-convert/CHANGELOG.md - file - text/markdown | Size : 1.4 kB +- README.md - ./node_modules/inquirer/node_modules/color-convert/README.md - file - text/markdown | Size : 2.9 kB +- README.md - ./node_modules/inquirer/node_modules/color-name/README.md - file - text/markdown | Size : 384 B +- README.md - ./node_modules/inquirer/node_modules/emoji-regex/README.md - file - text/markdown | Size : 2.7 kB +- readme.md - ./node_modules/inquirer/node_modules/has-flag/readme.md - file - text/markdown | Size : 1.6 kB +- readme.md - ./node_modules/inquirer/node_modules/is-fullwidth-code-point/readme.md - file - text/markdown | Size : 843 B +- readme.md - ./node_modules/inquirer/node_modules/log-symbols/readme.md - file - text/markdown | Size : 1.4 kB +- readme.md - ./node_modules/inquirer/node_modules/mimic-fn/readme.md - file - text/markdown | Size : 1.2 kB +- readme.md - ./node_modules/inquirer/node_modules/onetime/readme.md - file - text/markdown | Size : 2.0 kB +- readme.md - ./node_modules/inquirer/node_modules/ora/readme.md - file - text/markdown | Size : 6.4 kB +- readme.md - ./node_modules/inquirer/node_modules/restore-cursor/readme.md - file - text/markdown | Size : 497 B +- readme.md - ./node_modules/inquirer/node_modules/string-width/readme.md - file - text/markdown | Size : 1.4 kB +- readme.md - ./node_modules/inquirer/node_modules/strip-ansi/readme.md - file - text/markdown | Size : 1.6 kB +- readme.md - ./node_modules/inquirer/node_modules/supports-color/readme.md - file - text/markdown | Size : 2.3 kB +- README.md - ./node_modules/inquirer/README.md - file - text/markdown | Size : 19.7 kB +- CHANGELOG.md - ./node_modules/internal-slot/CHANGELOG.md - file - text/markdown | Size : 9.6 kB +- README.md - ./node_modules/internal-slot/README.md - file - text/markdown | Size : 2.3 kB +- README.md - ./node_modules/interpret/README.md - file - text/markdown | Size : 4.2 kB +- readme.md - ./node_modules/into-stream/readme.md - file - text/markdown | Size : 965 B +- readme.md - ./node_modules/invert-kv/readme.md - file - text/markdown | Size : 480 B +- README.md - ./node_modules/is-absolute/README.md - file - text/markdown | Size : 4.8 kB +- CHANGELOG.md - ./node_modules/is-array-buffer/CHANGELOG.md - file - text/markdown | Size : 4.2 kB +- README.md - ./node_modules/is-array-buffer/README.md - file - text/markdown | Size : 2.4 kB +- README.md - ./node_modules/is-arrayish/README.md - file - text/markdown | Size : 704 B +- CHANGELOG.md - ./node_modules/is-bigint/CHANGELOG.md - file - text/markdown | Size : 6.7 kB +- README.md - ./node_modules/is-bigint/README.md - file - text/markdown | Size : 1.6 kB +- CHANGELOG.md - ./node_modules/is-boolean-object/CHANGELOG.md - file - text/markdown | Size : 12.8 kB +- README.md - ./node_modules/is-boolean-object/README.md - file - text/markdown | Size : 2.2 kB +- README.md - ./node_modules/is-buffer/README.md - file - text/markdown | Size : 1.7 kB +- CHANGELOG.md - ./node_modules/is-callable/CHANGELOG.md - file - text/markdown | Size : 9.1 kB +- README.md - ./node_modules/is-callable/README.md - file - text/markdown | Size : 3.5 kB +- CHANGELOG.md - ./node_modules/is-core-module/CHANGELOG.md - file - text/markdown | Size : 14.3 kB +- README.md - ./node_modules/is-core-module/README.md - file - text/markdown | Size : 1.7 kB +- CHANGELOG.md - ./node_modules/is-data-view/CHANGELOG.md - file - text/markdown | Size : 1.4 kB +- README.md - ./node_modules/is-data-view/README.md - file - text/markdown | Size : 3.1 kB +- CHANGELOG.md - ./node_modules/is-date-object/CHANGELOG.md - file - text/markdown | Size : 12.9 kB +- README.md - ./node_modules/is-date-object/README.md - file - text/markdown | Size : 2.0 kB +- readme.md - ./node_modules/is-docker/readme.md - file - text/markdown | Size : 341 B +- README.md - ./node_modules/is-dotfile/README.md - file - text/markdown | Size : 3.8 kB +- README.md - ./node_modules/is-extendable/README.md - file - text/markdown | Size : 2.5 kB +- README.md - ./node_modules/is-extglob/README.md - file - text/markdown | Size : 3.5 kB +- readme.md - ./node_modules/is-fullwidth-code-point/readme.md - file - text/markdown | Size : 836 B +- README.md - ./node_modules/is-glob/README.md - file - text/markdown | Size : 7.1 kB +- readme.md - ./node_modules/is-interactive/readme.md - file - text/markdown | Size : 2.0 kB +- README.md - ./node_modules/is-natural-number/README.md - file - text/markdown | Size : 2.2 kB +- CHANGELOG.md - ./node_modules/is-negative-zero/CHANGELOG.md - file - text/markdown | Size : 15.6 kB +- README.md - ./node_modules/is-negative-zero/README.md - file - text/markdown | Size : 2.3 kB +- README.md - ./node_modules/is-number/README.md - file - text/markdown | Size : 6.5 kB +- CHANGELOG.md - ./node_modules/is-number-object/CHANGELOG.md - file - text/markdown | Size : 13.5 kB +- README.md - ./node_modules/is-number-object/README.md - file - text/markdown | Size : 2.1 kB +- CHANGELOG.md - ./node_modules/is-object/CHANGELOG.md - file - text/markdown | Size : 12.2 kB +- README.md - ./node_modules/is-object/README.md - file - text/markdown | Size : 1.4 kB +- readme.md - ./node_modules/is-plain-obj/readme.md - file - text/markdown | Size : 631 B +- README.md - ./node_modules/is-plain-object/README.md - file - text/markdown | Size : 3.6 kB +- README.md - ./node_modules/is-potential-custom-element-name/README.md - file - text/markdown | Size : 1.3 kB +- CHANGELOG.md - ./node_modules/is-regex/CHANGELOG.md - file - text/markdown | Size : 19.9 kB +- README.md - ./node_modules/is-regex/README.md - file - text/markdown | Size : 1.8 kB +- README.md - ./node_modules/is-relative/README.md - file - text/markdown | Size : 3.8 kB +- readme.md - ./node_modules/is-retry-allowed/readme.md - file - text/markdown | Size : 653 B +- CHANGELOG.md - ./node_modules/is-shared-array-buffer/CHANGELOG.md - file - text/markdown | Size : 6.4 kB +- README.md - ./node_modules/is-shared-array-buffer/README.md - file - text/markdown | Size : 2.6 kB +- readme.md - ./node_modules/is-stream/readme.md - file - text/markdown | Size : 664 B +- CHANGELOG.md - ./node_modules/is-string/CHANGELOG.md - file - text/markdown | Size : 10.9 kB +- README.md - ./node_modules/is-string/README.md - file - text/markdown | Size : 2.1 kB +- CHANGELOG.md - ./node_modules/is-symbol/CHANGELOG.md - file - text/markdown | Size : 12.9 kB +- README.md - ./node_modules/is-symbol/README.md - file - text/markdown | Size : 1.7 kB +- CHANGELOG.md - ./node_modules/is-typed-array/CHANGELOG.md - file - text/markdown | Size : 7.0 kB +- README.md - ./node_modules/is-typed-array/README.md - file - text/markdown | Size : 3.1 kB +- README.md - ./node_modules/is-unc-path/README.md - file - text/markdown | Size : 4.0 kB +- readme.md - ./node_modules/is-unicode-supported/readme.md - file - text/markdown | Size : 1.1 kB +- History.md - ./node_modules/is-url/History.md - file - text/markdown | Size : 503 B +- Readme.md - ./node_modules/is-url/Readme.md - file - text/markdown | Size : 193 B +- CHANGELOG.md - ./node_modules/is-weakref/CHANGELOG.md - file - text/markdown | Size : 5.3 kB +- README.md - ./node_modules/is-weakref/README.md - file - text/markdown | Size : 2.0 kB +- README.md - ./node_modules/is-whitespace/README.md - file - text/markdown | Size : 1.4 kB +- README.md - ./node_modules/is-windows/README.md - file - text/markdown | Size : 4.6 kB +- readme.md - ./node_modules/is-wsl/readme.md - file - text/markdown | Size : 995 B +- README.md - ./node_modules/isarray/README.md - file - text/markdown | Size : 1.6 kB +- README.md - ./node_modules/isexe/README.md - file - text/markdown | Size : 1.4 kB +- README.md - ./node_modules/isobject/README.md - file - text/markdown | Size : 4.0 kB +- readme.md - ./node_modules/isomorphic-unfetch/readme.md - file - text/markdown | Size : 1.2 kB +- README.md - ./node_modules/isurl/README.md - file - text/markdown | Size : 1.0 kB +- LICENSE.md - ./node_modules/jackspeak/LICENSE.md - file - text/markdown | Size : 1.6 kB +- README.md - ./node_modules/jackspeak/README.md - file - text/markdown | Size : 11.4 kB +- LICENSE.md - ./node_modules/js-base64/LICENSE.md - file - text/markdown | Size : 1.5 kB +- README.md - ./node_modules/js-base64/README.md - file - text/markdown | Size : 5.4 kB +- README.md - ./node_modules/js-beautify/node_modules/brace-expansion/README.md - file - text/markdown | Size : 4.3 kB +- README.md - ./node_modules/js-beautify/node_modules/glob/README.md - file - text/markdown | Size : 16.4 kB +- README.md - ./node_modules/js-beautify/node_modules/minimatch/README.md - file - text/markdown | Size : 8.5 kB +- README.md - ./node_modules/js-beautify/README.md - file - text/markdown | Size : 19.5 kB +- CHANGELOG.md - ./node_modules/js-yaml/CHANGELOG.md - file - text/markdown | Size : 16.1 kB +- README.md - ./node_modules/js-yaml/node_modules/esprima/README.md - file - text/markdown | Size : 2.4 kB +- README.md - ./node_modules/js-yaml/README.md - file - text/markdown | Size : 10.1 kB +- README.md - ./node_modules/jsdom/node_modules/escodegen/README.md - file - text/markdown | Size : 3.3 kB +- README.md - ./node_modules/jsdom/node_modules/esprima/README.md - file - text/markdown | Size : 2.4 kB +- README.md - ./node_modules/jsdom/node_modules/estraverse/README.md - file - text/markdown | Size : 4.9 kB +- Readme.md - ./node_modules/jsdom/node_modules/form-data/Readme.md - file - text/markdown | Size : 11.8 kB +- README.md - ./node_modules/jsdom/node_modules/tough-cookie/README.md - file - text/markdown | Size : 33.8 kB +- README.md - ./node_modules/jsdom/node_modules/universalify/README.md - file - text/markdown | Size : 2.0 kB +- README.md - ./node_modules/jsdom/README.md - file - text/markdown | Size : 33.5 kB +- readme.md - ./node_modules/jsome/node_modules/ansi-regex/readme.md - file - text/markdown | Size : 1.7 kB +- readme.md - ./node_modules/jsome/node_modules/ansi-styles/readme.md - file - text/markdown | Size : 1.4 kB +- readme.md - ./node_modules/jsome/node_modules/camelcase/readme.md - file - text/markdown | Size : 1.0 kB +- readme.md - ./node_modules/jsome/node_modules/chalk/readme.md - file - text/markdown | Size : 6.1 kB +- CHANGELOG.md - ./node_modules/jsome/node_modules/cliui/CHANGELOG.md - file - text/markdown | Size : 510 B +- README.md - ./node_modules/jsome/node_modules/cliui/README.md - file - text/markdown | Size : 2.4 kB +- readme.md - ./node_modules/jsome/node_modules/is-fullwidth-code-point/readme.md - file - text/markdown | Size : 833 B +- readme.md - ./node_modules/jsome/node_modules/string-width/readme.md - file - text/markdown | Size : 1.2 kB +- readme.md - ./node_modules/jsome/node_modules/strip-ansi/readme.md - file - text/markdown | Size : 801 B +- readme.md - ./node_modules/jsome/node_modules/supports-color/readme.md - file - text/markdown | Size : 823 B +- readme.md - ./node_modules/jsome/node_modules/wrap-ansi/readme.md - file - text/markdown | Size : 2.0 kB +- CHANGELOG.md - ./node_modules/jsome/node_modules/y18n/CHANGELOG.md - file - text/markdown | Size : 226 B +- README.md - ./node_modules/jsome/node_modules/y18n/README.md - file - text/markdown | Size : 2.4 kB +- CHANGELOG.md - ./node_modules/jsome/node_modules/yargs/CHANGELOG.md - file - text/markdown | Size : 44.4 kB +- README.md - ./node_modules/jsome/node_modules/yargs/README.md - file - text/markdown | Size : 32.0 kB +- README.md - ./node_modules/jsome/README.md - file - text/markdown | Size : 5.1 kB +- README.md - ./node_modules/json-bigint/README.md - file - text/markdown | Size : 8.8 kB +- README.md - ./node_modules/json-buffer/README.md - file - text/markdown | Size : 659 B +- README.md - ./node_modules/json-format-highlight/README.md - file - text/markdown | Size : 4.5 kB +- CHANGELOG.md - ./node_modules/json-parse-better-errors/CHANGELOG.md - file - text/markdown | Size : 1.2 kB +- LICENSE.md - ./node_modules/json-parse-better-errors/LICENSE.md - file - text/markdown | Size : 1.1 kB +- README.md - ./node_modules/json-parse-better-errors/README.md - file - text/markdown | Size : 2.2 kB +- README.md - ./node_modules/json-pretty-html/README.md - file - text/markdown | Size : 3.2 kB +- CHANGELOG.md - ./node_modules/json-stringify-safe/CHANGELOG.md - file - text/markdown | Size : 734 B +- README.md - ./node_modules/json-stringify-safe/README.md - file - text/markdown | Size : 1.3 kB +- README.md - ./node_modules/json-to-pretty-yaml/README.md - file - text/markdown | Size : 652 B +- CHANGELOG.md - ./node_modules/jsonfile/CHANGELOG.md - file - text/markdown | Size : 7.3 kB +- README.md - ./node_modules/jsonfile/README.md - file - text/markdown | Size : 4.1 kB +- README.md - ./node_modules/jsonpath/README.md - file - text/markdown | Size : 9.1 kB +- README.md - ./node_modules/jwa/README.md - file - text/markdown | Size : 5.4 kB +- CHANGELOG.md - ./node_modules/jws/CHANGELOG.md - file - text/markdown | Size : 1.5 kB +- readme.md - ./node_modules/jws/readme.md - file - text/markdown | Size : 6.9 kB +- README.md - ./node_modules/keyv/README.md - file - text/markdown | Size : 15.6 kB +- README.md - ./node_modules/keyv-file/node_modules/debug/README.md - file - text/markdown | Size : 22.5 kB +- CHANGELOG.md - ./node_modules/keyv-file/node_modules/fs-extra/CHANGELOG.md - file - text/markdown | Size : 57.9 kB +- copy-sync.md - ./node_modules/keyv-file/node_modules/fs-extra/docs/copy-sync.md - file - text/markdown | Size : 1.5 kB +- copy.md - ./node_modules/keyv-file/node_modules/fs-extra/docs/copy.md - file - text/markdown | Size : 2.0 kB +- emptyDir-sync.md - ./node_modules/keyv-file/node_modules/fs-extra/docs/emptyDir-sync.md - file - text/markdown | Size : 393 B +- emptyDir.md - ./node_modules/keyv-file/node_modules/fs-extra/docs/emptyDir.md - file - text/markdown | Size : 625 B +- ensureDir-sync.md - ./node_modules/keyv-file/node_modules/fs-extra/docs/ensureDir-sync.md - file - text/markdown | Size : 394 B +- ensureDir.md - ./node_modules/keyv-file/node_modules/fs-extra/docs/ensureDir.md - file - text/markdown | Size : 580 B +- ensureFile-sync.md - ./node_modules/keyv-file/node_modules/fs-extra/docs/ensureFile-sync.md - file - text/markdown | Size : 480 B +- ensureFile.md - ./node_modules/keyv-file/node_modules/fs-extra/docs/ensureFile.md - file - text/markdown | Size : 672 B +- ensureLink-sync.md - ./node_modules/keyv-file/node_modules/fs-extra/docs/ensureLink-sync.md - file - text/markdown | Size : 428 B +- ensureLink.md - ./node_modules/keyv-file/node_modules/fs-extra/docs/ensureLink.md - file - text/markdown | Size : 636 B +- ensureSymlink-sync.md - ./node_modules/keyv-file/node_modules/fs-extra/docs/ensureSymlink-sync.md - file - text/markdown | Size : 468 B +- ensureSymlink.md - ./node_modules/keyv-file/node_modules/fs-extra/docs/ensureSymlink.md - file - text/markdown | Size : 677 B +- fs-read-write.md - ./node_modules/keyv-file/node_modules/fs-extra/docs/fs-read-write.md - file - text/markdown | Size : 1.4 kB +- move-sync.md - ./node_modules/keyv-file/node_modules/fs-extra/docs/move-sync.md - file - text/markdown | Size : 511 B +- move.md - ./node_modules/keyv-file/node_modules/fs-extra/docs/move.md - file - text/markdown | Size : 832 B +- outputFile-sync.md - ./node_modules/keyv-file/node_modules/fs-extra/docs/outputFile-sync.md - file - text/markdown | Size : 729 B +- outputFile.md - ./node_modules/keyv-file/node_modules/fs-extra/docs/outputFile.md - file - text/markdown | Size : 1.0 kB +- outputJson-sync.md - ./node_modules/keyv-file/node_modules/fs-extra/docs/outputJson-sync.md - file - text/markdown | Size : 1.1 kB +- outputJson.md - ./node_modules/keyv-file/node_modules/fs-extra/docs/outputJson.md - file - text/markdown | Size : 1.4 kB +- pathExists-sync.md - ./node_modules/keyv-file/node_modules/fs-extra/docs/pathExists-sync.md - file - text/markdown | Size : 174 B +- pathExists.md - ./node_modules/keyv-file/node_modules/fs-extra/docs/pathExists.md - file - text/markdown | Size : 643 B +- readJson-sync.md - ./node_modules/keyv-file/node_modules/fs-extra/docs/readJson-sync.md - file - text/markdown | Size : 797 B +- readJson.md - ./node_modules/keyv-file/node_modules/fs-extra/docs/readJson.md - file - text/markdown | Size : 1.2 kB +- remove-sync.md - ./node_modules/keyv-file/node_modules/fs-extra/docs/remove-sync.md - file - text/markdown | Size : 299 B +- remove.md - ./node_modules/keyv-file/node_modules/fs-extra/docs/remove.md - file - text/markdown | Size : 603 B +- writeJson-sync.md - ./node_modules/keyv-file/node_modules/fs-extra/docs/writeJson-sync.md - file - text/markdown | Size : 946 B +- writeJson.md - ./node_modules/keyv-file/node_modules/fs-extra/docs/writeJson.md - file - text/markdown | Size : 1.2 kB +- README.md - ./node_modules/keyv-file/node_modules/fs-extra/README.md - file - text/markdown | Size : 8.8 kB +- CHANGELOG.md - ./node_modules/keyv-file/node_modules/jsonfile/CHANGELOG.md - file - text/markdown | Size : 8.0 kB +- README.md - ./node_modules/keyv-file/node_modules/jsonfile/README.md - file - text/markdown | Size : 4.3 kB +- license.md - ./node_modules/keyv-file/node_modules/ms/license.md - file - text/markdown | Size : 1.1 kB +- readme.md - ./node_modules/keyv-file/node_modules/ms/readme.md - file - text/markdown | Size : 2.0 kB +- README.md - ./node_modules/keyv-file/node_modules/tslib/README.md - file - text/markdown | Size : 3.4 kB +- README.md - ./node_modules/keyv-file/README.md - file - text/markdown | Size : 1.8 kB +- CHANGELOG.md - ./node_modules/kind-of/CHANGELOG.md - file - text/markdown | Size : 4.6 kB +- README.md - ./node_modules/kind-of/README.md - file - text/markdown | Size : 11.8 kB +- CHANGELOG.md - ./node_modules/klaw/CHANGELOG.md - file - text/markdown | Size : 1.1 kB +- README.md - ./node_modules/klaw/README.md - file - text/markdown | Size : 7.3 kB +- readme.md - ./node_modules/lcid/readme.md - file - text/markdown | Size : 826 B +- README.md - ./node_modules/levn/README.md - file - text/markdown | Size : 10.5 kB +- README.md - ./node_modules/liftup/README.md - file - text/markdown | Size : 15.8 kB +- readme.md - ./node_modules/load-json-file/readme.md - file - text/markdown | Size : 939 B +- readme.md - ./node_modules/locate-path/readme.md - file - text/markdown | Size : 1.8 kB +- README.md - ./node_modules/lodash/README.md - file - text/markdown | Size : 1.1 kB +- release.md - ./node_modules/lodash/release.md - file - text/markdown | Size : 2.0 kB +- README.md - ./node_modules/lodash.bind/README.md - file - text/markdown | Size : 1.1 kB +- README.md - ./node_modules/lodash.foreach/README.md - file - text/markdown | Size : 1.1 kB +- README.md - ./node_modules/lodash.forown/README.md - file - text/markdown | Size : 1.1 kB +- README.md - ./node_modules/lodash.identity/README.md - file - text/markdown | Size : 1.1 kB +- README.md - ./node_modules/lodash.isfunction/README.md - file - text/markdown | Size : 1.1 kB +- README.md - ./node_modules/lodash.isobject/README.md - file - text/markdown | Size : 1.1 kB +- README.md - ./node_modules/lodash.keys/README.md - file - text/markdown | Size : 1.1 kB +- README.md - ./node_modules/lodash.noop/README.md - file - text/markdown | Size : 1.1 kB +- README.md - ./node_modules/lodash.support/README.md - file - text/markdown | Size : 1.1 kB +- README.md - ./node_modules/lodash._basebind/README.md - file - text/markdown | Size : 1.1 kB +- README.md - ./node_modules/lodash._basecreate/README.md - file - text/markdown | Size : 1.1 kB +- README.md - ./node_modules/lodash._basecreatecallback/README.md - file - text/markdown | Size : 1.1 kB +- README.md - ./node_modules/lodash._basecreatewrapper/README.md - file - text/markdown | Size : 1.1 kB +- README.md - ./node_modules/lodash._createwrapper/README.md - file - text/markdown | Size : 1.1 kB +- README.md - ./node_modules/lodash._objecttypes/README.md - file - text/markdown | Size : 1.1 kB +- README.md - ./node_modules/lodash._renative/README.md - file - text/markdown | Size : 1.1 kB +- README.md - ./node_modules/lodash._setbinddata/README.md - file - text/markdown | Size : 1.1 kB +- README.md - ./node_modules/lodash._shimkeys/README.md - file - text/markdown | Size : 1.1 kB +- README.md - ./node_modules/lodash._slice/README.md - file - text/markdown | Size : 1.1 kB +- readme.md - ./node_modules/log-symbols/node_modules/ansi-regex/readme.md - file - text/markdown | Size : 1.7 kB +- readme.md - ./node_modules/log-symbols/node_modules/ansi-styles/readme.md - file - text/markdown | Size : 1.4 kB +- readme.md - ./node_modules/log-symbols/node_modules/chalk/readme.md - file - text/markdown | Size : 6.1 kB +- readme.md - ./node_modules/log-symbols/node_modules/strip-ansi/readme.md - file - text/markdown | Size : 801 B +- readme.md - ./node_modules/log-symbols/node_modules/supports-color/readme.md - file - text/markdown | Size : 823 B +- readme.md - ./node_modules/log-symbols/readme.md - file - text/markdown | Size : 740 B +- readme.md - ./node_modules/lowercase-keys/readme.md - file - text/markdown | Size : 988 B +- readme.md - ./node_modules/lpad/readme.md - file - text/markdown | Size : 1.2 kB +- README.md - ./node_modules/lru-cache/README.md - file - text/markdown | Size : 5.4 kB +- readme.md - ./node_modules/make-dir/node_modules/pify/readme.md - file - text/markdown | Size : 3.6 kB +- readme.md - ./node_modules/make-dir/readme.md - file - text/markdown | Size : 2.9 kB +- README.md - ./node_modules/make-iterator/README.md - file - text/markdown | Size : 4.3 kB +- README.md - ./node_modules/map-cache/README.md - file - text/markdown | Size : 3.5 kB +- readme.md - ./node_modules/markdown-table/readme.md - file - text/markdown | Size : 7.4 kB +- README.md - ./node_modules/md5/README.md - file - text/markdown | Size : 3.6 kB +- README.md - ./node_modules/memorystream/README.md - file - text/markdown | Size : 2.7 kB +- README.md - ./node_modules/merge2/README.md - file - text/markdown | Size : 3.7 kB +- CHANGELOG.md - ./node_modules/micromatch/CHANGELOG.md - file - text/markdown | Size : 5.8 kB +- README.md - ./node_modules/micromatch/README.md - file - text/markdown | Size : 38.2 kB +- CHANGELOG.md - ./node_modules/mime/CHANGELOG.md - file - text/markdown | Size : 12.3 kB +- README.md - ./node_modules/mime/README.md - file - text/markdown | Size : 5.6 kB +- HISTORY.md - ./node_modules/mime-db/HISTORY.md - file - text/markdown | Size : 12.1 kB +- README.md - ./node_modules/mime-db/README.md - file - text/markdown | Size : 4.1 kB +- HISTORY.md - ./node_modules/mime-types/HISTORY.md - file - text/markdown | Size : 8.4 kB +- README.md - ./node_modules/mime-types/README.md - file - text/markdown | Size : 3.5 kB +- readme.md - ./node_modules/mimic-fn/readme.md - file - text/markdown | Size : 1.1 kB +- readme.md - ./node_modules/mimic-response/readme.md - file - text/markdown | Size : 1.8 kB +- README.md - ./node_modules/minimatch/README.md - file - text/markdown | Size : 7.2 kB +- README.md - ./node_modules/minipass/node_modules/yallist/README.md - file - text/markdown | Size : 4.7 kB +- README.md - ./node_modules/minipass/README.md - file - text/markdown | Size : 25.3 kB +- README.md - ./node_modules/minipass-collect/README.md - file - text/markdown | Size : 1.5 kB +- README.md - ./node_modules/minipass-flush/README.md - file - text/markdown | Size : 1.2 kB +- README.md - ./node_modules/minipass-pipeline/README.md - file - text/markdown | Size : 2.2 kB +- README.md - ./node_modules/minizlib/node_modules/yallist/README.md - file - text/markdown | Size : 4.7 kB +- README.md - ./node_modules/minizlib/README.md - file - text/markdown | Size : 1.9 kB +- CHANGELOG.md - ./node_modules/moment/CHANGELOG.md - file - text/markdown | Size : 45.7 kB +- README.md - ./node_modules/moment/README.md - file - text/markdown | Size : 2.5 kB +- readme.md - ./node_modules/mount-point/node_modules/@sindresorhus/df/readme.md - file - text/markdown | Size : 2.0 kB +- readme.md - ./node_modules/mount-point/node_modules/pify/readme.md - file - text/markdown | Size : 2.6 kB +- readme.md - ./node_modules/mount-point/readme.md - file - text/markdown | Size : 586 B +- license.md - ./node_modules/ms/license.md - file - text/markdown | Size : 1.1 kB +- readme.md - ./node_modules/ms/readme.md - file - text/markdown | Size : 1.7 kB +- README.md - ./node_modules/mute-stream/README.md - file - text/markdown | Size : 1.7 kB +- HISTORY.md - ./node_modules/native-promise-pool/HISTORY.md - file - text/markdown | Size : 5.4 kB +- LICENSE.md - ./node_modules/native-promise-pool/LICENSE.md - file - text/markdown | Size : 1.4 kB +- README.md - ./node_modules/native-promise-pool/README.md - file - text/markdown | Size : 12.8 kB +- CHANGELOG.md - ./node_modules/nice-try/CHANGELOG.md - file - text/markdown | Size : 457 B +- README.md - ./node_modules/nice-try/README.md - file - text/markdown | Size : 1.2 kB +- LICENSE.md - ./node_modules/node-fetch/LICENSE.md - file - text/markdown | Size : 1.1 kB +- LICENSE.md - ./node_modules/node-fetch/node_modules/webidl-conversions/LICENSE.md - file - text/markdown | Size : 1.3 kB +- README.md - ./node_modules/node-fetch/node_modules/webidl-conversions/README.md - file - text/markdown | Size : 5.5 kB +- README.md - ./node_modules/node-fetch/node_modules/whatwg-url/README.md - file - text/markdown | Size : 5.1 kB +- README.md - ./node_modules/node-fetch/README.md - file - text/markdown | Size : 21.0 kB +- CHANGELOG.md - ./node_modules/node-forge/CHANGELOG.md - file - text/markdown | Size : 16.6 kB +- README.md - ./node_modules/node-forge/flash/README.md - file - text/markdown | Size : 1.5 kB +- README.md - ./node_modules/node-forge/README.md - file - text/markdown | Size : 59.7 kB +- LICENSE.md - ./node_modules/node-xlsx/LICENSE.md - file - text/markdown | Size : 805 B +- README.md - ./node_modules/node-xlsx/README.md - file - text/markdown | Size : 6.1 kB +- README.md - ./node_modules/nopt/README.md - file - text/markdown | Size : 7.6 kB +- README.md - ./node_modules/normalize-package-data/README.md - file - text/markdown | Size : 7.2 kB +- readme.md - ./node_modules/normalize-url/readme.md - file - text/markdown | Size : 7.9 kB +- node-api.md - ./node_modules/npm-run-all/docs/node-api.md - file - text/markdown | Size : 5.1 kB +- npm-run-all.md - ./node_modules/npm-run-all/docs/npm-run-all.md - file - text/markdown | Size : 7.1 kB +- run-p.md - ./node_modules/npm-run-all/docs/run-p.md - file - text/markdown | Size : 5.5 kB +- run-s.md - ./node_modules/npm-run-all/docs/run-s.md - file - text/markdown | Size : 4.9 kB +- README.md - ./node_modules/npm-run-all/README.md - file - text/markdown | Size : 3.1 kB +- readme.md - ./node_modules/npm-run-path/readme.md - file - text/markdown | Size : 1.9 kB +- README.md - ./node_modules/nth-check/README.md - file - text/markdown | Size : 3.7 kB +- readme.md - ./node_modules/number-is-nan/readme.md - file - text/markdown | Size : 559 B +- README.md - ./node_modules/nwsapi/README.md - file - text/markdown | Size : 5.4 kB +- readme.md - ./node_modules/object-assign/readme.md - file - text/markdown | Size : 1.5 kB +- CHANGELOG.md - ./node_modules/object-inspect/CHANGELOG.md - file - text/markdown | Size : 34.8 kB +- README.md - ./node_modules/object-keys/README.md - file - text/markdown | Size : 1.0 kB +- CHANGELOG.md - ./node_modules/object.assign/CHANGELOG.md - file - text/markdown | Size : 9.2 kB +- CHANGELOG.md - ./node_modules/object.assign/node_modules/object-keys/CHANGELOG.md - file - text/markdown | Size : 7.5 kB +- README.md - ./node_modules/object.assign/node_modules/object-keys/README.md - file - text/markdown | Size : 2.5 kB +- README.md - ./node_modules/object.assign/README.md - file - text/markdown | Size : 3.9 kB +- README.md - ./node_modules/object.defaults/README.md - file - text/markdown | Size : 2.6 kB +- README.md - ./node_modules/object.map/README.md - file - text/markdown | Size : 3.5 kB +- README.md - ./node_modules/object.pick/README.md - file - text/markdown | Size : 3.4 kB +- README.md - ./node_modules/once/README.md - file - text/markdown | Size : 1.8 kB +- readme.md - ./node_modules/onetime/readme.md - file - text/markdown | Size : 998 B +- readme.md - ./node_modules/open/readme.md - file - text/markdown | Size : 6.4 kB +- CHANGELOG.md - ./node_modules/open-graph-scraper/CHANGELOG.md - file - text/markdown | Size : 5.7 kB +- readme.md - ./node_modules/open-graph-scraper/node_modules/@sindresorhus/is/readme.md - file - text/markdown | Size : 17.4 kB +- README.md - ./node_modules/open-graph-scraper/node_modules/cacheable-request/README.md - file - text/markdown | Size : 12.6 kB +- README.md - ./node_modules/open-graph-scraper/node_modules/chardet/README.md - file - text/markdown | Size : 2.2 kB +- readme.md - ./node_modules/open-graph-scraper/node_modules/get-stream/readme.md - file - text/markdown | Size : 4.2 kB +- readme.md - ./node_modules/open-graph-scraper/node_modules/got/readme.md - file - text/markdown | Size : 30.0 kB +- Changelog.md - ./node_modules/open-graph-scraper/node_modules/iconv-lite/Changelog.md - file - text/markdown | Size : 6.6 kB +- README.md - ./node_modules/open-graph-scraper/node_modules/iconv-lite/README.md - file - text/markdown | Size : 6.4 kB +- readme.md - ./node_modules/open-graph-scraper/node_modules/p-cancelable/readme.md - file - text/markdown | Size : 4.7 kB +- README.md - ./node_modules/open-graph-scraper/README.md - file - text/markdown | Size : 5.6 kB +- CHANGELOG.md - ./node_modules/optionator/CHANGELOG.md - file - text/markdown | Size : 1.9 kB +- README.md - ./node_modules/optionator/README.md - file - text/markdown | Size : 15.0 kB +- readme.md - ./node_modules/ora/node_modules/ansi-regex/readme.md - file - text/markdown | Size : 1.7 kB +- readme.md - ./node_modules/ora/node_modules/ansi-styles/readme.md - file - text/markdown | Size : 1.4 kB +- readme.md - ./node_modules/ora/node_modules/chalk/readme.md - file - text/markdown | Size : 6.1 kB +- readme.md - ./node_modules/ora/node_modules/strip-ansi/readme.md - file - text/markdown | Size : 801 B +- readme.md - ./node_modules/ora/node_modules/supports-color/readme.md - file - text/markdown | Size : 823 B +- readme.md - ./node_modules/ora/readme.md - file - text/markdown | Size : 3.7 kB +- readme.md - ./node_modules/os-homedir/readme.md - file - text/markdown | Size : 735 B +- readme.md - ./node_modules/os-locale/readme.md - file - text/markdown | Size : 1.0 kB +- readme.md - ./node_modules/os-tmpdir/readme.md - file - text/markdown | Size : 693 B +- README.md - ./node_modules/osenv/README.md - file - text/markdown | Size : 1.5 kB +- readme.md - ./node_modules/p-event/readme.md - file - text/markdown | Size : 7.7 kB +- readme.md - ./node_modules/p-finally/readme.md - file - text/markdown | Size : 949 B +- readme.md - ./node_modules/p-is-promise/readme.md - file - text/markdown | Size : 973 B +- readme.md - ./node_modules/p-limit/node_modules/p-try/readme.md - file - text/markdown | Size : 1.3 kB +- readme.md - ./node_modules/p-limit/readme.md - file - text/markdown | Size : 2.9 kB +- readme.md - ./node_modules/p-locate/readme.md - file - text/markdown | Size : 2.2 kB +- readme.md - ./node_modules/p-map/readme.md - file - text/markdown | Size : 2.2 kB +- readme.md - ./node_modules/p-timeout/readme.md - file - text/markdown | Size : 1.9 kB +- readme.md - ./node_modules/p-try/readme.md - file - text/markdown | Size : 894 B +- LICENSE.md - ./node_modules/package-json-from-dist/LICENSE.md - file - text/markdown | Size : 1.8 kB +- README.md - ./node_modules/package-json-from-dist/README.md - file - text/markdown | Size : 3.1 kB +- README.md - ./node_modules/parse-filepath/README.md - file - text/markdown | Size : 3.4 kB +- README.md - ./node_modules/parse-glob/node_modules/is-extglob/README.md - file - text/markdown | Size : 1.9 kB +- README.md - ./node_modules/parse-glob/node_modules/is-glob/README.md - file - text/markdown | Size : 3.2 kB +- README.md - ./node_modules/parse-glob/README.md - file - text/markdown | Size : 4.0 kB +- readme.md - ./node_modules/parse-json/readme.md - file - text/markdown | Size : 1.3 kB +- README.md - ./node_modules/parse-passwd/README.md - file - text/markdown | Size : 2.5 kB +- README.md - ./node_modules/parse5/README.md - file - text/markdown | Size : 953 B +- README.md - ./node_modules/parse5-htmlparser2-tree-adapter/node_modules/parse5/README.md - file - text/markdown | Size : 885 B +- README.md - ./node_modules/parse5-htmlparser2-tree-adapter/README.md - file - text/markdown | Size : 973 B +- readme.md - ./node_modules/path-exists/readme.md - file - text/markdown | Size : 1.3 kB +- readme.md - ./node_modules/path-is-absolute/readme.md - file - text/markdown | Size : 1.2 kB +- readme.md - ./node_modules/path-key/readme.md - file - text/markdown | Size : 967 B +- README.md - ./node_modules/path-parse/README.md - file - text/markdown | Size : 871 B +- README.md - ./node_modules/path-root/README.md - file - text/markdown | Size : 2.8 kB +- README.md - ./node_modules/path-root-regex/README.md - file - text/markdown | Size : 2.2 kB +- LICENSE.md - ./node_modules/path-scurry/LICENSE.md - file - text/markdown | Size : 1.6 kB +- README.md - ./node_modules/path-scurry/node_modules/lru-cache/README.md - file - text/markdown | Size : 39.4 kB +- README.md - ./node_modules/path-scurry/node_modules/minipass/README.md - file - text/markdown | Size : 27.2 kB +- README.md - ./node_modules/path-scurry/README.md - file - text/markdown | Size : 22.0 kB +- readme.md - ./node_modules/path-type/readme.md - file - text/markdown | Size : 709 B +- README.md - ./node_modules/pend/README.md - file - text/markdown | Size : 973 B +- CHANGELOG.md - ./node_modules/picomatch/CHANGELOG.md - file - text/markdown | Size : 5.8 kB +- README.md - ./node_modules/picomatch/README.md - file - text/markdown | Size : 27.4 kB +- readme.md - ./node_modules/pidtree/readme.md - file - text/markdown | Size : 6.0 kB +- readme.md - ./node_modules/pify/readme.md - file - text/markdown | Size : 3.2 kB +- readme.md - ./node_modules/pinkie/readme.md - file - text/markdown | Size : 2.7 kB +- readme.md - ./node_modules/pinkie-promise/readme.md - file - text/markdown | Size : 751 B +- CHANGELOG.md - ./node_modules/possible-typed-array-names/CHANGELOG.md - file - text/markdown | Size : 854 B +- README.md - ./node_modules/possible-typed-array-names/README.md - file - text/markdown | Size : 2.1 kB +- CHANGELOG.md - ./node_modules/prelude-ls/CHANGELOG.md - file - text/markdown | Size : 4.0 kB +- README.md - ./node_modules/prelude-ls/README.md - file - text/markdown | Size : 613 B +- readme.md - ./node_modules/prepend-http/readme.md - file - text/markdown | Size : 862 B +- README.md - ./node_modules/pretty/README.md - file - text/markdown | Size : 2.5 kB +- license.md - ./node_modules/process-nextick-args/license.md - file - text/markdown | Size : 1.1 kB +- readme.md - ./node_modules/process-nextick-args/readme.md - file - text/markdown | Size : 450 B +- README.md - ./node_modules/progress-stream/README.md - file - text/markdown | Size : 3.5 kB +- README.md - ./node_modules/promise-inflight/README.md - file - text/markdown | Size : 782 B +- README.md - ./node_modules/proto-list/README.md - file - text/markdown | Size : 80 B +- LICENSE.md - ./node_modules/prr/LICENSE.md - file - text/markdown | Size : 1.1 kB +- README.md - ./node_modules/prr/README.md - file - text/markdown | Size : 1.7 kB +- README.md - ./node_modules/pseudomap/README.md - file - text/markdown | Size : 2.2 kB +- README.md - ./node_modules/psl/README.md - file - text/markdown | Size : 6.8 kB +- README.md - ./node_modules/pump/README.md - file - text/markdown | Size : 1.7 kB +- README.md - ./node_modules/punycode/README.md - file - text/markdown | Size : 4.9 kB +- CHANGES.md - ./node_modules/q/CHANGES.md - file - text/markdown | Size : 30.1 kB +- README.md - ./node_modules/q/README.md - file - text/markdown | Size : 25.4 kB +- CHANGELOG.md - ./node_modules/qs/CHANGELOG.md - file - text/markdown | Size : 29.7 kB +- LICENSE.md - ./node_modules/qs/LICENSE.md - file - text/markdown | Size : 1.6 kB +- README.md - ./node_modules/qs/README.md - file - text/markdown | Size : 21.0 kB +- readme.md - ./node_modules/query-string/node_modules/strict-uri-encode/readme.md - file - text/markdown | Size : 657 B +- readme.md - ./node_modules/query-string/readme.md - file - text/markdown | Size : 16.3 kB +- CHANGELOG.md - ./node_modules/querystring/CHANGELOG.md - file - text/markdown | Size : 734 B +- README.md - ./node_modules/querystring/README.md - file - text/markdown | Size : 620 B +- README.md - ./node_modules/querystringify/README.md - file - text/markdown | Size : 2.4 kB +- README.md - ./node_modules/queue-microtask/README.md - file - text/markdown | Size : 5.6 kB +- readme.md - ./node_modules/quick-lru/readme.md - file - text/markdown | Size : 2.7 kB +- CHANGELOG.md - ./node_modules/rage-edit/CHANGELOG.md - file - text/markdown | Size : 272 B +- README.md - ./node_modules/rage-edit/README.md - file - text/markdown | Size : 25.8 kB +- readme.md - ./node_modules/read-pkg/readme.md - file - text/markdown | Size : 1.7 kB +- CONTRIBUTING.md - ./node_modules/readable-stream/CONTRIBUTING.md - file - text/markdown | Size : 1.4 kB +- GOVERNANCE.md - ./node_modules/readable-stream/GOVERNANCE.md - file - text/markdown | Size : 5.5 kB +- README.md - ./node_modules/readable-stream/README.md - file - text/markdown | Size : 4.7 kB +- README.md - ./node_modules/readline/README.md - file - text/markdown | Size : 1.8 kB +- README.md - ./node_modules/rechoir/README.md - file - text/markdown | Size : 3.6 kB +- CHANGELOG.md - ./node_modules/regexp.prototype.flags/CHANGELOG.md - file - text/markdown | Size : 23.7 kB +- README.md - ./node_modules/regexp.prototype.flags/README.md - file - text/markdown | Size : 2.5 kB +- README.md - ./node_modules/remedial/README.md - file - text/markdown | Size : 3.1 kB +- README.md - ./node_modules/remove-trailing-spaces/README.md - file - text/markdown | Size : 4.9 kB +- Readme.md - ./node_modules/require-like/Readme.md - file - text/markdown | Size : 1.3 kB +- CHANGELOG.md - ./node_modules/require-main-filename/CHANGELOG.md - file - text/markdown | Size : 852 B +- README.md - ./node_modules/require-main-filename/README.md - file - text/markdown | Size : 1.1 kB +- README.md - ./node_modules/requires-port/README.md - file - text/markdown | Size : 1.8 kB +- SECURITY.md - ./node_modules/resolve/SECURITY.md - file - text/markdown | Size : 157 B +- README.md - ./node_modules/resolve-alpn/README.md - file - text/markdown | Size : 1.9 kB +- README.md - ./node_modules/resolve-dir/README.md - file - text/markdown | Size : 3.4 kB +- readme.md - ./node_modules/responselike/readme.md - file - text/markdown | Size : 1.3 kB +- readme.md - ./node_modules/restore-cursor/readme.md - file - text/markdown | Size : 365 B +- README.md - ./node_modules/reusify/README.md - file - text/markdown | Size : 3.6 kB +- README.md - ./node_modules/rimraf/README.md - file - text/markdown | Size : 3.6 kB +- README.md - ./node_modules/rotating-file-stream/README.md - file - text/markdown | Size : 24.6 kB +- readme.md - ./node_modules/run-applescript/readme.md - file - text/markdown | Size : 771 B +- README.md - ./node_modules/run-async/README.md - file - text/markdown | Size : 2.1 kB +- README.md - ./node_modules/run-parallel/README.md - file - text/markdown | Size : 3.2 kB +- CHANGELOG.md - ./node_modules/rxjs/CHANGELOG.md - file - text/markdown | Size : 249.1 kB +- CODE_OF_CONDUCT.md - ./node_modules/rxjs/CODE_OF_CONDUCT.md - file - text/markdown | Size : 3.3 kB +- README.md - ./node_modules/rxjs/README.md - file - text/markdown | Size : 3.4 kB +- CHANGELOG.md - ./node_modules/safe-array-concat/CHANGELOG.md - file - text/markdown | Size : 4.2 kB +- README.md - ./node_modules/safe-array-concat/node_modules/isarray/README.md - file - text/markdown | Size : 1.2 kB +- README.md - ./node_modules/safe-array-concat/README.md - file - text/markdown | Size : 2.6 kB +- README.md - ./node_modules/safe-buffer/README.md - file - text/markdown | Size : 19.6 kB +- CHANGELOG.md - ./node_modules/safe-regex-test/CHANGELOG.md - file - text/markdown | Size : 3.1 kB +- README.md - ./node_modules/safe-regex-test/README.md - file - text/markdown | Size : 1.8 kB +- Porting-Buffer.md - ./node_modules/safer-buffer/Porting-Buffer.md - file - text/markdown | Size : 12.8 kB +- Readme.md - ./node_modules/safer-buffer/Readme.md - file - text/markdown | Size : 8.3 kB +- Changelog.md - ./node_modules/sanitize-filename/Changelog.md - file - text/markdown | Size : 171 B +- LICENSE.md - ./node_modules/sanitize-filename/LICENSE.md - file - text/markdown | Size : 1.3 kB +- README.md - ./node_modules/sanitize-filename/README.md - file - text/markdown | Size : 3.2 kB +- README.md - ./node_modules/saxes/README.md - file - text/markdown | Size : 15.1 kB +- README.md - ./node_modules/section-matter/README.md - file - text/markdown | Size : 6.9 kB +- LICENSE.md - ./node_modules/secure-json-parse/LICENSE.md - file - text/markdown | Size : 1.7 kB +- README.md - ./node_modules/secure-json-parse/README.md - file - text/markdown | Size : 4.5 kB +- README.md - ./node_modules/seek-bzip/README.md - file - text/markdown | Size : 7.0 kB +- README.md - ./node_modules/semver/README.md - file - text/markdown | Size : 15.7 kB +- README.md - ./node_modules/server-destroy/README.md - file - text/markdown | Size : 369 B +- CHANGELOG.md - ./node_modules/set-blocking/CHANGELOG.md - file - text/markdown | Size : 718 B +- README.md - ./node_modules/set-blocking/README.md - file - text/markdown | Size : 1.5 kB +- CHANGELOG.md - ./node_modules/set-function-length/CHANGELOG.md - file - text/markdown | Size : 4.9 kB +- README.md - ./node_modules/set-function-length/README.md - file - text/markdown | Size : 2.2 kB +- CHANGELOG.md - ./node_modules/set-function-name/CHANGELOG.md - file - text/markdown | Size : 3.8 kB +- README.md - ./node_modules/set-function-name/README.md - file - text/markdown | Size : 2.4 kB +- README.md - ./node_modules/sharp/node_modules/semver/README.md - file - text/markdown | Size : 24.4 kB +- README.md - ./node_modules/sharp/README.md - file - text/markdown | Size : 3.2 kB +- readme.md - ./node_modules/shebang-command/readme.md - file - text/markdown | Size : 567 B +- readme.md - ./node_modules/shebang-regex/readme.md - file - text/markdown | Size : 580 B +- README.md - ./node_modules/shell-escape/README.md - file - text/markdown | Size : 1.0 kB +- CHANGELOG.md - ./node_modules/shell-quote/CHANGELOG.md - file - text/markdown | Size : 21.3 kB +- README.md - ./node_modules/shell-quote/README.md - file - text/markdown | Size : 3.6 kB +- security.md - ./node_modules/shell-quote/security.md - file - text/markdown | Size : 295 B +- Readme.md - ./node_modules/showdown/node_modules/commander/Readme.md - file - text/markdown | Size : 41.3 kB +- README.md - ./node_modules/showdown/README.md - file - text/markdown | Size : 19.8 kB +- CHANGELOG.md - ./node_modules/side-channel/CHANGELOG.md - file - text/markdown | Size : 5.6 kB +- README.md - ./node_modules/side-channel/README.md - file - text/markdown | Size : 98 B +- CHANGELOG.md - ./node_modules/signal-exit/CHANGELOG.md - file - text/markdown | Size : 1.5 kB +- README.md - ./node_modules/signal-exit/README.md - file - text/markdown | Size : 1.3 kB +- README.md - ./node_modules/simple-swizzle/node_modules/is-arrayish/README.md - file - text/markdown | Size : 704 B +- README.md - ./node_modules/simple-swizzle/README.md - file - text/markdown | Size : 1.2 kB +- readme.md - ./node_modules/slash/readme.md - file - text/markdown | Size : 890 B +- README.md - ./node_modules/slide/README.md - file - text/markdown | Size : 4.0 kB +- readme.md - ./node_modules/sort-keys/readme.md - file - text/markdown | Size : 1.0 kB +- LICENSE.md - ./node_modules/sort-keys-length/LICENSE.md - file - text/markdown | Size : 1.1 kB +- readme.md - ./node_modules/sort-keys-length/node_modules/sort-keys/readme.md - file - text/markdown | Size : 1.0 kB +- README.md - ./node_modules/sort-keys-length/README.md - file - text/markdown | Size : 624 B +- CHANGELOG.md - ./node_modules/source-map/CHANGELOG.md - file - text/markdown | Size : 7.9 kB +- README.md - ./node_modules/source-map/README.md - file - text/markdown | Size : 24.1 kB +- LICENSE.md - ./node_modules/source-map-support/LICENSE.md - file - text/markdown | Size : 1.1 kB +- README.md - ./node_modules/source-map-support/README.md - file - text/markdown | Size : 9.5 kB +- README.md - ./node_modules/spdx-correct/README.md - file - text/markdown | Size : 577 B +- README.md - ./node_modules/spdx-exceptions/README.md - file - text/markdown | Size : 1.2 kB +- README.md - ./node_modules/spdx-expression-parse/README.md - file - text/markdown | Size : 3.8 kB +- README.md - ./node_modules/spdx-license-ids/README.md - file - text/markdown | Size : 1.6 kB +- README.md - ./node_modules/speedometer/README.md - file - text/markdown | Size : 743 B +- readme.md - ./node_modules/split-on-first/readme.md - file - text/markdown | Size : 1.1 kB +- README.md - ./node_modules/sprintf-js/README.md - file - text/markdown | Size : 4.9 kB +- CHANGELOG.md - ./node_modules/ssri/CHANGELOG.md - file - text/markdown | Size : 10.8 kB +- LICENSE.md - ./node_modules/ssri/LICENSE.md - file - text/markdown | Size : 755 B +- README.md - ./node_modules/ssri/README.md - file - text/markdown | Size : 20.4 kB +- History.md - ./node_modules/stream-parser/History.md - file - text/markdown | Size : 1.4 kB +- README.md - ./node_modules/stream-parser/README.md - file - text/markdown | Size : 4.1 kB +- readme.md - ./node_modules/strict-uri-encode/readme.md - file - text/markdown | Size : 666 B +- readme.md - ./node_modules/string-width/readme.md - file - text/markdown | Size : 1.2 kB +- readme.md - ./node_modules/string-width-cjs/node_modules/ansi-regex/readme.md - file - text/markdown | Size : 2.6 kB +- README.md - ./node_modules/string-width-cjs/node_modules/emoji-regex/README.md - file - text/markdown | Size : 2.7 kB +- readme.md - ./node_modules/string-width-cjs/node_modules/is-fullwidth-code-point/readme.md - file - text/markdown | Size : 843 B +- readme.md - ./node_modules/string-width-cjs/node_modules/strip-ansi/readme.md - file - text/markdown | Size : 1.6 kB +- readme.md - ./node_modules/string-width-cjs/readme.md - file - text/markdown | Size : 1.4 kB +- CHANGELOG.md - ./node_modules/string.prototype.padend/CHANGELOG.md - file - text/markdown | Size : 5.6 kB +- README.md - ./node_modules/string.prototype.padend/README.md - file - text/markdown | Size : 2.3 kB +- CHANGELOG.md - ./node_modules/string.prototype.trim/CHANGELOG.md - file - text/markdown | Size : 20.0 kB +- README.md - ./node_modules/string.prototype.trim/README.md - file - text/markdown | Size : 2.4 kB +- CHANGELOG.md - ./node_modules/string.prototype.trimend/CHANGELOG.md - file - text/markdown | Size : 10.2 kB +- README.md - ./node_modules/string.prototype.trimend/README.md - file - text/markdown | Size : 2.4 kB +- CHANGELOG.md - ./node_modules/string.prototype.trimstart/CHANGELOG.md - file - text/markdown | Size : 10.8 kB +- README.md - ./node_modules/string.prototype.trimstart/README.md - file - text/markdown | Size : 2.4 kB +- README.md - ./node_modules/string_decoder/README.md - file - text/markdown | Size : 1.8 kB +- readme.md - ./node_modules/strip-ansi/readme.md - file - text/markdown | Size : 1.7 kB +- readme.md - ./node_modules/strip-ansi-cjs/node_modules/ansi-regex/readme.md - file - text/markdown | Size : 2.6 kB +- readme.md - ./node_modules/strip-ansi-cjs/readme.md - file - text/markdown | Size : 1.6 kB +- readme.md - ./node_modules/strip-bom/readme.md - file - text/markdown | Size : 913 B +- README.md - ./node_modules/strip-bom-string/README.md - file - text/markdown | Size : 3.2 kB +- README.md - ./node_modules/strip-dirs/README.md - file - text/markdown | Size : 2.5 kB +- readme.md - ./node_modules/strip-eof/readme.md - file - text/markdown | Size : 536 B +- readme.md - ./node_modules/strip-outer/readme.md - file - text/markdown | Size : 476 B +- readme.md - ./node_modules/supports-color/readme.md - file - text/markdown | Size : 1.9 kB +- CHANGELOG.md - ./node_modules/supports-preserve-symlinks-flag/CHANGELOG.md - file - text/markdown | Size : 2.0 kB +- README.md - ./node_modules/supports-preserve-symlinks-flag/README.md - file - text/markdown | Size : 2.3 kB +- README.md - ./node_modules/symbol-tree/README.md - file - text/markdown | Size : 21.0 kB +- README.md - ./node_modules/tar/node_modules/minipass/README.md - file - text/markdown | Size : 25.6 kB +- CHANGELOG.md - ./node_modules/tar/node_modules/mkdirp/CHANGELOG.md - file - text/markdown | Size : 448 B +- README.md - ./node_modules/tar/node_modules/yallist/README.md - file - text/markdown | Size : 4.7 kB +- README.md - ./node_modules/tar/README.md - file - text/markdown | Size : 46.1 kB +- LICENSE.md - ./node_modules/tar-stream/node_modules/bl/LICENSE.md - file - text/markdown | Size : 1.2 kB +- README.md - ./node_modules/tar-stream/node_modules/bl/README.md - file - text/markdown | Size : 10.8 kB +- README.md - ./node_modules/tar-stream/node_modules/isarray/README.md - file - text/markdown | Size : 1.9 kB +- CONTRIBUTING.md - ./node_modules/tar-stream/node_modules/readable-stream/CONTRIBUTING.md - file - text/markdown | Size : 1.4 kB +- 2015-01-30.md - ./node_modules/tar-stream/node_modules/readable-stream/doc/wg-meetings/2015-01-30.md - file - text/markdown | Size : 2.3 kB +- GOVERNANCE.md - ./node_modules/tar-stream/node_modules/readable-stream/GOVERNANCE.md - file - text/markdown | Size : 5.5 kB +- README.md - ./node_modules/tar-stream/node_modules/readable-stream/README.md - file - text/markdown | Size : 3.0 kB +- README.md - ./node_modules/tar-stream/node_modules/safe-buffer/README.md - file - text/markdown | Size : 19.6 kB +- README.md - ./node_modules/tar-stream/node_modules/string_decoder/README.md - file - text/markdown | Size : 1.8 kB +- README.md - ./node_modules/tar-stream/node_modules/xtend/README.md - file - text/markdown | Size : 726 B +- README.md - ./node_modules/tar-stream/README.md - file - text/markdown | Size : 5.2 kB +- History.md - ./node_modules/throttle/History.md - file - text/markdown | Size : 524 B +- README.md - ./node_modules/throttle/README.md - file - text/markdown | Size : 1.6 kB +- README.md - ./node_modules/through2/node_modules/readable-stream/README.md - file - text/markdown | Size : 1.3 kB +- README.md - ./node_modules/through2/node_modules/string_decoder/README.md - file - text/markdown | Size : 498 B +- README.md - ./node_modules/through2/README.md - file - text/markdown | Size : 4.2 kB +- readme.md - ./node_modules/timed-out/readme.md - file - text/markdown | Size : 986 B +- README.md - ./node_modules/tmp/README.md - file - text/markdown | Size : 9.3 kB +- README.md - ./node_modules/to-buffer/README.md - file - text/markdown | Size : 514 B +- README.md - ./node_modules/to-regex-range/README.md - file - text/markdown | Size : 13.6 kB +- LICENSE.md - ./node_modules/tr46/LICENSE.md - file - text/markdown | Size : 1.1 kB +- README.md - ./node_modules/tr46/README.md - file - text/markdown | Size : 2.1 kB +- readme.md - ./node_modules/trash/readme.md - file - text/markdown | Size : 2.4 kB +- readme.md - ./node_modules/trim-repeated/readme.md - file - text/markdown | Size : 819 B +- README.md - ./node_modules/truncate-utf8-bytes/README.md - file - text/markdown | Size : 813 B +- README.md - ./node_modules/tslib/README.md - file - text/markdown | Size : 3.7 kB +- CHANGELOG.md - ./node_modules/tslog/CHANGELOG.md - file - text/markdown | Size : 3.0 kB +- README.md - ./node_modules/tslog/README.md - file - text/markdown | Size : 33.1 kB +- README.md - ./node_modules/turndown/README.md - file - text/markdown | Size : 9.4 kB +- README.md - ./node_modules/type-check/README.md - file - text/markdown | Size : 10.2 kB +- readme.md - ./node_modules/type-fest/readme.md - file - text/markdown | Size : 33.8 kB +- CHANGELOG.md - ./node_modules/typed-array-buffer/CHANGELOG.md - file - text/markdown | Size : 2.3 kB +- README.md - ./node_modules/typed-array-buffer/README.md - file - text/markdown | Size : 2.0 kB +- CHANGELOG.md - ./node_modules/typed-array-byte-length/CHANGELOG.md - file - text/markdown | Size : 1.8 kB +- README.md - ./node_modules/typed-array-byte-length/README.md - file - text/markdown | Size : 3.7 kB +- CHANGELOG.md - ./node_modules/typed-array-byte-offset/CHANGELOG.md - file - text/markdown | Size : 2.4 kB +- README.md - ./node_modules/typed-array-byte-offset/README.md - file - text/markdown | Size : 3.7 kB +- CHANGELOG.md - ./node_modules/typed-array-length/CHANGELOG.md - file - text/markdown | Size : 9.0 kB +- README.md - ./node_modules/typed-array-length/README.md - file - text/markdown | Size : 2.8 kB +- README.md - ./node_modules/typescript/lib/README.md - file - text/markdown | Size : 270 B +- README.md - ./node_modules/typescript/README.md - file - text/markdown | Size : 3.2 kB +- SECURITY.md - ./node_modules/typescript/SECURITY.md - file - text/markdown | Size : 2.8 kB +- CHANGELOG.md - ./node_modules/unbox-primitive/CHANGELOG.md - file - text/markdown | Size : 6.4 kB +- README.md - ./node_modules/unbox-primitive/README.md - file - text/markdown | Size : 2.1 kB +- README.md - ./node_modules/unbzip2-stream/README.md - file - text/markdown | Size : 1.6 kB +- README.md - ./node_modules/unc-path-regex/README.md - file - text/markdown | Size : 2.6 kB +- README.md - ./node_modules/underscore/README.md - file - text/markdown | Size : 1.5 kB +- CONTRIBUTORS.md - ./node_modules/underscore.string/node_modules/sprintf-js/CONTRIBUTORS.md - file - text/markdown | Size : 1.3 kB +- README.md - ./node_modules/underscore.string/node_modules/sprintf-js/README.md - file - text/markdown | Size : 6.3 kB +- README.md - ./node_modules/undici-types/README.md - file - text/markdown | Size : 455 B +- LICENSE.md - ./node_modules/unfetch/LICENSE.md - file - text/markdown | Size : 1.1 kB +- README.md - ./node_modules/unfetch/README.md - file - text/markdown | Size : 9.3 kB +- README.md - ./node_modules/unique-filename/README.md - file - text/markdown | Size : 1.2 kB +- README.md - ./node_modules/unique-slug/README.md - file - text/markdown | Size : 445 B +- README.md - ./node_modules/universalify/README.md - file - text/markdown | Size : 2.0 kB +- README.md - ./node_modules/uri-js/README.md - file - text/markdown | Size : 6.4 kB +- README.md - ./node_modules/url-parse/README.md - file - text/markdown | Size : 6.3 kB +- readme.md - ./node_modules/url-parse-lax/readme.md - file - text/markdown | Size : 2.0 kB +- README.md - ./node_modules/url-template/README.md - file - text/markdown | Size : 1.4 kB +- README.md - ./node_modules/url-template/uritemplate-test/README.md - file - text/markdown | Size : 3.2 kB +- README.md - ./node_modules/url-to-options/README.md - file - text/markdown | Size : 837 B +- readme.md - ./node_modules/user-home/readme.md - file - text/markdown | Size : 724 B +- README.md - ./node_modules/utf8-byte-length/README.md - file - text/markdown | Size : 844 B +- History.md - ./node_modules/util-deprecate/History.md - file - text/markdown | Size : 282 B +- README.md - ./node_modules/util-deprecate/README.md - file - text/markdown | Size : 1.7 kB +- CHANGELOG.md - ./node_modules/uuid/CHANGELOG.md - file - text/markdown | Size : 3.8 kB +- LICENSE.md - ./node_modules/uuid/LICENSE.md - file - text/markdown | Size : 1.1 kB +- README.md - ./node_modules/uuid/README.md - file - text/markdown | Size : 7.9 kB +- README.md - ./node_modules/v8flags/README.md - file - text/markdown | Size : 1.8 kB +- README.md - ./node_modules/validate-npm-package-license/README.md - file - text/markdown | Size : 2.6 kB +- README.md - ./node_modules/validator/README.md - file - text/markdown | Size : 38.9 kB +- CHANGELOG.md - ./node_modules/w3c-hr-time/CHANGELOG.md - file - text/markdown | Size : 584 B +- LICENSE.md - ./node_modules/w3c-hr-time/LICENSE.md - file - text/markdown | Size : 1.1 kB +- README.md - ./node_modules/w3c-hr-time/README.md - file - text/markdown | Size : 9.1 kB +- LICENSE.md - ./node_modules/w3c-xmlserializer/LICENSE.md - file - text/markdown | Size : 1.1 kB +- README.md - ./node_modules/w3c-xmlserializer/README.md - file - text/markdown | Size : 1.7 kB +- index.md - ./node_modules/wcwidth/docs/index.md - file - text/markdown | Size : 3.2 kB +- Readme.md - ./node_modules/wcwidth/Readme.md - file - text/markdown | Size : 887 B +- LICENSE.md - ./node_modules/webidl-conversions/LICENSE.md - file - text/markdown | Size : 1.3 kB +- README.md - ./node_modules/webidl-conversions/README.md - file - text/markdown | Size : 9.4 kB +- README.md - ./node_modules/whatwg-encoding/README.md - file - text/markdown | Size : 2.9 kB +- README.md - ./node_modules/whatwg-mimetype/README.md - file - text/markdown | Size : 5.4 kB +- README.md - ./node_modules/whatwg-url/README.md - file - text/markdown | Size : 6.8 kB +- CHANGELOG.md - ./node_modules/which/CHANGELOG.md - file - text/markdown | Size : 2.4 kB +- README.md - ./node_modules/which/README.md - file - text/markdown | Size : 1.3 kB +- CHANGELOG.md - ./node_modules/which-boxed-primitive/CHANGELOG.md - file - text/markdown | Size : 5.7 kB +- README.md - ./node_modules/which-boxed-primitive/README.md - file - text/markdown | Size : 3.1 kB +- CHANGELOG.md - ./node_modules/which-module/CHANGELOG.md - file - text/markdown | Size : 750 B +- README.md - ./node_modules/which-module/README.md - file - text/markdown | Size : 1.9 kB +- CHANGELOG.md - ./node_modules/which-typed-array/CHANGELOG.md - file - text/markdown | Size : 22.3 kB +- README.md - ./node_modules/which-typed-array/README.md - file - text/markdown | Size : 3.5 kB +- README.md - ./node_modules/window-size/README.md - file - text/markdown | Size : 1.8 kB +- README.md - ./node_modules/word-wrap/README.md - file - text/markdown | Size : 6.3 kB +- readme.md - ./node_modules/wrap-ansi/readme.md - file - text/markdown | Size : 2.9 kB +- readme.md - ./node_modules/wrap-ansi-cjs/node_modules/ansi-regex/readme.md - file - text/markdown | Size : 2.6 kB +- readme.md - ./node_modules/wrap-ansi-cjs/node_modules/ansi-styles/readme.md - file - text/markdown | Size : 4.3 kB +- CHANGELOG.md - ./node_modules/wrap-ansi-cjs/node_modules/color-convert/CHANGELOG.md - file - text/markdown | Size : 1.4 kB +- README.md - ./node_modules/wrap-ansi-cjs/node_modules/color-convert/README.md - file - text/markdown | Size : 2.9 kB +- README.md - ./node_modules/wrap-ansi-cjs/node_modules/color-name/README.md - file - text/markdown | Size : 384 B +- README.md - ./node_modules/wrap-ansi-cjs/node_modules/emoji-regex/README.md - file - text/markdown | Size : 2.7 kB +- readme.md - ./node_modules/wrap-ansi-cjs/node_modules/is-fullwidth-code-point/readme.md - file - text/markdown | Size : 843 B +- readme.md - ./node_modules/wrap-ansi-cjs/node_modules/string-width/readme.md - file - text/markdown | Size : 1.4 kB +- readme.md - ./node_modules/wrap-ansi-cjs/node_modules/strip-ansi/readme.md - file - text/markdown | Size : 1.6 kB +- readme.md - ./node_modules/wrap-ansi-cjs/readme.md - file - text/markdown | Size : 2.7 kB +- README.md - ./node_modules/wrappy/README.md - file - text/markdown | Size : 685 B +- README.md - ./node_modules/write-file-atomic/README.md - file - text/markdown | Size : 1.6 kB +- README.md - ./node_modules/ws/README.md - file - text/markdown | Size : 13.8 kB +- readme.md - ./node_modules/xdg-basedir/readme.md - file - text/markdown | Size : 1.6 kB +- readme.md - ./node_modules/xdg-trashdir/node_modules/pify/readme.md - file - text/markdown | Size : 2.6 kB +- readme.md - ./node_modules/xdg-trashdir/readme.md - file - text/markdown | Size : 1.0 kB +- CHANGELOG.md - ./node_modules/xlsx/CHANGELOG.md - file - text/markdown | Size : 9.2 kB +- README.md - ./node_modules/xlsx/README.md - file - text/markdown | Size : 1.5 kB +- README.md - ./node_modules/xml-name-validator/README.md - file - text/markdown | Size : 1.2 kB +- README.md - ./node_modules/xmlchars/README.md - file - text/markdown | Size : 1.4 kB +- README.md - ./node_modules/xtend/README.md - file - text/markdown | Size : 513 B +- CHANGELOG.md - ./node_modules/y18n/CHANGELOG.md - file - text/markdown | Size : 1.3 kB +- README.md - ./node_modules/y18n/README.md - file - text/markdown | Size : 2.8 kB +- README.md - ./node_modules/yallist/README.md - file - text/markdown | Size : 4.7 kB +- README.md - ./node_modules/yaml/README.md - file - text/markdown | Size : 6.1 kB +- CHANGELOG.md - ./node_modules/yargs/CHANGELOG.md - file - text/markdown | Size : 92.1 kB +- readme.md - ./node_modules/yargs/node_modules/find-up/readme.md - file - text/markdown | Size : 2.0 kB +- readme.md - ./node_modules/yargs/node_modules/locate-path/readme.md - file - text/markdown | Size : 1.5 kB +- readme.md - ./node_modules/yargs/node_modules/p-locate/readme.md - file - text/markdown | Size : 2.1 kB +- README.md - ./node_modules/yargs/README.md - file - text/markdown | Size : 3.8 kB +- CHANGELOG.md - ./node_modules/yargs-parser/CHANGELOG.md - file - text/markdown | Size : 20.4 kB +- README.md - ./node_modules/yargs-parser/README.md - file - text/markdown | Size : 9.8 kB +- README.md - ./node_modules/yauzl/README.md - file - text/markdown | Size : 31.2 kB +- README.md - ./README.md - file - text/markdown | Size : 3.0 kB +- sal-test-ai.md - ./tests/docs/sal-test-ai.md - file - text/markdown | Size : 2.8 kB +- sal-test.md - ./tests/docs/sal-test.md - file - text/markdown | Size : 98 B +- sample_ai_svg.md - ./tests/docs/sample_ai_svg.md - file - text/markdown | Size : 5.7 kB +- glands-scad-glands.md - ./tests/osr-ai/glands-scad-glands.md - file - text/markdown | Size : 1.2 kB +- glands-scad.md - ./tests/osr-ai/glands-scad.md - file - text/markdown | Size : 1.2 kB +- html-attributes.md - ./tests/osr-ai/html-attributes.md - file - text/markdown | Size : 6 B +- open-ai-test-glands-table-glands.md - ./tests/osr-ai/open-ai-test-glands-table-glands.md - file - text/markdown | Size : 1.9 kB +- open-ai-test-glands-table.md - ./tests/osr-ai/open-ai-test-glands-table.md - file - text/markdown | Size : 1.9 kB +- open-ai-test-svg-balls.md - ./tests/osr-ai/open-ai-test-svg-balls.md - file - text/markdown | Size : 211 B +- open-ai-test-svg-bolts.md - ./tests/osr-ai/open-ai-test-svg-bolts.md - file - text/markdown | Size : 553 B +- open-ai-test-svg-solarsystem.md - ./tests/osr-ai/open-ai-test-svg-solarsystem.md - file - text/markdown | Size : 590 B +- open-ai-test.md - ./tests/osr-ai/open-ai-test.md - file - text/markdown | Size : 1.6 kB +- open-ai-test.out.md - ./tests/osr-ai/open-ai-test.out.md - file - text/markdown | Size : 25.3 kB +- sal-test.md - ./tests/sal-test.md - file - text/markdown | Size : 52 B +- test.md - ./tests/sub/test.md - file - text/markdown | Size : 0 B +- source.md - ./tests/templates/source.md - file - text/markdown | Size : 42 B +- template.md - ./tests/templates/template.md - file - text/markdown | Size : 31 B +- test.in.md - ./tests/test.in.md - file - text/markdown | Size : 2.0 kB + +## Directory listing using simple glob (relative) + +- body.md +- README.md + +## Directory listing using built in glob (absolute) + + +## Embedded SVG from file + +
    + +
    + +## Embedded XLSX from file + +```js +const _path = path.resolve('./content.xlsx'); +const data = xlsx.parse(_path); +return markdownTable(data[0].data); +``` + +

    Error: ENOENT: no such file or directory, open 'C:\Users\mc007\Desktop\osr\osrl\content.xlsx'

    + at Object.openSync (node:fs:580:18)
    + at Object.readFileSync (node:fs:459:35)
    + at read_binary (.\node_modules\xlsx\xlsx.js:3275:44)
    + at readSync (.\node_modules\xlsx\xlsx.js:26980:69)
    + at readFileSync (.\node_modules\xlsx\xlsx.js:27025:9)
    + at Object.parse (.\node_modules\node-xlsx\dist\index.cjs:58:64)
    + at module.exports (.\tests\test.in.osr.tmp.js:3:19)
    + at runJSExpressionEx (.\plugins\js.js:144:130)
    + at Object.<anonymous> (.\plugins\js.js:187:63)
    + at Generator.next (<anonymous>)
    + at .\plugins\js.js:8:71
    + at new Promise (<anonymous>)
    + at __awaiter (.\plugins\js.js:4:12)
    + at Object.render (.\plugins\js.js:179:20)
    + at Tag.render (.\liquidjs\template\tag\tag.js:22:31)
    + at render.next (<anonymous>)
    + at .\liquidjs\util\async.js:23:36
    + at Generator.next (<anonymous>)
    + at fulfilled (.\liquidjs\util\async.js:5:58)
    + +Where the JSON data looks as follows: + +```js +const data = xlsx.parse(path.resolve('./content.xlsx')); +return JSON.stringify(data,null,2); +``` + +```json +

    Error: ENOENT: no such file or directory, open 'C:\Users\mc007\Desktop\osr\osrl\content.xlsx'

    + at Object.openSync (node:fs:580:18)
    + at Object.readFileSync (node:fs:459:35)
    + at read_binary (.\node_modules\xlsx\xlsx.js:3275:44)
    + at readSync (.\node_modules\xlsx\xlsx.js:26980:69)
    + at readFileSync (.\node_modules\xlsx\xlsx.js:27025:9)
    + at Object.parse (.\node_modules\node-xlsx\dist\index.cjs:58:64)
    + at module.exports (.\tests\test.in.osr.tmp.js:3:19)
    + at runJSExpressionEx (.\plugins\js.js:144:130)
    + at Object.<anonymous> (.\plugins\js.js:187:63)
    + at Generator.next (<anonymous>)
    + at .\plugins\js.js:8:71
    + at new Promise (<anonymous>)
    + at __awaiter (.\plugins\js.js:4:12)
    + at Object.render (.\plugins\js.js:179:20)
    + at Tag.render (.\liquidjs\template\tag\tag.js:22:31)
    + at render.next (<anonymous>)
    + at .\liquidjs\util\async.js:23:36
    + at Generator.next (<anonymous>)
    + at fulfilled (.\liquidjs\util\async.js:5:58)
    +``` \ No newline at end of file diff --git a/packages/osrl/tests/.gitignore b/packages/osrl/tests/.gitignore new file mode 100644 index 00000000..c8c6761a --- /dev/null +++ b/packages/osrl/tests/.gitignore @@ -0,0 +1 @@ +private \ No newline at end of file diff --git a/packages/osrl/tests/content.xlsx b/packages/osrl/tests/content.xlsx new file mode 100644 index 00000000..70ab21e1 Binary files /dev/null and b/packages/osrl/tests/content.xlsx differ diff --git a/packages/osrl/tests/docs/sal-test-ai.md b/packages/osrl/tests/docs/sal-test-ai.md new file mode 100644 index 00000000..27d4dc64 --- /dev/null +++ b/packages/osrl/tests/docs/sal-test-ai.md @@ -0,0 +1,44 @@ +## Example : List all major cities of Spain, as JSON Array, then iterate over it to retrieve tourist attractions + + + + +## [ Madrid ](http://localhost:8008//Madrid) +- [The Royal Palace of Madrid](https://www.patrimonionacional.es/en/real-sitio/palaces/royal-palace-madrid) +- [Prado Museum](https://www.museodelprado.es/en) +- [Reina Sofia Museum](http://www.museoreinasofia.es/en) +- [Thyssen-Bornemisza Museum](https://www.museothyssen.org/en) +- [Retiro Park](https://www.esmadrid.com/en/tourist-information/parque-del-retiro) +- [Puerta del Sol](https://www.esmadrid.com/en/tourist-information/puerta-del-sol) +- [Plaza Mayor](https://www.esmadrid.com/en/tourist-information/plaza-mayor) +- [Gran Via](https://www.esmadrid.com/en/shopping/gran-via-shops) +- [Almudena Cathedral](https://www.catedraldelaalmudena.es/) +- [Santiago Bernabéu Stadium](https://www.realmadrid.com/en/santiago-bernabeu-stadium) +- [El Rastro Flea Market](https://www.esmadrid.com/en/shopping/el-rastro) +- [Temple of Debod](https://www.esmadrid.com/en/tourist-information/templo-de-debod) +- [Las Ventas Bullring](https://www.las-ventas.com/en/) +- [Círculo de Bellas Artes](https://www.circulobellasartes.com/) +- [Casa de Campo](https://www.esmadrid.com/en/tourist-information/casa-de-campo) + +Feel free to explore each attraction through the provided links! +## [ Barcelona ](http://localhost:8008//Barcelona) +- [Sagrada Família](https://sagradafamilia.org/en/) +- [Park Güell](https://www.parkguell.cat/en/) +- [Casa Batlló](https://www.casabatllo.es/en/) +- [La Rambla](https://www.barcelona.com/barcelona_city_tour/barcelona_walking_tours/ramblas) +- [Gothic Quarter (Barri Gòtic)](https://www.barcelona-tourist-guide.com/en/areas/barri-gotic.html) +- [La Boqueria Market](https://www.boqueria.barcelona/home) +- [Montjuïc Magic Fountain](https://www.barcelona.com/barcelona_directory/magic_fountain) +- [Camp Nou Stadium](https://www.fcbarcelona.com/en/tickets/camp-nou) +- [Picasso Museum](https://www.museupicasso.bcn.cat/en/) +- [Casa Milà (La Pedrera)](https://www.lapedrera.com/en) +- [Palau de la Música Catalana](https://www.palaumusica.cat/en) +- [Arc de Triomf](https://www.barcelona.com/barcelona_directory/monuments/arc_de_triomphe) +- [Tibidabo Amusement Park](https://www.tibidabo.cat/en/) +- [Barceloneta Beach](https://www.barcelona.com/barcelona_directory/beaches/barceloneta) +- [Poble Espanyol](https://www.poble-espanyol.com/en/) +- [Museu Nacional d'Art de Catalunya (MNAC)](https://www.museunacional.cat/en) +- [Recinte Modernista de Sant Pau](https://www.santpaubarcelona.org/en) +- [Parc de la Ciutadella](https://www.barcelona.com/barcelona_directory/parks/park_of_the_citadel) +- [Passeig de Gràcia](https://www.barcelona.com/barcelona_directory/streets/paseo_de_gracia) +- [Barcelona Cathedral](https://www.catedralbcn.org/index.php?lang=en) diff --git a/packages/osrl/tests/docs/sal-test-ai.osrl b/packages/osrl/tests/docs/sal-test-ai.osrl new file mode 100644 index 00000000..8e4cb08e --- /dev/null +++ b/packages/osrl/tests/docs/sal-test-ai.osrl @@ -0,0 +1,15 @@ +## Example : List all major cities of Spain, as JSON Array, then iterate over it to retrieve tourist attractions + +[%capture cities %] + [% osr-ai model:"gpt-4o" cache:false gui:true logLevel:"warn" filters:"code,JSONParse" assign:"cities_ex" %] + List all major cities of Spain, as JSON Array, max. 2 + [% osr-ai-end %] +[% endcapture %] + +[%- for city in cities_ex %] +## [ [[city]] ]([[abs_url]]/[[city]]) +[%- capture city_query -%] + List all top tourist attractions of [[city]], as Markdown bullet list, with links, dont add a chapter +[%- endcapture -%] +[%- osr-ai model:"gpt-4o" cache:false gui:true logLevel:"warn" filters:"code" assign:"city_ret" -%][[-city_query-]][%- osr-ai-end -%][%- endfor -%] + diff --git a/packages/osrl/tests/docs/sal-test.md b/packages/osrl/tests/docs/sal-test.md new file mode 100644 index 00000000..3415b267 --- /dev/null +++ b/packages/osrl/tests/docs/sal-test.md @@ -0,0 +1,12 @@ + + +Source Language2 : en +Target Language2 : en + +http://localhost:8008/ + +```json +{ + +} +``` \ No newline at end of file diff --git a/packages/osrl/tests/docs/sal-test.osrl b/packages/osrl/tests/docs/sal-test.osrl new file mode 100644 index 00000000..970a8f88 --- /dev/null +++ b/packages/osrl/tests/docs/sal-test.osrl @@ -0,0 +1,26 @@ +[% capture config %][% js %] +const file = path.resolve(fs.resolve('${OSR_ROOT}/osr-templates/osrl/.osrl.json')) +if(!fs.exists(file)){ + logger.error('Error reading config') + return +} + +// logger.debug('file : ', file); +const globalVariables = readJSON(file); +addGlobal({config:globalVariables}); +return YAML.stringify(globalVariables); +[%endjs%][%endcapture%] + +Source Language2 : [[sourceLanguage]] +Target Language2 : [[targetLanguage]] + +[[abs_url]] + +```json +{ +[%js%] + console.log(config.variables) + //JSON.stringify(global.variables,null,2) +[%endjs%] +} +``` \ No newline at end of file diff --git a/packages/osrl/tests/docs/sample_ai_svg-solar.svg b/packages/osrl/tests/docs/sample_ai_svg-solar.svg new file mode 100644 index 00000000..cf3452d9 --- /dev/null +++ b/packages/osrl/tests/docs/sample_ai_svg-solar.svg @@ -0,0 +1,77 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/packages/osrl/tests/docs/sample_ai_svg.md b/packages/osrl/tests/docs/sample_ai_svg.md new file mode 100644 index 00000000..5cb185fa --- /dev/null +++ b/packages/osrl/tests/docs/sample_ai_svg.md @@ -0,0 +1,134 @@ + +### Create a SVG Animation + +- argument `cache` : cache existing results (only works with `dst` specified). + + +```js + +[% osr-ai model:"gpt-4o" cache:true gui:true logLevel:"warn" filters:"code,trim" dst:"${SRC_DIR}/${SRC_NAME}.svg" %] + Create a 4 balls, rotating around the outside of a cube, as SVG + - no comments + - scale it to 400x400px + - add another ball bouncing against the inside walls of the cube +[% osr-ai-end %] + +``` + + + + + + + + + + + + + + + + + + + + + + + + + + +### Create an animated solar system +```js + +[% osr-ai model:"gpt-4o" cache:false gui:true logLevel:"warn" filters:"code,trim" dst:"${SRC_DIR}/${SRC_NAME}-solar.svg" %] + Simluate the solar system, as SVG + - Each planet should open the link to Wikipedia. + - all planets rotate around the sun (center), animated, slow, add a thin line for the orbit + - compact the code, no comments + - make it all fit to 600x600px + All as SVG, no comments +[% osr-ai-end %] + +``` + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/packages/osrl/tests/docs/sample_ai_svg.osrl b/packages/osrl/tests/docs/sample_ai_svg.osrl new file mode 100644 index 00000000..65688385 --- /dev/null +++ b/packages/osrl/tests/docs/sample_ai_svg.osrl @@ -0,0 +1,50 @@ + +### Create a SVG Animation + +- argument `cache` : cache existing results (only works with `dst` specified). + + +```js +[% raw %] +[% osr-ai model:"gpt-4o" cache:true gui:true logLevel:"warn" filters:"code,trim" dst:"${SRC_DIR}/${SRC_NAME}.svg" %] + Create a 4 balls, rotating around the outside of a cube, as SVG + - no comments + - scale it to 400x400px + - add another ball bouncing against the inside walls of the cube +[% osr-ai-end %] +[% endraw %] +``` + +[% osr-ai model:"gpt-4o" cache:false gui:true logLevel:"warn" filters:"code,trim" dst:"${SRC_DIR}/${SRC_NAME}.svg" %] + Create a 4 balls, rotating around the outside of a cube, as SVG + - no comments + - scale it to 400x400px + - add another ball bouncing against the inside walls of the cube +[% osr-ai-end %] + + +### Create an animated solar system +```js +[% raw %] +[% osr-ai model:"gpt-4o" cache:false gui:true logLevel:"warn" filters:"code,trim" dst:"${SRC_DIR}/${SRC_NAME}-solar.svg" %] + Simluate the solar system, as SVG + - Each planet should open the link to Wikipedia. + - all planets rotate around the sun (center), animated, slow, add a thin line for the orbit + - compact the code, no comments + - make it all fit to 600x600px + All as SVG, no comments +[% osr-ai-end %] +[% endraw %] +``` + + +[% osr-ai model:"gpt-4o" cache:false gui:true logLevel:"warn" filters:"code,trim" dst:"${SRC_DIR}/${SRC_NAME}-solar.svg" %] + Simluate the solar system, as SVG + - Each planet should open the link to Wikipedia. + - all planets rotate around the sun (center), animated, slow, add a thin line for the orbit + - make sure all planets are visible + - compact the code, no comments + - use a dark background + - make it all fit to 600x600px canvas, with a black border + All as SVG, no comments +[% osr-ai-end %] diff --git a/packages/osrl/tests/docs/sample_ai_svg.svg b/packages/osrl/tests/docs/sample_ai_svg.svg new file mode 100644 index 00000000..ab67fd83 --- /dev/null +++ b/packages/osrl/tests/docs/sample_ai_svg.svg @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/packages/osrl/tests/fm.html b/packages/osrl/tests/fm.html new file mode 100644 index 00000000..eb1d3d13 --- /dev/null +++ b/packages/osrl/tests/fm.html @@ -0,0 +1,14 @@ +--- +title_i18n: "[[product.name]]" +bg_image_webp: "images/backgrounds/page-title.webp" +bg_image: "images/backgrounds/page-title.jpg" +image_webp: "images/products/extruders/bg.jpg" +image: "images/products/extruders/bg.jpg" +author: "PlasticHub" +description: [[config.vendor_name]] +category: "Plastic_Extrusion_Machines" +client: "Universities and R&D services" +prices: "1800 - 12002 Euro" +built: "2023" +debug: true +--- diff --git a/packages/osrl/tests/osr-ai/countries-list.md b/packages/osrl/tests/osr-ai/countries-list.md new file mode 100644 index 00000000..dddfc25d --- /dev/null +++ b/packages/osrl/tests/osr-ai/countries-list.md @@ -0,0 +1,32 @@ +[ + { + "country": "Brazil", + "capital": "Brasília", + "population": 213993437, + "continent": "South America" + }, + { + "country": "Japan", + "capital": "Tokyo", + "population": 125836021, + "continent": "Asia" + }, + { + "country": "Nigeria", + "capital": "Abuja", + "population": 216746934, + "continent": "Africa" + }, + { + "country": "Germany", + "capital": "Berlin", + "population": 83240525, + "continent": "Europe" + }, + { + "country": "Australia", + "capital": "Canberra", + "population": 26130634, + "continent": "Oceania" + } +] \ No newline at end of file diff --git a/packages/osrl/tests/osr-ai/countries-test.json b/packages/osrl/tests/osr-ai/countries-test.json new file mode 100644 index 00000000..9e39ecd3 --- /dev/null +++ b/packages/osrl/tests/osr-ai/countries-test.json @@ -0,0 +1,27 @@ +[ + { + "country": "Brazil", + "capital": "Brasília", + "population": 213993437 + }, + { + "country": "Japan", + "capital": "Tokyo", + "population": 125836021 + }, + { + "country": "Nigeria", + "capital": "Abuja", + "population": 216746934 + }, + { + "country": "Germany", + "capital": "Berlin", + "population": 83240525 + }, + { + "country": "Australia", + "capital": "Canberra", + "population": 26130634 + } +] diff --git a/packages/osrl/tests/osr-ai/countries.json b/packages/osrl/tests/osr-ai/countries.json new file mode 100644 index 00000000..9e39ecd3 --- /dev/null +++ b/packages/osrl/tests/osr-ai/countries.json @@ -0,0 +1,27 @@ +[ + { + "country": "Brazil", + "capital": "Brasília", + "population": 213993437 + }, + { + "country": "Japan", + "capital": "Tokyo", + "population": 125836021 + }, + { + "country": "Nigeria", + "capital": "Abuja", + "population": 216746934 + }, + { + "country": "Germany", + "capital": "Berlin", + "population": 83240525 + }, + { + "country": "Australia", + "capital": "Canberra", + "population": 26130634 + } +] diff --git a/packages/osrl/tests/osr-ai/glands-scad-ex.osrl b/packages/osrl/tests/osr-ai/glands-scad-ex.osrl new file mode 100644 index 00000000..c9f8e6a0 --- /dev/null +++ b/packages/osrl/tests/osr-ai/glands-scad-ex.osrl @@ -0,0 +1,3 @@ +[% osr-ai model:"gpt-4o" cache:false gui:true logLevel:"warn" filters:"code,trim" dst:"${SRC_DIR}/${SRC_NAME}-glands.md" %] + Create a set of metric cable glands, for SCAD +[% osr-ai-end %] diff --git a/packages/osrl/tests/osr-ai/glands-scad-glands.md b/packages/osrl/tests/osr-ai/glands-scad-glands.md new file mode 100644 index 00000000..3a344fbb --- /dev/null +++ b/packages/osrl/tests/osr-ai/glands-scad-glands.md @@ -0,0 +1,54 @@ +// Metric Cable Glands + +module cable_gland(size) { + // Define dimensions based on the size + if (size == "M16") { + gland_diameter = 16; + gland_length = 25; + thread_diameter = 16; + hole_diameter = 9; + nut_thickness = 3; + } else if (size == "M20") { + gland_diameter = 20; + gland_length = 30; + thread_diameter = 20; + hole_diameter = 12; + nut_thickness = 3.5; + } else if (size == "M25") { + gland_diameter = 25; + gland_length = 35; + thread_diameter = 25; + hole_diameter = 15; + nut_thickness = 4; + } else if (size == "M32") { + gland_diameter = 32; + gland_length = 40; + thread_diameter = 32; + hole_diameter = 20; + nut_thickness = 5; + } else { + echo("Unknown size"); + return; + } + + // Gland body + difference() { + cylinder(h = gland_length, d = gland_diameter, $fn=100); + translate([0, 0, -1]) // Small overlap to ensure cut + cylinder(h = gland_length + 2, d = hole_diameter, $fn=100); + } + + // Thread + translate([0, 0, gland_length - nut_thickness]) + cylinder(h = nut_thickness, d = thread_diameter, $fn=100); + + // Nut at the end + translate([0, 0, gland_length - nut_thickness - 5]) + cylinder(h = nut_thickness, d = gland_diameter * 1.2, $fn=6); // 6-sided nut +} + +// Render glands for all sizes +translate([-40, 0, 0]) cable_gland("M16"); +translate([-20, 0, 0]) cable_gland("M20"); +translate([0, 0, 0]) cable_gland("M25"); +translate([20, 0, 0]) cable_gland("M32"); \ No newline at end of file diff --git a/packages/osrl/tests/osr-ai/glands-scad.md b/packages/osrl/tests/osr-ai/glands-scad.md new file mode 100644 index 00000000..3a344fbb --- /dev/null +++ b/packages/osrl/tests/osr-ai/glands-scad.md @@ -0,0 +1,54 @@ +// Metric Cable Glands + +module cable_gland(size) { + // Define dimensions based on the size + if (size == "M16") { + gland_diameter = 16; + gland_length = 25; + thread_diameter = 16; + hole_diameter = 9; + nut_thickness = 3; + } else if (size == "M20") { + gland_diameter = 20; + gland_length = 30; + thread_diameter = 20; + hole_diameter = 12; + nut_thickness = 3.5; + } else if (size == "M25") { + gland_diameter = 25; + gland_length = 35; + thread_diameter = 25; + hole_diameter = 15; + nut_thickness = 4; + } else if (size == "M32") { + gland_diameter = 32; + gland_length = 40; + thread_diameter = 32; + hole_diameter = 20; + nut_thickness = 5; + } else { + echo("Unknown size"); + return; + } + + // Gland body + difference() { + cylinder(h = gland_length, d = gland_diameter, $fn=100); + translate([0, 0, -1]) // Small overlap to ensure cut + cylinder(h = gland_length + 2, d = hole_diameter, $fn=100); + } + + // Thread + translate([0, 0, gland_length - nut_thickness]) + cylinder(h = nut_thickness, d = thread_diameter, $fn=100); + + // Nut at the end + translate([0, 0, gland_length - nut_thickness - 5]) + cylinder(h = nut_thickness, d = gland_diameter * 1.2, $fn=6); // 6-sided nut +} + +// Render glands for all sizes +translate([-40, 0, 0]) cable_gland("M16"); +translate([-20, 0, 0]) cable_gland("M20"); +translate([0, 0, 0]) cable_gland("M25"); +translate([20, 0, 0]) cable_gland("M32"); \ No newline at end of file diff --git a/packages/osrl/tests/osr-ai/glands-scad.osrl b/packages/osrl/tests/osr-ai/glands-scad.osrl new file mode 100644 index 00000000..c9f8e6a0 --- /dev/null +++ b/packages/osrl/tests/osr-ai/glands-scad.osrl @@ -0,0 +1,3 @@ +[% osr-ai model:"gpt-4o" cache:false gui:true logLevel:"warn" filters:"code,trim" dst:"${SRC_DIR}/${SRC_NAME}-glands.md" %] + Create a set of metric cable glands, for SCAD +[% osr-ai-end %] diff --git a/packages/osrl/tests/osr-ai/html-attributes.md b/packages/osrl/tests/osr-ai/html-attributes.md new file mode 100644 index 00000000..6cf9337c --- /dev/null +++ b/packages/osrl/tests/osr-ai/html-attributes.md @@ -0,0 +1,3 @@ + + +null \ No newline at end of file diff --git a/packages/osrl/tests/osr-ai/html-attributes.osrl b/packages/osrl/tests/osr-ai/html-attributes.osrl new file mode 100644 index 00000000..b1875804 --- /dev/null +++ b/packages/osrl/tests/osr-ai/html-attributes.osrl @@ -0,0 +1,87 @@ + + + + + + + \ No newline at end of file diff --git a/packages/osrl/tests/osr-ai/open-ai-test-glands-table-glands.md b/packages/osrl/tests/osr-ai/open-ai-test-glands-table-glands.md new file mode 100644 index 00000000..c0c6f0ca --- /dev/null +++ b/packages/osrl/tests/osr-ai/open-ai-test-glands-table-glands.md @@ -0,0 +1,14 @@ +Certainly! Here is a markdown table of some common cable gland dimensions: + +| Type | Outer Diameter of Nut (mm) | Height (mm) | Matching Wire Gauge (AWG) | Matching Wire Diameter Range (mm) | Bore/Drill Hole Diameter (mm) | +|------|-----------------------------|-------------|----------------------------|-----------------------------------|-------------------------------| +| PG7 | 17 | 21 | 24-22 | 0.51-0.64 | 12.5 | +| PG9 | 21 | 23 | 22-20 | 0.64-0.81 | 15.2 | +| PG11 | 24 | 25 | 20-18 | 0.81-1.02 | 18 | +| PG13.5| 27 | 27 | 18-16 | 1.02-1.29 | 20 | +| PG16 | 30 | 30 | 16-14 | 1.29-1.63 | 22.5 | +| PG21 | 36 | 32 | 14-12 | 1.63-2.05 | 28.3 | +| PG29 | 47 | 37 | 12-10 | 2.05-2.59 | 37 | +| PG36 | 59 | 39 | 10-8 | 2.59-3.26 | 47 | + +Please note that the dimensions can slightly vary depending on the manufacturer. The above table should be used as a general reference. \ No newline at end of file diff --git a/packages/osrl/tests/osr-ai/open-ai-test-glands-table.md b/packages/osrl/tests/osr-ai/open-ai-test-glands-table.md new file mode 100644 index 00000000..c0c6f0ca --- /dev/null +++ b/packages/osrl/tests/osr-ai/open-ai-test-glands-table.md @@ -0,0 +1,14 @@ +Certainly! Here is a markdown table of some common cable gland dimensions: + +| Type | Outer Diameter of Nut (mm) | Height (mm) | Matching Wire Gauge (AWG) | Matching Wire Diameter Range (mm) | Bore/Drill Hole Diameter (mm) | +|------|-----------------------------|-------------|----------------------------|-----------------------------------|-------------------------------| +| PG7 | 17 | 21 | 24-22 | 0.51-0.64 | 12.5 | +| PG9 | 21 | 23 | 22-20 | 0.64-0.81 | 15.2 | +| PG11 | 24 | 25 | 20-18 | 0.81-1.02 | 18 | +| PG13.5| 27 | 27 | 18-16 | 1.02-1.29 | 20 | +| PG16 | 30 | 30 | 16-14 | 1.29-1.63 | 22.5 | +| PG21 | 36 | 32 | 14-12 | 1.63-2.05 | 28.3 | +| PG29 | 47 | 37 | 12-10 | 2.05-2.59 | 37 | +| PG36 | 59 | 39 | 10-8 | 2.59-3.26 | 47 | + +Please note that the dimensions can slightly vary depending on the manufacturer. The above table should be used as a general reference. \ No newline at end of file diff --git a/packages/osrl/tests/osr-ai/open-ai-test-glands-table.md.json b/packages/osrl/tests/osr-ai/open-ai-test-glands-table.md.json new file mode 100644 index 00000000..a4fd4b13 --- /dev/null +++ b/packages/osrl/tests/osr-ai/open-ai-test-glands-table.md.json @@ -0,0 +1,3 @@ +{ + "includes": [] +} \ No newline at end of file diff --git a/packages/osrl/tests/osr-ai/open-ai-test-glands-table.osrl b/packages/osrl/tests/osr-ai/open-ai-test-glands-table.osrl new file mode 100644 index 00000000..0404bc85 --- /dev/null +++ b/packages/osrl/tests/osr-ai/open-ai-test-glands-table.osrl @@ -0,0 +1,11 @@ +[% osr-ai model:"gpt-4o" cache:false gui:true logLevel:"warn" filters:"code,trim" dst:"${SRC_DIR}/${SRC_NAME}-glands.md" %] + + Create a markdown table of cable gland dimensions + - type, eg: PG11, ... + - outer diameter of the nut + - height + - matching wire gauge, AWG + - matching wire diameter range, in mm + - bore/drill hole diameter + +[% osr-ai-end %] diff --git a/packages/osrl/tests/osr-ai/open-ai-test-svg-balls.html b/packages/osrl/tests/osr-ai/open-ai-test-svg-balls.html new file mode 100644 index 00000000..af9df177 --- /dev/null +++ b/packages/osrl/tests/osr-ai/open-ai-test-svg-balls.html @@ -0,0 +1,42 @@ + + + + + + + + + \ No newline at end of file diff --git a/packages/osrl/tests/osr-ai/open-ai-test-svg-balls.md b/packages/osrl/tests/osr-ai/open-ai-test-svg-balls.md new file mode 100644 index 00000000..b9010163 --- /dev/null +++ b/packages/osrl/tests/osr-ai/open-ai-test-svg-balls.md @@ -0,0 +1,7 @@ +[%capture balls %] + +[% endcapture %] + +[% osr-ai model:"gpt-4o" cache:false gui:true logLevel:"warn" filters:"code" %] + Create a 4 balls, rotating around a cube, as SVG - no comments +[% osr-ai-end %] diff --git a/packages/osrl/tests/osr-ai/open-ai-test-svg-bolts.html b/packages/osrl/tests/osr-ai/open-ai-test-svg-bolts.html new file mode 100644 index 00000000..bea79421 --- /dev/null +++ b/packages/osrl/tests/osr-ai/open-ai-test-svg-bolts.html @@ -0,0 +1,75 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1. Engine Block + 2. Cylinder Head Bolts + 3. Left Side Bolts + + + + + + + + + + + + + + \ No newline at end of file diff --git a/packages/osrl/tests/osr-ai/open-ai-test-svg-bolts.md b/packages/osrl/tests/osr-ai/open-ai-test-svg-bolts.md new file mode 100644 index 00000000..b55482e1 --- /dev/null +++ b/packages/osrl/tests/osr-ai/open-ai-test-svg-bolts.md @@ -0,0 +1,15 @@ +[%capture balls %] +[% endcapture %] +[[balls]] + +[% osr-ai model:"gpt-4o" cache:false gui:true logLevel:"warn" filters:"code" %] + Create a technical illustration, as SVG + - showing 10 bolts to be screwed into a engine block, animated + - 5 bolts go into the left side + - the other 5 bolts into the cylinder heads + - animate, use shadows + - create a legend for the parts + - there's a sexy teacher in the background, with a slap stick + - make sure it fits all in the screen + All as SVG, no comments +[% osr-ai-end %] diff --git a/packages/osrl/tests/osr-ai/open-ai-test-svg-solarsystem.html b/packages/osrl/tests/osr-ai/open-ai-test-svg-solarsystem.html new file mode 100644 index 00000000..deab7876 --- /dev/null +++ b/packages/osrl/tests/osr-ai/open-ai-test-svg-solarsystem.html @@ -0,0 +1,91 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Sun: Diameter = 1.39 million km, Mass = 1.989 × 10^30 kg, Age = ~4.6 billion years + Mercury: Diameter = 4,880 km, Mass = 3.285 × 10^23 kg, Age = ~4.5 billion years + Venus: Diameter = 12,104 km, Mass = 4.867 × 10^24 kg, Age = ~4.5 billion years + Earth: Diameter = 12,742 km, Mass = 5.972 × 10^24 kg, Age = ~4.5 billion years + Mars: Diameter = 6,779 km, Mass = 6.39 × 10^23 kg, Age = ~4.5 billion years + Jupiter: Diameter = 139,820 km, Mass = 1.898 × 10^27 kg, Age = ~4.5 billion years + Saturn: Diameter = 116,460 km, Mass = 5.683 × 10^26 kg, Age = ~4.5 billion years + Uranus: Diameter = 50,724 km, Mass = 8.681 × 10^25 kg, Age = ~4.5 billion years + Neptune: Diameter = 49,244 km, Mass = 1.024 × 10^26 kg, Age = ~4.5 billion years + + \ No newline at end of file diff --git a/packages/osrl/tests/osr-ai/open-ai-test-svg-solarsystem.md b/packages/osrl/tests/osr-ai/open-ai-test-svg-solarsystem.md new file mode 100644 index 00000000..a5e2659b --- /dev/null +++ b/packages/osrl/tests/osr-ai/open-ai-test-svg-solarsystem.md @@ -0,0 +1,13 @@ +[% osr-ai model:"gpt-4o" cache:false gui:false logLevel:"warn" filters:"code" %] + + Simluate the solar system, as SVG + - Each planet should open the link to Wikipedia. + - all planets rotate around the sun (center), animated, slow, add a thin line for the orbit + - add textures + - the background is black, covered with at least 100 stars + - make sure all planets are visible + - Add a legend with basic information : size, weight, age, make sure it fits in the screen + +All as SVG, no comments + +[% osr-ai-end %] diff --git a/packages/osrl/tests/osr-ai/open-ai-test-svg-solarsystem.svg b/packages/osrl/tests/osr-ai/open-ai-test-svg-solarsystem.svg new file mode 100644 index 00000000..f80675dd --- /dev/null +++ b/packages/osrl/tests/osr-ai/open-ai-test-svg-solarsystem.svg @@ -0,0 +1,83 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Legend + Mercury: size - 4, weight - 3.3x10^23 kg, age - 4.5 billion years + Venus: size - 9, weight - 4.87x10^24 kg, age - 4.5 billion years + Earth: size - 10, weight - 5.97x10^24 kg, age - 4.5 billion years + Mars: size - 5, weight - 6.42x10^23 kg, age - 4.5 billion years + Jupiter: size - 20, weight - 1.9x10^27 kg, age - 4.5 billion years + Saturn: size - 17, weight - 5.68x10^26 kg, age - 4.5 billion years + Uranus: size - 14, weight - 8.68x10^25 kg, age - 4.5 billion years + Neptune: size - 14, weight - 1.02x10^26 kg, age - 4.5 billion years + \ No newline at end of file diff --git a/packages/osrl/tests/osr-ai/open-ai-test-svg-solarsystem_snap0.html b/packages/osrl/tests/osr-ai/open-ai-test-svg-solarsystem_snap0.html new file mode 100644 index 00000000..f80675dd --- /dev/null +++ b/packages/osrl/tests/osr-ai/open-ai-test-svg-solarsystem_snap0.html @@ -0,0 +1,83 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Legend + Mercury: size - 4, weight - 3.3x10^23 kg, age - 4.5 billion years + Venus: size - 9, weight - 4.87x10^24 kg, age - 4.5 billion years + Earth: size - 10, weight - 5.97x10^24 kg, age - 4.5 billion years + Mars: size - 5, weight - 6.42x10^23 kg, age - 4.5 billion years + Jupiter: size - 20, weight - 1.9x10^27 kg, age - 4.5 billion years + Saturn: size - 17, weight - 5.68x10^26 kg, age - 4.5 billion years + Uranus: size - 14, weight - 8.68x10^25 kg, age - 4.5 billion years + Neptune: size - 14, weight - 1.02x10^26 kg, age - 4.5 billion years + \ No newline at end of file diff --git a/packages/osrl/tests/osr-ai/open-ai-test.md b/packages/osrl/tests/osr-ai/open-ai-test.md new file mode 100644 index 00000000..cf8d93e6 --- /dev/null +++ b/packages/osrl/tests/osr-ai/open-ai-test.md @@ -0,0 +1,74 @@ +[%capture continents %] +[% osr-ai assign:"list" model:"gpt-4o" cache:false gui:false logLevel:"trace" filters:"code" dst:"${SRC_DIR}/countries-list.json" source:"${SRC_DIR}/countries.json" %] +Complete all countries with continents +[% osr-ai-end %] +[% endcapture %] + +```json +[[continents]] +``` + +## Continents + +[% osr-ai model:"gpt-4o" cache:true gui:true logLevel:"warn" filters:"code" %] +List all continents (including russia), as markdown table, columns : +- population +- total gdp +- at war or involved in war +- religion +- number of US bases +- debts +[% osr-ai-end %] + +## Africa + +[% osr-ai model:"gpt-4o" cache:true gui:true logLevel:"warn" filters:"code" %] +List all countries in Africa, as markdown table, columns : + +- population +- total gdp +- at war or involved in war +- religion +- number of US bases +- debts +- link to databases, wikipedia, .. +[% osr-ai-end %] + +## Europe + +[% osr-ai model:"gpt-4o" cache:true gui:true logLevel:"warn" filters:"code" %] +List all countries in Europe, as markdown table, columns: + +- population +- total gdp +- at war or involved in war +- religion +- political orientation +- number of US bases +- debts +- cost of living +- spoken languages + +Do only enter accurate and complete data + +[% osr-ai-end %] + +## Spain + +[% osr-ai model:"gpt-4o" cache:true gui:true logLevel:"warn" filters:"code" %] + +List all cities in Spain, as markdown table, columns: + +- population +- total gdp +- religion +- political preference (party) +- cost of living +- spoken languages +- link to google maps +- exported products + +Do only enter accurate and complete data + +[% osr-ai-end %] + diff --git a/packages/osrl/tests/osr-ai/open-ai-test.out.md b/packages/osrl/tests/osr-ai/open-ai-test.out.md new file mode 100644 index 00000000..57e38d8f --- /dev/null +++ b/packages/osrl/tests/osr-ai/open-ai-test.out.md @@ -0,0 +1,125 @@ +```json + +[ + { + "country": "Brazil", + "capital": "Brasília", + "population": 213993437, + "continent": "South America" + }, + { + "country": "Japan", + "capital": "Tokyo", + "population": 125836021, + "continent": "Asia" + }, + { + "country": "Nigeria", + "capital": "Abuja", + "population": 216746934, + "continent": "Africa" + }, + { + "country": "Germany", + "capital": "Berlin", + "population": 83240525, + "continent": "Europe" + }, + { + "country": "Australia", + "capital": "Canberra", + "population": 26130634, + "continent": "Oceania" + } +] + +``` + +## Continents + +| Continent | Population (2023 est.) | Total GDP (nominal, 2023 est.) | At War or Involved in War | Major Religions | Number of US Bases | Debts (External) | +| -------------- | ---------------------- | ------------------------------ | ------------------------- | --------------------------------- | ------------------ | ---------------------------- | +| Africa | ~1.4 billion | ~$2.6 trillion | Several, including Libya, Somalia | Islam, Christianity | Limited | Varies by country | +| Asia | ~4.7 billion | ~$35 trillion | Several, including Yemen, Syria | Islam, Hinduism, Buddhism, Christianity | Numerous (Japan, S. Korea, etc.) | Varies by country | +| Europe | ~746 million | ~$23 trillion | Ukraine-Russia conflict | Christianity, Secularism | Numerous (Germany, Italy, etc.) | Varies by country | +| North America | ~596 million | ~$26 trillion | No major conflicts | Christianity, Secularism | Numerous (USA, Canada, etc.) | Varies by country | +| South America | ~437 million | ~$3.3 trillion | No major conflicts | Christianity | Limited | Varies by country | +| Antarctica | ~1,000 (non-permanent) | N/A | No | Secular (scientific research crews) | None | N/A | +| Australia | ~26 million | ~$1.54 trillion | No | Christianity, Secularism | Limited | Varies by country | +| Russia (Asia + Europe) | ~146 million | ~$1.6 trillion (nominal) | Yes (Ukraine conflict) | Christianity (Orthodox), Secularism | Numerous | External Debt: ~$470 billion | + +## Africa + +| Country | Population | Total GDP (USD) | At War/Involved in War | Major Religion(s) | US Military Bases | Debts (USD) | Links | +|----------------|--------------|-----------------|------------------------|---------------------|-------------------|---------------|--------------------------------------------| +| Algeria | 44 million | 167 billion | No | Islam | 0 | 65 billion | [Wikipedia](https://en.wikipedia.org/wiki/Algeria) | +| Egypt | 104 million | 404 billion | No | Islam | 1 | 125 billion | [Wikipedia](https://en.wikipedia.org/wiki/Egypt) | +| Ethiopia | 115 million | 96 billion | Yes (conflict) | Christianity, Islam | 0 | 42 billion | [Wikipedia](https://en.wikipedia.org/wiki/Ethiopia) | +| Kenya | 55 million | 102 billion | No | Christianity | 1 | 70 billion | [Wikipedia](https://en.wikipedia.org/wiki/Kenya) | +| Nigeria | 206 million | 440 billion | Yes (conflict) | Christianity, Islam | 0 | 95 billion | [Wikipedia](https://en.wikipedia.org/wiki/Nigeria) | +| South Africa | 60 million | 385 billion | No | Christianity | 1 | 225 billion | [Wikipedia](https://en.wikipedia.org/wiki/South_Africa) | +| Sudan | 45 million | 31 billion | Yes (conflict) | Islam | 0 | 60 billion | [Wikipedia](https://en.wikipedia.org/wiki/Sudan) | +| Tanzania | 61 million | 64 billion | No | Christianity, Islam | 0 | 37 billion | [Wikipedia](https://en.wikipedia.org/wiki/Tanzania) | +| Uganda | 46 million | 40 billion | No | Christianity | 0 | 18 billion | [Wikipedia](https://en.wikipedia.org/wiki/Uganda) | +| Zimbabwe | 14 million | 19 billion | No | Christianity | 0 | 17 billion | [Wikipedia](https://en.wikipedia.org/wiki/Zimbabwe) | + +## Europe + +Certainly, compiling accurate and complete data for such a table is quite extensive. Here's a simplified version with the latest accessible and generalizable data where possible. Note that for some columns, specific and precise data might not always be available or be subject to change. + +| Country | Population (Approx.) | Total GDP (USD Billion) | At War/Involved in War | Religion (Major) | Political Orientation | Number of US Bases | Debts (% of GDP) | Cost of Living Index* | Spoken Languages | +|------------------|----------------------|-----------------------|------------------------|--------------------------|-----------------------|--------------------|------------------|-----------------------|-------------------------| +| Albania | 2.87 million | 15.28 | No | Islam | Parliamentary Republic| 0 | 66.7 | 38.2 | Albanian | +| Andorra | 77,000 | 3.15 | No | Christianity | Parliamentary Co-Principality | 0 | No public debt | 78.7 | Catalan | +| Austria | 8.90 million | 445.82 | No | Christianity | Federal Parliamentary Republic | 1 | 70.3 | 72.0 | German | +| Belarus | 9.45 million | 63.08 | No, but involved with Russia-Ukraine conflict | Christianity | Presidential Republic | 0 | 29.1 | 30.9 | Belarusian, Russian | +| Belgium | 11.56 million | 533.10 | No | Christianity | Federal Parliamentary Constitutional Monarchy | 1 | 98.7 | 74.0 | Dutch, French, German | +| Bosnia & Herzegovina | 3.28 million | 19.78 | No | Islam, Christianity | Parliamentary Republic | 0 | 32.8 | 38.0 | Bosnian, Croatian, Serbian | +| Bulgaria | 6.95 million | 77.64 | No | Christianity | Parliamentary Republic | 4 | 23.3 | 36.7 | Bulgarian | +| Croatia | 4.05 million | 64.92 | No | Christianity | Parliamentary Republic | 0 | 80.7 | 46.6 | Croatian | +| Cyprus | 1.21 million | 24.69 | No | Christianity | Presidential Republic | 2 | 94.2 | 65.9 | Greek, Turkish | +| Czech Republic | 10.70 million | 281.90 | No | Christianity, Atheism | Parliamentary Republic | 0 | 33.6 | 48.0 | Czech | +| Denmark | 5.81 million | 397.10 | No | Christianity | Parliamentary Constitutional Monarchy | 0 | 33.7 | 83.0 | Danish | +| Estonia | 1.33 million | 38.50 | No | Christianity, Atheism | Parliamentary Republic | 0 | 8.4 | 55.1 | Estonian | +| Finland | 5.53 million | 271.20 | No | Christianity | Parliamentary Republic | 0 | 44.4 | 69.3 | Finnish, Swedish | +| France | 67.39 million | 2,707.07 | No | Christianity, Secularism | Semi-Presidential Republic | 11 | 98.1 | 74.0 | French | +| Germany | 83.02 million | 4,743.30 | No | Christianity, Atheism | Federal Parliamentary Republic | 21 | 59.8 | 65.8 | German | +| Greece | 10.42 million | 209.85 | No | Christianity | Parliamentary Republic | 4 | 206.3 | 60.5 | Greek | +| Hungary | 9.63 million | 147.10 | No | Christianity | Parliamentary Republic | 0 | 76.6 | 43.5 | Hungarian | +| Iceland | 0.36 million | 24.93 | No | Christianity | Parliamentary Republic | 0 | 75.2 | 99.3 | Icelandic | +| Ireland | 4.98 million | 476.70 | No | Christianity | Parliamentary Republic | 0 | 58.4 | 77.4 | English, Irish | +| Italy | 60.36 million | 2,106.50 | No | Christianity | Parliamentary Republic | 0 | 106.5 | 67.0 | Italian | +| Kosovo | 1.80 million | 7.61 | No | Islam | Parliamentary Republic | 0 | 16.8 | 35.4 | Albanian, Serbian | +| Latvia | 1.87 million | 34.13 | No | Christianity, Atheism | Parliamentary Republic | 1 | 36.9 | 53.1 | Latvian | +| Liechtenstein | 39,000 | 6.19 | No | Christianity | Constitutional Monarchy with Parliamentary System | 0 | No public debt | 91.9 | German | +| Lithuania | 2.79 million | 63.21 | No | Christianity | Parliamentary Republic | 0 | 36.3 | 48.5 | Lithuanian | +| Luxembourg | 0.63 million | 80.28 | No | Christianity | Parliamentary Constitutional Monarchy | 0 | 13.5 | 84.0 | Luxembourgish, French, German | +| Malta | 0.51 million | 17.52 | No | Christianity | Parliamentary Republic | 0 | 65.5 | 58.1 | Maltese, English | +| Moldova | 2.65 million | 11.07 | No | Christianity | Parliamentary Republic | 0 | 23.8 | 28.7 | Romanian | +| Monaco | 0.04 million | 8.68 | No | Christianity | Constitutional Monarchy | 0 | No public debt | 100.0 | French | +| Montenegro | 0.62 million | 4.64 | No | Christianity | Parliamentary Republic | 0 | 65.4 | 36.7 | Montenegrin | +| Netherlands | 17.45 million | 1,015.00 | No | Christianity, Secularism | Parliamentary Constitutional Monarchy | 5 | 52.1 | 74.3 | Dutch | +| North Macedonia | 2.08 million | 12.92 | No | Christianity | Parliamentary Republic | 0 | 51.4 | 32.2 | Macedonian | +| Norway | 5.42 million | 475.40 | No | Christianity | Parliamentary Constitutional Monarchy | 0 | 54.2 | 101.3 | Norwegian | +| Poland | 37.95 million | 676.25 | No | Christianity | Parliamentary Republic | 1 | 60.7 | 46.3 | Polish | +| Portugal | 10.31 million | 243.79 | No | Christianity | Parliamentary Republic | 0 | 130.8 | 51.0 | Portuguese | +| Romania | 19.05 million | 284.08 | No | Christianity | Parliamentary Republic | 0 | 48.1 | 40.6 | Romanian | +| Russia | 143.90 million | 1,483.50 | Yes | Christianity, Islam | Federal Semi-Presidential Republic | 20 | 18.3 | 30.7 | Russian | +| San Marino | 0.03 million | 1.64 | No | Christianity | Parliamentary Republic | 0 | No public debt | 100.0 | Italian | +| Serbia | 6.70 million | 52.96 | No | Christianity | Parliamentary Republic | 1 | 59.6 | 30.7 | Serbian | +| Slovakia | 5.45 million | 117.13 | No | Christianity | Parliamentary Republic | 1 | 48.07 | 44.3 | Slovak | +| Slovenia | 2.10 million | 66.82 | No | Christianity | Parliamentary Republic | 0 | 66.1 | 52.8 | Slovenian | +| Spain | 47.33 million | 1,597.10 | No | Christianity | Parliamentary Constitutional Monarchy | 2 | 118.4 | 54.5 | Spanish | +| Sweden | 10.35 million | 635.68 | No | Christianity, Atheism | Parliamentary Constitutional Monarchy | 0 | 40.9 | 74.5 | Swedish | +| Switzerland | 8.57 million | 824.74 | No | Christianity, Atheism | Federal Semi-Direct Democracy | 1 | 41.1 | 122.4 | German, French, Italian, Romansh | +| Ukraine | 41.17 million | 147.60 | Yes | Christianity | Semi-Presidential Republic | 0 | 61.2 | 25.9 | Ukrainian | +| United Kingdom | 67.22 million | 3,131.12 | No | Christianity, Secularism | Parliamentary Constitutional Monarchy | 15 | 103.6 | 67.1 | English | +| Vatican City | 0.001 million | Not applicable | No | Christianity | Absolute Theocracy | 0 | No public debt | Not applicable | Italian, Latin | + +*Cost of Living Index is an imprecise and subjectively calculated index, often using New York City as a baseline (100). + +## Spain + +| City | Population | Total GDP | Religion | Political Preference (Party) | Cost of Living | Spoken Languages | Link to Google Maps | Exported Products | +|--------|------------|------------------|--------------|------------------------------|----------------|---------------------|--------------------------------------------------------|-----------------------| +| Madrid | 3,223,334 | $258 billion USD | Roman Catholic, others | Spanish Socialist Workers' Party (PSOE), People's Party (PP) | High | Spanish, English | [Google Maps](https://goo.gl/maps/8UL9Z4f5orS2) | Automobiles, Pharmaceuticals, Machinery, Food and Beverages | \ No newline at end of file diff --git a/packages/osrl/tests/osr-ai/osr-search/leads-0-json.sh b/packages/osrl/tests/osr-ai/osr-search/leads-0-json.sh new file mode 100644 index 00000000..d2bfc672 --- /dev/null +++ b/packages/osrl/tests/osr-ai/osr-search/leads-0-json.sh @@ -0,0 +1 @@ +osr-ai prompt --cache=false --filters=code --logLevel=debug --query="Convert to json, replace commas with dashes" --source="./leads-0.md" --gui=false --dst="./leads-0.json" \ No newline at end of file diff --git a/packages/osrl/tests/osr-ai/osr-search/leads-0-sentmenat.json b/packages/osrl/tests/osr-ai/osr-search/leads-0-sentmenat.json new file mode 100644 index 00000000..7a9e3a21 --- /dev/null +++ b/packages/osrl/tests/osr-ai/osr-search/leads-0-sentmenat.json @@ -0,0 +1,22 @@ +[ + "Polígono Industrial Can Vinyals", + "Polígono Industrial Can Canyameres", + "Polígono Industrial Can Roqueta", + "Polígono Industrial Can Jardí", + "Polígono Industrial Ca n’Ametller", + "Polígono Industrial Santiga", + "Polígono Industrial La Clota", + "Polígono Industrial Can Torrella", + "Polígono Industrial Polizur", + "Polígono Industrial Santiga Sud", + "Polígono Industrial Els Dolors", + "Polígono Industrial Can Magre", + "Polígono Industrial Llevant", + "Polígono Industrial Sud-Est", + "Polígono Industrial Can Mir", + "Polígono Industrial La Romànica", + "Polígono Industrial El Congost", + "Polígono Industrial Pla de la Bruguera", + "Polígono Industrial Riu d'Or", + "Polígono Industrial El Bruguer" +] \ No newline at end of file diff --git a/packages/osrl/tests/osr-ai/osr-search/leads-0.csv b/packages/osrl/tests/osr-ai/osr-search/leads-0.csv new file mode 100644 index 00000000..70e1be5f --- /dev/null +++ b/packages/osrl/tests/osr-ai/osr-search/leads-0.csv @@ -0,0 +1,23 @@ + + +Name,Google Maps Link,Wikipedia Link,Size of Population,Type of Industries,Next Major City / Town,Distance to Sentmenat (Spain- Barcelona) (in kilometers) +Polígono Industrial Can Vinyals,https://www.google.com/maps/place/Pol%C3%ADgono+Industrial+Can+Vinyals,+08181+Sentmenat,+Barcelona,+Spain,https://es.wikipedia.org/wiki/Sentmenat,Information not readily available,Various manufacturing and logistics companies,Sentmenat,3 +Polígono Industrial Can Canyameres,https://www.google.com/maps?q=Pol%C3%ADgono+Industrial+Can+Canyameres,+Barcelona,+Spain,https://es.wikipedia.org/wiki/Pol%C3%ADgono_Industrial_Can_Canyameres,Not typically applicable as it is an industrial area.,Manufacturing- logistics- automotive- electronics,Sabadell,9 +Polígono Industrial Can Roqueta,https://maps.google.com/?q=Polígono+Industrial+Can+Roqueta,+Barcelona,+Spain,https://es.wikipedia.org/wiki/Sabadell,Not applicable (industrial area),Manufacturing- logistics- and technology companies,Sabadell,9 +Polígono Industrial Can Jardí,https://www.google.com/maps/place/Pol%C3%ADgono+Industrial+Can+Jard%C3%AD,+Barcelona,+Spain,https://ca.wikipedia.org/wiki/Pol%C3%ADgon_industrial_de_Can_Jard%C3%AD,Information not commonly available for industrial zones,Technology- manufacturing- logistics,Rubí (Barcelona),27 +Polígono Industrial Ca n’Ametller,https://www.google.com/maps/place/Pol%C3%ADgono+Industrial+Ca+n%E2%80%99Ametller,+08195+Sant+Cugat+del+Vall%C3%A8s,+Barcelona,+Spain,https://es.wikipedia.org/wiki/Sant_Cugat_del_Vall%C3%A8s,Not specifically available for the industrial polygon- but Sant Cugat del Vallès has about 90-000 inhabitants as of the latest census.,Includes technology firms- logistics companies- manufacturing businesses- and various service providers.,Sant Cugat del Vallès,30 +Polígono Industrial Santiga,https://www.google.com/maps/place/Pol%C3%ADgono+Industrial+Santiga/@41.5385-2.1779-15z/data=!4m6!3m5!1s0x12a49fcd8e74d8b7:0x2811246b612fadda!4b1!8m2!3d41.5368171!4d2.1729497,https://es.wikipedia.org/wiki/Pol%C3%ADgono_Industrial_Santiga,Approx. 0 (mainly industrial- no residential population),Manufacturing- logistics- distribution- automotive- electronics,Barberà del Vallès and Sabadell,17 +Polígono Industrial La Clota,https://www.google.com/maps/place/Pol%C3%ADgono+Industrial+La+Clota,+08184,+Barcelona,+Spain,N/A,Data not specifically available for the industrial park,Manufacturing- Logistics- Automotive,Barcelona,3 +Polígono Industrial Can Torrella,https://www.google.com/maps/search/Pol%C3%ADgono+Industria+Can+Torrella/@41.624709-2.1343518-15z,https://es.wikipedia.org/wiki/Sentmenat,Not specifically documented (Polígono Industrial information typically does not include population data as they are primarily industrial areas),Various light and heavy industries including manufacturing- logistics- and distribution centers,Sabadell,2 +Polígono Industrial Polizur,https://www.google.com/maps/place/Pol%C3%ADgono+Industrial+Polizur,+Barcelona,+Spain,https://es.wikipedia.org/wiki/Pol%C3%ADgono_industrial,Information not typically available for industrial zones,Various (logistics- manufacturing- technology),Sentmenat,3 +Polígono Industrial Santiga Sud,https://www.google.com/maps/place/Pol%C3%ADgono+Industrial+Santiga+Sud,+Barcelona,+Spain,https://es.wikipedia.org/wiki/Pol%C3%ADgono_Industrial_Santiga_Sud,Not specifically applicable since it's an industrial area.,Manufacturing- Logistics- Automotive- Food Processing- and Warehousing.,Barberà del Vallès,15 +Polígono Industrial Els Dolors,https://www.google.com/maps?q=Pol%C3%ADgono+Industrial+Els+Dolors&um=1&ie=UTF-8&sa=X&ved=2ahUKEwiHkenu2PjzAhWogP0HHQGWCXIQ_AUoAXoECAEQAw,https://es.wikipedia.org/wiki/Pol%C3%ADgono_Industrials,Not typically applicable- as industrial polygons usually consist of workplaces rather than residences.,Various manufacturing- logistics- warehousing- and service industries.,Barcelona,27 +Polígono Industrial Can Magre,https://goo.gl/maps/k6VZc8P1zEqAf8Zg6,https://es.wikipedia.org/wiki/Sentmenat,Not specifically available for Polígono Industrial Can Magre- refer to Sentmenat's population.,Predominantly manufacturing and logistics.,Sabadell,3 +Polígono Industrial Llevant,https://www.google.com/maps/place/Polígono+Industrial+Llevant,+Barcelona,+Spain,https://en.wikipedia.org/wiki/Barcelona,Not directly applicable- as it is an industrial park,Manufacturing- logistics- warehousing- and various service industries,Sabadell,8 +Polígono Industrial Sud-Est,https://www.google.com/maps/place/Pol%C3%ADgono+Industrial+Sud-Est,+Barcelona,+Spain,N/A,Data not available,Various manufacturing- logistics- automotive- and services industries.,Barcelona,15 +Polígono Industrial Can Mir,https://www.google.com/maps?q=Pol%C3%ADgono+Industrial+Can+Mir,+Barcelona,+Spain,https://es.wikipedia.org/wiki/Sentmenat,Information not specifically available- typically associated with the population of Sentmenat,Manufacturing- warehousing- logistics- and light industry,Sabadell,3 +Polígono Industrial La Romànica,https://www.google.com/maps/place/La+Rom%C3%A0nica,+08292+Sabadell,+Barcelona,+Spain/,https://es.wikipedia.org/wiki/Sabadell,Specific population data for Polígono Industrial La Romànica is generally not available. Refer to the population of Sabadell- which is approximately 211-000 as of 2020.,Various- including manufacturing- logistics- and services.,Sabadell,8 +Polígono Industrial El Congost,https://www.google.com/maps/place/Pol%C3%ADgono+Industrial+El+Congost,+Barcelona,+Spain/,https://es.wikipedia.org/wiki/Pol%C3%ADgono_Industrial_El_Congost,N/A (industrial area- not a residential population),Manufacturing- logistics- automotive- technology- and textiles,Granollers,20 +Polígono Industrial Pla de la Bruguera,https://www.google.com/maps/place/Pol%C3%ADgono+Industrial+Pla+de+la+Bruguera,+08211+Castellar+del+Vall%C3%A8s,+Barcelona/@41.6174922,2.084216,15z/,https://es.wikipedia.org/wiki/Castellar_del_Vall%C3%A8s,Approximately 24-451 (as part of Castellar del Vallès- 2021),Manufacturing- Textiles- Automotive- Electronics,Sabadell,7 +Polígono Industrial Riu d'Or,https://www.google.com/maps/place/Pol%C3%ADgono+Industrial+Riu+d'Or,+Barcelona,+Spain,https://es.wikipedia.org/wiki/Pol%C3%ADgono_Industrial_Riu_d'Or,Not Applicable (Industrial Area),Manufacturing- Logistics- Warehousing,Sabadell,10 +Polígono Industrial El Bruguer,https://www.google.com/maps?q=Pol%C3%ADgono+Industrial+El+Bruguer,+Barcelona,+Spain,https://es.wikipedia.org/wiki/Pol%C3%ADgono_Industrial_El_Bruguer,No residential population,Manufacturing- logistics- automotive- warehousing,Barberà del Vallès,14 \ No newline at end of file diff --git a/packages/osrl/tests/osr-ai/osr-search/leads-0.json b/packages/osrl/tests/osr-ai/osr-search/leads-0.json new file mode 100644 index 00000000..07898b9f --- /dev/null +++ b/packages/osrl/tests/osr-ai/osr-search/leads-0.json @@ -0,0 +1,164 @@ + + +{ + "Polígono Industrial Can Vinyals": { + "Link to Google Maps": "https://www.google.com/maps/place/Pol%C3%ADgono+Industrial+Can+Vinyals,+08181+Sentmenat,+Barcelona,+Spain", + "Link to Wikipedia": "https://es.wikipedia.org/wiki/Sentmenat (Note: There may not be a specific Wikipedia page for Can Vinyals; this link directs to the town of Sentmenat)", + "Size of Population": "Information not readily available", + "Type of Industries": "Various manufacturing and logistics companies", + "Next major city / town": "Sentmenat", + "Distance to Sentmenat (Spain- Barcelona)": "Approximately 3 kilometers" + }, + "Polígono Industrial Can Canyameres": { + "Link to Google Maps": "https://www.google.com/maps?q=Pol%C3%ADgono+Industrial+Can+Canyameres,+Barcelona,+Spain", + "Link to Wikipedia": "https://es.wikipedia.org/wiki/Pol%C3%ADgono_Industrial_Can_Canyameres *(Note: If no specific Wikipedia page exists- this will link to the general Wikipedia page for industrial areas in Barcelona)*", + "Size of Population": "Not typically applicable as it is an industrial area.", + "Type of industries": "Manufacturing- logistics- automotive- electronics", + "Next major city/town": "Sabadell", + "Distance to Sentmenat (Spain- Barcelona)": "Approximately 9 kilometers" + }, + "Polígono Industrial Can Roqueta": { + "Link to Google Maps": "https://maps.google.com/?q=Polígono+Industrial+Can+Roqueta,+Barcelona,+Spain", + "Link to Wikipedia": "https://es.wikipedia.org/wiki/Sabadell (Note: Polígono Industrial Can Roqueta is located in Sabadell- and there is no specific Wikipedia page for the industrial park itself)", + "Size of Population": "Not applicable (industrial area)", + "Type of Industries": "Manufacturing- logistics- and technology companies", + "Next major city / town": "Sabadell", + "Distance to Sentmenat (Spain- Barcelona)": "Approximately 9 kilometers" + }, + "Polígono Industrial Can Jardí": { + "Link to Google Maps": "https://www.google.com/maps/place/Pol%C3%ADgono+Industrial+Can+Jard%C3%AD,+Barcelona,+Spain", + "Link to Wikipedia": "https://ca.wikipedia.org/wiki/Pol%C3%ADgon_industrial_de_Can_Jard%C3%AD", + "Size of Population": "Information not commonly available for industrial zones", + "Type of Industries": "Technology- manufacturing- logistics", + "Next major city / town": "Rubí (Barcelona)", + "Distance to Sentmenat (Spain- Barcelona)": "Approximately 27 kilometers" + }, + "Polígono Industrial Ca n’Ametller": { + "Link to Google Maps": "https://www.google.com/maps/place/Pol%C3%ADgono+Industrial+Ca+n%E2%80%99Ametller,+08195+Sant+Cugat+del+Vall%C3%A8s,+Barcelona,+Spain", + "Link to Wikipedia": "https://es.wikipedia.org/wiki/Sant_Cugat_del_Vall%C3%A8s *(page for Sant Cugat del Vallès- the municipality that encompasses Polígono Industrial Ca n’Ametller)*", + "Size of Population": "Not specifically available for the industrial polygon- but Sant Cugat del Vallès has about 90-000 inhabitants as of the latest census.", + "Type of industries": "Includes technology firms- logistics companies- manufacturing businesses- and various service providers.", + "Next major city / town": "Sant Cugat del Vallès", + "Distance to Sentmenat (Spain- Barcelona)": "Approximately 30 kilometers" + }, + "Polígono Industrial Santiga": { + "Link to Google Maps": "https://www.google.com/maps/place/Pol%C3%ADgono+Industrial+Santiga/@41.5385-2.1779-15z/data=!4m6!3m5!1s0x12a49fcd8e74d8b7:0x2811246b612fadda!4b1!8m2!3d41.5368171!4d2.1729497", + "Link to Wikipedia": "https://es.wikipedia.org/wiki/Pol%C3%ADgono_Industrial_Santiga *(Note: This link may need to be created or verified as it may not exist)*", + "Size of Population": "Approx. 0 (mainly industrial- no residential population)", + "Type of industries": "Manufacturing- logistics- distribution- automotive- electronics", + "Next major city / town": "Barberà del Vallès and Sabadell", + "Distance to Sentmenat (Spain- Barcelona)": "Approximately 17 kilometers" + }, + "Polígono Industrial La Clota": { + "Link to Google Maps": "https://www.google.com/maps/place/Pol%C3%ADgono+Industrial+La+Clota,+08184,+Barcelona,+Spain", + "Wikipedia": "(Not available)", + "Size of Population": "Data not specifically available for the industrial park", + "Type of Industries": "Manufacturing- Logistics- Automotive", + "Next major city/town": "Barcelona", + "Distance to Sentmenat (Spain- Barcelona)": "Approximately 3 kilometers" + }, + "Polígono Industrial Can Torrella": { + "Link to Google Maps": "https://www.google.com/maps/search/Pol%C3%ADgono+Industria+Can+Torrella/@41.624709-2.1343518-15z", + "Link to Wikipedia": "https://es.wikipedia.org/wiki/Sentmenat", + "Size of Population": "Not specifically documented (Polígono Industrial information typically does not include population data as they are primarily industrial areas)", + "Type of industries": "Various light and heavy industries including manufacturing- logistics- and distribution centers", + "Next major city / town": "Sabadell", + "Distance to Sentmenat (Spain- Barcelona)": "Approximately 2 kilometers" + }, + "Polígono Industrial Polizur": { + "Link to Google Maps": "https://www.google.com/maps/place/Pol%C3%ADgono+Industrial+Polizur,+Barcelona,+Spain", + "Link to Wikipedia": "https://es.wikipedia.org/wiki/Pol%C3%ADgono_industrial", + "Size of Population": "Information not typically available for industrial zones", + "Type of industries": "Various (logistics- manufacturing- technology)", + "Next major city / town": "Sentmenat", + "Distance to Sentmenat (Spain- Barcelona)": "Approximately 3 kilometers" + }, + "Polígono Industrial Santiga Sud": { + "Link to Google Maps": "https://www.google.com/maps/place/Pol%C3%ADgono+Industrial+Santiga+Sud,+Barcelona,+Spain", + "Link to Wikipedia": "https://es.wikipedia.org/wiki/Pol%C3%ADgono_Industrial_Santiga_Sud", + "Size of Population": "Not specifically applicable since it's an industrial area.", + "Type of Industries": "Manufacturing- Logistics- Automotive- Food Processing- and Warehousing.", + "Next major city / town": "Barberà del Vallès", + "Distance to Sentmenat (Spain- Barcelona)": "Approximately 15 kilometers" + }, + "Polígono Industrial Els Dolors": { + "Link to Google Maps": "https://www.google.com/maps?q=Pol%C3%ADgono+Industrial+Els+Dolors&um=1&ie=UTF-8&sa=X&ved=2ahUKEwiHkenu2PjzAhWogP0HHQGWCXIQ_AUoAXoECAEQAw", + "Link to Wikipedia": "https://es.wikipedia.org/wiki/Pol%C3%ADgono_Industrials *(Note: There may not be a specific Wikipedia page for this industrial area)*", + "Size of Population": "Not typically applicable- as industrial polygons usually consist of workplaces rather than residences.", + "Type of industries": "Various manufacturing- logistics- warehousing- and service industries.", + "Next major city/town": "Barcelona", + "Distance to Sentmenat (Spain- Barcelona)": "Approximately 27 kilometers" + }, + "Polígono Industrial Can Magre": { + "Link to Google Maps": "https://goo.gl/maps/k6VZc8P1zEqAf8Zg6", + "Link to Wikipedia": "https://es.wikipedia.org/wiki/Sentmenat", + "Size of Population": "Not specifically available for Polígono Industrial Can Magre- refer to Sentmenat's population.", + "Type of Industries": "Predominantly manufacturing and logistics.", + "Next Major City / Town": "Sabadell", + "Distance to Sentmenat (Spain- Barcelona)": "Approximately 3 kilometers" + }, + "Polígono Industrial Llevant": { + "Link to Google Maps": "https://www.google.com/maps/place/Polígono+Industrial+Llevant,+Barcelona,+Spain", + "Link to Wikipedia": "https://en.wikipedia.org/wiki/Barcelona *(Note: There is no specific Wikipedia page for Polígono Industrial Llevant- but this links to the broader Barcelona entry)*", + "Size of Population": "Not directly applicable- as it is an industrial park", + "Type of Industries": "Manufacturing- logistics- warehousing- and various service industries", + "Next major city / town": "Sabadell", + "Distance to Sentmenat (Spain- Barcelona)": "Approximately 8 kilometers" + }, + "Polígono Industrial Sud-Est": { + "Link to Google Maps": "https://www.google.com/maps/place/Pol%C3%ADgono+Industrial+Sud-Est,+Barcelona,+Spain", + "Wikipedia page": "*No available link specifically for Polígono Industrial Sud-Est*.", + "Size of Population": "*Data not available*.", + "Type of Industries": "Various manufacturing- logistics- automotive- and services industries.", + "Next Major City / Town": "Barcelona.", + "Distance to Sentmenat (Spain- Barcelona)": "Approximately 15 kilometers." + }, + "Polígono Industrial Can Mir": { + "Link to Google Maps": "https://www.google.com/maps?q=Pol%C3%ADgono+Industrial+Can+Mir,+Barcelona,+Spain", + "Link to Wikipedia": "https://es.wikipedia.org/wiki/Sentmenat (Note: Direct information about Polígono Industrial Can Mir might be limited)", + "Size of Population": "Information not specifically available- typically associated with the population of Sentmenat", + "Type of industries": "Manufacturing- warehousing- logistics- and light industry", + "Next major city / town": "Sabadell", + "Distance to Sentmenat (Spain- Barcelona)": "Approximately 3 kilometers" + }, + "Polígono Industrial La Romànica": { + "Link to Google Maps": "https://www.google.com/maps/place/La+Rom%C3%A0nica,+08292+Sabadell,+Barcelona,+Spain/", + "Link to Wikipedia": "https://es.wikipedia.org/wiki/Sabadell *(Note: There might not be a specific article for Polígono Industrial La Romànica- but it is part of Sabadell)*", + "Size of Population": "Specific population data for Polígono Industrial La Romànica is generally not available. Refer to the population of Sabadell- which is approximately 211-000 as of 2020.", + "Type of industries": "Various- including manufacturing- logistics- and services.", + "Next major city / town": "Sabadell", + "Distance to Sentmenat (Spain- Barcelona)": "Approximately 8 kilometers" + }, + "Polígono Industrial El Congost": { + "Link to Google Maps": "https://www.google.com/maps/place/Pol%C3%ADgono+Industrial+El+Congost,+Barcelona,+Spain/", + "Link to Wikipedia": "https://es.wikipedia.org/wiki/Pol%C3%ADgono_Industrial_El_Congost *(Note: Wikipedia page might not exist)*", + "Size of Population": "N/A (industrial area- not a residential population)", + "Type of Industries": "Manufacturing- logistics- automotive- technology- and textiles", + "Next major city / town": "Granollers", + "Distance to Sentmenat (Spain- Barcelona)": "Approximately 20 kilometers" + }, + "Polígono Industrial Pla de la Bruguera": { + "Link to Google Maps": "https://www.google.com/maps/place/Pol%C3%ADgono+Industrial+Pla+de+la+Bruguera,+08211+Castellar+del+Vall%C3%A8s,+Barcelona/@41.6174922-2.084216-15z/", + "Link to Wikipedia": "https://es.wikipedia.org/wiki/Castellar_del_Vall%C3%A8s *(Note: Specific Wikipedia page for Polígono Industrial Pla de la Bruguera may not be available- linked to the municipality instead)*", + "Size of Population": "Approximately 24-451 (as part of Castellar del Vallès- 2021)", + "Type of Industries": "Manufacturing- Textiles- Automotive- Electronics", + "Next Major City / Town": "Sabadell", + "Distance to Sentmenat (Spain- Barcelona)": "Approximately 7 kilometers" + }, + "Polígono Industrial Riu d'Or": { + "Link to Google Maps": "https://www.google.com/maps/place/Pol%C3%ADgono+Industrial+Riu+d'Or,+Barcelona,+Spain", + "Link to Wikipedia": "https://es.wikipedia.org/wiki/Pol%C3%ADgono_Industrial_Riu_d'Or (Note: Actual Wikipedia page may not exist)", + "Size of Population": "Not Applicable (Industrial Area)", + "Type of Industries": "Manufacturing- Logistics- Warehousing", + "Next Major City / Town": "Sabadell", + "Distance to Sentmenat (Spain- Barcelona)": "Approximately 10 kilometers" + }, + "Polígono Industrial El Bruguer": { + "Link to Google Maps": "https://www.google.com/maps?q=Pol%C3%ADgono+Industrial+El+Bruguer,+Barcelona,+Spain", + "Link to Wikipedia": "https://es.wikipedia.org/wiki/Pol%C3%ADgono_Industrial_El_Bruguer (Note: This page does not currently exist- this is a sample link.)", + "Size of Population": "No residential population", + "Type of industries": "Manufacturing- logistics- automotive- warehousing", + "Next major city / town": "Barberà del Vallès", + "Distance to Sentmenat (Spain- Barcelona) (in kilometers)": "Approximately 14 km" + } +} \ No newline at end of file diff --git a/packages/osrl/tests/osr-ai/osr-search/leads-0.md b/packages/osrl/tests/osr-ai/osr-search/leads-0.md new file mode 100644 index 00000000..54d36c2c --- /dev/null +++ b/packages/osrl/tests/osr-ai/osr-search/leads-0.md @@ -0,0 +1,159 @@ +## Polígono Industrial Can Vinyals +- [Link to Google Maps](https://www.google.com/maps/place/Pol%C3%ADgono+Industrial+Can+Vinyals,+08181+Sentmenat,+Barcelona,+Spain) +- [Link to Wikipedia](https://es.wikipedia.org/wiki/Sentmenat) (Note: There may not be a specific Wikipedia page for Can Vinyals; this link directs to the town of Sentmenat) +- Size of Population: Information not readily available +- Type of Industries: Various manufacturing and logistics companies +- Next major city / town: [Sentmenat](https://en.wikipedia.org/wiki/Sentmenat) +- Distance to Sentmenat (Spain, Barcelona): Approximately 3 kilometers + +## Polígono Industrial Can Canyameres +- [Link to Google Maps](https://www.google.com/maps?q=Pol%C3%ADgono+Industrial+Can+Canyameres,+Barcelona,+Spain) +- [Link to Wikipedia](https://es.wikipedia.org/wiki/Pol%C3%ADgono_Industrial_Can_Canyameres) *(Note: If no specific Wikipedia page exists, this will link to the general Wikipedia page for industrial areas in Barcelona)* +- Size of Population: Not typically applicable as it is an industrial area. +- Type of industries: Manufacturing, logistics, automotive, electronics +- Next major city/town: [Sabadell](https://en.wikipedia.org/wiki/Sabadell) +- Distance to Sentmenat (Spain, Barcelona): Approximately 9 kilometers + +## Polígono Industrial Can Roqueta +- [Link to Google Maps](https://maps.google.com/?q=Polígono+Industrial+Can+Roqueta,+Barcelona,+Spain) +- [Link to Wikipedia](https://es.wikipedia.org/wiki/Sabadell) (Note: Polígono Industrial Can Roqueta is located in Sabadell, and there is no specific Wikipedia page for the industrial park itself) +- Size of Population: Not applicable (industrial area) +- Type of Industries: Manufacturing, logistics, and technology companies +- Next major city / town: Sabadell +- Distance to Sentmenat (Spain, Barcelona): Approximately 9 kilometers + +## Polígono Industrial Can Jardí +- [Link to Google Maps](https://www.google.com/maps/place/Pol%C3%ADgono+Industrial+Can+Jard%C3%AD,+Barcelona,+Spain) +- [Link to Wikipedia](https://ca.wikipedia.org/wiki/Pol%C3%ADgon_industrial_de_Can_Jard%C3%AD) +- Size of Population: Information not commonly available for industrial zones +- Type of Industries: Technology, manufacturing, logistics +- Next major city / town: Rubí (Barcelona) +- Distance to Sentmenat (Spain, Barcelona): Approximately 27 kilometers + +## Polígono Industrial Ca n’Ametller +- [Link to Google Maps](https://www.google.com/maps/place/Pol%C3%ADgono+Industrial+Ca+n%E2%80%99Ametller,+08195+Sant+Cugat+del+Vall%C3%A8s,+Barcelona,+Spain) +- [Link to Wikipedia](https://es.wikipedia.org/wiki/Sant_Cugat_del_Vall%C3%A8s) *(page for Sant Cugat del Vallès, the municipality that encompasses Polígono Industrial Ca n’Ametller)* +- Size of Population: Not specifically available for the industrial polygon, but [Sant Cugat del Vallès](https://es.wikipedia.org/wiki/Sant_Cugat_del_Vall%C3%A8s) has about 90,000 inhabitants as of the latest census. +- Type of industries: Includes technology firms, logistics companies, manufacturing businesses, and various service providers. +- Next major city / town: [Sant Cugat del Vallès](https://en.wikipedia.org/wiki/Sant_Cugat_del_Vall%C3%A8s) +- Distance to Sentmenat (Spain, Barcelona): Approximately 30 kilometers + +## Polígono Industrial Santiga +- [Link to Google Maps](https://www.google.com/maps/place/Pol%C3%ADgono+Industrial+Santiga/@41.5385,2.1779,15z/data=!4m6!3m5!1s0x12a49fcd8e74d8b7:0x2811246b612fadda!4b1!8m2!3d41.5368171!4d2.1729497) +- [Link to Wikipedia](https://es.wikipedia.org/wiki/Pol%C3%ADgono_Industrial_Santiga) *(Note: This link may need to be created or verified as it may not exist)* +- Size of Population: Approx. 0 (mainly industrial, no residential population) +- Type of industries: Manufacturing, logistics, distribution, automotive, electronics +- Next major city / town: Barberà del Vallès and Sabadell +- Distance to Sentmenat (Spain, Barcelona): Approximately 17 kilometers + +## Polígono Industrial La Clota +- [Link to Google Maps](https://www.google.com/maps/place/Pol%C3%ADgono+Industrial+La+Clota,+08184,+Barcelona,+Spain) +- Wikipedia: (Not available) +- Size of Population: Data not specifically available for the industrial park +- Type of Industries: Manufacturing, Logistics, Automotive +- Next major city/town: Barcelona +- Distance to Sentmenat (Spain, Barcelona): Approximately 3 kilometers + +## Polígono Industrial Can Torrella +- [Link to Google Maps](https://www.google.com/maps/search/Pol%C3%ADgono+Industria+Can+Torrella/@41.624709,2.1343518,15z) +- [Link to Wikipedia](https://es.wikipedia.org/wiki/Sentmenat) +- Size of Population: Not specifically documented (Polígono Industrial information typically does not include population data as they are primarily industrial areas) +- Type of industries: Various light and heavy industries including manufacturing, logistics, and distribution centers +- Next major city / town: Sabadell +- Distance to Sentmenat (Spain, Barcelona): Approximately 2 kilometers + +## Polígono Industrial Polizur +- [Link to Google Maps](https://www.google.com/maps/place/Pol%C3%ADgono+Industrial+Polizur,+Barcelona,+Spain) +- [Link to Wikipedia](https://es.wikipedia.org/wiki/Pol%C3%ADgono_industrial) +- Size of Population: Information not typically available for industrial zones +- Type of industries: Various (logistics, manufacturing, technology) +- Next major city / town: Sentmenat +- Distance to Sentmenat (Spain, Barcelona): Approximately 3 kilometers + +## Polígono Industrial Santiga Sud +- [Link to Google Maps](https://www.google.com/maps/place/Pol%C3%ADgono+Industrial+Santiga+Sud,+Barcelona,+Spain) +- [Link to Wikipedia](https://es.wikipedia.org/wiki/Pol%C3%ADgono_Industrial_Santiga_Sud) +- Size of Population: Not specifically applicable since it's an industrial area. +- Type of Industries: Manufacturing, Logistics, Automotive, Food Processing, and Warehousing. +- Next major city / town: Barberà del Vallès +- Distance to Sentmenat (Spain, Barcelona): Approximately 15 kilometers + +## Polígono Industrial Els Dolors +- [Link to Google Maps](https://www.google.com/maps?q=Pol%C3%ADgono+Industrial+Els+Dolors&um=1&ie=UTF-8&sa=X&ved=2ahUKEwiHkenu2PjzAhWogP0HHQGWCXIQ_AUoAXoECAEQAw) +- [Link to Wikipedia](https://es.wikipedia.org/wiki/Pol%C3%ADgono_Industrials) *(Note: There may not be a specific Wikipedia page for this industrial area)* +- Size of Population: Not typically applicable, as industrial polygons usually consist of workplaces rather than residences. +- Type of industries: Various manufacturing, logistics, warehousing, and service industries. +- Next major city/town: Barcelona +- Distance to Sentmenat (Spain, Barcelona): Approximately 27 kilometers + +## Polígono Industrial Can Magre +- [Link to Google Maps](https://goo.gl/maps/k6VZc8P1zEqAf8Zg6) +- [Link to Wikipedia](https://es.wikipedia.org/wiki/Sentmenat) +- Size of Population: Not specifically available for Polígono Industrial Can Magre, refer to Sentmenat's population. +- Type of Industries: Predominantly manufacturing and logistics. +- Next Major City / Town: Sabadell +- Distance to Sentmenat (Spain, Barcelona): Approximately 3 kilometers + +## Polígono Industrial Llevant +- [Link to Google Maps](https://www.google.com/maps/place/Polígono+Industrial+Llevant,+Barcelona,+Spain) +- [Link to Wikipedia](https://en.wikipedia.org/wiki/Barcelona) *(Note: There is no specific Wikipedia page for Polígono Industrial Llevant, but this links to the broader Barcelona entry)* +- Size of Population: Not directly applicable, as it is an industrial park +- Type of Industries: Manufacturing, logistics, warehousing, and various service industries +- Next major city / town: Sabadell +- Distance to Sentmenat (Spain, Barcelona): Approximately 8 kilometers + +## Polígono Industrial Sud-Est +- [Link to Google Maps](https://www.google.com/maps/place/Pol%C3%ADgono+Industrial+Sud-Est,+Barcelona,+Spain) +- Wikipedia page: *No available link specifically for Polígono Industrial Sud-Est*. +- Size of Population: *Data not available*. +- Type of Industries: Various manufacturing, logistics, automotive, and services industries. +- Next Major City / Town: Barcelona. +- Distance to Sentmenat (Spain, Barcelona): Approximately 15 kilometers. + +## Polígono Industrial Can Mir +- [Link to Google Maps](https://www.google.com/maps?q=Pol%C3%ADgono+Industrial+Can+Mir,+Barcelona,+Spain) +- [Link to Wikipedia](https://es.wikipedia.org/wiki/Sentmenat) (Note: Direct information about Polígono Industrial Can Mir might be limited) +- Size of Population: Information not specifically available, typically associated with the population of Sentmenat +- Type of industries: Manufacturing, warehousing, logistics, and light industry +- Next major city / town: Sabadell +- Distance to Sentmenat (Spain, Barcelona): Approximately 3 kilometers + +## Polígono Industrial La Romànica +- [Link to Google Maps](https://www.google.com/maps/place/La+Rom%C3%A0nica,+08292+Sabadell,+Barcelona,+Spain/) +- [Link to Wikipedia](https://es.wikipedia.org/wiki/Sabadell) *(Note: There might not be a specific article for Polígono Industrial La Romànica, but it is part of Sabadell)* +- Size of Population: Specific population data for Polígono Industrial La Romànica is generally not available. Refer to the population of Sabadell, which is approximately 211,000 as of 2020. +- Type of industries: Various, including manufacturing, logistics, and services. +- Next major city / town: Sabadell +- Distance to Sentmenat (Spain, Barcelona): Approximately 8 kilometers + +## Polígono Industrial El Congost +- [Link to Google Maps](https://www.google.com/maps/place/Pol%C3%ADgono+Industrial+El+Congost,+Barcelona,+Spain/) +- [Link to Wikipedia](https://es.wikipedia.org/wiki/Pol%C3%ADgono_Industrial_El_Congost) *(Note: Wikipedia page might not exist)* +- Size of Population: N/A (industrial area, not a residential population) +- Type of Industries: Manufacturing, logistics, automotive, technology, and textiles +- Next major city / town: Granollers +- Distance to Sentmenat (Spain, Barcelona): Approximately 20 kilometers + +## Polígono Industrial Pla de la Bruguera +- [Link to Google Maps](https://www.google.com/maps/place/Pol%C3%ADgono+Industrial+Pla+de+la+Bruguera,+08211+Castellar+del+Vall%C3%A8s,+Barcelona/@41.6174922,2.084216,15z/) +- [Link to Wikipedia](https://es.wikipedia.org/wiki/Castellar_del_Vall%C3%A8s) *(Note: Specific Wikipedia page for Polígono Industrial Pla de la Bruguera may not be available, linked to the municipality instead)* +- Size of Population: Approximately 24,451 (as part of Castellar del Vallès, 2021) +- Type of Industries: Manufacturing, Textiles, Automotive, Electronics +- Next Major City / Town: Sabadell +- Distance to Sentmenat (Spain, Barcelona): Approximately 7 kilometers + +## Polígono Industrial Riu d'Or +- [Link to Google Maps](https://www.google.com/maps/place/Pol%C3%ADgono+Industrial+Riu+d'Or,+Barcelona,+Spain) +- [Link to Wikipedia](https://es.wikipedia.org/wiki/Pol%C3%ADgono_Industrial_Riu_d'Or) (Note: Actual Wikipedia page may not exist) +- Size of Population: Not Applicable (Industrial Area) +- Type of Industries: Manufacturing, Logistics, Warehousing +- Next Major City / Town: Sabadell +- Distance to Sentmenat (Spain, Barcelona): Approximately 10 kilometers + +## Polígono Industrial El Bruguer +- [Link to Google Maps](https://www.google.com/maps?q=Pol%C3%ADgono+Industrial+El+Bruguer,+Barcelona,+Spain) +- [Link to Wikipedia](https://es.wikipedia.org/wiki/Pol%C3%ADgono_Industrial_El_Bruguer) (Note: This page does not currently exist, this is a sample link.) +- Size of Population: No residential population +- Type of industries: Manufacturing, logistics, automotive, warehousing +- Next major city / town: Barberà del Vallès +- Distance to Sentmenat (Spain, Barcelona) (in kilometers): Approximately 14 km \ No newline at end of file diff --git a/packages/osrl/tests/osr-ai/osr-search/leads-0.md.json b/packages/osrl/tests/osr-ai/osr-search/leads-0.md.json new file mode 100644 index 00000000..a4fd4b13 --- /dev/null +++ b/packages/osrl/tests/osr-ai/osr-search/leads-0.md.json @@ -0,0 +1,3 @@ +{ + "includes": [] +} \ No newline at end of file diff --git a/packages/osrl/tests/osr-ai/osr-search/leads-0.osrl b/packages/osrl/tests/osr-ai/osr-search/leads-0.osrl new file mode 100644 index 00000000..0cbe7c0e --- /dev/null +++ b/packages/osrl/tests/osr-ai/osr-search/leads-0.osrl @@ -0,0 +1,26 @@ +[% assign area = "Sentmenat" %] +[% assign location = "(Spain, Barcelona)" %] + +[% osr-ai model:"gpt-4o" cache:false gui:false logLevel:"warn" filters:"code,JSONParse" dst:"${SRC_DIR}/${SRC_NAME}-sentmenat.json" assign:"areas" %] + - List 20 'polygonos' (industrial areas) next to [[area]] [[location]] + - as json array + - dont comment +[% osr-ai-end %] + +[%- for area_item in areas %] +## [[area_item]] +[%- capture area_query -%] + List essential geo data [[area_item]] [[location]], as Markdown bullet list, with links, dont add a chapter: + - Link to Google Maps + - Link to Wikipedia + - Size of Population + - type of industries + - Next major city / town + - Distance to [[area]] [[location]] (in kilometers) +[%- endcapture -%] +[%- osr-ai model:"gpt-4o" cache:false gui:true logLevel:"warn" filters:"code" assign:"area_result" -%] + [[-area_query-]] +[%- osr-ai-end -%] +[[-area_result-]] + +[%- endfor -%] diff --git a/packages/osrl/tests/output.jpg b/packages/osrl/tests/output.jpg new file mode 100644 index 00000000..312f5bb6 Binary files /dev/null and b/packages/osrl/tests/output.jpg differ diff --git a/packages/osrl/tests/plugins/.osrl.json b/packages/osrl/tests/plugins/.osrl.json new file mode 100644 index 00000000..8246c9c8 --- /dev/null +++ b/packages/osrl/tests/plugins/.osrl.json @@ -0,0 +1,66 @@ +{ + "includes": [ + "${PRODUCT_ROOT}", + "${PRODUCT_ROOT}/templates/site/", + "${PRODUCT_ROOT}/templates/shared/", + "${root}/osr", + "${root}/osr/widgets", + "${root}/_includes", + "${root}/templates/site/", + "./widgets" + ], + "variables": { + "PRODUCT_ROOT": "${root}/${product}/", + "abs_url": "https://assets.osr-plastic.org", + "CACHE": "${root}/cache/", + "CACHE_URL": "${abs_url}/cache/", + "GIT_REPO": "https://git.osr-plastic.org/osr-plastic/osr-machines", + "OSR_MACHINES_ASSETS_URL":"https://assets.osr-plastic.org/machines/", + "PRODUCTS_ASSETS_URL":"https://assets.osr-plastic.org/machines/${product}", + "OSR_FILES_WEB":"https://files.osr-plastic.org/files/osr-machines", + "PRODUCTS_FILES_URL":"${OSR_FILES_WEB}/${product_rel}", + "DISCORD":"https://discord.gg/s8K7yKwBRc" + }, + "env": { + "bazar":{ + "includes": [ + "${PRODUCT_ROOT}/templates/bazar", + "${PRODUCT_ROOT}/templates/shared/", + "${root}/osr", + "${root}/osr/widgets", + "${PRODUCT_ROOT}" + ], + "variables": { + "abs_url": "https://dev.osr-plastic.org/" + } + }, + "bazar-release":{ + "includes": [ + "${PRODUCT_ROOT}/templates/bazar", + "${PRODUCT_ROOT}/templates/shared/", + "${root}/osr", + "${root}/osr/widgets", + "${PRODUCT_ROOT}" + ], + "variables": { + "abs_url": "https://plastic-hub.com/", + "OSR_MACHINES_ASSETS_URL":"https://assets.osr-plastic.org/machines/" + } + }, + "hugo-debug":{ + "includes": [ + "${PRODUCT_ROOT}/templates/bazar", + "${PRODUCT_ROOT}/templates/shared/", + "${root}/osr", + "${root}/osr/widgets", + "${PRODUCT_ROOT}" + ], + "variables": { + "abs_url": "https://plastic-hub.com/", + "OSR_MACHINES_ASSETS_URL":"https://assets.osr-plastic.org:433" + } + } + + } + +} \ No newline at end of file diff --git a/packages/osrl/tests/plugins/output.md b/packages/osrl/tests/plugins/output.md new file mode 100644 index 00000000..86078145 --- /dev/null +++ b/packages/osrl/tests/plugins/output.md @@ -0,0 +1,7 @@ +## Some Template + +# i18n + +#### Moldes + +Hemos introducido un nuevo diseño de Molde que permite un proceso limpio, seguro y repetible. El Molde es ajustable en altura y los rodillos evitan que se dañe la placa de la prensa térmica, pero también posicionan el molde dentro de la prensa de láminas con precisión. Además, las Planchas de protección exteriores encajan en el marco del Molde para evitar que se caiga el Plástico. No se necesita ningún agente desmoldeante. \ No newline at end of file diff --git a/packages/osrl/tests/plugins/output.md.json b/packages/osrl/tests/plugins/output.md.json new file mode 100644 index 00000000..df6899b9 --- /dev/null +++ b/packages/osrl/tests/plugins/output.md.json @@ -0,0 +1,60 @@ +{ + "imports": [ + { + "file": "./widget.osrl", + "parent": "tests/plugins/source.md.tmp" + } + ], + "variables": { + "OSR_ROOT": "C:\\Users\\mc007\\Desktop\\osr", + "OSR_TEMP": "C:\\Users\\mc007\\AppData\\Local\\Temp\\osr", + "PRODUCT_ROOT": "./tests/templates//", + "OA_ROOT": "C:\\Users\\mc007\\Desktop\\ph3\\pp-next2", + "KB_ROOT": "C:\\Users\\mc007\\Desktop\\osr\\osr-kb-next", + "OSR_CACHE": "C:\\Users\\mc007\\.osr\\cache", + "OSR_LIBRARY": "C:\\Users\\mc007\\Desktop\\osr\\osr-machines", + "OSR_LIBRARY_MACHINES": "C:\\Users\\mc007\\Desktop\\osr\\osr-machines", + "OSR_USER_ASSETS": "C:\\Users\\mc007\\Desktop\\osr\\osr-user-assets", + "OSR_PRIVATE": "C:\\Users\\mc007\\.osr\\", + "OSR_TEMPLATES": "C:\\Users\\mc007\\Desktop\\osr\\osr-templates", + "OSR_CONTENT": "C:\\Users\\mc007\\Desktop\\osr\\osr-content", + "OSR_PROFILES": "C:\\Users\\mc007\\Desktop\\osr\\osr-profiles", + "OSR_CUSTOMER_DRIVE": "G:\\", + "expand": "true", + "root": "./tests/templates", + "env": "library", + "format2": "html", + "logLevel": "trace", + "var-area": "Sentmenat", + "var-location": "(Spain,Barcelona)", + "targetLanguage": "es", + "sourceLanguage": "en", + "cwd": "C:\\Users\\mc007\\Desktop\\osr\\osrl", + "abs_url": "https://assets.osr-plastic.org", + "CACHE": "./tests/templates/cache/", + "CACHE_URL": "https://assets.osr-plastic.org/cache/", + "GIT_REPO": "https://git.osr-plastic.org/osr-plastic/osr-machines", + "_OSR_MACHINES_ASSETS_URL": "https://assets.osr-plastic.org/machines/", + "OSR_MACHINES_ASSETS_URL": "https://assets.osr-plastic.org/machines/", + "PRODUCTS_ASSETS_URL": "https://assets.osr-plastic.org/machines/", + "OSR_FILES_WEB": "https://files.osr-plastic.org/files/osr-machines", + "PRODUCTS_FILES_URL": "https://files.polymech.io/files/machines/", + "DISCORD": "https://discord.gg/s8K7yKwBRc" + }, + "includes": [ + "C:\\Users\\mc007\\Desktop\\osr\\osrl\\tests\\templates\\src\\data", + "C:\\Users\\mc007\\Desktop\\osr\\osrl\\tests\\templates", + "C:\\Users\\mc007\\Desktop\\osr\\osrl\\tests\\templates\\templates\\site", + "C:\\Users\\mc007\\Desktop\\osr\\osrl\\tests\\templates\\templates\\shared", + "C:\\Users\\mc007\\Desktop\\osr\\products\\company\\campaign\\widgets", + "C:\\Users\\mc007\\Desktop\\osr\\products\\company\\campaign\\content", + "C:\\Users\\mc007\\Desktop\\osr\\products\\company\\campaign\\data", + "C:\\Users\\mc007\\Desktop\\osr\\products\\company\\commons", + "C:\\Users\\mc007\\Desktop\\osr\\products\\company\\commons\\widgets", + "C:\\Users\\mc007\\Desktop\\osr\\osr-templates\\osrl\\widgets", + "C:\\Users\\mc007\\Desktop\\osr\\osrl\\tests\\templates\\osr", + "C:\\Users\\mc007\\Desktop\\osr\\osrl\\tests\\templates\\osr\\widgets", + "C:\\Users\\mc007\\Desktop\\osr\\osrl\\tests\\templates\\_includes", + "C:\\Users\\mc007\\Desktop\\osr\\osrl\\tests\\plugins\\widgets" + ] +} \ No newline at end of file diff --git a/packages/osrl/tests/plugins/source.md b/packages/osrl/tests/plugins/source.md new file mode 100644 index 00000000..3a428f3c --- /dev/null +++ b/packages/osrl/tests/plugins/source.md @@ -0,0 +1,10 @@ +# i18n + +[% i18n %] +#### Moulds + +We introduced a new mould design that allows for a clean, safe and repeatable process. The mould is height adjustable and rollers prevent damage of the heat press plate but also position the mould inside the sheetpress precisely. Furthermore the outer protection sheets snap onto the mould frame to avoid plastic from falling out. No mould release agent is needed. + +[% i18n-end %] + +[%- include "./widget.osrl" html:true assign:"widget" after:"html,beautify,substitute" -%] diff --git a/packages/osrl/tests/plugins/template.md b/packages/osrl/tests/plugins/template.md new file mode 100644 index 00000000..82d741c5 --- /dev/null +++ b/packages/osrl/tests/plugins/template.md @@ -0,0 +1,4 @@ +## Some Template + +${SOURCE} + diff --git a/packages/osrl/tests/plugins/widget.osrl b/packages/osrl/tests/plugins/widget.osrl new file mode 100644 index 00000000..f98b3e76 --- /dev/null +++ b/packages/osrl/tests/plugins/widget.osrl @@ -0,0 +1 @@ +widget content \ No newline at end of file diff --git a/packages/osrl/tests/plugins/widgets/xthumb.osrl b/packages/osrl/tests/plugins/widgets/xthumb.osrl new file mode 100644 index 00000000..0b318a35 --- /dev/null +++ b/packages/osrl/tests/plugins/widgets/xthumb.osrl @@ -0,0 +1,12 @@ +## Level + +- Berlin +- London +- [ ] todo: complete all cities +- [ ] todo: convert to fucking imperial +- root: [[root]] +- source: ${SRC_FILE_NAME} + +![](https://assets.osr-plastic.org:433/assets/newsletter/common/products/injectors/overview.jpg) + +[% assign var_inner = "inner var - xthumbs" %] \ No newline at end of file diff --git a/packages/osrl/tests/product.svg b/packages/osrl/tests/product.svg new file mode 100644 index 00000000..0b41c5c4 --- /dev/null +++ b/packages/osrl/tests/product.svg @@ -0,0 +1,3 @@ + + +
    1:n
    1:n
    Configuration
    Configuration
    Meta
    Meta
    Assets
    Assets
    Drawings
    Drawings
    Renderings
    Renderings
    Manufacturing
    Manufacturing
    Laser
    Laser
    DXF
    DXF
    CNC
    CNC
    GCode/CAM
    GCode/CAM
    Resources
    Resources
    Forum
    Forum
    Wiki
    Wiki
    Media
    Media
    Videos
    Videos
    Pictures
    Pictures
    Manuals
    Manuals
    CAD
    CAD
    Configuration (s)
    Configuration (s)
    Product / Component
    Product / Component
    Components
    Components
    BOM
    BOM
    BOM
    BOM
    Viewer does not support full SVG 1.1
    \ No newline at end of file diff --git a/packages/osrl/tests/sal-test.md b/packages/osrl/tests/sal-test.md new file mode 100644 index 00000000..840cd279 --- /dev/null +++ b/packages/osrl/tests/sal-test.md @@ -0,0 +1,7 @@ +https://dev.osr-plastic.org/ + +```json +{ + +} +``` \ No newline at end of file diff --git a/packages/osrl/tests/sal-test.osrl b/packages/osrl/tests/sal-test.osrl new file mode 100644 index 00000000..dac0b444 --- /dev/null +++ b/packages/osrl/tests/sal-test.osrl @@ -0,0 +1,24 @@ +[% capture config %][% js %] +const file = path.resolve(fs.resolve('${OSR_ROOT}/osr-templates/osrl/.osrl.json')) +if(!fs.exists(file)){ + logger.error('Error reading config') + return +} +logger.debug('file : ', file); +const globalVariables = readJSON(file); +addGlobal({config:globalVariables}); +return YAML.stringify(globalVariables); +[%endjs%][%endcapture%] + +[[includes2]] + +[[abs_url]] + +```json +{ +[%js%] + console.log(config.variables) + //JSON.stringify(global.variables,null,2) +[%endjs%] +} +``` \ No newline at end of file diff --git a/packages/osrl/tests/src/images/20/brief.jpg b/packages/osrl/tests/src/images/20/brief.jpg new file mode 100644 index 00000000..e821b7bd Binary files /dev/null and b/packages/osrl/tests/src/images/20/brief.jpg differ diff --git a/packages/osrl/tests/src/images/20/exploded_2k.jpg b/packages/osrl/tests/src/images/20/exploded_2k.jpg new file mode 100644 index 00000000..0901a438 Binary files /dev/null and b/packages/osrl/tests/src/images/20/exploded_2k.jpg differ diff --git a/packages/osrl/tests/src/images/20/perspective.jpg b/packages/osrl/tests/src/images/20/perspective.jpg new file mode 100644 index 00000000..b34b844a Binary files /dev/null and b/packages/osrl/tests/src/images/20/perspective.jpg differ diff --git a/packages/osrl/tests/src/images/20/perspective_2k.jpg b/packages/osrl/tests/src/images/20/perspective_2k.jpg new file mode 100644 index 00000000..332db275 Binary files /dev/null and b/packages/osrl/tests/src/images/20/perspective_2k.jpg differ diff --git a/packages/osrl/tests/src/images/20/perspective_2k_teaser.jpg b/packages/osrl/tests/src/images/20/perspective_2k_teaser.jpg new file mode 100644 index 00000000..7d8584b6 Binary files /dev/null and b/packages/osrl/tests/src/images/20/perspective_2k_teaser.jpg differ diff --git a/packages/osrl/tests/src/images/20/perspective_4k.jpg b/packages/osrl/tests/src/images/20/perspective_4k.jpg new file mode 100644 index 00000000..e24acfcf Binary files /dev/null and b/packages/osrl/tests/src/images/20/perspective_4k.jpg differ diff --git a/packages/osrl/tests/src/images/20/perspective_4k_dims.jpg b/packages/osrl/tests/src/images/20/perspective_4k_dims.jpg new file mode 100644 index 00000000..16f5729a Binary files /dev/null and b/packages/osrl/tests/src/images/20/perspective_4k_dims.jpg differ diff --git a/packages/osrl/tests/src/images/20/perspective_4k_right.jpg b/packages/osrl/tests/src/images/20/perspective_4k_right.jpg new file mode 100644 index 00000000..ad60a1b7 Binary files /dev/null and b/packages/osrl/tests/src/images/20/perspective_4k_right.jpg differ diff --git a/packages/osrl/tests/src/images/40/brief.jpg b/packages/osrl/tests/src/images/40/brief.jpg new file mode 100644 index 00000000..bebd5e61 Binary files /dev/null and b/packages/osrl/tests/src/images/40/brief.jpg differ diff --git a/packages/osrl/tests/src/images/40/exploded_2k.jpg b/packages/osrl/tests/src/images/40/exploded_2k.jpg new file mode 100644 index 00000000..58b55894 Binary files /dev/null and b/packages/osrl/tests/src/images/40/exploded_2k.jpg differ diff --git a/packages/osrl/tests/src/images/40/perspective.jpg b/packages/osrl/tests/src/images/40/perspective.jpg new file mode 100644 index 00000000..94f17a7c Binary files /dev/null and b/packages/osrl/tests/src/images/40/perspective.jpg differ diff --git a/packages/osrl/tests/src/images/40/perspective_2k.jpg b/packages/osrl/tests/src/images/40/perspective_2k.jpg new file mode 100644 index 00000000..964939b3 Binary files /dev/null and b/packages/osrl/tests/src/images/40/perspective_2k.jpg differ diff --git a/packages/osrl/tests/src/images/40/perspective_2k_teaser.jpg b/packages/osrl/tests/src/images/40/perspective_2k_teaser.jpg new file mode 100644 index 00000000..4748b2fa Binary files /dev/null and b/packages/osrl/tests/src/images/40/perspective_2k_teaser.jpg differ diff --git a/packages/osrl/tests/src/images/40/perspective_4k.jpg b/packages/osrl/tests/src/images/40/perspective_4k.jpg new file mode 100644 index 00000000..6124a7b7 Binary files /dev/null and b/packages/osrl/tests/src/images/40/perspective_4k.jpg differ diff --git a/packages/osrl/tests/src/images/40/perspective_4k_dims.jpg b/packages/osrl/tests/src/images/40/perspective_4k_dims.jpg new file mode 100644 index 00000000..9f0c069e Binary files /dev/null and b/packages/osrl/tests/src/images/40/perspective_4k_dims.jpg differ diff --git a/packages/osrl/tests/src/images/40/perspective_4k_right.jpg b/packages/osrl/tests/src/images/40/perspective_4k_right.jpg new file mode 100644 index 00000000..82d5854b Binary files /dev/null and b/packages/osrl/tests/src/images/40/perspective_4k_right.jpg differ diff --git a/packages/osrl/tests/src/images/60/brief.jpg b/packages/osrl/tests/src/images/60/brief.jpg new file mode 100644 index 00000000..bd891dec Binary files /dev/null and b/packages/osrl/tests/src/images/60/brief.jpg differ diff --git a/packages/osrl/tests/src/images/60/exploded_2k.jpg b/packages/osrl/tests/src/images/60/exploded_2k.jpg new file mode 100644 index 00000000..1f98ae79 Binary files /dev/null and b/packages/osrl/tests/src/images/60/exploded_2k.jpg differ diff --git a/packages/osrl/tests/src/images/60/perspective.jpg b/packages/osrl/tests/src/images/60/perspective.jpg new file mode 100644 index 00000000..66fd92c3 Binary files /dev/null and b/packages/osrl/tests/src/images/60/perspective.jpg differ diff --git a/packages/osrl/tests/src/images/60/perspective_2k.jpg b/packages/osrl/tests/src/images/60/perspective_2k.jpg new file mode 100644 index 00000000..5f77a87b Binary files /dev/null and b/packages/osrl/tests/src/images/60/perspective_2k.jpg differ diff --git a/packages/osrl/tests/src/images/60/perspective_2k_teaser.jpg b/packages/osrl/tests/src/images/60/perspective_2k_teaser.jpg new file mode 100644 index 00000000..45a3dc84 Binary files /dev/null and b/packages/osrl/tests/src/images/60/perspective_2k_teaser.jpg differ diff --git a/packages/osrl/tests/src/images/60/perspective_4k.jpg b/packages/osrl/tests/src/images/60/perspective_4k.jpg new file mode 100644 index 00000000..f9414449 Binary files /dev/null and b/packages/osrl/tests/src/images/60/perspective_4k.jpg differ diff --git a/packages/osrl/tests/src/images/60/perspective_4k_dims.jpg b/packages/osrl/tests/src/images/60/perspective_4k_dims.jpg new file mode 100644 index 00000000..6310d6aa Binary files /dev/null and b/packages/osrl/tests/src/images/60/perspective_4k_dims.jpg differ diff --git a/packages/osrl/tests/src/images/60/perspective_4k_right.jpg b/packages/osrl/tests/src/images/60/perspective_4k_right.jpg new file mode 100644 index 00000000..69e5a64e Binary files /dev/null and b/packages/osrl/tests/src/images/60/perspective_4k_right.jpg differ diff --git a/packages/osrl/tests/src/images/80/brief.jpg b/packages/osrl/tests/src/images/80/brief.jpg new file mode 100644 index 00000000..5e6330a7 Binary files /dev/null and b/packages/osrl/tests/src/images/80/brief.jpg differ diff --git a/packages/osrl/tests/src/images/80/exploded_2k.jpg b/packages/osrl/tests/src/images/80/exploded_2k.jpg new file mode 100644 index 00000000..9d415186 Binary files /dev/null and b/packages/osrl/tests/src/images/80/exploded_2k.jpg differ diff --git a/packages/osrl/tests/src/images/80/perspective.jpg b/packages/osrl/tests/src/images/80/perspective.jpg new file mode 100644 index 00000000..45a12ae2 Binary files /dev/null and b/packages/osrl/tests/src/images/80/perspective.jpg differ diff --git a/packages/osrl/tests/src/images/80/perspective_2k.jpg b/packages/osrl/tests/src/images/80/perspective_2k.jpg new file mode 100644 index 00000000..356b0c54 Binary files /dev/null and b/packages/osrl/tests/src/images/80/perspective_2k.jpg differ diff --git a/packages/osrl/tests/src/images/80/perspective_2k_teaser.jpg b/packages/osrl/tests/src/images/80/perspective_2k_teaser.jpg new file mode 100644 index 00000000..97ded867 Binary files /dev/null and b/packages/osrl/tests/src/images/80/perspective_2k_teaser.jpg differ diff --git a/packages/osrl/tests/src/images/80/perspective_4k.jpg b/packages/osrl/tests/src/images/80/perspective_4k.jpg new file mode 100644 index 00000000..5b6e3ad4 Binary files /dev/null and b/packages/osrl/tests/src/images/80/perspective_4k.jpg differ diff --git a/packages/osrl/tests/src/images/80/perspective_4k_dims.jpg b/packages/osrl/tests/src/images/80/perspective_4k_dims.jpg new file mode 100644 index 00000000..e2396ddb Binary files /dev/null and b/packages/osrl/tests/src/images/80/perspective_4k_dims.jpg differ diff --git a/packages/osrl/tests/src/images/80/perspective_4k_right.jpg b/packages/osrl/tests/src/images/80/perspective_4k_right.jpg new file mode 100644 index 00000000..11d2c57c Binary files /dev/null and b/packages/osrl/tests/src/images/80/perspective_4k_right.jpg differ diff --git a/packages/osrl/tests/src/images/brief.jpg b/packages/osrl/tests/src/images/brief.jpg new file mode 100644 index 00000000..a9e28729 Binary files /dev/null and b/packages/osrl/tests/src/images/brief.jpg differ diff --git a/packages/osrl/tests/src/images/exploded_2k.jpg b/packages/osrl/tests/src/images/exploded_2k.jpg new file mode 100644 index 00000000..8e1f3647 Binary files /dev/null and b/packages/osrl/tests/src/images/exploded_2k.jpg differ diff --git a/packages/osrl/tests/src/images/perspective.jpg b/packages/osrl/tests/src/images/perspective.jpg new file mode 100644 index 00000000..6eb71f3f Binary files /dev/null and b/packages/osrl/tests/src/images/perspective.jpg differ diff --git a/packages/osrl/tests/src/images/perspective_2k.jpg b/packages/osrl/tests/src/images/perspective_2k.jpg new file mode 100644 index 00000000..e2b7efc8 Binary files /dev/null and b/packages/osrl/tests/src/images/perspective_2k.jpg differ diff --git a/packages/osrl/tests/src/images/perspective_2k_teaser.jpg b/packages/osrl/tests/src/images/perspective_2k_teaser.jpg new file mode 100644 index 00000000..fd8118ed Binary files /dev/null and b/packages/osrl/tests/src/images/perspective_2k_teaser.jpg differ diff --git a/packages/osrl/tests/src/images/perspective_4k.jpg b/packages/osrl/tests/src/images/perspective_4k.jpg new file mode 100644 index 00000000..6618f31e Binary files /dev/null and b/packages/osrl/tests/src/images/perspective_4k.jpg differ diff --git a/packages/osrl/tests/src/images/perspective_4k_dims.jpg b/packages/osrl/tests/src/images/perspective_4k_dims.jpg new file mode 100644 index 00000000..65c1932b Binary files /dev/null and b/packages/osrl/tests/src/images/perspective_4k_dims.jpg differ diff --git a/packages/osrl/tests/src/images/perspective_4k_right.jpg b/packages/osrl/tests/src/images/perspective_4k_right.jpg new file mode 100644 index 00000000..d71479b2 Binary files /dev/null and b/packages/osrl/tests/src/images/perspective_4k_right.jpg differ diff --git a/packages/osrl/tests/src/images/webp/brief.webp b/packages/osrl/tests/src/images/webp/brief.webp new file mode 100644 index 00000000..e1a75177 Binary files /dev/null and b/packages/osrl/tests/src/images/webp/brief.webp differ diff --git a/packages/osrl/tests/src/images/webp/exploded_2k.webp b/packages/osrl/tests/src/images/webp/exploded_2k.webp new file mode 100644 index 00000000..dc24fe64 Binary files /dev/null and b/packages/osrl/tests/src/images/webp/exploded_2k.webp differ diff --git a/packages/osrl/tests/src/images/webp/perspective.webp b/packages/osrl/tests/src/images/webp/perspective.webp new file mode 100644 index 00000000..bc1776eb Binary files /dev/null and b/packages/osrl/tests/src/images/webp/perspective.webp differ diff --git a/packages/osrl/tests/src/images/webp/perspective_2k.webp b/packages/osrl/tests/src/images/webp/perspective_2k.webp new file mode 100644 index 00000000..e8af5856 Binary files /dev/null and b/packages/osrl/tests/src/images/webp/perspective_2k.webp differ diff --git a/packages/osrl/tests/src/images/webp/perspective_2k_teaser.webp b/packages/osrl/tests/src/images/webp/perspective_2k_teaser.webp new file mode 100644 index 00000000..14eb4471 Binary files /dev/null and b/packages/osrl/tests/src/images/webp/perspective_2k_teaser.webp differ diff --git a/packages/osrl/tests/src/images/webp/perspective_4k.webp b/packages/osrl/tests/src/images/webp/perspective_4k.webp new file mode 100644 index 00000000..0e0c4fdc Binary files /dev/null and b/packages/osrl/tests/src/images/webp/perspective_4k.webp differ diff --git a/packages/osrl/tests/src/images/webp/perspective_4k_dims.webp b/packages/osrl/tests/src/images/webp/perspective_4k_dims.webp new file mode 100644 index 00000000..bb3cccc9 Binary files /dev/null and b/packages/osrl/tests/src/images/webp/perspective_4k_dims.webp differ diff --git a/packages/osrl/tests/src/images/webp/perspective_4k_right.webp b/packages/osrl/tests/src/images/webp/perspective_4k_right.webp new file mode 100644 index 00000000..27e83c98 Binary files /dev/null and b/packages/osrl/tests/src/images/webp/perspective_4k_right.webp differ diff --git a/packages/osrl/tests/sub/test.md b/packages/osrl/tests/sub/test.md new file mode 100644 index 00000000..e69de29b diff --git a/packages/osrl/tests/template.sh b/packages/osrl/tests/template.sh new file mode 100644 index 00000000..f545a8f5 --- /dev/null +++ b/packages/osrl/tests/template.sh @@ -0,0 +1,28 @@ +#!/bin/bash +language="osr" +debug=true +expand=true +source="./tests/templates/source.md" +template="./tests/templates/template.md" +output="./tests/templates/output.html" +root="./tests/templates" +profile="${OSR_ROOT}/osr-templates/osrl/.osrl.json" +plugins="${root}/osr/plugins" +env="library" +format="html" +stdout=true +logLevel="trace" + +node --no-warnings main.js compile --language="$language" \ + --debug="$debug" \ + --expand="$expand" \ + --source="$source" \ + --template="$template" \ + --output="$output" \ + --root="$root" \ + --profile="$profile" \ + --plugins="$plugins" \ + --env="$env" \ + --format="$format" \ + --stdout="$stdout" \ + --logLevel="$logLevel" diff --git a/packages/osrl/tests/templates/.osrl.json b/packages/osrl/tests/templates/.osrl.json new file mode 100644 index 00000000..8246c9c8 --- /dev/null +++ b/packages/osrl/tests/templates/.osrl.json @@ -0,0 +1,66 @@ +{ + "includes": [ + "${PRODUCT_ROOT}", + "${PRODUCT_ROOT}/templates/site/", + "${PRODUCT_ROOT}/templates/shared/", + "${root}/osr", + "${root}/osr/widgets", + "${root}/_includes", + "${root}/templates/site/", + "./widgets" + ], + "variables": { + "PRODUCT_ROOT": "${root}/${product}/", + "abs_url": "https://assets.osr-plastic.org", + "CACHE": "${root}/cache/", + "CACHE_URL": "${abs_url}/cache/", + "GIT_REPO": "https://git.osr-plastic.org/osr-plastic/osr-machines", + "OSR_MACHINES_ASSETS_URL":"https://assets.osr-plastic.org/machines/", + "PRODUCTS_ASSETS_URL":"https://assets.osr-plastic.org/machines/${product}", + "OSR_FILES_WEB":"https://files.osr-plastic.org/files/osr-machines", + "PRODUCTS_FILES_URL":"${OSR_FILES_WEB}/${product_rel}", + "DISCORD":"https://discord.gg/s8K7yKwBRc" + }, + "env": { + "bazar":{ + "includes": [ + "${PRODUCT_ROOT}/templates/bazar", + "${PRODUCT_ROOT}/templates/shared/", + "${root}/osr", + "${root}/osr/widgets", + "${PRODUCT_ROOT}" + ], + "variables": { + "abs_url": "https://dev.osr-plastic.org/" + } + }, + "bazar-release":{ + "includes": [ + "${PRODUCT_ROOT}/templates/bazar", + "${PRODUCT_ROOT}/templates/shared/", + "${root}/osr", + "${root}/osr/widgets", + "${PRODUCT_ROOT}" + ], + "variables": { + "abs_url": "https://plastic-hub.com/", + "OSR_MACHINES_ASSETS_URL":"https://assets.osr-plastic.org/machines/" + } + }, + "hugo-debug":{ + "includes": [ + "${PRODUCT_ROOT}/templates/bazar", + "${PRODUCT_ROOT}/templates/shared/", + "${root}/osr", + "${root}/osr/widgets", + "${PRODUCT_ROOT}" + ], + "variables": { + "abs_url": "https://plastic-hub.com/", + "OSR_MACHINES_ASSETS_URL":"https://assets.osr-plastic.org:433" + } + } + + } + +} \ No newline at end of file diff --git a/packages/osrl/tests/templates/output.md b/packages/osrl/tests/templates/output.md new file mode 100644 index 00000000..93da0a79 --- /dev/null +++ b/packages/osrl/tests/templates/output.md @@ -0,0 +1,84 @@ +## Some Template + +# Custom Filters + + +All products: + +- + + + + +Kitchen products: + + + + + +# Content of source + +Source : ./tests/templates// + + + + + + + + +Basics\[[edit](/index.php?title=OSE_Discord_Channel&action=edit§ion=1 "Edit section: Basics")\] +=================================================================================================== + +* A tool for [Inter-OSE Communication](/index.php?title=Inter-OSE_Communication&action=edit&redlink=1 "Inter-OSE Communication (page does not exist)") +* More informal than the \[\[OSE Slack Channel (need to find the term slack uses for this +* Has [RTT](/wiki/RTT "RTT") , image/file sharing, audio, and video capabilities +* Also has useful roles such as timezone(s) for knowing when people are ping-able (ie awake/online) + +Link\[[edit](/index.php?title=OSE_Discord_Channel&action=edit§ion=2 "Edit section: Link")\] +=============================================================================================== + +* May expire, if so, yell at [User:Eric](/wiki/User:Eric "User:Eric") for help +* [Invite Link](https://discord.gg/HnXMH4a) (Moderation is in Place to make sure everyone passes the [Asshole Test](/wiki/Asshole_Test "Asshole Test") and keep things running smoothly, anyone is welcome as long as they “play nice in the sandbox” ) + +Internal Links\[[edit](/index.php?title=OSE_Discord_Channel&action=edit§ion=3 "Edit section: Internal Links")\] +=================================================================================================================== + +* [Element (Software)](/wiki/Element_\(Software\) "Element (Software)") (A Potential FLOSS Alternative) +* [OSE's Social Media](/wiki/OSE%27s_Social_Media "OSE's Social Media") + + + +``` +

    Level

    +
      +
    • Berlin
    • +
    • London
    • +
    • todo: complete all cities
    • +
    • todo: convert to fucking imperial
    • +
    • root: ./tests/templates//
    • +
    • source: source.md
    • +
    +

    +``` + +inner var - xthumbs // shouldnt be - variable assignment within a widget, leaked + + + + +| Cities | +|-------------| +| London | + +| Todos | +|--------------------------| +| complete all cities | +| convert to fucking imperial | + +```mediawiki +| Level | +|--------| +| Berlin | +| London | +``` \ No newline at end of file diff --git a/packages/osrl/tests/templates/output.md.json b/packages/osrl/tests/templates/output.md.json new file mode 100644 index 00000000..e00cba8a --- /dev/null +++ b/packages/osrl/tests/templates/output.md.json @@ -0,0 +1,64 @@ +{ + "imports": [ + { + "file": "./widget.osrl", + "parent": "tests/templates/source.md" + }, + { + "file": "C:\\Users\\mc007\\Desktop\\osr/osrl/tests/templates/widgets/xthumb.osrl", + "parent": "tests/templates/source.md" + } + ], + "variables": { + "OSR_ROOT": "C:\\Users\\mc007\\Desktop\\osr", + "OSR_TEMP": "C:\\Users\\mc007\\AppData\\Local\\Temp\\osr", + "PRODUCT_ROOT": "./tests/templates//", + "OA_ROOT": "C:\\Users\\mc007\\Desktop\\ph3\\pp-next2", + "KB_ROOT": "C:\\Users\\mc007\\Desktop\\osr\\osr-kb-next", + "OSR_CACHE": "C:\\Users\\mc007\\.osr\\cache", + "OSR_LIBRARY": "C:\\Users\\mc007\\Desktop\\osr\\osr-machines", + "OSR_LIBRARY_MACHINES": "C:\\Users\\mc007\\Desktop\\osr\\osr-machines", + "OSR_USER_ASSETS": "C:\\Users\\mc007\\Desktop\\osr\\osr-user-assets", + "OSR_PRIVATE": "C:\\Users\\mc007\\.osr\\", + "OSR_TEMPLATES": "C:\\Users\\mc007\\Desktop\\osr\\osr-templates", + "OSR_CONTENT": "C:\\Users\\mc007\\Desktop\\osr\\osr-content", + "OSR_PROFILES": "C:\\Users\\mc007\\Desktop\\osr\\osr-profiles", + "OSR_CUSTOMER_DRIVE": "G:\\", + "expand": "true", + "root": "./tests/templates", + "env": "library", + "format2": "html", + "logLevel": "trace", + "var-area": "Sentmenat", + "var-location": "(Spain,Barcelona)", + "targetLanguage": "en", + "sourceLanguage": "en", + "cwd": "C:\\Users\\mc007\\Desktop\\osr\\osrl", + "abs_url": "https://assets.osr-plastic.org", + "CACHE": "./tests/templates/cache/", + "CACHE_URL": "https://assets.osr-plastic.org/cache/", + "GIT_REPO": "https://git.osr-plastic.org/osr-plastic/osr-machines", + "_OSR_MACHINES_ASSETS_URL": "https://assets.osr-plastic.org/machines/", + "OSR_MACHINES_ASSETS_URL": "https://assets.osr-plastic.org/machines/", + "PRODUCTS_ASSETS_URL": "https://assets.osr-plastic.org/machines/", + "OSR_FILES_WEB": "https://files.osr-plastic.org/files/osr-machines", + "PRODUCTS_FILES_URL": "https://files.polymech.io/files/machines/", + "DISCORD": "https://discord.gg/s8K7yKwBRc" + }, + "includes": [ + "C:\\Users\\mc007\\Desktop\\osr\\osrl\\tests\\templates\\src\\data", + "C:\\Users\\mc007\\Desktop\\osr\\osrl\\tests\\templates", + "C:\\Users\\mc007\\Desktop\\osr\\osrl\\tests\\templates\\templates\\site", + "C:\\Users\\mc007\\Desktop\\osr\\osrl\\tests\\templates\\templates\\shared", + "C:\\Users\\mc007\\Desktop\\osr\\products\\company\\campaign\\widgets", + "C:\\Users\\mc007\\Desktop\\osr\\products\\company\\campaign\\content", + "C:\\Users\\mc007\\Desktop\\osr\\products\\company\\campaign\\data", + "C:\\Users\\mc007\\Desktop\\osr\\products\\company\\commons", + "C:\\Users\\mc007\\Desktop\\osr\\products\\company\\commons\\widgets", + "C:\\Users\\mc007\\Desktop\\osr\\osr-templates\\osrl\\widgets", + "C:\\Users\\mc007\\Desktop\\osr\\osrl\\tests\\templates\\osr", + "C:\\Users\\mc007\\Desktop\\osr\\osrl\\tests\\templates\\osr\\widgets", + "C:\\Users\\mc007\\Desktop\\osr\\osrl\\tests\\templates\\_includes", + "C:\\Users\\mc007\\Desktop\\osr\\osrl\\tests\\templates\\widgets" + ] +} \ No newline at end of file diff --git a/packages/osrl/tests/templates/source-trace.json b/packages/osrl/tests/templates/source-trace.json new file mode 100644 index 00000000..16da9514 --- /dev/null +++ b/packages/osrl/tests/templates/source-trace.json @@ -0,0 +1,66 @@ +{ + "imports": [ + { + "file": "./widget.osrl", + "parent": "tests/templates/source.md" + }, + { + "file": "C:\\Users\\mc007\\Desktop\\osr/osrl/tests/templates/widgets/xthumb.osrl", + "parent": "tests/templates/source.md" + } + ], + "variables": { + "OSR_ROOT": "C:\\Users\\mc007\\Desktop\\osr", + "OSR_TEMP": "C:\\Users\\mc007\\AppData\\Local\\Temp\\osr", + "PRODUCT_ROOT": "./tests/templates//", + "OA_ROOT": "C:\\Users\\mc007\\Desktop\\ph3\\pp-next2", + "KB_ROOT": "C:\\Users\\mc007\\Desktop\\osr\\osr-kb-next", + "OSR_CACHE": "C:\\Users\\mc007\\.osr\\cache", + "OSR_LIBRARY": "C:\\Users\\mc007\\Desktop\\osr\\osr-machines", + "OSR_LIBRARY_MACHINES": "C:\\Users\\mc007\\Desktop\\osr\\osr-machines", + "OSR_USER_ASSETS": "C:\\Users\\mc007\\Desktop\\osr\\osr-user-assets", + "OSR_PRIVATE": "C:\\Users\\mc007\\.osr\\", + "OSR_TEMPLATES": "C:\\Users\\mc007\\Desktop\\osr\\osr-templates", + "OSR_CONTENT": "C:\\Users\\mc007\\Desktop\\osr\\osr-content", + "OSR_PROFILES": "C:\\Users\\mc007\\Desktop\\osr\\osr-profiles", + "OSR_CUSTOMER_DRIVE": "G:\\", + "targetLanguage": "en", + "sourceLanguage": "en", + "i18n": "C:\\Users\\mc007\\Desktop\\osr", + "expand": "true", + "root": "./tests/templates", + "env": "library", + "format2": "html", + "logLevel": "trace", + "var-area": "Sentmenat", + "var-location": "(Spain,Barcelona)", + "cwd": "C:\\Users\\mc007\\Desktop\\osr\\osrl", + "trace": "/-trace.json", + "abs_url": "https://assets.osr-plastic.org", + "CACHE": "./tests/templates/cache/", + "CACHE_URL": "https://assets.osr-plastic.org/cache/", + "GIT_REPO": "https://git.osr-plastic.org/osr-plastic/osr-machines", + "_OSR_MACHINES_ASSETS_URL": "https://assets.osr-plastic.org/machines/", + "OSR_MACHINES_ASSETS_URL": "https://assets.osr-plastic.org/machines/", + "PRODUCTS_ASSETS_URL": "https://assets.osr-plastic.org/machines/", + "OSR_FILES_WEB": "https://files.osr-plastic.org/files/osr-machines", + "PRODUCTS_FILES_URL": "https://files.polymech.io/files/machines/", + "DISCORD": "https://discord.gg/s8K7yKwBRc" + }, + "includes": [ + "C:\\Users\\mc007\\Desktop\\osr\\osrl\\tests\\templates\\src\\data", + "C:\\Users\\mc007\\Desktop\\osr\\osrl\\tests\\templates", + "C:\\Users\\mc007\\Desktop\\osr\\osrl\\tests\\templates\\templates\\site", + "C:\\Users\\mc007\\Desktop\\osr\\osrl\\tests\\templates\\templates\\shared", + "C:\\Users\\mc007\\Desktop\\osr\\products\\company\\campaign\\widgets", + "C:\\Users\\mc007\\Desktop\\osr\\products\\company\\campaign\\content", + "C:\\Users\\mc007\\Desktop\\osr\\products\\company\\campaign\\data", + "C:\\Users\\mc007\\Desktop\\osr\\products\\company\\commons", + "C:\\Users\\mc007\\Desktop\\osr\\products\\company\\commons\\widgets", + "C:\\Users\\mc007\\Desktop\\osr\\osr-templates\\osrl\\widgets", + "C:\\Users\\mc007\\Desktop\\osr\\osrl\\tests\\templates\\osr", + "C:\\Users\\mc007\\Desktop\\osr\\osrl\\tests\\templates\\osr\\widgets", + "C:\\Users\\mc007\\Desktop\\osr\\osrl\\tests\\templates\\_includes", + "C:\\Users\\mc007\\Desktop\\osr\\osrl\\tests\\templates\\widgets" + ] +} \ No newline at end of file diff --git a/packages/osrl/tests/templates/source.md b/packages/osrl/tests/templates/source.md new file mode 100644 index 00000000..75547ab4 --- /dev/null +++ b/packages/osrl/tests/templates/source.md @@ -0,0 +1,71 @@ +# Custom Filters + +[%- capture products -%] +[% js %] +return [ + { + title:"table", + type:"kitchen" + }, + { + title:"slapstick", + type:"sextoy" + } +] +[%endjs%] +[%- endcapture -%] + +All products: +[% for product in products %] +- [[ product.title ]] +[% endfor %] + +[% assign kitchen_products = products | where: "type", "kitchen" %] + +Kitchen products: +[% for product in kitchen_products %] +- [[ product.title ]] +[% endfor %] + + + + +# Content of source + +Source : [[PRODUCT_ROOT]] + +[% assign content = "./widget.osrl" %] + +[% assign theATest = "https://wiki.opensourceecology.org/api.php?action=parse&page=OSE_Discord_Channel&format=json" %] + +[% assign jsonPath = "$.parse.text[*]" %] + +[%- get theATest before:"JSONParse" path:jsonPath assign:"aTest" after:"markdown" -%] + +[[aTest]] + +[%- include content html:true assign:"widget" root:PRODUCT_ROOT after:"html,beautify,substitute" -%] + +[%- include "${OSR_ROOT}/osrl/tests/templates/widgets/xthumb.osrl" html:true assign:"widget" root:PRODUCT_ROOT after:"html,beautify,substitute" -%] + +``` +[[widget]] +``` + +[[var_inner]] // shouldnt be - variable assignment within a widget, leaked + +[% assign default_filters = "code,trim" %] +[% assign ai_instruction = "return only the answer, as markdown tables" %] + +[% osr-ai model:"gpt-4o" cache:false gui:true logLevel:"debug" filters:default_filters country:"Germany" %] + [[ai_instruction]] + Extract all cities except from [[country]] : [[widget]] + Extract all todos, use markdown: [[widget]] +[% osr-ai-end %] + +```mediawiki +[% osr-ai model:"gpt-4o" cache:true gui:true logLevel:"debug" filters:default_filters %] + [[ai_instruction]] + As mediawiki format [[widget]] +[% osr-ai-end %] +``` \ No newline at end of file diff --git a/packages/osrl/tests/templates/template.md b/packages/osrl/tests/templates/template.md new file mode 100644 index 00000000..82d741c5 --- /dev/null +++ b/packages/osrl/tests/templates/template.md @@ -0,0 +1,4 @@ +## Some Template + +${SOURCE} + diff --git a/packages/osrl/tests/templates/widget.osrl b/packages/osrl/tests/templates/widget.osrl new file mode 100644 index 00000000..e69de29b diff --git a/packages/osrl/tests/templates/widgets/xthumb.osrl b/packages/osrl/tests/templates/widgets/xthumb.osrl new file mode 100644 index 00000000..0b318a35 --- /dev/null +++ b/packages/osrl/tests/templates/widgets/xthumb.osrl @@ -0,0 +1,12 @@ +## Level + +- Berlin +- London +- [ ] todo: complete all cities +- [ ] todo: convert to fucking imperial +- root: [[root]] +- source: ${SRC_FILE_NAME} + +![](https://assets.osr-plastic.org:433/assets/newsletter/common/products/injectors/overview.jpg) + +[% assign var_inner = "inner var - xthumbs" %] \ No newline at end of file diff --git a/packages/osrl/tests/test-sal.sh b/packages/osrl/tests/test-sal.sh new file mode 100644 index 00000000..dcc994e0 --- /dev/null +++ b/packages/osrl/tests/test-sal.sh @@ -0,0 +1 @@ +node main.js compile --alt=true --source="./tests/sal-test.osrl" --env=bazar --output="&{SRC_DIR}/&{SRC_NAME}.md" --logLevel=info \ No newline at end of file diff --git a/packages/osrl/tests/test.in.md b/packages/osrl/tests/test.in.md new file mode 100644 index 00000000..c046cb2e --- /dev/null +++ b/packages/osrl/tests/test.in.md @@ -0,0 +1,108 @@ +--- +permalink: /system/testosr +--- +# Examples + +## Retrieve Environment variables + +- NUMBER_OF_PROCESSORS = 16 + +## Directory listing using fs.iterator (provides mime and directory sizes) + +- sal-test-ai.md - ./docs/sal-test-ai.md - file - text/markdown | Size : 2.8 kB +- sal-test.md - ./docs/sal-test.md - file - text/markdown | Size : 98 B +- sample_ai_svg.md - ./docs/sample_ai_svg.md - file - text/markdown | Size : 5.7 kB +- glands-scad-glands.md - ./osr-ai/glands-scad-glands.md - file - text/markdown | Size : 1.2 kB +- glands-scad.md - ./osr-ai/glands-scad.md - file - text/markdown | Size : 1.2 kB +- html-attributes.md - ./osr-ai/html-attributes.md - file - text/markdown | Size : 6 B +- open-ai-test-glands-table-glands.md - ./osr-ai/open-ai-test-glands-table-glands.md - file - text/markdown | Size : 1.9 kB +- open-ai-test-glands-table.md - ./osr-ai/open-ai-test-glands-table.md - file - text/markdown | Size : 1.9 kB +- open-ai-test-svg-balls.md - ./osr-ai/open-ai-test-svg-balls.md - file - text/markdown | Size : 211 B +- open-ai-test-svg-bolts.md - ./osr-ai/open-ai-test-svg-bolts.md - file - text/markdown | Size : 553 B +- open-ai-test-svg-solarsystem.md - ./osr-ai/open-ai-test-svg-solarsystem.md - file - text/markdown | Size : 590 B +- open-ai-test.md - ./osr-ai/open-ai-test.md - file - text/markdown | Size : 1.6 kB +- open-ai-test.out.md - ./osr-ai/open-ai-test.out.md - file - text/markdown | Size : 25.3 kB +- sal-test.md - ./sal-test.md - file - text/markdown | Size : 52 B +- test.md - ./sub/test.md - file - text/markdown | Size : 0 B +- source.md - ./templates/source.md - file - text/markdown | Size : 42 B +- template.md - ./templates/template.md - file - text/markdown | Size : 31 B +- test.in.md - ./test.in.md - file - text/markdown | Size : 2.0 kB + +## Directory listing using simple glob (relative) + +- sal-test.md +- test.in.md + +## Directory listing using built in glob (absolute) + +- config.js +- constants.js +- debug.js +- Engine.js +- Gruntfile.js +- index.js +- lib.js +- library.js +- main.js +- options.js +- types.js +- _cli.js +## Embedded SVG from file + +
    + +
    + +## Embedded XLSX from file + +```js +const _path = path.resolve('./content.xlsx'); +const data = xlsx.parse(_path); +return markdownTable(data[0].data); +``` + +| Product - Data | Website | Library | Shop | Forum | Wiki | +| -------------- | -------------- | -------------- | -------------- | -------------- | -------------- | +| Authors | x | x | x | x | x | +| Gallery | oscript-widget | oscript-widget | oscript-widget | oscript-widget | oscript-widget | + +Where the JSON data looks as follows: + +```js +const data = xlsx.parse(path.resolve('./content.xlsx')); +return JSON.stringify(data,null,2); +``` + +```json +[ + { + "name": "Sheet1", + "data": [ + [ + "Product - Data", + "Website", + "Library", + "Shop", + "Forum", + "Wiki" + ], + [ + "Authors", + "x", + "x", + "x", + "x", + "x" + ], + [ + "Gallery", + "oscript-widget", + "oscript-widget", + "oscript-widget", + "oscript-widget", + "oscript-widget" + ] + ] + } +] +``` \ No newline at end of file diff --git a/packages/osrl/tests/test.in.osr b/packages/osrl/tests/test.in.osr new file mode 100644 index 00000000..31022236 --- /dev/null +++ b/packages/osrl/tests/test.in.osr @@ -0,0 +1,93 @@ +--- +permalink: /system/testosr +--- + +# Examples + +## Retrieve Environment variables + +- NUMBER_OF_PROCESSORS = [% js %] + +return os.env.get('NUMBER_OF_PROCESSORS') + // Throws an error if the DB_PASSWORD variable is not set (optional) + .required() + // Decode DB_PASSWORD from base64 to a utf8 string (optional) + // .convertFromBase64() + // Call asString (or other APIs) to get the variable value (required) + // see for more : https://github.com/evanshortiss/env-var/tree/master/lib/accessors + .asString(); +[%endjs%] + +## Directory listing using fs.iterator (provides mime and directory sizes) + +[% js %] +const _path = path.resolve('./'); +const nodes = fs.iterator('.',{matching:'*.md', + flags:fs.EIteratorFlags.MIME +}); +return nodes.items.map((e)=>{ + return `- ${e.item.name} - ${fs.slash(e.path)} - ${e.item.type} - ${e.item.mime} | Size : ${fs.sizeToString(e.item.size)}`; +}).join("\n"); +[%endjs%] + +## Directory listing using simple glob (relative) + +[% js %] +// native fast-glob +const _path = path.resolve('./'); +const nodes = fs.glob.sync('*.md'); +return nodes.map((e)=>{ + return `- ${e}` +}).join("\n"); + +[%endjs%] + +## Directory listing using built in glob (absolute) + +[% js %] +// native fast-glob +const _path = path.resolve('./'); +const nodes = fs.dir('../','*.js'); +return nodes.map((e)=>{ + // remove path.relative for absolute ! : return `${e}` + return '- ' + path.relative('../',`${e}`); +}).join("\n"); + +[%endjs%] +## Embedded SVG from file + +
    +[% js %] +// dosnt work in markdown preview on gh & gitea! +// return readFile('./product.svg'); +[%endjs%] +
    + +## Embedded XLSX from file + +```js +const _path = path.resolve('./content.xlsx'); +const data = xlsx.parse(_path); +return markdownTable(data[0].data); +``` + +[%js%] +const _path = path.resolve('./content.xlsx'); +const data = xlsx.parse(_path); +return markdownTable(data[0].data); +[%endjs%] + +Where the JSON data looks as follows: + +```js +const data = xlsx.parse(path.resolve('./content.xlsx')); +return JSON.stringify(data,null,2); +``` + +```json +[%js%] +const _path = path.resolve('./content.xlsx'); +const data = xlsx.parse(_path); +return JSON.stringify(data,null,2); +[%endjs%] +``` diff --git a/packages/osrl/tests/testGlob.sh b/packages/osrl/tests/testGlob.sh new file mode 100644 index 00000000..37ec372d --- /dev/null +++ b/packages/osrl/tests/testGlob.sh @@ -0,0 +1,3 @@ +## Test compiler with glob patters for input and outputs + +node ../main.js compile --source='./*in*.+(osr)' --output='./${SRC_NAME}.+(md)' --debug=true --language=osr diff --git a/packages/osrl/tsconfig.json b/packages/osrl/tsconfig.json new file mode 100644 index 00000000..db9d3fc9 --- /dev/null +++ b/packages/osrl/tsconfig.json @@ -0,0 +1,32 @@ +{ + "compilerOptions": { + "module": "commonjs", + "target": "es6", + "noImplicitAny": false, + "inlineSourceMap": true, + "outDir": "./.", + "allowJs": true, + "rootDir": "./src", + "lib": ["es2015", "es2016", "es2017", "dom"], + "experimentalDecorators": true, + "emitDecoratorMetadata": true, + "pretty": true, + "moduleResolution": "node", + "allowSyntheticDefaultImports": true, + "resolveJsonModule": true, + "downlevelIteration": true, + "all": true, + }, + "compileOnSave": true, + "filesGlob": [ + "./src/**/*.ts" + ], + "exclude": [ + "node_modules" + ], + "files": [ + "./src/index.ts", + "./src/main.ts", + "src/library.ts" + ] +} diff --git a/packages/osrl/tslint.json b/packages/osrl/tslint.json new file mode 100644 index 00000000..5658cba9 --- /dev/null +++ b/packages/osrl/tslint.json @@ -0,0 +1,21 @@ +{ + "extends": [ + "tslint-presets" + ], + "rules": { + "no-unused-expression": true, + "no-duplicate-variable": true, + "curly": true, + "class-name": true, + "no-var-keyword": true, + "triple-equals": true, + "semicolon":true, + "indent":false, + "no-require-imports":false, + "no-conditional-assignment":false, + "no-bitwise":false, + "no-var-requires":false, + "only-arrow-functions": false, + "no-console": false + } +} diff --git a/packages/osrl/types.d.ts b/packages/osrl/types.d.ts new file mode 100644 index 00000000..0f91acc3 --- /dev/null +++ b/packages/osrl/types.d.ts @@ -0,0 +1,270 @@ +import * as CLI from 'yargs'; +import { PATH_INFO } from '@plastichub/osr-commons'; +import { Hash } from '@plastichub/core'; +import { FS } from './liquidjs/fs/fs'; +export interface DisabledPlugins extends Hash { +} +export interface List { + [index: number]: T; + length: number; +} +export type ObjectType = { + new (): T; +} | (Function); +export type DeepPartial = { + [P in keyof T]?: DeepPartial; +}; +export interface IDelimitter { + begin: '%'; + end: '%'; +} +export type JSONPathExpression = string; +export declare enum FLAG { + /** + * Instruct for no additional extra processing + * @constant + * @type int + */ + NONE = 0, + /** + * Will instruct the pre/post processor to base-64 decode or encode + * @constant + * @type int + */ + BASE_64 = 1, + /** + * Post/Pre process the value with a user function + * @constant + * @type int + */ + USE_FUNCTION = 2, + /** + * Replace variables with local scope's variables during the post/pre process + * @constant + * @type int + */ + REPLACE_VARIABLES = 4, + /** + * Replace variables with local scope's variables during the post/pre process but evaluate the whole string + * as Javascript + * @constant + * @type int + */ + REPLACE_VARIABLES_EVALUATED = 8, + /** + * Will instruct the pre/post processor to escpape evaluated or replaced variables or expressions + * @constant + * @type int + */ + ESCAPE = 16, + /** + * Will instruct the pre/post processor to replace block calls with oridinary vanilla script + * @constant + * @type int + */ + REPLACE_BLOCK_CALLS = 32, + /** + * Will instruct the pre/post processor to remove variable delimitters/placeholders from the final string + * @constant + * @type int + */ + REMOVE_DELIMTTERS = 64, + /** + * Will instruct the pre/post processor to remove "[" ,"]" , "(" , ")" , "{", "}" , "*" , "+" , "." + * @constant + * @type int + */ + ESCAPE_SPECIAL_CHARS = 128, + /** + * Will instruct the pre/post processor to use regular expressions over string substitution + * @constant + * @type int + */ + USE_REGEX = 256, + /** + * Will instruct the pre/post processor to use Filtrex (custom bison parser, needs xexpression) over string substitution + * @constant + * @type int + */ + USE_FILTREX = 512, + /** + * Cascade entry. There are cases where #USE_FUNCTION is not enough or we'd like to avoid further type checking. + * @constant + * @type int + */ + CASCADE = 1024, + /** + * Cascade entry. There are cases where #USE_FUNCTION is not enough or we'd like to avoid further type checking. + * @constant + * @type int + */ + EXPRESSION = 2048, + /** + * Dont parse anything + * @constant + * @type int + */ + DONT_PARSE = 4096, + /** + * Convert to hex + * @constant + * @type int + */ + TO_HEX = 8192, + /** + * Convert to hex + * @constant + * @type int + */ + REPLACE_HEX = 16384, + /** + * Wait for finish + * @constant + * @type int + */ + WAIT = 32768, + /** + * Wait for finish + * @constant + * @type int + */ + DONT_ESCAPE = 65536, + /** + * Flag to mark the maximum core bit mask, after here its user land + * @constant + * @type int + */ + END = 131072 +} +export type LanguageType = "osr" | "liquid"; +export type OutputType = "html" | "md" | "raw" | "pretty"; +export interface OptionEx { + include?: string | string[]; + exclude?: string | string[]; + query?: string | string[]; +} +export interface IBaseOptions { + format?: OutputType; + language?: LanguageType; + output?: string; + cwd?: string; + env?: string; + root?: string | string[]; + profile?: IProfile; + bootstrap?: string; +} +export type IDefaultCLIArgs = CLI.Arguments & IBaseOptions & { + stdout: boolean; + variables?: any; +}; +export type IOptions = IBaseOptions & { + template?: string; + string?: string; + source?: string; + trace?: string; + logLevel?: string; + output?: string; + variables?: Hash; + cache?: boolean; + module?: string; + stdout?: boolean; + dry?: boolean; + srcInfo?: PATH_INFO; + targetInfo?: PATH_INFO; + pathVariables?: Hash; + plugins?: string[]; + alt?: boolean; + language?: string; + targetLanguage?: string; + sourceLanguage?: string; + fs?: FS; + resolve?: (file: string) => string; +}; +export interface IEnvProfile { + includes?: string[]; + variables?: Record; +} +export interface IProfile { + includes?: string[]; + variables?: Hash; + env?: Record; +} +export declare enum EType { + Number = "Number", + String = "String", + Boolean = "Boolean", + Date = "Date", + TimeStamp = "TimeStamp", + Duration = "Duration", + Url = "Url", + UrlScheme = "Url-Scheme", + Asset = "Asset", + Symbol = "Symbol", + Value = "Value", + Values = "Values", + Attribute = "Attribute", + Parameter = "Parameter", + Operation = "Operation", + ParameterOperation = "ParameterOperation", + Template = "Template", + Arguments = "Arguments" +} +export type TVector2D = [number, number]; +export type TVector3D = [number, number, number]; +export type TBBox = [TVector3D, TVector3D]; +export type TQuaternion = [number, number, number, number]; +export type TFlags = Record; +export type TExpression = string | [string | RegExp, { + [key: string]: any; +}]; +export type TOptions = { + flags?: TFlags | { + [key: string]: any; + }; +}; +export interface IUrlScheme { + url: string; + options?: { + [key: string]: any; + }; +} +export interface IAsset { + urlScheme: IUrlScheme; + options?: { + [key: string]: any; + }; +} +export type TSelector = TExpression | [TExpression, { + [key: string]: any; +}]; +export interface ITypeInfo { + type: string; + symbol: bigint; +} +export interface IRef { + key: string | string; + struct: { + [key: string]: any; + }; +} +export interface IAttribute { + type: ITypeInfo; + value: bigint; +} +export interface IParameter { + type: ITypeInfo; + value: bigint; +} +export interface IParameterOperation { + param1: bigint; + param2: bigint; + operation: bigint; +} +export type TTemplate = string | [ITypeInfo | TSelector, { + [key: string]: any; +}]; +export type TArguments = { + [key: string]: any; +} | any[]; +export * from './zod_types'; +export * from './zod_schema'; diff --git a/packages/osrl/types.js b/packages/osrl/types.js new file mode 100644 index 00000000..1522a05b --- /dev/null +++ b/packages/osrl/types.js @@ -0,0 +1,160 @@ +"use strict"; +var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { enumerable: true, get: function() { return m[k]; } }; + } + Object.defineProperty(o, k2, desc); +}) : (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +})); +var __exportStar = (this && this.__exportStar) || function(m, exports) { + for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.EType = exports.FLAG = void 0; +; +var FLAG; +(function (FLAG) { + /** + * Instruct for no additional extra processing + * @constant + * @type int + */ + FLAG[FLAG["NONE"] = 0] = "NONE"; + /** + * Will instruct the pre/post processor to base-64 decode or encode + * @constant + * @type int + */ + FLAG[FLAG["BASE_64"] = 1] = "BASE_64"; + /** + * Post/Pre process the value with a user function + * @constant + * @type int + */ + FLAG[FLAG["USE_FUNCTION"] = 2] = "USE_FUNCTION"; + /** + * Replace variables with local scope's variables during the post/pre process + * @constant + * @type int + */ + FLAG[FLAG["REPLACE_VARIABLES"] = 4] = "REPLACE_VARIABLES"; + /** + * Replace variables with local scope's variables during the post/pre process but evaluate the whole string + * as Javascript + * @constant + * @type int + */ + FLAG[FLAG["REPLACE_VARIABLES_EVALUATED"] = 8] = "REPLACE_VARIABLES_EVALUATED"; + /** + * Will instruct the pre/post processor to escpape evaluated or replaced variables or expressions + * @constant + * @type int + */ + FLAG[FLAG["ESCAPE"] = 16] = "ESCAPE"; + /** + * Will instruct the pre/post processor to replace block calls with oridinary vanilla script + * @constant + * @type int + */ + FLAG[FLAG["REPLACE_BLOCK_CALLS"] = 32] = "REPLACE_BLOCK_CALLS"; + /** + * Will instruct the pre/post processor to remove variable delimitters/placeholders from the final string + * @constant + * @type int + */ + FLAG[FLAG["REMOVE_DELIMTTERS"] = 64] = "REMOVE_DELIMTTERS"; + /** + * Will instruct the pre/post processor to remove "[" ,"]" , "(" , ")" , "{", "}" , "*" , "+" , "." + * @constant + * @type int + */ + FLAG[FLAG["ESCAPE_SPECIAL_CHARS"] = 128] = "ESCAPE_SPECIAL_CHARS"; + /** + * Will instruct the pre/post processor to use regular expressions over string substitution + * @constant + * @type int + */ + FLAG[FLAG["USE_REGEX"] = 256] = "USE_REGEX"; + /** + * Will instruct the pre/post processor to use Filtrex (custom bison parser, needs xexpression) over string substitution + * @constant + * @type int + */ + FLAG[FLAG["USE_FILTREX"] = 512] = "USE_FILTREX"; + /** + * Cascade entry. There are cases where #USE_FUNCTION is not enough or we'd like to avoid further type checking. + * @constant + * @type int + */ + FLAG[FLAG["CASCADE"] = 1024] = "CASCADE"; + /** + * Cascade entry. There are cases where #USE_FUNCTION is not enough or we'd like to avoid further type checking. + * @constant + * @type int + */ + FLAG[FLAG["EXPRESSION"] = 2048] = "EXPRESSION"; + /** + * Dont parse anything + * @constant + * @type int + */ + FLAG[FLAG["DONT_PARSE"] = 4096] = "DONT_PARSE"; + /** + * Convert to hex + * @constant + * @type int + */ + FLAG[FLAG["TO_HEX"] = 8192] = "TO_HEX"; + /** + * Convert to hex + * @constant + * @type int + */ + FLAG[FLAG["REPLACE_HEX"] = 16384] = "REPLACE_HEX"; + /** + * Wait for finish + * @constant + * @type int + */ + FLAG[FLAG["WAIT"] = 32768] = "WAIT"; + /** + * Wait for finish + * @constant + * @type int + */ + FLAG[FLAG["DONT_ESCAPE"] = 65536] = "DONT_ESCAPE"; + /** + * Flag to mark the maximum core bit mask, after here its user land + * @constant + * @type int + */ + FLAG[FLAG["END"] = 131072] = "END"; +})(FLAG = exports.FLAG || (exports.FLAG = {})); +var EType; +(function (EType) { + EType["Number"] = "Number"; + EType["String"] = "String"; + EType["Boolean"] = "Boolean"; + EType["Date"] = "Date"; + EType["TimeStamp"] = "TimeStamp"; + EType["Duration"] = "Duration"; + EType["Url"] = "Url"; + EType["UrlScheme"] = "Url-Scheme"; + EType["Asset"] = "Asset"; + EType["Symbol"] = "Symbol"; + EType["Value"] = "Value"; + EType["Values"] = "Values"; + EType["Attribute"] = "Attribute"; + EType["Parameter"] = "Parameter"; + EType["Operation"] = "Operation"; + EType["ParameterOperation"] = "ParameterOperation"; + EType["Template"] = "Template"; + EType["Arguments"] = "Arguments"; +})(EType = exports.EType || (exports.EType = {})); +__exportStar(require("./zod_types"), exports); +__exportStar(require("./zod_schema"), exports); +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJzcmMvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFNMEQsQ0FBQztBQWdCM0QsSUFBWSxJQW9IWDtBQXBIRCxXQUFZLElBQUk7SUFDZjs7OztPQUlHO0lBQ0gsK0JBQWlCLENBQUE7SUFDakI7Ozs7T0FJRztJQUNILHFDQUFvQixDQUFBO0lBQ3BCOzs7O09BSUc7SUFDSCwrQ0FBeUIsQ0FBQTtJQUN6Qjs7OztPQUlHO0lBQ0gseURBQThCLENBQUE7SUFDOUI7Ozs7O09BS0c7SUFDSCw2RUFBd0MsQ0FBQTtJQUN4Qzs7OztPQUlHO0lBQ0gsb0NBQW1CLENBQUE7SUFDbkI7Ozs7T0FJRztJQUNILDhEQUFnQyxDQUFBO0lBQ2hDOzs7O09BSUc7SUFDSCwwREFBOEIsQ0FBQTtJQUM5Qjs7OztPQUlHO0lBQ0gsaUVBQWlDLENBQUE7SUFDakM7Ozs7T0FJRztJQUNILDJDQUFzQixDQUFBO0lBQ3RCOzs7O09BSUc7SUFDSCwrQ0FBd0IsQ0FBQTtJQUN4Qjs7OztPQUlHO0lBQ0gsd0NBQW9CLENBQUE7SUFDcEI7Ozs7T0FJRztJQUNILDhDQUF1QixDQUFBO0lBQ3ZCOzs7O09BSUc7SUFDSCw4Q0FBd0IsQ0FBQTtJQUN4Qjs7OztPQUlHO0lBQ0gsc0NBQW9CLENBQUE7SUFDcEI7Ozs7T0FJRztJQUNILGlEQUF5QixDQUFBO0lBQ3pCOzs7O09BSUc7SUFDSCxtQ0FBa0IsQ0FBQTtJQUNsQjs7OztPQUlHO0lBQ0gsaURBQXlCLENBQUE7SUFDekI7Ozs7T0FJRztJQUNILGtDQUFpQixDQUFBO0FBQ2xCLENBQUMsRUFwSFcsSUFBSSxHQUFKLFlBQUksS0FBSixZQUFJLFFBb0hmO0FBNkRELElBQVksS0FvQlg7QUFwQkQsV0FBWSxLQUFLO0lBRWIsMEJBQWlCLENBQUE7SUFDakIsMEJBQWlCLENBQUE7SUFDakIsNEJBQW1CLENBQUE7SUFDbkIsc0JBQWEsQ0FBQTtJQUNiLGdDQUF1QixDQUFBO0lBQ3ZCLDhCQUFxQixDQUFBO0lBQ3JCLG9CQUFXLENBQUE7SUFDWCxpQ0FBd0IsQ0FBQTtJQUN4Qix3QkFBZSxDQUFBO0lBQ2YsMEJBQWlCLENBQUE7SUFDakIsd0JBQWUsQ0FBQTtJQUNmLDBCQUFpQixDQUFBO0lBQ2pCLGdDQUF1QixDQUFBO0lBQ3ZCLGdDQUF1QixDQUFBO0lBQ3ZCLGdDQUF1QixDQUFBO0lBQ3ZCLGtEQUF5QyxDQUFBO0lBQ3pDLDhCQUFxQixDQUFBO0lBQ3JCLGdDQUF1QixDQUFBO0FBQzNCLENBQUMsRUFwQlcsS0FBSyxHQUFMLGFBQUssS0FBTCxhQUFLLFFBb0JoQjtBQWtERCw4Q0FBMkI7QUFDM0IsK0NBQTRCIn0= \ No newline at end of file diff --git a/packages/osrl/typings.json b/packages/osrl/typings.json new file mode 100644 index 00000000..6f3b5c7f --- /dev/null +++ b/packages/osrl/typings.json @@ -0,0 +1,13 @@ +{ + "name": "gbaumgart-fs", + "dependencies": { + "denodeify": "registry:dt/denodeify#1.2.1+20160428043022", + "minimatch": "registry:npm/minimatch#3.0.0+20170119000329", + "mkdirp": "registry:npm/mkdirp#0.5.0+20160723033700", + "rimraf": "registry:npm/rimraf#2.5.0+20160723033700" + }, + "globalDependencies": { + "@xblox/core": "github:xblox/core/index.d.ts#3946eb962706f1242d78506326a097e3b07e796a", + "@xblox/fs": "github:xblox/core/index.d.ts#9d4ac2555128d4f5e28ce00d72d76df0d800778a" + } +} diff --git a/packages/osrl/vm/eval.d.ts b/packages/osrl/vm/eval.d.ts new file mode 100644 index 00000000..53a28af9 --- /dev/null +++ b/packages/osrl/vm/eval.d.ts @@ -0,0 +1 @@ +export declare const evaluate: (content: any, filename: any, scope: any, includeGlobals: any) => any; diff --git a/packages/osrl/vm/eval.js b/packages/osrl/vm/eval.js new file mode 100644 index 00000000..8063ef75 --- /dev/null +++ b/packages/osrl/vm/eval.js @@ -0,0 +1,76 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.evaluate = void 0; +const vm = require("vm"); +const isBuffer = Buffer.isBuffer; +const requireLike = require("require-like"); +function merge(a, b) { + if (!a || !b) + return a; + var keys = Object.keys(b); + for (var k, i = 0, n = keys.length; i < n; i++) { + k = keys[i]; + a[k] = b[k]; + } + return a; +} +// Return the exports/module.exports variable set in the content +// content (String|VmScript): required +const evaluate = (content, filename, scope, includeGlobals) => { + if (typeof filename !== 'string') { + if (typeof filename === 'object') { + includeGlobals = scope; + scope = filename; + filename = ''; + } + else if (typeof filename === 'boolean') { + includeGlobals = filename; + scope = {}; + filename = ''; + } + } + // Expose standard Node globals + let sandbox = {}; + let exports = {}; + let _filename = filename || module.parent.filename; + if (includeGlobals) { + merge(sandbox, global); + // console is non-enumerable in node v10 and above + sandbox.console = global.console; + // process is non-enumerable in node v12 and above + sandbox.process = global.process; + sandbox.URL = global.URL; + sandbox.require = requireLike(_filename); + } + if (typeof scope === 'object') { + merge(sandbox, scope); + } + sandbox.exports = exports; + sandbox.module = { + exports: exports, + filename: _filename, + id: _filename, + parent: module.parent, + require: sandbox.require || requireLike(_filename) + }; + sandbox.global = sandbox; + var options = { + filename: filename, + displayErrors: false + }; + if (isBuffer(content)) { + content = content.toString(); + } + // Evaluate the content with the given scope + if (typeof content === 'string') { + var stringScript = content.replace(/^\#\!.*/, ''); + var script = new vm.Script(stringScript, options); + script.runInNewContext(sandbox, options); + } + else { + content.runInNewContext(sandbox, options); + } + return sandbox.module.exports; +}; +exports.evaluate = evaluate; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZhbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy92bS9ldmFsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHlCQUF3QjtBQUN4QixNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFBO0FBQ2hDLDRDQUE2QztBQUU3QyxTQUFTLEtBQUssQ0FBRSxDQUFDLEVBQUUsQ0FBQztJQUNsQixJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUFFLE9BQU8sQ0FBQyxDQUFBO0lBQ3RCLElBQUksSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDekIsS0FBSyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDOUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQTtRQUNYLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7S0FDWjtJQUNELE9BQU8sQ0FBQyxDQUFBO0FBQ1YsQ0FBQztBQUVELGdFQUFnRTtBQUNoRSxzQ0FBc0M7QUFDL0IsTUFBTSxRQUFRLEdBQUcsQ0FBQyxPQUFPLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxjQUFjLEVBQUUsRUFBRTtJQUVuRSxJQUFJLE9BQU8sUUFBUSxLQUFLLFFBQVEsRUFBRTtRQUNoQyxJQUFJLE9BQU8sUUFBUSxLQUFLLFFBQVEsRUFBRTtZQUNoQyxjQUFjLEdBQUcsS0FBSyxDQUFBO1lBQ3RCLEtBQUssR0FBRyxRQUFRLENBQUE7WUFDaEIsUUFBUSxHQUFHLEVBQUUsQ0FBQTtTQUNkO2FBQU0sSUFBSSxPQUFPLFFBQVEsS0FBSyxTQUFTLEVBQUU7WUFDeEMsY0FBYyxHQUFHLFFBQVEsQ0FBQTtZQUN6QixLQUFLLEdBQUcsRUFBRSxDQUFBO1lBQ1YsUUFBUSxHQUFHLEVBQUUsQ0FBQTtTQUNkO0tBQ0Y7SUFFRCwrQkFBK0I7SUFDL0IsSUFBSSxPQUFPLEdBQU8sRUFBRSxDQUFBO0lBQ3BCLElBQUksT0FBTyxHQUFHLEVBQUUsQ0FBQTtJQUNoQixJQUFJLFNBQVMsR0FBRyxRQUFRLElBQUksTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUM7SUFFbkQsSUFBSSxjQUFjLEVBQUU7UUFDbEIsS0FBSyxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQTtRQUN0QixrREFBa0Q7UUFDbEQsT0FBTyxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFBO1FBQ2hDLGtEQUFrRDtRQUNsRCxPQUFPLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUE7UUFDaEMsT0FBTyxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFBO1FBQ3hCLE9BQU8sQ0FBQyxPQUFPLEdBQUcsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFBO0tBQ3pDO0lBRUQsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUU7UUFDN0IsS0FBSyxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQTtLQUN0QjtJQUVELE9BQU8sQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFBO0lBQ3pCLE9BQU8sQ0FBQyxNQUFNLEdBQUc7UUFDZixPQUFPLEVBQUUsT0FBTztRQUNoQixRQUFRLEVBQUUsU0FBUztRQUNuQixFQUFFLEVBQUUsU0FBUztRQUNiLE1BQU0sRUFBRSxNQUFNLENBQUMsTUFBTTtRQUNyQixPQUFPLEVBQUUsT0FBTyxDQUFDLE9BQU8sSUFBSSxXQUFXLENBQUMsU0FBUyxDQUFDO0tBQ25ELENBQUE7SUFDRCxPQUFPLENBQUMsTUFBTSxHQUFHLE9BQU8sQ0FBQTtJQUV4QixJQUFJLE9BQU8sR0FBRztRQUNaLFFBQVEsRUFBRSxRQUFRO1FBQ2xCLGFBQWEsRUFBRSxLQUFLO0tBQ3JCLENBQUE7SUFFRCxJQUFJLFFBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRTtRQUNyQixPQUFPLEdBQUcsT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFBO0tBQzdCO0lBRUQsNENBQTRDO0lBQzVDLElBQUksT0FBTyxPQUFPLEtBQUssUUFBUSxFQUFFO1FBQy9CLElBQUksWUFBWSxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFBO1FBQ2pELElBQUksTUFBTSxHQUFHLElBQUksRUFBRSxDQUFDLE1BQU0sQ0FBQyxZQUFZLEVBQUUsT0FBTyxDQUFDLENBQUE7UUFDakQsTUFBTSxDQUFDLGVBQWUsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUE7S0FDekM7U0FBTTtRQUNMLE9BQU8sQ0FBQyxlQUFlLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFBO0tBQzFDO0lBRUQsT0FBTyxPQUFPLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQTtBQUMvQixDQUFDLENBQUE7QUE5RFksUUFBQSxRQUFRLFlBOERwQiJ9 \ No newline at end of file diff --git a/packages/osrl/widgets/thumb.osrl b/packages/osrl/widgets/thumb.osrl new file mode 100644 index 00000000..e69de29b diff --git a/packages/osrl/zod_schema.d.ts b/packages/osrl/zod_schema.d.ts new file mode 100644 index 00000000..ad891810 --- /dev/null +++ b/packages/osrl/zod_schema.d.ts @@ -0,0 +1,103 @@ +import { z } from 'zod'; +export declare const compilerVariables: () => z.ZodObject<{ + targetLanguage: z.ZodDefault; + sourceLanguage: z.ZodDefault; + i18n: z.ZodDefault; +}, "passthrough", z.ZodTypeAny, z.objectOutputType<{ + targetLanguage: z.ZodDefault; + sourceLanguage: z.ZodDefault; + i18n: z.ZodDefault; +}, z.ZodTypeAny, "passthrough">, z.objectInputType<{ + targetLanguage: z.ZodDefault; + sourceLanguage: z.ZodDefault; + i18n: z.ZodDefault; +}, z.ZodTypeAny, "passthrough">>; +export declare const compilerOptions: () => z.ZodObject<{ + logLevel: z.ZodDefault>; + root: z.ZodDefault; + cwd: z.ZodDefault; + env: z.ZodDefault; + format: z.ZodDefault; + template: z.ZodOptional; + output: z.ZodOptional; + source: z.ZodOptional; + trace: z.ZodDefault; + language: z.ZodDefault; + profile: z.ZodDefault>; + watchContent: z.ZodDefault; + cache: z.ZodDefault; + stdout: z.ZodDefault; + module: z.ZodDefault; + variables: z.ZodDefault; + sourceLanguage: z.ZodDefault; + i18n: z.ZodDefault; + }, "passthrough", z.ZodTypeAny, z.objectOutputType<{ + targetLanguage: z.ZodDefault; + sourceLanguage: z.ZodDefault; + i18n: z.ZodDefault; + }, z.ZodTypeAny, "passthrough">, z.objectInputType<{ + targetLanguage: z.ZodDefault; + sourceLanguage: z.ZodDefault; + i18n: z.ZodDefault; + }, z.ZodTypeAny, "passthrough">>>; +}, "passthrough", z.ZodTypeAny, z.objectOutputType<{ + logLevel: z.ZodDefault>; + root: z.ZodDefault; + cwd: z.ZodDefault; + env: z.ZodDefault; + format: z.ZodDefault; + template: z.ZodOptional; + output: z.ZodOptional; + source: z.ZodOptional; + trace: z.ZodDefault; + language: z.ZodDefault; + profile: z.ZodDefault>; + watchContent: z.ZodDefault; + cache: z.ZodDefault; + stdout: z.ZodDefault; + module: z.ZodDefault; + variables: z.ZodDefault; + sourceLanguage: z.ZodDefault; + i18n: z.ZodDefault; + }, "passthrough", z.ZodTypeAny, z.objectOutputType<{ + targetLanguage: z.ZodDefault; + sourceLanguage: z.ZodDefault; + i18n: z.ZodDefault; + }, z.ZodTypeAny, "passthrough">, z.objectInputType<{ + targetLanguage: z.ZodDefault; + sourceLanguage: z.ZodDefault; + i18n: z.ZodDefault; + }, z.ZodTypeAny, "passthrough">>>; +}, z.ZodTypeAny, "passthrough">, z.objectInputType<{ + logLevel: z.ZodDefault>; + root: z.ZodDefault; + cwd: z.ZodDefault; + env: z.ZodDefault; + format: z.ZodDefault; + template: z.ZodOptional; + output: z.ZodOptional; + source: z.ZodOptional; + trace: z.ZodDefault; + language: z.ZodDefault; + profile: z.ZodDefault>; + watchContent: z.ZodDefault; + cache: z.ZodDefault; + stdout: z.ZodDefault; + module: z.ZodDefault; + variables: z.ZodDefault; + sourceLanguage: z.ZodDefault; + i18n: z.ZodDefault; + }, "passthrough", z.ZodTypeAny, z.objectOutputType<{ + targetLanguage: z.ZodDefault; + sourceLanguage: z.ZodDefault; + i18n: z.ZodDefault; + }, z.ZodTypeAny, "passthrough">, z.objectInputType<{ + targetLanguage: z.ZodDefault; + sourceLanguage: z.ZodDefault; + i18n: z.ZodDefault; + }, z.ZodTypeAny, "passthrough">>>; +}, z.ZodTypeAny, "passthrough">>; +export declare const types: () => void; diff --git a/packages/osrl/zod_schema.js b/packages/osrl/zod_schema.js new file mode 100644 index 00000000..f33f31ad --- /dev/null +++ b/packages/osrl/zod_schema.js @@ -0,0 +1,43 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.types = exports.compilerOptions = exports.compilerVariables = void 0; +const zod_1 = require("zod"); +// import { CommonLanguageCodeSchema, TargetLanguageCodeSchema } from '@plastichub/osr-i18n' +const osr_log_1 = require("@plastichub/osr-log/"); +const osr_commons_1 = require("@plastichub/osr-commons"); +//const CommonLanguageCodeSchema = z.ZodEnum<["en", "pt", "bg", "cs", "da", "de", "el", "es", "et", "fi", "fr", "hu", "id", "it", "ja", "ko", "lt", "lv", "nb", "nl", "pl", "ro", "ru", "sk", "sl", "sv", "tr", "uk", "zh"]>; +//const TargetLanguageCodeSchema = z.ZodUnion<[z.ZodEnum<["en", "pt", "bg", "cs", "da", "de", "el", "es", "et", "fi", "fr", "hu", "id", "it", "ja", "ko", "lt", "lv", "nb", "nl", "pl", "ro", "ru", "sk", "sl", "sv", "tr", "uk", "zh"]>, z.ZodEnum<["en-GB", "en-US", "pt-BR", "pt-PT"]>]>; +const compilerVariables = () => zod_1.z.object({ + targetLanguage: zod_1.z.string().default('en'), + sourceLanguage: zod_1.z.string().default('en'), + i18n: zod_1.z.string().default((0, osr_commons_1.OSR_ROOT)()), +}).passthrough(); +exports.compilerVariables = compilerVariables; +const compilerOptions = () => zod_1.z.object({ + logLevel: osr_log_1.TLogLevelNameSchema.default('info'), + root: zod_1.z.string().default(`${process.cwd()}`), + cwd: zod_1.z.string().default(`${process.cwd()}`), + env: zod_1.z.string().default('hugo-debug'), + format: zod_1.z.string().default('html'), + template: zod_1.z.string().optional().describe('Template ifle'), + output: zod_1.z.string().optional().describe('The destination file'), + source: zod_1.z.string().optional().describe('The source file'), + trace: zod_1.z.string().default("${SRC_DIR}/${SRC_NAME}-trace.json"), + language: zod_1.z.string().default('osr'), + profile: zod_1.z.string().optional().default('${OSR_ROOT}/osr-templates/osrl/.osrl.json'), + watchContent: zod_1.z.boolean().default(false), + cache: zod_1.z.boolean().default(true), + stdout: zod_1.z.boolean().default(false), + module: zod_1.z.string().default('osr-module'), + variables: (0, exports.compilerVariables)().default({ + targetLanguage: 'en', + sourceLanguage: 'en', + i18n: (0, osr_commons_1.OSR_ROOT)() + }), +}, { description: 'ICompileOptions' }).passthrough(); +exports.compilerOptions = compilerOptions; +const types = () => (0, osr_commons_1.generate_interfaces)([ + (0, exports.compilerOptions)() +], 'src/zod_types.ts'); +exports.types = types; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiem9kX3NjaGVtYS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInNyYy96b2Rfc2NoZW1hLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDZCQUF1QjtBQUV2Qiw0RkFBNEY7QUFDNUYsa0RBQTBEO0FBQzFELHlEQUF1RTtBQUV2RSw2TkFBNk47QUFDN04sNFJBQTRSO0FBRXJSLE1BQU0saUJBQWlCLEdBQUcsR0FBRyxFQUFFLENBQUMsT0FBQyxDQUFDLE1BQU0sQ0FBQztJQUM1QyxjQUFjLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7SUFDeEMsY0FBYyxFQUFFLE9BQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO0lBQ3hDLElBQUksRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUEsc0JBQVEsR0FBRSxDQUFDO0NBQ3ZDLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQTtBQUpILFFBQUEsaUJBQWlCLHFCQUlkO0FBRVQsTUFBTSxlQUFlLEdBQUcsR0FBRyxFQUFFLENBQUMsT0FBQyxDQUFDLE1BQU0sQ0FBQztJQUMxQyxRQUFRLEVBQUUsNkJBQW1CLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQztJQUM3QyxJQUFJLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLE9BQU8sQ0FBQyxHQUFHLE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDO0lBQzVDLEdBQUcsRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsT0FBTyxDQUFDLEdBQUcsT0FBTyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUM7SUFDM0MsR0FBRyxFQUFFLE9BQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDO0lBQ3JDLE1BQU0sRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQztJQUNsQyxRQUFRLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUM7SUFDekQsTUFBTSxFQUFFLE9BQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLENBQUMsc0JBQXNCLENBQUM7SUFDOUQsTUFBTSxFQUFFLE9BQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLENBQUMsaUJBQWlCLENBQUM7SUFDekQsS0FBSyxFQUFFLE9BQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxPQUFPLENBQUMsbUNBQW1DLENBQUM7SUFDOUQsUUFBUSxFQUFFLE9BQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO0lBQ25DLE9BQU8sRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsT0FBTyxDQUFDLDJDQUEyQyxDQUFDO0lBQ25GLFlBQVksRUFBRSxPQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztJQUN4QyxLQUFLLEVBQUUsT0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7SUFDaEMsTUFBTSxFQUFFLE9BQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO0lBQ2xDLE1BQU0sRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQztJQUN4QyxTQUFTLEVBQUUsSUFBQSx5QkFBaUIsR0FBRSxDQUFDLE9BQU8sQ0FBQztRQUNuQyxjQUFjLEVBQUUsSUFBSTtRQUNwQixjQUFjLEVBQUUsSUFBSTtRQUNwQixJQUFJLEVBQUUsSUFBQSxzQkFBUSxHQUFFO0tBQ25CLENBQUM7Q0FDTCxFQUFFLEVBQUUsV0FBVyxFQUFFLGlCQUFpQixFQUFFLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQTtBQXJCdkMsUUFBQSxlQUFlLG1CQXFCd0I7QUFFN0MsTUFBTSxLQUFLLEdBQUcsR0FBRyxFQUFFLENBQUMsSUFBQSxpQ0FBbUIsRUFDMUM7SUFDSSxJQUFBLHVCQUFlLEdBQUU7Q0FDcEIsRUFBRSxrQkFBa0IsQ0FBQyxDQUFBO0FBSGIsUUFBQSxLQUFLLFNBR1EifQ== \ No newline at end of file diff --git a/packages/osrl/zod_types.d.ts b/packages/osrl/zod_types.d.ts new file mode 100644 index 00000000..a9357b38 --- /dev/null +++ b/packages/osrl/zod_types.d.ts @@ -0,0 +1,27 @@ +export interface ICompileOptions { + logLevel?: "silly" | "trace" | "debug" | "info" | "warn" | "error" | "fatal"; + root?: string; + cwd?: string; + env?: string; + format?: string; + /** Template ifle */ + template?: string | undefined; + /** The destination file */ + output?: string | undefined; + /** The source file */ + source?: string | undefined; + trace?: string; + language?: string; + profile?: string; + watchContent?: boolean; + cache?: boolean; + stdout?: boolean; + module?: string; + variables?: { + targetLanguage?: "en" | "pt" | "bg" | "cs" | "da" | "de" | "el" | "es" | "et" | "fi" | "fr" | "hu" | "id" | "it" | "ja" | "ko" | "lt" | "lv" | "nb" | "nl" | "pl" | "ro" | "ru" | "sk" | "sl" | "sv" | "tr" | "uk" | "zh"; + sourceLanguage?: ("en" | "pt" | "bg" | "cs" | "da" | "de" | "el" | "es" | "et" | "fi" | "fr" | "hu" | "id" | "it" | "ja" | "ko" | "lt" | "lv" | "nb" | "nl" | "pl" | "ro" | "ru" | "sk" | "sl" | "sv" | "tr" | "uk" | "zh") | ("en-GB" | "en-US" | "pt-BR" | "pt-PT"); + i18n?: string; + } & { + [x: string]: any; + }; +} diff --git a/packages/osrl/zod_types.js b/packages/osrl/zod_types.js new file mode 100644 index 00000000..6a84cdef --- /dev/null +++ b/packages/osrl/zod_types.js @@ -0,0 +1,3 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiem9kX3R5cGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsic3JjL3pvZF90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIn0= \ No newline at end of file