diff --git a/AUTHORS.md b/AUTHORS.md new file mode 100644 index 0000000..4943dae --- /dev/null +++ b/AUTHORS.md @@ -0,0 +1,5 @@ +# Terrace Language Authors + +As an MIT-licensed opensource project, a number of voluntary contributors may have a hand in contributing code, documentation, and other copyrightable materials. + +We canno diff --git a/LICENSE.md b/LICENSE.md new file mode 100644 index 0000000..77fabd0 --- /dev/null +++ b/LICENSE.md @@ -0,0 +1,19 @@ +Copyright (c) 2022-present Joshua Michael Bemenderfer + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/docs/src/docs/c.tce b/docs/src/docs/c.tce index b403ae0..dc5b45d 100644 --- a/docs/src/docs/c.tce +++ b/docs/src/docs/c.tce @@ -16,8 +16,8 @@ Section light Markdown Documentation is available for the following languages: - - [C](/docs/c/) - 10% Complete - - [JavaScript](/docs/javascript/) - 50% Complete + - [C](/docs/c/) - 75% Complete + - [JavaScript](/docs/javascript/) - 75% Complete - [Python](/docs/python/) - 0% Complete Heading 2 Getting Started @@ -81,9 +81,18 @@ Section light Heading 2 Core API class mt-12 + Markdown + **Note:** The Core API is designed for maximum portability and is not intended to be directly consumed. + + For most projects you'll want to use the [Document API](#document-api) instead. + It provides an ergonomic wrapper around the Core API and lets you focus on parsing + your documents. Heading 3 terrace_linedata_t - class my-6 + class mb-4 mt-12 + Markdown + This struct holds information about each line as it is parsed. Mutated each time [terrace_parse_line()](#terrace-parse-line) is called. Not intended to be used directly. + Use the relevant `terrace_` functions from the [Document API](#document-api) instead. CodeBlock c // Holds the parsed information from each line. typedef struct terrace_linedata_s { @@ -98,10 +107,248 @@ Section light unsigned int offsetTail; } terrace_linedata_t; - Heading 3 terrace_parse_line() - class my-6 + Heading 3 terrace_create_linedata() + class mb-4 mt-12 + Markdown + | Parameter | Type | Description + | -------------- | --------------------- | ----------------------------------------------------------------------- + | indent | const char | The character used for indentation in the document. Only a single character is permitted. + | **@returns** | [terrace_linedata_t](#terrace-linedatat) | A terrace_linedata_t struct with the specified indent character and all other values initialized to 0. + + Initialize a [terrace_linedata](#terrace-linedatat) struct with default values to pass to [terrace_parse_line()](#terrace-parse-line). CodeBlock c - void terrace_parse_line(char* line, terrace_linedata_t *lineData) + // Call Signature + terrace_linedata_t terrace_create_linedata(const char indent) + Heading 3 terrace_parse_line() + class mb-4 mt-12 + Markdown + | Parameter | Type | Description + | -------------- | --------------------- | ----------------------------------------------------------------------- + | line | char* | A pointer to the line to parse as a C-style string. Shouldn't end with a newline. + | lineData | [terrace_linedata_t](#terrace-linedatat)* | A pointer to the terrace_linedata_t struct to store information about the current line in. + + Core Terrace parser function, sets `level`, `offsetHead`, and `offsetTail` in a [terrace_linedata](#terrace-linedatat) struct based on the current line. + CodeBlock c + // Call Signature + void terrace_parse_line(const char* line, terrace_linedata_t* lineData) + + Heading 2 Document API + class mt-12 + + Heading 3 terrace_document_t + class mb-4 mt-12 + Markdown + Tracks state of a document while being parsed. + Obtained from [terrace_create_document()](#terrace-create-document) below + CodeBlock c + // Type Definition + typedef struct terrace_document_s { + // == Internal State == // + unsigned int _repeatCurrentLine; + // Current line being read + char* _currentLine; + + // == External Information == // + // Embedded line data struct. Holds information about the current parsed line + terrace_linedata_t lineData; + // Custom data passed to the readline function + void* userData; + /** + * Line reader function, provided by the user + * Needed to get the next line inside of `terrace_next(doc)` + * @param {char**} line First argument is a pointer to `_currentLine`, above + * @param {void*} userData Second argument is `userData`, above + * @returns {int} The number of characters read, or -1 if no characters were read. + */ + int (*reader)(char** line, void* userData); + } terrace_document_t; + + Heading 3 terrace_create_document() + class mb-4 mt-12 + Markdown + | Parameter | Type | Description + | -------------- | --------------------- | ----------------------------------------------------------------------- + | indent | const char | The indent character to use. Generally a single space character. + | reader | int (\*reader)(char** line, void* userData) | A function pointer to a function that reads lines sequentially from a user-provided source. Receives a pointer to `lineData->_currLine`, and `userData`, supplied in the next argument. + | userData | void * | A user-supplied pointer to any state information needed by their reader function. Passed to `reader`each time it is called. + | **@returns** | [terrace_document_t](#terrace-documentt) | A state struct needed by the convenience functions below. + + Initializes the state needed for the convenience functions below. Takes a user-supplied `reader` function to read each line from a user-determined source. + CodeBlock c + // Call Signature + terrace_document_t terrace_create_document(const char indent, int (*reader)(char** line, void* userData), void* userData) + + Heading 3 terrace_next() + class mb-4 mt-12 + + Markdown + | Parameter | Type | Description + | -------------- | --------------------- | ----------------------------------------------------------------------- + | doc | [terrace_document_t*](#terrace-documentt) | A pointer to the current document state struct. + | levelScope | int | If set above -1, `next()` will return `0` when it encounters a line with a level at or below `levelScope` + | **@returns** | char | Returns `1` after parsing a line, or `0` if the document has ended or a line at or below `levelScope` has been encountered. + + Advances the current position in the terrace document and populates lineData + with the parsed information from that line. + + Returns `1` after parsing the next line, or `0` upon reaching the end of the document. + If the `levelScope` parameter is not -1, `terrace_next()` will also return `0` when it encounters a line + with a level at or below `levelScope`. This allows you to iterate through subsections of a document. + + If a lower-level line was encountered, the following call to `terrace_next()` will repeat this line again. + This allows a child loop to look forward, determine that the next line will be outside its purview, + and return control to the calling loop transparently without additional logic. + + Intended to be used inside a while loop to parse a section of a Terrace document. + + CodeBlock c + // Call Signature + char terrace_next(terrace_document_t* doc, int levelScope) + + // Usage + while(terrace_next(doc, -1)) { + // Do something with each line. + } + + Heading 3 terrace_level() + class mb-4 mt-12 + Markdown + | Parameter | Type | Description + | -------------- | --------------------- | ----------------------------------------------------------------------- + | doc | [terrace_document_t*](#terrace-documentt) | A pointer to the current document state struct. + | **@returns** | unsigned int | The indent level of the current line + + Returns the number of indent characters of the current line. + + Given the following document, `terrace_level(doc)` would return 0, 1, 2, and 5 respectively for each line. + CodeBlock terrace + block + block + block + block + + CodeBlock c + // Call Signature + unsigned int terrace_level(terrace_document_t* doc) + + // Usage + while(terrace_next(doc, -1)) { + printf("Indent Level: %u", terrace_level(doc)); + } + + Heading 3 terrace_line() + class mb-4 mt-12 + Markdown + | Parameter | Type | Description + | -------------- | --------------------- | ----------------------------------------------------------------------- + | doc | [terrace_document_t*](#terrace-documentt) | A pointer to the current document state struct. + | startOffset | int | How many indent characters to skip before outputting the line contents. If set to -1, uses the current indent level. + | **@returns** | char* | The line contents starting from `startOffset` + + Get a string with the current line contents. + If `startOffset` is -1, skips all indent characters by default. Otherwise only skips the amount specified. + + Given the following document + CodeBlock terrace + root + sub-line + Markdown + - Calling `terrace_line(doc, -1)` on the second line returns "sub-line", trimming off the leading indent characters. + - Calling `terrace_line(doc, 0)` however, returns "    sub-line", with all four leading spaces. + + `startOffset`s other than `-1` are primarily used for parsing blocks that have literal indented multi-line text + + CodeBlock c + // Call Signature + char* terrace_line(terrace_document_t* doc, int startOffset) + + // Usage + while(terrace_next(doc, -1)) { + printf("Line with indent characters: %s", terrace_line(doc, 0)); + printf("Line without indent characters: %s", terrace_line(doc, -1)); + } + + Heading 3 terrace_head_length() + class mb-4 mt-12 + Markdown + | Parameter | Type | Description + | -------------- | --------------------- | ----------------------------------------------------------------------- + | doc | [terrace_document_t*](#terrace-documentt) | A pointer to the current document state struct. + | **@returns** | unsigned int | The length of the `head` portion (first word) of a line + + Get the *length* of the first "word" of a line, + starting from the first non-indent character to the first space or end of the line + Often used for deciding how to parse a block. + + Because C uses NULL-terminated strings, we cannot easily slice a string to return something out of the middle. + Instead, `terrace_head_length()` provides the length of the head portion. + In combination with `doc->lineData.offsetHead`, you can copy the head section into a new string, + or use any number of `strn*` C stdlib functions to work with the head section without copying it. + + Terrace DSLs do not *need* to use head-tail line structure, but support for them is built into the parser + + Given the following line, `terrace_head_length(doc)` returns `5` + CodeBlock terrace + title An Important Document + CodeBlock c + // Call Signature + unsigned int terrace_head_length(terrace_document_t* doc) + + // Usage + while(terrace_next(doc, -1)) { + printf("Head length: %u", terrace_head_length(doc)); + } + + Heading 3 terrace_tail() + class mb-4 mt-12 + Markdown + | Parameter | Type | Description + | -------------- | --------------------- | ----------------------------------------------------------------------- + | doc | [terrace_document_t*](#terrace-documentt) | A pointer to the current document state struct. + | **@returns** | char* | The remainder of the line following the `head` portion, with no leading space. + + Get a char pointer to everything following the first "word" of a line, + starting from the first character after the space at the end of `head`. + + Terrace DSLs do not *need* to use head-tail line structure, but support for them is built into the parser + + Given the following line, `terrace_tail(doc)` returns "An Important Document" + CodeBlock terrace + title An Important Document + CodeBlock c + // Call Signature + char* terrace_tail(terrace_document_t* doc) + + // Usage + while(terrace_next(doc, -1)) { + printf("Line tail: %s", terrace_tail(doc)); + } + + Heading 3 terrace_match() + class mb-4 mt-12 + Markdown + | Parameter | Type | Description + | -------------- | --------------------- | ----------------------------------------------------------------------- + | doc | [terrace_document_t*](#terrace-documentt) | A pointer to the current document state struct. + | matchValue | const char* | A string to check against the line `head` for equality. + | **@returns** | char | A byte set to `0` if the head does not match, or `1`if it does match. + + Quickly check if the current line head matches a specified value. Useful in many document-parsing situations. + + Given the following line: + CodeBlock terrace + title An Important Document + Markdown + - `terrace_match(doc, "title")` returns `1` + - `terrace_match(doc, "somethingElse")` returns `0` + CodeBlock c + // Call Signature + char terrace_match(terrace_document_t* doc, const char* matchHead) + + // Usage + while(terrace_next(doc, -1)) { + printf("Does the line start with 'title': %d", terrace_match(doc, "title")); + } Heading 2 Recipes class mt-12 diff --git a/docs/src/docs/javascript.tce b/docs/src/docs/javascript.tce index 5b0f84e..a80ca21 100644 --- a/docs/src/docs/javascript.tce +++ b/docs/src/docs/javascript.tce @@ -16,7 +16,7 @@ Section light Markdown Documentation is available for the following languages: - - [C](/docs/c/) - 10% Complete + - [C](/docs/c/) - 75% Complete - [JavaScript](/docs/javascript/) - 75% Complete - [Python](/docs/python/) - 0% Complete diff --git a/packages/c/document.h b/packages/c/document.h index 6e6998c..83db687 100644 --- a/packages/c/document.h +++ b/packages/c/document.h @@ -3,6 +3,7 @@ #include "parser.h" +// Tracks state of a given while being parsed. typedef struct terrace_document_s { // == Internal State == // unsigned int _repeatCurrentLine; @@ -37,7 +38,7 @@ terrace_document_t terrace_create_document(const char indent, int (*reader)(char terrace_document_t document = { ._repeatCurrentLine = 0, ._currentLine = 0, - .lineData = terrace_create_line_data(indent), + .lineData = terrace_create_linedata(indent), .reader = reader, .userData = userData }; @@ -56,6 +57,7 @@ terrace_document_t terrace_create_document(const char indent, int (*reader)(char * block * block * ``` + * @param {terrace_document_t*} doc A pointer to the Terrace document being parsed * @returns {unsigned int} The indent level of the current line */ unsigned int terrace_level(terrace_document_t* doc) { @@ -64,7 +66,7 @@ unsigned int terrace_level(terrace_document_t* doc) { /** * Get a string with the current line contents - * If `startOffset` is -1, skips all indent characters by default. Otherwise only skips the amount specified + * If `startOffset` is -1, skips all indent characters by default. Otherwise only skips the amount specified. * * Given the following document * @@ -78,7 +80,7 @@ unsigned int terrace_level(terrace_document_t* doc) { * `startOffset`s other than `-1` are primarily used for parsing blocks that have literal indented multi-line text * * @param {terrace_document_t*} doc A pointer to the Terrace document being parsed - * @param {int} startOffset How many indent characters to skip before outputting the line contents. Defaults to the current indent level + * @param {int} startOffset How many indent characters to skip before outputting the line contents. If set to -1, uses the current indent level. * @returns {char*} The line contents starting from `startOffset` */ char* terrace_line(terrace_document_t* doc, int startOffset) { @@ -92,7 +94,7 @@ char* terrace_line(terrace_document_t* doc, int startOffset) { * Often used for deciding how to parse a block. * * Because C uses NULL-terminated strings, we cannot easily slice a string to return something out of the middle. - * Instead, `terrace_head_length` provides the length of the head portion. + * Instead, `terrace_head_length()` provides the length of the head portion. * In combination with `doc->lineData.offsetHead`, you can copy the head section into a new string, * or use any number of `strn*` C stdlib functions to work with the head section without copying it. * @@ -103,16 +105,16 @@ char* terrace_line(terrace_document_t* doc, int startOffset) { * ```terrace * title An Important Document * ``` - * @param {terrace_document_t*} doc A pointer to the Terrace document being parsed + * @param {terrace_document_t*} doc A pointer to the current document state struct. * @returns {int} The length of the `head` portion (first word) of a line */ -int terrace_head_length(terrace_document_t* doc) { +unsigned int terrace_head_length(terrace_document_t* doc) { return doc->lineData.offsetTail - doc->lineData.offsetHead; } /** * Get a char pointer to everything following the first "word" of a line, - * starting from the first character after the space at the end of `head` + * starting from the first character after the space at the end of `head`. * * Terrace DSLs do not *need* to use head-tail line structure, but support for them is built into the parser * @@ -121,8 +123,8 @@ int terrace_head_length(terrace_document_t* doc) { * ```terrace * title An Important Document * ``` - * @param {terrace_document_t*} doc A pointer to the Terrace document being parsed - * @returns {char*} The remainder of the line following the `head` portion, with no leading space + * @param {terrace_document_t*} doc A pointer to the current document state struct. + * @returns {char*} The remainder of the line following the `head` portion, with no leading space. */ char* terrace_tail(terrace_document_t* doc) { return doc->_currentLine + doc->lineData.offsetTail + 1; @@ -131,7 +133,7 @@ char* terrace_tail(terrace_document_t* doc) { /** * Quickly check if the current line head matches a specified value. Useful in many document-parsing situations. * - * Given the following line + * Given the following line: * * ```terrace * title An Important Document @@ -140,8 +142,9 @@ char* terrace_tail(terrace_document_t* doc) { * `terrace_match(doc, "title")` returns `1` * `terrace_match(doc, "somethingElse") returns `0` * - * @param {const char*} matchValue A string to check against the line `head` for equality - * @returns {char} A byte set to 0 if the head does not match, or 1 if it does match + * @param {terrace_document_t*} doc A pointer to the current document state struct. + * @param {const char*} matchValue A string to check against the line `head` for equality. + * @returns {char} A byte set to 0 if the head does not match, or 1 if it does match. */ char terrace_match(terrace_document_t* doc, const char* matchHead) { // Get a pointer to the start of the head portion of the string. @@ -168,7 +171,7 @@ char terrace_match(terrace_document_t* doc, const char* matchHead) { * If the `levelScope` parameter is not -1, `terrace_next()` will also return `0` when it encounters a line * with a level at or below `levelScope`. This allows you to iterate through subsections of a document. * - * If a lower-level line was encountered, the following call to `next()` will repeat this line again. + * If a lower-level line was encountered, the following call to `terrace_next()` will repeat this line again. * This allows a child loop to look forward, determine that the next line will be outside its purview, * and return control to the calling loop transparently without additional logic. * @@ -179,7 +182,7 @@ char terrace_match(terrace_document_t* doc, const char* matchHead) { * // Do something with each line. * } * ``` - * + * @param {terrace_document_t*} doc A pointer to the current document state struct. * @param {number} levelScope If set above -1, `next()` will return `0` when it encounters a line with a level at or below `levelScope` * @returns {char} Returns `1` after parsing a line, or `0` if the document has ended or a line at or below `levelScope` has been encountered. */ @@ -209,4 +212,4 @@ char terrace_next(terrace_document_t* doc, int levelScope) { return 1; } -#endif \ No newline at end of file +#endif diff --git a/packages/c/parser.h b/packages/c/parser.h index 1a86ad8..1d4eb05 100644 --- a/packages/c/parser.h +++ b/packages/c/parser.h @@ -14,17 +14,22 @@ typedef struct terrace_linedata_s { unsigned int offsetTail; } terrace_linedata_t; -terrace_linedata_t terrace_create_line_data(const char indent) { +/** + * Initialize a terrace_linedata struct with default values to pass to terrace_parse_line() + * @param {const char} indent The character to use for indenting lines. ONLY ONE CHARACTER IS CURRENTLY PERMITTED. + * @returns {terrace_linedata_t} A linedata struct with the specified indent character and all other values initialized to 0. + */ +terrace_linedata_t terrace_create_linedata(const char indent) { terrace_linedata_t line_data = { .indent = indent, .level = 0, .offsetHead = 0, .offsetTail = 0 }; return line_data; } /** - * Core Terrace parser function, sets level, offsetHead, and offsetTail in a lineData struct based on the current line. + * Core Terrace parser function, sets level, offsetHead, and offsetTail in a terrace_linedata struct based on the current line. * @param char* line A pointer to the line to parse as a C-style string. Shouldn't end with a newline. * @param terrace_linedata_t* lineData A pointer to the terrace_linedata_t struct to store information about the current line in. */ -void terrace_parse_line(const char *line, terrace_linedata_t *lineData) { +void terrace_parse_line(const char* line, terrace_linedata_t* lineData) { // Empty lines are nullptr/0 as they have no characters. (The newline character should be stripped off.) // Special case handling for these allows them to be parsed extra quickly. if (!line) { diff --git a/packages/c/test/test-runner.c b/packages/c/test/test-runner.c index 966b577..034395e 100644 --- a/packages/c/test/test-runner.c +++ b/packages/c/test/test-runner.c @@ -9,7 +9,7 @@ void linedata_basic (char indent) { size_t bufsize = 32; ssize_t c_read = 0; - terrace_linedata_t line_data = terrace_create_line_data(indent); + terrace_linedata_t line_data = terrace_create_linedata(indent); while(c_read = getline(&line, &bufsize, stdin)) { if (c_read == -1) break; @@ -28,7 +28,7 @@ void linedata_head_tail (char indent) { size_t bufsize = 32; ssize_t c_read = 0; - terrace_linedata_t line_data = terrace_create_line_data(indent); + terrace_linedata_t line_data = terrace_create_linedata(indent); char *head; char *tail; diff --git a/packages/js/LICENSE.md b/packages/js/LICENSE.md index 27fce7b..77fabd0 100644 --- a/packages/js/LICENSE.md +++ b/packages/js/LICENSE.md @@ -1,6 +1,4 @@ -MIT License - -Copyright (c) 2022 Joshua Michael Bemenderfer +Copyright (c) 2022-present Joshua Michael Bemenderfer Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal @@ -18,4 +16,4 @@ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. \ No newline at end of file +SOFTWARE. diff --git a/packages/js/package.json b/packages/js/package.json index 883483e..742e6b6 100644 --- a/packages/js/package.json +++ b/packages/js/package.json @@ -1,37 +1,41 @@ { "name": "@terrace-lang/js", - "version": "0.0.1", + "description": "Terrace is a simple structured data syntax for configuration, content authoring, and DSLs.", + "version": "0.1.0", "license": "MIT", - "type": "module", + "repository": { + "type": "git", + "url": "https://github.com/terrace-lang/terrace.git", + "directory": "packages/js" + }, + "bugs": "https://github.com/terrace-lang/terrace/issues", + "homepage": "https://terrace-lang.org", + "types": "./dist/types/index.d.ts", "exports": { - ".": { - "import": "./dist/index.js", - "require": "./dist/index.cjs" - }, - "./parser": { - "import": "./dist/parser.js", - "require": "./dist/parser.cjs" - }, - "./document": { - "import": "./dist/document.js", - "require": "./dist/document.cjs" - }, - "./readers/node-readline": { - "import": "./dist/readers/node-readline.js", - "require": "./dist/readers/node-readline.cjs" - }, - "./readers/js-string": { - "import": "./dist/readers/js-string.js", - "require": "./dist/readers/js-string.cjs" + "./*": { + "types": "./dist/types/*.d.ts", + "import": "./dist/esm/*.js", + "require": "./dist/cjs/*.js" } }, "scripts": { "test": "node ./test/index.js", - "dev": "vite build --watch", - "build": "vite build" + "dev": "run-p dev:*", + "dev:esm": "tsc --watch --project ./tsconfig.esm.json", + "dev:cjs": "tsc --watch --project ./tsconfig.cjs.json", + "dev:types": "tsc --watch --project ./tsconfig.types.json", + "build": "run-p build:*", + "build:esm": "tsc --project ./tsconfig.esm.json", + "build:cjs": "tsc --project ./tsconfig.cjs.json", + "build:types": "tsc --project ./tsconfig.types.json" }, "devDependencies": { - "vite": "^3.2.3", - "vitest": "^0.24.5" + "@types/node": "^18.14.0", + "npm-run-all": "^4.1.5", + "typescript": "^4.9.5" + }, + "engines": { + "node": ">=17.0.0", + "npm": ">=7.0.0" } } diff --git a/packages/js/src/document.ts b/packages/js/src/document.ts index f8ab10a..24248c1 100644 --- a/packages/js/src/document.ts +++ b/packages/js/src/document.ts @@ -1,5 +1,5 @@ -import type { Reader } from './readers/reader' -import { createLineData, parseLine } from './parser' +import type { Reader } from './readers/reader.js' +import { createLineData, parseLine } from './parser.js' // Container for a handful of convenience functions for parsing documents // Obtained from useDocument() below diff --git a/packages/js/src/index.ts b/packages/js/src/index.ts index d39a937..85a0529 100644 --- a/packages/js/src/index.ts +++ b/packages/js/src/index.ts @@ -1,2 +1,2 @@ -export * from './parser' -export * from './document' +export * from './parser.js' +export * from './document.js' diff --git a/packages/js/src/readers/js-string.ts b/packages/js/src/readers/js-string.ts index d8deda3..02357d6 100644 --- a/packages/js/src/readers/js-string.ts +++ b/packages/js/src/readers/js-string.ts @@ -1,4 +1,4 @@ -import type { Reader } from './reader' +import type { Reader } from './reader.js' /** * Get a simple `Reader` function that always returns the next line diff --git a/packages/js/src/readers/node-readline.ts b/packages/js/src/readers/node-readline.ts index 3afbb61..96b3cd9 100644 --- a/packages/js/src/readers/node-readline.ts +++ b/packages/js/src/readers/node-readline.ts @@ -1,6 +1,6 @@ -import fs from 'node:fs' -import readline from 'node:readline/promises' -import type { Reader } from './reader' +import fs from 'fs' +import readline from 'readline/promises' +import type { Reader } from './reader.js' /** diff --git a/packages/js/tsconfig.json b/packages/js/tsconfig.base.json similarity index 56% rename from packages/js/tsconfig.json rename to packages/js/tsconfig.base.json index a59145e..ceb34b2 100644 --- a/packages/js/tsconfig.json +++ b/packages/js/tsconfig.base.json @@ -1,18 +1,11 @@ { - "$schema": "https://json.schemastore.org/tsconfig", "display": "Node 18", - + "include": ["index.d.ts", "src/**/*"], "compilerOptions": { - "lib": ["ES2022"], - "module": "ES2022", - "target": "ES2022", - "moduleResolution": "node", - "strict": true, "esModuleInterop": true, "skipLibCheck": true, + "moduleResolution": "node", "forceConsistentCasingInFileNames": true - }, - - "include": ["src/**/*"] + } } diff --git a/packages/js/tsconfig.cjs.json b/packages/js/tsconfig.cjs.json new file mode 100644 index 0000000..4d1a971 --- /dev/null +++ b/packages/js/tsconfig.cjs.json @@ -0,0 +1,8 @@ +{ + "extends": "./tsconfig.base.json", + "compilerOptions": { + "module": "CommonJS", + "target": "ES2020", + "outDir": "./dist/cjs/", + } +} diff --git a/packages/js/tsconfig.esm.json b/packages/js/tsconfig.esm.json new file mode 100644 index 0000000..d1b40cf --- /dev/null +++ b/packages/js/tsconfig.esm.json @@ -0,0 +1,8 @@ +{ + "extends": "./tsconfig.base.json", + "compilerOptions": { + "module": "ES2020", + "target": "ES2020", + "outDir": "./dist/esm/", + } +} diff --git a/packages/js/tsconfig.types.json b/packages/js/tsconfig.types.json new file mode 100644 index 0000000..75898d9 --- /dev/null +++ b/packages/js/tsconfig.types.json @@ -0,0 +1,9 @@ +{ + "extends": "./tsconfig.base.json", + "compilerOptions": { + "emitDeclarationOnly": true, + "declaration": true, + "declarationMap": true, + "declarationDir": "./dist/types", + } +} diff --git a/packages/js/vite.config.js b/packages/js/vite.config.js deleted file mode 100644 index 34ce39a..0000000 --- a/packages/js/vite.config.js +++ /dev/null @@ -1,23 +0,0 @@ -// vite.config.js -import { defineConfig } from 'vite' - -export default defineConfig({ - build: { - lib: { - // Could also be a dictionary or array of multiple entry points - entry: { - 'index': 'src/index.ts', - 'document': 'src/document.ts', - 'parser': 'src/parser.ts', - 'readers/js-string': 'src/readers/js-string.ts', - 'readers/node-readline': 'src/readers/node-readline.ts', - } - }, - rollupOptions: { - external: [ - `node:fs`, - `node:readline/promises` - ] - } - } -}) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 194ed5a..fc62515 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -45,11 +45,13 @@ importers: packages/js: specifiers: - vite: ^3.2.3 - vitest: ^0.24.5 + '@types/node': ^18.14.0 + npm-run-all: ^4.1.5 + typescript: ^4.9.5 devDependencies: - vite: 3.2.5 - vitest: 0.24.5 + '@types/node': 18.14.0 + npm-run-all: 4.1.5 + typescript: 4.9.5 packages/python: specifiers: {} @@ -791,7 +793,7 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.4.1 - '@types/node': 18.11.18 + '@types/node': 18.14.0 chalk: 4.1.2 jest-message-util: 29.4.1 jest-util: 29.4.1 @@ -812,14 +814,14 @@ packages: '@jest/test-result': 29.4.1 '@jest/transform': 29.4.1 '@jest/types': 29.4.1 - '@types/node': 18.11.18 + '@types/node': 18.14.0 ansi-escapes: 4.3.2 chalk: 4.1.2 ci-info: 3.7.1 exit: 0.1.2 graceful-fs: 4.2.10 jest-changed-files: 29.4.0 - jest-config: 29.4.1_@types+node@18.11.18 + jest-config: 29.4.1_@types+node@18.14.0 jest-haste-map: 29.4.1 jest-message-util: 29.4.1 jest-regex-util: 29.2.0 @@ -846,7 +848,7 @@ packages: dependencies: '@jest/fake-timers': 29.4.1 '@jest/types': 29.4.1 - '@types/node': 18.11.18 + '@types/node': 18.14.0 jest-mock: 29.4.1 dev: true @@ -873,7 +875,7 @@ packages: dependencies: '@jest/types': 29.4.1 '@sinonjs/fake-timers': 10.0.2 - '@types/node': 18.11.18 + '@types/node': 18.14.0 jest-message-util: 29.4.1 jest-mock: 29.4.1 jest-util: 29.4.1 @@ -906,7 +908,7 @@ packages: '@jest/transform': 29.4.1 '@jest/types': 29.4.1 '@jridgewell/trace-mapping': 0.3.17 - '@types/node': 18.11.18 + '@types/node': 18.14.0 chalk: 4.1.2 collect-v8-coverage: 1.0.1 exit: 0.1.2 @@ -994,7 +996,7 @@ packages: '@jest/schemas': 29.4.0 '@types/istanbul-lib-coverage': 2.0.4 '@types/istanbul-reports': 3.0.1 - '@types/node': 18.11.18 + '@types/node': 18.14.0 '@types/yargs': 17.0.22 chalk: 4.1.2 dev: true @@ -1150,16 +1152,6 @@ packages: '@babel/types': 7.20.7 dev: true - /@types/chai-subset/1.3.3: - resolution: {integrity: sha512-frBecisrNGz+F4T6bcc+NLeolfiojh5FxW2klu669+8BARtyQv2C/GkNW6FUodVe4BroGMP/wER/YDGc7rEllw==} - dependencies: - '@types/chai': 4.3.4 - dev: true - - /@types/chai/4.3.4: - resolution: {integrity: sha512-KnRanxnpfpjUTqTCXslZSEdLfXExwgNxYPdiO2WGUj8+HDjFi8R3k5RVKPeSCzLjCcshCAtVO2QBbVuAV4kTnw==} - dev: true - /@types/cookie/0.4.1: resolution: {integrity: sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==} dev: true @@ -1173,7 +1165,7 @@ packages: /@types/graceful-fs/4.1.6: resolution: {integrity: sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw==} dependencies: - '@types/node': 18.11.18 + '@types/node': 18.14.0 dev: true /@types/istanbul-lib-coverage/2.0.4: @@ -1200,6 +1192,10 @@ packages: resolution: {integrity: sha512-DHQpWGjyQKSHj3ebjFI/wRKcqQcdR+MoFBygntYOZytCqNfkd2ZC4ARDJ2DQqhjH5p85Nnd3jhUJIXrszFX/JA==} dev: true + /@types/node/18.14.0: + resolution: {integrity: sha512-5EWrvLmglK+imbCJY0+INViFWUHg1AHel1sq4ZVSfdcNqGy9Edv3UB9IIzzg+xPaUcAgZYcfVs2fBcwDeZzU0A==} + dev: true + /@types/prettier/2.7.2: resolution: {integrity: sha512-KufADq8uQqo1pYKVIYzfKbJfBAc0sOeXqGbFaSpv8MRmC/zXgowNZmFcbngndGk922QDmOASEXUZCaY48gs4cg==} dev: true @@ -1253,12 +1249,6 @@ packages: hasBin: true dev: true - /acorn/8.8.2: - resolution: {integrity: sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==} - engines: {node: '>=0.4.0'} - hasBin: true - dev: true - /ansi-escapes/4.3.2: resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} engines: {node: '>=8'} @@ -1371,10 +1361,6 @@ packages: resolution: {integrity: sha512-TaTivMB6pYI1kXwrFlEhLeGfOqoDNdTxjCdwRfFFkEA30Eu+k48W34nlok2EYWJfFFzqaEmichdNM7th6M5HNw==} dev: true - /assertion-error/1.1.0: - resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==} - dev: true - /async-each-series/0.1.1: resolution: {integrity: sha512-p4jj6Fws4Iy2m0iCmI2am2ZNZCgbdgE+P8F/8csmn2vx7ixXrO2zGcuNsD46X5uZSVecmkEy/M06X2vG8KD6dQ==} engines: {node: '>=0.8.0'} @@ -1405,6 +1391,11 @@ packages: postcss-value-parser: 4.2.0 dev: true + /available-typed-arrays/1.0.5: + resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==} + engines: {node: '>= 0.4'} + dev: true + /axios/0.21.4_debug@4.3.2: resolution: {integrity: sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==} dependencies: @@ -1682,19 +1673,6 @@ packages: resolution: {integrity: sha512-qMBmvmQmFXaSxexkjjfMvD5rnDL0+m+dUMZKoDYsGG8iZN29RuYh9eRoMvKsT6uMAWlyUUGDEQGJJYjzCIO9ew==} dev: true - /chai/4.3.7: - resolution: {integrity: sha512-HLnAzZ2iupm25PlN0xFreAlBA5zaBSv3og0DdeGA4Ar6h6rJ3A0rolRUKJhSF2V10GZKDgWF/VmAEsNWjCRB+A==} - engines: {node: '>=4'} - dependencies: - assertion-error: 1.1.0 - check-error: 1.0.2 - deep-eql: 4.1.3 - get-func-name: 2.0.0 - loupe: 2.3.6 - pathval: 1.1.1 - type-detect: 4.0.8 - dev: true - /chalk/1.1.3: resolution: {integrity: sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==} engines: {node: '>=0.10.0'} @@ -1734,10 +1712,6 @@ packages: is-regex: 1.1.4 dev: true - /check-error/1.0.2: - resolution: {integrity: sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA==} - dev: true - /chokidar/3.5.3: resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} engines: {node: '>= 8.10.0'} @@ -1892,6 +1866,17 @@ packages: vary: 1.1.2 dev: true + /cross-spawn/6.0.5: + resolution: {integrity: sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==} + engines: {node: '>=4.8'} + dependencies: + nice-try: 1.0.5 + path-key: 2.0.1 + semver: 5.7.1 + shebang-command: 1.2.0 + which: 1.3.1 + dev: true + /cross-spawn/7.0.3: resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} engines: {node: '>= 8'} @@ -1946,18 +1931,19 @@ packages: resolution: {integrity: sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==} dev: true - /deep-eql/4.1.3: - resolution: {integrity: sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==} - engines: {node: '>=6'} - dependencies: - type-detect: 4.0.8 - dev: true - /deepmerge/4.3.0: resolution: {integrity: sha512-z2wJZXrmeHdvYJp/Ux55wIjqo81G5Bp4c+oELTW+7ar6SogWHajt5a9gO3s3IDaGSAXjDk0vlQKN3rms8ab3og==} engines: {node: '>=0.10.0'} dev: true + /define-properties/1.2.0: + resolution: {integrity: sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==} + engines: {node: '>= 0.4'} + dependencies: + has-property-descriptors: 1.0.0 + object-keys: 1.1.1 + dev: true + /defined/1.0.1: resolution: {integrity: sha512-hsBd2qSVCRE+5PmNdHt1uzyrFu5d3RwmFDKzyNZMFq/EwDNJF7Ee5+D5oEKF0hU6LhtoUF1macFvOe4AskQC1Q==} dev: true @@ -2180,6 +2166,63 @@ packages: is-arrayish: 0.2.1 dev: true + /es-abstract/1.21.1: + resolution: {integrity: sha512-QudMsPOz86xYz/1dG1OuGBKOELjCh99IIWHLzy5znUB6j8xG2yMA7bfTV86VSqKF+Y/H08vQPR+9jyXpuC6hfg==} + engines: {node: '>= 0.4'} + dependencies: + available-typed-arrays: 1.0.5 + call-bind: 1.0.2 + es-set-tostringtag: 2.0.1 + es-to-primitive: 1.2.1 + function-bind: 1.1.1 + function.prototype.name: 1.1.5 + get-intrinsic: 1.2.0 + get-symbol-description: 1.0.0 + globalthis: 1.0.3 + gopd: 1.0.1 + has: 1.0.3 + has-property-descriptors: 1.0.0 + has-proto: 1.0.1 + has-symbols: 1.0.3 + internal-slot: 1.0.5 + is-array-buffer: 3.0.1 + is-callable: 1.2.7 + is-negative-zero: 2.0.2 + is-regex: 1.1.4 + is-shared-array-buffer: 1.0.2 + is-string: 1.0.7 + is-typed-array: 1.1.10 + is-weakref: 1.0.2 + object-inspect: 1.12.3 + object-keys: 1.1.1 + object.assign: 4.1.4 + regexp.prototype.flags: 1.4.3 + safe-regex-test: 1.0.0 + string.prototype.trimend: 1.0.6 + string.prototype.trimstart: 1.0.6 + typed-array-length: 1.0.4 + unbox-primitive: 1.0.2 + which-typed-array: 1.1.9 + dev: true + + /es-set-tostringtag/2.0.1: + resolution: {integrity: sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==} + engines: {node: '>= 0.4'} + dependencies: + get-intrinsic: 1.2.0 + has: 1.0.3 + has-tostringtag: 1.0.0 + dev: true + + /es-to-primitive/1.2.1: + resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} + engines: {node: '>= 0.4'} + dependencies: + is-callable: 1.2.7 + is-date-object: 1.0.5 + is-symbol: 1.0.4 + dev: true + /esbuild-android-64/0.15.18: resolution: {integrity: sha512-wnpt3OXRhcjfIDSZu9bnzT4/TNTDsOUvip0foZOUBG7QbSt//w3QV4FInVJxNhKc/ErhUxc5z4QjHtMi7/TbgA==} engines: {node: '>=12'} @@ -2599,6 +2642,12 @@ packages: debug: 4.3.2 dev: true + /for-each/0.3.3: + resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} + dependencies: + is-callable: 1.2.7 + dev: true + /fraction.js/4.2.0: resolution: {integrity: sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==} dev: true @@ -2632,6 +2681,20 @@ packages: resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} dev: true + /function.prototype.name/1.1.5: + resolution: {integrity: sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.0 + es-abstract: 1.21.1 + functions-have-names: 1.2.3 + dev: true + + /functions-have-names/1.2.3: + resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} + dev: true + /gensync/1.0.0-beta.2: resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} engines: {node: '>=6.9.0'} @@ -2642,10 +2705,6 @@ packages: engines: {node: 6.* || 8.* || >= 10.*} dev: true - /get-func-name/2.0.0: - resolution: {integrity: sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig==} - dev: true - /get-intrinsic/1.2.0: resolution: {integrity: sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==} dependencies: @@ -2664,6 +2723,14 @@ packages: engines: {node: '>=10'} dev: true + /get-symbol-description/1.0.0: + resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + get-intrinsic: 1.2.0 + dev: true + /glob-parent/5.1.2: resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} engines: {node: '>= 6'} @@ -2705,6 +2772,19 @@ packages: engines: {node: '>=4'} dev: true + /globalthis/1.0.3: + resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==} + engines: {node: '>= 0.4'} + dependencies: + define-properties: 1.2.0 + dev: true + + /gopd/1.0.1: + resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} + dependencies: + get-intrinsic: 1.2.0 + dev: true + /graceful-fs/4.2.10: resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==} dev: true @@ -2743,6 +2823,10 @@ packages: ansi-regex: 2.1.1 dev: true + /has-bigints/1.0.2: + resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} + dev: true + /has-flag/3.0.0: resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} engines: {node: '>=4'} @@ -2753,6 +2837,17 @@ packages: engines: {node: '>=8'} dev: true + /has-property-descriptors/1.0.0: + resolution: {integrity: sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==} + dependencies: + get-intrinsic: 1.2.0 + dev: true + + /has-proto/1.0.1: + resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==} + engines: {node: '>= 0.4'} + dev: true + /has-symbols/1.0.3: resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} engines: {node: '>= 0.4'} @@ -2777,6 +2872,10 @@ packages: engines: {node: '>=12.0.0'} dev: true + /hosted-git-info/2.8.9: + resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} + dev: true + /html-escaper/2.0.2: resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} dev: true @@ -2877,6 +2976,15 @@ packages: resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} dev: true + /internal-slot/1.0.5: + resolution: {integrity: sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==} + engines: {node: '>= 0.4'} + dependencies: + get-intrinsic: 1.2.0 + has: 1.0.3 + side-channel: 1.0.4 + dev: true + /is-alphabetical/1.0.4: resolution: {integrity: sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==} dev: true @@ -2888,10 +2996,24 @@ packages: is-decimal: 1.0.4 dev: true + /is-array-buffer/3.0.1: + resolution: {integrity: sha512-ASfLknmY8Xa2XtB4wmbz13Wu202baeA18cJBCeCy0wXUHZF0IPyVEXqKEcd+t2fNSLLL1vC6k7lxZEojNbISXQ==} + dependencies: + call-bind: 1.0.2 + get-intrinsic: 1.2.0 + is-typed-array: 1.1.10 + dev: true + /is-arrayish/0.2.1: resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} dev: true + /is-bigint/1.0.4: + resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} + dependencies: + has-bigints: 1.0.2 + dev: true + /is-binary-path/2.1.0: resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} engines: {node: '>=8'} @@ -2899,16 +3021,36 @@ packages: binary-extensions: 2.2.0 dev: true + /is-boolean-object/1.1.2: + resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + has-tostringtag: 1.0.0 + dev: true + /is-buffer/1.1.6: resolution: {integrity: sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==} dev: true + /is-callable/1.2.7: + resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} + engines: {node: '>= 0.4'} + dev: true + /is-core-module/2.11.0: resolution: {integrity: sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==} dependencies: has: 1.0.3 dev: true + /is-date-object/1.0.5: + resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} + engines: {node: '>= 0.4'} + dependencies: + has-tostringtag: 1.0.0 + dev: true + /is-decimal/1.0.4: resolution: {integrity: sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==} dev: true @@ -2951,12 +3093,24 @@ packages: resolution: {integrity: sha512-6BEnpVn1rcf3ngfmViLM6vjUjGErbdrL4rwlv+u1NO1XO8kqT4YGL8+19Q+Z/bas8tY90BTWMk2+fW1g6hQjbA==} dev: true + /is-negative-zero/2.0.2: + resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==} + engines: {node: '>= 0.4'} + dev: true + /is-number-like/1.0.8: resolution: {integrity: sha512-6rZi3ezCyFcn5L71ywzz2bS5b2Igl1En3eTlZlvKjpz1n3IZLAYMbKYAIQgFmEu0GENg92ziU/faEOA/aixjbA==} dependencies: lodash.isfinite: 3.3.2 dev: true + /is-number-object/1.0.7: + resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} + engines: {node: '>= 0.4'} + dependencies: + has-tostringtag: 1.0.0 + dev: true + /is-number/7.0.0: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} engines: {node: '>=0.12.0'} @@ -2974,11 +3128,48 @@ packages: has-tostringtag: 1.0.0 dev: true + /is-shared-array-buffer/1.0.2: + resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==} + dependencies: + call-bind: 1.0.2 + dev: true + /is-stream/2.0.1: resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} engines: {node: '>=8'} dev: true + /is-string/1.0.7: + resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} + engines: {node: '>= 0.4'} + dependencies: + has-tostringtag: 1.0.0 + dev: true + + /is-symbol/1.0.4: + resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} + engines: {node: '>= 0.4'} + dependencies: + has-symbols: 1.0.3 + dev: true + + /is-typed-array/1.1.10: + resolution: {integrity: sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==} + engines: {node: '>= 0.4'} + dependencies: + available-typed-arrays: 1.0.5 + call-bind: 1.0.2 + for-each: 0.3.3 + gopd: 1.0.1 + has-tostringtag: 1.0.0 + dev: true + + /is-weakref/1.0.2: + resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} + dependencies: + call-bind: 1.0.2 + dev: true + /is-whitespace/0.3.0: resolution: {integrity: sha512-RydPhl4S6JwAyj0JJjshWJEFG6hNye3pZFBRZaTUfZFwGHxzppNaNOVgQuS/E/SlhrApuMXrpnK1EEIXfdo3Dg==} engines: {node: '>=0.10.0'} @@ -3071,7 +3262,7 @@ packages: '@jest/expect': 29.4.1 '@jest/test-result': 29.4.1 '@jest/types': 29.4.1 - '@types/node': 18.11.18 + '@types/node': 18.14.0 chalk: 4.1.2 co: 4.6.0 dedent: 0.7.0 @@ -3156,7 +3347,7 @@ packages: - supports-color dev: true - /jest-config/29.4.1_@types+node@18.11.18: + /jest-config/29.4.1_@types+node@18.14.0: resolution: {integrity: sha512-g7p3q4NuXiM4hrS4XFATTkd+2z0Ml2RhFmFPM8c3WyKwVDNszbl4E7cV7WIx1YZeqqCtqbtTtZhGZWJlJqngzg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: @@ -3171,7 +3362,7 @@ packages: '@babel/core': 7.20.12 '@jest/test-sequencer': 29.4.1 '@jest/types': 29.4.1 - '@types/node': 18.11.18 + '@types/node': 18.14.0 babel-jest: 29.4.1_@babel+core@7.20.12 chalk: 4.1.2 ci-info: 3.7.1 @@ -3230,7 +3421,7 @@ packages: '@jest/environment': 29.4.1 '@jest/fake-timers': 29.4.1 '@jest/types': 29.4.1 - '@types/node': 18.11.18 + '@types/node': 18.14.0 jest-mock: 29.4.1 jest-util: 29.4.1 dev: true @@ -3246,7 +3437,7 @@ packages: dependencies: '@jest/types': 29.4.1 '@types/graceful-fs': 4.1.6 - '@types/node': 18.11.18 + '@types/node': 18.14.0 anymatch: 3.1.3 fb-watchman: 2.0.2 graceful-fs: 4.2.10 @@ -3297,7 +3488,7 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.4.1 - '@types/node': 18.11.18 + '@types/node': 18.14.0 jest-util: 29.4.1 dev: true @@ -3352,7 +3543,7 @@ packages: '@jest/test-result': 29.4.1 '@jest/transform': 29.4.1 '@jest/types': 29.4.1 - '@types/node': 18.11.18 + '@types/node': 18.14.0 chalk: 4.1.2 emittery: 0.13.1 graceful-fs: 4.2.10 @@ -3383,7 +3574,7 @@ packages: '@jest/test-result': 29.4.1 '@jest/transform': 29.4.1 '@jest/types': 29.4.1 - '@types/node': 18.11.18 + '@types/node': 18.14.0 chalk: 4.1.2 cjs-module-lexer: 1.2.2 collect-v8-coverage: 1.0.1 @@ -3440,7 +3631,7 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.4.1 - '@types/node': 18.11.18 + '@types/node': 18.14.0 chalk: 4.1.2 ci-info: 3.7.1 graceful-fs: 4.2.10 @@ -3465,7 +3656,7 @@ packages: dependencies: '@jest/test-result': 29.4.1 '@jest/types': 29.4.1 - '@types/node': 18.11.18 + '@types/node': 18.14.0 ansi-escapes: 4.3.2 chalk: 4.1.2 emittery: 0.13.1 @@ -3477,7 +3668,7 @@ packages: resolution: {integrity: sha512-O9doU/S1EBe+yp/mstQ0VpPwpv0Clgn68TkNwGxL6/usX/KUW9Arnn4ag8C3jc6qHcXznhsT5Na1liYzAsuAbQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@types/node': 18.11.18 + '@types/node': 18.14.0 jest-util: 29.4.1 merge-stream: 2.0.0 supports-color: 8.1.1 @@ -3536,6 +3727,10 @@ packages: hasBin: true dev: true + /json-parse-better-errors/1.0.2: + resolution: {integrity: sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==} + dev: true + /json-parse-even-better-errors/2.3.1: resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} dev: true @@ -3632,9 +3827,14 @@ packages: resolution: {integrity: sha512-+dAZZ2mM+/m+vY9ezfoueVvrgnHIGi5FvgSymbIgJOFwiznWyA59mav95L+Mc6xPtL3s9gm5eNTlNtxJLbNM1g==} dev: true - /local-pkg/0.4.3: - resolution: {integrity: sha512-SFppqq5p42fe2qcZQqqEOiVRXl+WCP1MdT6k7BDEW1j++sp5fIY+/fdRQitvKgB5BrBcmrs5m/L0v2FrU5MY1g==} - engines: {node: '>=14'} + /load-json-file/4.0.0: + resolution: {integrity: sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==} + engines: {node: '>=4'} + dependencies: + graceful-fs: 4.2.10 + parse-json: 4.0.0 + pify: 3.0.0 + strip-bom: 3.0.0 dev: true /localtunnel/2.0.2: @@ -3693,12 +3893,6 @@ packages: resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} dev: true - /loupe/2.3.6: - resolution: {integrity: sha512-RaPMZKiMy8/JruncMU5Bt6na1eftNoo++R4Y+N2FrxkDVTrGvcyzFTsaGif4QTeKESheMGegbhw6iUAq+5A8zA==} - dependencies: - get-func-name: 2.0.0 - dev: true - /lru-cache/4.1.5: resolution: {integrity: sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==} dependencies: @@ -3784,6 +3978,11 @@ packages: resolution: {integrity: sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==} dev: true + /memorystream/0.3.1: + resolution: {integrity: sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==} + engines: {node: '>= 0.10.0'} + dev: true + /merge-stream/2.0.0: resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} dev: true @@ -3915,6 +4114,10 @@ packages: resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} dev: true + /nice-try/1.0.5: + resolution: {integrity: sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==} + dev: true + /node-int64/0.4.0: resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} dev: true @@ -3931,6 +4134,15 @@ packages: abbrev: 1.1.1 dev: true + /normalize-package-data/2.5.0: + resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} + dependencies: + hosted-git-info: 2.8.9 + resolve: 1.22.1 + semver: 5.7.1 + validate-npm-package-license: 3.0.4 + dev: true + /normalize-path/3.0.0: resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} engines: {node: '>=0.10.0'} @@ -3941,6 +4153,22 @@ packages: engines: {node: '>=0.10.0'} dev: true + /npm-run-all/4.1.5: + resolution: {integrity: sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ==} + engines: {node: '>= 4'} + hasBin: true + dependencies: + ansi-styles: 3.2.1 + chalk: 2.4.2 + cross-spawn: 6.0.5 + memorystream: 0.3.1 + minimatch: 3.1.2 + pidtree: 0.3.1 + read-pkg: 3.0.0 + shell-quote: 1.8.0 + string.prototype.padend: 3.1.4 + dev: true + /npm-run-path/4.0.1: resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} engines: {node: '>=8'} @@ -3978,6 +4206,21 @@ packages: resolution: {integrity: sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==} dev: true + /object-keys/1.1.1: + resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} + engines: {node: '>= 0.4'} + dev: true + + /object.assign/4.1.4: + resolution: {integrity: sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.0 + has-symbols: 1.0.3 + object-keys: 1.1.1 + dev: true + /on-finished/2.3.0: resolution: {integrity: sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==} engines: {node: '>= 0.8'} @@ -4042,6 +4285,14 @@ packages: engines: {node: '>=6'} dev: true + /parse-json/4.0.0: + resolution: {integrity: sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==} + engines: {node: '>=4'} + dependencies: + error-ex: 1.3.2 + json-parse-better-errors: 1.0.2 + dev: true + /parse-json/5.2.0: resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} engines: {node: '>=8'} @@ -4071,6 +4322,11 @@ packages: engines: {node: '>=0.10.0'} dev: true + /path-key/2.0.1: + resolution: {integrity: sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==} + engines: {node: '>=4'} + dev: true + /path-key/3.1.1: resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} engines: {node: '>=8'} @@ -4084,8 +4340,11 @@ packages: resolution: {integrity: sha512-JLyh7xT1kizaEvcaXOQwOc2/Yhw6KZOvPf1S8401UyLk86CU79LN3vl7ztXGm/pZ+YjoyAJ4rxmHwbkBXJX+yw==} dev: true - /pathval/1.1.1: - resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==} + /path-type/3.0.0: + resolution: {integrity: sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==} + engines: {node: '>=4'} + dependencies: + pify: 3.0.0 dev: true /picocolors/1.0.0: @@ -4097,11 +4356,22 @@ packages: engines: {node: '>=8.6'} dev: true + /pidtree/0.3.1: + resolution: {integrity: sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA==} + engines: {node: '>=0.10'} + hasBin: true + dev: true + /pify/2.3.0: resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} engines: {node: '>=0.10.0'} dev: true + /pify/3.0.0: + resolution: {integrity: sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==} + engines: {node: '>=4'} + dev: true + /pirates/4.0.5: resolution: {integrity: sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==} engines: {node: '>= 6'} @@ -4420,6 +4690,15 @@ packages: pify: 2.3.0 dev: true + /read-pkg/3.0.0: + resolution: {integrity: sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==} + engines: {node: '>=4'} + dependencies: + load-json-file: 4.0.0 + normalize-package-data: 2.5.0 + path-type: 3.0.0 + dev: true + /readdirp/3.6.0: resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} engines: {node: '>=8.10.0'} @@ -4441,6 +4720,15 @@ packages: slash: 1.0.0 dev: true + /regexp.prototype.flags/1.4.3: + resolution: {integrity: sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.0 + functions-have-names: 1.2.3 + dev: true + /require-directory/2.1.1: resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} engines: {node: '>=0.10.0'} @@ -4531,6 +4819,14 @@ packages: symbol-observable: 1.0.1 dev: true + /safe-regex-test/1.0.0: + resolution: {integrity: sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==} + dependencies: + call-bind: 1.0.2 + get-intrinsic: 1.2.0 + is-regex: 1.1.4 + dev: true + /safer-buffer/2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} dev: true @@ -4625,6 +4921,13 @@ packages: resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} dev: true + /shebang-command/1.2.0: + resolution: {integrity: sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==} + engines: {node: '>=0.10.0'} + dependencies: + shebang-regex: 1.0.0 + dev: true + /shebang-command/2.0.0: resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} engines: {node: '>=8'} @@ -4632,11 +4935,20 @@ packages: shebang-regex: 3.0.0 dev: true + /shebang-regex/1.0.0: + resolution: {integrity: sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==} + engines: {node: '>=0.10.0'} + dev: true + /shebang-regex/3.0.0: resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} engines: {node: '>=8'} dev: true + /shell-quote/1.8.0: + resolution: {integrity: sha512-QHsz8GgQIGKlRi24yFc6a6lN69Idnx634w49ay6+jA5yFh7a1UY+4Rp6HPx/L/1zcEDPEij8cIsiqR6bQsE5VQ==} + dev: true + /side-channel/1.0.4: resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} dependencies: @@ -4738,6 +5050,28 @@ packages: engines: {node: '>=0.10.0'} dev: true + /spdx-correct/3.1.1: + resolution: {integrity: sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==} + dependencies: + spdx-expression-parse: 3.0.1 + spdx-license-ids: 3.0.12 + dev: true + + /spdx-exceptions/2.3.0: + resolution: {integrity: sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==} + dev: true + + /spdx-expression-parse/3.0.1: + resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} + dependencies: + spdx-exceptions: 2.3.0 + spdx-license-ids: 3.0.12 + dev: true + + /spdx-license-ids/3.0.12: + resolution: {integrity: sha512-rr+VVSXtRhO4OHbXUiAF7xW3Bo9DuuF6C5jH+q/x15j2jniycgKbxU09Hr0WqlSLUs4i4ltHGXqTe7VHclYWyA==} + dev: true + /sprintf-js/1.0.3: resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} dev: true @@ -4797,6 +5131,31 @@ packages: strip-ansi: 6.0.1 dev: true + /string.prototype.padend/3.1.4: + resolution: {integrity: sha512-67otBXoksdjsnXXRUq+KMVTdlVRZ2af422Y0aTyTjVaoQkGr3mxl2Bc5emi7dOQ3OGVVQQskmLEWwFXwommpNw==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.0 + es-abstract: 1.21.1 + dev: true + + /string.prototype.trimend/1.0.6: + resolution: {integrity: sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==} + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.0 + es-abstract: 1.21.1 + dev: true + + /string.prototype.trimstart/1.0.6: + resolution: {integrity: sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==} + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.0 + es-abstract: 1.21.1 + dev: true + /strip-ansi/3.0.1: resolution: {integrity: sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==} engines: {node: '>=0.10.0'} @@ -4816,6 +5175,11 @@ packages: engines: {node: '>=0.10.0'} dev: true + /strip-bom/3.0.0: + resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} + engines: {node: '>=4'} + dev: true + /strip-bom/4.0.0: resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==} engines: {node: '>=8'} @@ -4831,12 +5195,6 @@ packages: engines: {node: '>=8'} dev: true - /strip-literal/0.4.2: - resolution: {integrity: sha512-pv48ybn4iE1O9RLgCAN0iU4Xv7RlBTiit6DKmMiErbs9x1wH6vXBs45tWc0H5wUIF6TLTrKweqkmYF/iraQKNw==} - dependencies: - acorn: 8.8.2 - dev: true - /supports-color/2.0.0: resolution: {integrity: sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==} engines: {node: '>=0.8.0'} @@ -4921,20 +5279,6 @@ packages: dlv: 1.1.3 dev: true - /tinybench/2.3.1: - resolution: {integrity: sha512-hGYWYBMPr7p4g5IarQE7XhlyWveh1EKhy4wUBS1LrHXCKYgvz+4/jCqgmJqZxxldesn05vccrtME2RLLZNW7iA==} - dev: true - - /tinypool/0.3.1: - resolution: {integrity: sha512-zLA1ZXlstbU2rlpA4CIeVaqvWq41MTWqLY3FfsAXgC8+f7Pk7zroaJQxDgxn1xNudKW6Kmj4808rPFShUlIRmQ==} - engines: {node: '>=14.0.0'} - dev: true - - /tinyspy/1.0.2: - resolution: {integrity: sha512-bSGlgwLBYf7PnUsQ6WOc6SJ3pGOcd+d8AA6EUnLDDM0kWEstC1JIlSZA3UNliDXhd9ABoS7hiRBDCu+XP/sf1Q==} - engines: {node: '>=14.0.0'} - dev: true - /tmpl/1.0.5: resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==} dev: true @@ -5031,6 +5375,14 @@ packages: engines: {node: '>=10'} dev: true + /typed-array-length/1.0.4: + resolution: {integrity: sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==} + dependencies: + call-bind: 1.0.2 + for-each: 0.3.3 + is-typed-array: 1.1.10 + dev: true + /typescript/4.9.5: resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==} engines: {node: '>=4.2.0'} @@ -5053,6 +5405,15 @@ packages: dev: true optional: true + /unbox-primitive/1.0.2: + resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} + dependencies: + call-bind: 1.0.2 + has-bigints: 1.0.2 + has-symbols: 1.0.3 + which-boxed-primitive: 1.0.2 + dev: true + /universalify/0.1.2: resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} engines: {node: '>= 4.0.0'} @@ -5092,6 +5453,13 @@ packages: convert-source-map: 1.9.0 dev: true + /validate-npm-package-license/3.0.4: + resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} + dependencies: + spdx-correct: 3.1.1 + spdx-expression-parse: 3.0.1 + dev: true + /vary/1.1.2: resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} engines: {node: '>= 0.8'} @@ -5130,40 +5498,6 @@ packages: fsevents: 2.3.2 dev: true - /vite/3.2.5_@types+node@18.11.18: - resolution: {integrity: sha512-4mVEpXpSOgrssFZAOmGIr85wPHKvaDAcXqxVxVRZhljkJOMZi1ibLibzjLHzJvcok8BMguLc7g1W6W/GqZbLdQ==} - engines: {node: ^14.18.0 || >=16.0.0} - hasBin: true - peerDependencies: - '@types/node': '>= 14' - less: '*' - sass: '*' - stylus: '*' - sugarss: '*' - terser: ^5.4.0 - peerDependenciesMeta: - '@types/node': - optional: true - less: - optional: true - sass: - optional: true - stylus: - optional: true - sugarss: - optional: true - terser: - optional: true - dependencies: - '@types/node': 18.11.18 - esbuild: 0.15.18 - postcss: 8.4.21 - resolve: 1.22.1 - rollup: 2.79.1 - optionalDependencies: - fsevents: 2.3.2 - dev: true - /vite/4.1.1: resolution: {integrity: sha512-LM9WWea8vsxhr782r9ntg+bhSFS06FJgCvvB0+8hf8UWtvaiDagKYWXndjfX6kGl74keHJUcpzrQliDXZlF5yg==} engines: {node: ^14.18.0 || >=16.0.0} @@ -5197,48 +5531,6 @@ packages: fsevents: 2.3.2 dev: true - /vitest/0.24.5: - resolution: {integrity: sha512-zw6JhPUHtLILQDe5Q39b/SzoITkG+R7hcFjuthp4xsi6zpmfQPOZcHodZ+3bqoWl4EdGK/p1fuMiEwdxgbGLOA==} - engines: {node: '>=v14.16.0'} - hasBin: true - peerDependencies: - '@edge-runtime/vm': '*' - '@vitest/browser': '*' - '@vitest/ui': '*' - happy-dom: '*' - jsdom: '*' - peerDependenciesMeta: - '@edge-runtime/vm': - optional: true - '@vitest/browser': - optional: true - '@vitest/ui': - optional: true - happy-dom: - optional: true - jsdom: - optional: true - dependencies: - '@types/chai': 4.3.4 - '@types/chai-subset': 1.3.3 - '@types/node': 18.11.18 - chai: 4.3.7 - debug: 4.3.4 - local-pkg: 0.4.3 - strip-literal: 0.4.2 - tinybench: 2.3.1 - tinypool: 0.3.1 - tinyspy: 1.0.2 - vite: 3.2.5_@types+node@18.11.18 - transitivePeerDependencies: - - less - - sass - - stylus - - sugarss - - supports-color - - terser - dev: true - /void-elements/3.1.0: resolution: {integrity: sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w==} engines: {node: '>=0.10.0'} @@ -5250,6 +5542,35 @@ packages: makeerror: 1.0.12 dev: true + /which-boxed-primitive/1.0.2: + resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} + dependencies: + is-bigint: 1.0.4 + is-boolean-object: 1.1.2 + is-number-object: 1.0.7 + is-string: 1.0.7 + is-symbol: 1.0.4 + dev: true + + /which-typed-array/1.1.9: + resolution: {integrity: sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==} + engines: {node: '>= 0.4'} + dependencies: + available-typed-arrays: 1.0.5 + call-bind: 1.0.2 + for-each: 0.3.3 + gopd: 1.0.1 + has-tostringtag: 1.0.0 + is-typed-array: 1.1.10 + dev: true + + /which/1.3.1: + resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} + hasBin: true + dependencies: + isexe: 2.0.0 + dev: true + /which/2.0.2: resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} engines: {node: '>= 8'}